@anzusystems/common-admin 1.40.0-alpha8 → 1.40.0-alpha9
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.
- package/dist/common-admin.es.d.ts +99 -0
- package/dist/common-admin.es.js +170 -164
- package/dist/{lib-AhJt8x2C.js → lib-KYXM_qbR.js} +5806 -5712
- package/dist/lib-KYXM_qbR.js.map +1 -0
- package/dist/{shortcut-buttons-flatpickr-sGV2AG8a.js → shortcut-buttons-flatpickr-17gqfSIp.js} +2 -2
- package/dist/{shortcut-buttons-flatpickr-sGV2AG8a.js.map → shortcut-buttons-flatpickr-17gqfSIp.js.map} +1 -1
- package/dist/{webfontloader--WfiIvT5.js → webfontloader-N1q46SIQ.js} +2 -2
- package/dist/{webfontloader--WfiIvT5.js.map → webfontloader-N1q46SIQ.js.map} +1 -1
- package/package.json +7 -7
- package/dist/lib-AhJt8x2C.js.map +0 -1
package/dist/lib-AhJt8x2C.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lib-AhJt8x2C.js","sources":["../src/components/ABooleanValue.vue","../src/components/ACard.vue","../src/utils/common.ts","../src/utils/string.ts","../src/components/injectionKeys.ts","../src/components/form/AFormTextField.vue","../src/components/form/AFormTextarea.vue","../src/components/form/ASystemEntityScope.vue","../src/components/ADatatablePagination.vue","../src/components/ADatatableConfigButton.vue","../src/components/ADatatableOrdering.vue","../src/components/ADialogToolbar.vue","../src/components/ALogData.vue","../node_modules/@kyvg/vue3-notification/dist/index.es.js","../src/plugins/i18n.ts","../src/model/error/AnzuFatalError.ts","../src/composables/statusCodes.ts","../src/model/error/AnzuApiForbiddenError.ts","../src/model/error/AnzuApiValidationError.ts","../src/model/error/AnzuApiResponseCodeError.ts","../src/model/error/AnzuApiForbiddenOperationError.ts","../src/composables/system/alerts.ts","../src/components/ACreateDialog.vue","../src/components/AAdminSwitcher.vue","../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/utc.js","../src/utils/datetime.ts","../src/components/ATimeTrackingFields.vue","../src/composables/filter/filterHelpers.ts","../src/components/filter/AFilterString.vue","../src/components/filter/AFilterMixed.vue","../src/components/filter/AFilterInteger.vue","../src/utils/event.ts","../src/components/buttons/filter/AFilterAdvancedButton.vue","../src/components/buttons/filter/AFilterSubmitButton.vue","../src/components/buttons/filter/AFilterResetButton.vue","../src/components/filter/AFilterWrapper.vue","../src/model/valueObject/Grant.ts","../src/components/permission/APermissionGrantEditor.vue","../src/model/valueObject/GrantOrigin.ts","../src/components/permission/APermissionValueChip.vue","../src/utils/object.ts","../src/types/OwnerAware.ts","../src/types/CreatedByAware.ts","../src/composables/system/ability.ts","../src/components/permission/Acl.vue","../src/components/ADatetime.vue","../node_modules/flatpickr/dist/esm/types/options.js","../node_modules/flatpickr/dist/esm/l10n/default.js","../node_modules/flatpickr/dist/esm/utils/index.js","../node_modules/flatpickr/dist/esm/utils/dom.js","../node_modules/flatpickr/dist/esm/utils/formatting.js","../node_modules/flatpickr/dist/esm/utils/dates.js","../node_modules/flatpickr/dist/esm/utils/polyfills.js","../node_modules/flatpickr/dist/esm/index.js","../node_modules/vue-flatpickr-component/dist/esm/events.js","../node_modules/vue-flatpickr-component/dist/esm/util.js","../node_modules/vue-flatpickr-component/dist/esm/component.js","../node_modules/flatpickr/dist/l10n/sk.js","../node_modules/flatpickr/dist/l10n/cs.js","../node_modules/flatpickr/dist/l10n/default.js","../src/validators/vuelidate/common/useValidateRequiredIf.ts","../src/composables/languageSettings.ts","../src/components/ADatetimePicker.vue","../src/components/form/AFormDatetimePicker.vue","../src/components/form/AFormFlagDatetimePicker.vue","../src/components/filter/AFilterDatetimePicker.vue","../src/composables/system/pagination.ts","../src/components/form/AFormRemoteAutocomplete.vue","../src/components/form/AFormRemoteCheckbox.vue","../src/components/form/AFormRemoteSwitch.vue","../src/components/form/AFormValueObjectOptionsSelect.vue","../src/components/filter/AFilterValueObjectOptionsSelect.vue","../src/components/filter/AFilterRemoteAutocomplete.vue","../src/components/filter/AFilterBooleanGroup.vue","../src/components/filter/AFilterBooleanSelect.vue","../src/model/valueObject/JobStatus.ts","../src/components/job/AJobStatusChip.vue","../src/model/commonConfig.ts","../src/components/ACachedChip.vue","../src/model/valueObject/LogLevel.ts","../src/components/log/ALogLevelChip.vue","../src/utils/number.ts","../src/components/ACopyText.vue","../src/components/AChipNoLink.vue","../src/components/AUserAndTimeTrackingFields.vue","../src/components/buttons/action/AActionCloseButton.vue","../src/components/buttons/action/AActionCreateButton.vue","../src/components/buttons/action/AActionDeleteButton.vue","../src/components/buttons/action/AActionEditButton.vue","../src/components/buttons/action/AActionSaveAndCloseButton.vue","../src/components/buttons/action/AActionSaveButton.vue","../src/components/buttons/table/ATableCopyIdButton.vue","../src/components/buttons/table/ATableDetailButton.vue","../src/components/buttons/table/ATableEditButton.vue","../src/components/buttons/ABtnSplit.vue","../src/composables/themeSettings.ts","../src/components/AThemeSelect.vue","../src/components/flags/FlagEn.vue","../src/components/flags/FlagEmpty.vue","../src/components/flags/FlagCountry.vue","../src/components/ALanguageSelect.vue","../src/components/systemBar/ASystemBarNewVersion.vue","../src/model/error/AnzuNewVersionFetchError.ts","../src/components/systemBar/ASystemBar.vue","../src/components/AAnzuUserAvatar.vue","../src/components/AAvatarColorPicker.vue","../src/components/ACurrentUserDropdown.vue","../src/components/form/AFormRemoteAutocompleteWithCached.vue","../src/components/view/ALoginView.vue","../src/components/view/ALogoutView.vue","../src/components/view/AUnauthorizedView.vue","../src/components/view/ANotFoundView.vue","../src/components/job/AJobDetailCommon.vue","../src/types/coreDam/Asset.ts","../src/model/coreDam/filter/AssetFilter.ts","../src/types/coreDam/AssetSelect.ts","../src/services/stores/coreDam/assetSelectStore.ts","../src/components/dam/assetSelect/composables/commonAdminCoreDamOptions.ts","../src/services/api/apiHelper.ts","../src/utils/response.ts","../src/services/api/apiFetchOne.ts","../src/services/api/queryBuilder.ts","../src/types/ApiResponse.ts","../src/services/api/apiFetchList.ts","../src/types/coreDam/DamConfig.ts","../src/components/damImage/uploadQueue/composables/damConfigApi.ts","../src/components/damImage/uploadQueue/composables/damAssetCustomFormApi.ts","../src/components/damImage/uploadQueue/composables/damConfigState.ts","../src/components/damImage/uploadQueue/api/damAssetApi.ts","../src/components/dam/assetSelect/composables/assetSelectListActions.ts","../src/components/dam/assetSelect/composables/assetSelectItemActions.ts","../src/assets/image/placeholder16x9.jpg","../src/components/dam/assetSelect/components/AssetImagePreview.vue","../src/utils/file.ts","../src/components/dam/assetSelect/components/AssetSelectTableRowItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTable.vue","../src/components/dam/assetSelect/composables/assetSelectGridView.ts","../src/components/dam/assetSelect/composables/assetSelectFilterSidebar.ts","../src/components/dam/assetSelect/components/AssetSelectListBar.vue","../src/components/dam/assetSelect/components/AssetSelectTilesItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTiles.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilterFormImage.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilterFormDefault.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilter.vue","../src/components/dam/assetSelect/AAssetSelect.vue","../node_modules/sortablejs/modular/sortable.esm.js","../node_modules/@vueuse/integrations/useSortable.mjs","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v1.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/utils/generator.ts","../src/components/sortable/sortableActions.ts","../src/components/sortable/sortableUtils.ts","../src/components/sortable/ASortable.vue","../src/components/sortable/sortableNestedActions.ts","../src/components/sortable/ASortableNestedItem.vue","../src/components/sortable/ASortableNested.vue","../src/components/subjectSelect/ASubjectSelect.vue","../src/components/customDataForm/useCustomDataForm.ts","../src/components/customDataForm/CustomDataFormElementTypes.ts","../src/validators/vuelidate/common/useValidateBetween.ts","../src/validators/vuelidate/common/useValidateEmail.ts","../src/validators/vuelidate/common/useValidateMaxLength.ts","../src/validators/vuelidate/common/useValidateMaxValue.ts","../src/validators/vuelidate/common/useValidateMinLength.ts","../src/validators/vuelidate/common/useValidateMinValue.ts","../src/validators/vuelidate/common/useValidateNumeric.ts","../src/validators/vuelidate/common/useValidateRequired.ts","../src/validators/vuelidate/common/useValidateSlug.ts","../src/validators/vuelidate/common/useValidateStringArrayItemLength.ts","../src/validators/vuelidate/common/useValidateUrl.ts","../src/validators/vuelidate/useValidate.ts","../src/components/customDataForm/ACustomDataFormElement.vue","../src/components/customDataForm/ACustomDataForm.vue","../src/components/file/composables/dropzone.ts","../src/components/file/composables/fileType.ts","../src/components/file/composables/formatAndSizeCheck.ts","../src/components/file/AFileDropzone.vue","../src/components/damImage/composables/commonAdminImageOptions.ts","../src/components/damImage/composables/imageActions.ts","../src/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper.ts","../src/types/coreDam/UploadQueue.ts","../src/types/coreDam/AssetFile.ts","../src/components/damImage/uploadQueue/composables/UploadQueueItemFactory.ts","../src/components/damImage/uploadQueue/composables/mimeTypeHelper.ts","../src/components/damImage/uploadQueue/composables/damUploadChunkSize.ts","../src/components/damImage/uploadQueue/api/damImageApi.ts","../src/components/damImage/uploadQueue/api/uploadApi.ts","../node_modules/rusha/dist/rusha.js","../src/components/damImage/uploadQueue/composables/uploadService.ts","../src/components/damImage/uploadQueue/composables/damNotificationsEventBus.ts","../src/components/damImage/uploadQueue/composables/damNotifications.ts","../src/components/damImage/uploadQueue/composables/assetSuggestions.ts","../src/composables/system/defineCached.ts","../src/services/api/apiFetchByIds.ts","../src/services/api/apiCreateOne.ts","../src/components/damImage/uploadQueue/api/keywordApi.ts","../src/components/damImage/uploadQueue/keyword/cachedKeywords.ts","../src/components/damImage/uploadQueue/api/authorApi.ts","../src/components/damImage/uploadQueue/author/cachedAuthors.ts","../src/components/damImage/uploadQueue/composables/uploadQueuesStore.ts","../src/components/file/AFileInput.vue","../src/components/damImage/composables/imageWidgetInkectionKeys.ts","../src/services/api/apiUpdateOne.ts","../src/services/api/apiDeleteOne.ts","../src/components/damImage/uploadQueue/api/imageApi.ts","../src/components/damImage/AImageWidgetSimple.vue","../src/components/damImage/uploadQueue/composables/imageStore.ts","../src/components/damImage/uploadQueue/composables/uploadValidations.ts","../src/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue","../src/components/damImage/uploadQueue/composables/assetDetailStore.ts","../src/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue","../src/composables/datetime/remainingTime.ts","../src/assets/dam-meta-icons/2k.svg","../src/assets/dam-meta-icons/4k.svg","../src/assets/dam-meta-icons/8k.svg","../src/assets/dam-meta-icons/qhd.svg","../src/assets/dam-meta-icons/fhd.svg","../src/assets/dam-meta-icons/slot.svg","../src/assets/dam-meta-icons/low.svg","../src/assets/dam-meta-icons/rss.svg","../src/components/damImage/uploadQueue/composables/assetImageIconsConfig.ts","../src/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue","../src/components/damImage/uploadQueue/components/AssetImage.vue","../src/components/damImage/uploadQueue/composables/assetFileFailReason.ts","../src/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue","../src/components/damImage/uploadQueue/components/AssetInfobox.vue","../src/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue","../src/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue","../src/components/dam/AColorBox.vue","../src/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue","../src/components/damImage/uploadQueue/author/authorActions.ts","../src/components/damImage/uploadQueue/author/AuthorFilter.ts","../src/components/damImage/uploadQueue/author/AuthorType.ts","../src/components/damImage/uploadQueue/author/authorValidation.ts","../src/components/damImage/uploadQueue/author/AuthorFactory.ts","../src/components/damImage/uploadQueue/author/AuthorCreateButton.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/keyword/keywordActions.ts","../src/components/damImage/uploadQueue/keyword/KeywordFilter.ts","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue","../src/components/damImage/uploadQueue/keyword/KeywordFactory.ts","../src/components/damImage/uploadQueue/keyword/keywordValidation.ts","../src/components/damImage/uploadQueue/keyword/KeywordCreateButton.vue","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/components/AssetMetadata.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue","../src/components/damImage/uploadQueue/composables/imageRoiStore.ts","../src/components/damImage/uploadQueue/components/AssetFileRotate.vue","../src/components/damImage/uploadQueue/api/damImageRoiApi.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue","../src/components/damImage/uploadQueue/composables/cropperJsService.ts","../node_modules/cropperjs/dist/cropper.esm.js","../src/components/ACropperjs.vue","../src/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialog.vue","../src/components/damImage/uploadQueue/composables/uploadQueueDialog.ts","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue","../src/components/damImage/uploadQueue/components/ImageWidgetInner.vue","../src/components/damImage/AImageWidget.vue","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue","../src/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue","../src/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue","../src/components/damImage/uploadQueue/composables/uploadQueueMassOperations.ts","../src/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueEditable.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialog.vue","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue","../src/components/damImage/AImageWidgetMultiple.vue","../src/components/damImage/AImageWidgetMultipleSimple.vue","../src/composables/system/datatableColumns.ts","../src/components/subjectSelect/useSubjectSelect.ts","../src/components/subjectSelect/selectStrategies.ts","../src/utils/boolean.ts","../src/model/factory/AnzuUserFactory.ts","../src/model/factory/PermissionConfigFactory.ts","../src/model/factory/PermissionGroupFactory.ts","../src/services/api/apiAnyRequest.ts","../src/services/api/apiFetchListBatch.ts","../src/composables/system/error.ts","../src/services/api/job/jobApi.ts","../src/model/valueObject/JobBaseResource.ts","../src/AnzuSystemsCommonAdmin.ts","../src/utils/array.ts","../src/utils/history.ts","../src/locales/cs.ts","../src/locales/en.ts","../src/locales/sk.ts","../src/model/commonVuetifyConfig.ts","../src/plugins/webfontloader.ts","../src/model/factory/JobFactory.ts","../src/composables/system/loginStatus.ts"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string | boolean\n chip?: boolean\n invertColor?: boolean\n }>(),\n {\n chip: false,\n invertColor: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst booleanValue = computed(() => {\n return props.value === true || props.value === 1 || props.value === 'true'\n})\n\nconst text = computed(() => {\n if (booleanValue.value) {\n return t('common.model.boolean.true')\n }\n return t('common.model.boolean.false')\n})\n\nconst color = computed(() => {\n if (props.invertColor) {\n return booleanValue.value ? 'error' : 'success'\n }\n return booleanValue.value ? 'success' : 'error'\n})\n</script>\n\n<template>\n <VChip\n v-if=\"chip\"\n :color=\"color\"\n label\n size=\"small\"\n >\n {{ text }}\n </VChip>\n <span v-else>{{ text }}</span>\n</template>\n","<script lang=\"ts\" setup>\nimport ACardLoader from '@/components/ACardLoader.vue'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n loading?: boolean\n title?: string\n }>(),\n {\n loading: undefined,\n title: undefined,\n }\n)\n\nconst loadingComputed = computed(() => {\n return props.loading ? 'primary' : false\n})\n</script>\n\n<template>\n <VCard\n :title=\"title\"\n variant=\"flat\"\n :loading=\"loadingComputed\"\n >\n <ACardLoader :loading=\"loading\" />\n <slot />\n </VCard>\n</template>\n","import type { DocId } from '@/types/common'\nimport { isProxy, isRef, toRaw, unref } from 'vue'\n\nexport const isUndefined = (value: unknown): value is undefined => {\n return typeof value === 'undefined'\n}\n\nexport const isDefined = <T>(value: T | undefined): value is T => {\n return !isUndefined(value)\n}\n\nexport const isNull = (value: unknown): value is null => {\n return value === null\n}\n\nexport const isNumber = (value: unknown): value is number => {\n return typeof value === 'number'\n}\n\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string'\n}\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const isArray = <T = unknown>(value: unknown): value is Array<T> => {\n return Array.isArray(value)\n}\n\nexport const isFunction = <T extends (...args: any[]) => any>(value: unknown): value is T => {\n return typeof value === 'function'\n}\n\nexport const isBoolean = (value: unknown): value is boolean => {\n return typeof value === 'boolean'\n}\n\nexport const isDocId = (value: unknown): value is DocId => {\n return isString(value) && /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(value)\n}\n\nexport const isInt = (value: any): value is number => {\n const x = parseFloat(value)\n\n return !isNaN(value) && (x | 0) === x\n}\n\nexport const isObject = (value: unknown): value is object => {\n return typeof value === 'object' && !isArray(value) && !isNull(value)\n}\n\nexport const isEmptyObject = <T>(value: T): value is T => {\n if (isObject(value)) {\n return Object.keys(value).length === 0\n }\n return false\n}\n\nexport const isEmptyArray = (value: unknown): value is [] => {\n return isArray(value) && value.length === 0\n}\n\nexport const isEmpty = (value: unknown): boolean => {\n return (\n isNull(value) || isUndefined(value) || value === '' || value === 0 || isEmptyArray(value) || isEmptyObject(value)\n )\n}\n/**\n * Use only for objects with some primitives like:\n * number, string, boolean, null. Not supported: function, undefined, symbol, ...\n */\nexport const cloneDeep = <T>(object: T) => {\n if (typeof structuredClone === 'function') {\n try {\n if (isProxy(object)) {\n return structuredClone(toRaw(object)) as T\n }\n if (isRef(object)) {\n return structuredClone(unref(object)) as T\n }\n return structuredClone(object) as T\n } catch (error) {\n return JSON.parse(JSON.stringify(object)) as T\n }\n }\n return JSON.parse(JSON.stringify(object)) as T\n}\n","import type { UrlParams } from '@/services/api/apiHelper'\nimport { isNull, isUndefined } from '@/utils/common'\n\nexport const stringToInt = (value: any, fallbackValue = 0): number => {\n let check = fallbackValue\n try {\n check = Number.parseInt(value, 10)\n } catch {\n return fallbackValue\n }\n\n if (Number.isNaN(check)) {\n return fallbackValue\n }\n\n return check\n}\n\nexport const stringToFloat = (value: any, fallbackValue = 0): number => {\n let check = fallbackValue\n try {\n check = Number.parseFloat(value)\n } catch {\n return fallbackValue\n }\n\n if (Number.isNaN(check)) {\n return fallbackValue\n }\n\n return check\n}\n\nexport const stringSplitOnFirstOccurrence = (value: string, delimiter = '') => {\n const index = value.indexOf(delimiter)\n\n return {\n start: value.slice(0, index),\n end: value.slice(index + delimiter.length),\n }\n}\n\nexport const stringToSlug = (value: string) => {\n return value\n .toString()\n .toLowerCase()\n .trim()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/&/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '')\n}\n\ntype Kebab<T extends string, A extends string = ''> = T extends `${infer F}${infer R}`\n ? Kebab<R, `${A}${F extends Lowercase<F> ? '' : '-'}${Lowercase<F>}`>\n : A\n\nexport const stringToKebabCase = <T extends string>(value: T): Kebab<T> =>\n value.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase() as Kebab<T>\n\nexport const stringTrimLength = (value: string, maxLength = 80): string => {\n if (value.length > maxLength) {\n return value.substring(1, maxLength) + '...'\n }\n\n return value\n}\n\n/**\n * Converts colon parameters to real values from params.\n *\n * @param template url containing colon parameters, example: '/:id/edit'\n * @param params object containing real values to be replaced, example: { id:5 }\n */\nexport const stringUrlTemplateReplace = (template: string, params: UrlParams) => {\n if (template.indexOf(':') === -1) return template\n const newParts: string[] = []\n const parts = template.split('/')\n parts.forEach((part, index) => {\n newParts[index] = part\n if (!part.startsWith(':')) return\n const key = part.substring(1)\n if (!isUndefined(params[key])) newParts[index] = params[part.substring(1)] + ''\n })\n return newParts.join('/')\n}\n\n/**\n * Converts colon parameters to real values from params. Same as above but it additionally supports vue router regexp.\n *\n * @param template url containing colon parameters, example: '/:id(\\\\d+)/edit'\n * @param params object containing real values to be replaced, example: { id:5 }\n */\nexport const stringUrlTemplateReplaceVueRouter = (template: string, params: UrlParams) => {\n if (template.indexOf(':') === -1) return template\n const newParts: string[] = []\n const parts = template.split('/')\n parts.forEach((part: string, index: number) => {\n newParts[index] = part\n if (!part.startsWith(':')) return\n newParts[index] = part.substring(1)\n const regex = /^:([a-zA-Z0-9_-]+).*/\n const match = part.match(regex)\n if (isNull(match) || !match[1]) return\n if (!isUndefined(params[match[1]])) newParts[index] = params[match[1]] + ''\n })\n return newParts.join('/')\n}\n\n/**\n * Slot names with dots are not valid, Vue takes dots as modifiers, so we must replace dots with dash.\n */\nexport const stringNormalizeForSlotName = (name: string) => name.replace('.', '-')\n\nexport const stringIsValidEmail = (email: string): boolean => {\n const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,63}$/\n return emailRegex.test(email)\n}\n","import type { InjectionKey } from 'vue'\nimport type { CurrentUserType, CustomAclResolver } from '@/AnzuSystemsCommonAdmin'\nimport type { LanguageCode } from '@/composables/languageSettings'\n\nexport const SystemScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SystemScope')\nexport const SubjectScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SubjectScope')\nexport const CurrentUserSymbol: InjectionKey<CurrentUserType | undefined> = Symbol.for('anzu:CurrentUser')\nexport const CustomAclResolverSymbol: InjectionKey<CustomAclResolver | undefined> = Symbol.for('anzu:CustomAclResolver')\nexport const AvailableLanguagesSymbol: InjectionKey<LanguageCode[] | undefined> = Symbol.for('anzu:AvailableLanguages')\nexport const DefaultLanguageSymbol: InjectionKey<LanguageCode | undefined> = Symbol.for('anzu:DefaultLanguage')\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { VuetifyIconValue } from '@/types/Vuetify'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | number | null | undefined\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n prependIcon?: VuetifyIconValue\n appendIcon?: VuetifyIconValue\n dataCy?: string\n hideLabel?: boolean\n type?: string\n step?: number\n maxlength?: number | undefined\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n prependIcon: undefined,\n appendIcon: undefined,\n dataCy: undefined,\n hideLabel: false,\n type: 'text',\n step: undefined,\n maxlength: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string | number | null | undefined): void\n (e: 'click:append', data: string | number | null | undefined): void\n (e: 'blur', data: string | number | null | undefined): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onUpdate = (newValue: string) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <VTextField\n :prepend-icon=\"prependIcon\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :model-value=\"modelValue\"\n :required=\"requiredComputed\"\n :type=\"type\"\n :step=\"step\"\n :append-icon=\"appendIcon\"\n :maxlength=\"maxlength\"\n trim\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @update:model-value=\"onUpdate($event)\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </template>\n </VTextField>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { VuetifyIconValue } from '@/types/Vuetify'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | null // todo check number and null\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n prependIcon?: VuetifyIconValue\n appendIcon?: VuetifyIconValue\n dataCy?: string\n hideLabel?: boolean\n rows?: number\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n prependIcon: undefined,\n appendIcon: undefined,\n dataCy: undefined,\n hideLabel: false,\n rows: 1,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string | null): void\n (e: 'click:append', data: string | null): void\n (e: 'blur', data: string | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onUpdate = (newValue: string) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <VTextarea\n :prepend-icon=\"prependIcon\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :model-value=\"modelValue\"\n :required=\"requiredComputed\"\n :rows=\"rows\"\n auto-grow\n :append-icon=\"appendIcon\"\n trim\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @update:model-value=\"onUpdate($event)\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </template>\n </VTextarea>\n</template>\n","<script lang=\"ts\" setup>\nimport { provide } from 'vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n system: string\n subject: string\n }>(),\n {}\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SystemScopeSymbol, props.system)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SubjectScopeSymbol, props.subject)\n</script>\n\n<template>\n <slot />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\nimport { cloneDeep, isNull } from '@/utils/common'\nimport type { Pagination } from '@/types/Pagination'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Pagination\n itemsPerPageOptions?: number[]\n hideRecordsPerPage?: boolean\n }>(),\n {\n itemsPerPageOptions: () => [10, 25, 50],\n hideRecordsPerPage: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n (e: 'update:modelValue', data: Pagination): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: Pagination) {\n emit('update:modelValue', cloneDeep(newValue))\n },\n})\n\nconst { t } = useI18n()\n\nconst lastPage = computed(() => {\n return Math.ceil(modelValueComputed.value.totalCount / modelValueComputed.value.rowsPerPage)\n})\n\nconst displayedFrom = computed(() => {\n return modelValueComputed.value.page * modelValueComputed.value.rowsPerPage - modelValueComputed.value.rowsPerPage + 1\n})\n\nconst displayedTo = computed(() => {\n return (\n modelValueComputed.value.page * modelValueComputed.value.rowsPerPage -\n modelValueComputed.value.rowsPerPage +\n modelValueComputed.value.currentViewCount\n )\n})\n\nconst disabledFirstAndPrev = computed(() => {\n return modelValueComputed.value.page === 1\n})\n\nconst disabledLast = computed(() => {\n return !isNull(modelValueComputed.value.hasNextPage) || modelValueComputed.value.page === lastPage.value\n})\n\nconst disabledNext = computed(() => {\n return (\n (isNull(modelValueComputed.value.hasNextPage) && modelValueComputed.value.page === lastPage.value) ||\n modelValueComputed.value.hasNextPage === false\n )\n})\n\nconst computedTotalCountText = computed(() => {\n if (!isNull(modelValueComputed.value.hasNextPage)) {\n return modelValueComputed.value.hasNextPage ? displayedTo.value + 1 + '+' : displayedTo.value\n }\n return modelValueComputed.value.totalCount\n})\n\nconst rowsPerPageComputed = computed(() => {\n return modelValueComputed.value.rowsPerPage\n})\nwatch(rowsPerPageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n modelValueComputed.value.page = 1\n emit('change')\n }\n})\nconst pageComputed = computed(() => {\n return modelValueComputed.value.page\n})\nwatch(pageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('change')\n }\n})\n\nconst onClickFirst = () => {\n modelValueComputed.value.page = 1\n}\n\nconst onClickLast = () => {\n modelValueComputed.value.page = lastPage.value\n}\n\nconst onClickPrev = () => {\n modelValueComputed.value.page = modelValueComputed.value.page - 1\n}\n\nconst onClickNext = () => {\n modelValueComputed.value.page = modelValueComputed.value.page + 1\n}\n</script>\n\n<template>\n <div class=\"anzu-data-footer\">\n <div\n v-if=\"!hideRecordsPerPage\"\n class=\"anzu-data-footer__page-limit\"\n >\n {{ t('common.system.datatable.itemsPerPage') }}:\n <VBtnToggle\n v-model=\"modelValueComputed.rowsPerPage\"\n class=\"ml-2\"\n density=\"compact\"\n mandatory\n data-cy=\"table-size\"\n >\n <VBtn\n v-for=\"item in itemsPerPageOptions\"\n :key=\"item\"\n :color=\"item === modelValueComputed.rowsPerPage ? 'secondary' : ''\"\n :value=\"item\"\n density=\"compact\"\n size=\"small\"\n variant=\"text\"\n >\n {{ item }}\n </VBtn>\n </VBtnToggle>\n </div>\n <div class=\"anzu-data-footer__pagination\">\n {{ displayedFrom }} - {{ displayedTo }} {{ t('common.system.datatable.from') }} {{ computedTotalCountText }}\n </div>\n <div class=\"anzu-data-footer__icons-before\">\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-page-first\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickFirst\"\n />\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-chevron-left\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickPrev\"\n />\n </div>\n <div class=\"current-page\">\n <span>{{ modelValueComputed.page }}</span>\n </div>\n <div class=\"anzu-data-footer__icons-after\">\n <VBtn\n :disabled=\"disabledNext\"\n icon=\"mdi-chevron-right\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickNext\"\n />\n <VBtn\n :disabled=\"disabledLast\"\n icon=\"mdi-page-last\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickLast\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-data-footer {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.75rem;\n padding: 0 8px;\n\n > div.current-page {\n padding-left: 10px;\n padding-right: 10px;\n user-select: none;\n min-width: 40px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n\n &__page-limit {\n display: flex;\n align-items: center;\n flex: 0 0 0;\n justify-content: flex-end;\n white-space: nowrap;\n margin-right: 14px;\n }\n\n &__pagination {\n display: block;\n text-align: center;\n margin: 0 32px 0 24px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ColumnInternalValues } from '@/composables/system/datatableColumns'\nimport { cloneDeep } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n columnsAll: ColumnInternalValues[]\n columnsHidden: Array<string>\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n buttonT: 'common.system.datatable.config',\n buttonClass: 'ml-1',\n dataCy: 'table-settings',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:columnsHidden', data: Array<string>): void\n}>()\n\nconst { t } = useI18n()\n\nconst isVisible = (key: string) => {\n return !props.columnsHidden.includes(key)\n}\n\nconst toggleVisibility = (key: string) => {\n const cloned = cloneDeep(props.columnsHidden)\n const index = cloned.indexOf(key)\n if (index > -1) {\n cloned.splice(index, 1)\n emit('update:columnsHidden', cloned)\n return\n }\n cloned.push(key)\n emit('update:columnsHidden', cloned)\n}\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n color=\"light\"\n icon\n size=\"x-small\"\n variant=\"text\"\n >\n <VIcon icon=\"mdi-cog\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n <VMenu activator=\"parent\">\n <VCard>\n <VList density=\"compact\">\n <VListItem>\n <VListItemTitle>\n <strong>{{ t('common.system.datatable.displayCols') }}</strong>\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-for=\"column in columnsAll\"\n :key=\"column.key\"\n @click.stop=\"toggleVisibility(column.key)\"\n >\n <VListItemTitle>\n <VIcon\n v-if=\"isVisible(column.key)\"\n class=\"mr-2\"\n icon=\"mdi-checkbox-marked\"\n />\n <VIcon\n v-else\n class=\"mr-2\"\n icon=\"mdi-checkbox-blank-outline\"\n />\n {{ column.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DatatableOrderingOption, DatatableOrderingOptions } from '@/composables/system/datatableColumns'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n variant?: 'default' | 'most-relevant'\n modelValue?: number\n customOptions?: undefined | DatatableOrderingOptions\n }>(),\n {\n variant: 'default',\n modelValue: 1,\n customOptions: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: number): void\n (e: 'sortByChange', data: DatatableOrderingOption): void\n}>()\n\nconst { t } = useI18n()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst active = ref(props.modelValue)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: number) {\n active.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst defaultItems: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: 'desc' } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: 'asc' } },\n]\n\nconst defaultItemsMostRelevant: DatatableOrderingOptions = [\n { id: 3, titleT: 'common.system.datatable.ordering.mostRelevant' },\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: 'desc' } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: 'asc' } },\n]\n\nconst activeTitle = computed(() => {\n const found = options.value.find((item: any) => item.id === active.value)\n if (found) return t(found.titleT)\n return ''\n})\n\nconst options = computed(() => {\n if (props.customOptions) return props.customOptions\n if (props.variant === 'most-relevant') return defaultItemsMostRelevant\n return defaultItems\n})\n\nconst onItemClick = (item: DatatableOrderingOption) => {\n modelValueComputed.value = item.id\n}\n\nwatch(\n active,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n const found = options.value.find((item: any) => item.id === newValue)\n if (found) emit('sortByChange', found)\n },\n { immediate: true }\n)\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n active.value = newValue\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"d-flex align-center justify-center\">\n <div class=\"text-caption mr-1\">\n {{ t('common.system.datatable.ordering.title') }}:\n </div>\n <VBtn\n variant=\"text\"\n rounded=\"xl\"\n size=\"small\"\n append-icon=\"mdi-chevron-down\"\n >\n {{ activeTitle }}\n <VMenu\n activator=\"parent\"\n location=\"bottom\"\n close-on-content-click\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <VListItem\n v-for=\"item in options\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle :class=\"{ 'font-weight-bold': item.id === active }\">\n {{ t(item.titleT) }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n","<script setup lang=\"ts\">\nconst emit = defineEmits<{\n (e: 'onCancel'): void\n}>()\n\nconst onCancel = () => {\n emit('onCancel')\n}\n</script>\n\n<template>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n >\n <VToolbarTitle class=\"flex-fill\">\n <slot />\n </VToolbarTitle>\n <VSpacer />\n <VBtn\n class=\"ml-2\"\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n data-cy=\"button-close\"\n @click.stop=\"onCancel\"\n />\n </VToolbar>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n data: any\n }>(),\n {}\n)\n\nconst computedData = computed(() => {\n return props.data\n})\n\nwatch(\n computedData,\n (newValue) => {\n console.log(newValue)\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div />\n</template>\n","(function(){var o;\"use strict\";try{if(typeof document<\"u\"){var e=document.createElement(\"style\");e.nonce=(o=document.head.querySelector(\"meta[property=csp-nonce]\"))==null?void 0:o.content,e.appendChild(document.createTextNode(\".vue-notification-group{display:block;position:fixed;z-index:5000}.vue-notification-wrapper{display:block;overflow:hidden;width:100%;margin:0;padding:0}.notification-title{font-weight:600}.vue-notification-template{display:block;box-sizing:border-box;background:white;text-align:left}.vue-notification{display:block;box-sizing:border-box;text-align:left;font-size:12px;padding:10px;margin:0 5px 5px;color:#fff;background:#44A4FC;border-left:5px solid #187FE7}.vue-notification.warn{background:#ffb648;border-left-color:#f48a06}.vue-notification.error{background:#E54D42;border-left-color:#b82e24}.vue-notification.success{background:#68CD86;border-left-color:#42a85f}.vn-fade-enter-active,.vn-fade-leave-active,.vn-fade-move{transition:all .5s}.vn-fade-enter-from,.vn-fade-leave-to{opacity:0}\")),document.head.appendChild(e)}}catch(i){console.error(\"vite-plugin-css-injected-by-js\",i)}})();\nimport { defineComponent as $, openBlock as l, createBlock as A, TransitionGroup as z, withCtx as I, renderSlot as b, ref as T, computed as g, onMounted as ct, createElementBlock as m, normalizeStyle as M, resolveDynamicComponent as ut, Fragment as D, renderList as ft, normalizeClass as R, createElementVNode as E, createCommentVNode as V, toDisplayString as Y } from \"vue\";\nconst F = /* @__PURE__ */ new Map();\nclass pt {\n constructor(o, n, s) {\n this.remaining = n, this.callback = o, this.notifyItem = s, this.resume();\n }\n pause() {\n clearTimeout(this.notifyItem.timer), this.remaining -= Date.now() - this.start;\n }\n resume() {\n this.start = Date.now(), clearTimeout(this.notifyItem.timer), this.notifyItem.timer = setTimeout(this.callback, this.remaining);\n }\n}\nfunction dt(e) {\n return { all: e = e || /* @__PURE__ */ new Map(), on: function(o, n) {\n var s = e.get(o);\n s ? s.push(n) : e.set(o, [n]);\n }, off: function(o, n) {\n var s = e.get(o);\n s && (n ? s.splice(s.indexOf(n) >>> 0, 1) : e.set(o, []));\n }, emit: function(o, n) {\n var s = e.get(o);\n s && s.slice().map(function(r) {\n r(n);\n }), (s = e.get(\"*\")) && s.slice().map(function(r) {\n r(o, n);\n });\n } };\n}\nconst x = dt(), w = \"[-+]?[0-9]*.?[0-9]+\", G = [\n {\n name: \"px\",\n regexp: new RegExp(`^${w}px$`)\n },\n {\n name: \"%\",\n regexp: new RegExp(`^${w}%$`)\n },\n /**\n * Fallback option\n * If no suffix specified, assigning \"px\"\n */\n {\n name: \"px\",\n regexp: new RegExp(`^${w}$`)\n }\n], mt = (e) => {\n if (e === \"auto\")\n return {\n type: e,\n value: 0\n };\n for (let o = 0; o < G.length; o++) {\n const n = G[o];\n if (n.regexp.test(e))\n return {\n type: n.name,\n value: parseFloat(e)\n };\n }\n return {\n type: \"\",\n value: e\n };\n}, yt = (e) => {\n switch (typeof e) {\n case \"number\":\n return { type: \"px\", value: e };\n case \"string\":\n return mt(e);\n default:\n return { type: \"\", value: e };\n }\n}, j = {\n x: /* @__PURE__ */ new Set([\"left\", \"center\", \"right\"]),\n y: /* @__PURE__ */ new Set([\"top\", \"bottom\"])\n}, ht = ((e) => () => e++)(0), gt = (e) => typeof e != \"string\" ? [] : e.split(/\\s+/gi).filter(Boolean), vt = (e) => {\n typeof e == \"string\" && (e = gt(e));\n let o = null, n = null;\n return e.forEach((s) => {\n j.y.has(s) && (n = s), j.x.has(s) && (o = s);\n }), { x: o, y: n };\n}, k = {\n position: [\"top\", \"right\"],\n cssAnimation: \"vn-fade\",\n velocityAnimation: {\n enter: (e) => ({\n height: [e.clientHeight, 0],\n opacity: [1, 0]\n }),\n leave: {\n height: 0,\n opacity: [0, 1]\n }\n }\n}, _t = /* @__PURE__ */ $({\n __name: \"VelocityGroup\",\n emits: [\"enter\", \"leave\", \"after-leave\"],\n setup(e, { emit: o }) {\n const n = (c, f) => {\n o(\"enter\", c, f);\n }, s = (c, f) => {\n o(\"leave\", c, f);\n }, r = () => {\n o(\"after-leave\");\n };\n return (c, f) => (l(), A(z, {\n tag: \"span\",\n css: !1,\n onEnter: n,\n onLeave: s,\n onAfterLeave: r\n }, {\n default: I(() => [\n b(c.$slots, \"default\")\n ]),\n _: 3\n }));\n }\n}), xt = /* @__PURE__ */ $({\n inheritAttrs: !1,\n __name: \"CssGroup\",\n props: {\n name: {}\n },\n setup(e) {\n return (o, n) => (l(), A(z, {\n tag: \"span\",\n name: o.name\n }, {\n default: I(() => [\n b(o.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"name\"]));\n }\n}), Tt = [\"data-id\"], Dt = [\"onClick\"], Et = [\"innerHTML\"], wt = [\"innerHTML\"], kt = {\n key: 0,\n class: \"notification-title\"\n}, $t = { class: \"notification-content\" }, At = /* @__PURE__ */ $({\n __name: \"Notifications\",\n props: {\n group: { default: \"\" },\n width: { default: 300 },\n reverse: { type: Boolean, default: !1 },\n position: { default: k.position },\n classes: { default: \"vue-notification\" },\n animationType: { default: \"css\" },\n animation: { default: k.velocityAnimation },\n animationName: { default: k.cssAnimation },\n speed: { default: 300 },\n duration: { default: 3e3 },\n delay: { default: 0 },\n max: { default: 1 / 0 },\n ignoreDuplicates: { type: Boolean, default: !1 },\n closeOnClick: { type: Boolean, default: !0 },\n pauseOnHover: { type: Boolean, default: !1 },\n dangerouslySetInnerHtml: { type: Boolean, default: !1 }\n },\n emits: [\"click\", \"destroy\", \"start\"],\n setup(e, { emit: o }) {\n const n = e, s = {\n IDLE: 0,\n DESTROYED: 2\n }, r = T([]), c = T(null), f = T(F.get(\"velocity\")), v = g(() => n.animationType === \"velocity\"), W = g(() => v.value ? _t : xt), p = g(() => r.value.filter((t) => t.state !== s.DESTROYED)), S = g(() => yt(n.width)), C = g(() => {\n const { x: t, y: a } = vt(n.position), i = S.value.value, u = S.value.type, h = {\n width: i + u\n };\n return a && (h[a] = \"0px\"), t && (t === \"center\" ? h.left = `calc(50% - ${+i / 2}${u})` : h[t] = \"0px\"), h;\n }), O = g(() => \"bottom\" in C.value), P = (t) => {\n o(\"click\", t), n.closeOnClick && y(t);\n }, q = () => {\n var t;\n n.pauseOnHover && ((t = c.value) == null || t.pause());\n }, J = () => {\n var t;\n n.pauseOnHover && ((t = c.value) == null || t.resume());\n }, K = (t = {}) => {\n if (t.group || (t.group = \"\"), t.data || (t.data = {}), n.group !== t.group)\n return;\n if (t.clean || t.clear) {\n tt();\n return;\n }\n const a = typeof t.duration == \"number\" ? t.duration : n.duration, i = typeof t.speed == \"number\" ? t.speed : n.speed, u = typeof t.ignoreDuplicates == \"boolean\" ? t.ignoreDuplicates : n.ignoreDuplicates, { title: h, text: ot, type: it, data: st, id: at } = t, d = {\n id: at || ht(),\n title: h,\n text: ot,\n type: it,\n state: s.IDLE,\n speed: i,\n length: a + 2 * i,\n data: st\n };\n a >= 0 && (c.value = new pt(() => y(d), d.length, d));\n const rt = n.reverse ? !O.value : O.value;\n let _ = -1;\n const lt = p.value.some((N) => N.title === t.title && N.text === t.text);\n (!u || !lt) && (rt ? (r.value.push(d), o(\"start\", d), p.value.length > n.max && (_ = 0)) : (r.value.unshift(d), o(\"start\", d), p.value.length > n.max && (_ = p.value.length - 1)), _ !== -1 && y(p.value[_]));\n }, Q = (t) => {\n Z(t);\n }, U = (t) => [\n \"vue-notification-template\",\n n.classes,\n t.type || \"\"\n ], X = (t) => v.value ? void 0 : { transition: `all ${t.speed}ms` }, y = (t) => {\n clearTimeout(t.timer), t.state = s.DESTROYED, H(), o(\"destroy\", t);\n }, Z = (t) => {\n const a = r.value.find((i) => i.id === t);\n a && y(a);\n }, tt = () => {\n p.value.forEach(y);\n }, B = (t, a) => {\n var u;\n const i = (u = n.animation) == null ? void 0 : u[t];\n return typeof i == \"function\" ? i(a) : i;\n }, et = (t, a) => {\n if (!v.value)\n return;\n const i = B(\"enter\", t);\n f.value(t, i, {\n duration: n.speed,\n complete: a\n });\n }, nt = (t, a) => {\n if (!v.value)\n return;\n const i = B(\"leave\", t);\n f.value(t, i, {\n duration: n.speed,\n complete: a\n });\n };\n function H() {\n r.value = r.value.filter((t) => t.state !== s.DESTROYED);\n }\n return ct(() => {\n x.on(\"add\", K), x.on(\"close\", Q);\n }), (t, a) => (l(), m(\"div\", {\n class: \"vue-notification-group\",\n style: M(C.value)\n }, [\n (l(), A(ut(W.value), {\n name: t.animationName,\n onEnter: et,\n onLeave: nt,\n onAfterLeave: H\n }, {\n default: I(() => [\n (l(!0), m(D, null, ft(p.value, (i) => (l(), m(\"div\", {\n key: i.id,\n class: \"vue-notification-wrapper\",\n style: M(X(i)),\n \"data-id\": i.id,\n onMouseenter: q,\n onMouseleave: J\n }, [\n b(t.$slots, \"body\", {\n class: R([t.classes, i.type]),\n item: i,\n close: () => y(i)\n }, () => [\n E(\"div\", {\n class: R(U(i)),\n onClick: (u) => P(i)\n }, [\n t.dangerouslySetInnerHtml ? (l(), m(D, { key: 0 }, [\n i.title ? (l(), m(\"div\", {\n key: 0,\n class: \"notification-title\",\n innerHTML: i.title\n }, null, 8, Et)) : V(\"\", !0),\n E(\"div\", {\n class: \"notification-content\",\n innerHTML: i.text\n }, null, 8, wt)\n ], 64)) : (l(), m(D, { key: 1 }, [\n i.title ? (l(), m(\"div\", kt, Y(i.title), 1)) : V(\"\", !0),\n E(\"div\", $t, Y(i.text), 1)\n ], 64))\n ], 10, Dt)\n ])\n ], 44, Tt))), 128))\n ]),\n _: 3\n }, 40, [\"name\"]))\n ], 4));\n }\n});\nconst L = (e) => {\n typeof e == \"string\" && (e = { title: \"\", text: e }), typeof e == \"object\" && x.emit(\"add\", e);\n};\nL.close = (e) => {\n x.emit(\"close\", e);\n};\nconst St = () => ({ notify: L });\nfunction It(e, o = {}) {\n Object.entries(o).forEach((s) => F.set(...s));\n const n = o.name || \"notify\";\n e.config.globalProperties[\"$\" + n] = L, e.component(o.componentName || \"Notifications\", At);\n}\nconst Ct = {\n install: It\n};\nexport {\n Ct as default,\n L as notify,\n St as useNotification\n};\n","import type { Locale, Path } from 'vue-i18n'\nimport { createI18n } from 'vue-i18n'\nimport type en from '@/locales/en'\n\nexport type MessageSchema = typeof en\n\nconst REQUIRED_LOCALES = ['en', 'sk']\n\nexport const i18n = createI18n<[MessageSchema]>({\n globalInjection: false,\n legacy: false,\n locale: REQUIRED_LOCALES[0],\n fallbackLocale: false,\n missing: (locale: Locale, key: Path) => {\n if (REQUIRED_LOCALES.includes(locale)) {\n console.warn(`Missing ${locale} translation: ${key}`)\n }\n },\n})\n","export const isAnzuFatalError = (error: any): error is AnzuFatalError => {\n return error instanceof AnzuFatalError\n}\n\nexport class AnzuFatalError extends Error {\n constructor(cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuFatalError'\n this.cause = cause\n this.message = message\n }\n}\n","export const HTTP_STATUS_OK = 200\nexport const HTTP_STATUS_CREATED = 201\nexport const HTTP_STATUS_NO_CONTENT = 204\nexport const HTTP_STATUS_BAD_REQUEST = 400\nexport const HTTP_STATUS_UNAUTHORIZED = 401\nexport const HTTP_STATUS_FORBIDDEN = 403\nexport const HTTP_STATUS_UNPROCESSABLE_ENTITY = 422\n\nexport const HTTP_STATUS_VALID_ALL = [HTTP_STATUS_OK, HTTP_STATUS_CREATED, HTTP_STATUS_NO_CONTENT]\n","import axios from 'axios'\nimport { HTTP_STATUS_FORBIDDEN } from '@/composables/statusCodes'\n\nexport const axiosErrorResponseIsForbidden = (error: Error) => {\n return axios.isAxiosError(error) && error.response?.status === HTTP_STATUS_FORBIDDEN\n}\n\nexport const isAnzuApiForbiddenError = (error: any): error is AnzuApiForbiddenError => {\n return error instanceof AnzuApiForbiddenError\n}\n\nexport class AnzuApiForbiddenError extends Error {\n constructor(cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiForbiddenError'\n this.cause = cause\n this.message = message\n }\n}\n","import axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_UNPROCESSABLE_ENTITY } from '@/composables/statusCodes'\n\ninterface ValidationResponseDataFields {\n [key: string]: string[]\n}\n\nexport interface AnzuApiValidationResponseData {\n contextId: string\n error: string\n fields: ValidationResponseDataFields\n}\n\nexport interface ValidationError {\n field: string\n errors: string[]\n}\n\nconst ERROR_VALIDATION = 'validation_failed'\n\nexport const axiosErrorResponseHasValidationData = (error: Error) => {\n return (\n axios.isAxiosError(error) &&\n error.response?.status === HTTP_STATUS_UNPROCESSABLE_ENTITY &&\n error.response.data?.error === ERROR_VALIDATION &&\n error.response.data?.fields\n )\n}\n\nexport const isAnzuApiValidationError = (error: any): error is AnzuApiValidationError => {\n return error instanceof AnzuApiValidationError\n}\n\nfunction resolveResponseData(axiosError: AxiosError, system: string, entity: string) {\n const data = axiosError.response?.data as AnzuApiValidationResponseData\n const items = [] as ValidationError[]\n for (const [key, values] of Object.entries(data.fields)) {\n items.push({\n field: system + '.' + entity + '.model.' + key,\n errors: values,\n })\n }\n return items\n}\n\nexport class AnzuApiValidationError extends Error {\n fields: ValidationError[]\n\n constructor(axiosError: AxiosError, system: string, entity: string, cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiValidationError'\n this.cause = cause\n this.message = message\n this.fields = resolveResponseData(axiosError, system, entity)\n }\n}\n","export const isAnzuApiResponseCodeError = (error: any): error is AnzuApiResponseCodeError => {\n return error instanceof AnzuApiResponseCodeError\n}\n\nexport class AnzuApiResponseCodeError extends Error {\n code: number\n\n constructor(code: number, cause?: Error, message?: string) {\n super(message)\n this.name = 'AnzuApiResponseCodeError'\n this.cause = cause\n this.code = code\n }\n}\n","import axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_UNPROCESSABLE_ENTITY } from '@/composables/statusCodes'\n\ninterface ForbiddenOperationResponseData {\n contextId: string\n error: string\n detail: string\n}\n\nconst ERROR_FORBIDDEN_OPERATION = 'forbidden_operation_error'\n\nexport const axiosErrorResponseHasForbiddenOperationData = (error: Error) => {\n return (\n axios.isAxiosError(error) &&\n error.response?.status === HTTP_STATUS_UNPROCESSABLE_ENTITY &&\n error.response.data?.error === ERROR_FORBIDDEN_OPERATION &&\n error.response.data?.detail\n )\n}\n\nexport const isAnzuApiForbiddenOperationError = (error: any): error is AnzuApiForbiddenOperationError => {\n return error instanceof AnzuApiForbiddenOperationError\n}\n\nfunction resolveResponseData(axiosError: AxiosError) {\n const data = axiosError.response?.data as ForbiddenOperationResponseData\n return data.detail\n}\n\nexport class AnzuApiForbiddenOperationError extends Error {\n detail: string\n\n constructor(axiosError: AxiosError, cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiForbiddenOperationError'\n this.cause = cause\n this.message = message\n this.detail = resolveResponseData(axiosError)\n }\n}\n","import { notify } from '@kyvg/vue3-notification'\nimport { i18n } from '@/plugins/i18n'\nimport { isAnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isAnzuApiForbiddenError } from '@/model/error/AnzuApiForbiddenError'\nimport { isAnzuApiValidationError, type ValidationError } from '@/model/error/AnzuApiValidationError'\nimport { isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { isAnzuApiForbiddenOperationError } from '@/model/error/AnzuApiForbiddenOperationError'\n\nconst DEFAULT_DURATION_SECONDS = 3\n\nexport const NEW_LINE_MARK = '\\n'\n\nexport type RecordWasType = 'created' | 'deleted' | 'updated' | 'published' | 'unpublished' | 'enabled' | 'disabled'\n\nexport function useAlerts() {\n const showSuccess = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'success',\n })\n }\n\n const showSuccessT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showSuccess(t(translation), duration)\n }\n\n const showError = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showErrorT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showError(t(translation), duration)\n }\n\n const showInfo = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'info',\n })\n }\n\n const showInfoT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showInfo(t(translation), duration)\n }\n\n const showWarning = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'warning',\n })\n }\n\n const showWarningT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showWarning(t(translation), duration)\n }\n\n const showValidationError = (duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.fixValidationErrors'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showRecordWas = (variant: RecordWasType, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.recordWas.' + variant),\n duration: duration * 1000,\n type: 'success',\n })\n }\n\n const showApiValidationError = (errors: ValidationError[], duration = -1, fieldIsTranslated = false) => {\n const { t, te } = i18n.global\n const texts = [t('common.alert.fixApiValidationErrors')]\n\n for (let i = 0; i < errors.length; i++) {\n let fieldText = ''\n if (fieldIsTranslated) {\n fieldText += errors[i].field\n } else if (te(errors[i].field)) {\n fieldText += t(errors[i].field)\n }\n const errorsTexts = new Set<string>()\n for (let j = 0; j < errors[i].errors.length; j++) {\n if (te('error.apiValidation.' + errors[i].errors[j])) {\n errorsTexts.add(t('error.apiValidation.' + errors[i].errors[j]))\n continue\n }\n errorsTexts.add(t('error.apiValidation.noTranslation'))\n }\n if (fieldText.length > 0) {\n texts.push(fieldText + ': ' + Array.from(errorsTexts).join(', '))\n }\n }\n notify({\n group: 'alerts',\n text: texts.join(NEW_LINE_MARK),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showApiForbiddenOperationError = (detail: string, duration = -1) => {\n const { t, te } = i18n.global\n let text = t('error.apiForbiddenOperation.noTranslation')\n if (te('error.apiForbiddenOperation.' + detail)) {\n text = t('error.apiForbiddenOperation.' + detail)\n }\n notify({\n group: 'alerts',\n text: text,\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showUnknownError = (duration = -1) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.unknownError'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showForbiddenError = (duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.forbiddenError'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showErrorsDefault = (error: any) => {\n if (isAnzuApiForbiddenError(error)) {\n showForbiddenError()\n return true\n }\n if (isAnzuApiValidationError(error)) {\n showApiValidationError(error.fields)\n return true\n }\n if (isAnzuApiForbiddenOperationError(error)) {\n showApiForbiddenOperationError(error.detail)\n return true\n }\n if (isAnzuFatalError(error)) {\n showUnknownError()\n return true\n }\n if (isAnzuApiResponseCodeError(error)) {\n showUnknownError()\n return true\n }\n return false\n }\n\n return {\n showSuccess,\n showSuccessT,\n showError,\n showErrorT,\n showInfo,\n showInfoT,\n showWarning,\n showWarningT,\n showValidationError,\n showRecordWas,\n showApiValidationError,\n showApiForbiddenOperationError,\n showUnknownError,\n showForbiddenError,\n showErrorsDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n buttonClass?: string\n maxWidth?: number | undefined\n dataCy?: string\n v?: any\n callCreate: () => Promise<any>\n disableRedirect?: boolean\n redirectRouteName?: string | undefined\n redirectParamName?: string\n }>(),\n {\n buttonClass: '',\n maxWidth: undefined,\n dataCy: 'button-create',\n v: undefined,\n disableRedirect: false,\n redirectRouteName: undefined,\n redirectParamName: 'id',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'onConfirm'): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n (e: 'onError', data: any): void\n (e: 'onSuccess', data: any): void\n}>()\n\nconst { t } = useI18n()\n\nconst buttonLoading = ref(false)\n\nconst onOpen = () => {\n emit('update:modelValue', true)\n emit('onOpen')\n}\n\nconst onClose = () => {\n emit('update:modelValue', false)\n emit('onClose')\n}\n\nconst router = useRouter()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n emit('onConfirm')\n try {\n buttonLoading.value = true\n props.v?.$touch()\n if (!isUndefined(props.v) && props.v.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await props.callCreate()\n emit('onSuccess', res)\n showRecordWas('created')\n onClose()\n if (!isUndefined(res.id) && !props.disableRedirect && props.redirectRouteName) {\n router.push({\n name: props.redirectRouteName,\n params: { [props.redirectParamName]: res[props.redirectParamName] },\n })\n }\n } catch (error) {\n showErrorsDefault(error)\n emit('onError', error)\n } finally {\n buttonLoading.value = false\n }\n}\n</script>\n\n<template>\n <ABtnPrimary\n :class=\"buttonClass\"\n rounded=\"pill\"\n :data-cy=\"dataCy\"\n @click.stop=\"onOpen\"\n >\n <slot name=\"button-title\">\n {{ t('common.button.create') }}\n </slot>\n <VDialog\n :model-value=\"modelValue\"\n :max-width=\"maxWidth\"\n persistent\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onClose\">\n <slot name=\"title\">\n {{ t('common.button.create') }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <slot name=\"content\" />\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.create') }}\n </slot>\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </ABtnPrimary>\n</template>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue'\nimport { useFetch } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n configUrl?: string | undefined | null\n }>(),\n {\n configUrl: null,\n }\n)\n\nconst { t } = useI18n()\n\ninterface AdminConfigItem {\n id: string\n title: string\n url: string\n icon: string\n}\n\nconst config = ref<AdminConfigItem[]>([])\n\nonMounted(async () => {\n if (props.configUrl && props.configUrl.length > 0) {\n try {\n const { data } = await useFetch<AdminConfigItem[]>(props.configUrl).get().json()\n config.value = data.value\n } catch (e) {\n //\n }\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"config.length > 0\"\n variant=\"text\"\n size=\"small\"\n icon\n >\n <VIcon icon=\"mdi-dots-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.adminSwitcher.button') }}\n </VTooltip>\n <VMenu activator=\"parent\">\n <VCard>\n <div class=\"a-admin-switcher__content\">\n <a\n v-for=\"item in config\"\n :key=\"item.id\"\n :href=\"item.url\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n class=\"a-admin-switcher__item\"\n >\n <img\n :src=\"item.icon\"\n :alt=\"item.title\"\n >\n <span class=\"a-admin-switcher__item-title\">{{ item.title }}</span>\n </a>\n </div>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n\n<style lang=\"scss\">\n.a-admin-switcher {\n &__content {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: auto;\n padding: 6px;\n }\n\n &__item {\n display: flex;\n width: 96px;\n height: 96px;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-decoration: none;\n color: rgba(var(--v-theme-on-surface), var(--v-hover-opacity));\n\n &:hover {\n background-color: rgba(var(--v-theme-on-surface), 10%);\n border-radius: 8px;\n }\n\n &-title {\n display: flex;\n font-weight: normal;\n font-size: 14px;\n line-height: 14px;\n color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity));\n padding: 8px 0;\n }\n\n img {\n display: block;\n width: auto;\n height: 50px;\n }\n }\n}\n</style>\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","import type { OpUnitType, QUnitType } from 'dayjs'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { stringToInt } from '@/utils/string'\nimport type { DatetimeUTC, DatetimeUTCNullable } from '@/types/common'\n\ndayjs.extend(utc)\n\nconst SUFFIX = '.000000Z'\nconst FORMAT = 'YYYY-MM-DDTHH:mm:ss'\n\nexport const DATETIME_MIN = '1970-01-01T00:00:00.000000Z'\nexport const DATETIME_MAX = '2100-01-01T00:00:00.000000Z'\n\nexport const dateNow = (): Date => {\n return dayjs().utc().toDate()\n}\n\nexport const dateTimeToDate = (isoDate: DatetimeUTC | DatetimeUTCNullable | string): Date => {\n return dayjs(isoDate).toDate()\n}\nexport const timestampCurrent = (): number => {\n return stringToInt(dayjs().utc().unix())\n}\n\nexport const dateTimeNow = (ignoreFractionalSeconds = true, ignoreSeconds = false): string => {\n if (ignoreFractionalSeconds && !ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n if (ignoreFractionalSeconds && ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:00') + SUFFIX\n if (!ignoreFractionalSeconds && ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:00.SSSSSS') + 'Z'\n return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss.SSSSSS') + 'Z'\n}\n\nexport const dateTimeStartOfDay = (days = 0) => {\n if (days === 0) {\n return dayjs().startOf('day').utc().format(FORMAT) + SUFFIX\n }\n return dayjs().add(days, 'days').startOf('day').utc().format(FORMAT) + SUFFIX\n}\n\nexport const dateTimeEndOfDay = (days = 0) => {\n if (days === 0) {\n return dayjs().endOf('day').utc().format(FORMAT) + SUFFIX\n }\n return dayjs().add(days, 'days').endOf('day').utc().format(FORMAT) + SUFFIX\n}\n\nexport const dateModifyMinutes = (minutes = 0, date: null | Date = null): Date => {\n if (date === null) date = new Date()\n if (minutes === 0) return date\n if (minutes > 0) return dayjs(date).add(minutes, 'minutes').toDate()\n if (minutes < 0) return dayjs(date).subtract(Math.abs(minutes), 'minutes').toDate()\n return date\n}\n\nexport const dateToUtc = (date: dayjs.ConfigType) => {\n return dayjs(date).utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n}\n\nexport const yearNow = () => {\n return dayjs().utc().format('YYYY')\n}\n\nexport const dateTimePretty = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = ''\n): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY HH:mm')\n}\n\nexport const dateTimeFriendly = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = '') => {\n if (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n ) {\n return edgeDateValue\n }\n let displayYear = true\n let displayDayMonth = true\n const date = dayjs(isoDate)\n const now = dayjs()\n if (now.format('YYYY') === date.format('YYYY')) {\n displayYear = false\n }\n if (now.format('YYYY-MM-DD') === date.format('YYYY-MM-DD')) {\n displayDayMonth = false\n }\n if (!displayYear && !displayDayMonth) return dayjs(date).format('H:mm')\n if (!displayYear) return dayjs(date).format('D.M. H:mm')\n return dayjs(date).format('D.M.YYYY H:mm')\n}\n\nexport const datePretty = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = ''): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY')\n}\n\nexport const timePretty = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = ''): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('HH:mm')\n}\n\nexport const dateDiff = (date1: Date, date2: Date, unit: QUnitType | OpUnitType = 'ms') => {\n const date1dayjs = dayjs(date1)\n const date2dayjs = dayjs(date2)\n return date1dayjs.diff(date2dayjs, unit)\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { dateTimePretty } from '@/utils/datetime'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n }\n)\n\nconst createdAt = computed(() => {\n return dateTimePretty(props.data.createdAt)\n})\nconst modifiedAt = computed(() => {\n return dateTimePretty(props.data.modifiedAt)\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow :title=\"t('common.model.tracking.created')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideCreatedAt\"\n class=\"mr-2\"\n >\n {{ createdAt }}\n </div>\n </div>\n </ARow>\n <ARow :title=\"t('common.model.tracking.modified')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideModifiedAt\"\n class=\"mr-2\"\n >\n {{ modifiedAt }}\n </div>\n </div>\n </ARow>\n</template>\n","import { cloneDeep, isArray, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\n\nexport interface MakeFilterOptions<T = any> {\n name: string\n variant: FilterVariant\n titleT?: string\n default: T | null\n field: string\n multiple: boolean\n mandatory: boolean\n exclude: boolean\n}\n\nexport function makeFilterHelper<T = any>(system?: string, subject?: string) {\n return (options: Partial<MakeFilterOptions<T>> = {}): Filter<T> => {\n const variant = isUndefined(options.variant) ? 'eq' : options.variant\n\n let defaultValue = isUndefined(options.default) ? null : options.default\n if (isUndefined(options.default) && variant === 'in') {\n defaultValue = [] as any\n }\n let titleT = options.titleT\n if (isUndefined(titleT) && system && subject && options.name) {\n titleT = system + '.' + subject + '.filter.' + options.name\n }\n\n return {\n variant,\n titleT,\n default: defaultValue,\n field: isUndefined(options.field) ? '' : options.field,\n multiple: isArray(defaultValue),\n mandatory: isUndefined(options.mandatory) ? false : options.mandatory,\n exclude: isUndefined(options.exclude) ? false : options.exclude,\n model: cloneDeep(defaultValue),\n error: '',\n }\n }\n}\n\nexport function useFilterHelpers() {\n const clearOne = (filter: Filter) => {\n filter.model = filter.default\n filter.error = ''\n }\n\n const clearAll = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n clearOne(filterBag[filterName])\n }\n }\n\n const clearAllErrors = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n filterBag[filterName].error = ''\n }\n }\n\n const resetFilter = (filterBag: FilterBag, pagination: Pagination, callback?: any) => {\n clearAll(filterBag)\n pagination.page = 1\n if (callback) callback()\n }\n\n const submitFilter = (filterBag: FilterBag, pagination: Pagination, callback: () => any) => {\n clearAllErrors(filterBag)\n pagination.page = 1\n callback()\n }\n\n return {\n clearAllErrors,\n clearAll,\n clearOne,\n resetFilter,\n submitFilter,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n placeholder: undefined,\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :placeholder=\"placeholderComputed\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport type { Ref } from 'vue'\nimport { computed, ref, toRefs, watch } from 'vue'\nimport { isDocId, isEmpty, isInt, isString, isUndefined } from '@/utils/common'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n filterId?: Filter | undefined\n filterDocId?: Filter | undefined\n filterText?: Filter | undefined\n filterUrl?: Filter | undefined\n filterOverrides?: Filter[] | undefined\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n filterId: undefined,\n filterDocId: undefined,\n filterText: undefined,\n filterUrl: undefined,\n filterOverrides: undefined,\n placeholder: undefined,\n dataCy: 'filter-mixed',\n }\n)\nconst model = ref('')\nconst { filterId, filterText, filterDocId, filterUrl, filterOverrides } = toRefs(props)\nconst { t } = useI18n()\n\nconst filterActive = (filter: Ref<Filter | undefined> | undefined): filter is Ref<Filter> => {\n return !isUndefined(filter) && !isUndefined(filter.value)\n}\nconst { clearOne } = useFilterHelpers()\nconst clearIfActive = (filter: Ref<Filter | undefined> | undefined) => {\n if (filterActive(filter)) {\n clearOne(filter.value)\n }\n}\nconst clearAllActiveExcept = (exceptFilter: Ref<Filter | undefined> | undefined = undefined) => {\n if (exceptFilter?.value?.titleT !== filterId?.value?.titleT) {\n clearIfActive(filterId)\n }\n if (exceptFilter?.value?.titleT !== filterDocId?.value?.titleT) {\n clearIfActive(filterDocId)\n }\n if (exceptFilter?.value?.titleT !== filterText?.value?.titleT) {\n clearIfActive(filterText)\n }\n if (exceptFilter?.value?.titleT !== filterUrl?.value?.titleT) {\n clearIfActive(filterUrl)\n }\n if (!isUndefined(filterOverrides)) {\n filterOverrides.value?.forEach((filter: any) => {\n if (exceptFilter?.value?.titleT !== filter.titleT) {\n clearOne(filter)\n }\n })\n }\n}\nconst overrideFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(overrideFilter, () => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = model.value\n currentFilter.value = overrideFilter.value\n clearAllActiveExcept(overrideFilter)\n return\n }\n setFilters(model.value)\n})\nconst currentFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(model, (newModel: string) => {\n setFilters(newModel)\n})\nconst setFilters = (newModel: string) => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = newModel\n return\n }\n const filter = autodetectFilter(newModel)\n if (!isUndefined(filter)) {\n filter.model = newModel\n }\n currentFilter.value = filter\n clearAllActiveExcept(currentFilter)\n}\nconst autodetectFilter = (newModel: string): Filter | undefined => {\n if (isInt(newModel)) {\n if (filterActive(filterId)) {\n return filterId.value\n }\n }\n if (isDocId(newModel)) {\n if (filterActive(filterDocId)) {\n return filterDocId.value\n }\n }\n if (isString(newModel) && newModel.length > 0) {\n if (filterActive(filterUrl) && newModel.startsWith('http')) {\n return filterUrl.value\n }\n if (filterActive(filterText)) {\n return filterText.value\n }\n }\n return undefined\n}\n\nconst label = computed(() => {\n if (filterActive(overrideFilter)) {\n return t(overrideFilter.value.titleT ?? '')\n }\n if (filterActive(currentFilter)) {\n return t(currentFilter.value.titleT ?? '')\n }\n const filterLabels = []\n if (filterActive(filterId)) {\n filterLabels.push(t(filterId.value.titleT ?? ''))\n }\n if (filterActive(filterDocId)) {\n filterLabels.push(t(filterDocId.value.titleT ?? ''))\n }\n if (filterActive(filterUrl)) {\n filterLabels.push(t(filterUrl.value.titleT ?? ''))\n }\n if (filterActive(filterText)) {\n filterLabels.push(t(filterText.value.titleT ?? ''))\n }\n return filterLabels.join('/')\n})\n\nconst currentFilterModel = computed(() => {\n return currentFilter.value?.model\n})\nwatch(currentFilterModel, (newModel) => {\n if (!isEmpty(model.value) && isEmpty(newModel)) {\n model.value = ''\n }\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (currentFilter.value?.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (currentFilter.value?.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (currentFilter.value?.variant === 'contains' || currentFilter.value?.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"model\"\n :label=\"label\"\n :data-cy=\"dataCy\"\n :placeholder=\"placeholderComputed\"\n >\n <template\n v-if=\"filterOverrides\"\n #append-inner\n >\n <VBtnToggle\n v-model=\"overrideFilter\"\n divided\n class=\"override-toggle\"\n >\n <VBtn\n v-for=\"(override, index) in filterOverrides\"\n :key=\"index\"\n size=\"small\"\n :value=\"override\"\n >\n {{ t(override.titleT ?? '') }}\n </VBtn>\n </VBtnToggle>\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.override-toggle {\n height: 80%;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { stringToInt } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: stringToInt(newValue + '') } })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","export const eventClickBlur = (event?: Event): void => {\n if (event?.currentTarget instanceof HTMLElement) {\n event.currentTarget.blur()\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n }\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst icon = computed(() => {\n return active.value ? 'mdi-chevron-double-up' : 'mdi-chevron-double-down'\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon :icon=\"icon\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\n\nwithDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n touched?: boolean\n }>(),\n {\n buttonT: 'common.button.submitFilter',\n buttonClass: '',\n dataCy: 'filter-submit',\n touched: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('submit')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n color=\"primary\"\n type=\"submit\"\n :variant=\"touched ? 'flat' : 'text'\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.resetFilter',\n buttonClass: 'ml-2',\n dataCy: 'filter-reset',\n }\n)\nconst emit = defineEmits<{\n (e: 'reset'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('reset')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n class=\"px-2\"\n :data-cy=\"dataCy\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n @click.stop=\"onClick\"\n >\n <VIcon\n color=\"grey darken-1\"\n icon=\"mdi-filter-remove-outline\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport AFilterAdvancedButton from '@/components/buttons/filter/AFilterAdvancedButton.vue'\nimport AFilterSubmitButton from '@/components/buttons/filter/AFilterSubmitButton.vue'\nimport AFilterResetButton from '@/components/buttons/filter/AFilterResetButton.vue'\n\nwithDefaults(\n defineProps<{\n enableAdvanced?: boolean\n enableTop?: boolean\n hideButtons?: boolean\n touched?: boolean\n }>(),\n {\n enableAdvanced: false,\n enableTop: false,\n hideButtons: false,\n touched: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'resetFilter'): void\n}>()\n\nconst resetFilter = () => {\n emit('resetFilter')\n}\n\nconst advancedFilter = ref(false)\n\nconst toggleAdvancedFilter = () => {\n advancedFilter.value = !advancedFilter.value\n}\n</script>\n\n<template>\n <VRow\n v-if=\"enableTop\"\n dense\n >\n <VCol class=\"\">\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol\n v-if=\"enableAdvanced\"\n class=\"v-col-filters--show-hide\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"advancedFilter\"\n @advanced-filter=\"toggleAdvancedFilter\"\n />\n </VCol>\n <VCol class=\"\">\n <slot name=\"default\" />\n <VExpandTransition v-if=\"enableAdvanced\">\n <div v-show=\"advancedFilter\">\n <slot name=\"advanced\" />\n </div>\n </VExpandTransition>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"v-col-filters--buttons text-right\"\n cols=\"auto\"\n >\n <slot name=\"buttons\">\n <AFilterSubmitButton :touched=\"touched\" />\n <AFilterResetButton @reset=\"resetFilter\" />\n </slot>\n </VCol>\n </VRow>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport enum Grant {\n Deny = 0,\n AllowOwner = 1,\n Allow = 2,\n Default = Deny,\n}\n\nexport function useGrant() {\n const { t } = useI18n()\n\n const grantOptions = ref<ValueObjectOption<Grant>[]>([\n {\n value: Grant.Deny,\n title: t('common.permission.grant.deny'),\n color: 'error',\n },\n {\n value: Grant.AllowOwner,\n title: t('common.permission.grant.allowOwner'),\n color: 'warning',\n },\n {\n value: Grant.Allow,\n title: t('common.permission.grant.allow'),\n color: 'success',\n },\n ])\n\n const getGrantOption = (value: Grant): ValueObjectOption<Grant> => {\n return grantOptions.value.find((item) => item.value === value) as ValueObjectOption<Grant>\n }\n\n return {\n grantOptions,\n getGrantOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { Grant, useGrant } from '@/model/valueObject/Grant'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n availableGrants: Grant[]\n selectedGrant: Grant | undefined\n}>()\nconst emit = defineEmits<{\n (e: 'change', data?: Grant): void\n}>()\nconst selectedGrant = computed({\n get() {\n return props.selectedGrant\n },\n set(newGrant) {\n emit('change', newGrant)\n },\n})\nconst { getGrantOption } = useGrant()\n</script>\n\n<template>\n <VBtnToggle\n v-model=\"selectedGrant\"\n divided\n density=\"compact\"\n variant=\"outlined\"\n class=\"text-disabled\"\n >\n <VBtn\n v-for=\"availableGrant in availableGrants\"\n :key=\"availableGrant\"\n :value=\"availableGrant\"\n :color=\"getGrantOption(availableGrant)?.color\"\n >\n {{ getGrantOption(availableGrant)?.title }}\n </VBtn>\n </VBtnToggle>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport enum GrantOrigin {\n Role = 'role',\n Group = 'group',\n User = 'user',\n DefaultGrant = 'default',\n Default = DefaultGrant,\n}\n\nexport function useGrantOrigin() {\n const { t } = useI18n()\n\n const grantOriginOptions = ref<ValueObjectOption<GrantOrigin>[]>([\n {\n value: GrantOrigin.Role,\n title: t('common.permission.grantOrigin.role'),\n },\n {\n value: GrantOrigin.Group,\n title: t('common.permission.grantOrigin.group'),\n },\n {\n value: GrantOrigin.User,\n title: t('common.permission.grantOrigin.user'),\n },\n {\n value: GrantOrigin.DefaultGrant,\n title: t('common.permission.grantOrigin.defaultGrant'),\n },\n ])\n\n const getGrantOriginOption = (value: GrantOrigin): ValueObjectOption<GrantOrigin> => {\n return grantOriginOptions.value.find((item) => item.value === value) as ValueObjectOption<GrantOrigin>\n }\n\n return {\n grantOriginOptions,\n getGrantOriginOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { Grant, useGrant } from '@/model/valueObject/Grant'\nimport { GrantOrigin, useGrantOrigin } from '@/model/valueObject/GrantOrigin'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n grant: Grant\n grantOrigin: GrantOrigin\n}>()\n\nconst { getGrantOption } = useGrant()\nconst grantOption = computed(() => getGrantOption(props.grant))\n\nconst { getGrantOriginOption } = useGrantOrigin()\nconst grantOriginOption = computed(() => getGrantOriginOption(props.grantOrigin))\n</script>\n\n<template>\n <VChip\n v-if=\"grantOption\"\n :color=\"grantOption.color\"\n label\n size=\"small\"\n >\n {{ grantOption.title }}\n <span\n v-if=\"grantOrigin !== GrantOrigin.DefaultGrant\"\n class=\"ml-1\"\n >({{ grantOriginOption?.title }})</span>\n </VChip>\n</template>\n","import { isUndefined } from '@/utils/common'\n\nexport const objectDeepFreeze = <T>(obj: T) => {\n const propNames = Object.getOwnPropertyNames(obj)\n for (const name of propNames) {\n const value = (obj as any)[name]\n if (value && typeof value === 'object') {\n objectDeepFreeze(value)\n }\n }\n return Object.freeze(obj)\n}\n\nexport const objectGetValues = <T>(obj: { [key: string]: T }): T[] => {\n return Object.keys(obj).map((k) => obj[k])\n}\n\nexport const objectGetValueByPath = <R = any>(obj: any, path: string, splitChar = '.') => {\n const a = path.split(splitChar)\n let o = obj\n while (a.length) {\n const n = a.shift()\n if (isUndefined(n) || !(n in o)) return\n o = o[n]\n }\n return o as R\n}\n\nexport const objectSetValueByPath = (obj: any, path: string, value: any, splitChar = '.') => {\n const a = path.split(splitChar)\n let o = obj\n while (a.length - 1) {\n const n = a.shift()\n if (isUndefined(n)) return // todo check if correct if\n if (!(n in o)) o[n] = {}\n o = o[n]\n }\n o[a[0]] = value\n}\n\nexport function objectDeletePropertyByPath<T>(obj: T, path: string, splitChar = '.'): T {\n const pathParts = path.split(splitChar)\n const lastIndex = pathParts.length - 1\n\n function recurse(obj: any, index = 0) {\n const key = pathParts[index]\n\n if (index === lastIndex) {\n delete obj[key]\n return\n }\n\n recurse(obj[key], index + 1)\n }\n\n recurse(obj)\n return obj\n}\n\nexport type Immutable<T> = {\n readonly [K in keyof T]: Immutable<T[K]>\n}\n","import type { IntegerId } from '@/types/common'\nimport { isObject } from '@/utils/common'\n\nexport interface OwnerAware {\n owners: IntegerId[]\n}\n\nexport const isOwnerAware = (value: unknown): value is OwnerAware => {\n return isObject(value) && Object.hasOwn(value, 'owners')\n}\n","import type { IntegerIdNullable } from '@/types/common'\n\nexport interface CreatedByAware {\n createdBy: IntegerIdNullable\n}\n\nexport const isCreatedByAware = (value: object): value is CreatedByAware => {\n return Object.hasOwn(value, 'createdBy')\n}\n","import { isDefined, isUndefined } from '@/utils/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { Grant } from '@/model/valueObject/Grant'\nimport { isOwnerAware } from '@/types/OwnerAware'\nimport { isCreatedByAware } from '@/types/CreatedByAware'\nimport { inject } from 'vue'\nimport type { CurrentUserType, CustomAclResolver } from '@/AnzuSystemsCommonAdmin'\nimport type { AclValue } from '@/types/Permission'\nimport { CurrentUserSymbol, CustomAclResolverSymbol } from '@/components/injectionKeys'\n\nexport const ROLE_SUPER_ADMIN = 'ROLE_ADMIN'\n\nexport type AclResolverConfig = {\n disableInject?: true | undefined\n currentUser?: CurrentUserType\n customAclProvider?: CustomAclResolver\n}\n\nexport function useAcl<T extends AclValue = AclValue>(options?: AclResolverConfig) {\n const shouldInject = isUndefined(options) || isUndefined(options.disableInject)\n const currentUser =\n options?.currentUser ??\n (shouldInject ? (inject(CurrentUserSymbol, undefined) as CurrentUserType | undefined) : undefined)\n const customAclProvider =\n options?.customAclProvider ??\n (shouldInject ? (inject(CustomAclResolverSymbol, undefined) as CustomAclResolver) : undefined)\n\n const can = (acl: T, subject?: object): boolean => {\n if (isUndefined(currentUser))\n throw new Error('Composable useAcl can be used as a global state without providing current user as a parameter.')\n if (isDefined(customAclProvider) && isDefined(customAclProvider.can)) return customAclProvider.can(acl, subject)\n if (isUndefined(currentUser.value) || currentUser.value.id === 0) return false\n if (currentUser.value.roles.includes(ROLE_SUPER_ADMIN)) return true\n const permission = objectGetValueByPath(currentUser.value, 'resolvedPermissions.' + acl)\n if (isUndefined(permission)) return false\n switch (permission) {\n case Grant.Allow:\n return true\n case Grant.Deny:\n return false\n case Grant.AllowOwner:\n if (isUndefined(subject))\n throw new Error(`Required subject for acl \"${acl}\" to determine an ability to access the resource.`)\n return canOwner(subject)\n default:\n return false\n }\n }\n\n function canOwner(subject: object) {\n if (isUndefined(currentUser))\n throw new Error('Composable useAcl can be used as a global state without providing current user as a parameter.')\n if (!isUndefined(customAclProvider) && !isUndefined(customAclProvider.canOwner))\n return customAclProvider.canOwner(subject)\n if (currentUser.value) {\n if (isOwnerAware(subject)) {\n return subject.owners.includes(currentUser.value.id)\n }\n if (isCreatedByAware(subject)) {\n return subject.createdBy === currentUser.value.id\n }\n }\n return false\n }\n\n const canForAll = (acls: T[], subject?: object): boolean => {\n if (acls.length === 0) {\n return true\n }\n return acls.every((acl) => {\n return can(acl, subject)\n })\n }\n\n const canForSome = (acls: T[], subject?: object): boolean => {\n if (acls.length === 0) {\n return true\n }\n return acls.some((acl) => {\n return can(acl, subject)\n })\n }\n\n return {\n can,\n canForAll,\n canForSome,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAcl } from '@/composables/system/ability'\nimport { inject, ref, watch } from 'vue'\nimport type { CurrentUserType } from '@/AnzuSystemsCommonAdmin'\nimport type { AclValue } from '@/types/Permission'\nimport { CurrentUserSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n permission: AclValue\n subject?: object\n }>(),\n {\n subject: undefined,\n }\n)\n\nconst currentUser = inject(CurrentUserSymbol) as CurrentUserType\nconst { can } = useAcl()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst allowed = ref<boolean>(can(props.permission, props.subject))\n\nwatch(currentUser, () => {\n allowed.value = can(props.permission, props.subject)\n})\n</script>\n\n<template>\n <slot v-if=\"allowed\" />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n dateTime: DatetimeUTCNullable\n edgeDateValue?: string\n }>(),\n {\n edgeDateValue: 'n/a',\n }\n)\n\nconst pretty = computed(() => {\n return dateTimePretty(props.dateTime, props.edgeDateValue)\n})\n</script>\n\n<template>\n {{ pretty }}\n</template>\n","export var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport var defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","export var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\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 longhand: [\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 daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export var pad = function (number, length) {\n if (length === void 0) { length = 2; }\n return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n var t;\n return function () {\n var _this = this;\n var args = arguments;\n clearTimeout(t);\n t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n };\n}\nexport var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n};\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport var tokenRegex = {\n D: \"\",\n F: \"\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport var formats = {\n Z: function (date) { return date.toISOString(); },\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: function (date) { return pad(date.getHours()); },\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: function (date) { return pad(date.getSeconds()); },\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: function (date) { return pad(date.getFullYear(), 4); },\n d: function (date) { return pad(date.getDate()); },\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n i: function (date) { return pad(date.getMinutes()); },\n j: function (date) { return date.getDate(); },\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: function (date) { return pad(date.getMonth() + 1); },\n n: function (date) { return date.getMonth() + 1; },\n s: function (date) { return date.getSeconds(); },\n u: function (date) { return date.getTime(); },\n w: function (date) { return date.getDay(); },\n y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n};\nexport var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (config && config.parseDate) {\n parsedDate = config.parseDate(date, format);\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr)) {\n parsedDate = new Date(date);\n }\n else {\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token = format[i];\n var isBackSlash = token === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n }\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n};\nexport function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n var hours = config.defaultHour;\n var minutes = config.defaultMinute;\n var seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n var minHour = config.minDate.getHours();\n var minMinutes = config.minDate.getMinutes();\n var minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n var maxHr = config.maxDate.getHours();\n var maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours: hours, minutes: minutes, seconds: seconds };\n}\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self.onMouseOver = onMouseOver;\n self._createElement = createElement;\n self.createDay = createDay;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.updateValue = updateValue;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function getClosestActiveElement() {\n var _a;\n return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n .activeElement || document.activeElement);\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n var defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n var defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (self.config.maxTime !== undefined &&\n self.config.minTime !== undefined &&\n self.config.minTime > self.config.maxTime) {\n var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n if (currentTime > maxBound && currentTime < minBound) {\n var result = parseSeconds(minBound);\n hours = result[0];\n minutes = result[1];\n seconds = result[2];\n }\n }\n else {\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date && date instanceof Date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n var eventTarget = getEventTarget(event);\n var year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: function () { return element.removeEventListener(event, handler, options); },\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(self._input, \"keydown\", onKeyDown);\n if (self.calendarContainer !== undefined) {\n bind(self.calendarContainer, \"keydown\", onKeyDown);\n }\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return getEventTarget(e).select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", function (e) {\n updateTime(e);\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n var eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n var target = e && getEventTarget(e);\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, _dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n i % 7 === 6) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var activeElement = getClosestActiveElement();\n var dayFocused = isInView(activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = getEventTarget(e);\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n var defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n <span class='flatpickr-weekday'>\\n \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n </span>\\n \";\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers,\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n if (self.config.allowInput) {\n self.setDate(self._input.value, false, self.config.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1)\n self.clear(false);\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n var _a;\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n var isInput = e.target === self._input;\n var valueChanged = self._input.value.trimEnd() !== getDateStr();\n if (isInput &&\n valueChanged &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n var eventTarget = getEventTarget(e);\n var isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n self.close();\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n var activeElement = getClosestActiveElement();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (activeElement && isInView(activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(eventTarget);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem, cellClass) {\n if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(cellClass) ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n hoverableCells.forEach(function (dayElem) {\n var date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return;\n }\n else if (containsDisabled && !outOfRange)\n return;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n });\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n var eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n },\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\"),\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset + inputBounds.left;\n var isCenter = false;\n var isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n var right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n var editableSheet = null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n var sheet = document.styleSheets[i];\n if (!sheet.cssRules)\n continue;\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n var style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n positionElement: [updatePositionElement],\n clickOpens: [\n function () {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter(function (x) { return x; });\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n updatePositionElement();\n }\n function updatePositionElement() {\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n var selectedDate = self.selectedDates[i];\n if (selectedDate instanceof Date &&\n compareDates(selectedDate, date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(specificFormat) {\n var format = specificFormat ||\n (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var eventTarget = getEventTarget(e);\n var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n var isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: __assign({}, English),\n default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","const includedEvents = [\n 'onChange',\n 'onClose',\n 'onDestroy',\n 'onMonthChange',\n 'onOpen',\n 'onYearChange',\n];\n// Let's not emit these events by default\nconst excludedEvents = [\n 'onValueUpdate',\n 'onDayCreate',\n 'onParseConfig',\n 'onReady',\n 'onPreCalendarPosition',\n 'onKeyDown',\n];\nexport { includedEvents, excludedEvents };\n","function camelToKebab(string) {\n return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction arrayify(obj) {\n return obj instanceof Array\n ? obj\n : [obj];\n}\nfunction nullify(value) {\n return (value && value.length)\n ? value\n : null;\n}\nexport { camelToKebab, nullify, arrayify };\n","import flatpickr from 'flatpickr';\nimport { defineComponent, h, nextTick } from 'vue';\nimport { excludedEvents, includedEvents } from './events';\nimport { camelToKebab, nullify, arrayify } from './util';\n// Keep a copy of all events for later use\nconst allEvents = [...includedEvents, ...excludedEvents];\n// Passing these properties in `fp.set()` method will cause flatpickr to trigger some callbacks\nconst configCallbacks = ['locale', 'showMonths'];\nexport default defineComponent({\n name: 'FlatPickr',\n compatConfig: {\n MODE: 3,\n },\n render() {\n return h('input', {\n type: 'text',\n 'data-input': true,\n disabled: this.disabled,\n onInput: this.onInput,\n });\n },\n emits: [\n 'blur',\n 'update:modelValue',\n ...allEvents.map(camelToKebab)\n ],\n props: {\n modelValue: {\n type: [String, Number, Date, Array, null],\n required: true,\n },\n // https://flatpickr.js.org/options/\n config: {\n type: Object,\n default: () => ({\n defaultDate: null,\n wrap: false,\n })\n },\n events: {\n type: Array,\n default: () => includedEvents\n },\n disabled: {\n type: Boolean,\n default: false\n },\n },\n data() {\n return {\n fp: null, //todo make it non-reactive\n };\n },\n mounted() {\n // Return early if flatpickr is already loaded\n /* istanbul ignore if */\n if (this.fp)\n return;\n // Init flatpickr\n this.fp = flatpickr(this.getElem(), this.prepareConfig());\n // Attach blur event\n this.fpInput().addEventListener('blur', this.onBlur);\n // Immediate watch will fail before fp is set,\n // so we need to start watching after mount\n this.$watch('disabled', this.watchDisabled, {\n immediate: true\n });\n },\n methods: {\n prepareConfig() {\n // Don't mutate original object on parent component\n let safeConfig = Object.assign({}, this.config);\n this.events.forEach((hook) => {\n // Respect global callbacks registered via setDefault() method\n let globalCallbacks = flatpickr.defaultConfig[hook] || [];\n // Inject our own method along with user's callbacks\n let localCallback = (...args) => {\n this.$emit(camelToKebab(hook), ...args);\n };\n // Overwrite with merged array\n safeConfig[hook] = arrayify(safeConfig[hook] || []).concat(globalCallbacks, localCallback);\n });\n const onCloseCb = this.onClose.bind(this);\n safeConfig['onClose'] = arrayify(safeConfig['onClose'] || []).concat(onCloseCb);\n // Set initial date without emitting any event\n safeConfig.defaultDate = this.modelValue || safeConfig.defaultDate;\n return safeConfig;\n },\n /**\n * Get the HTML node where flatpickr to be attached\n * Bind on parent element if wrap is true\n */\n getElem() {\n return this.config.wrap ? this.$el.parentNode : this.$el;\n },\n /**\n * Watch for value changed by date-picker itself and notify parent component\n */\n onInput(event) {\n const input = event.target;\n // Let's wait for DOM to be updated\n nextTick().then(() => {\n this.$emit('update:modelValue', nullify(input.value));\n });\n },\n fpInput() {\n return this.fp.altInput || this.fp.input;\n },\n /**\n * Blur event is required by many validation libraries\n */\n onBlur(event) {\n this.$emit('blur', nullify(event.target.value));\n },\n /**\n * Flatpickr does not emit input event in some cases\n */\n onClose(selectedDates, dateStr) {\n this.$emit('update:modelValue', dateStr);\n },\n /**\n * Watch for the disabled property and sets the value to the real input.\n */\n watchDisabled(newState) {\n if (newState) {\n this.fpInput().setAttribute('disabled', '');\n }\n else {\n this.fpInput().removeAttribute('disabled');\n }\n }\n },\n watch: {\n /**\n * Watch for any config changes and redraw date-picker\n */\n config: {\n deep: true,\n handler(newConfig) {\n if (!this.fp)\n return;\n let safeConfig = Object.assign({}, newConfig);\n // Workaround: Don't pass hooks to configs again otherwise\n // previously registered hooks will stop working\n // Notice: we are looping through all events\n // This also means that new callbacks can not be passed once component has been initialized\n allEvents.forEach((hook) => {\n delete safeConfig[hook];\n });\n this.fp.set(safeConfig);\n // Workaround: Allow to change locale dynamically\n configCallbacks.forEach((name) => {\n if (typeof safeConfig[name] !== 'undefined') {\n this.fp.set(name, safeConfig[name]);\n }\n });\n }\n },\n /**\n * Watch for changes from parent component and update DOM\n */\n modelValue(newValue) {\n var _a;\n // Prevent updates if v-model value is same as input's current value\n if (!this.$el || newValue === nullify(this.$el.value))\n return;\n // Notify flatpickr instance that there is a change in value\n (_a = this.fp) === null || _a === void 0 ? void 0 : _a.setDate(newValue, true);\n }\n },\n beforeUnmount() {\n /* istanbul ignore else */\n if (!this.fp)\n return;\n this.fpInput().removeEventListener('blur', this.onBlur);\n this.fp.destroy();\n this.fp = null;\n }\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.sk = {}));\n}(this, (function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {},\n };\n var Slovak = {\n weekdays: {\n shorthand: [\"Ned\", \"Pon\", \"Ut\", \"Str\", \"Štv\", \"Pia\", \"Sob\"],\n longhand: [\n \"Nedeľa\",\n \"Pondelok\",\n \"Utorok\",\n \"Streda\",\n \"Štvrtok\",\n \"Piatok\",\n \"Sobota\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"Máj\",\n \"Jún\",\n \"Júl\",\n \"Aug\",\n \"Sep\",\n \"Okt\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"Január\",\n \"Február\",\n \"Marec\",\n \"Apríl\",\n \"Máj\",\n \"Jún\",\n \"Júl\",\n \"August\",\n \"September\",\n \"Október\",\n \"November\",\n \"December\",\n ],\n },\n firstDayOfWeek: 1,\n rangeSeparator: \" do \",\n time_24hr: true,\n ordinal: function () {\n return \".\";\n },\n };\n fp.l10ns.sk = Slovak;\n var sk = fp.l10ns;\n\n exports.Slovak = Slovak;\n exports.default = sk;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.cs = {}));\n}(this, (function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {},\n };\n var Czech = {\n weekdays: {\n shorthand: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"],\n longhand: [\n \"Neděle\",\n \"Pondělí\",\n \"Úterý\",\n \"Středa\",\n \"Čtvrtek\",\n \"Pátek\",\n \"Sobota\",\n ],\n },\n months: {\n shorthand: [\n \"Led\",\n \"Ún\",\n \"Bře\",\n \"Dub\",\n \"Kvě\",\n \"Čer\",\n \"Čvc\",\n \"Srp\",\n \"Zář\",\n \"Říj\",\n \"Lis\",\n \"Pro\",\n ],\n longhand: [\n \"Leden\",\n \"Únor\",\n \"Březen\",\n \"Duben\",\n \"Květen\",\n \"Červen\",\n \"Červenec\",\n \"Srpen\",\n \"Září\",\n \"Říjen\",\n \"Listopad\",\n \"Prosinec\",\n ],\n },\n firstDayOfWeek: 1,\n ordinal: function () {\n return \".\";\n },\n rangeSeparator: \" do \",\n weekAbbreviation: \"Týd.\",\n scrollTitle: \"Rolujte pro změnu\",\n toggleTitle: \"Přepnout dopoledne/odpoledne\",\n amPM: [\"dop.\", \"odp.\"],\n yearAriaLabel: \"Rok\",\n time_24hr: true,\n };\n fp.l10ns.cs = Czech;\n var cs = fp.l10ns;\n\n exports.Czech = Czech;\n exports.default = cs;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.default = {}));\n}(this, (function (exports) { 'use strict';\n\n var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\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 longhand: [\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 daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n };\n\n exports.default = english;\n exports.english = english;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","import { createI18nMessage, requiredIf } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateRequiredIf() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(requiredIf, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.required',\n })\n}\n","import { useStorage } from '@vueuse/core'\nimport { readonly } from 'vue'\n// import { useLocale } from 'vuetify'\nimport { i18n } from '@/plugins/i18n'\n\n// use ISO 639-1 codes\nexport type LanguageCode = 'en' | 'sk' | 'cs' | 'xx'\n\nexport interface Language {\n code: LanguageCode\n title: string\n adminOnly?: boolean\n}\n\nexport const ALL_LANGUAGES = [\n {\n code: 'en',\n title: 'English',\n },\n {\n code: 'sk',\n title: 'Slovensky',\n },\n {\n code: 'cs',\n title: 'Česky',\n },\n {\n code: 'xx',\n title: 'Translation ID',\n adminOnly: true,\n },\n] as Language[]\n\nconst storedSettings = useStorage<LanguageCode | 'default'>('language', 'default')\n\nexport function modifyLanguageSettings(configAvailableLanguages: LanguageCode[], configDefaultLanguage: LanguageCode) {\n if (storedSettings.value === 'default') storedSettings.value = configDefaultLanguage\n // const { current } = useLocale()\n\n function addMessages(language: LanguageCode, messages: any) {\n if (!i18n || !i18n.global) return\n // @ts-ignore\n i18n.global.setLocaleMessage(language, messages)\n }\n\n const setLanguage = (code: LanguageCode) => {\n if (!i18n || !i18n.global) return false\n if (configAvailableLanguages.includes(code) || code === 'xx') {\n // current.value = code\n storedSettings.value = code\n // @ts-ignore\n i18n.global.locale.value = code\n\n return code\n }\n return false\n }\n\n const initializeLanguage = () => {\n if (!i18n || !i18n.global || storedSettings.value === 'default') return\n if (configAvailableLanguages.includes(storedSettings.value) || storedSettings.value === 'xx') {\n // current.value = storedSettings.value\n // @ts-ignore\n i18n.global.locale.value = storedSettings.value\n return\n }\n storedSettings.value = configDefaultLanguage\n // current.value = configDefaultLanguage\n // @ts-ignore\n i18n.global.locale.value = configDefaultLanguage\n }\n\n return {\n addMessages,\n initializeLanguage,\n currentLanguageCode: readonly(storedSettings),\n setLanguage,\n allLanguages: ALL_LANGUAGES,\n }\n}\n\nexport function useLanguageSettings() {\n return {\n currentLanguageCode: readonly(storedSettings),\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, unref, watch } from 'vue'\nimport FlatPickr from 'vue-flatpickr-component'\nimport { Slovak } from 'flatpickr/dist/l10n/sk'\nimport { Czech } from 'flatpickr/dist/l10n/cs'\nimport { english as English } from 'flatpickr/dist/l10n/default'\nimport 'flatpickr/dist/flatpickr.css'\nimport { dateNow, dateToUtc } from '@/utils/datetime'\nimport type flatpickr from 'flatpickr'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport useVuelidate from '@vuelidate/core'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { useValidateRequiredIf } from '@/validators/vuelidate/common/useValidateRequiredIf'\nimport { useI18n } from 'vue-i18n'\nimport type { DateLimit, DateOption } from 'flatpickr/dist/types/options'\nimport { useLanguageSettings } from '@/composables/languageSettings'\n\ntype FlatpickrRef = null | { fp: undefined | flatpickr.Instance }\ntype TextFieldRef = null | { $el: HTMLElement }\n\n// todo fix types\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n type?: 'datetime' | 'date'\n label?: string\n hideLabel?: boolean\n clearable?: boolean\n disabled?: boolean\n hideDetails?: boolean\n minNow?: boolean\n required?: boolean\n hideSetToNow?: boolean\n placeholder?: string\n enable?: DateLimit<DateOption>[]\n weekNumbers?: false\n dataCy?: string\n defaultValue?: null | DatetimeUTCNullable\n errorMessages?: string[]\n }>(),\n {\n type: 'datetime',\n label: '',\n hideLabel: false,\n clearable: false,\n disabled: false,\n hideDetails: false,\n minNow: false,\n required: false,\n hideSetToNow: false,\n placeholder: '',\n enable: undefined,\n weekNumbers: false,\n dataCy: '',\n defaultValue: null,\n errorMessages: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n (e: 'blur'): void\n (e: 'update:modelValue', data: string | null): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n}>()\n\nconst shortcutButtonsPlugin = ref<any>(undefined)\nconst pluginsImported = ref(false)\n\nconst flatickrRefIsInitialized = (\n ref: FlatpickrRef\n): ref is { fp: flatpickr.Instance; fpInput: () => { value: string; focus: () => void } } => {\n return ref !== null && typeof ref.fp !== 'undefined'\n}\n\nconst flatickrRef = ref<FlatpickrRef>(null)\nconst textFieldRef = ref<TextFieldRef>(null)\nconst isOpened = ref(false)\nconst textFieldValue = ref('')\nconst flatpickrValue = ref<string | null>(null)\nconst initialized = ref(false)\n\nconst { t } = useI18n()\n\nconst fixFormat = (value: string) => {\n return value.replace('Z', '000Z')\n}\n\nconst checkIfReallyEmitChange = (value: any) => {\n if (value === props.modelValue) return\n emit('update:modelValue', value)\n emit('change')\n}\n\nconst onFlatpickrUpdate = (value: any) => {\n if (value === null || isUndefined(value)) {\n checkIfReallyEmitChange(null)\n return\n }\n if (value && value.date) {\n checkIfReallyEmitChange(fixFormat(value.date + ''))\n return\n }\n checkIfReallyEmitChange(fixFormat(value + ''))\n}\n\nconst onFlatpickrOpen = () => {\n onTextFieldBlur()\n isOpened.value = true\n emit('onOpen')\n}\n\nconst onFlatpickrClose = () => {\n isOpened.value = false\n emit('onClose')\n}\n\nconst onFlatpickrChange = () => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n textFieldValue.value = flatickrRef.value.fpInput().value\n}\n\nconst onTextFieldBlur = () => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n const filtered = textFieldValue.value.replace(/[^\\s\\d.:]/g, '')\n const date = flatickrRef.value.fp.parseDate(filtered, altFormat.value)\n if (isUndefined(date)) {\n if (isNull(props.defaultValue)) {\n flatickrRef.value?.fp.clear(true)\n } else {\n flatickrRef.value?.fp.setDate(props.defaultValue, true)\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n return\n }\n flatickrRef.value?.fp.setDate(date, true)\n v$.value.textFieldValue.$touch()\n emit('blur')\n}\n\nconst onClear = () => {\n flatpickrValue.value = props.defaultValue\n emit('update:modelValue', unref(props.defaultValue))\n}\n\nconst altFormat = computed(() => {\n return props.type === 'datetime' ? 'd.m.Y H:i' : 'd.m.Y'\n})\n\nconst placeholderComputed = computed(() => {\n return props.type === 'datetime' ? 'dd.mm.yyyy hh:mm' : 'dd.mm.yyyy'\n})\n\nconst enableComputed = computed(() => {\n if (props.enable && props.enable.length > 0) {\n return props.enable\n }\n return [\n {\n from: new Date(1901, 1),\n to: new Date(2099, 12),\n },\n ]\n})\n\nconst defaultValueComputed = computed(() => {\n return isNull(props.defaultValue) ? undefined : props.defaultValue\n})\n\nconst pluginsComputed = computed(() => {\n if (props.hideSetToNow || isUndefined(shortcutButtonsPlugin.value)) {\n return []\n }\n return [\n shortcutButtonsPlugin.value({\n button: [\n {\n label: t('common.button.now'),\n },\n ],\n onClick: (index: number, fp: flatpickr.Instance) => {\n const now = dateNow()\n fp.setDate(now, true)\n onFlatpickrUpdate(dateToUtc(now))\n },\n }),\n ]\n})\n\n// todo check for lazy solution\nconst languages = {\n sk: Slovak,\n en: English,\n cs: Czech,\n}\n\nconst { currentLanguageCode } = useLanguageSettings()\n\nconst flatpickrConfig = computed(() => {\n const positionElement = textFieldRef.value?.$el.querySelector('.v-input__control')\n return {\n enableTime: props.type !== 'date',\n wrap: true,\n time_24hr: true,\n altFormat: altFormat.value,\n defaultDate: defaultValueComputed.value,\n allowInput: true,\n altInput: true,\n altInputClass: 'd-sr-only',\n positionElement: positionElement ?? undefined,\n // dateFormat: 'Y-m-dTH:i:S.000000\\\\Z', problem with timezone\n dateFormat: 'Z',\n disableMobile: true,\n clickOpens: false,\n position: 'auto' as const,\n // @ts-ignore\n locale: { ...languages[currentLanguageCode.value] },\n enable: enableComputed.value,\n weekNumbers: props.weekNumbers,\n // @ts-ignore\n minDate: props.minNow ? new Date().fp_incr(-1) : false,\n plugins: pluginsComputed.value,\n }\n})\n\nconst onCalendarClick = () => {\n setTimeout(() => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n if (isOpened.value) {\n flatickrRef.value.fp.close()\n return\n }\n onTextFieldBlur()\n flatickrRef.value.fp.open()\n flatickrRef.value.fpInput().focus()\n }, 0)\n}\n\nconst requiredIf = useValidateRequiredIf()\n\nconst rules = computed(() => {\n return {\n textFieldValue: {\n required: requiredIf(props.required),\n },\n }\n})\n\nconst v$ = useVuelidate(rules, { textFieldValue })\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessages)) return props.errorMessages\n if (v$.value.textFieldValue.$errors.length)\n return [v$.value.textFieldValue.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if ((isNull(newValue) || isUndefined(newValue)) && !isNull(props.defaultValue)) {\n flatpickrValue.value = props.defaultValue\n return\n }\n flatpickrValue.value = isUndefined(newValue) ? null : newValue\n },\n { immediate: true }\n)\n\nwatch(\n flatickrRef,\n (newValue, oldValue) => {\n if (initialized.value === true) return\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) return\n onFlatpickrChange()\n initialized.value = true\n },\n { immediate: true }\n)\n\nonMounted(() => {\n // @ts-ignore\n import('shortcut-buttons-flatpickr').then((module) => {\n shortcutButtonsPlugin.value = module.default\n pluginsImported.value = true\n })\n})\n</script>\n\n<template>\n <VTextField\n ref=\"textFieldRef\"\n v-model=\"textFieldValue\"\n :error-messages=\"errorMessageComputed\"\n :persistent-placeholder=\"true\"\n :placeholder=\"placeholderComputed\"\n class=\"a-datetime-picker\"\n @blur=\"onTextFieldBlur\"\n @keyup.enter=\"onTextFieldBlur\"\n >\n <template #append-inner>\n <VIcon\n v-if=\"clearable && defaultValue !== modelValue\"\n class=\"a-datetime-picker__clearable\"\n icon=\"mdi-close-circle\"\n @click.stop=\"onClear\"\n />\n <div>\n <FlatPickr\n v-if=\"pluginsImported\"\n ref=\"flatickrRef\"\n :config=\"flatpickrConfig\"\n :disabled=\"disabled\"\n :model-value=\"flatpickrValue\"\n @update:model-value=\"onFlatpickrUpdate\"\n @on-close=\"onFlatpickrClose\"\n @on-open=\"onFlatpickrOpen\"\n @on-change=\"onFlatpickrChange\"\n />\n <VIcon\n class=\"a-datetime-picker__calendar\"\n icon=\"mdi-calendar\"\n @click.stop=\"onCalendarClick\"\n />\n </div>\n </template>\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"required\"\n />\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-datetime-picker {\n :deep(.v-field__append-inner .v-icon) {\n cursor: pointer;\n }\n\n &__calendar {\n opacity: 0.6 !important;\n }\n\n &__clearable {\n opacity: 0 !important;\n }\n\n &:hover {\n .a-datetime-picker__clearable {\n opacity: 0.6 !important;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n dataCy?: string\n clearable?: boolean\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null): void\n (e: 'blur', data: string | number | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\nconst onBlur = () => {\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :required=\"requiredComputed\"\n :label=\"labelComputed\"\n :clearable=\"clearable\"\n @blur=\"onBlur\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isFunction, isNull, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { dateTimeNow } from '@/utils/datetime'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n label?: string\n errorMessage?: string\n v?: any\n dataCy?: string\n clearable?: boolean\n defaultActivationValue?: DatetimeUTCNullable | 'now' | (() => DatetimeUTCNullable)\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n defaultActivationValue: 'now',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null): void\n (e: 'blur', data: string | number | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst checkboxModel = ref(false)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\nconst onBlur = () => {\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) {\n checkboxModel.value = false\n return\n }\n checkboxModel.value = true\n },\n { immediate: true }\n)\n\nconst onCheckboxClick = (value: boolean) => {\n if (value) {\n modelValueComputed.value = null\n return\n }\n if (props.defaultActivationValue === 'now') {\n modelValueComputed.value = dateTimeNow()\n return\n }\n if (isFunction(props.defaultActivationValue)) {\n modelValueComputed.value = props.defaultActivationValue()\n return\n }\n modelValueComputed.value = props.defaultActivationValue\n}\n</script>\n\n<template>\n <VCheckboxBtn\n v-model=\"checkboxModel\"\n :label=\"labelComputed\"\n @click.stop=\"onCheckboxClick(checkboxModel)\"\n />\n <VExpandTransition>\n <div v-show=\"checkboxModel\">\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :clearable=\"clearable\"\n @blur=\"onBlur\"\n />\n </div>\n </VExpandTransition>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-datepicker',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :clearable=\"!modelValue.mandatory\"\n :default-value=\"modelValue.default\"\n :label=\"label\"\n />\n</template>\n","import { computed, reactive } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\n\nexport function usePagination(sortBy: string | null = 'id') {\n return reactive<Pagination>({\n sortBy: sortBy,\n descending: true,\n page: 1,\n rowsPerPage: 25,\n rowsNumber: 0,\n hasNextPage: null,\n currentViewCount: 0,\n totalCount: 0,\n })\n}\n\nexport function usePaginationAutoHide(pagination: Pagination) {\n const showPagination = computed(() => {\n if (pagination.page === 1 && pagination.currentViewCount < pagination.rowsPerPage) return false\n return true\n })\n\n return {\n showPagination,\n }\n}\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { Ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype fetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideDetails?: boolean\n hideLabel?: boolean\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: fetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n loading?: boolean\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideDetails: false,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n loading: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n}>()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null>(newValue))\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onBlur = () => {\n isFocused.value = true\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title }\n })\n})\n\nconst loadingLocal = ref(false)\nconst loadingComputed = computed(() => {\n if (loadingLocal.value) return true\n return props.loading\n})\n\nconst apiSearch = async (query: string) => {\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loadingLocal.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n // if (\n // isNull(modelValue.value) ||\n // isUndefined(modelValue.value) ||\n // (isArray(modelValue.value) && modelValue.value.length === 0)\n // ) {\n loadingLocal.value = true\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loadingLocal.value = false\n // }\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n loadingLocal.value = false\n return\n }\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n loadingLocal.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"allItems\"\n no-filter\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :chips=\"multiple\"\n :hide-details=\"hideDetails\"\n :loading=\"loadingComputed\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VCheckboxBtn\n :id=\"uniqueId\"\n v-model=\"internalModelValue\"\n :disabled=\"loading\"\n @click.stop=\"onClick\"\n />\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'a-remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VBtn\n :id=\"uniqueId\"\n icon\n class=\"a-switch-fix-click\"\n color=\"transparent\"\n :ripple=\"false\"\n :width=\"hideLabel ? 36 : undefined\"\n :height=\"36\"\n @click.stop=\"onClick\"\n >\n <VSwitch\n v-model=\"internalModelValue\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :hide-details=\"hideDetails\"\n density=\"compact\"\n @click.stop=\"onClick\"\n >\n <template\n v-if=\"hasError\"\n #append\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ml-5 mt-1\"\n size=\"x-small\"\n color=\"error\"\n />\n </template>\n </VSwitch>\n </VBtn>\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n\n<style lang=\"scss\">\n.v-btn.a-switch-fix-click:hover > .v-btn__overlay {\n opacity: 0;\n max-height: 36px;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n items: any[]\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n hideLabel?: boolean\n multiple?: boolean\n hideDetails?: boolean\n clearable?: boolean\n dataCy?: string\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n hideLabel: false,\n multiple: false,\n hideDetails: false,\n clearable: false,\n dataCy: '',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'blur', data: any): void\n}>()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', cloneDeep<any>(newValue))\n },\n})\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst { t } = useI18n()\n\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-title=\"title\"\n item-value=\"value\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"dataCy\"\n @blur=\"onBlur\"\n >\n <template #label>\n <span v-if=\"!hideLabel\">{{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n /></span>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n items: ValueObjectOption<string | number>[]\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'change'): void\n}>()\nconst { clearOne } = useFilterHelpers()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n emit('change')\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"value\"\n :items=\"items\"\n :chips=\"modelValue.multiple\"\n :label=\"label\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n data-cy=\"filter-value\"\n @clear=\"clearOne(modelValue)\"\n @change=\"emit('change')\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, type Ref, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { Filter, FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype fetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: fetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n placeholder?: string | undefined\n }>(),\n {\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n placeholder: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: cloneDeep(newValue) } })\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst onBlur = () => {\n isFocused.value = true\n}\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title }\n })\n})\n\nconst loading = ref(false)\n\nconst apiSearch = async (query: string) => {\n loading.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loading.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n // if (\n // isNull(modelValueComputed.value) ||\n // isUndefined(modelValueComputed.value) ||\n // (isArray(modelValueComputed.value) && modelValueComputed.value.length === 0)\n // ) {\n loading.value = true\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loading.value = false\n // }\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.modelValue.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.modelValue.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.modelValue.multiple) {\n modelValueComputed.value = []\n return\n }\n modelValueComputed.value = null\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nwatch(\n modelValueComputed,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n loading.value = false\n return\n }\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n loading.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValueComputed\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n :label=\"label\"\n :chips=\"modelValue.multiple\"\n :loading=\"loading\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\n\nimport type { Filter } from '@/types/Filter'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCyTrue?: string\n dataCyFalse?: string\n }>(),\n {\n dataCyTrue: 'filter-true',\n dataCyFalse: 'filter-false',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <div class=\"a-filter-boolean-group d-flex flex-column align-left justify-center mb-2\">\n <VLabel class=\"pr-1\">\n <span>{{ label }}</span>\n </VLabel>\n <VBtnToggle v-model=\"value\">\n <VBtn\n size=\"small\"\n :value=\"true\"\n :data-cy=\"dataCyTrue\"\n :color=\"value === true ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.true') }}\n </VBtn>\n <VBtn\n size=\"small\"\n :value=\"false\"\n :data-cy=\"dataCyFalse\"\n :color=\"value === false ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.false') }}\n </VBtn>\n </VBtnToggle>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-filter-boolean-group {\n position: relative;\n\n .v-label {\n position: absolute;\n top: -4px;\n left: 0;\n z-index: 2;\n }\n\n .v-btn-group {\n position: relative;\n margin-top: 20px;\n\n .v-btn {\n height: 33px !important;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { Filter } from '@/types/Filter'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-boolean',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n if (isUndefined(props.modelValue.model) || isNull(props.modelValue.model)) return -1\n return props.modelValue.model ? 1 : 0\n },\n set(newValue) {\n let returnValue: null | boolean = null\n if (newValue === 1) returnValue = true\n if (newValue === 0) returnValue = false\n emit('update:modelValue', { ...props.modelValue, ...{ model: returnValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst items = computed(() => {\n return [\n { value: -1, title: t('common.model.notSelected') },\n { value: 1, title: t('common.model.boolean.true') },\n { value: 0, title: t('common.model.boolean.false') },\n ]\n})\n</script>\n\n<template>\n <VSelect\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :label=\"label\"\n :items=\"items\"\n />\n</template>\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum JobStatus {\n Waiting = 'waiting',\n Processing = 'processing',\n AwaitingBatchProcess = 'awaiting_batch_process',\n Done = 'done',\n Error = 'error',\n Default = Waiting,\n}\n\nexport function useJobStatus() {\n const { t } = useI18n()\n\n const jobStatusOptions = ref<ValueObjectOption<JobStatus>[]>([\n {\n value: JobStatus.Waiting,\n title: t('common.job.status.waiting'),\n color: 'warning',\n },\n {\n value: JobStatus.Processing,\n title: t('common.job.status.processing'),\n color: 'primary',\n },\n {\n value: JobStatus.AwaitingBatchProcess,\n title: t('common.job.status.awaitingBatchProcess'),\n color: 'primary',\n },\n {\n value: JobStatus.Done,\n title: t('common.job.status.done'),\n color: 'success',\n },\n {\n value: JobStatus.Error,\n title: t('common.job.status.error'),\n color: 'error',\n },\n ])\n\n const getJobStatusOption = (value: JobStatus): ValueObjectOption<JobStatus> => {\n return jobStatusOptions.value.find((item) => item.value === value) as ValueObjectOption<JobStatus>\n }\n\n return {\n jobStatusOptions,\n getJobStatusOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { JobStatus, useJobStatus } from '@/model/valueObject/JobStatus'\n\nconst props = defineProps<{\n value: JobStatus\n}>()\n\nconst { getJobStatusOption } = useJobStatus()\nconst option = computed(() => getJobStatusOption(props.value))\n</script>\n\n<template>\n <VChip\n :color=\"option?.color\"\n label\n size=\"small\"\n >\n {{ option?.title }}\n </VChip>\n</template>\n","import type { Immutable } from '@/utils/object'\nimport { objectDeepFreeze } from '@/utils/object'\n\nconst commonConfig = {\n CHIP: {\n CLASS: {\n NO_LINK: 'v-chip-custom-no-link',\n },\n ICON: {\n LINK: 'mdi-arrow-top-right',\n LINK_EXTERNAL: 'mdi-open-in-new',\n },\n },\n}\n\nexport const COMMON_CONFIG: Immutable<typeof commonConfig> = objectDeepFreeze(commonConfig)\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useRouter } from 'vue-router'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { COMMON_CONFIG } from '@/model/commonConfig'\n\nconst props = withDefaults(\n defineProps<{\n id?: null | undefined | IntegerId | DocId\n title?: string\n containerClass?: undefined | string\n getCachedFn: (id: any) => any\n displayTextPath: string\n route: string\n disableClick?: boolean\n openInNew?: boolean\n size?: string\n forceRounded?: boolean\n textOnly?: boolean\n fallbackIdText?: boolean\n wrapText?: boolean\n }>(),\n {\n id: null,\n title: '',\n containerClass: 'd-inline-flex',\n disableClick: false,\n openInNew: false,\n size: 'small',\n forceRounded: false,\n textOnly: false,\n fallbackIdText: false,\n wrapText: false,\n }\n)\n\nconst router = useRouter()\nconst cached = shallowRef<undefined | any>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return props.getCachedFn(props.id as any)\n})\n\nconst containerClassComputed = computed(() => {\n return props.wrapText ? props.containerClass + ' a-chip--wrap' : props.containerClass\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return objectGetValueByPath(cached.value, props.displayTextPath)\n }\n return props.fallbackIdText ? props.id : ''\n})\n\nconst onClick = () => {\n router.push({ name: props.route, params: { id: props.id } })\n}\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClassComputed\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else-if=\"disableClick\"\n :size=\"size\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"openInNew ? COMMON_CONFIG.CHIP.ICON.LINK_EXTERNAL : COMMON_CONFIG.CHIP.ICON.LINK\"\n :label=\"forceRounded ? undefined : true\"\n @click.stop=\"onClick\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-chip--wrap {\n .v-chip {\n height: auto !important;\n }\n\n .v-chip .v-chip__content {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n white-space: pre-wrap;\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum LogLevel {\n Debug = 'DEBUG',\n Info = 'INFO',\n Notice = 'NOTICE',\n Warning = 'WARNING',\n Error = 'ERROR',\n Critical = 'CRITICAL',\n Alert = 'ALERT',\n Emergency = 'EMERGENCY',\n Default = Info,\n}\n\nexport function useLogLevel() {\n const logLevelOptions = ref<ValueObjectOption<LogLevel>[]>([\n {\n value: LogLevel.Debug,\n title: LogLevel.Debug,\n color: 'blue-grey lighten-5',\n },\n {\n value: LogLevel.Info,\n title: LogLevel.Info,\n color: 'blue-grey lighten-3',\n },\n {\n value: LogLevel.Notice,\n title: LogLevel.Notice,\n color: 'amber lighten-4',\n },\n {\n value: LogLevel.Warning,\n title: LogLevel.Warning,\n color: 'amber',\n },\n {\n value: LogLevel.Error,\n title: LogLevel.Error,\n color: 'red',\n },\n {\n value: LogLevel.Critical,\n title: LogLevel.Critical,\n color: 'red accent-4',\n },\n {\n value: LogLevel.Alert,\n title: LogLevel.Alert,\n color: 'pink',\n },\n {\n value: LogLevel.Emergency,\n title: LogLevel.Emergency,\n color: 'ping darken-4',\n },\n ])\n\n const getLogLevelOption = (value: LogLevel) => {\n return logLevelOptions.value.find((item) => item.value === value)\n }\n\n return {\n logLevelOptions,\n getLogLevelOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { type LogLevel, useLogLevel } from '@/model/valueObject/LogLevel'\n\nconst props = withDefaults(\n defineProps<{\n level: LogLevel\n }>(),\n {}\n)\n\nconst { getLogLevelOption } = useLogLevel()\nconst levelOption = computed(() => {\n return getLogLevelOption(props.level)\n})\n</script>\n\n<template>\n <VChip\n v-if=\"levelOption\"\n :color=\"levelOption.color\"\n label\n size=\"small\"\n >\n {{ levelOption.title }}\n </VChip>\n</template>\n","export const numberToString = (value: number): string => {\n return '' + value\n}\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { isNumber, isString } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { numberToString } from '@/utils/number'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string\n notifyT?: string\n dataCy?: string\n }>(),\n {\n notifyT: 'common.alert.textWasCopied',\n dataCy: 'copy-text',\n }\n)\n\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\nconst { t } = useI18n()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!isSupported) return\n if (isNumber(props.value)) {\n copy(numberToString(props.value)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.value) && props.value.length) {\n copy(props.value).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <div\n :class=\"{ 'cursor-pointer': isSupported }\"\n :data-cy=\"dataCy\"\n class=\"d-inline-flex align-center anzu-copy-text\"\n @click.stop=\"onClick\"\n >\n <span>{{ value }}</span>\n <VIcon\n v-if=\"isSupported\"\n class=\"ml-1\"\n size=\"x-small\"\n icon=\"mdi-content-copy\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n Copy\n </VTooltip>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-copy-text {\n .v-icon {\n opacity: 0;\n }\n\n &:hover {\n .v-icon {\n opacity: 1;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | undefined\n size?: string\n dataCy?: string | undefined\n }>(),\n {\n color: undefined,\n size: 'small',\n dataCy: undefined,\n }\n)\n\nconst customColorClass = computed(() => {\n return isUndefined(props.color) ? 'a-chip-no-link--custom-color' : ''\n})\n</script>\n\n<template>\n <VChip\n :color=\"color as string\"\n :data-cy=\"dataCy\"\n class=\"a-chip-no-link\"\n :class=\"customColorClass\"\n label\n :size=\"size as string\"\n >\n <slot />\n </VChip>\n</template>\n","<script lang=\"ts\" setup>\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport ADatetime from '@/components/ADatetime.vue'\n\n// todo add user details, find generic way for all systems\n\nwithDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n hideCreatedBy?: boolean\n hideModifiedBy?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n hideCreatedBy: false,\n hideModifiedBy: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow\n v-if=\"!hideCreatedAt\"\n :title=\"t('common.model.tracking.created')\"\n >\n <ADatetime :date-time=\"data.createdAt\" />\n </ARow>\n <ARow\n v-if=\"!hideModifiedAt\"\n :title=\"t('common.model.tracking.modified')\"\n >\n <ADatetime :date-time=\"data.modifiedAt\" />\n </ARow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName?: string\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n }>(),\n {\n routeName: undefined,\n routeParams: undefined,\n buttonT: 'common.button.close',\n buttonClass: 'ml-2',\n dataCy: 'button-close',\n size: 36,\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (isUndefined(props.routeName)) {\n return undefined\n }\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"small\"\n variant=\"text\"\n :width=\"size\"\n :height=\"size\"\n :active=\"false\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: 'button-create',\n size: 36,\n variant: 'primary',\n }\n)\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n :width=\"size\"\n :height=\"size\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n variant?: ButtonVariant\n buttonT?: string\n buttonClass?: string\n dialogMessageT?: string\n dialogConfirmButtonT?: string\n dialogCancelButtonT?: string\n dialogConfirmColor?: string\n dialogZIndex?: number\n dialogMaxWidth?: number\n dataCy?: string\n disabled?: boolean\n disableCloseAfterConfirm?: boolean\n loading?: boolean\n color?: string | undefined\n size?: number\n }>(),\n {\n variant: 'icon',\n buttonT: 'common.button.delete',\n buttonClass: 'ml-2',\n dialogMessageT: 'common.system.modal.confirmDelete',\n dialogConfirmButtonT: 'common.button.delete',\n dialogCancelButtonT: 'common.button.cancel',\n dialogConfirmColor: 'primary',\n dialogZIndex: 200,\n dialogMaxWidth: 300,\n dataCy: 'button-delete',\n disabled: false,\n disableCloseAfterConfirm: false,\n color: undefined,\n size: 36,\n }\n)\nconst emit = defineEmits<{\n (e: 'deleteRecord'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('deleteRecord')\n if (!props.disableCloseAfterConfirm) closeDialog()\n}\n\nconst closeDialog = () => {\n dialog.value = false\n}\n\nconst onCancel = () => {\n closeDialog()\n}\n\nconst { t } = useI18n()\n\ndefineExpose({\n closeDialog,\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :disabled=\"disabled\"\n :color=\"color\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :color=\"color\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n persistent\n :width=\"500\"\n no-click-animation\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t(dialogMessageT) }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n :disabled=\"loading\"\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t(dialogCancelButtonT) }}\n </ABtnTertiary>\n <ABtnPrimary\n :color=\"dialogConfirmColor\"\n :loading=\"loading\"\n data-cy=\"button-confirm-delete\"\n @click.stop=\"onConfirm\"\n >\n {{ t(dialogConfirmButtonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { useRouter } from 'vue-router'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-2',\n dataCy: 'button-edit',\n loading: false,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'editRecord'): void\n}>()\n\nconst { t } = useI18n()\n\nconst router = useRouter()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('editRecord')\n router.push(routerToComputed.value)\n}\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <span>{{ t(buttonT) }}</span>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nwithDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n }>(),\n {\n buttonT: 'common.button.saveAndClose',\n buttonClass: 'ml-2',\n dataCy: 'button-save-close',\n loading: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecordAndClose'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecordAndClose')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n color=\"primary\"\n icon=\"\"\n variant=\"outlined\"\n :width=\"36\"\n :height=\"35\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n main-icon=\"mdi-content-save\"\n secondary-icon=\"mdi-close\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.save',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecord'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecord')\n}\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n color=\"primary\"\n rounded=\"pill\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { isNumber, isString } from '@/utils/common'\nimport { numberToString } from '@/utils/number'\nimport { useAlerts } from '@/composables/system/alerts'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nconst props = withDefaults(\n defineProps<{\n id: number | string\n buttonT?: string\n buttonClass?: string\n iconT?: string\n notifyT?: string\n dataCy?: string\n size?: 'small' | 'x-small'\n }>(),\n {\n buttonT: 'common.button.copyId',\n buttonClass: 'ml-1',\n iconT: 'common.button.id',\n notifyT: 'common.alert.idWasCopied',\n dataCy: 'table-copy',\n size: 'x-small',\n }\n)\n\nconst { t } = useI18n()\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (isNumber(props.id) && props.id > 0) {\n copy(numberToString(props.id)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.id) && props.id.length) {\n copy(props.id).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <VBtn\n v-if=\"isSupported\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :size=\"size\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n :secondary-text=\"t(iconT)\"\n main-icon=\"mdi-content-copy\"\n size=\"small\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.detail',\n buttonClass: 'ml-1',\n dataCy: 'table-detail',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-1',\n dataCy: 'table-edit',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport type { ButtonVariantText } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n disableMore?: boolean\n size?: undefined | 'small' | 'x-small'\n variant?: ButtonVariantText\n rounded?: 'pill' | undefined\n color?: string\n }>(),\n {\n buttonT: '',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n disableMore: false,\n size: undefined,\n variant: 'primary',\n rounded: undefined,\n color: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'onClick'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('onClick')\n}\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n return 'text'\n default:\n return 'flat'\n }\n})\n\nconst loadingComputed = computed(() => {\n if (!props.loading) return false\n switch (variantComputed.value) {\n case 'flat':\n return 'white'\n default:\n return 'primary'\n }\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n v-if=\"disableMore\"\n :variant=\"variantComputed\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div\n v-else\n class=\"a-button-split d-inline-flex\"\n :class=\"buttonClass + ' a-button-split--' + variant\"\n >\n <VBtn\n class=\"a-button-split__main\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n :size=\"size\"\n :rounded=\"rounded\"\n :color=\"color\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div class=\"a-button-split__divider d-inline-flex\" />\n <VDivider\n v-if=\"variant === 'tertiary'\"\n vertical\n class=\"my-2 border-opacity-50\"\n :color=\"color\"\n />\n <VBtn\n :variant=\"variantComputed\"\n :disabled=\"disabled || loading\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n class=\"a-button-split__more\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n <VMenu\n activator=\"parent\"\n location=\"bottom right\"\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <slot name=\"default\" />\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-button-split {\n .a-button-split__main {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n padding-right: 10px !important;\n }\n\n .a-button-split__more {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n padding: 0 4px 0 0 !important;\n min-width: 32px !important;\n }\n\n .a-button-split__divider {\n display: inline-block;\n width: 1px;\n }\n\n &--secondary {\n .a-button-split__more {\n left: -2px;\n }\n }\n}\n</style>\n","import { computed, readonly, ref } from 'vue'\nimport { useStorage } from '@vueuse/core'\n\nexport enum ThemeSettings {\n Light = 'light',\n Dark = 'dark',\n Auto = 'auto',\n}\n\nexport enum Theme {\n Light = 'light',\n Dark = 'dark',\n}\n\nconst storedSettings = useStorage('theme', ThemeSettings.Light)\n\nconst QUERY = '(prefers-color-scheme: dark)'\n\nconst settings = ref<ThemeSettings>(\n Object.values(ThemeSettings).some((val) => val === storedSettings.value)\n ? <ThemeSettings>storedSettings.value\n : ThemeSettings.Light\n)\nconst theme = ref<Theme>(Theme.Light)\nconst systemHasDarkPreference = ref(window.matchMedia && window.matchMedia(QUERY).matches)\n\nconst setTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Auto:\n theme.value = systemHasDarkPreference.value ? Theme.Dark : Theme.Light\n break\n case ThemeSettings.Light:\n theme.value = Theme.Light\n break\n case ThemeSettings.Dark:\n theme.value = Theme.Dark\n break\n }\n}\nsetTheme()\n\nconst setThemeSettings = (value: ThemeSettings) => {\n settings.value = value\n storedSettings.value = value\n}\n\nwindow.matchMedia(QUERY).addEventListener('change', (event) => {\n systemHasDarkPreference.value = event.matches\n setTheme()\n})\n\nconst toolbarColor = computed(() => {\n return theme.value === Theme.Light ? 'white' : '#1A1A1A'\n})\n\nexport function useTheme() {\n const setThemeAuto = () => {\n setThemeSettings(ThemeSettings.Auto)\n setTheme()\n }\n\n const setThemeDark = () => {\n setThemeSettings(ThemeSettings.Dark)\n setTheme()\n }\n\n const setThemeLight = () => {\n setThemeSettings(ThemeSettings.Light)\n setTheme()\n }\n\n const toggleTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Light:\n setThemeDark()\n break\n case ThemeSettings.Dark:\n setThemeAuto()\n break\n default:\n setThemeLight()\n break\n }\n }\n\n return {\n settings: readonly(settings),\n theme: readonly(theme),\n toolbarColor: readonly(toolbarColor),\n toggleTheme,\n setThemeAuto,\n setThemeDark,\n setThemeLight,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { ThemeSettings, useTheme } from '@/composables/themeSettings'\n\nconst { setThemeDark, setThemeAuto, setThemeLight, settings } = useTheme()\n\nconst { t } = useI18n()\n\nconst isOpen = ref(false)\n</script>\n\n<template>\n <VMenu\n v-model=\"isOpen\"\n close-on-content-click\n >\n <template #activator=\"{ props }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"props\"\n variant=\"text\"\n data-cy=\"settings-theme\"\n >\n <div v-if=\"settings === ThemeSettings.Auto\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-auto\"\n :size=\"32\"\n />{{ t('common.system.theme.auto') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Light\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-7\"\n :size=\"32\"\n />{{ t('common.system.theme.light') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Dark\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-4\"\n :size=\"32\"\n />{{ t('common.system.theme.dark') }}\n </div>\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n :title=\"t('common.system.theme.auto')\"\n @click.stop=\"setThemeAuto\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-auto\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.light')\"\n @click.stop=\"setThemeLight\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-7\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.dark')\"\n @click.stop=\"setThemeDark\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-4\"\n />\n </template>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 7410 3900\"\n >\n <path\n fill=\"#b22234\"\n d=\"M0 0h7410v3900H0z\"\n />\n <path\n d=\"M0 450h7410m0 600H0m0 600h7410m0 600H0m0 600h7410m0 600H0\"\n stroke=\"#fff\"\n stroke-width=\"300\"\n />\n <path\n fill=\"#3c3b6e\"\n d=\"M0 0h2964v2100H0z\"\n />\n <g fill=\"#fff\">\n <g id=\"d\">\n <g id=\"c\">\n <g id=\"e\">\n <g id=\"b\">\n <path\n id=\"a\"\n d=\"M247 90l70.534 217.082-184.66-134.164h228.253L176.466 307.082z\"\n />\n <use\n xlink:href=\"#a\"\n y=\"420\"\n />\n <use\n xlink:href=\"#a\"\n y=\"840\"\n />\n <use\n xlink:href=\"#a\"\n y=\"1260\"\n />\n </g>\n <use\n xlink:href=\"#a\"\n y=\"1680\"\n />\n </g>\n <use\n xlink:href=\"#b\"\n x=\"247\"\n y=\"210\"\n />\n </g>\n <use\n xlink:href=\"#c\"\n x=\"494\"\n />\n </g>\n <use\n xlink:href=\"#d\"\n x=\"988\"\n />\n <use\n xlink:href=\"#c\"\n x=\"1976\"\n />\n <use\n xlink:href=\"#e\"\n x=\"2470\"\n />\n </g>\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 900 600\"\n >\n <rect\n width=\"900\"\n height=\"600\"\n fill=\"#cccccc\"\n />\n </svg>\n</template>\n","<script setup lang=\"ts\">\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport { computed } from 'vue'\nimport FlagSk from '@/components/flags/FlagSk.vue'\nimport FlagEn from '@/components/flags/FlagEn.vue'\nimport FlagEmpty from '@/components/flags/FlagEmpty.vue'\n\n// flag source: https://github.com/hampusborgos/country-flags\n\nconst props = withDefaults(\n defineProps<{\n code?: LanguageCode | undefined\n dataCy?: string\n }>(),\n {\n code: 'xx',\n dataCy: 'flag-country',\n }\n)\n\nconst currentFlagComponent = computed(() => {\n switch (props.code) {\n case 'sk':\n return FlagSk\n case 'en':\n return FlagEn\n default:\n return FlagEmpty\n }\n})\n</script>\n\n<template>\n <div class=\"flag\">\n <component\n :is=\"currentFlagComponent\"\n :data-cy=\"dataCy\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Language, LanguageCode } from '@/composables/languageSettings'\nimport { ALL_LANGUAGES, modifyLanguageSettings, useLanguageSettings } from '@/composables/languageSettings'\nimport { computed, inject } from 'vue'\nimport { isUndefined } from '@/utils/common'\nimport FlagCountry from '@/components/flags/FlagCountry.vue'\nimport type { CurrentUserType } from '@/AnzuSystemsCommonAdmin'\nimport { ROLE_SUPER_ADMIN } from '@/composables/system/ability'\nimport { AvailableLanguagesSymbol, CurrentUserSymbol, DefaultLanguageSymbol } from '@/components/injectionKeys'\n\nconst emit = defineEmits<{\n (e: 'afterChange', code: LanguageCode): void\n}>()\n\nconst currentUser = inject(CurrentUserSymbol) as CurrentUserType\nconst configAvailableLanguages = inject(AvailableLanguagesSymbol) as LanguageCode[]\nconst configDefaultLanguage = inject(DefaultLanguageSymbol) as LanguageCode\n// @ts-ignore\nconst { setLanguage } = modifyLanguageSettings(configAvailableLanguages, configDefaultLanguage)\nconst { currentLanguageCode } = useLanguageSettings()\n\nconst onLanguageChange = (code: LanguageCode) => {\n const result = setLanguage(code)\n if (result) emit('afterChange', code)\n}\n\nconst currentLocale = computed(() => {\n const found = ALL_LANGUAGES.find((item) => item.code === currentLanguageCode.value)\n if (isUndefined(found)) {\n return ALL_LANGUAGES[0]\n }\n return found as Language\n})\n\nconst availableLocales = computed(() => {\n return ALL_LANGUAGES.filter(\n (item) =>\n (configAvailableLanguages.includes(item.code) || item.code === 'xx') &&\n (!item.adminOnly || currentUser.value?.roles.includes(ROLE_SUPER_ADMIN))\n )\n})\n</script>\n\n<template>\n <VMenu>\n <template #activator=\"{ props }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"props\"\n variant=\"text\"\n data-cy=\"settings-language\"\n >\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"currentLocale?.code\" />\n </VAvatar>\n {{ currentLocale.title }}\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-for=\"locale in availableLocales\"\n :key=\"locale.code\"\n @click.stop=\"onLanguageChange(locale.code)\"\n >\n <VListItemTitle>\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"locale.code\" />\n </VAvatar>\n {{ locale.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n\n<style lang=\"scss\" scoped>\n.flag {\n position: relative;\n width: 30px;\n height: 30px;\n\n :deep(svg) {\n width: 90px;\n height: 60px;\n position: absolute;\n top: -15px;\n left: -27px;\n transform: scale(0.7);\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nconst { t } = useI18n()\n\nconst reloadAdmin = () => {\n window.location.reload()\n}\n</script>\n\n<template>\n <span\n v-once\n class=\"system-bar-new-version\"\n >\n {{ t('common.system.newVersionText') }}\n <span\n class=\"text-decoration-underline cursor-pointer\"\n @click.stop=\"reloadAdmin\"\n >\n {{ t('common.system.newVersionReload') }}\n </span>\n </span>\n</template>\n","export const isAnzuApiForbiddenError = (error: unknown): error is AnzuNewVersionFetchError => {\n return error instanceof AnzuNewVersionFetchError\n}\n\nexport class AnzuNewVersionFetchError extends Error {\n constructor(message = '') {\n super(message)\n this.name = 'AnzuNewVersionFetchError'\n this.message = message\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\nimport { useIntervalFn } from '@vueuse/core'\nimport ASystemBarNewVersion from '@/components/systemBar/ASystemBarNewVersion.vue'\nimport { isUndefined } from '@/utils/common'\nimport { AnzuNewVersionFetchError } from '@/model/error/AnzuNewVersionFetchError'\n\nconst props = withDefaults(\n defineProps<{\n currentVersion: string\n checkInterval?: number\n jsonRelativePath?: string\n }>(),\n {\n checkInterval: 60000,\n jsonRelativePath: 'config.json',\n }\n)\n\nconst showSystemBar = ref(false)\n\nconst checkNewVersion = async () => {\n try {\n const res = await fetch(`/${props.jsonRelativePath}?random=${Date.now()}`)\n if (res.ok) {\n const contentType = res.headers.get('content-type')\n if (!contentType || !contentType.includes('application/json')) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect content type.')\n }\n const json = await res.json()\n if (Object.keys(json).length < 1) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response body.')\n }\n showSystemBar.value = !isUndefined(json.appVersion) && json.appVersion !== props.currentVersion\n\n return\n }\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response code.')\n } catch (error) {\n if (error instanceof AnzuNewVersionFetchError) {\n console.log(error.message)\n return\n }\n if (error instanceof SyntaxError) {\n console.log('There was a SyntaxError', error)\n return\n }\n console.log('There was an error in new version fetch', error)\n }\n}\n\nconst systemBarComponent = computed(() => {\n return ASystemBarNewVersion\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { pause } = useIntervalFn(() => {\n checkNewVersion()\n}, props.checkInterval)\n\nonBeforeUnmount(() => {\n pause()\n})\n</script>\n\n<template>\n <VAppBar\n v-if=\"showSystemBar\"\n height=\"24\"\n color=\"orange accent-3\"\n elevation=\"0\"\n :order=\"-1\"\n >\n <div class=\"text-center w-100 text-caption pb-1\">\n <component :is=\"systemBarComponent\" />\n </div>\n </VAppBar>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n user?: AnzuUserMinimal | undefined | null\n size?: number\n containerClass?: string\n }>(),\n {\n user: undefined,\n size: 36,\n containerClass: '',\n }\n)\n\nconst color = computed(() => {\n if (props.user?.avatar.color && props.user.avatar.color.length === 7) {\n return props.user.avatar.color\n }\n return '#3f6ad8'\n})\n\nconst fontSize = computed(() => {\n return props.size * 0.5 + 'px'\n})\n\nconst text = computed(() => {\n if (!props.user) return ''\n if (props.user.avatar.text.length > 0) return props.user.avatar.text\n const firstNameLastName = props.user.person.firstName.charAt(0) + props.user.person.lastName.charAt(0)\n if (firstNameLastName.length > 0) return firstNameLastName\n return props.user.email.slice(0, 2)\n})\n</script>\n\n<template>\n <VAvatar\n :color=\"color\"\n class=\"text-uppercase\"\n :class=\"containerClass\"\n :size=\"size\"\n >\n <div\n class=\"d-inline-flex text-white font-weight-light\"\n :style=\"{ fontSize: fontSize }\"\n >\n {{ text }}\n </div>\n </VAvatar>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string\n label?: string\n loading?: boolean\n readonly?: boolean\n required?: boolean\n randomColor?: boolean\n hideLabel?: boolean\n }>(),\n {\n label: '',\n loading: false,\n readonly: false,\n required: false,\n randomColor: false,\n hideLabel: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string): void\n}>()\n\nconst swatches = [\n ['#F44336', '#E91E63', '#9C27B0', '#673AB7'],\n ['#2196F3', '#03A9F4', '#00BCD4', '#009688'],\n ['#4CAF50', '#8BC34A', '#CDDC39', '#F9A825'],\n ['#FF6F00', '#FF5722', '#795548', '#607D8B'],\n ['#757575', '#000000', '#3F51B5'],\n]\nconst generatedColor = ref('')\n\nconst generateRandomColor = () => {\n const randomRow = Math.floor(Math.random() * swatches.length)\n generatedColor.value = swatches[randomRow][Math.floor(Math.random() * swatches[randomRow].length)]\n return generatedColor.value\n}\n\nconst variantComputed = computed(() => {\n return props.modelValue.length > 0 ? 'flat' : 'tonal'\n})\n\nconst buttonColorComputed = computed(() => {\n return props.modelValue.length > 0 ? props.modelValue : undefined\n})\n\nconst onColorPickerChange = (newColor: string) => {\n emit('update:modelValue', newColor)\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (newValue.length === 7) return\n if (newValue.length !== 7 && props.randomColor) {\n if (generatedColor.value === '') {\n emit('update:modelValue', generateRandomColor())\n return\n }\n emit('update:modelValue', generatedColor.value)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div>\n <label\n v-if=\"!hideLabel\"\n class=\"v-label mr-2\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"required\"\n />\n </label>\n <VBtn\n :variant=\"variantComputed\"\n icon\n :color=\"buttonColorComputed\"\n >\n <VMenu\n v-if=\"!readonly\"\n activator=\"parent\"\n >\n <VCard>\n <VColorPicker\n :model-value=\"buttonColorComputed\"\n :swatches=\"swatches\"\n class=\"a-color-picker--hide-controls\"\n elevation=\"0\"\n hide-canvas\n hide-inputs\n show-swatches\n @update:model-value=\"onColorPickerChange\"\n />\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-color-picker--hide-controls .v-color-picker__controls {\n display: none;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\nimport AAnzuUserAvatar from '@/components/AAnzuUserAvatar.vue'\n\nwithDefaults(\n defineProps<{\n currentUser: AnzuUserMinimal | undefined | null\n settingsRouteName: string\n logoutRouteName: string\n dataCy?: string\n }>(),\n {\n dataCy: 'navbar-user',\n }\n)\n\nconst { t } = useI18n()\n\nconst logoutDialog = ref(false)\n</script>\n\n<template>\n <VBtn\n variant=\"text\"\n icon\n size=\"small\"\n :data-cy=\"dataCy\"\n >\n <AAnzuUserAvatar\n :size=\"32\"\n :user=\"currentUser\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.currentUser.button') }}\n </VTooltip>\n <VMenu\n v-if=\"currentUser\"\n activator=\"parent\"\n >\n <VCard>\n <VList class=\"pb-0\">\n <VListItem\n class=\"pb-6\"\n lines=\"two\"\n >\n <template #prepend>\n <AAnzuUserAvatar\n :user=\"currentUser\"\n :size=\"40\"\n />\n </template>\n <VListItemTitle>{{ currentUser.person.fullName }}</VListItemTitle>\n <VListItemSubtitle>\n {{ currentUser.email }}<br>\n {{ currentUser.id }}\n </VListItemSubtitle>\n </VListItem>\n <VDivider />\n <VListItem\n :active=\"false\"\n prepend-icon=\"mdi-cog\"\n :to=\"{ name: settingsRouteName }\"\n data-cy=\"navbar-user-settings\"\n >\n {{ t('common.system.currentUser.settings') }}\n </VListItem>\n <VListItem\n prepend-icon=\"mdi-logout\"\n data-cy=\"navbar-user-logout\"\n @click.stop=\"logoutDialog = true\"\n >\n {{ t('common.system.currentUser.logout') }}\n <VDialog\n v-model=\"logoutDialog\"\n width=\"auto\"\n >\n <VCard v-if=\"logoutDialog\">\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n >\n <VToolbarTitle class=\"flex-fill\">\n {{ t('common.system.currentUser.logout') }}\n </VToolbarTitle>\n <VSpacer />\n <VBtn\n class=\"ml-2\"\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n data-cy=\"button-close\"\n @click.stop=\"logoutDialog = false\"\n />\n </VToolbar>\n <VCardText>{{ t('common.system.currentUser.logoutText') }}</VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn\n color=\"secondary\"\n variant=\"text\"\n data-cy=\"button-cancel\"\n @click.stop=\"logoutDialog = false\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n data-cy=\"button-confirm\"\n :to=\"{ name: logoutRouteName }\"\n >\n {{ t('common.system.currentUser.logoutConfirm') }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, ref, toRefs, watch } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { usePagination } from '@/composables/system/pagination'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\n// type FetchItemsByIdsType =\n// | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n// | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\ntype FetchItemsMinimalType = (pagination: Pagination, filterBag: FilterBag) => Promise<any[]>\n\ntype UseCachedType = () => {\n fetch: any\n add: any\n addManualMinimal: any\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideLabel?: boolean\n fetchItemsMinimal: FetchItemsMinimalType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n loading?: boolean\n useCached: UseCachedType\n itemTitle?: string\n itemValue?: string\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n loading: false,\n itemTitle: 'name',\n itemValue: 'id',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'focus', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetch, add, addManualMinimal } = props.useCached()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null | undefined>(newValue))\n },\n})\n\nconst { t } = useI18n()\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst isFocused = ref(false)\nconst search = ref('')\nconst loadingLocal = ref(false)\nconst { innerFilter } = toRefs(props)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\n\nconst fetchedItemsMinimal = ref<Map<IntegerId | DocId, any>>(new Map())\n// const fetchedItems = ref<Map<IntegerId | DocId, string>>(new Map())\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', modelValue.value)\n}\n\nconst onBlur = () => {\n isFocused.value = false\n props.v?.$touch()\n emit('blur', modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n search.value = query\n}\n\nconst apiSearch = async (query: string) => {\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItemsMinimal.value.clear()\n const res = await props.fetchItemsMinimal(pagination, innerFilter.value)\n res.forEach((item: any) => {\n fetchedItemsMinimal.value.set(item[props.itemValue], item)\n })\n loadingLocal.value = false\n}\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final: Map<IntegerId | DocId, string> = new Map()\n if (isArray(modelValue.value)) {\n modelValue.value.forEach((value) => {\n final.set(value, '')\n })\n } else if (modelValue.value) {\n final.set(modelValue.value, '')\n }\n fetchedItemsMinimal.value.forEach((value) => {\n final.set(value[props.itemValue], value[props.itemTitle])\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value }\n })\n})\n\nconst tryToAddFromFetchedItems = (ids: Set<DocId | IntegerId>) => {\n return new Promise<boolean>((resolve) => {\n fetchedItemsMinimal.value.forEach((value, key) => {\n if (ids.has(key)) {\n addManualMinimal(cloneDeep(value))\n }\n })\n return resolve(true)\n })\n}\n\nconst onClickClear = () => {\n apiSearch('')\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nconst deleteWasPressedTime = ref(0)\nconst onKeydownDelete = () => {\n deleteWasPressedTime.value = Date.now()\n}\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue.length === 0 && isFocused.value === true) {\n const now = Date.now()\n if (now - deleteWasPressedTime.value > 200) {\n search.value = oldValue\n return\n }\n }\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nwatch(\n modelValue,\n async (newValue) => {\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n return\n }\n const values = isArray(newValue) ? newValue : [newValue]\n const idsToFetch = new Set(values)\n await tryToAddFromFetchedItems(idsToFetch)\n\n if (idsToFetch.size > 0) {\n add(Array.from(idsToFetch) as Array<DocId & IntegerId>)\n fetch()\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :search=\"search\"\n chips\n :items=\"allItems\"\n no-filter\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :loading=\"loadingLocal\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @update:search=\"onSearchUpdate\"\n @click:clear=\"onClickClear\"\n @keydown.delete=\"onKeydownDelete\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n <template\n v-if=\"!multiple\"\n #selection\n />\n <!-- @vue-skip -->\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <slot\n name=\"chip\"\n :props=\"chipProps\"\n :item=\"chipItem\"\n >\n <VChip\n v-bind=\"chipProps\"\n :text=\"chipItem.title\"\n />\n </slot>\n </template>\n <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <slot\n name=\"item\"\n :props=\"itemProps\"\n :item=\"itemItem\"\n >\n <VListItem :props=\"itemProps\" />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n title?: string | undefined\n logoUrl?: string | undefined\n loginUrl?: undefined | (() => string)\n dataCy?: string\n }>(),\n {\n title: undefined,\n logoUrl: undefined,\n loginUrl: undefined,\n dataCy: 'button-login',\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex justify-center align-center flex-column\">\n <img\n :src=\"logoUrl\"\n class=\"logo pb-2\"\n alt=\"\"\n >\n <h1\n v-if=\"title\"\n class=\"display-1 my-3\"\n >\n {{ title }}\n </h1>\n <h4 class=\"mb-3 body-1\">\n <span>{{ t('common.system.login.text') }}</span>\n </h4>\n <div class=\"py-5\">\n <VBtn\n v-if=\"loginUrl\"\n :data-cy=\"dataCy\"\n :href=\"loginUrl()\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.login.text') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.logo {\n display: block;\n max-width: 120px;\n height: auto;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { onMounted } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n logoutUrl?: undefined | (() => string)\n }>(),\n {\n logoutUrl: undefined,\n }\n)\n\nonMounted(() => {\n if (!props.logoutUrl) return\n window.location.href = props.logoutUrl()\n})\n</script>\n\n<template>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.unauthorized.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.unauthorized.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.unauthorized.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.notFound.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.notFound.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.notFound.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { JobBase } from '@/types/Job'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport AJobStatusChip from '@/components/job/AJobStatusChip.vue'\nimport ADatetime from '@/components/ADatetime.vue'\n\nwithDefaults(\n defineProps<{\n job: JobBase\n loading?: boolean\n }>(),\n {\n loading: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <ARow\n :title=\"t('common.job.model.id')\"\n :value=\"job.id\"\n />\n <ARow :title=\"t('common.job.model._resourceName')\">\n <slot name=\"resource-name\">\n {{ job._resourceName }}\n </slot>\n </ARow>\n <ARow :title=\"t('common.job.model.status')\">\n <AJobStatusChip :value=\"job.status\" />\n </ARow>\n <ARow :title=\"t('common.job.model.startedAt')\">\n <ADatetime :date-time=\"job.startedAt\" />\n </ARow>\n <ARow :title=\"t('common.job.model.finishedAt')\">\n <ADatetime :date-time=\"job.finishedAt\" />\n </ARow>\n <ARow\n :title=\"t('common.job.model.result')\"\n :value=\"job.result\"\n />\n </div>\n</template>\n","import type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport type { ResourceNameSystemAware } from '@/types/ResourceNameSystemAware'\nimport type { AssetFile } from '@/types/coreDam/AssetFile'\n\ninterface Texts {\n displayTitle: string\n}\n\nexport type DamDistributionServiceName = string\n\nexport enum DamAssetStatus {\n Draft = 'draft',\n WithFile = 'with_file',\n Deleting = 'deleting',\n Default = Draft,\n}\n\nexport enum DamAssetType {\n Image = 'image',\n Audio = 'audio',\n Video = 'video',\n Document = 'document',\n Default = Image,\n}\n\nexport type DamAssetTypeValues = `${DamAssetType}`\n\nexport const damAssetTypeValueToEnum = (value: DamAssetTypeValues) => {\n switch (value) {\n case 'image':\n return DamAssetType.Image\n case 'audio':\n return DamAssetType.Audio\n case 'video':\n return DamAssetType.Video\n case 'document':\n return DamAssetType.Document\n default:\n return DamAssetType.Default\n }\n}\n\ninterface Attributes {\n assetType: DamAssetType\n assetStatus: DamAssetStatus\n}\n\nexport interface AssetFileProperties {\n distributesInServices: DamDistributionServiceName[]\n slotNames: string[]\n fromRss: boolean\n width: number\n height: number\n}\n\ninterface Flags {\n described: boolean\n visible: boolean\n}\n\nexport interface AssetMetadataSuggestions extends Record<string, Array<string>> {}\n\nexport type AssetCustomData = Record<string, any>\n\ninterface Metadata {\n authorSuggestions: AssetMetadataSuggestions\n keywordSuggestions: AssetMetadataSuggestions\n customData: any\n}\n\nexport interface AssetSearchListItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n metadata: Metadata\n assetFileProperties: AssetFileProperties\n}\n\nexport interface AssetDetailItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n metadata: Metadata\n distributionCategory: DocIdNullable\n assetFileProperties: AssetFileProperties\n}\n\nexport interface AssetMetadataDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware, Metadata {\n id: DocId\n customData: AssetCustomData\n}\n\nexport type AssetExternalProviderId = string | number\nexport type AssetExternalProviderIdNullable = AssetExternalProviderId | null\n\nexport type AssetExternalProviderMetadata = Record<string, string | number | number[] | string[] | boolean>\n","import { reactive } from 'vue'\nimport { makeFilterHelper } from '@/lib'\n\nconst makeFilter = makeFilterHelper('common', 'assetSelect')\n\nconst filter = reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text', variant: 'search' }),\n },\n type: {\n ...makeFilter({ name: 'type', default: [] }),\n },\n status: {\n ...makeFilter({ name: 'status', default: ['with_file'] }),\n },\n mostDominantColor: {\n ...makeFilter({ name: 'mostDominantColor', default: [] }),\n },\n closestMostDominantColor: {\n ...makeFilter({ name: 'closestMostDominantColor', default: [] }),\n },\n codecName: {\n ...makeFilter({ name: 'codecName', default: [] }),\n },\n orientation: {\n ...makeFilter({ name: 'orientation', default: [] }),\n },\n described: {\n ...makeFilter({ name: 'described', default: null }),\n },\n visible: {\n ...makeFilter({ name: 'visible', default: true }),\n },\n generatedBySystem: {\n ...makeFilter({ name: 'generatedBySystem', default: false }),\n },\n inPodcast: {\n ...makeFilter({ name: 'inPodcast', default: null }),\n },\n fromRss: {\n ...makeFilter({ name: 'fromRss', default: null }),\n },\n slotNames: {\n ...makeFilter({ name: 'slotNames', default: [] }),\n },\n distributedInServices: {\n ...makeFilter({ name: 'distributedInServices', default: [], multiple: true }),\n },\n licences: {\n ...makeFilter({ name: 'licences', default: [] }),\n },\n shortestDimensionFrom: {\n ...makeFilter({ name: 'shortestDimensionFrom', default: null }),\n },\n shortestDimensionUntil: {\n ...makeFilter({ name: 'shortestDimensionUntil', default: null }),\n },\n pixelSizeFrom: {\n ...makeFilter({ name: 'pixelSizeFrom', default: null }),\n },\n pixelSizeUntil: {\n ...makeFilter({ name: 'pixelSizeUntil', default: null }),\n },\n widthFrom: {\n ...makeFilter({ name: 'widthFrom', default: null }),\n },\n widthUntil: {\n ...makeFilter({ name: 'widthUntil', default: null }),\n },\n heightFrom: {\n ...makeFilter({ name: 'heightFrom', default: null }),\n },\n heightUntil: {\n ...makeFilter({ name: 'heightUntil', default: null }),\n },\n ratioWidthFrom: {\n ...makeFilter({ name: 'ratioWidthFrom', default: null }),\n },\n ratioWidthUntil: {\n ...makeFilter({ name: 'ratioWidthUntil', default: null }),\n },\n ratioHeightFrom: {\n ...makeFilter({ name: 'ratioHeightFrom', default: null }),\n },\n ratioHeightUntil: {\n ...makeFilter({ name: 'ratioHeightUntil', default: null }),\n },\n rotationFrom: {\n ...makeFilter({ name: 'rotationFrom', default: null }),\n },\n rotationUntil: {\n ...makeFilter({ name: 'rotationUntil', default: null }),\n },\n durationFrom: {\n ...makeFilter({ name: 'durationFrom', default: null }),\n },\n durationUntil: {\n ...makeFilter({ name: 'durationUntil', default: null }),\n },\n bitrateFrom: {\n ...makeFilter({ name: 'bitrateFrom', default: null }),\n },\n bitrateUntil: {\n ...makeFilter({ name: 'bitrateUntil', default: null }),\n },\n slotsCountFrom: {\n ...makeFilter({ name: 'slotsCountFrom', default: null }),\n },\n slotsCountUntil: {\n ...makeFilter({ name: 'slotsCountUntil', default: null }),\n },\n createdAtFrom: {\n ...makeFilter({ name: 'createdAtFrom', default: null }),\n },\n createdAtUntil: {\n ...makeFilter({ name: 'createdAtUntil', default: null }),\n },\n})\n\nexport function useAssetListFilter() {\n return filter\n}\n","import type { DocId } from '@/types/common'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\n\nexport enum AssetSelectReturnType {\n MainFileId = 'mainFileId',\n AssetId = 'assetId',\n Asset = 'asset',\n}\n\nexport type AssetSelectReturnTypeValues = `${AssetSelectReturnType}`\n\nexport type AssetSelectReturnData = AssetSelectReturnMainFileId | AssetSelectReturnAssetId | AssetSelectReturnAsset\n\ninterface AssetSelectReturnMainFileId {\n type: 'mainFileId'\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAssetId {\n type: 'assetId'\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAsset {\n type: 'asset'\n value: Array<AssetSearchListItemDto>\n}\n\nexport const assetSelectReturnTypeValuesToEnum = (value: AssetSelectReturnTypeValues) => {\n switch (value) {\n case 'assetId':\n return AssetSelectReturnType.AssetId\n case 'asset':\n return AssetSelectReturnType.Asset\n case 'mainFileId':\n default:\n return AssetSelectReturnType.MainFileId\n }\n}\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport { DamAssetType as AssetTypeValue } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\nimport { computed, ref, toRaw } from 'vue'\nimport { type AssetSelectReturnData, AssetSelectReturnType } from '@/types/coreDam/AssetSelect'\n\nexport interface AssetSelectListItem {\n asset: AssetSearchListItemDto\n selected: boolean\n}\n\nexport const useAssetSelectStore = defineStore('commonAdminCoreDamAssetSelectStore', () => {\n const assetListItems = ref<Array<AssetSelectListItem>>([])\n const loader = ref(false)\n const licenceId = ref(0)\n const assetType = ref<AssetTypeValue>(AssetTypeValue.Default)\n const selectedAssets = ref<Map<DocId, AssetSelectListItem>>(new Map())\n const singleMode = ref(false)\n const minCount = ref(0)\n const maxCount = ref(0)\n\n function showLoader() {\n loader.value = true\n }\n\n function hideLoader() {\n loader.value = false\n }\n\n function setLicenceId(value: number) {\n licenceId.value = value\n }\n\n function setSingleMode(value: boolean) {\n singleMode.value = value\n }\n\n function setAssetType(value: DamAssetType) {\n assetType.value = value\n }\n\n function setMinCount(value: number) {\n minCount.value = value\n }\n\n function setMaxCount(value: number) {\n maxCount.value = value\n }\n\n function setList(items: AssetSearchListItemDto[]) {\n assetListItems.value = items.map((item) => {\n return {\n asset: item,\n selected: false,\n }\n })\n }\n\n function appendList(items: AssetSearchListItemDto[]) {\n const assets = items.map((asset) => {\n return {\n asset: asset,\n selected: false,\n }\n })\n assetListItems.value = assetListItems.value.concat(assets)\n }\n\n function toggleSelectedByIndex(index: number) {\n if (!assetListItems.value[index]) return\n\n if (!singleMode.value && isSelectedMax.value && !assetListItems.value[index].selected) {\n return\n }\n\n assetListItems.value[index].selected = !assetListItems.value[index].selected\n\n if (singleMode.value && assetListItems.value[index].selected) {\n unselectAllExcept(index)\n clearSelected()\n addToSelected(assetListItems.value[index])\n return\n }\n\n if (!singleMode.value && assetListItems.value[index].selected) {\n addToSelected(assetListItems.value[index])\n return\n }\n\n removeFromSelected(assetListItems.value[index].asset.id)\n }\n\n function unselectAllExcept(ignoreIndex: number) {\n const items = assetListItems.value\n for (let i = 0; i < items.length; i++) {\n if (items[i].selected && i !== ignoreIndex) {\n items[i].selected = false\n }\n }\n }\n\n function clearSelected() {\n selectedAssets.value.clear()\n }\n\n function addToSelected(assetItem: AssetSelectListItem) {\n if (!selectedAssets.value.has(assetItem.asset.id)) {\n selectedAssets.value.set(assetItem.asset.id, assetItem)\n }\n }\n\n function removeFromSelected(assetId: DocId) {\n if (selectedAssets.value.has(assetId)) {\n selectedAssets.value.delete(assetId)\n }\n }\n\n function getSelectedMainFileIds(): DocId[] {\n const fileIds: Set<DocId> = new Set()\n for (const value of selectedAssets.value.values()) {\n if (value.asset.mainFile?.id) {\n fileIds.add(value.asset.mainFile.id)\n }\n }\n return Array.from(fileIds)\n }\n\n function getSelectedAssetIds(): DocId[] {\n return Array.from(selectedAssets.value.keys())\n }\n\n function getSelectedAssets(): AssetSearchListItemDto[] {\n const assets: Array<AssetSearchListItemDto> = []\n for (const value of selectedAssets.value.values()) {\n assets.push(toRaw(value.asset))\n }\n return assets\n }\n\n function getSelectedData(type: AssetSelectReturnType): AssetSelectReturnData {\n switch (type) {\n case AssetSelectReturnType.AssetId:\n return {\n type: AssetSelectReturnType.AssetId,\n value: getSelectedAssetIds(),\n }\n case AssetSelectReturnType.Asset:\n return {\n type: AssetSelectReturnType.Asset,\n value: getSelectedAssets(),\n }\n case AssetSelectReturnType.MainFileId:\n default:\n return {\n type: AssetSelectReturnType.MainFileId,\n value: getSelectedMainFileIds(),\n }\n }\n }\n\n const isSelectedMax = computed(() => {\n return selectedCount.value >= maxCount.value\n })\n\n const selectedCount = computed(() => {\n return selectedAssets.value.size\n })\n\n function reset() {\n assetListItems.value = []\n loader.value = false\n clearSelected()\n }\n\n return {\n licenceId,\n assetType,\n singleMode,\n minCount,\n maxCount,\n selectedCount,\n selectedAssets,\n loader,\n assetListItems,\n getSelectedData,\n setAssetType,\n setLicenceId,\n setSingleMode,\n setMinCount,\n setMaxCount,\n showLoader,\n hideLoader,\n setList,\n appendList,\n toggleSelectedByIndex,\n clearSelected,\n reset,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useAssetSelectStore, import.meta.hot))\n}\n","import { ref } from 'vue'\nimport type { CommonAdminCoreDamOptions } from '@/AnzuSystemsCommonAdmin'\n\nimport { isUndefined } from '@/utils/common'\n\nconst commonAdminCoreDamOptions = ref<CommonAdminCoreDamOptions | undefined>(undefined)\n\nexport function initCommonAdminCoreDamOptions(data: CommonAdminCoreDamOptions) {\n commonAdminCoreDamOptions.value = data\n}\n\nexport function useCommonAdminCoreDamOptions(configName: string = 'default') {\n if (\n isUndefined(commonAdminCoreDamOptions.value) ||\n isUndefined(commonAdminCoreDamOptions.value.configs) ||\n isUndefined(commonAdminCoreDamOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n damClient: commonAdminCoreDamOptions.value.configs[configName].damClient,\n defaultLicenceId: commonAdminCoreDamOptions.value.configs[configName].defaultLicenceId,\n }\n}\n\nexport function useCommonAdminCoreDamOptionsGlobal() {\n if (\n isUndefined(commonAdminCoreDamOptions.value) ||\n isUndefined(commonAdminCoreDamOptions.value.configs)\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n apiTimeout: commonAdminCoreDamOptions.value.apiTimeout,\n uploadStatusFallback: commonAdminCoreDamOptions.value.uploadStatusFallback,\n notification: commonAdminCoreDamOptions.value.notification,\n }\n}\n","import { stringUrlTemplateReplace } from '@/utils/string'\nimport { isEmptyObject } from '@/utils/common'\n\nexport type UrlParams = {\n [key: string]: number | string\n}\n\nexport const replaceUrlParameters = (urlTemplate: string, urlParams: UrlParams, overrideUrlTemplate = '') => {\n if (isEmptyObject(urlParams)) return urlTemplate\n return stringUrlTemplateReplace(overrideUrlTemplate === '' ? urlTemplate : overrideUrlTemplate, urlParams)\n}\n","import { HTTP_STATUS_VALID_ALL } from '@/composables/statusCodes'\n\nexport const isValidHTTPStatus = (statusCode: number) => {\n return HTTP_STATUS_VALID_ALL.includes(statusCode)\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template R Response type\n */\nexport const apiFetchOne = <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .get(replaceUrlParameters(urlTemplate, urlParams), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { ref } from 'vue'\nimport { isArray, isBoolean, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\n\n/**\n * Docs: /doc/Admin-Cms-Doc/Filters.md\n */\nexport function useApiQueryBuilder() {\n const q = ref<string[]>([])\n\n const querySetLimit = (value: number): void => {\n queryAdd('limit', value)\n }\n\n const querySetOffset = (page: number, limit: number): void => {\n queryAdd('offset', page * limit - limit)\n }\n\n const querySetOrder = (field: string | null, desc: boolean): void => {\n if (!isNull(field) && field.length > 0) queryAdd('order[' + field + ']', desc ? 'desc' : 'asc')\n }\n\n const formatValue = (value: string | number | boolean): string | number => {\n if (isBoolean(value)) {\n return value ? '1' : '0'\n }\n return value\n }\n\n const queryAddFilter = (filterVariant: FilterVariant, field: string, value: string | number | boolean): void => {\n if (isString(value) && value.length === 0) return\n q.value.push('filter_' + filterVariant + '[' + field + ']=' + formatValue(value))\n }\n\n const getValue = (filter: Filter): string | number | boolean | null => {\n const model = filter.model\n if (isNull(model)) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n if (isString(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return encodeURIComponent(model)\n }\n if (isArray(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return model.map((item) => (isString(item) ? encodeURIComponent(item) : item)).join(',')\n }\n if (isNumber(model) || isBoolean(model)) {\n return model\n }\n\n return null\n }\n\n const queryAdd = (key: string, value: any): void => {\n q.value.push(key + '=' + value)\n }\n\n const queryBuild = (): string => {\n return '?' + q.value.join('&')\n }\n\n const querySetFilters = (filterBag: FilterBag): void => {\n const isSearchApi = !isUndefined(filterBag._elastic)\n for (const filterName in filterBag) {\n const filter = filterBag[filterName]\n const field = filter.field || filterName\n if (filter.exclude) {\n continue\n }\n const value = getValue(filter)\n if (isNull(value)) {\n continue\n }\n if (isSearchApi) {\n queryAdd(field, value)\n continue\n }\n queryAddFilter(filter.variant, field, value)\n }\n }\n\n return {\n querySetLimit,\n querySetOffset,\n querySetOrder,\n queryAddFilter,\n querySetFilters,\n queryAdd,\n queryBuild,\n }\n}\n","import { isObject } from '@/utils/common'\n\nexport interface ApiResponseList<T> {\n totalCount: number\n data: T\n}\n\nexport interface ApiInfiniteResponseList<T> {\n hasNextPage: boolean\n data: T\n}\n\nexport const isApiResponseList = <T>(value: unknown): value is ApiResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'totalCount')\n}\n\nexport const isApiInfiniteResponseList = <T>(value: unknown): value is ApiInfiniteResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'hasNextPage')\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isUndefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport type { ApiInfiniteResponseList, ApiResponseList } from '@/types/ApiResponse'\nimport { isApiInfiniteResponseList, isApiResponseList } from '@/types/ApiResponse'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\nconst generateListApiQuery = (pagination: Pagination, filterBag: FilterBag): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n querySetFilters(filterBag)\n return queryBuild()\n}\n\n/**\n * @template R Response type override, optional\n */\nexport const apiFetchList = <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n pagination: Pagination,\n filterBag: FilterBag,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const searchApi = isUndefined(filterBag._elastic) ? '' : '/search'\n client()\n .get(\n replaceUrlParameters(urlTemplate, urlParams) + searchApi + generateListApiQuery(pagination, filterBag),\n options\n )\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n }\n pagination.currentViewCount = res.data.data.length\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve([] as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\n\nexport interface DamPrvConfig {\n assetExternalProviders: {\n [key: string]: { title: string }\n }\n distributionServices: {\n [key: string]: {\n title: string\n iconPath: string\n type: DamDistributionServiceType\n allowedRedistributeStatuses: Array<DamDistributionStatus>\n }\n }\n colorSet: {\n [key: string]: string\n }\n settings: {\n aclCheckEnabled: boolean\n adminAllowListName: string\n allowSelectExtSystem: boolean\n allowSelectLicenceId: boolean\n defaultAssetLicenceId: number\n defaultExtSystemId: number\n imageChunkConfig: {\n minSize: number\n maxSize: number\n }\n maxBulkItemCount: number\n }\n}\n\nexport interface DamExtSystemConfig extends Record<DamAssetType, DamExtSystemConfigItem> {\n assetExternalProviders: DamExternalProviderAssetConfig\n audio: DamExtSystemConfigItem\n video: DamExtSystemConfigItem\n image: DamExtSystemConfigItem\n document: DamExtSystemConfigItem\n}\n\nexport interface DamExtSystemConfigItem {\n sizeLimit: number\n defaultFileVersion: string\n versions: Array<string>\n mimeTypes: Array<string>\n distribution: DamDistributionConfig\n authors: DamExtSystemAssetTypeExifMetadata\n keywords: DamExtSystemAssetTypeExifMetadata\n customMetadataPinnedAmount: number\n slots: string[]\n}\n\nexport type DamExternalProviderAssetConfig = Record<\n DamExternalProviderAssetName,\n {\n listingLimit: number\n title: string\n }\n>\n\nexport type DamExternalProviderAssetName = string\n\nexport interface DamDistributionConfig {\n distributionServices: Array<DamDistributionServiceName>\n distributionRequirements: Record<DamDistributionServiceName, DamDistributionRequirementsConfig>\n}\n\nexport interface DamDistributionRequirementsConfig {\n title: string\n requiredAuth: boolean\n blockedBy: Array<DamDistributionServiceName>\n categorySelect: DamDistributionRequirementsCategorySelectConfig\n strategy: DamDistributionRequirementStrategy\n}\n\nexport enum DamDistributionRequirementStrategy {\n None = 'none',\n AtLeastOne = 'at_least_one',\n OneFromType = 'one_from_type',\n WaitForAll = 'wait_for_all',\n Default = None,\n}\n\nexport interface DamDistributionRequirementsCategorySelectConfig {\n enabled: boolean\n required: boolean\n}\n\nexport interface DamExtSystemAssetTypeExifMetadata {\n enabled: boolean\n required: boolean\n}\n\nexport enum DamDistributionServiceType {\n Youtube = 'youtubeDistribution',\n Jw = 'jwDistribution',\n Custom = 'customDistribution',\n}\n\nexport enum DamDistributionStatus {\n Waiting = 'waiting',\n Distributing = 'distributing',\n RemoteProcessing = 'remote_processing',\n Distributed = 'distributed',\n Failed = 'failed',\n Default = Waiting,\n}\n\nexport interface DamPubConfig {\n userAuthType: UserAuthType\n}\n\nexport enum UserAuthType {\n JsonCredentials = 'json_credentials',\n OAuth2 = 'oauth2',\n Default = JsonCredentials,\n}\n","import type { DamExtSystemConfig, DamPrvConfig, DamPubConfig } from '@/types/coreDam/DamConfig'\nimport type { AxiosInstance } from 'axios'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/configuration'\nconst PUB_END_POINT_PREFIX = '/pub'\nconst PUB_END_POINT = PUB_END_POINT_PREFIX + '/v1/configuration'\nconst ENTITY = 'settings'\n\nexport const fetchPubConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPubConfig>(damClient, PUB_END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPrvConfig>(damClient, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchExtSystemConfiguration = (extSystem: IntegerId, damClient: () => AxiosInstance) =>\n apiFetchOne<DamExtSystemConfig>(damClient, END_POINT + '/ext-system/' + extSystem, {}, SYSTEM_CORE_DAM, ENTITY)\n","import type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/asset-custom-form'\nconst ENTITY = 'assetCustomForm'\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchAssetCustomFormElements = (\n damClient: () => AxiosInstance,\n extSystem: IntegerId,\n assetType: DamAssetType\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/ext-system/:extSystem/type/:assetType/element?order[position]=asc&limit=100',\n { extSystem, assetType },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchDistributionCustomFormElements = (\n damClient: () => AxiosInstance,\n distributionService: DamDistributionServiceName\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/distribution-service/:distributionService/element?order[position]=asc&limit=100',\n { distributionService },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n","import {\n type DamExtSystemConfig,\n type DamExtSystemConfigItem,\n type DamPrvConfig,\n type DamPubConfig,\n UserAuthType,\n} from '@/types/coreDam/DamConfig'\nimport { DamAssetType, type DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { AxiosInstance } from 'axios'\nimport { isUndefined } from '@/utils/common'\nimport {\n fetchConfiguration,\n fetchExtSystemConfiguration,\n fetchPubConfiguration,\n} from '@/components/damImage/uploadQueue/composables/damConfigApi'\nimport type { IntegerId } from '@/types/common'\nimport {\n fetchAssetCustomFormElements,\n fetchDistributionCustomFormElements,\n} from '@/components/damImage/uploadQueue/composables/damAssetCustomFormApi'\nimport { reactive, shallowRef } from 'vue'\n\nconst createDefaultExtSystemConfig = (override: Partial<DamExtSystemConfigItem> = {}): DamExtSystemConfigItem => ({\n ...({\n sizeLimit: 0,\n defaultFileVersion: '',\n versions: [],\n mimeTypes: [],\n distribution: {\n distributionServices: [],\n distributionRequirements: {},\n },\n keywords: {\n enabled: false,\n required: false,\n },\n authors: {\n enabled: false,\n required: false,\n },\n customMetadataPinnedAmount: 1,\n slots: [],\n } as DamExtSystemConfigItem),\n ...override,\n})\n\nconst initialized = reactive<{\n damPubConfig: boolean\n damPrvConfig: boolean\n damConfigExtSystem: IntegerId | null\n damConfigAssetCustomFormElements: IntegerId | null\n}>({\n damPubConfig: false,\n damPrvConfig: false,\n damConfigExtSystem: null,\n damConfigAssetCustomFormElements: null,\n})\n\nconst damPubConfig = shallowRef<DamPubConfig>({\n userAuthType: UserAuthType.JsonCredentials,\n})\n\nconst damPrvConfig = shallowRef<DamPrvConfig>({\n colorSet: {},\n assetExternalProviders: {},\n distributionServices: {},\n settings: {\n aclCheckEnabled: true,\n adminAllowListName: 'root',\n allowSelectExtSystem: false,\n allowSelectLicenceId: false,\n defaultAssetLicenceId: 0,\n defaultExtSystemId: 0,\n imageChunkConfig: {\n minSize: 0,\n maxSize: 0,\n },\n maxBulkItemCount: 0,\n },\n})\n\nconst damConfigExtSystem = shallowRef<DamExtSystemConfig>({\n assetExternalProviders: {},\n audio: createDefaultExtSystemConfig(),\n document: createDefaultExtSystemConfig(),\n image: createDefaultExtSystemConfig(),\n video: createDefaultExtSystemConfig(),\n})\n\nconst damConfigAssetCustomFormElements = shallowRef<{ [key in DamAssetType]: CustomDataFormElement[] }>({\n image: [],\n audio: [],\n video: [],\n document: [],\n})\n\nconst damConfigDistributionCustomFormElements = shallowRef<Record<DamDistributionServiceName, CustomDataFormElement[]>>(\n {}\n)\n\nexport function useDamConfigState(client: undefined | (() => AxiosInstance) = undefined) {\n function onConfigError(error: Error) {\n console.error(error)\n }\n\n function loadDamPubConfig() {\n return new Promise((resolve, reject) => {\n initialized.damPrvConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchPubConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load pub config. Incorrect response body.')\n }\n setDamPubConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPubConfig(data: DamPubConfig) {\n try {\n damPubConfig.value.userAuthType = data.userAuthType\n\n initialized.damPubConfig = true\n } catch (err) {\n throw new Error('Unable to load dam pub config. Incorrect fields in json.')\n }\n }\n\n function loadDamPrvConfig() {\n return new Promise((resolve, reject) => {\n initialized.damPubConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam prv config. Incorrect response body.')\n }\n setDamPrvConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPrvConfig(data: DamPrvConfig) {\n try {\n damPrvConfig.value.settings = data.settings\n damPrvConfig.value.colorSet = data.colorSet\n damPrvConfig.value.assetExternalProviders = data.assetExternalProviders\n damPrvConfig.value.distributionServices = data.distributionServices\n\n initialized.damPrvConfig = true\n } catch (err) {\n throw new Error('Unable to load dam config. Incorrect fields in json.')\n }\n }\n\n function loadDamConfigExtSystem(extSystemId: IntegerId) {\n return new Promise((resolve, reject) => {\n initialized.damConfigExtSystem = null\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchExtSystemConfiguration(extSystemId, client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam ext system config. Incorrect response body.')\n }\n setDamConfigExtSystem(config, extSystemId)\n console.log(damConfigExtSystem.value)\n resolve(true)\n })\n .catch((err) => {\n console.log(err)\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigExtSystem(data: DamExtSystemConfig, extSystemId: IntegerId) {\n try {\n damConfigExtSystem.value.assetExternalProviders = data.assetExternalProviders\n damConfigExtSystem.value.audio = data.audio\n damConfigExtSystem.value.document = data.document\n damConfigExtSystem.value.image = data.image\n damConfigExtSystem.value.video = data.video\n\n initialized.damConfigExtSystem = extSystemId\n } catch (err) {\n throw new Error('Unable to load dam ext system config. Incorrect fields in json.')\n }\n }\n\n // todo add support to load only selected types\n function loadDamConfigAssetCustomFormElements(extSystemId: IntegerId) {\n return new Promise((resolve, reject) => {\n initialized.damConfigExtSystem = null\n if (isUndefined(client)) {\n reject(false)\n return\n }\n const promises = [\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Image),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Audio),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Video),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Document),\n ]\n\n Promise.all(promises)\n .then((responses) => {\n if (\n responses.length !== 4 ||\n Object.keys(responses[0]).length < 1 ||\n Object.keys(responses[1]).length < 1 ||\n Object.keys(responses[2]).length < 1 ||\n Object.keys(responses[3]).length < 1\n ) {\n throw new Error('Unable to load asset custom form config. Incorrect response body.')\n }\n setDamConfigAssetCustomFormElements(responses, extSystemId)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigAssetCustomFormElements(\n responses: Awaited<{\n data: CustomDataFormElement[]\n }>[],\n extSystemId: IntegerId\n ) {\n try {\n damConfigAssetCustomFormElements.value.image = responses[0].data\n damConfigAssetCustomFormElements.value.audio = responses[1].data\n damConfigAssetCustomFormElements.value.video = responses[2].data\n damConfigAssetCustomFormElements.value.document = responses[3].data\n\n initialized.damConfigAssetCustomFormElements = extSystemId\n } catch (err) {\n throw new Error('Unable to load asset custom form config. Incorrect fields in json.')\n }\n }\n\n function loadDamConfigDistributionCustomFormElements (distributionServiceName: DamDistributionServiceName) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n if (damConfigDistributionCustomFormElements.value[distributionServiceName]) {\n resolve(true)\n return\n }\n fetchDistributionCustomFormElements(client, distributionServiceName)\n .then((res) => {\n damConfigDistributionCustomFormElements.value[distributionServiceName] = res.data\n resolve(true)\n return\n })\n .catch((error) => {\n reject(error)\n return\n })\n })\n }\n\n return {\n initialized,\n damPubConfig,\n damPrvConfig,\n damConfigExtSystem,\n damConfigAssetCustomFormElements,\n damConfigDistributionCustomFormElements,\n loadDamPrvConfig,\n loadDamPubConfig,\n loadDamConfigExtSystem,\n loadDamConfigAssetCustomFormElements,\n loadDamConfigDistributionCustomFormElements,\n }\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport type { DocId } from '@/types/common'\nimport type { AssetDetailItemDto, AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { isNull } from '@/utils/common'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport {\n AnzuApiValidationError,\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n type ValidationError,\n} from '@/model/error/AnzuApiValidationError'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\n\nconst END_POINT = '/adm/v1/asset'\nconst BULK_METADATA_LIMIT = 10\nexport const ENTITY = 'asset'\nexport const SYSTEM_CORE_DAM = 'coreDam'\nconst FETCH_BY_IDS_MAX_LIMIT = 25\n\nexport interface AssetMetadataBulkItem {\n id: DocId\n keywords: DocId[]\n authors: DocId[]\n described: boolean\n customData: AssetCustomData\n}\n\nexport declare type AssetCustomData = Record<string, any>;\n\nexport const fetchAssetList = (\n client: () => AxiosInstance,\n licenceId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) =>\n apiFetchList<AssetSearchListItemDto[]>(\n client,\n END_POINT + '/licence/:licenceId',\n { licenceId },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\nexport const fetchAsset = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchAssetByFileId = (client: () => AxiosInstance, assetFileId: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/asset-file/:id', { id: assetFileId }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const bulkUpdateAssetsMetadata = (client: () => AxiosInstance, items: UploadQueueItem[]) => {\n return new Promise<AssetMetadataBulkItem[]>((resolve, reject) => {\n const bulkItems = listItemsToMetadataBulkItems(items)\n updateMetadataSequence(client, bulkItems)\n .then((responses) => {\n if (bulkItems.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const bulkItemsRes: AssetMetadataBulkItem[] = responses.flatMap(response => response.data)\n return resolve(bulkItemsRes)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function fetchAssetListByIdsSequence(client: () => AxiosInstance, ids: DocId[], licenceId: number) {\n if (ids.length === 0) return Promise.resolve([])\n const totalCalls = Math.ceil(ids.length / FETCH_BY_IDS_MAX_LIMIT)\n const responses = []\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * FETCH_BY_IDS_MAX_LIMIT\n const reduced = ids.slice(offset, offset + FETCH_BY_IDS_MAX_LIMIT)\n const res = await client().get(END_POINT + `/licence/${licenceId}/ids/${reduced.join(',')}`)\n responses.push(res)\n }\n return responses\n}\n\nexport const fetchAssetListByIds: (\n client: () => AxiosInstance,\n ids: DocId[],\n licenceId: number\n) => Promise<AssetDetailItemDto[]> = (client: () => AxiosInstance, ids: DocId[], licenceId: number) => {\n return new Promise((resolve, reject) => {\n fetchAssetListByIdsSequence(client, ids, licenceId)\n .then((responses) => {\n if (ids.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const final = []\n for (let i = 0; i < responses.length; i++) {\n final.push(...responses[i].data.data)\n }\n resolve(final as AssetDetailItemDto[])\n } else {\n reject(responses)\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nasync function updateMetadataSequence(client: () => AxiosInstance, bulkItems: AssetMetadataBulkItem[]) {\n const totalCalls = Math.ceil(bulkItems.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (bulkItems.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = bulkItems.slice(offset, offset + BULK_METADATA_LIMIT)\n const res = await client().patch(END_POINT + '/metadata-bulk-update', JSON.stringify(reduced))\n responses.push(res)\n }\n return responses\n}\n\nfunction listItemsToMetadataBulkItems (items: UploadQueueItem[]) {\n const dtoItems: AssetMetadataBulkItem[] = []\n items.forEach((item) => {\n if (!isNull(item.assetId) && item.canEditMetadata) {\n dtoItems.push({\n id: item.assetId,\n keywords: item.keywords,\n authors: item.authors,\n described: true,\n customData: item.customData,\n })\n }\n })\n\n return dtoItems\n}\n\nconst { showUnknownError, showApiValidationError } = useAlerts()\n\nconst handleMetadataValidationError = (error: any, assetType: DamAssetType) => {\n const { damConfigAssetCustomFormElements } = useDamConfigState()\n if (!error || !error.response || !error.response.data) return\n const data = error.response.data as AnzuApiValidationResponseData\n const items = [] as ValidationError[]\n for (const [key, values] of Object.entries(data.fields)) {\n const field = key.split('.').pop()\n const found = damConfigAssetCustomFormElements.value[assetType].find((item) => item.property === field)\n if (found) {\n items.push({\n field: found.name,\n errors: values,\n })\n }\n }\n if (items.length) {\n showApiValidationError(items, -1, true)\n return\n }\n showUnknownError()\n}\n\nexport const updateAssetMetadata = (client: () => AxiosInstance, asset: AssetDetailItemDto) => {\n return new Promise((resolve, reject) => {\n const data = {\n id: asset.id,\n keywords: asset.keywords,\n authors: asset.authors,\n described: true,\n customData: asset.metadata.customData,\n }\n client()\n .patch(END_POINT + '/metadata-bulk-update', JSON.stringify([data]))\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n handleMetadataValidationError(err, asset.attributes.assetType)\n return reject(new AnzuApiValidationError(err, SYSTEM_CORE_DAM, ENTITY, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { useAssetListFilter } from '@/model/coreDam/filter/AssetFilter'\nimport { type AssetSelectListItem, useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { usePagination } from '@/composables/system/pagination'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { DocId } from '@/types/common'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { fetchAssetList as apiFetchAssetList } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst filter = useAssetListFilter()\nconst pagination = usePagination()\nconst filterIsTouched = ref(false)\n\nexport function useAssetListActions(configName = 'default') {\n const { damClient } = useCommonAdminCoreDamOptions(configName)\n\n const assetListStore = useAssetSelectStore()\n const { selectedCount, selectedAssets, assetListItems, loader } = storeToRefs(assetListStore)\n\n const { resetFilter } = useFilterHelpers()\n const { showErrorsDefault } = useAlerts()\n\n const fetchAssetList = async () => {\n pagination.page = 1\n try {\n assetListStore.showLoader()\n assetListStore.setList(await apiFetchAssetList(damClient, assetListStore.licenceId, pagination, filter))\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetListStore.hideLoader()\n }\n }\n const fetchNextPage = async () => {\n pagination.page = pagination.page + 1\n try {\n assetListStore.showLoader()\n assetListStore.appendList(await apiFetchAssetList(damClient, assetListStore.licenceId, pagination, filter))\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetListStore.hideLoader()\n }\n }\n\n const onItemClick = (data: { assetId: DocId; index: number }) => {\n assetListStore.toggleSelectedByIndex(data.index)\n }\n\n const resetAssetList = async () => {\n assetListStore.reset()\n filter.type.default = [assetListStore.assetType]\n resetFilter(filter, pagination, fetchAssetList)\n }\n\n const filterTouch = () => {\n filterIsTouched.value = true\n }\n const filterUnTouch = () => {\n filterIsTouched.value = false\n }\n\n const initStoreContext = (\n licenceId: number,\n assetType: DamAssetType,\n singleMode: boolean,\n minCount: number,\n maxCount: number\n ): void => {\n assetListStore.clearSelected()\n assetListStore.setAssetType(assetType)\n assetListStore.setLicenceId(licenceId)\n assetListStore.setSingleMode(singleMode)\n assetListStore.setMinCount(minCount)\n assetListStore.setMaxCount(maxCount)\n }\n\n return {\n filterIsTouched,\n filter,\n selectedCount,\n selectedAssets,\n pagination,\n loader,\n assetListItems: assetListItems as Ref<Array<AssetSelectListItem>>,\n getSelectedData: assetListStore.getSelectedData,\n onItemClick,\n fetchAssetList,\n fetchNextPage,\n resetAssetList,\n filterTouch,\n filterUnTouch,\n initStoreContext,\n }\n}\n","import { computed, type Ref } from 'vue'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\n\nconst IMAGE_HEIGHT = 200\nconst IMAGE_BG_COLOR_DEFAULT = '#ccc'\n\nexport function useAssetItemActions(item: Readonly<Ref<AssetSelectListItem>>) {\n const asset = computed<AssetSearchListItemDto>(() => {\n return item.value.asset\n })\n\n const assetType = computed(() => {\n return asset.value.attributes.assetType\n })\n\n const assetStatus = computed(() => {\n return asset.value.attributes.assetStatus\n })\n\n const imageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_list) {\n return {\n url: asset.value.mainFile.links.image_list.url,\n width: asset.value.mainFile.links.image_list.width,\n height: asset.value.mainFile.links.image_list.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n const tableImageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_table) {\n return {\n url: asset.value.mainFile.links.image_table.url,\n width: asset.value.mainFile.links.image_table.width,\n height: asset.value.mainFile.links.image_table.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n return {\n asset,\n assetType,\n assetStatus,\n imageProperties,\n tableImageProperties,\n }\n}\n","export default \"data:image/jpeg;base64,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ADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANVAAAABgAAAAAAAAAAAAADhAAABkAAAAAQAHAAbABhAGMAZQBoAG8AbABkAGUAcgAtADEANgAtADkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAABkAAAAOEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAOEAAAAAFJnaHRsb25nAAAGQAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAADhAAAAABSZ2h0bG9uZwAABkAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxp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Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iMjc4M0ZDMUFGQTdBRThFREUyRDE3MjI5NTdCNEExQjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IjI3ODNGQzFBRkE3QUU4RURFMkQxNzIyOTU3QjRBMUIwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpMZWdhY3lJUFRDRGlnZXN0PSJDNzVEMTdFNTc0QjU2RUY1REJCRTM5OTRDMEU5Nzk1QyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IiIgeG1wOkNyZWF0ZURhdGU9IjIwMTctMDQtMjFUMTI6MTk6MTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDU2NTBiMjEtMjM4Zi00MGNjLTlkNGEtNDZiZTMyOWUzYWExIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTIxVDEyOjE5OjU3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/uAA5BZG9iZQBkAAAAAAH/2wCEAAYEBAcFBwsGBgsOCggKDhEODg4OERYTExMTExYRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBwkJEwwTIhMTIhQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIA4QGQAMBEQACEQEDEQH/3QAEAMj/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJzAQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYXVGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUFBAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/2gAMAwEAAhEDEQA/AO4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq3xJ7Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFWsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/9HuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KrJZViUvIeKKKknsMVYrqPm+SQlLEcE/nPU+4H7OKpNJqV1KavM5P+sf4Yqt+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKuF5cD/dr/APBHFUZaeYb22NBJzX+V9x/zVirK9H1qLUlIUcJV+0h/Wv8AMuKpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirEPNmqGab6nGfgj3b/Kb/mwYqkOKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVfBO1s6zREq6GoOKvQrC8W8gS4Xo43Hge4xVEYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWj2xV5tcyGWV5G6sxP44qsxVuONpGCICzHoB1xVX/AEbdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4qsltJoRyljZV8SKb4qo4q3irLfJkpa2kjJ2WTb6RirIMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVaxV5o/2j8z+vFWsVR2gml9D/r4qz8HFW64q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4qkPnE/6Gv/GQfqOKsOGKt4qyryUP3U//ABkX9WKsjxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqRecf8AeNf+Mg/UcVYcOmKt4qyryV/cz/8AGRf1YqyPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9buGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2KuxVw36Yql15r1naMVkkBYfsr8R/DFUJ/i6yHaT/gf7cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFUt8wa9b6hbiGEPyDg/EKbCuKsfGKt4qnXlzWoNOSRZ+VXYEcRXoPniqb/AOL7L/iz/gR/XFXf4vsvCT/gf7cVXR+bbJjQl19yv9Diqa211FdLzgcOPbFVXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYq7FWH675ia4Zra2YrCNmYdWPen+TiqRAU6Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqvt7mW1cSwMUYeH8R3xVnOi6uupRVNFmSgdR/xIe2KpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqlnmS8a1smKGjueCnwr1/wCFxVggFP4Yq3irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR2h3htLyNx9ljwb5NtirPz1pirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHfOjEQwDsZG/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sVdirsVdirsVdirsVS3zDqP1G0ZlP7x/hX5nq3+xGKsDpireKuxV2KuxV2Ktd69D4+GKs+0LUfr9qsjf3q/A/wAx3/2WKphirsVdirsVccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWJecrgvcRwjoicvvxVj+KuxV2KuxV2KuxV2Ksh8mTH1ZYezKGH0bYqywYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq44qwrzcCL817op+6uKpPirsVdirsVdirsVdiqd+UP97Sewjav4YqzIYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYqsmmSFfUlIVQQKn3xVdXemKt4q7FXYq7FXYq7FXYq7FXYq7FXYqxbzrbHnFcDoQUJ+W64qxvFXYq7FXYq7FXYq7FWTeS7U/vbk9NkH62xVk9KbYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7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nh+0vaux8a4qz/T76O+hWeLodiO4PcYqiMVdirsVdirsVdirsVdirsVdirsVdirsVS7Wdai01KP8Ux+yn8W/ycVYRd3kt5IZpzyc/cPliqlirKvJX9zP/wAZF/VirI8VccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FUq8xamLK2IU0mkqq+w/afFWDYq3irsVdirsVdirsVdirsVdirsVR+jaq2mzcxvE2zj2/m/2OKs7SZZVWSM8kcVB8cVX4q7FXYq7FXYq7FXYq7FXYq7FXYqk2u+YksAYIKNc/gvz/wAr/JxVhskryuZJCWdtyTiq3FXYqyryV/cz/wDGRf1YqyPFXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYqtdlUFmNABWvtirANW1I6hcPN+wDxQeAH/ADViqDxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kp35Z1r6o/1Wc/uXPwn+Vj/wAanFWYjFW8VdirsVdirsVdirsVdirgK4qxrXfM/pk29kat0Z+oH+Sn+VirF/fqTvU4q7FXYq7FWVeSv7mf/jIv6sVZHirjirAde/3um/18VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv/9TuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2Ksc86/3MH/GRv1YqxXFWm6YqzHyb/vG3/GQ/qGKp7irsVdirsVdirHPN2p+lGLKP7cm707L2H04qxSmKt4q7FXYq7FXYq7FXYq7FXYq7FXYq7FWj74qy3yvrfrKLKc/vFHwE9wP2P8AWXFWQ4q7FXYq7FXYq7FXYqtaQICzkKoFSSaAYqxLXfMpuawWhKw926Fv+aVxVIAtMVbxV2KuxV2Ksq8lf3M//GRf1YqyPFXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/9XuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2Ksc86/3MH/GRv1YqxXFWm6YqzHyb/vG3/GQ/qGKp7irsVdirsVUby7S1iaeT7KCp9/AYq88ubl7qVp5d2c1xVTxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ktq5QhlJUg1BHY4qznQtYGoxHntMmzjx/wAsYqmYNcVdirsVdirsVU7i4jt0M0zBUXqT+pf8rFWE6zr0uotwT4LcGoXuf8p8VSzFXYq7FXYq7FXYqyryV/cz/wDGRf1YqyPFXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FWIea9S9WX6pGfgjNWI7t4f7DFUhxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqtpeSWcq3EJ+NfxHdTirPtPv476FZ4ejdR4H+XFUVirsVdiqG1DUYbCIzTmg6Be7H/ACcVYPqurTalJzl+FB9lOw/5qP8AlYqghireKuxV2KuxV2KuxVlXkr+5n/4yL+rFWR4q44qwHXv97pv9fFUBirafaX5j9eKvTBirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqgNa1EadbtMPtt8Ke5P/NOKsBJJJLGpJrirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR+jaq+nTch8Ub7Ovt/MP8AKGKsi/xhZeEn3D+uKu/xhZeEn3f24qtl842oUmNHZ+wIoK++KsVu72a9kM1weTdvAey4qpYq7FXYq7FXYq7FXYq7FWVeSv7mf/jIv6sVZHirjirAde/3um/18VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqwTX9U+v3BK/wB1HVV9/wCZ/wDZYqluKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KtcRiruIxV1BireKuxV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3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxVr/AAVcf79T7jiq6PyVJX95MtPZTX8cVTjTfL9tYEOg5yD9tuv+xH7OKpnirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Z\"","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport { isUndefined } from '@/lib'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetType\n assetStatus?: DamAssetStatus\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n iconColor?: string\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n iconColor: '#505050',\n }\n)\nconst emit = defineEmits<{\n (e: 'error'): void\n}>()\n\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n</script>\n\n<template>\n <div\n v-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"anzu-common-asset-image anzu-common-asset-image--img position-relative\"\n :style=\"{ width: width + 'px' }\"\n >\n <img\n class=\"anzu-common-asset-image__img\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n :style=\"'background-color:' + backgroundColor\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"anzu-common-asset-image__icon-wrapper\"\n >\n <div\n class=\"anzu-common-asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"anzu-common-asset-image__icon\"\n />\n </div>\n </div>\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColor }\"\n style=\"width: 100%\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-common-asset-image {\n position: relative;\n\n &__icon-wrapper {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon-circle {\n border-radius: 100%;\n background-color: rgba(204 204 204 / 50%);\n }\n}\n</style>\n","export const prettyBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) {\n return '0 Bytes'\n }\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]\n}\n","<script lang=\"ts\" setup>\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useI18n } from 'vue-i18n'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { prettyBytes } from '@/utils/file'\nimport ADatetime from '@/components/ADatetime.vue'\nimport { toRef } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 72\nconst IMAGE_WIDTH = 128\n\nconst item = toRef(props, 'item')\n\nconst { asset, tableImageProperties, assetType, assetStatus } = useAssetItemActions(item)\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n</script>\n\n<template>\n <tr\n class=\"a-datatable__row\"\n :class=\"{ 'a-datatable__row--selected': item.selected }\"\n @click.stop.exact=\"onItemClick\"\n >\n <td>\n <VIcon\n v-if=\"item.selected\"\n icon=\"mdi-checkbox-outline\"\n :size=\"20\"\n />\n <VIcon\n v-else\n icon=\"mdi-checkbox-blank-outline\"\n :size=\"20\"\n />\n </td>\n <td>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"tableImageProperties.url\"\n :background-color=\"tableImageProperties.bgColor\"\n :width=\"IMAGE_WIDTH\"\n :height=\"IMAGE_HEIGHT\"\n :icon-size=\"20\"\n :fallback-height=\"IMAGE_HEIGHT\"\n />\n </td>\n <td>\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </td>\n <td>\n <ADatetime :date-time=\"asset.createdAt\" />\n </td>\n <td>\n {{ asset.mainFile?.fileAttributes.mimeType }}\n </td>\n <td>\n {{ prettyBytes(asset.mainFile?.fileAttributes.size || 0) }}\n </td>\n </tr>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AssetSelectTableRowItem from '@/components/dam/assetSelect/components/AssetSelectTableRowItem.vue'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\n\nconst { t } = useI18n()\n\nconst { onItemClick, assetListItems, loader } = useAssetListActions()\n</script>\n\n<template>\n <VTable\n class=\"a-datatable a-datatable--dialog-sticky-fix\"\n fixed-header\n >\n <thead>\n <tr>\n <th class=\"text-left\" />\n <th class=\"text-left\">\n {{ t('common.assetSelect.meta.table.image') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.texts.displayTitle') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.model.tracking.created') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.mimeType') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.size') }}\n </th>\n </tr>\n </thead>\n <tbody>\n <AssetSelectTableRowItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n @item-click=\"onItemClick\"\n />\n <tr v-if=\"!loader && assetListItems.length === 0\">\n <td\n colspan=\"6\"\n class=\"text-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </td>\n </tr>\n </tbody>\n </VTable>\n</template>\n","import { readonly, ref } from 'vue'\n\nexport enum AssetSelectGridView {\n Masonry = 'masonry',\n Thumbnail = 'thumbnail',\n Table = 'table',\n Default = Masonry,\n}\n\nconst gridView = ref<AssetSelectGridView>(AssetSelectGridView.Default)\n\nexport function useGridView() {\n const setGridView = (value: AssetSelectGridView) => {\n gridView.value = value\n }\n\n return {\n gridView: readonly(gridView),\n setGridView,\n }\n}\n","import { ref } from 'vue'\n\nconst sidebarLeft = ref(false)\n\nexport function useSidebar() {\n const toggleSidebar = () => {\n sidebarLeft.value ? closeSidebar() : openSidebar()\n }\n\n const openSidebar = () => {\n sidebarLeft.value = true\n }\n\n const closeSidebar = () => {\n sidebarLeft.value = false\n }\n\n return {\n sidebarLeft,\n toggleSidebar,\n openSidebar,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\n\nconst { t } = useI18n()\nconst { setGridView } = useGridView()\nconst { toggleSidebar } = useSidebar()\n</script>\n\n<template>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Masonry)\"\n >\n <VIcon icon=\"mdi-view-compact\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.masonry') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Thumbnail)\"\n >\n <VIcon icon=\"mdi-view-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.thumbnail') }}\n </VTooltip>\n </VBtn>\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Table)\"\n >\n <VIcon icon=\"mdi-view-headline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.table') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { toRef } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 200\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n\nconst item = toRef(props, 'item')\n\nconst { asset, assetType, assetStatus, imageProperties } = useAssetItemActions(item)\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles__item asset-list-tiles__item--pointer\"\n :class=\"{ 'asset-list-tiles__item--selected': item.selected }\"\n @click.stop.exact=\"onItemClick\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div\n v-if=\"item.selected\"\n class=\"asset-list-tiles__selected-triangle\"\n >\n <div class=\"asset-list-tiles__selected-triangle__bg\" />\n <VIcon\n class=\"asset-list-tiles__selected-triangle__icon\"\n icon=\"mdi-check\"\n color=\"white\"\n size=\"x-small\"\n />\n </div>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :fallback-height=\"IMAGE_HEIGHT\"\n :asset-file-properties=\"item.asset.assetFileProperties\"\n :show-meta-icons=\"showMetaIcons\"\n />\n <div class=\"asset-list-tiles__item-text text-caption px-2 py-1\">\n <div class=\"d-flex align-center justify-space-between position-relative\">\n <div class=\"line-clamp-1\">\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetSelectTilesItem from '@/components/dam/assetSelect/components/AssetSelectTilesItem.vue'\nimport { useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { useI18n } from 'vue-i18n'\n\nconst { gridView } = useGridView()\nconst { onItemClick, assetListItems, loader } = useAssetListActions()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles\"\n :class=\"'asset-list-tiles--' + gridView\"\n >\n <AssetSelectTilesItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n @item-click=\"onItemClick\"\n />\n </div>\n <div\n v-if=\"!loader && assetListItems.length === 0\"\n class=\"text-h6 text-medium-emphasis d-flex w-100 h-100 align-center justify-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </div>\n</template>\n\n<style lang=\"scss\">\n// css similar to '.dam-image-grid' in admin-dam, for now renamed here to new class to avoid conflicts\n// consider refactor later according how much different both versions will be\n\n$class-name-root: 'asset-list-tiles';\n$bg-color-light: #f9f9f9;\n$bg-color-dark: #1e1e1e;\n$border-color-light: #e8e9ea;\n$border-color-dark: #2c2c2c;\n$shadow-color-light: #959595;\n$shadow-color-dark: #3d3d3d;\n$bg-color-actions-light: #fff;\n$bg-color-actions-dark: #1a1a1a;\n\n.#{$class-name-root} {\n display: flex;\n flex-wrap: wrap;\n max-width: 100%;\n padding: 2px;\n\n &__item {\n user-select: none;\n flex-grow: 2;\n max-width: 800px;\n padding: 10px;\n position: relative;\n overflow: hidden;\n min-width: 200px;\n\n &-card {\n border-radius: 5px;\n overflow: hidden;\n\n img.anzu-common-asset-image__img {\n display: block;\n height: 200px;\n min-width: 100%;\n object-fit: cover;\n width: 100%;\n }\n\n &:hover {\n .#{$class-name-root}__item-card-actions {\n display: block;\n }\n }\n\n &-actions {\n border-radius: 4px;\n position: absolute;\n top: -2px;\n right: -5px;\n display: none;\n overflow: hidden;\n }\n }\n\n &-text,\n &-text .line-clamp-1 {\n font-weight: 500;\n line-height: 30px;\n min-height: 38px;\n max-height: 38px;\n }\n\n &--pointer {\n cursor: pointer;\n }\n }\n\n &--thumbnail {\n display: grid;\n grid-template-columns: repeat(6, auto);\n\n .#{$class-name-root}__item {\n img:not(.img-svg) {\n object-fit: contain;\n padding-left: 6px;\n padding-right: 6px;\n padding-top: 6px;\n background-color: transparent !important;\n }\n }\n }\n\n .#{$class-name-root}__selected-triangle {\n position: absolute;\n top: 11px;\n right: 11px;\n z-index: 1;\n\n &__bg {\n content: '';\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 30px 30px 0;\n border-color: transparent #608a32 transparent transparent;\n top: 0;\n right: 0;\n position: absolute;\n }\n\n &__icon {\n position: absolute;\n display: block;\n width: 16px;\n height: 16px;\n top: -3px;\n right: 0;\n }\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-light;\n border: 1px solid $border-color-light;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-light;\n }\n\n &-actions {\n background-color: $bg-color-actions-light;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-dark;\n border: 1px solid $border-color-dark;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-dark;\n }\n\n &-actions {\n background-color: $bg-color-actions-dark;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AFilterString from '@/components/filter/AFilterString.vue'\nimport AFilterBooleanSelect from '@/components/filter/AFilterBooleanSelect.vue'\n\nconst { filter, filterTouch, filterUnTouch, fetchAssetList } = useAssetListActions()\n\nconst onAnyFilterUpdate = () => {\n filterTouch()\n}\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n</script>\n\n<template>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString\n v-model=\"filter.text\"\n @update:model-value=\"onAnyFilterUpdate\"\n @keydown.enter=\"submitFilter\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect\n v-model=\"filter.described\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect\n v-model=\"filter.visible\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFilterBooleanSelect\n v-model=\"filter.generatedBySystem\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AFilterString from '@/components/filter/AFilterString.vue'\n\nconst { filter, fetchAssetList, filterTouch, filterUnTouch } = useAssetListActions()\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n\nconst onAnyFilterUpdate = () => {\n filterTouch()\n}\n</script>\n\n<template>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString\n v-model=\"filter.text\"\n @update:model-value=\"onAnyFilterUpdate\"\n @keydown.enter=\"submitFilter\"\n />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { computed } from 'vue'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { DamAssetType as AssetTypeValue } from '@/types/coreDam/Asset'\nimport AssetSelectFilterFormImage from '@/components/dam/assetSelect/components/filter/AssetSelectFilterFormImage.vue'\nimport AssetSelectFilterFormDefault from '@/components/dam/assetSelect/components/filter/AssetSelectFilterFormDefault.vue'\n\nconst { t } = useI18n()\nconst { fetchAssetList, resetAssetList, filterUnTouch, filterIsTouched } = useAssetListActions()\n\nconst assetListStore = useAssetSelectStore()\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n\nconst resetFilter = () => {\n resetAssetList()\n filterUnTouch()\n}\n\nconst componentComputed = computed(() => {\n switch (assetListStore.assetType) {\n case AssetTypeValue.Image:\n return AssetSelectFilterFormImage\n default:\n return AssetSelectFilterFormDefault\n }\n})\n</script>\n\n<template>\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <VForm\n name=\"search2\"\n class=\"px-2 pt-4\"\n @submit.prevent=\"submitFilter\"\n >\n <Component :is=\"componentComputed\" />\n </VForm>\n </div>\n <div class=\"subject-select-filter__actions\">\n <VBtn\n color=\"primary\"\n class=\"mx-2\"\n :variant=\"filterIsTouched ? 'flat' : 'text'\"\n size=\"small\"\n @click.stop=\"submitFilter\"\n >\n {{ t('common.button.submitFilter') }}\n </VBtn>\n <VBtn\n class=\"px-2\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n size=\"small\"\n @click.stop=\"resetFilter\"\n >\n <VIcon icon=\"mdi-filter-remove-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.resetFilter') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, withModifiers } from 'vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DamAssetType, DamAssetTypeValues } from '@/types/coreDam/Asset'\nimport { damAssetTypeValueToEnum } from '@/types/coreDam/Asset'\nimport { useAssetListActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AssetSelectListTable from '@/components/dam/assetSelect/components/AssetSelectListTable.vue'\nimport AssetSelectListBar from '@/components/dam/assetSelect/components/AssetSelectListBar.vue'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport AssetSelectListTiles from '@/components/dam/assetSelect/components/AssetSelectListTiles.vue'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\nimport AssetSelectFilter from '@/components/dam/assetSelect/components/filter/AssetSelectFilter.vue'\nimport { isUndefined } from '@/utils/common'\nimport type {\n AssetSelectReturnData,\n AssetSelectReturnType,\n AssetSelectReturnTypeValues,\n} from '@/types/coreDam/AssetSelect'\nimport { assetSelectReturnTypeValuesToEnum } from '@/types/coreDam/AssetSelect'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean | undefined\n assetType: DamAssetType | DamAssetTypeValues\n minCount: number\n maxCount: number\n assetLicenceId?: number\n returnType?: AssetSelectReturnType | AssetSelectReturnTypeValues\n configName?: string\n }>(),\n {\n modelValue: undefined,\n assetLicenceId: undefined,\n returnType: 'mainFileId',\n configName: 'default',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'onConfirm', data: AssetSelectReturnData): void\n}>()\n\nconst { t } = useI18n()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst { selectedCount, loader, pagination, fetchNextPage, resetAssetList, getSelectedData, initStoreContext } =\n useAssetListActions()\n\nconst { openSidebar, sidebarLeft } = useSidebar()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { defaultLicenceId } = useCommonAdminCoreDamOptions(props.configName)\n\nconst onOpen = () => {\n const licenceId = props.assetLicenceId || defaultLicenceId\n if (isUndefined(licenceId)) {\n throw new Error('LicenceId must be provided. Provide using props or common-admin configuration.')\n }\n\n initStoreContext(\n licenceId,\n damAssetTypeValueToEnum(props.assetType),\n 1 === props.minCount && props.minCount === props.maxCount,\n props.minCount,\n props.maxCount\n )\n resetAssetList()\n openSidebar()\n dialog.value = true\n}\n\nwatch(\n dialog,\n async (newValue, oldValue) => {\n if (newValue === oldValue || !newValue) return\n onOpen()\n },\n { immediate: true }\n)\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit('onConfirm', getSelectedData(assetSelectReturnTypeValuesToEnum(props.returnType)))\n onClose()\n}\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && pagination.hasNextPage === true) {\n fetchNextPage()\n }\n}\n\nconst { gridView } = useGridView()\n\nconst componentComputed = computed(() => {\n switch (gridView.value) {\n case AssetSelectGridView.Table:\n return AssetSelectListTable\n default:\n case AssetSelectGridView.Masonry:\n case AssetSelectGridView.Thumbnail:\n return AssetSelectListTiles\n }\n})\n\nconst disabledSubmit = computed(() => {\n return selectedCount.value < props.minCount || selectedCount.value > props.maxCount\n})\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t('common.assetSelect.meta.texts.title') }}\n </slot>\n </ADialogToolbar>\n <AssetSelectListBar />\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <AssetSelectFilter />\n </div>\n <div class=\"subject-select__content\">\n <component :is=\"componentComputed\" />\n <div class=\"d-flex w-100 align-center justify-center pa-4\">\n <ABtnSecondary\n v-show=\"pagination.hasNextPage || loader\"\n v-intersect=\"autoloadOnIntersect\"\n :loading=\"loader\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.assetSelect.meta.texts.pickExactCount', { count: props.minCount, selected: selectedCount }) }}\n </div>\n <div v-else>\n {{\n t('common.assetSelect.meta.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","/**!\n * Sortable 1.15.1\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.1\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Returns the content rect of the element (bounding rect minus border and padding)\r\n * @param {HTMLElement} el \r\n */\nfunction getContentRect(el) {\n var rect = getRect(el);\n var paddingLeft = parseInt(css(el, 'padding-left')),\n paddingTop = parseInt(css(el, 'padding-top')),\n paddingRight = parseInt(css(el, 'padding-right')),\n paddingBottom = parseInt(css(el, 'padding-bottom'));\n rect.top += paddingTop + parseInt(css(el, 'border-top-width'));\n rect.left += paddingLeft + parseInt(css(el, 'border-left-width'));\n // Client Width/Height includes padding only\n rect.width = el.clientWidth - paddingLeft - paddingRight;\n rect.height = el.clientHeight - paddingTop - paddingBottom;\n rect.bottom = rect.top + rect.height;\n rect.right = rect.left + rect.width;\n return rect;\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX < sortableContentRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < sortableContentRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX > sortableContentRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > sortableContentRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { tryOnMounted, tryOnScopeDispose, toValue, unrefElement, defaultDocument } from '@vueuse/core';\nimport Sortable from 'sortablejs';\nimport { isRef, nextTick } from 'vue-demi';\n\nfunction useSortable(el, list, options = {}) {\n let sortable;\n const { document = defaultDocument, ...resetOptions } = options;\n const defaultOptions = {\n onUpdate: (e) => {\n moveArrayElement(list, e.oldIndex, e.newIndex);\n }\n };\n const start = () => {\n const target = typeof el === \"string\" ? document == null ? void 0 : document.querySelector(el) : unrefElement(el);\n if (!target || sortable !== void 0)\n return;\n sortable = new Sortable(target, { ...defaultOptions, ...resetOptions });\n };\n const stop = () => {\n sortable == null ? void 0 : sortable.destroy();\n sortable = void 0;\n };\n const option = (name, value) => {\n if (value !== void 0)\n sortable == null ? void 0 : sortable.option(name, value);\n else\n return sortable == null ? void 0 : sortable.option(name);\n };\n tryOnMounted(start);\n tryOnScopeDispose(stop);\n return { stop, start, option };\n}\nfunction moveArrayElement(list, from, to) {\n const _valueIsRef = isRef(list);\n const array = _valueIsRef ? [...toValue(list)] : toValue(list);\n if (to >= 0 && to < array.length) {\n const element = array.splice(from, 1)[0];\n nextTick(() => {\n array.splice(to, 0, element);\n if (_valueIsRef)\n list.value = array;\n });\n }\n}\n\nexport { moveArrayElement, useSortable };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || unsafeStringify(b);\n}\n\nexport default v1;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// @ts-ignore // todo\nimport { v1 as uuidv1, v4 as uuidv4 } from 'uuid'\n\nexport const generateUUIDv1 = () => {\n return uuidv1()\n}\n\nexport const generateUUIDv4 = () => {\n return uuidv4()\n}\n","import { computed, type ComputedRef, nextTick, type Ref, ref } from 'vue'\nimport type { UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableItemDataAware, SortableItemNewPositions } from '@/components/sortable/sortableUtils'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { objectSetValueByPath } from '@/utils/object'\n\nexport const HANDLE_CLASS = 'a-sortable-widget__handle'\nexport const GHOST_CLASS = 'a-sortable-widget__ghost'\nexport const DRAG_CLASS = 'a-sortable-widget__drag'\nexport const CHOSEN_CLASS = 'a-sortable-widget__chosen'\nexport const GROUP_CLASS = 'a-sortable-widget__group'\n\nexport type SortablePropItem<TItem = any> = SortableItemDataAware & TItem\n\nexport interface SortableItem<TItem = any> {\n key: DocId | IntegerId\n index: number\n raw: SortablePropItem<TItem>\n}\n\nexport interface SortableEmit {\n (e: 'update:modelValue', data: SortablePropItem[]): void\n\n (e: 'update:dirty', data: Array<DocId | IntegerId>): void\n\n (e: 'onEnd', data: SortableItemNewPositions): void\n\n (e: 'onAddAfter', data: SortableItem): void\n\n (e: 'onAddLast', data: SortablePropItem | null): void\n\n (e: 'onEdit', data: SortableItem): void\n\n (e: 'onDelete', data: SortableItem): void\n}\n\nexport interface SortableActionsProps {\n dirty: Set<DocId | IntegerId>\n keyField: string\n positionField: string\n updatePosition: boolean\n}\n\nexport function useSortableActions(\n model: Readonly<Ref<SortablePropItem[]>>,\n initSortableCallback: () => void,\n props: SortableActionsProps,\n emit: SortableEmit\n): {\n removeByIndex: (index: number) => SortableItemNewPositions\n updateDataAtIndex: (index: number, data: SortablePropItem, position: number | null, dirty?: boolean | null) => void\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (id: DocId | IntegerId, data: SortablePropItem, position: number | null, dirty?: boolean | null) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n addAfterId: (targetId: DocId | IntegerId | null, data: SortablePropItem) => SortableItemNewPositions\n forceRerender: Ref<number>\n dirtyLocal: Ref<Set<DocId | IntegerId>>\n widgetEl: Ref<HTMLElement | null>\n itemToRemove: Ref<SortableItem | null>\n sortableInstance: Ref<UseSortableReturn | null>\n randomUuid: Ref<string>\n items: ComputedRef<SortableItem[]>\n moveArrayElement: (from: number, to: number) => SortableItemNewPositions\n addAfterIndex: (targetIndex: number | null, data: SortablePropItem) => SortableItemNewPositions\n} {\n const removeDialog = ref(false)\n const itemToRemove = ref<null | SortableItem>(null)\n const widgetEl = ref<HTMLElement | null>(null)\n const randomUuid = ref<string>(generateUUIDv1())\n const sortableInstance = ref<UseSortableReturn | null>(null)\n const forceRerender = ref(0)\n const dirtyLocal = ref(props.dirty)\n\n function transformItem(item: SortablePropItem, index: number): SortableItem {\n return {\n key: item[props.keyField],\n index,\n raw: item,\n }\n }\n\n const items = computed(() => {\n return model.value.map((item, index) => transformItem(item, index))\n })\n\n const forceRerenderWidgetHtml = (emitData: SortablePropItem[] | undefined = undefined) => {\n forceRerender.value++\n if (!isUndefined(emitData)) {\n emit('update:modelValue', emitData)\n }\n nextTick(() => {\n initSortableCallback()\n })\n }\n\n const touchDirty = (id: DocId | IntegerId) => {\n dirtyLocal.value.add(id)\n }\n\n const untouchDirty = (id: DocId | IntegerId) => {\n dirtyLocal.value.delete(id)\n }\n\n const updatePositions = (\n items: SortablePropItem[],\n oldIndex: number,\n newIndex: number,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n const start = oldIndex > newIndex ? newIndex : oldIndex\n let position = start + 1\n for (let i = start; i < items.length; i++) {\n objectSetValueByPath(items[i], props.positionField, position)\n touchDirty(items[i][props.keyField])\n position++\n updatedPositions.push({\n id: items[i].id,\n position: items[i].position,\n })\n }\n return updatedPositions\n }\n\n const moveArrayElement = (from: number, to: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n if (to >= 0 && to < clonedData.length) {\n let returnData: SortableItemNewPositions = []\n const element = clonedData.splice(from, 1)[0]\n clonedData.splice(to, 0, element)\n if (!isUndefined(props.updatePosition)) {\n returnData = updatePositions(clonedData, from, to)\n }\n forceRerenderWidgetHtml()\n emit('update:modelValue', clonedData)\n return returnData\n }\n return []\n }\n\n const findItemIndexById = (id: DocId | IntegerId, items: SortablePropItem[]) => {\n const idx = items.findIndex((item) => item[props.keyField] === id)\n if (idx === -1) return null\n return idx\n }\n\n const updateDataCommon = (\n item: SortablePropItem,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n item.data = cloneDeep(data)\n if (!isNull(position)) item.data.position = position\n if (!isNull(dirty)) touchDirty(data.id)\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: SortablePropItem,\n position: number | null = null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n updateDataCommon(clonedData[foundIndex], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n const updateDataAtIndex = (\n index: number,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n if (clonedData[index]) {\n updateDataCommon(clonedData[index], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n /**\n * @template targetIndex null value is when push as last item\n */\n const addAfterIndex = (targetIndex: number | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetIndex)) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[targetIndex]) {\n clonedData.splice(targetIndex + 1, 0, data)\n updatePositions(clonedData, targetIndex + 1, targetIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (targetId: DocId | IntegerId | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetId)) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const foundIndex = findItemIndexById(targetId, clonedData)\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex + 1, 0, data)\n updatePositions(clonedData, foundIndex + 1, foundIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n return []\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex, 1)\n updatePositions(clonedData, foundIndex, foundIndex, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const removeByIndex = (index: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[index]) {\n const id = clonedData[index][props.keyField]\n clonedData.splice(index, 1)\n updatePositions(clonedData, index, index, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n if (!sortableInstance.value) return\n sortableInstance.value.stop()\n sortableInstance.value = null\n }\n\n const refresh = () => {\n destroy()\n initSortableCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n return {\n items,\n forceRerender,\n dirtyLocal,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstance,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addAfterIndex,\n removeById,\n removeByIndex,\n updateData,\n updateDataAtIndex,\n }\n}\n","import type { DocId, IntegerId } from '@/types/common'\n\nexport const WIDGET_HTML_ID_PREFIX = 'a-sortable-'\n\nexport interface SortableItemDataAware {\n id?: DocId | IntegerId\n position: number\n}\n\nexport interface SortableItemWithParentDataAware {\n id: DocId | IntegerId\n position: number\n parent: DocId | IntegerId | null // if null, no parent\n}\n\nexport interface SortableItemNewPosition {\n id?: DocId | IntegerId\n position: number\n}\n\nexport type SortableItemNewPositions = Array<SortableItemNewPosition>\n","<script setup lang=\"ts\">\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch, withModifiers } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { SortableEmit, SortableItem, SortablePropItem } from '@/components/sortable/sortableActions'\nimport {\n CHOSEN_CLASS,\n DRAG_CLASS,\n GHOST_CLASS,\n GROUP_CLASS,\n HANDLE_CLASS,\n useSortableActions,\n} from '@/components/sortable/sortableActions'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortablePropItem[] | any\n dirty?: Set<DocId | IntegerId>\n keyField?: string\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n updatePosition?: boolean\n positionField?: string\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n addLastButtonT?: string\n }>(),\n {\n dirty: () => new Set<DocId | IntegerId>(),\n keyField: 'position',\n disableDraggable: false,\n rootClassName: 'a-sortable-widget',\n widgetIdentifierId: undefined,\n disableDefaultSort: false,\n updatePosition: false,\n positionField: 'position',\n showAddAfterButton: false,\n showAddLastButton: false,\n showDeleteButton: false,\n showEditButton: false,\n addLastButtonT: 'common.sortable.addNewAtEnd',\n }\n)\nconst emit = defineEmits<SortableEmit>()\n\nconst model = toRef(() => props.modelValue)\n\nconst { t } = useI18n()\n\nconst onAddAfterClick = (data: SortableItem) => {\n emit('onAddAfter', data)\n}\n\nconst onDeleteClick = (data: SortableItem) => {\n itemToRemove.value = data\n removeDialog.value = true\n}\n\nconst onEditClick = (data: SortableItem) => {\n emit('onEdit', data)\n}\n\nconst onAddLastClick = () => {\n if (props.modelValue.length > 0) {\n emit('onAddLast', cloneDeep(props.modelValue[props.modelValue.length - 1]))\n return\n }\n emit('onAddLast', null)\n}\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst initSortable = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortable = widgetEl.value.querySelector<HTMLElement>('.' + GROUP_CLASS)\n if (!nestedSortable) return\n sortableInstance.value = useSortable(nestedSortable, [], {\n handle: '.' + HANDLE_CLASS,\n ghostClass: GHOST_CLASS,\n dragClass: DRAG_CLASS,\n chosenClass: CHOSEN_CLASS,\n onEnd: async (event: SortableEvent) => {\n if (props.disableDefaultSort || isUndefined(event.oldIndex) || isUndefined(event.newIndex)) return\n const needsRefresh = moveArrayElement(event.oldIndex, event.newIndex)\n emit('onEnd', needsRefresh)\n },\n })\n}\n\nconst {\n items,\n forceRerender,\n dirtyLocal,\n moveArrayElement,\n itemToRemove,\n removeDialog,\n destroy,\n refresh,\n onRemoveDialogConfirm,\n sortableInstance,\n widgetEl,\n randomUuid,\n addAfterId,\n removeById,\n updateData,\n addAfterIndex,\n removeByIndex,\n updateDataAtIndex,\n} = useSortableActions(model, initSortable, props, emit)\n\nonBeforeUnmount(() => {\n destroy()\n})\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortable()\n})\n\nwatch(\n () => props.disableDraggable,\n async (newValue) => {\n destroy()\n if (newValue === false) initSortable()\n }\n)\n\nwatch(\n () => props.dirty,\n (newValue) => {\n dirtyLocal.value = newValue\n }\n)\n\ndefineExpose({\n refresh,\n addAfterId,\n addAfterIndex,\n removeById,\n removeByIndex,\n updateData,\n updateDataAtIndex,\n})\n</script>\n\n<template>\n <div>\n <div\n :id=\"widgetHtmlId\"\n :class=\"rootClassName\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n >\n <div\n v-for=\"item of items\"\n :key=\"item.key\"\n class=\"a-sortable-widget__item\"\n >\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n <div class=\"a-sortable-widget__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div class=\"a-sortable-widget__buttons\">\n <VBtn\n v-if=\"showEditButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onEditClick(item)\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"Edit\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onDeleteClick(item)\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"Remove\"\n />\n </VBtn>\n <slot\n name=\"buttons\"\n :item=\"item\"\n />\n <VBtn\n v-if=\"showAddAfterButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n >\n <VIcon icon=\"mdi-dots-vertical\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"More options\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n v-if=\"showAddAfterButton\"\n @click.stop=\"onAddAfterClick(item)\"\n >\n Add new item after\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n </div>\n </div>\n </div>\n <slot\n name=\"add-last-activator\"\n :props=\"{ onClick: withModifiers(() => onAddLastClick(), ['stop']) }\"\n >\n <VBtn\n v-if=\"showAddLastButton\"\n size=\"small\"\n prepend-icon=\"mdi-plus\"\n class=\"ma-1\"\n @click.stop=\"onAddLastClick\"\n >\n {{ t(addLastButtonT) }}\n </VBtn>\n </slot>\n <VDialog\n v-model=\"removeDialog\"\n :width=\"500\"\n >\n <VCard v-if=\"removeDialog\">\n <ADialogToolbar @on-cancel=\"removeDialog = false\">\n {{ t('common.system.modal.confirmDelete') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"removeDialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary @click.stop=\"onRemoveDialogConfirm\">\n {{ t('common.button.delete') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use 'sass:color';\n\n// todo dark theme colors\n\n$class-name-root: 'a-sortable-widget';\n$bg-color: #fff;\n$border-color: lightgray;\n$border-color-hover: gray;\n$ghost-bg-color: color.scale(#3f6ad8, $lightness: 95%);\n\n.#{$class-name-root} {\n &__item {\n position: relative;\n display: flex;\n align-items: center;\n padding: 6px 0 6px 4px;\n background-color: $bg-color;\n border: 1px solid $border-color;\n border-bottom: none;\n\n &:first-child {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n &:last-child {\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n border-bottom: 1px solid $border-color;\n }\n\n &:hover {\n border-color: $border-color-hover;\n\n .#{$class-name-root}__buttons {\n opacity: 1;\n }\n }\n\n &:hover + & {\n border-top: 1px solid $border-color-hover;\n }\n }\n\n &__content {\n width: 100%;\n }\n\n &__handle {\n cursor: move;\n margin: 6px;\n\n &--disabled {\n opacity: 0;\n cursor: default;\n }\n }\n\n &__ghost {\n background-color: $ghost-bg-color;\n }\n\n &__buttons {\n opacity: 0;\n display: flex;\n }\n}\n</style>\n","import { type InjectionKey, nextTick, type Ref, ref } from 'vue'\nimport type { UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableItemNewPositions, SortableItemWithParentDataAware } from '@/components/sortable/sortableUtils'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport type { DocId, IntegerId } from '@/types/common'\n\nexport const NESTED_HANDLE_CLASS = 'a-sortable-nested-widget__handle'\nexport const NESTED_GHOST_CLASS = 'a-sortable-nested-widget__ghost'\nexport const NESTED_DRAG_CLASS = 'a-sortable-nested-widget__drag'\nexport const NESTED_CHOSEN_CLASS = 'a-sortable-nested-widget__chosen'\nexport const NESTED_GROUP_CLASS = 'a-sortable-nested-widget__group'\nexport const SortableLevel: InjectionKey<number> = Symbol.for('anzu:SortableLevel')\n\nexport interface SortableNestedItem<TData extends SortableItemWithParentDataAware = any> {\n data: TData\n children?: Array<SortableNestedItem> | undefined // if undefined, no nested allowed\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNested<TData extends SortableItemWithParentDataAware = any> {\n children: Array<SortableNestedItem<TData>>\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNestedEmit {\n (e: 'update:modelValue', data: SortableNested): void\n\n (e: 'onEnd', data: SortableItemNewPositions): void\n\n (e: 'onAddAfter', data: SortableNestedItem): void\n\n (e: 'onAddChild', data: SortableNestedItem): void\n\n (e: 'onAddLast', data: SortableNestedItem | null): void\n\n (e: 'onEdit', data: SortableNestedItem): void\n\n (e: 'onDelete', data: SortableNestedItem): void\n}\n\nexport function useSortableNestedActions(\n model: Readonly<Ref<SortableNested>>,\n initSortablesCallback: () => void,\n emit: SortableNestedEmit\n): {\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null,\n position: number | null,\n dirty?: boolean | null,\n parent?: DocId | IntegerId | null | undefined\n ) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n sortableInstances: Ref<Array<UseSortableReturn>>\n addChildToId: (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => void\n addAfterId: (targetId: DocId | IntegerId | null, data: any, childrenAllowed: boolean) => SortableItemNewPositions\n forceRerender: Ref<number>\n dragging: Ref<boolean>\n widgetEl: Ref<HTMLElement | null>\n itemToRemove: Ref<SortableNestedItem | null>\n randomUuid: Ref<string>\n moveArrayElement: (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ) => SortableItemNewPositions\n} {\n const { showWarningT } = useAlerts()\n\n const sortableInstances = ref<Array<UseSortableReturn>>([])\n const forceRerender = ref(0)\n const removeDialog = ref(false)\n const itemToRemove = ref<null | SortableNestedItem>(null)\n const dragging = ref(false)\n const widgetEl = ref<HTMLElement | null>(null)\n const randomUuid = ref<string>(generateUUIDv1())\n\n const forceRerenderWidgetHtml = (emitData: SortableNested | undefined = undefined) => {\n forceRerender.value++\n if (!isUndefined(emitData)) {\n emit('update:modelValue', emitData)\n }\n nextTick(() => {\n initSortablesCallback()\n })\n }\n\n const refresh = () => {\n destroy()\n initSortablesCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n sortableInstances.value.forEach((item) => {\n item.stop()\n })\n sortableInstances.value = []\n }\n\n const touchDirty = (item: SortableNestedItem, nestedData: SortableNested) => {\n item.meta.dirty = true\n nestedData.meta.dirty = true\n }\n\n const updatePositionsSameParent = (\n items: SortableNestedItem[],\n oldIndex: number,\n newIndex: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n const start = oldIndex > newIndex ? newIndex : oldIndex\n let position = start + 1\n for (let i = start; i < items.length; i++) {\n if (items[i].data.position !== position) {\n items[i].data.position = position\n touchDirty(items[i], clonedData)\n updatedPositions.push({\n id: items[i].data.id,\n position: items[i].data.position,\n })\n }\n position++\n }\n }\n const updatePositionsDifferentParent = (\n itemsTarget: SortableNestedItem[],\n itemsSource: SortableNestedItem[],\n indexTarget: number,\n indexSource: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n if (itemsTarget.length > 0) {\n let position = indexTarget + 1\n for (let i = indexTarget; i < itemsTarget.length; i++) {\n if (itemsTarget[i].data.position !== position) {\n itemsTarget[i].data.position = position\n touchDirty(itemsTarget[i], clonedData)\n updatedPositions.push({\n id: itemsTarget[i].data.id,\n position: itemsTarget[i].data.position,\n })\n }\n position++\n }\n }\n if (itemsSource.length > 0) {\n let position = indexSource + 1\n for (let i = indexSource; i < itemsSource.length; i++) {\n if (itemsSource[i].data.position !== position) {\n itemsSource[i].data.position = position\n touchDirty(itemsSource[i], clonedData)\n updatedPositions.push({\n id: itemsSource[i].data.id,\n position: itemsSource[i].data.position,\n })\n }\n position++\n }\n }\n }\n\n const calculateParentDepth = (\n parent: DocId | IntegerId | null,\n items: Array<SortableNestedItem>,\n depth: number = 0\n ): number => {\n if (parent === null) return depth\n const parentItem = items.find((item) => item.data.id === parent)\n if (!parentItem) return depth\n depth++\n return calculateParentDepth(parentItem.data.parent, items, depth)\n }\n\n const calculateChildDepth = (children: Array<SortableNestedItem> | undefined, depth: number = 0): number => {\n let childDepth = depth\n if (children && children.length) {\n depth++\n for (const child of children) {\n const currentDepth = calculateChildDepth(child.children, depth)\n childDepth = Math.max(childDepth, currentDepth)\n }\n }\n return childDepth\n }\n\n /**\n * @return number - Max depth of array, root = 1\n */\n const calculateNodeMaxDepth = (\n item: SortableNestedItem,\n items: Array<SortableNestedItem>,\n depth: number = 1\n ): number => {\n const parentDepth = calculateParentDepth(item.data.parent, items)\n const childDepth = calculateChildDepth(item.children, depth)\n return parentDepth + childDepth\n }\n\n const findItemById = (\n id: DocId | IntegerId,\n arr: SortableNestedItem[],\n parent: SortableNestedItem | null = null\n ): { itemFound: SortableNestedItem | null; parentItem: SortableNestedItem | null } => {\n for (const item of arr) {\n if (item.data.id === id) {\n return {\n itemFound: item,\n parentItem: parent,\n }\n }\n if (item.children) {\n const foundInChildren = findItemById(id, item.children, item)\n if (foundInChildren.itemFound !== null) {\n return foundInChildren\n }\n }\n }\n\n return {\n itemFound: null,\n parentItem: null,\n }\n }\n\n // todo refactor\n const moveArrayElement = (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: itemToMove, parentItem: itemToMoveParentItem } = findItemById(currentId, clonedData.children)\n\n if (!itemToMove) {\n console.error('ASortableNested error.')\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n // moving to root\n if (targetId === null) {\n if (isNull(itemToMoveParentItem) && newIndex === oldIndex) {\n // moving item from root to root, but same place, skip\n return []\n }\n if (isNull(itemToMoveParentItem)) {\n // moving item from root to root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = clonedData.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsSameParent(clonedData.children, idx, newIndex, clonedData, returnData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.children) {\n // moving from non-root to root\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = null\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n clonedData.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n // moving to specific array element\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem || !targetItem.children) {\n // moving item to undefined children is not allowed by this implementation but allowed by sortablejs\n // so rerender is needed\n forceRerenderWidgetHtml()\n return []\n }\n\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.data.id === targetItem.data.id && newIndex === oldIndex) {\n // moving item from/to same parent and same position, skip\n return []\n }\n\n if (itemToMoveParentItem && itemToMoveParentItem.children && targetItem.data.id === itemToMoveParentItem.data.id) {\n // moving item inside same parent\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsSameParent(targetItem.children, idx, newIndex, clonedData, returnData)\n }\n } else if (\n itemToMoveParentItem &&\n itemToMoveParentItem.children &&\n targetItem.data.id !== itemToMoveParentItem.data.id\n ) {\n // moving item between two different parents\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n targetItem.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n }\n } else {\n // moving from root to non-root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = clonedData.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(targetItem.children, clonedData.children, newIndex, idx, clonedData, returnData)\n }\n }\n\n if (calculateNodeMaxDepth(targetItem, clonedData.children) > maxDepth) {\n showWarningT('common.sortable.error.maxDeepExceed')\n forceRerenderWidgetHtml()\n return []\n }\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n const { itemFound, parentItem } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (parentItem && parentItem.children) {\n const idx = parentItem.children.indexOf(itemFound)\n if (idx !== -1) {\n parentItem.children.splice(idx, 1)\n updatePositionsSameParent(parentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n const idx = clonedData.children.indexOf(itemFound)\n if (idx !== -1) {\n clonedData.children.splice(idx, 1)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param children - item children, use null to skip update and keep original data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n * @param parent - item parent id, use undefined to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null = null,\n position: number | null = null,\n dirty: null | boolean = null,\n parent: DocId | IntegerId | null | undefined = undefined\n ) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return\n }\n itemFound.data = cloneDeep(data)\n if (!isNull(children)) itemFound.children = children\n if (!isNull(position)) itemFound.data.position = position\n if (!isNull(dirty)) itemFound.meta.dirty = dirty\n if (!isNull(dirty) && dirty === true) clonedData.meta.dirty = true\n if (!isUndefined(parent)) itemFound.data.parent = parent\n forceRerenderWidgetHtml(clonedData)\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (\n targetId: DocId | IntegerId | null,\n data: any,\n childrenAllowed: boolean\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n\n if (isNull(targetId)) {\n clonedData.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const { itemFound: targetItem, parentItem: targetItemParentItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return []\n }\n insertData.data.position = targetItem.data.position + 1\n insertData.data.parent = targetItem.data.parent\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(targetItemParentItem) && targetItemParentItem.children) {\n const idx = targetItemParentItem.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n targetItemParentItem.children.splice(idx, 0, insertData)\n updatePositionsSameParent(targetItemParentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n // insert to root\n const idx = clonedData.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n clonedData.children.splice(idx, 0, insertData)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const addChildToId = (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return\n }\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n insertData.data.id = data.id\n insertData.data.position =\n targetItem.children && targetItem.children.length > 0 ? targetItem.children.length + 1 : 1\n insertData.data.parent = targetItem.data.id\n\n if (!isUndefined(targetItem.children) && targetItem.children.length === 0) {\n targetItem.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n return {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstances,\n forceRerender,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n }\n}\n","<script setup lang=\"ts\">\nimport { inject, provide } from 'vue'\nimport { computed } from 'vue'\nimport type { SortableNestedItem } from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { NESTED_HANDLE_CLASS, SortableLevel } from '@/components/sortable/sortableNestedActions'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n item: SortableNestedItem | any\n disableDraggable: boolean\n maxDepth: number\n showAddAfterButton: boolean\n showAddChildButton: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'onAddAfter', item: SortableNestedItem): void\n (e: 'onAddChild', item: SortableNestedItem): void\n (e: 'onDelete', item: SortableNestedItem): void\n (e: 'onEdit', item: SortableNestedItem): void\n}>()\n\nconst onDeleteClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onDelete', item)\n return\n }\n emit('onDelete', cloneDeep(props.item))\n}\n\nconst onEditClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onEdit', item)\n return\n }\n emit('onEdit', cloneDeep(props.item))\n}\n\nconst onAddAfterClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddAfter', item)\n return\n }\n emit('onAddAfter', cloneDeep(props.item))\n}\n\nconst onAddChildClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddChild', item)\n return\n }\n emit('onAddChild', cloneDeep(props.item))\n}\n\nconst level = inject<number>(SortableLevel, 1)\nprovide<number>(SortableLevel, level + 1)\n\nconst showAddChildButtonComputed = computed(() => {\n return (\n props.showAddChildButton &&\n !isUndefined(props.item.children) &&\n props.item.children.length === 0 &&\n level < props.maxDepth\n )\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"a-sortable-nested-widget__container\"\n :class=\"'a-sortable-nested-widget__container--level-' + level\"\n :data-id=\"item.data.id\"\n >\n <div class=\"a-sortable-nested-widget__nested\">\n <div class=\"a-sortable-nested-widget__item\">\n <VIcon\n :class=\"{\n [NESTED_HANDLE_CLASS]: true,\n [NESTED_HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n <div class=\"a-sortable-nested-widget__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div class=\"a-sortable-nested-widget__buttons\">\n <VBtn\n v-if=\"showEditButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onEditClick\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onDeleteClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.remove')\"\n />\n </VBtn>\n <slot\n name=\"buttons\"\n :item=\"item\"\n />\n <VBtn\n v-if=\"showAddAfterButton || showAddChildButtonComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n >\n <VIcon icon=\"mdi-dots-vertical\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n v-if=\"showAddAfterButton\"\n @click.stop=\"onAddAfterClick\"\n >\n {{ t('common.sortable.addAfter') }}\n </VListItem>\n <VListItem\n v-if=\"showAddChildButtonComputed\"\n @click.stop=\"onAddChildClick\"\n >\n {{ t('common.sortable.addChild') }}\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n </div>\n <div\n v-if=\"level < maxDepth && !isUndefined(item.children)\"\n class=\"a-sortable-nested-widget__group\"\n :class=\"{ 'a-sortable-nested-widget__group--empty': item.children.length === 0 }\"\n :data-id=\"item.data.id\"\n >\n <ASortableNestedItem\n v-for=\"child of item.children\"\n :key=\"child.data.id\"\n :item=\"child\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <!-- @vue-ignore -->\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot as any\"\n />\n </template>\n <!-- @vue-ignore -->\n <template #buttons=\"{ item: buttonSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonSlot as any\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type {\n SortableNested,\n SortableNestedEmit,\n SortableNestedItem,\n} from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport {\n NESTED_CHOSEN_CLASS,\n NESTED_DRAG_CLASS,\n NESTED_GHOST_CLASS,\n NESTED_GROUP_CLASS,\n NESTED_HANDLE_CLASS,\n useSortableNestedActions,\n} from '@/components/sortable/sortableNestedActions'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport { stringToInt } from '@/utils/string'\nimport ASortableNestedItem from '@/components/sortable/ASortableNestedItem.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortableNested\n maxDepth: number\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showAddChildButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {\n disableDraggable: false,\n rootClassName: 'a-sortable-nested-widget',\n widgetIdentifierId: undefined,\n disableDefaultSort: false,\n showAddAfterButton: false,\n showAddLastButton: false,\n showAddChildButton: false,\n showDeleteButton: false,\n showEditButton: false,\n }\n)\nconst emit = defineEmits<SortableNestedEmit>()\n\nconst model = toRef(() => props.modelValue)\n\nconst onAddAfterClick = (data: SortableNestedItem) => {\n emit('onAddAfter', data)\n}\n\nconst onAddChildClick = (data: SortableNestedItem) => {\n emit('onAddChild', data)\n}\n\nconst onDeleteClick = (data: SortableNestedItem) => {\n itemToRemove.value = data\n removeDialog.value = true\n}\n\nconst onEditClick = (data: SortableNestedItem) => {\n emit('onEdit', data)\n}\n\nconst onAddLastClick = () => {\n if (props.modelValue.children.length > 0) {\n emit('onAddLast', cloneDeep(props.modelValue.children[props.modelValue.children.length - 1]))\n return\n }\n emit('onAddLast', null)\n}\n\nconst { t } = useI18n()\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst widgetClass = computed(() => {\n return props.rootClassName + ' ' + (dragging.value ? props.rootClassName + '--dragging' : '')\n})\n\nconst initSortables = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortables = Array.from(widgetEl.value.querySelectorAll<HTMLElement>('.' + NESTED_GROUP_CLASS))\n sortableInstances.value = []\n for (let i = 0; i < nestedSortables.length; i++) {\n sortableInstances.value[i] = useSortable(nestedSortables[i], [], {\n group: {\n name: 'nested',\n pull: true,\n put: true,\n },\n handle: '.' + NESTED_HANDLE_CLASS,\n ghostClass: NESTED_GHOST_CLASS,\n dragClass: NESTED_DRAG_CLASS,\n chosenClass: NESTED_CHOSEN_CLASS,\n fallbackOnBody: true,\n swapThreshold: 0.65,\n forceFallback: true,\n fallbackTolerance: 3,\n onUpdate: () => {},\n onStart: () => {\n dragging.value = true\n },\n onEnd: (event: SortableEvent) => {\n dragging.value = false\n nextTick(() => {\n const id = stringToInt(event.item.getAttribute('data-id') ?? '0')\n if (id < 1) return\n const newIndex = event.newIndex\n if (isUndefined(newIndex)) return\n const oldIndex = event.oldIndex\n if (isUndefined(oldIndex)) return\n let parentId: number | null = null\n const parentEl = event.item.parentElement\n if (!isNull(parentEl)) {\n parentId = stringToInt(parentEl.getAttribute('data-id') ?? '0')\n if (parentId === 0) parentId = null\n }\n const needsRefresh = moveArrayElement(id, parentId, newIndex, oldIndex, props.maxDepth)\n emit('onEnd', needsRefresh)\n })\n },\n })\n }\n}\n\nconst {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n forceRerender,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n destroy,\n refresh,\n onRemoveDialogConfirm,\n sortableInstances,\n} = useSortableNestedActions(model, initSortables, emit)\n\nonBeforeUnmount(() => {\n destroy()\n})\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortables()\n})\n\nwatch(\n () => props.disableDraggable,\n async (newValue) => {\n destroy()\n if (newValue === false) initSortables()\n }\n)\n\ndefineExpose({\n refresh,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n})\n</script>\n\n<template>\n <div>\n <div\n :id=\"widgetHtmlId\"\n :class=\"widgetClass\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"NESTED_GROUP_CLASS\"\n >\n <ASortableNestedItem\n v-for=\"item of modelValue.children\"\n :key=\"item.data.id\"\n :item=\"item\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot\"\n />\n </template>\n <template #buttons=\"{ item: buttonsSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonsSlot\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n <VBtn\n v-if=\"showAddLastButton\"\n size=\"small\"\n prepend-icon=\"mdi-plus\"\n @click.stop=\"onAddLastClick\"\n >\n {{ t('common.sortable.addNewAtEnd') }}\n </VBtn>\n <VDialog\n v-model=\"removeDialog\"\n :width=\"500\"\n >\n <VCard v-if=\"removeDialog\">\n <ADialogToolbar @on-cancel=\"removeDialog = false\">\n {{ t('common.system.modal.confirmDelete') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"removeDialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary @click.stop=\"onRemoveDialogConfirm\">\n {{ t('common.button.delete') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use 'sass:color';\n\n// todo dark theme colors\n\n$class-name-root: 'a-sortable-nested-widget';\n$bg-color: #fff;\n$border-color: lightgray;\n$border-color-hover: gray;\n$ghost-bg-color: color.scale(#3f6ad8, $lightness: 95%);\n$item-space: 10px;\n$ident: 40px;\n\n.#{$class-name-root} {\n &__container {\n position: relative;\n background-color: $bg-color;\n margin-left: ($ident + $item-space);\n\n &::before {\n content: '';\n position: absolute;\n top: -($item-space);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n width: $ident;\n height: ($ident + $item-space);\n }\n\n &::after {\n position: absolute;\n content: '';\n top: ($ident - 1px);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-top: 1px solid $border-color;\n width: $ident;\n height: 100%;\n }\n\n &:last-child::after {\n display: none;\n }\n\n &--level-2 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -4%);\n }\n }\n\n &--level-3 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -8%);\n }\n }\n\n &--level-4 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -12%);\n }\n }\n\n &--level-5 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -16%);\n }\n }\n }\n\n > .#{$class-name-root}__group > .#{$class-name-root}__container:first-child:before {\n border-bottom: none;\n }\n\n &__item {\n width: 100%;\n display: flex;\n border: 1px solid $border-color;\n align-items: center;\n justify-content: space-between;\n padding: 6px 10px;\n border-radius: 5px;\n margin-bottom: 10px;\n\n &:hover {\n border-color: $border-color-hover;\n\n .#{$class-name-root}__buttons {\n opacity: 1;\n }\n }\n\n &:hover + div {\n div {\n border-color: $border-color-hover;\n\n &::after,\n &::before {\n border-color: $border-color-hover;\n }\n }\n }\n }\n\n &__content {\n width: 100%;\n }\n\n &__nested {\n width: 100%;\n }\n\n &__handle {\n cursor: move;\n margin-right: 6px;\n\n &--disabled {\n opacity: 0;\n cursor: default;\n }\n }\n\n &__ghost {\n .#{$class-name-root}__item {\n background-color: $ghost-bg-color !important;\n }\n }\n\n &__buttons {\n opacity: 0;\n display: flex;\n }\n\n &--dragging {\n .#{$class-name-root}__group--empty {\n padding-bottom: 20px;\n }\n }\n\n &__chosen {\n .#{$class-name-root}__container {\n margin-left: 0;\n }\n }\n\n &__drag {\n &::before,\n &::after {\n opacity: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TItem\">\nimport { computed, ref, toRaw, withModifiers } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport ADatatablePagination from '@/components/ADatatablePagination.vue'\nimport type { Fn } from '@vueuse/core'\n\nconst props = withDefaults(\n defineProps<{\n selectedItems: Array<TItem>\n pagination: Pagination\n submitFilter: Fn\n resetFilter: Fn\n loading?: boolean\n minCount?: number\n maxCount?: number\n modelValue?: boolean | undefined // dialog\n dialogTitleT?: string\n paginationMode?: 'standard' | 'more'\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'update:pagination', data: Pagination): void\n (e: 'onOpen'): void\n (e: 'onPageChange'): void\n (e: 'onConfirm', data: Array<TItem>): void\n (e: 'onFetchNextPage'): void\n}>()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst paginationComputed = computed({\n get: () => props.pagination,\n set: (newValue) => {\n emit('update:pagination', { ...toRaw(newValue) })\n },\n})\n\nconst sidebarLeft = ref(true)\nconst filterTouched = ref(false)\n\nconst { t } = useI18n()\n\nconst selectedItemsCount = computed(() => {\n return props.selectedItems.length\n})\n\nconst disabledSubmit = computed(() => {\n return selectedItemsCount.value < props.minCount || selectedItemsCount.value > props.maxCount\n})\n\nconst onOpen = () => {\n emit('onOpen')\n sidebarLeft.value = true\n dialog.value = true\n}\n\nconst toggleSidebar = () => {\n sidebarLeft.value = !sidebarLeft.value\n}\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit(\n 'onConfirm',\n props.selectedItems.map((item) => toRaw(item))\n )\n onClose()\n}\n\nconst fetchNextPage = () => {\n emit('onFetchNextPage')\n}\n\nconst onPageChange = () => {\n emit('onPageChange')\n}\n\nconst lastPage = computed(() => {\n return Math.ceil(paginationComputed.value.totalCount / paginationComputed.value.rowsPerPage)\n})\n\nconst hasNextPage = computed(() => {\n return !(\n (isNull(paginationComputed.value.hasNextPage) && paginationComputed.value.page === lastPage.value) ||\n paginationComputed.value.hasNextPage === false\n )\n})\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && hasNextPage.value && !props.loading) {\n fetchNextPage()\n }\n}\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-bind=\"$attrs\"\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t(dialogTitleT) }}\n </slot>\n </ADialogToolbar>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.subjectSelect.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <VForm\n name=\"search2\"\n class=\"px-2 pt-4\"\n @submit.prevent=\"submitFilter\"\n >\n <slot name=\"filter\" />\n </VForm>\n </div>\n <div class=\"subject-select-filter__actions\">\n <VBtn\n color=\"primary\"\n class=\"mx-2\"\n :variant=\"filterTouched ? 'flat' : 'text'\"\n size=\"small\"\n @click.stop=\"submitFilter\"\n >\n {{ t('common.button.submitFilter') }}\n </VBtn>\n <VBtn\n class=\"px-2\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n size=\"small\"\n @click.stop=\"resetFilter\"\n >\n <VIcon icon=\"mdi-filter-remove-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.resetFilter') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"subject-select__content\">\n <slot name=\"content\" />\n <div\n v-if=\"paginationMode === 'more'\"\n class=\"d-flex w-100 align-center justify-center pa-4\"\n >\n <ABtnSecondary\n v-show=\"hasNextPage || loading\"\n v-intersect.quiet=\"autoloadOnIntersect\"\n :loading=\"loading\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n <ADatatablePagination\n v-else\n v-model=\"paginationComputed\"\n @change=\"onPageChange\"\n />\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.subjectSelect.texts.pickExactCount', { count: props.minCount, selected: selectedItemsCount }) }}\n </div>\n <div v-else>\n {{\n t('common.subjectSelect.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedItemsCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { ref } from 'vue'\n\nconst showAll = ref(false)\n\nexport function useCustomDataForm() {\n const toggleForm = () => {\n showAll.value = !showAll.value\n }\n\n return {\n showAll,\n toggleForm,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const CustomDataFormElementType = {\n String: 'string',\n Integer: 'integer',\n StringArray: 'string_array',\n Boolean: 'boolean',\n} as const\nexport const CustomDataFormElementTypeDefault = CustomDataFormElementType.String\nexport type CustomDataFormElementTypeType = (typeof CustomDataFormElementType)[keyof typeof CustomDataFormElementType]\n\nexport function useCustomDataFormElementType() {\n const { t } = useI18n()\n const customDataFormElementTypeOptions = ref<ValueObjectOption<CustomDataFormElementTypeType>[]>([\n {\n value: CustomDataFormElementType.String,\n title: t('common.customFormElement.type.string'),\n },\n {\n value: CustomDataFormElementType.Integer,\n title: t('common.customFormElement.type.integer'),\n },\n {\n value: CustomDataFormElementType.StringArray,\n title: t('common.customFormElement.type.stringArray'),\n },\n {\n value: CustomDataFormElementType.Boolean,\n title: t('common.customFormElement.type.boolean'),\n },\n ])\n\n const getCustomDataFormElementTypeOption = (value: CustomDataFormElementTypeType) => {\n return customDataFormElementTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n customDataFormElementTypeOptions,\n getCustomDataFormElementTypeOption,\n }\n}\n","import { between, createI18nMessage } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateBetween() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(between, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.between',\n })\n}\n","import { createI18nMessage, email } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateEmail() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(email, {\n messagePath: () => 'error.jsValidation.email',\n })\n}\n","import { createI18nMessage, maxLength } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMaxLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(maxLength, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.maxLength',\n })\n}\n","import { createI18nMessage, maxValue } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMaxValue() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(maxValue, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.maxValue',\n })\n}\n","import { createI18nMessage, minLength } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMinLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(minLength, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.minLength',\n })\n}\n","import { createI18nMessage, minValue } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMinValue() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(minValue, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.minValue',\n })\n}\n","import { createI18nMessage, numeric } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateNumeric() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(numeric, {\n messagePath: () => 'error.jsValidation.numeric',\n })\n}\n","import { createI18nMessage, required } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateRequired() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(required, {\n messagePath: () => 'error.jsValidation.required',\n })\n}\n","import { createI18nMessage, helpers } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateSlug() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(helpers.regex(/^[a-z\\-0-9/]+$/), {\n messagePath: () => 'error.jsValidation.slug',\n })\n}\n","import { createI18nMessage, helpers } from '@vuelidate/validators'\nimport { unref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateStringArrayItemLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n const stringArrayItemLengthValidator = (min: number, max: number) => {\n return (value: string[]) =>\n !helpers.req(value) || value.every((item) => item.length >= unref(min) && item.length <= unref(max))\n }\n const stringArrayItemLengthHelper = (min: number, max: number) => {\n return {\n $validator: stringArrayItemLengthValidator(min, max),\n // $message not required when using i18n\n // $message: (input: { $params: Record<string, any> }) => {\n // const { $params } = input\n // return `Item length in list must have between ${$params.min} and ${$params.max} characters.`\n // },\n $params: {\n min,\n max,\n type: 'stringArrayItemLength',\n },\n }\n }\n\n return withI18nMessage(stringArrayItemLengthHelper, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.stringArrayItemLength',\n })\n}\n","import { createI18nMessage, url } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateUrl() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(url, {\n messagePath: () => 'error.jsValidation.url',\n })\n}\n","import { useValidateBetween } from '@/validators/vuelidate/common/useValidateBetween'\nimport { useValidateEmail } from '@/validators/vuelidate/common/useValidateEmail'\nimport { useValidateMaxLength } from '@/validators/vuelidate/common/useValidateMaxLength'\nimport { useValidateMaxValue } from '@/validators/vuelidate/common/useValidateMaxValue'\nimport { useValidateMinLength } from '@/validators/vuelidate/common/useValidateMinLength'\nimport { useValidateMinValue } from '@/validators/vuelidate/common/useValidateMinValue'\nimport { useValidateNumeric } from '@/validators/vuelidate/common/useValidateNumeric'\nimport { useValidateRequired } from '@/validators/vuelidate/common/useValidateRequired'\nimport { useValidateRequiredIf } from '@/validators/vuelidate/common/useValidateRequiredIf'\nimport { useValidateSlug } from '@/validators/vuelidate/common/useValidateSlug'\nimport { useValidateStringArrayItemLength } from '@/validators/vuelidate/common/useValidateStringArrayItemLength'\nimport { useValidateUrl } from '@/validators/vuelidate/common/useValidateUrl'\n\nexport function useValidate() {\n return {\n required: useValidateRequired(),\n requiredIf: useValidateRequiredIf(),\n minLength: useValidateMinLength(),\n maxLength: useValidateMaxLength(),\n minValue: useValidateMinValue(),\n maxValue: useValidateMaxValue(),\n between: useValidateBetween(),\n email: useValidateEmail(),\n numeric: useValidateNumeric(),\n slug: useValidateSlug(),\n url: useValidateUrl(),\n stringArrayItemLength: useValidateStringArrayItemLength(),\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, isProxy, ref, toRaw } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useVuelidate } from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { CustomDataFormElementType } from '@/components/customDataForm/CustomDataFormElementTypes'\nimport { isEmptyObject } from '@/utils/common'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n config: CustomDataFormElement\n validationScope?: ValidationScope\n }>(),\n {\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: { property: string; value: any }): void\n (e: 'blur', data: any): void\n}>()\n\nconst fixValue = (value: any) => {\n if (props.config.attributes.type === CustomDataFormElementType.Integer) {\n return parseInt(value)\n }\n return value\n}\n\nconst updateModelValue = (value: any) => {\n emit('update:modelValue', { property: props.config.property, value: fixValue(value) })\n}\n\nconst modelValueComputed = computed(() => {\n const value = isProxy(props.modelValue) ? toRaw(props.modelValue) : props.modelValue\n if (props.config.attributes.type === CustomDataFormElementType.StringArray && isEmptyObject(value)) return []\n return value\n})\n\nconst { maxLength, minLength, requiredIf, minValue, maxValue, stringArrayItemLength } = useValidate()\n\nconst rules = computed(() => {\n const dynamicRules: Record<string, any> = {\n modelValueComputed: {\n required: requiredIf(props.config.attributes.required),\n },\n }\n switch (props.config.attributes.type) {\n case CustomDataFormElementType.String:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n case CustomDataFormElementType.Integer:\n dynamicRules.modelValueComputed.minValue = minValue(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxValue = maxValue(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 9999\n )\n break\n case CustomDataFormElementType.StringArray:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minCount ? props.config.attributes.minCount : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxCount ? props.config.attributes.maxCount : 32\n )\n dynamicRules.modelValueComputed.stringArrayItemLength = stringArrayItemLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0,\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n }\n\n return dynamicRules\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst errorMessageComputed = computed(() => {\n if (v$.value.$errors.length) return [v$.value.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst counter = ref<number | undefined>(undefined)\ncounter.value = props.config.attributes.maxValue ?? undefined\n\nconst onBlur = () => {\n emit('blur', props.modelValue)\n v$.value.$touch()\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"config.attributes.type === CustomDataFormElementType.String\"\n :model-value=\"modelValue\"\n auto-grow\n :rows=\"1\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :counter=\"counter\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextarea>\n <VTextField\n v-else-if=\"config.attributes.type === CustomDataFormElementType.Integer\"\n :model-value=\"modelValueComputed\"\n type=\"number\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextField>\n <VCombobox\n v-else-if=\"config.attributes.type === CustomDataFormElementType.StringArray\"\n :model-value=\"modelValueComputed\"\n :label=\"config.name\"\n multiple\n chips\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VCombobox>\n <VSwitch\n v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === true\"\n :label=\"config.name\"\n :model-value=\"modelValueComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n />\n <div v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === false\">\n optional boolean todo\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useCustomDataForm } from '@/components/customDataForm/useCustomDataForm'\nimport ACustomFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: { [key: string]: any }\n elements: CustomDataFormElement[]\n validationScope?: ValidationScope\n pinnedCount?: number\n readonly?: boolean\n }>(),\n {\n validationScope: undefined,\n pinnedCount: 1000,\n readonly: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { t } = useI18n()\n\nconst { showAll, toggleForm } = useCustomDataForm()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n emit('anyChange')\n}\n\nconst elementsPinned = computed(() => {\n return props.elements.slice(0, props.pinnedCount)\n})\n\nconst elementsOther = computed(() => {\n return props.elements.slice(props.pinnedCount)\n})\n\nconst showHideButtonText = computed(() => {\n return showAll.value\n ? t('common.damImage.asset.detail.metadataToggle.show')\n : t('common.damImage.asset.detail.metadataToggle.hide')\n})\nconst showHideButtonIcon = computed(() => {\n return showAll.value ? 'mdi-minus' : 'mdi-plus'\n})\n\nconst enableShowHide = computed(() => {\n return props.elements.length > props.pinnedCount\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate({ $scope: props.validationScope })\n\nconst validate = (): Promise<boolean> => {\n return v$.value.$validate()\n}\n\ndefineExpose({\n validate,\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <slot name=\"before-pinned\" />\n <VRow\n v-for=\"element in elementsPinned\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n :validation-scope=\"validationScope\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n <slot name=\"after-pinned\" />\n </div>\n <div\n v-show=\"showAll\"\n class=\"w-100\"\n >\n <VRow\n v-for=\"element in elementsOther\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n </div>\n <VBtn\n v-if=\"enableShowHide\"\n variant=\"text\"\n size=\"small\"\n class=\"my-2\"\n @click=\"toggleForm\"\n >\n <VIcon :icon=\"showHideButtonIcon\" />\n {{ showHideButtonText }}\n </VBtn>\n</template>\n","import { type Ref, ref } from 'vue'\n\nconst isDraggingFile = ref(false)\nconst draggingTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nexport function useDropzoneGlobalDragState() {\n const dragoverHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, true)\n }\n const dragleaveHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const dropHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const checkReallyDraggingEnded = (event: DragEvent, dragging: boolean) => {\n if (!dragEventContainsFiles(event)) {\n return\n }\n if (dragging) {\n isDraggingFile.value = true\n clearTimeout(draggingTimer.value)\n } else {\n clearTimeout(draggingTimer.value)\n draggingTimer.value = setTimeout(() => {\n isDraggingFile.value = false\n }, 100)\n }\n }\n const dragEventContainsFiles = (event: DragEvent) => {\n if (event.dataTransfer?.types) {\n for (let i = 0; i < event.dataTransfer.types.length; i++) {\n if (event.dataTransfer.types[i] === 'Files') {\n return true\n }\n }\n }\n\n return false\n }\n\n const initGlobalDragState = () => {\n window.document.addEventListener('dragover', dragoverHandler)\n window.document.addEventListener('dragleave', dragleaveHandler)\n window.document.addEventListener('drop', dropHandler)\n }\n\n const destroyGlobalDragState = () => {\n window.document.removeEventListener('dragover', dragoverHandler)\n window.document.removeEventListener('dragleave', dragleaveHandler)\n window.document.removeEventListener('drop', dropHandler)\n }\n\n return {\n isDraggingFile,\n initGlobalDragState,\n destroyGlobalDragState,\n }\n}\n","export const damFileTypeFix = (file: File | null | undefined) => {\n if (!file) return ''\n if (file.type && file.type.length > 0) {\n return file.type\n }\n const extension = file.name.split('.').pop()?.toLowerCase()\n switch (extension) {\n case 'mov':\n return 'video/quicktime'\n default:\n return ''\n }\n}\n","import { useAlerts } from '@/composables/system/alerts'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport { isUndefined } from '@/utils/common'\nimport { computed } from 'vue'\nimport { i18n } from '@/plugins/i18n'\n\n/**\n * @param accept example: 'image/*,.jpg'\n * @param maxSizes example: { 'image/*': 20000 } or { 'image/png': 20000, 'image/jpg': 20000 } or\n * { '.jpg': 20000, '.png': 20000 } or { '*': 20000, }\n */\nexport function useFormatAndSizeCheck(accept: string | undefined, maxSizes: Record<string, number> | undefined) {\n const acceptKeys = computed(() => {\n if (isUndefined(accept)) {\n return []\n }\n return accept.split(',')\n })\n\n const maxSizeKeys = computed(() => {\n if (isUndefined(maxSizes)) {\n return []\n }\n return Object.keys(maxSizes)\n })\n\n const checkFormatsAndSizes = (files: File[], disableAlert = false) => {\n const incorrectFileNames: string[] = []\n const validFiles = files.filter((file) => {\n const isFileValid = checkFormats(file, acceptKeys.value) && checkSizes(file, maxSizeKeys.value, maxSizes)\n if (!isFileValid) {\n incorrectFileNames.push(file.name)\n }\n return isFileValid\n })\n if (incorrectFileNames.length && !disableAlert) {\n const { showWarning } = useAlerts()\n const { t } = i18n.global\n showWarning(t('system.upload.incorrectFormatSize') + ':' + incorrectFileNames.join(', '))\n }\n\n return validFiles\n }\n\n const checkFormats = (file: File, accepts: string[]) => {\n if (accepts.length === 0) {\n return true\n }\n for (let i = 0; i < accepts.length; i++) {\n if (accepts[i].startsWith('.')) {\n // .format\n if (file.name.toLowerCase().endsWith(accepts[i])) {\n return true\n }\n } else {\n // type\n const splitType = accepts[i].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/')) {\n return true\n } else if (accepts[i] === damFileTypeFix(file)) {\n return true\n }\n }\n }\n return false\n }\n\n const checkSizes = (file: File, keys: Array<string>, sizes: Record<string, number> | undefined) => {\n if (keys.length === 0 || isUndefined(sizes)) {\n return true\n }\n for (let j = 0; j < keys.length; j++) {\n if (keys[j] === '*' && sizes[keys[j]] <= file.size) {\n // *\n return true\n } else if (keys[j].startsWith('.') && sizes[keys[j]] <= file.size) {\n // .format\n return true\n } else {\n // type\n const splitType = keys[j].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/') && sizes[keys[j]] > file.size) {\n return true\n } else if (keys[j] === damFileTypeFix(file) && sizes[keys[j]] > file.size) {\n return true\n }\n }\n }\n return false\n }\n\n return {\n checkFormatsAndSizes,\n }\n}\n","<script setup lang=\"ts\">\nimport { useDropZone } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { useDropzoneGlobalDragState } from '@/components/file/composables/dropzone'\nimport { isNull } from '@/utils/common'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\nimport { useI18n } from 'vue-i18n'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n variant?: 'fill' | 'default' | 'fullscreen'\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n disabled?: boolean\n transparent?: boolean\n size?: 'small' | 'default' | 'large'\n hoverOnly?: boolean\n hideText?: boolean\n }>(),\n {\n variant: 'default',\n accept: undefined,\n maxSizes: undefined,\n disabled: false,\n transparent: false,\n size: 'default',\n hoverOnly: false,\n hideText: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onClick'): void\n}>()\n\nconst dropZoneRef = ref<HTMLDivElement>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nfunction onDrop(files: File[] | null) {\n if (props.disabled) return\n if (isNull(files) || files.length === 0) return\n emit('onDrop', checkFormatsAndSizes(files))\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, onDrop)\n\nconst { isDraggingFile } = useDropzoneGlobalDragState()\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"a-file-dropzone\"\n :class=\"{\n 'a-file-dropzone--bg': !transparent,\n 'a-file-dropzone--over': isOverDropZone && isDraggingFile,\n 'a-file-dropzone--possibility': isDraggingFile,\n [`a-file-dropzone--${variant}`]: true,\n [`a-file-dropzone--${size}`]: true,\n [`a-file-dropzone--hover-only`]: hoverOnly,\n [`a-file-dropzone--hide-text`]: hideText,\n }\"\n @click.stop=\"emit('onClick')\"\n >\n <div\n v-if=\"disabled\"\n class=\"text\"\n />\n <div\n v-else-if=\"isDraggingFile\"\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropHere') }}\n </div>\n <div\n v-else\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropPossibility') }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-file-dropzone';\n\n.#{$class-name-root} {\n outline-offset: -4px;\n position: relative;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .text {\n padding: 6px;\n pointer-events: none;\n user-select: none;\n text-align: center;\n border-radius: 5px;\n }\n\n &--fill {\n position: absolute !important;\n inset: 0;\n }\n\n &--bg {\n width: 100%;\n }\n\n &--fullscreen {\n inset: 0;\n position: fixed;\n z-index: 9999;\n }\n\n &--small {\n min-height: 70px;\n }\n\n &--default {\n min-height: 140px;\n }\n\n &--large {\n min-height: 210px;\n }\n\n &--hover-only {\n display: none;\n }\n\n &--hide-text .text {\n display: none;\n }\n\n &.#{$class-name-root}--hover-only.#{$class-name-root}--possibility {\n display: flex;\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n .text {\n background-color: rgba(212 212 212 / 50%);\n }\n\n &--bg {\n background-color: #d4d4d4;\n }\n\n &--over:not(&--disabled) {\n background-color: #dcedc8;\n outline: 2px dashed #7cb342;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #e5edf1;\n outline: 2px dashed #bacfd4;\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n .text {\n background-color: rgba(57 57 57 / 50%);\n }\n\n &--bg {\n background-color: #393939;\n }\n\n &--over:not(&--disabled) {\n background-color: #283121;\n outline: 2px dashed #333e28;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #212531;\n outline: 2px dashed #01579b;\n }\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { CommonAdminImageOptions } from '@/AnzuSystemsCommonAdmin'\nimport { isUndefined } from '@/utils/common'\n\nconst imageOptions = ref<CommonAdminImageOptions>(undefined)\n\nexport function initCommonAdminImageOptions(data: CommonAdminImageOptions) {\n imageOptions.value = data\n}\n\nexport function useCommonAdminImageOptions(configName: string = 'default') {\n if (\n isUndefined(imageOptions.value) ||\n isUndefined(imageOptions.value.configs) ||\n isUndefined(imageOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n imageClient: imageOptions.value.configs[configName].imageClient,\n previewDomain: imageOptions.value.configs[configName].previewDomain,\n imageWidth: imageOptions.value.configs[configName].width,\n imageHeight: imageOptions.value.configs[configName].height,\n }\n}\n","import type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\n\nexport function useImageActions(config: ReturnType<typeof useCommonAdminImageOptions>) {\n const widgetImageToDamImageUrl = (\n image: ImageAware | ImageCreateUpdateAware,\n width = config.imageWidth,\n height = config.imageHeight,\n random = true\n ) => {\n return (\n config.previewDomain +\n '/image/w' +\n width +\n '-h' +\n height +\n (image.dam.regionPosition > 0 ? '-c' + image.dam.regionPosition : '') +\n '/' +\n image.dam.damId +\n '.jpg' +\n (random ? '?random=' + Date.now() : '')\n )\n }\n\n return {\n widgetImageToDamImageUrl,\n }\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport { computed } from 'vue'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport function useDamAcceptTypeAndSizeHelper(\n assetType: undefined | DamAssetType = undefined,\n damConfigExtSystem: DamExtSystemConfig\n) {\n const createSizesByAssetType = (assetType: DamAssetType) => {\n const sizes: Record<string, number> = {}\n for (let i = 0; i < damConfigExtSystem[assetType].mimeTypes.length; i++) {\n sizes[damConfigExtSystem[assetType].mimeTypes[i]] = damConfigExtSystem[assetType].sizeLimit\n }\n return sizes\n }\n\n const uploadSizes = computed(() => {\n if (assetType) {\n return {\n ...createSizesByAssetType(assetType),\n }\n }\n return {\n ...createSizesByAssetType(DamAssetType.Image),\n ...createSizesByAssetType(DamAssetType.Audio),\n ...createSizesByAssetType(DamAssetType.Video),\n ...createSizesByAssetType(DamAssetType.Document),\n }\n })\n\n const uploadAccept = computed(() => {\n return Object.keys(uploadSizes.value).join(',')\n })\n\n return {\n uploadSizes,\n uploadAccept,\n }\n}\n\n","import type { CancelTokenSource } from 'axios'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type {\n AssetExternalProviderIdNullable,\n AssetExternalProviderMetadata,\n DamAssetStatus,\n DamAssetType\n} from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileLink } from '@/types/coreDam/AssetFile'\nimport type { ImageAware } from '@/types/ImageAware'\n\nexport type UploadQueueKey = string\n\nexport interface UploadQueue {\n items: UploadQueueItem[]\n totalCount: number\n processedCount: number\n fileInputKey: number // used to reset html input file element\n\n suggestions: {\n newKeywordNames: Set<string>\n newAuthorNames: Set<string>\n }\n}\n\nexport enum UploadQueueItemType {\n File = 'file',\n Asset = 'asset',\n ExternalProviderAsset = 'externalProviderAsset',\n SlotFile = 'slotFile',\n}\n\nexport enum UploadQueueItemStatus {\n Loading = 'loading', // loading additional api data\n Waiting = 'waiting', // waiting to be uploaded\n Uploading = 'uploading', // uploading right now\n Processing = 'processing', // all data sent by FE, server processing, waiting for notification, todo\n Failed = 'failed', // any error\n Uploaded = 'uploaded', // uploaded/ready after loading\n Stop = 'stop', // after hitting stop upload\n}\n\nexport interface UploadQueueItem {\n key: string\n file: File | null\n status: UploadQueueItemStatus\n assetStatus: DamAssetStatus\n isDuplicate: boolean\n type: UploadQueueItemType\n assetType: DamAssetType\n displayTitle: string\n assetId: DocIdNullable\n duplicateAssetId: DocIdNullable\n fileId: DocIdNullable\n externalProviderAssetId: AssetExternalProviderIdNullable\n externalProviderName: string | null\n externalProviderMetadata: AssetExternalProviderMetadata\n latestChunkCancelToken: CancelTokenSource | null\n chunkSize: number\n currentChunkIndex: number\n chunkTotalCount: number\n licenceId: IntegerId\n imagePreview?: AssetFileLink\n canEditMetadata: boolean\n keywords: DocId[]\n authors: DocId[]\n customData: any\n authorConflicts: DocId[]\n progress: {\n remainingTime: null | number\n progressPercent: null | number\n speed: null | number\n }\n error: {\n hasError: boolean\n message: string\n assetFileFailReason: AssetFileFailReason\n }\n notificationFallbackTimer: ReturnType<typeof setTimeout> | undefined\n notificationFallbackTry: number\n slotName: string | null\n image: undefined | ImageAware // todo check\n}\n\nexport interface DamUploadStartResponse {\n id: DocId\n asset: DocId\n}\n","import type { DocId, DocIdNullable } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\n\nexport enum AssetFileProcessStatus {\n Uploading = 'uploading', // file entity created and ready to receive chunks\n Uploaded = 'uploaded', // all chunks were sent\n Stored = 'stored', // File is stored and ready to processing\n Duplicate = 'duplicate', // AssetFile is duplicate of another asset\n Processed = 'processed', // file processed and ready to serve\n Failed = 'failed',\n}\n\nexport enum AssetFileFailReason {\n None = 'none',\n Unknown = 'unknown',\n InvalidChecksum = 'invalid_checksum',\n InvalidMimeType = 'invalid_mime_type',\n DownloadFailed = 'download_failed',\n InvalidSize = 'invalid_size',\n Default = None,\n}\n\ninterface FileAttributes {\n status: AssetFileProcessStatus\n mimeType: string\n size: number\n originFileName: string\n originUrl: string\n failReason: AssetFileFailReason\n}\n\nexport enum AssetFileLinkType {\n Image = 'image',\n Audio = 'audio',\n Default = Image,\n}\n\nexport interface AssetFileLink {\n width: number\n height: number\n requestedWidth: number\n requestedHeight: number\n url: string\n title: string\n type: AssetFileLinkType\n}\n\nexport type AssetFileLinks =\n | Record<'image_list' | 'image_table' | 'image_detail' | 'audio', AssetFileLink>\n | Record<string, never>\n\nexport interface AssetFileImage extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n imageAttributes: ImageAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n metadata: Metadata\n _resourceName: 'imageFile'\n}\n\nexport interface AssetFileAudio extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n audioAttributes: AudioAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n _resourceName: 'audioFile'\n}\n\nexport interface AssetFileVideo extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n videoAttributes: VideoAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n imagePreview: AssetFileImagePreviewNullable\n _resourceName: 'videoFile'\n}\n\nexport interface AssetFileDocument extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n documentAttributes: DocumentAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n _resourceName: 'documentFile'\n}\n\nexport interface AssetFileDownloadLink extends AnzuUserAndTimeTrackingAware {\n id: DocId\n link: string\n _system: string\n _resourceName: 'imageFile'\n}\n\nexport type AssetFile = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument\n\nexport type AssetFileNullable = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument | null\n\nexport const assetFileIsImageFile = (value: any): value is AssetFileImage => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'imageFile'\n}\n\nexport const assetFileIsVideoFile = (value: any): value is AssetFileVideo => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'videoFile'\n}\n\nexport const assetFileIsAudioFile = (value: any): value is AssetFileAudio => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'audioFile'\n}\n\nexport const assetFileIsDocumentFile = (value: any): value is AssetFileDocument => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'documentFile'\n}\n\ninterface ImageAttributes {\n ratioWidth: number\n ratioHeight: number\n width: number\n height: number\n rotation: number\n mostDominantColor: string\n animated: boolean\n}\n\ninterface Metadata {\n exifData: [] // todo check\n id: string\n createdAt: string\n modifiedAt: string\n createdBy: number\n modifiedBy: number\n}\n\ninterface AudioAttributes {\n duration: number\n codecName: string\n bitrate: number\n}\n\ninterface DocumentAttributes {\n pageCount: number\n}\n\ninterface VideoAttributes {\n bitrate: number\n codecName: string\n duration: number\n height: number\n ratioHeight: number\n ratioWidth: number\n rotation: number\n width: number\n}\n\nexport interface AssetFileImagePreview {\n imageFile: DocId\n position: number\n}\n\nexport type AssetFileImagePreviewNullable = AssetFileImagePreview | null\n","import type { UploadQueueItem, UploadQueueItemStatus, UploadQueueItemType } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\nimport { DamAssetStatus, type DamAssetType } from '@/types/coreDam/Asset'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\n\nexport function useUploadQueueItemFactory() {\n const createDefault = (\n key: string,\n type: UploadQueueItemType,\n status: UploadQueueItemStatus,\n assetType: DamAssetType,\n chunkSize: number,\n licenceId: IntegerId\n ): UploadQueueItem => {\n return {\n key: key,\n type: type,\n file: null,\n status: status,\n isDuplicate: false,\n duplicateAssetId: null,\n assetType: assetType,\n assetStatus: DamAssetStatus.Default,\n displayTitle: '',\n assetId: null,\n fileId: null,\n externalProviderAssetId: null,\n externalProviderName: null,\n externalProviderMetadata: {},\n keywords: [],\n authors: [],\n authorConflicts: [],\n customData: {},\n latestChunkCancelToken: null,\n chunkSize: chunkSize,\n currentChunkIndex: 0,\n chunkTotalCount: 0,\n licenceId: licenceId,\n imagePreview: undefined,\n progress: {\n remainingTime: null,\n progressPercent: null,\n speed: null,\n },\n canEditMetadata: false,\n error: {\n hasError: false,\n message: '',\n assetFileFailReason: AssetFileFailReason.Default,\n },\n notificationFallbackTimer: undefined,\n notificationFallbackTry: 1,\n slotName: null,\n image: undefined,\n }\n }\n\n return {\n createDefault,\n }\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport const getAssetTypeByMimeType = (\n mimeType: string,\n damConfigExtSystem: DamExtSystemConfig\n): DamAssetType | null => {\n for (const [key, values] of Object.entries(damConfigExtSystem)) {\n if (!Object.values(DamAssetType).includes(key as DamAssetType)) continue\n for (let i = 0; i < values.mimeTypes.length; i++) {\n if (mimeType === values.mimeTypes[i]) return key as DamAssetType\n }\n }\n return null\n}\n","import { ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull } from '@/utils/common'\n\nconst chunkSize = ref<number | undefined>(undefined)\n\nexport function useDamUploadChunkSize(apiTimeout: number = 30) {\n const { damPrvConfig } = useDamConfigState()\n const lastChunkSize = ref(chunkSize.value || damPrvConfig.value.settings.imageChunkConfig.minSize)\n\n const minUploadTimeThreshold = apiTimeout / 5\n const idealUploadTimeThreshold = apiTimeout / 4\n const maxUploadTimeThreshold = apiTimeout / 2\n\n const updateChunkSize = (speed: number | null) => {\n if (isNull(speed)) {\n return false\n }\n\n const expectedChunkUploadSpeed = lastChunkSize.value / speed\n if (expectedChunkUploadSpeed > maxUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(maxUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n if (expectedChunkUploadSpeed < minUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(idealUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n\n return false\n }\n\n const returnFromRange = (value: number) => {\n if (value > damPrvConfig.value.settings.imageChunkConfig.maxSize) {\n return damPrvConfig.value.settings.imageChunkConfig.maxSize\n }\n if (value < damPrvConfig.value.settings.imageChunkConfig.minSize) {\n return damPrvConfig.value.settings.imageChunkConfig.minSize\n }\n\n return value\n }\n\n return {\n lastChunkSize,\n updateChunkSize,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { type UploadQueueItem, UploadQueueItemType } from '@/types/coreDam/UploadQueue'\nimport type { DocId } from '@/types/common'\nimport { HTTP_STATUS_CREATED, HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/image'\nconst CHUNK_UPLOAD_TIMEOUT = 420\n\nexport const fetchImageFile = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetFileImage>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, 'asset')\n\nexport const imageUploadStart = (client: () => AxiosInstance, item: UploadQueueItem) => {\n return new Promise((resolve, reject) => {\n let url = END_POINT + '/licence/' + item.licenceId\n if (item.type === UploadQueueItemType.SlotFile && item.slotName && item.assetId) {\n url = END_POINT + '/asset/' + item.assetId + '/slot-name/' + item.slotName\n }\n client()\n .post(\n url,\n JSON.stringify({\n mimeType: damFileTypeFix(item.file),\n size: item.file?.size,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const imageUploadChunk = (\n client: (timeout?: number) => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: string,\n size: number,\n offset: number,\n onUploadProgressCallback: ((progressEvent: any) => void) | undefined = undefined\n) => {\n return new Promise((resolve, reject) => {\n const formData = new FormData()\n const url = END_POINT + '/' + imageId + '/chunk'\n formData.append('file', buffer)\n formData.append(\n 'chunk',\n JSON.stringify({\n offset: offset,\n size: size,\n })\n )\n\n client(CHUNK_UPLOAD_TIMEOUT)\n .post(url, formData, {\n cancelToken: item.latestChunkCancelToken ? item.latestChunkCancelToken.token : undefined,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress: onUploadProgressCallback,\n })\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const imageUploadFinish = (client: () => AxiosInstance, item: UploadQueueItem, sha: string) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + item.fileId + '/uploaded'\n client()\n .patch(\n url,\n JSON.stringify({\n checksum: sha,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const rotateImage = (client: () => AxiosInstance, imageId: DocId, angle: 90 | 270) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + imageId + '/rotate/' + angle\n client()\n .patch(url)\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport { type DamUploadStartResponse, type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport {\n imageUploadChunk,\n imageUploadFinish,\n imageUploadStart,\n} from '@/components/damImage/uploadQueue/api/damImageApi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\n\nconst NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS = 10\nconst NOTIFICATION_FALLBACK_MAX_TRIES = 3\n\nexport const damUploadStart: (client: () => AxiosInstance, item: UploadQueueItem) => Promise<DamUploadStartResponse> = (\n client: () => AxiosInstance,\n item: UploadQueueItem\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadStart(client, item)\n .then((res) => {\n resolve(res as DamUploadStartResponse)\n return\n })\n .catch((err) => reject(err))\n })\n}\n\nexport const damUploadChunk = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: string,\n size: number,\n offset: number,\n onUploadProgressCallback: any\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadChunk(client, item, imageId, buffer, size, offset, onUploadProgressCallback)\n .then((res) => {\n resolve(res)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const damUploadFinish = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n sha: string,\n uploadStatusFallback: boolean\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadFinish(client, item, sha)\n .then((res) => {\n item.status = UploadQueueItemStatus.Processing\n if (uploadStatusFallback) {\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n }\n resolve(res)\n })\n .catch((err) => reject(err))\n })\n}\n\nfunction calculateFallbackTime(item: UploadQueueItem) {\n return NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS * 1000 * item.notificationFallbackTry * item.notificationFallbackTry\n}\n\nasync function notificationFallbackCallback(client: () => AxiosInstance, item: UploadQueueItem) {\n clearTimeout(item.notificationFallbackTimer)\n if (item.status === UploadQueueItemStatus.Uploaded) return\n if (item.notificationFallbackTry > NOTIFICATION_FALLBACK_MAX_TRIES) return\n if (!item.assetId) return\n const asset = await fetchAsset(client, item.assetId)\n if (asset && asset.mainFile && asset.mainFile.fileAttributes) {\n const uploadQueuesStore = useUploadQueuesStore()\n if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Processed) {\n uploadQueuesStore.queueItemProcessed(asset.id)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Duplicate) {\n uploadQueuesStore.queueItemDuplicate(asset.id)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Failed) {\n uploadQueuesStore.queueItemFailed(asset.id, asset.mainFile.fileAttributes.failReason)\n return\n }\n }\n item.notificationFallbackTry++\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Rusha\"] = factory();\n\telse\n\t\troot[\"Rusha\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar RushaCore = __webpack_require__(5);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex,\n ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = __webpack_require__(6);\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n for (len += 9; len % 64 > 0; len += 1) {}\n return len;\n};\n\nvar padZeroes = function (bin, len) {\n var h8 = new Uint8Array(bin.buffer);\n var om = len % 4,\n align = len - om;\n switch (om) {\n case 0:\n h8[align + 3] = 0;\n case 1:\n h8[align + 2] = 0;\n case 2:\n h8[align + 1] = 0;\n case 3:\n h8[align + 0] = 0;\n }\n for (var i = (len >> 2) + 1; i < bin.length; i++) {\n bin[i] = 0;\n }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n // To support msgLen >= 2 GiB, use a float division when computing the\n // high 32-bits of the big-endian message length in bits.\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n var out = new Int32Array(5);\n var arr = new DataView(out.buffer);\n arr.setInt32(0, io[0], false);\n arr.setInt32(4, io[1], false);\n arr.setInt32(8, io[2], false);\n arr.setInt32(12, io[3], false);\n arr.setInt32(16, io[4], false);\n return out;\n};\n\nvar Rusha = function () {\n function Rusha(chunkSize) {\n _classCallCheck(this, Rusha);\n\n chunkSize = chunkSize || 64 * 1024;\n if (chunkSize % 64 > 0) {\n throw new Error('Chunk size must be a multiple of 128 bit');\n }\n this._offset = 0;\n this._maxChunkLen = chunkSize;\n this._padMaxChunkLen = padlen(chunkSize);\n // The size of the heap is the sum of:\n // 1. The padded input message size\n // 2. The extended space the algorithm needs (320 byte)\n // 3. The 160 bit state the algoritm uses\n this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n this._h32 = new Int32Array(this._heap);\n this._h8 = new Int8Array(this._heap);\n this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n }\n\n Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n this._offset = 0;\n var io = new Int32Array(heap, padMsgLen + 320, 5);\n io[0] = 1732584193;\n io[1] = -271733879;\n io[2] = -1732584194;\n io[3] = 271733878;\n io[4] = -1009589776;\n };\n\n Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n var padChunkLen = padlen(chunkLen);\n var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n padZeroes(view, chunkLen);\n padData(view, chunkLen, msgLen);\n return padChunkLen;\n };\n\n Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n };\n\n Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n var padChunkLen = chunkLen;\n this._write(data, chunkOffset, chunkLen);\n if (finalize) {\n padChunkLen = this._padChunk(chunkLen, msgLen);\n }\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n };\n\n Rusha.prototype.rawDigest = function rawDigest(str) {\n var msgLen = str.byteLength || str.length || str.size || 0;\n this._initState(this._heap, this._padMaxChunkLen);\n var chunkOffset = 0,\n chunkLen = this._maxChunkLen;\n for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n }\n this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n return getRawDigest(this._heap, this._padMaxChunkLen);\n };\n\n Rusha.prototype.digest = function digest(str) {\n return toHex(this.rawDigest(str).buffer);\n };\n\n Rusha.prototype.digestFromString = function digestFromString(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.resetState = function resetState() {\n this._initState(this._heap, this._padMaxChunkLen);\n return this;\n };\n\n Rusha.prototype.append = function append(chunk) {\n var chunkOffset = 0;\n var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n var turnOffset = this._offset % this._maxChunkLen;\n var inputLen = void 0;\n\n this._offset += chunkLen;\n while (chunkOffset < chunkLen) {\n inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n this._write(chunk, chunkOffset, inputLen, turnOffset);\n turnOffset += inputLen;\n chunkOffset += inputLen;\n if (turnOffset === this._maxChunkLen) {\n this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n turnOffset = 0;\n }\n }\n return this;\n };\n\n Rusha.prototype.getState = function getState() {\n var turnOffset = this._offset % this._maxChunkLen;\n var heap = void 0;\n if (!turnOffset) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n } else {\n heap = this._heap.slice(0);\n }\n return {\n offset: this._offset,\n heap: heap\n };\n };\n\n Rusha.prototype.setState = function setState(state) {\n this._offset = state.offset;\n if (state.heap.byteLength === 20) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n io.set(new Int32Array(state.heap));\n } else {\n this._h32.set(new Int32Array(state.heap));\n }\n return this;\n };\n\n Rusha.prototype.rawEnd = function rawEnd() {\n var msgLen = this._offset;\n var chunkLen = msgLen % this._maxChunkLen;\n var padChunkLen = this._padChunk(chunkLen, msgLen);\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n var result = getRawDigest(this._heap, this._padMaxChunkLen);\n this._initState(this._heap, this._padMaxChunkLen);\n return result;\n };\n\n Rusha.prototype.end = function end() {\n return toHex(this.rawEnd().buffer);\n };\n\n return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n var binarray = new Uint8Array(arrayBuffer);\n var res = new Array(arrayBuffer.byteLength);\n for (var _i = 0; _i < res.length; _i++) {\n res[_i] = precomputedHex[binarray[_i]];\n }\n return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n // The asm.js spec says:\n // The heap object's byteLength must be either\n // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n // Also, byteLengths smaller than 2^16 are deprecated.\n var p = 0;\n // If v is smaller than 2^16, the smallest possible solution\n // is 2^16.\n if (v <= 65536) return 65536;\n // If v < 2^24, we round up to 2^n,\n // otherwise we round up to 2^24 * n.\n if (v < 16777216) {\n for (p = 1; p < v; p = p << 1) {}\n } else {\n for (p = 16777216; p < v; p += 16777216) {}\n }\n return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n // Detects whether we run inside a dedicated worker or not.\n //\n // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n // has a bug where it only supports `WorkerGlobalScope`.\n //\n // Therefore, we consider us as running inside a dedicated worker\n // when we are running inside a worker, but not in a shared or service worker.\n //\n // When new types of workers are introduced, we will need to adjust this code.\n return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n var Rusha = __webpack_require__(0);\n\n var hashData = function (hasher, data, cb) {\n try {\n return cb(null, hasher.digest(data));\n } catch (e) {\n return cb(e);\n }\n };\n\n var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n var reader = new self.FileReader();\n reader.onloadend = function onloadend() {\n if (reader.error) {\n return cb(reader.error);\n }\n var buffer = reader.result;\n readTotal += reader.result.byteLength;\n try {\n hasher.append(buffer);\n } catch (e) {\n cb(e);\n return;\n }\n if (readTotal < file.size) {\n hashFile(hasher, readTotal, blockSize, file, cb);\n } else {\n cb(null, hasher.end());\n }\n };\n reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n };\n\n var workerBehaviourEnabled = true;\n\n self.onmessage = function (event) {\n if (!workerBehaviourEnabled) {\n return;\n }\n\n var data = event.data.data,\n file = event.data.file,\n id = event.data.id;\n if (typeof id === 'undefined') return;\n if (!file && !data) return;\n var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n var hasher = new Rusha(blockSize);\n hasher.resetState();\n var done = function (err, hash) {\n if (!err) {\n self.postMessage({ id: id, hash: hash });\n } else {\n self.postMessage({ id: id, error: err.name });\n }\n };\n if (data) hashData(hasher, data, done);\n if (file) hashFile(hasher, 0, blockSize, file, done);\n };\n\n return function () {\n workerBehaviourEnabled = false;\n };\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, browser */\n\nvar work = __webpack_require__(4);\nvar Rusha = __webpack_require__(0);\nvar createHash = __webpack_require__(7);\nvar runWorker = __webpack_require__(2);\n\nvar _require = __webpack_require__(1),\n isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n var worker = work(/*require.resolve*/(2));\n var terminate = worker.terminate;\n worker.terminate = function () {\n URL.revokeObjectURL(worker.objectURL);\n terminate.call(worker);\n };\n return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction webpackBootstrapFunc (modules) {\n/******/ // The module cache\n/******/ var installedModules = {};\n\n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n\n/******/ // Check if module is in cache\n/******/ if(installedModules[moduleId])\n/******/ return installedModules[moduleId].exports;\n\n/******/ // Create a new module (and put it into the cache)\n/******/ var module = installedModules[moduleId] = {\n/******/ i: moduleId,\n/******/ l: false,\n/******/ exports: {}\n/******/ };\n\n/******/ // Execute the module function\n/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ // Flag the module as loaded\n/******/ module.l = true;\n\n/******/ // Return the exports of the module\n/******/ return module.exports;\n/******/ }\n\n/******/ // expose the modules object (__webpack_modules__)\n/******/ __webpack_require__.m = modules;\n\n/******/ // expose the module cache\n/******/ __webpack_require__.c = installedModules;\n\n/******/ // identity function for calling harmony imports with the correct context\n/******/ __webpack_require__.i = function(value) { return value; };\n\n/******/ // define getter function for harmony exports\n/******/ __webpack_require__.d = function(exports, name, getter) {\n/******/ if(!__webpack_require__.o(exports, name)) {\n/******/ Object.defineProperty(exports, name, {\n/******/ configurable: false,\n/******/ enumerable: true,\n/******/ get: getter\n/******/ });\n/******/ }\n/******/ };\n\n/******/ // define __esModule on exports\n/******/ __webpack_require__.r = function(exports) {\n/******/ Object.defineProperty(exports, '__esModule', { value: true });\n/******/ };\n\n/******/ // getDefaultExport function for compatibility with non-harmony modules\n/******/ __webpack_require__.n = function(module) {\n/******/ var getter = module && module.__esModule ?\n/******/ function getDefault() { return module['default']; } :\n/******/ function getModuleExports() { return module; };\n/******/ __webpack_require__.d(getter, 'a', getter);\n/******/ return getter;\n/******/ };\n\n/******/ // Object.prototype.hasOwnProperty.call\n/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/ // __webpack_public_path__\n/******/ __webpack_require__.p = \"/\";\n\n/******/ // on error function for async loading\n/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\nvar moduleNameReqExp = '[\\\\.|\\\\-|\\\\+|\\\\w|\\/|@]+'\nvar dependencyRegExp = '\\\\((\\/\\\\*.*?\\\\*\\/)?\\s?.*?(' + moduleNameReqExp + ').*?\\\\)' // additional chars when output.pathinfo is true\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction getModuleDependencies (sources, module, queueName) {\n var retval = {}\n retval[queueName] = []\n\n var fnString = module.toString()\n var wrapperSignature = fnString.match(/^function\\s?\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n if (!wrapperSignature) return retval\n var webpackRequireName = wrapperSignature[1]\n\n // main bundle deps\n var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g')\n var match\n while ((match = re.exec(fnString))) {\n if (match[3] === 'dll-reference') continue\n retval[queueName].push(match[3])\n }\n\n // dll deps\n re = new RegExp('\\\\(' + quoteRegExp(webpackRequireName) + '\\\\(\"(dll-reference\\\\s(' + moduleNameReqExp + '))\"\\\\)\\\\)' + dependencyRegExp, 'g')\n while ((match = re.exec(fnString))) {\n if (!sources[match[2]]) {\n retval[queueName].push(match[1])\n sources[match[2]] = __webpack_require__(match[1]).m\n }\n retval[match[2]] = retval[match[2]] || []\n retval[match[2]].push(match[4])\n }\n\n return retval\n}\n\nfunction hasValuesInQueues (queues) {\n var keys = Object.keys(queues)\n return keys.reduce(function (hasValues, key) {\n return hasValues || queues[key].length > 0\n }, false)\n}\n\nfunction getRequiredModules (sources, moduleId) {\n var modulesQueue = {\n main: [moduleId]\n }\n var requiredModules = {\n main: []\n }\n var seenModules = {\n main: {}\n }\n\n while (hasValuesInQueues(modulesQueue)) {\n var queues = Object.keys(modulesQueue)\n for (var i = 0; i < queues.length; i++) {\n var queueName = queues[i]\n var queue = modulesQueue[queueName]\n var moduleToCheck = queue.pop()\n seenModules[queueName] = seenModules[queueName] || {}\n if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue\n seenModules[queueName][moduleToCheck] = true\n requiredModules[queueName] = requiredModules[queueName] || []\n requiredModules[queueName].push(moduleToCheck)\n var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName)\n var newModulesKeys = Object.keys(newModules)\n for (var j = 0; j < newModulesKeys.length; j++) {\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]])\n }\n }\n }\n\n return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n options = options || {}\n var sources = {\n main: __webpack_require__.m\n }\n\n var requiredModules = options.all ? { main: Object.keys(sources) } : getRequiredModules(sources, moduleId)\n\n var src = ''\n\n Object.keys(requiredModules).filter(function (m) { return m !== 'main' }).forEach(function (module) {\n var entryModule = 0\n while (requiredModules[module][entryModule]) {\n entryModule++\n }\n requiredModules[module].push(entryModule)\n sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })'\n src = src + 'var ' + module + ' = (' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(entryModule)) + ')({' + requiredModules[module].map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[module][id].toString() }).join(',') + '});\\n'\n })\n\n src = src + '(' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.main.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources.main[id].toString() }).join(',') + '})(self);'\n\n var blob = new window.Blob([src], { type: 'text/javascript' })\n if (options.bare) { return blob }\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n var workerUrl = URL.createObjectURL(blob)\n var worker = new window.Worker(workerUrl)\n worker.objectURL = workerUrl\n\n return worker\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$840, foreign$841, heap$842) {\n 'use asm';\n var H$843 = new stdlib$840.Int32Array(heap$842);\n function hash$844(k$845, x$846) {\n // k in bytes\n k$845 = k$845 | 0;\n x$846 = x$846 | 0;\n var i$847 = 0, j$848 = 0, y0$849 = 0, z0$850 = 0, y1$851 = 0, z1$852 = 0, y2$853 = 0, z2$854 = 0, y3$855 = 0, z3$856 = 0, y4$857 = 0, z4$858 = 0, t0$859 = 0, t1$860 = 0;\n y0$849 = H$843[x$846 + 320 >> 2] | 0;\n y1$851 = H$843[x$846 + 324 >> 2] | 0;\n y2$853 = H$843[x$846 + 328 >> 2] | 0;\n y3$855 = H$843[x$846 + 332 >> 2] | 0;\n y4$857 = H$843[x$846 + 336 >> 2] | 0;\n for (i$847 = 0; (i$847 | 0) < (k$845 | 0); i$847 = i$847 + 64 | 0) {\n z0$850 = y0$849;\n z1$852 = y1$851;\n z2$854 = y2$853;\n z3$856 = y3$855;\n z4$858 = y4$857;\n for (j$848 = 0; (j$848 | 0) < 64; j$848 = j$848 + 4 | 0) {\n t1$860 = H$843[i$847 + j$848 >> 2] | 0;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[k$845 + j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 64 | 0; (j$848 | 0) < (k$845 + 80 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 80 | 0; (j$848 | 0) < (k$845 + 160 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1859775393 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 160 | 0; (j$848 | 0) < (k$845 + 240 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | y1$851 & y3$855 | y2$853 & y3$855) | 0) + ((t1$860 + y4$857 | 0) - 1894007588 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 240 | 0; (j$848 | 0) < (k$845 + 320 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) - 899497514 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n y0$849 = y0$849 + z0$850 | 0;\n y1$851 = y1$851 + z1$852 | 0;\n y2$853 = y2$853 + z2$854 | 0;\n y3$855 = y3$855 + z3$856 | 0;\n y4$857 = y4$857 + z4$858 | 0;\n }\n H$843[x$846 + 320 >> 2] = y0$849;\n H$843[x$846 + 324 >> 2] = y1$851;\n H$843[x$846 + 328 >> 2] = y2$853;\n H$843[x$846 + 332 >> 2] = y3$855;\n H$843[x$846 + 336 >> 2] = y4$857;\n }\n return { hash: hash$844 };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nvar _this = this;\n\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = str.charCodeAt(start + 3);\n case 1:\n H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n case 2:\n H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n case 3:\n H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n case 2:\n H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n case 1:\n H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = buf[start + 3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[start];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[start + j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[start + j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[start + j];\n }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n switch (om) {\n case 0:\n H8[off] = buf[3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[0];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[j];\n }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n if (typeof data === 'string') {\n return convStr(data, H8, H32, start, len, off);\n }\n if (data instanceof Array) {\n return convBuf(data, H8, H32, start, len, off);\n }\n // Safely doing a Buffer check using \"this\" to avoid Buffer polyfill to be included in the dist\n if (_this && _this.Buffer && _this.Buffer.isBuffer(data)) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (data instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n }\n if (data.buffer instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n }\n if (data instanceof Blob) {\n return convBlob(data, H8, H32, start, len, off);\n }\n throw new Error('Unsupported data type.');\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar Rusha = __webpack_require__(0);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex;\n\nvar Hash = function () {\n function Hash() {\n _classCallCheck(this, Hash);\n\n this._rusha = new Rusha();\n this._rusha.resetState();\n }\n\n Hash.prototype.update = function update(data) {\n this._rusha.append(data);\n return this;\n };\n\n Hash.prototype.digest = function digest(encoding) {\n var digest = this._rusha.rawEnd().buffer;\n if (!encoding) {\n return digest;\n }\n if (encoding === 'hex') {\n return toHex(digest);\n }\n throw new Error('unsupported digest encoding');\n };\n\n _createClass(Hash, [{\n key: 'state',\n get: function () {\n return this._rusha.getState();\n },\n set: function (state) {\n this._rusha.setState(state);\n }\n }]);\n\n return Hash;\n}();\n\nmodule.exports = function () {\n return new Hash();\n};\n\n/***/ })\n/******/ ]);\n});","import { ref } from 'vue'\nimport type { CancelTokenSource } from 'axios'\nimport axios from 'axios'\nimport { i18n } from '@/plugins/i18n'\nimport {\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n} from '@/model/error/AnzuApiValidationError'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport { NEW_LINE_MARK } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\nimport { useDamUploadChunkSize } from '@/components/damImage/uploadQueue/composables/damUploadChunkSize'\nimport { damUploadChunk, damUploadFinish, damUploadStart } from '@/components/damImage/uploadQueue/api/uploadApi'\nimport {\n useCommonAdminCoreDamOptions,\n useCommonAdminCoreDamOptionsGlobal,\n} from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport rusha from 'rusha'\n\n// const CHUNK_MAX_RETRY = 6\nconst CHUNK_MAX_RETRY = 4\nconst SPEED_CHECK_INTERVAL = 1000\nconst CHUNK_RETRY_INTERVAL = 1000\nconst CHUNK_RETRY_MULTIPLY = 3\n\nconst failUpload = async (queueItem: UploadQueueItem, error: unknown = null) => {\n throw error\n}\n\nconst finishUpload = async (queueItem: UploadQueueItem, sha: string) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { uploadStatusFallback } = useCommonAdminCoreDamOptionsGlobal()\n return await damUploadFinish(damClient, queueItem, sha, uploadStatusFallback)\n}\n\nconst handleValidationErrorMessage = (error: Error | any) => {\n const { t } = i18n.global || i18n\n if (!error || !error.response || !error.response.data) {\n // @ts-ignore\n return t('common.damImage.uploadErrors.unknownError')\n }\n const data = error.response.data as AnzuApiValidationResponseData\n const errorMessages: string[] = []\n for (const [key, values] of Object.entries(data.fields)) {\n switch (key) {\n case 'size':\n errorMessages.push(t('common.damImage.uploadErrors.size'))\n break\n case 'offset':\n errorMessages.push(t('common.damImage.uploadErrors.offset'))\n break\n case 'mimeType':\n errorMessages.push(t('common.damImage.uploadErrors.mimeType'))\n break\n default:\n // @ts-ignore\n errorMessages.push(t('common.damImage.uploadErrors.systemError') + ': ' + key + ' - ' + values.join(','))\n }\n }\n return errorMessages.length > 0 ? errorMessages.join(NEW_LINE_MARK) : t('common.damImage.uploadErrors.unknownError')\n}\n\nconst readFile = async (offset: number, size: number, file: File): Promise<{ data: string; offset: number }> => {\n return new Promise((resolve, reject) => {\n const partial = file.slice(offset, offset + size)\n const reader = new FileReader()\n reader.onload = function (e) {\n if (e.target?.readyState === FileReader.DONE) {\n resolve({ data: e.target.result as string, offset: offset })\n }\n }\n reader.onerror = function (e) {\n reject(e)\n }\n reader.readAsArrayBuffer(partial)\n })\n}\n\nconst sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function useUpload(queueItem: UploadQueueItem, uploadCallback: any = undefined) {\n const { damClient } = useCommonAdminCoreDamOptions()\n const fileSize = ref(0)\n\n const progress = ref(0)\n\n let speedStack: any[] = []\n let lastTimestamp = 0\n let endTimestamp = 0\n let lastLoaded = 0\n const sha = rusha.createHash()\n const { updateChunkSize, lastChunkSize } = useDamUploadChunkSize()\n\n const getCurrentTimestamp = () => {\n return Date.now() / 1000\n }\n\n // @ts-ignore\n function progressCallback(progressEvent) {\n const currentStamp = getCurrentTimestamp()\n if (lastTimestamp === 0) {\n lastTimestamp = currentStamp\n\n return\n }\n\n const dataSent = lastLoaded > 0 ? progressEvent.loaded - lastLoaded : progressEvent.loaded\n lastLoaded = progressEvent.total === progressEvent.loaded ? 0 : progressEvent.loaded\n speedStack.push(dataSent / (currentStamp - lastTimestamp))\n\n lastTimestamp = currentStamp\n }\n\n const uploadChunk = async (chunkFile: File, offset: number) => {\n return new Promise((resolve, reject) => {\n if (!queueItem.fileId) {\n reject()\n return\n }\n damUploadChunk(\n damClient,\n queueItem,\n queueItem.fileId,\n chunkFile as unknown as string, // todo check\n chunkFile.size,\n offset,\n progressCallback\n )\n .then((result) => {\n resolve(result)\n })\n .catch((exception) => {\n reject(exception)\n })\n })\n }\n\n const processAndUploadChunk = async (offset: number): Promise<File> => {\n updateChunkSize(queueItem.progress.speed)\n let arrayBuffer: { data: string; offset: number } = await readFile(offset, lastChunkSize.value, queueItem.file!)\n let chunkFile = new File([arrayBuffer.data], queueItem.file!.name)\n\n queueItem.currentChunkIndex = offset\n const cancelToken = axios.CancelToken\n queueItem.latestChunkCancelToken = cancelToken.source()\n\n let sleepTime = CHUNK_RETRY_INTERVAL\n let attempt = 0\n do {\n attempt++\n try {\n await uploadChunk(chunkFile, offset)\n sha.update(arrayBuffer.data)\n\n return chunkFile\n } catch (error) {\n // in error recompute\n if (axiosErrorResponseHasValidationData(error as Error)) {\n attempt = CHUNK_MAX_RETRY\n queueItem.error.message = handleValidationErrorMessage(error)\n return Promise.reject(error)\n }\n\n if (updateChunkSize(queueItem.progress.speed)) {\n arrayBuffer = await readFile(offset, lastChunkSize.value, queueItem.file!)\n chunkFile = new File([arrayBuffer.data], queueItem.file!.name)\n }\n\n await sleep(sleepTime)\n attempt === CHUNK_MAX_RETRY - 1 ? (sleepTime = 1) : (sleepTime *= CHUNK_RETRY_MULTIPLY)\n }\n } while (attempt < CHUNK_MAX_RETRY)\n return Promise.reject('Unable to upload chunk, max tries exceeded')\n }\n\n function speedCheck() {\n function speedCheckRun() {\n speedStack = speedStack.slice(-15)\n if (speedStack.length > 0) {\n const avgSpeed = Math.ceil(speedStack.reduce((sum, current) => sum + current) / speedStack.length)\n const remainingBytes = Math.ceil(fileSize.value * ((100 - progress.value) / 100))\n\n uploadCallback(progress.value, avgSpeed, Math.ceil(remainingBytes / avgSpeed))\n }\n\n if (endTimestamp === 0) {\n setTimeout(function () {\n speedCheckRun()\n }, SPEED_CHECK_INTERVAL)\n }\n }\n\n speedCheckRun()\n }\n\n const uploadInit = async () => {\n return new Promise((resolve, reject) => {\n if (!queueItem.file || queueItem.file.size < 1) {\n failUpload(queueItem)\n return\n }\n fileSize.value = queueItem.file.size\n queueItem.status = UploadQueueItemStatus.Uploading\n damUploadStart(damClient, queueItem)\n .then((res) => {\n queueItem.assetId = res.asset\n queueItem.fileId = res.id\n resolve(queueItem)\n })\n .catch((err) => {\n reject(err)\n })\n })\n }\n\n const upload = async () => {\n if (uploadCallback) {\n speedCheck()\n }\n\n const filesize = queueItem.file?.size\n if (isUndefined(filesize)) return Promise.reject()\n\n let i = 0\n while (i < filesize) {\n const uploadedChunk = await processAndUploadChunk(i)\n i += uploadedChunk.size\n progress.value = (i / filesize) * 100\n }\n\n endTimestamp = Date.now() / 1000\n return await finishUpload(queueItem, sha.digest('hex'))\n }\n\n return {\n uploadInit,\n upload,\n }\n}\n\nexport const uploadStop = (cancelTokenSource: CancelTokenSource) => {\n // todo stop speed check\n cancelTokenSource.cancel('axios request cancelled')\n}\n","import { type EventBusKey, useEventBus } from '@vueuse/core'\nimport type { DocId } from '@/types/common'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { DamDistributionStatus } from '@/types/coreDam/DamConfig'\n\nexport const damNotificationsEventBusKey: EventBusKey<DamNotification> = Symbol('anzu:damNotificationsEventBusKey')\n\nexport function useDamNotificationsEventBus() {\n return useEventBus<DamNotification>(damNotificationsEventBusKey)\n}\n\nexport const DamNotificationName = {\n AssetFileProcessed: 'asset_file_processed',\n AssetFileFailed: 'asset_file_failed',\n AssetFileDuplicate: 'asset_file_duplicate',\n AssetFileUploaded: 'asset_file_uploaded',\n AssetFileDeleted: 'asset_file_deleted',\n AssetMetadataProcessed: 'asset_metadata_processed',\n AssetDeleted: 'asset_deleted',\n DistributionDistributing: 'distribution_distributing',\n DistributionRemoteProcessing: 'distribution_remote_processing',\n DistributionDistributed: 'distribution_distributed',\n DistributionFailed: 'distribution_failed',\n DistributionAuthorized: 'distribution_authorized',\n UserUpdated: 'user_updated',\n} as const\n\nexport type DamNotificationNameType = (typeof DamNotificationName)[keyof typeof DamNotificationName]\n\ntype DamNotificationEvent<T extends DamNotificationNameType, P> = {\n name: T\n data: P\n}\n\ninterface DamNotificationAssetFileData {\n id: DocId\n asset: DocId\n}\n\ninterface DamNotificationAssetFileStatusData {\n id: DocId\n asset: DocId\n status: AssetFileProcessStatus\n failReason: AssetFileFailReason\n assetType: DamAssetType\n originAssetFile: DocId\n}\n\ninterface DamNotificationDistributionData {\n id: DocId\n asset: DocId\n assetFile: DocId\n status: DamDistributionStatus\n}\n\ninterface DamNotificationAssetData {\n asset: DocId\n}\n\ntype DamNotificationAssetFileProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileFailed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileFailed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDuplicate = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDuplicate,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileUploaded = DamNotificationEvent<\n typeof DamNotificationName.AssetFileUploaded,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDeleted,\n DamNotificationAssetFileData\n>\n\ntype DamNotificationAssetMetadataProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetMetadataProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetDeleted,\n DamNotificationAssetData\n>\n\ntype DamNotificationDistributionDistributing = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionRemoteProcessing = DamNotificationEvent<\n typeof DamNotificationName.DistributionRemoteProcessing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionDistributed = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionFailed = DamNotificationEvent<\n typeof DamNotificationName.DistributionFailed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionAuthorized = DamNotificationEvent<\n typeof DamNotificationName.DistributionAuthorized,\n {\n distributionService: DamDistributionServiceName\n success: boolean\n }\n>\n\ntype DamNotificationUserUpdated = DamNotificationEvent<typeof DamNotificationName.UserUpdated, undefined>\n\nexport type DamNotification =\n | DamNotificationAssetFileProcessed\n | DamNotificationAssetFileFailed\n | DamNotificationAssetFileDuplicate\n | DamNotificationAssetFileUploaded\n | DamNotificationAssetFileDeleted\n | DamNotificationAssetMetadataProcessed\n | DamNotificationAssetDeleted\n | DamNotificationDistributionDistributing\n | DamNotificationDistributionRemoteProcessing\n | DamNotificationDistributionDistributed\n | DamNotificationDistributionFailed\n | DamNotificationDistributionAuthorized\n | DamNotificationUserUpdated\n\n","import { useWebSocket } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport {\n type DamNotification,\n useDamNotificationsEventBus,\n} from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { useCommonAdminCoreDamOptionsGlobal } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nconst { t } = i18n.global || i18n\n\nconst damNotificationsInitialized = ref(false)\n\nexport function initDamNotifications() {\n const { notification } = useCommonAdminCoreDamOptionsGlobal()\n\n const enabled = notification.enabled && notification.webSocketUrl.length > 0\n\n const { open, ws } = useWebSocket(notification.webSocketUrl, {\n immediate: false,\n autoReconnect: {\n retries: 10,\n delay: 5000,\n },\n heartbeat: {\n interval: 4000,\n },\n })\n\n const openConnection = () => {\n console.log('openConnection', enabled)\n damNotificationsInitialized.value = true\n if (!enabled) return\n const eventBus = useDamNotificationsEventBus()\n open()\n if (!ws.value) return\n ws.value.onopen = function (this: WebSocket, event: Event) {\n console.log('ws dam notification-server open', event)\n }\n ws.value.onerror = function (this: WebSocket, event: Event) {\n const { showWarning } = useAlerts()\n setTimeout(() => {\n showWarning(t('common.damImage.notificationsNotConnected'), -1)\n }, 3000)\n console.log('ws dam notification-server error', event)\n }\n ws.value.onmessage = function (this: WebSocket, event: MessageEvent) {\n const message = JSON.parse(event.data as string)\n const data = message.data.length ? JSON.parse(message.data) : undefined\n console.log(message.eventName, data)\n eventBus.emit({ name: message.eventName, data })\n }\n }\n\n return {\n openConnection,\n damNotificationsInitialized,\n }\n}\n\nexport function useDamNotifications() {\n const eventBus = useDamNotificationsEventBus()\n\n const addDamNotificationListener = (callback: (event: DamNotification) => void) => {\n return eventBus.on(callback)\n }\n\n return {\n addDamNotificationListener,\n }\n}\n","import type { AssetMetadataSuggestions } from '@/types/coreDam/Asset'\nimport { isArray, isEmptyObject } from '@/utils/common'\nimport type { DocId } from '@/types/common'\n\nexport function useAssetSuggestions() {\n const updateNewNames = (suggestions: AssetMetadataSuggestions, newNames: Set<string>) => {\n for (const [key, value] of Object.entries(suggestions)) {\n if (isEmptyObject(value)) {\n newNames.add(key)\n }\n }\n }\n\n const getAuthorConflicts = (suggestions: AssetMetadataSuggestions) => {\n const conflicts: Array<DocId> = []\n for (const value of Object.values(suggestions)) {\n if (isArray(value) && value.length > 1) {\n value.forEach((id) => {\n conflicts.push(id)\n })\n }\n }\n return conflicts\n }\n\n return {\n updateNewNames,\n getAuthorConflicts,\n }\n}\n\n","import { type Ref, ref } from 'vue'\nimport { useDebounceFn } from '@vueuse/core'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isArray, isNull, isUndefined } from '@/utils/common'\n\nexport type CachedItem<T extends object> = T & { _loaded: boolean }\n\nexport type AddToCachedArgs<T extends DocId | IntegerId> =\n | Array<T | null | undefined>\n | Array<Array<T | null | undefined> | T | null | undefined>\n\n/**\n * @template I Identifier type\n * @template T Source type\n * @template M Minimal type\n */\nexport function defineCached<\n I extends DocId | IntegerId,\n T extends Record<DocId | IntegerId, any>,\n M extends Record<DocId | IntegerId, any>,\n>(\n mapFullToMinimal: (source: T) => M,\n mapIdToMinimal: (id: I) => M,\n fetchCallback: (ids: I[]) => Promise<T[]>,\n idProp = 'id'\n) {\n const cache: Ref<Map<I, CachedItem<M>>> = ref(new Map()) // todo check\n const toFetch = ref(new Set()) as Ref<Set<I>> // todo check\n\n const add = (...args: AddToCachedArgs<I>) => {\n const toAdd = <Set<I>>new Set()\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]\n if (isNull(arg) || isUndefined(arg)) continue\n if (isArray(arg)) {\n for (let j = 0; j < arg.length; j++) {\n const item = arg[j]\n if (isNull(item) || isUndefined(item)) continue\n if (!cache.value.has(item)) toAdd.add(item)\n }\n continue\n }\n if (!cache.value.has(arg)) toAdd.add(arg)\n }\n toAdd.forEach((id) => {\n cache.value.set(id, { ...mapIdToMinimal(id), ...{ _loaded: false } })\n toFetch.value.add(id)\n })\n }\n\n const addManual = (data: T) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...mapFullToMinimal(data), ...{ _loaded: true } })\n }\n }\n\n const addManualMinimal = (data: M) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...data, ...{ _loaded: true } })\n }\n }\n\n const updateMap = (data: T[]) => {\n for (let i = 0; i < data.length; i += 1) {\n cache.value.set(data[i][idProp] as I, { ...mapFullToMinimal(data[i]), ...{ _loaded: true } })\n }\n }\n\n const updateToFetch = (ids: Array<I>) => {\n for (let i = 0; i < ids.length; i += 1) {\n toFetch.value.delete(ids[i])\n }\n }\n\n async function apiFetch() {\n if (toFetch.value.size > 0) {\n const ids = Array.from(toFetch.value)\n const res = await fetchCallback(ids)\n updateToFetch(ids)\n updateMap(res)\n return res\n }\n return []\n }\n\n const debouncedFetch = useDebounceFn(\n async () => {\n return await apiFetch()\n },\n 1500,\n { maxWait: 5000 }\n )\n\n /**\n * Debounced fetch for best performance.\n * For general usage.\n */\n const fetch = () => {\n return debouncedFetch()\n }\n\n /**\n * Immediate fetch with no debounce and with result in promise.\n * Use for special cases.\n */\n const immediateFetch = () => {\n return apiFetch()\n }\n\n const get = (id: I | null | undefined) => {\n if (!id) return undefined\n return cache.value.get(id)\n }\n\n const has = (id: I | null | undefined): boolean => {\n if (!id) return false\n return cache.value.has(id)\n }\n\n const isLoaded = (id: I | null | undefined): boolean => {\n if (!id) return false\n const item = cache.value.get(id)\n if (!item) return false\n return item._loaded\n }\n\n return {\n cache,\n toFetch,\n fetch,\n immediateFetch,\n add,\n addManual,\n addManualMinimal,\n has,\n get,\n isLoaded,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nconst generateByIdsApiQuery = (ids: number[] | string[], isSearchApi: boolean): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, queryAddFilter, queryAdd } = useApiQueryBuilder()\n const limit = ids.length\n querySetLimit(limit)\n querySetOffset(1, limit)\n querySetOrder('id', false)\n if (isSearchApi) queryAdd('id', ids.join(','))\n else queryAddFilter('in', 'id', ids.join(','))\n\n return queryBuild()\n}\n\nexport const apiFetchByIds = <T, R = T>(\n client: () => AxiosInstance,\n ids: string[] | number[],\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {},\n isSearchApi = false\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .get(replaceUrlParameters(urlTemplate, urlParams) + generateByIdsApiQuery(ids, isSearchApi), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data?.data) {\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiCreateOne = <T, R = T>(\n client: () => AxiosInstance,\n object: T | Record<string, never> = {},\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .post(replaceUrlParameters(urlTemplate, urlParams), JSON.stringify(object), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/keyword'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'keyword'\n\nexport const fetchKeywordListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamKeyword[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n { extSystemId },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const fetchKeywordList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<DamKeyword[]>(client, END_POINT_LIST, { extSystemId }, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n\nexport const createKeyword = (client: () => AxiosInstance, data: DamKeyword) =>\n apiCreateOne<DamKeyword>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\n// export const updateKeyword = (id: string, data: DamKeyword) =>\n// apiUpdateOne<DamKeyword>(damClient, data, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n//\n// export const fetchKeyword = (id: string) =>\n// apiFetchOne<DamKeyword>(damClient, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { fetchKeywordListByIds } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { isNull } from '@/utils/common'\n\nconst mapFullToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n})\n\nconst mapIdToMinimal = (id: DocId): DamKeywordMinimal => {\n return { id: id, name: '' }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamKeyword,\n DamKeywordMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { initialized } = useDamConfigState()\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchKeywordListByIds(damClient, initialized.damConfigExtSystem, ids)\n})\n\nexport const useDamCachedKeywords = () => {\n return {\n addManualToCachedKeywords: addManual,\n addManualMinimalToCachedKeywords: addManualMinimal,\n addToCachedKeywords: add,\n fetchCachedKeywords: fetch,\n toFetchCachedKeywords: toFetch,\n cachedKeywords: cache,\n hasCachedKeyword: has,\n getCachedKeyword: get,\n isLoadedCachedKeyword: isLoaded,\n }\n}\n\nexport const useCachedKeywordsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/author'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'author'\n\nexport const fetchAuthorListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamAuthor[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n {\n extSystemId,\n },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const fetchAuthorList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) =>\n apiFetchList<DamAuthor[]>(\n client,\n END_POINT_LIST,\n {\n extSystemId,\n },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\nexport const createAuthor = (client: () => AxiosInstance, data: DamAuthor) =>\n apiCreateOne<DamAuthor>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n//\n// export const updateAuthor = (id: string, data: DamAuthor) =>\n// apiUpdateOne<DamAuthor>(damClient, data, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n//\n// export const fetchAuthor = (id: string) =>\n// apiFetchOne<DamAuthor>(damClient, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { isNull } from '@/utils/common'\n\nconst mapFullToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n})\n\nconst mapIdToMinimal = (id: DocId): DamAuthorMinimal => {\n return { id: id, name: '', identifier: '' }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamAuthor,\n DamAuthorMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { initialized } = useDamConfigState()\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchAuthorListByIds(damClient, initialized.damConfigExtSystem, ids)\n})\n\nexport const useDamCachedAuthors = () => {\n return {\n addManualToCachedAuthors: addManual,\n addManualMinimalToCachedAuthors: addManualMinimal,\n addToCachedAuthors: add,\n fetchCachedAuthors: fetch,\n toFetchCachedAuthors: toFetch,\n cachedAuthors: cache,\n hasCachedAuthor: has,\n getCachedAuthor: get,\n isLoadedCachedAuthor: isLoaded,\n }\n}\n\nexport const useDamCachedAuthorsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport {\n type UploadQueue,\n type UploadQueueItem,\n UploadQueueItemStatus,\n UploadQueueItemType,\n type UploadQueueKey,\n} from '@/types/coreDam/UploadQueue'\nimport { useUploadQueueItemFactory } from '@/components/damImage/uploadQueue/composables/UploadQueueItemFactory'\nimport { getAssetTypeByMimeType } from '@/components/damImage/uploadQueue/composables/mimeTypeHelper'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { uploadStop, useUpload } from '@/components/damImage/uploadQueue/composables/uploadService'\nimport { type AssetDetailItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport { DamNotificationName } from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { useDamNotifications } from '@/components/damImage/uploadQueue/composables/damNotifications'\nimport { fetchAsset, fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useAssetSuggestions } from '@/components/damImage/uploadQueue/composables/assetSuggestions'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { isNull } from '@/utils/common'\n\nconst QUEUE_MAX_PARALLEL_UPLOADS = 2\nconst QUEUE_CHUNK_SIZE = 10485760\n\nexport const useUploadQueuesStore = defineStore('commonUploadQueuesStore', () => {\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\n const queues = ref<Map<UploadQueueKey, UploadQueue>>(new Map())\n\n const { createDefault } = useUploadQueueItemFactory()\n\n const { damClient } = useCommonAdminCoreDamOptions()\n const { addDamNotificationListener } = useDamNotifications()\n addDamNotificationListener((event) => {\n switch (event.name) {\n case DamNotificationName.AssetFileProcessed:\n queueItemProcessed(event.data.asset)\n break\n case DamNotificationName.AssetFileFailed:\n queueItemFailed(event.data.asset, event.data.failReason)\n break\n case DamNotificationName.AssetFileDuplicate:\n queueItemDuplicate(event.data.asset, event.data.originAssetFile, event.data.assetType)\n break\n case DamNotificationName.AssetMetadataProcessed:\n queueItemMetadataProcessed(event.data.asset)\n break\n }\n })\n\n function getQueue(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)\n }\n return null\n }\n\n function getQueueItems(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)?.items || []\n }\n return []\n }\n\n async function addByFiles(queueKey: UploadQueueKey, assetLicence: IntegerId, files: File[]) {\n const { damConfigExtSystem } = useDamConfigState()\n for await (const file of files) {\n const type = getAssetTypeByMimeType(damFileTypeFix(file), damConfigExtSystem.value)\n if (!type || type !== DamAssetType.Image) continue // only image now\n const queueItem = createDefault(\n 'file_' + file.name,\n UploadQueueItemType.File,\n UploadQueueItemStatus.Waiting,\n type,\n QUEUE_CHUNK_SIZE,\n assetLicence\n )\n queueItem.file = file\n queueItem.displayTitle = file.name\n createQueue(queueKey)\n addQueueItem(queueKey, queueItem)\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function addQueueItem(queueKey: UploadQueueKey, item: UploadQueueItem) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.items.push(item)\n }\n\n function createQueue(queueKey: UploadQueueKey) {\n if (!queues.value.has(queueKey)) {\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: 0,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n }\n\n function recalculateQueueCounts(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.totalCount = queue.items.length\n queue.processedCount =\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploaded).length +\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Failed).length\n }\n\n function getQueueItemsByStatus(queueKey: UploadQueueKey, status: UploadQueueItemStatus) {\n const queue = queues.value.get(queueKey)\n if (!queue) return []\n return queue.items.filter((item) => item.status === status)\n }\n\n function processUpload(queueKey: UploadQueueKey) {\n const waitingItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Waiting)\n if (waitingItems.length === 0) {\n // upload finished\n return\n }\n const uploadingCount = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading).length\n if (uploadingCount === QUEUE_MAX_PARALLEL_UPLOADS) {\n // wait for empty upload slot\n return\n }\n for (let i = 0; i < QUEUE_MAX_PARALLEL_UPLOADS; i++) {\n if (waitingItems[i]) queueItemUploadStart(waitingItems[i], queueKey)\n }\n }\n\n async function queueItemUploadStart(item: UploadQueueItem, queueKey: UploadQueueKey) {\n const { upload, uploadInit } = useUpload(item, (progress: number, speed: number, estimate: number) => {\n setUploadSpeed(item, progress, speed, estimate)\n })\n try {\n await uploadInit()\n await upload()\n processUpload(queueKey)\n } catch (e) {\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function setUploadSpeed(item: UploadQueueItem, progress: number, speed: number, estimate: number) {\n item.progress.progressPercent = progress\n item.progress.remainingTime = estimate\n item.progress.speed = speed\n }\n\n async function queueItemProcessed(assetId: DocId) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n if (!asset) return\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && asset.mainFile) {\n clearTimeout(item.notificationFallbackTimer)\n item.status = UploadQueueItemStatus.Uploaded\n item.assetStatus = asset.attributes.assetStatus\n if (asset.mainFile.links?.image_detail) {\n item.imagePreview = asset.mainFile.links.image_detail\n }\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemDuplicate(\n assetId: DocId,\n originAssetFile: DocIdNullable = null,\n assetType: DamAssetType | null = null\n ) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n if (!originAssetFile || !assetType || assetType !== DamAssetType.Image) return\n let assetRes: null | AssetDetailItemDto = null\n try {\n assetRes = await fetchAssetByFileId(damClient, originAssetFile)\n } catch (e) {\n throw new Error('Fatal error')\n }\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (isNull(assetRes)) return\n if (item.assetId === assetId) {\n clearTimeout(item.notificationFallbackTimer)\n item.isDuplicate = true\n item.status = UploadQueueItemStatus.Uploaded\n item.fileId = originAssetFile\n item.duplicateAssetId = assetRes.id\n item.assetStatus = assetRes.attributes.assetStatus\n if (assetRes.mainFile?.links?.image_detail) {\n item.imagePreview = assetRes.mainFile.links.image_detail\n }\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes!.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.assetId = assetRes.id\n item.canEditMetadata = true\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n }\n\n async function queueItemFailed(assetId: DocId, failReason: AssetFileFailReason) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id) {\n clearTimeout(item.notificationFallbackTimer)\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n item.error.assetFileFailReason = failReason\n item.canEditMetadata = false\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemMetadataProcessed(assetId: DocId) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = asset.keywords\n item.authors = asset.authors\n item.customData = asset.metadata.customData\n updateNewNames(asset.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(asset.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(asset.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.canEditMetadata = true\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function removeByIndex (queueKey: UploadQueueKey, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || !queue.items[index]) return\n queue.items.splice(index, 1)\n recalculateQueueCounts(queueKey)\n }\n\n async function stopItemUpload(queueKey: UploadQueueKey, queueItem: UploadQueueItem, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n queueItem.status = UploadQueueItemStatus.Stop\n if (queueItem.latestChunkCancelToken) {\n uploadStop(queueItem.latestChunkCancelToken)\n }\n removeByIndex(queueKey, index)\n processUpload(queueKey)\n }\n\n async function updateFromDetail(asset: AssetDetailItemDto) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const assetRes = await fetchAsset(damClient, asset.id)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === assetRes.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function getQueueTotalCount (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.totalCount\n }\n\n function getQueueProcessedCount (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.processedCount\n }\n\n function stopUpload (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n const currentItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading)\n queue.items.forEach((item) => {\n item.status = UploadQueueItemStatus.Stop\n })\n if (currentItems.length > 0) {\n currentItems.forEach((item) => {\n if (item.latestChunkCancelToken) {\n uploadStop(item.latestChunkCancelToken)\n }\n })\n }\n clearQueue(queueKey)\n forceReloadFileInput(queueKey)\n }\n\n function forceReloadFileInput (queueKey: UploadQueueKey) {\n createQueue(queueKey)\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.fileInputKey++\n }\n\n function getQueueFileInputKey (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return -1\n return queue.fileInputKey\n }\n\n function clearQueue(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: getQueueFileInputKey(queueKey) + 1,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n\n function getQueueItemsTypes(queueKey: UploadQueueKey) {\n const types: Array<DamAssetType> = []\n const queue = queues.value.get(queueKey)\n if (!queue) return types\n if (queue.items.length > 0) {\n for (let i = 0; i < queue.items.length; i++) {\n if (types.includes(queue.items[i].assetType)) {\n continue\n }\n types.push(queue.items[i].assetType)\n }\n }\n return types\n }\n\n return {\n getQueue,\n getQueueItems,\n addByFiles,\n queueItemProcessed,\n queueItemDuplicate,\n queueItemFailed,\n removeByIndex,\n stopItemUpload,\n getQueueTotalCount,\n getQueueProcessedCount,\n stopUpload,\n getQueueItemsTypes,\n updateFromDetail,\n }\n})\n","<script setup lang=\"ts\">\nimport { ref, watch, withModifiers } from 'vue'\nimport { isBoolean, isUndefined } from '@/utils/common'\nimport AFileDropzone from '@/components/file/AFileDropzone.vue'\nimport type { InputFileChangeEvent } from '@/types/ChangeEvent'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n useDropzone?: boolean\n dropzoneVariant?: 'fill' | 'default' | 'fullscreen'\n onDropzoneClickCallback?: (() => void) | undefined | false // false for disable, undefined for browse files, otherwise custom callback is used\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: true,\n useDropzone: false,\n dropzoneVariant: 'default',\n onDropzoneClickCallback: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst BLOCK_DOUBLE_CLICK_MS = 200\n\nconst inputRef = ref<undefined | HTMLInputElement>(undefined)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst fileInputKeyLocal = ref(props.fileInputKey || 0)\nconst blockDoubleClick = ref(false)\n\nconst clickInput = () => {\n if (blockDoubleClick.value === true) {\n return\n }\n blockDoubleClick.value = true\n inputRef.value?.click()\n setTimeout(() => {\n blockDoubleClick.value = false\n }, BLOCK_DOUBLE_CLICK_MS)\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nconst validateData = (files: File[]) => {\n if (!props.multiple && files.length > 0) {\n const checked = checkFormatsAndSizes([files[0]])\n emit('filesInput', checked)\n return\n }\n const checked = checkFormatsAndSizes(files)\n emit('filesInput', checked)\n}\n\nconst onDropzoneDrop = (files: File[]) => {\n validateData(files)\n}\n\nconst onInputFileChange = (payload: Event) => {\n const event = payload as InputFileChangeEvent\n emit('change', event)\n validateData(Array.from(event.target?.files ?? []))\n}\n\nconst onFileDropzoneClick = () => {\n if (isBoolean(props.onDropzoneClickCallback)) {\n return\n }\n if (isUndefined(props.onDropzoneClickCallback)) {\n clickInput()\n return\n }\n props.onDropzoneClickCallback()\n}\n\nwatch(\n () => props.fileInputKey,\n (newValue, oldValue) => {\n if (newValue === oldValue || isUndefined(newValue)) {\n return\n }\n fileInputKeyLocal.value = newValue\n }\n)\n\ndefineExpose({\n activate: clickInput,\n})\n</script>\n\n<template>\n <AFileDropzone\n v-if=\"useDropzone\"\n :variant=\"dropzoneVariant\"\n @on-click=\"onFileDropzoneClick\"\n @on-drop=\"onDropzoneDrop\"\n />\n <slot\n v-else\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => clickInput(), ['stop']) }\"\n />\n <input\n ref=\"inputRef\"\n :key=\"fileInputKeyLocal\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n hidden\n tabindex=\"-1\"\n type=\"file\"\n @change=\"onInputFileChange\"\n >\n</template>\n","import type { InjectionKey, ShallowRef } from 'vue'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport const ImageWidgetExtSystemConfig: InjectionKey<ShallowRef<DamExtSystemConfig>> = Symbol.for(\n 'anzu:ImageWidgetExtSystemConfig'\n)\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiUpdateOne = <T, R = T>(\n client: () => AxiosInstance,\n object: T | Record<string, never> = {},\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .put(replaceUrlParameters(urlTemplate, urlParams), JSON.stringify(object), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiDeleteOne = <T, R = T>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .delete(replaceUrlParameters(urlTemplate, urlParams), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\n\nconst END_POINT = '/adm/v1/image'\nexport const ENTITY = 'image'\nexport const SYSTEM_CMS = 'cms'\n\nconst BULK_METADATA_LIMIT = 20\n\nexport const fetchImageListByIds = (client: () => AxiosInstance, ids: IntegerId[]) =>\n apiFetchByIds<ImageAware[]>(client, ids, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const fetchImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiFetchOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const createImage = (client: () => AxiosInstance, data: ImageCreateUpdateAware) =>\n apiCreateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const updateImage = (client: () => AxiosInstance, id: IntegerId, data: ImageCreateUpdateAware) =>\n apiUpdateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const deleteImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiDeleteOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const bulkUpdateImages = (client: () => AxiosInstance, items: ImageCreateUpdateAware[]) => {\n return new Promise<ImageAware[]>((resolve, reject) => {\n updateImagesSequence(client, items)\n .then((responses) => {\n if (items.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const images: ImageAware[] = responses.flatMap(response => response.data.images)\n return resolve(images)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function updateImagesSequence(client: () => AxiosInstance, items: ImageCreateUpdateAware[]) {\n const totalCalls = Math.ceil(items.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (items.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = items.slice(offset, offset + BULK_METADATA_LIMIT)\n const reqData = { images: reduced }\n const res = await client().put(END_POINT, JSON.stringify(reqData))\n responses.push(res)\n }\n return responses\n}\n","<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { cloneDeep } from '@/utils/common'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { fetchImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable | undefined\n image?: ImageAware | ImageCreateUpdateAware | undefined | null // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n width?: number | undefined\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n }\n)\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\n\nconst resImage = ref<null | ImageAware | ImageCreateUpdateAware>(null)\n\nconst { image, modelValue } = toRefs(props)\n\nconst resolvedSrc = ref('')\n\nconst { t } = useI18n()\n\nwatch(\n [image, modelValue],\n async ([newImage, newImageId]) => {\n resImage.value = null\n resolvedSrc.value = imagePlaceholderPath\n if (newImage) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(resImage.value)\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(resImage.value)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n :aspect-ratio=\"disableAspectRatio ? undefined : aspectRatio\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div class=\"pa-2\">\n <VRow\n v-if=\"showDescription && resImage\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\">{{ t('common.damImage.image.model.texts.description') }}:</span>\n <br>{{ resImage.texts.description }}\n </VCol>\n </VRow>\n <VRow\n v-if=\"showSource && resImage\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\"> {{ t('common.damImage.image.model.texts.source') }}:</span>\n <br>{{ resImage.texts.source }}\n </VCol>\n </VRow>\n </div>\n <slot\n name=\"append\"\n :image=\"resImage\"\n />\n</template>\n\n<style lang=\"scss\">\n.v-img.disable-radius .v-img__img {\n border-radius: 0;\n}\n</style>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { ImageCreateUpdateAware, ImageCreateUpdateAwareKeyed } from '@/types/ImageAware'\nimport { cloneDeep, isNull } from '@/utils/common'\n\nexport const useImageStore = defineStore('commonImageStore', () => {\n const images = ref<ImageCreateUpdateAwareKeyed[]>([])\n const imageDetail = ref<ImageCreateUpdateAware | null>(null)\n const maxPosition = ref(0)\n\n function setImageDetail(data: ImageCreateUpdateAware | null) {\n if (isNull(data)) imageDetail.value = null\n imageDetail.value = cloneDeep(data)\n }\n\n function setImages(data: ImageCreateUpdateAwareKeyed[]) {\n images.value = data\n }\n\n function addImages(data: ImageCreateUpdateAwareKeyed[]) {\n images.value.push(...data)\n }\n\n function updateMaxPositionIfGreater(newPosition: number) {\n if (newPosition > maxPosition.value) {\n maxPosition.value = newPosition\n }\n }\n\n function removeImageByIndex(index: number) {\n images.value.splice(index, 1)\n }\n\n function reset() {\n images.value = []\n imageDetail.value = null\n }\n\n return {\n images,\n imageDetail,\n maxPosition,\n setImages,\n addImages,\n setImageDetail,\n updateMaxPositionIfGreater,\n removeImageByIndex,\n reset,\n }\n})\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport type { ValidationScope } from '@/types/Validation'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\n\nexport const ADamAssetMetadataValidationScopeSymbol = Symbol.for('anzu:common:asset-metadata-validation-scope')\n\nexport const AImageMetadataValidationScopeSymbol = Symbol.for('anzu:common:image-validation-scope')\n\nexport const ADamKeywordCreateValidationScopeSymbol = Symbol.for('anzu:common:keyword-create-validation-scope')\n\nexport const ADamAuthorCreateValidationScopeSymbol = Symbol.for('anzu:common:author-create-validation-scope')\n\nconst { required, maxLength } = useValidate()\n\nexport function useImageValidation(\n image: Ref<ImageCreateUpdateAware | null>,\n validationScope: ValidationScope = undefined\n) {\n const rules = computed(() => ({\n image: {\n texts: {\n source: {\n required,\n minLength: maxLength(255),\n },\n },\n },\n }))\n const v$ = useVuelidate(rules, { image }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport { isNull } from '@/utils/common'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\n\nwithDefaults(\n defineProps<{\n modelValue: boolean\n saving: boolean\n loading: boolean\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'onConfirm'): void\n (e: 'onClose'): void\n}>()\n\nconst { t } = useI18n()\nconst imageStore = useImageStore()\nconst { imageDetail } = storeToRefs(imageStore)\n\nconst { v$ } = useImageValidation(imageDetail, AImageMetadataValidationScopeSymbol)\n\nconst { showValidationError } = useAlerts()\n\nconst onConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onConfirm')\n}\n\nconst onDialogModelUpdate = (newValue: boolean) => {\n if (newValue) return\n emit('onClose')\n}\n\nconst onEditAsset = () => {\n if (isNull(imageDetail.value)) return\n emit('editAsset', imageDetail.value.dam.damId)\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"modelValue\"\n :max-width=\"500\"\n @update:model-value=\"onDialogModelUpdate\"\n >\n <VCard v-if=\"modelValue\">\n <ADialogToolbar @on-cancel=\"onDialogModelUpdate(false)\">\n {{ t('common.damImage.image.meta.edit') }}\n </ADialogToolbar>\n <VCardText>\n <div\n v-if=\"loading\"\n class=\"d-flex align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <div\n v-else-if=\"imageDetail\"\n class=\"position-relative\"\n >\n <div class=\"my-4\">\n <AImageWidgetSimple\n :model-value=\"imageDetail.id\"\n :image=\"imageDetail\"\n />\n </div>\n <VRow>\n <VCol>\n <VBtn @click.stop=\"onEditAsset\">\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image.texts.source\"\n />\n </VCol>\n </VRow>\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnPrimary\n :loading=\"saving\"\n :disabled=\"loading\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { AssetDetailItemDto } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\n\nexport enum AssetDetailTabImageWithRoi {\n Info = 'meta',\n ROI = 'roi',\n Default = Info,\n}\n\nexport const useAssetDetailStore = defineStore('commonAssetDetailStore', () => {\n const asset = ref<AssetDetailItemDto | null>(null)\n const authorConflicts = ref<DocId[]>([])\n const dialog = ref(false)\n const loading = ref(false)\n const metadataAreTouched = ref(false)\n const activeTab = ref<AssetDetailTabImageWithRoi>(AssetDetailTabImageWithRoi.Default)\n const updateUploadStore = ref(false)\n\n function setAsset(data: AssetDetailItemDto | null) {\n asset.value = data\n }\n\n function reset() {\n asset.value = null\n }\n\n return {\n metadataAreTouched,\n authorConflicts,\n asset,\n loading,\n dialog,\n activeTab,\n updateUploadStore,\n setAsset,\n reset,\n }\n})\n","<script setup lang=\"ts\">\nimport { useTheme } from '@/composables/themeSettings'\n\nconst emit = defineEmits<{\n (e: 'closeDialog'): void\n}>()\n\nconst { toolbarColor } = useTheme()\n\nconst closeDialog = () => {\n emit('closeDialog')\n}\n</script>\n\n<template>\n <VCard class=\"dam-image-detail\">\n <div class=\"d-flex flex-column w-100 h-100\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b\"\n >\n <div class=\"text-subtitle-2 d-flex\" />\n <VSpacer />\n <div>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 justify-center align-center\">\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n </div>\n </VCard>\n</template>\n","import { useI18n } from 'vue-i18n'\n\nconst MINUTE_IN_SECONDS = 60\nconst HOUR_IN_SECONDS = 3600\nconst DAY_IN_SECONDS = 86400\n\nexport function useRemainingTime() {\n const { t } = useI18n()\n\n const remainingTime = (seconds: number, short: boolean): string => {\n const prefix = short ? 'common.time.short.' : 'common.time.long.'\n if (seconds > DAY_IN_SECONDS) {\n return t(prefix + 'remainingDays', { value: Math.floor(seconds / DAY_IN_SECONDS) })\n }\n if (seconds > HOUR_IN_SECONDS) {\n return t(prefix + 'remainingHours', { value: Math.floor(seconds / HOUR_IN_SECONDS) })\n }\n if (seconds > MINUTE_IN_SECONDS) {\n return t(prefix + 'remainingMinutes', { value: Math.floor(seconds / MINUTE_IN_SECONDS) })\n }\n return t(prefix + 'remainingSeconds', { value: seconds })\n }\n\n const remainingTimeShort = (seconds: number): string => {\n return remainingTime(seconds, true)\n }\n\n const remainingTimeLong = (seconds: number): string => {\n return remainingTime(seconds, false)\n }\n\n return {\n remainingTimeShort,\n remainingTimeLong,\n }\n}\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_2K'%20data-name='2K'%20transform='translate(-10480%20-9321)'%3e%3cg%20id='Group_2714'%20data-name='Group%202714'%20transform='translate(4751%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7179'%20data-name='Path%207179'%20d='M-13.982,7.587a11.158,11.158,0,0,1,1.1-4.668q1-2.375,4.717-5.028A34.591,34.591,0,0,0-3.991-5.417,4.889,4.889,0,0,0-2.534-8.824a3.774,3.774,0,0,0-.835-2.506,2.942,2.942,0,0,0-2.391-1,2.916,2.916,0,0,0-2.9,1.589,7.879,7.879,0,0,0-.524,2.915H-13.72a11.461,11.461,0,0,1,1.1-4.9q1.869-3.554,6.64-3.554a8.425,8.425,0,0,1,6,2.088A7.216,7.216,0,0,1,2.249-8.66,7.473,7.473,0,0,1,.673-3.976a15.678,15.678,0,0,1-3.4,3.03L-4.594.381Q-6.35,1.625-7,2.182A5.279,5.279,0,0,0-8.086,3.476H2.282V7.587ZM6.261-16.554h4.963v9.946l9.327-9.946H27.07L17.163-6.625,27.578,7.587H21.092L13.654-2.951,11.224-.487V7.587H6.261Z'%20transform='translate(10522.981%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_4K'%20data-name='4K'%20transform='translate(-10580%20-9321)'%3e%3cg%20id='Group_2715'%20data-name='Group%202715'%20transform='translate(4851%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7180'%20data-name='Path%207180'%20d='M2.562,2.477H-.124v5.11H-4.693V2.477h-9.4V-1.6l8.73-14.412H-.124V-1.175H2.562ZM-4.693-1.175V-11.4L-10.621-1.175ZM6.313-16.554h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10623.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_8K'%20data-name='8K'%20transform='translate(-10680%20-9321)'%3e%3cg%20id='Group_2716'%20data-name='Group%202716'%20transform='translate(4951%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7181'%20data-name='Path%207181'%20d='M-9.246.692A3.814,3.814,0,0,0-8.337,3.41a3.284,3.284,0,0,0,2.514.966A3.284,3.284,0,0,0-3.309,3.41,3.814,3.814,0,0,0-2.4.692a3.78,3.78,0,0,0-.925-2.76,3.342,3.342,0,0,0-2.5-.942,3.342,3.342,0,0,0-2.5.942A3.78,3.78,0,0,0-9.246.692ZM-14.094,1a7.31,7.31,0,0,1,.9-3.619,5.734,5.734,0,0,1,2.645-2.44A5.548,5.548,0,0,1-12.79-7.538a6.929,6.929,0,0,1-.518-2.5,5.823,5.823,0,0,1,1.953-4.414A7.769,7.769,0,0,1-5.84-16.275,7.769,7.769,0,0,1-.324-14.449a5.823,5.823,0,0,1,1.953,4.414,6.952,6.952,0,0,1-.516,2.5A4.77,4.77,0,0,1-1.123-5.221a6.6,6.6,0,0,1,2.649,2.6A7.406,7.406,0,0,1,2.415,1,6.768,6.768,0,0,1,.193,6.1a8.664,8.664,0,0,1-6.205,2.1q-3.984,0-6.033-2.1A7.043,7.043,0,0,1-14.094,1ZM-8.837-9.511A2.9,2.9,0,0,0-8.04-7.4a2.939,2.939,0,0,0,2.209.819A2.906,2.906,0,0,0-3.623-7.4a2.937,2.937,0,0,0,.78-2.113,3.009,3.009,0,0,0-.78-2.2,2.956,2.956,0,0,0-2.209-.794,2.99,2.99,0,0,0-2.209.794A2.972,2.972,0,0,0-8.837-9.511Zm15.15-7.042h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10723.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='QHD'%20transform='translate(-10380%20-9321)'%3e%3cg%20id='Group_2713'%20data-name='Group%202713'%20transform='translate(4651%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7178'%20data-name='Path%207178'%20d='M-12.888,4.215A6.477,6.477,0,0,0-11.217,4a8.316,8.316,0,0,0,1.131-.41L-12.53,1.267l2.592-2.706L-7.485.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0-12.888,4.215Zm11.61-8.86A16.059,16.059,0,0,1-2.065.76,8.992,8.992,0,0,1-3.942,4.209l2.772,2.61L-3.8,9.564-6.7,6.813A12.165,12.165,0,0,1-9,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817q-3.738-3.39-3.738-9.957,0-6.616,3.832-10.007a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q-1.278-10.737-1.278-4.645ZM2.538,7.818v-24.14H7.549v9.2h9.385v-9.2h5.012V7.818H16.934V-2.958H7.549V7.818ZM31.691-12.129V3.626H36.35A5.031,5.031,0,0,0,41.336.1a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973ZM37.2-16.322a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4A16.034,16.034,0,0,1,45.3,3.314a8.728,8.728,0,0,1-8.1,4.5H26.794v-24.14Z'%20transform='translate(10418.421%209375.059)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Full_HD'%20data-name='Full%20HD'%20transform='translate(-10280%20-9321)'%3e%3cg%20id='Group_2712'%20data-name='Group%202712'%20transform='translate(4551%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7177'%20data-name='Path%207177'%20d='M-21.883-16.521H-4.669v4.242h-12.2v5.552H-6.176v4.193H-16.871V7.587h-5.012ZM-1.426,7.587v-24.14H3.585v9.2H12.97v-9.2h5.012V7.587H12.97V-3.19H3.585V7.587ZM27.727-12.361V3.394h4.659A5.031,5.031,0,0,0,37.372-.127a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973Zm5.511-4.193a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4,16.034,16.034,0,0,1-1.934,8.156,8.728,8.728,0,0,1-8.1,4.5H22.83v-24.14Z'%20transform='translate(10318.883%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Slot'%20transform='translate(-10080%20-9321)'%3e%3cg%20id='Group_2710'%20data-name='Group%202710'%20transform='translate(10080%209321)'%3e%3cg%20id='Group_2668'%20data-name='Group%202668'%20transform='translate(0%200)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20opacity='0.5'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2711'%20data-name='Group%202711'%20transform='translate(10108.517%209349.516)'%3e%3cg%20id='Layer_2'%20data-name='Layer%202'%20transform='translate(0%200)'%3e%3cpath%20id='Path_7172'%20data-name='Path%207172'%20d='M18.322,17H9.371A5.371,5.371,0,0,0,4,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,18.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7173'%20data-name='Path%207173'%20d='M31.322,17H22.371A5.371,5.371,0,0,0,17,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,31.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H22.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(6.273%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7174'%20data-name='Path%207174'%20d='M18.322,4H9.371A5.371,5.371,0,0,0,4,9.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V9.371A5.371,5.371,0,0,0,18.322,4Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V9.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%20-4)'%20fill='%23fff'/%3e%3cpath%20id='Path_7175'%20data-name='Path%207175'%20d='M18.79,15.637h6.266V21.9a1.79,1.79,0,1,0,3.581,0V15.637H34.9a1.79,1.79,0,1,0,0-3.581H28.637V5.79a1.79,1.79,0,0,0-3.581,0v6.266H18.79a1.79,1.79,0,0,0,0,3.581Z'%20transform='translate(6.273%20-4)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Low'%20transform='translate(-10180%20-9321)'%3e%3cg%20id='Group_2709'%20data-name='Group%202709'%20transform='translate(4451%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7176'%20data-name='Path%207176'%20d='M-14.218-16.322h5.044v19.8H2.881v4.34h-17.1ZM16.9,4.215A6.477,6.477,0,0,0,18.574,4a8.316,8.316,0,0,0,1.131-.41L17.261,1.267l2.592-2.706L22.306.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0,16.9,4.215Zm11.61-8.86a16.059,16.059,0,0,1-.786,5.4,8.992,8.992,0,0,1-1.877,3.449l2.772,2.61L25.99,9.564l-2.9-2.751A12.165,12.165,0,0,1,20.8,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817Q5.37,2.283,5.37-4.285,5.37-10.9,9.2-14.291a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q28.513-10.737,28.513-4.645Z'%20transform='translate(10222.799%209374.746)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cdefs%3e%3cclipPath%20id='clip-path'%3e%3cpath%20id='Path_7158'%20data-name='Path%207158'%20d='M0,349.208A5.911,5.911,0,1,0,5.911,343.3,5.911,5.911,0,0,0,0,349.208'%20transform='translate(0%20-343.297)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-2'%3e%3cpath%20id='Path_7159'%20data-name='Path%207159'%20d='M0,167.86a20.2,20.2,0,0,1,20.2,20.2h8.375A28.572,28.572,0,0,0,0,159.485Z'%20transform='translate(-0.001%20-159.485)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-3'%3e%3cpath%20id='Path_7160'%20data-name='Path%207160'%20d='M0,0V8.621A34.483,34.483,0,0,1,34.484,43.1h8.621A43.1,43.1,0,0,0,0,0Z'%20transform='translate(-0.001%200)'%20fill='%23fff'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20id='RSS'%20transform='translate(-5652%20-7415)'%3e%3ccircle%20id='Ellipse_16'%20data-name='Ellipse%2016'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5652%207415)'%20opacity='0.5'/%3e%3cg%20id='Group_2625'%20data-name='Group%202625'%20transform='translate(5683.674%207441.939)'%3e%3cg%20id='Group_2624'%20data-name='Group%202624'%20transform='translate(0)'%3e%3cg%20id='Group_2619'%20data-name='Group%202619'%20transform='translate(0%2031.281)'%3e%3cg%20id='Group_2618'%20data-name='Group%202618'%20clip-path='url(%23clip-path)'%3e%3crect%20id='Rectangle_2677'%20data-name='Rectangle%202677'%20width='11.823'%20height='11.823'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2621'%20data-name='Group%202621'%20transform='translate(0%2014.532)'%3e%3cg%20id='Group_2620'%20data-name='Group%202620'%20clip-path='url(%23clip-path-2)'%3e%3crect%20id='Rectangle_2678'%20data-name='Rectangle%202678'%20width='28.572'%20height='28.572'%20transform='translate(0%200)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2623'%20data-name='Group%202623'%20transform='translate(0)'%3e%3cg%20id='Group_2622'%20data-name='Group%202622'%20clip-path='url(%23clip-path-3)'%3e%3crect%20id='Rectangle_2679'%20data-name='Rectangle%202679'%20width='43.104'%20height='43.104'%20transform='translate(0)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","import svg2k from '@/assets/dam-meta-icons/2k.svg'\nimport svg4k from '@/assets/dam-meta-icons/4k.svg'\nimport svg8k from '@/assets/dam-meta-icons/8k.svg'\nimport svgqhd from '@/assets/dam-meta-icons/qhd.svg'\nimport svgfhd from '@/assets/dam-meta-icons/fhd.svg'\nimport svgslot from '@/assets/dam-meta-icons/slot.svg'\nimport svglow from '@/assets/dam-meta-icons/low.svg'\nimport svgrss from '@/assets/dam-meta-icons/rss.svg'\n\nexport const DIMENSIONS_CONFIG = [\n {\n titleT: 'common.damImage.asset.metaIcons.fullHd',\n width: 1920,\n height: 1080,\n svgSrc: svgfhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.2k',\n width: 2048,\n height: 1080,\n svgSrc: svg2k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.qhd',\n width: 2560,\n height: 1440,\n svgSrc: svgqhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.4k',\n width: 3840,\n height: 2160,\n svgSrc: svg4k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.8k',\n width: 7680,\n height: 4320,\n svgSrc: svg8k,\n },\n]\nexport const ICON_SLOTS = svgslot\nexport const ICON_RSS = svgrss\nexport const ICON_LOW = svglow\nexport const LOW_DIMENSION = 600\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetFileProperties, DamAssetType } from '@/types/coreDam/Asset'\nimport {\n DIMENSIONS_CONFIG,\n ICON_LOW,\n ICON_RSS,\n ICON_SLOTS,\n LOW_DIMENSION,\n} from '@/components/damImage/uploadQueue/composables/assetImageIconsConfig'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n assetFileProperties: AssetFileProperties\n disableAbsolute?: boolean\n }>(),\n {\n disableAbsolute: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst checkDimensions = (icons: string[], titles: string[]) => {\n if (props.assetFileProperties.width === 0 || props.assetFileProperties.height === 0) {\n return\n }\n if (props.assetFileProperties.width < LOW_DIMENSION || props.assetFileProperties.height < LOW_DIMENSION) {\n icons.push(ICON_LOW)\n titles.push(t('common.damImage.asset.metaIcons.low'))\n return\n }\n if (props.assetType !== DamAssetType.Video) return\n for (let i = 0; i < DIMENSIONS_CONFIG.length; i++) {\n if (\n props.assetFileProperties.width === DIMENSIONS_CONFIG[i].width &&\n props.assetFileProperties.height === DIMENSIONS_CONFIG[i].height\n ) {\n icons.push(DIMENSIONS_CONFIG[i].svgSrc)\n titles.push(t(DIMENSIONS_CONFIG[i].titleT))\n break\n }\n }\n}\n\nconst checkDistributions = (icons: string[], titles: string[]) => {\n const { damPrvConfig } = useDamConfigState()\n for (let i = 0; i < props.assetFileProperties.distributesInServices.length; i++) {\n const iconPath =\n damPrvConfig.value.distributionServices[props.assetFileProperties.distributesInServices[i]]?.iconPath\n if (iconPath.length > 0 && !icons.includes(iconPath)) {\n icons.push(iconPath)\n titles.push(damPrvConfig.value.distributionServices[props.assetFileProperties.distributesInServices[i]].title)\n }\n }\n}\n\nconst data = computed(() => {\n const icons: string[] = []\n const titles: string[] = []\n\n if (props.assetFileProperties.slotNames.length > 1) {\n icons.push(ICON_SLOTS)\n titles.push(t('common.damImage.asset.metaIcons.slots'))\n }\n if (props.assetFileProperties.fromRss) {\n icons.push(ICON_RSS)\n titles.push(t('common.damImage.asset.metaIcons.rss'))\n }\n checkDimensions(icons, titles)\n checkDistributions(icons, titles)\n\n return { icons, titles }\n})\n</script>\n\n<template>\n <div\n v-show=\"data.icons.length > 0\"\n class=\"asset-image__meta-icons\"\n :class=\"{ 'asset-image__meta-icons-absolute': !disableAbsolute }\"\n >\n <img\n v-for=\"(item, index) in data.icons\"\n :key=\"item\"\n class=\"img-svg\"\n :src=\"item\"\n alt=\"\"\n :title=\"data.titles[index] || ''\"\n >\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-image__meta-icons-absolute {\n position: absolute;\n left: 6px;\n top: 163px;\n}\n\n.asset-image__meta-icons {\n display: flex;\n\n img.img-svg {\n height: 30px;\n padding: 2px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport { type AssetFileProperties, DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\nimport { useRemainingTime } from '@/composables/datetime/remainingTime'\nimport AssetImageMetaIcons from '@/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetType\n assetStatus?: DamAssetStatus\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n useComponent?: boolean\n cover?: boolean\n aspectRatio?: number\n showUploading?: boolean\n showProcessing?: boolean\n showWaiting?: boolean\n showDone?: boolean\n uploadingColor?: string\n processingColor?: string\n disableProcessingText?: boolean\n uploadingProgress?: number | null\n remainingTime?: number | null\n hideIcon?: boolean\n showMetaIcons?: boolean\n assetFileProperties?: AssetFileProperties\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n useComponent: false,\n cover: false,\n aspectRatio: undefined,\n showUploading: false,\n showProcessing: false,\n showWaiting: false,\n showDone: false,\n uploadingColor: 'primary',\n processingColor: 'primary',\n disableProcessingText: false,\n uploadingProgress: null,\n remainingTime: null,\n hideIcon: false,\n showMetaIcons: false,\n assetFileProperties: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'load'): void\n (e: 'error'): void\n}>()\n\nconst { t } = useI18n()\n\nconst onLoad = () => {\n emit('load')\n}\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst uploadingPercentage = computed(() => {\n if (!props.uploadingProgress) return '0%'\n const value = Math.ceil(props.uploadingProgress)\n return value > 100 ? '100%' : value + '%'\n})\n\nconst backgroundColorComputed = computed(() => {\n return [DamAssetStatus.Deleting, DamAssetStatus.Draft].includes(props.assetStatus) ? '#ccc' : props.backgroundColor\n})\n\nconst iconColor = computed(() => {\n return props.assetStatus === DamAssetStatus.WithFile ? '#505050' : '#8f8f8f'\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.hideIcon) return false\n else if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n\nconst { remainingTimeShort } = useRemainingTime()\n</script>\n\n<template>\n <VImg\n v-if=\"showUploading || showProcessing || showWaiting\"\n :aspect-ratio=\"aspectRatio\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n :cover=\"cover\"\n class=\"asset-image asset-image--loading-bg\"\n @error=\"onError\"\n @load=\"onLoad\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showWaiting\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.waiting') }}\n </div>\n </div>\n <div\n v-if=\"showProcessing\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"processingColor\"\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n />\n <div\n v-if=\"!disableProcessingText\"\n class=\"text-caption text-center\"\n >\n {{ t('common.damImage.upload.processing') }}\n </div>\n </div>\n <div\n v-else-if=\"showUploading\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"uploadingColor\"\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n :model-value=\"uploadingProgress === null ? undefined : uploadingProgress\"\n >\n {{ uploadingPercentage }}\n </VProgressCircular>\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.uploading') }}\n <span\n v-if=\"remainingTime\"\n class=\"font-weight-bold\"\n >\n {{ remainingTimeShort(remainingTime) }}\n </span>\n </div>\n </div>\n </template>\n </VImg>\n <VImg\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src && useComponent\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n class=\"asset-image asset-image--component position-relative\"\n :cover=\"cover\"\n :aspect-ratio=\"aspectRatio\"\n @load=\"onLoad\"\n @error=\"onError\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </template>\n </VImg>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"asset-image asset-image--img position-relative\"\n >\n <img\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n :style=\"'background-color:' + backgroundColorComputed\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColorComputed, width: width + 'px' }\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n</template>\n","import { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\n\nexport function useAssetFileFailReason() {\n const { t } = useI18n()\n\n const assetFileFailReasonOptions = ref<ValueObjectOption<AssetFileFailReason>[]>([\n {\n value: AssetFileFailReason.None,\n title: t('common.damImage.asset.assetFileFailReason.none'),\n },\n {\n value: AssetFileFailReason.Unknown,\n title: t('common.damImage.asset.assetFileFailReason.unknown'),\n },\n {\n value: AssetFileFailReason.InvalidChecksum,\n title: t('common.damImage.asset.assetFileFailReason.invalidChecksum'),\n },\n {\n value: AssetFileFailReason.InvalidMimeType,\n title: t('common.damImage.asset.assetFileFailReason.invalidMimeType'),\n },\n {\n value: AssetFileFailReason.DownloadFailed,\n title: t('common.damImage.asset.assetFileFailReason.downloadFailed'),\n },\n {\n value: AssetFileFailReason.InvalidSize,\n title: t('common.damImage.asset.assetFileFailReason.invalidSize'),\n },\n ])\n\n const getAssetFileFailReasonOption = (value: AssetFileFailReason) => {\n return assetFileFailReasonOptions.value.find((item) => item.value === value)\n }\n\n return {\n assetFileFailReasonOptions,\n getAssetFileFailReasonOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport { useAssetFileFailReason } from '@/components/damImage/uploadQueue/composables/assetFileFailReason'\nimport AChipNoLink from '@/components/AChipNoLink.vue'\n\nconst props = withDefaults(\n defineProps<{\n reason: AssetFileFailReason\n }>(),\n {}\n)\n\nconst { getAssetFileFailReasonOption } = useAssetFileFailReason()\nconst reasonOption = computed(() => {\n return getAssetFileFailReasonOption(props.reason)\n})\n</script>\n\n<template>\n <AChipNoLink v-if=\"reasonOption\">\n {{ reasonOption.title }}\n </AChipNoLink>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { DamAssetStatus } from '@/types/coreDam/Asset'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\n\nwithDefaults(\n defineProps<{\n assetStatus: DamAssetStatus\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Duplicate\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VAlert>\n </div>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Failed\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.failed') }}\n <div v-if=\"assetMainFileFailReason\">\n <br>\n <AssetFileFailReasonChip :reason=\"assetMainFileFailReason\" />\n </div>\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Deleting\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.deleting') }}\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Draft\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.draft') }}\n </VAlert>\n </div>\n</template>\n","import { readonly, ref } from 'vue'\n\nconst buttonsDiv = ref(false)\n\nexport function useAssetDetailSidebarActionbar() {\n const mounted = () => {\n buttonsDiv.value = true\n }\n\n const unMounted = () => {\n buttonsDiv.value = false\n }\n\n return {\n canTeleport: readonly(buttonsDiv),\n mounted,\n unMounted,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\n\nconst { canTeleport } = useAssetDetailSidebarActionbar()\n</script>\n\n<template>\n <Teleport\n v-if=\"canTeleport\"\n to=\"#anzu-asset-detail-sidebar-actions\"\n >\n <div class=\"w-100 text-right\">\n <slot />\n </div>\n </Teleport>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataForm from '@/components/customDataForm/ACustomDataForm.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n modelValue: { [key: string]: any }\n dataCy?: string\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { damConfigAssetCustomFormElements } = useDamConfigState()\n\nconst elements = computed(() => {\n return damConfigAssetCustomFormElements.value[props.assetType]\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst pinnedCount = computed(() => {\n return damConfigExtSystem.value[props.assetType].customMetadataPinnedAmount\n})\n</script>\n\n<template>\n <ACustomDataForm\n :model-value=\"modelValue\"\n :pinned-count=\"pinnedCount\"\n :elements=\"elements\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @any-change=\"emit('anyChange')\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template #after-pinned>\n <slot name=\"after-pinned\" />\n </template>\n <template #before-pinned>\n <slot name=\"before-pinned\" />\n </template>\n </ACustomDataForm>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | null\n width?: number\n height?: number\n }>(),\n {\n color: null,\n width: 20,\n height: 20,\n }\n)\n\nconst style = computed(() => {\n return `background-color: ${props.color ? props.color : 'transparent'}; width: ${props.width}px; height: ${\n props.height\n }px;`\n})\n</script>\n\n<template>\n <div :style=\"style\">\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ color }}\n </VTooltip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AColorBox from '@/components/dam/AColorBox.vue'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport ABooleanValue from '@/components/ABooleanValue.vue'\n\nwithDefaults(\n defineProps<{\n file: AssetFileImage\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.dominantColor') }}</VCol>\n <VCol cols=\"9\">\n <AColorBox :color=\"file.imageAttributes.mostDominantColor\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.width') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.width }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.height') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.height }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.ratio') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.ratioWidth }} / {{ file.imageAttributes.ratioHeight }}\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.animated') }}</VCol>\n <VCol cols=\"9\">\n <ABooleanValue :value=\"file.imageAttributes.animated\" />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { DocId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n }\n)\n\nconst { getCachedAuthor } = useDamCachedAuthors()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newAuthorNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n queueId?: string | undefined\n }>(),\n {\n queueId: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'addAuthor', data: DocId | null | undefined): void\n}>()\n\nconst clickClose = () => {\n emit('addAuthor', props.id)\n}\n\nconst { getCachedAuthor } = useDamCachedAuthors()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayTitle = computed(() => {\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VChip\n size=\"small\"\n closable\n close-icon=\"mdi-plus\"\n @click:close=\"clickClose\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n</template>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull } from '@/utils/common'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { fetchAuthorList, fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const useAuthorSelectActions = () => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { initialized } = useDamConfigState()\n\n const mapToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n })\n\n const mapToValueObject = (author: DamAuthor): ValueObjectOption<string> => ({\n title: author.name + (author.identifier ? ` (${author.identifier})` : ''),\n value: author.id,\n })\n\n const mapToValueObjects = (authors: DamAuthor[]): ValueObjectOption<string>[] => {\n return authors.map((author: DamAuthor) => mapToValueObject(author))\n }\n\n const mapToMinimals = (authors: DamAuthor[]): DamAuthorMinimal[] => {\n return authors.map((author: DamAuthor) => mapToMinimal(author))\n }\n\n const fetchItems = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchAuthorList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsMinimal = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToMinimals(await fetchAuthorList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchAuthorListByIds(damClient, initialized.damConfigExtSystem, ids))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n }\n}\n","import { reactive } from 'vue'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, 'author')\n\nexport function useAuthorFilter() {\n return reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n })\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum AuthorType {\n None = 'none',\n Internal = 'internal',\n External = 'external',\n Agency = 'agency',\n Default = None,\n}\n\nexport function useAuthorType() {\n const { t } = useI18n()\n\n const authorTypeOptions = ref<ValueObjectOption<AuthorType>[]>([\n {\n value: AuthorType.None,\n title: t('common.damImage.author.authorType.none'),\n },\n {\n value: AuthorType.Internal,\n title: t('common.damImage.author.authorType.internal'),\n },\n {\n value: AuthorType.External,\n title: t('common.damImage.author.authorType.external'),\n },\n {\n value: AuthorType.Agency,\n title: t('common.damImage.author.authorType.agency'),\n },\n ])\n\n const getAuthorTypeOption = (value: AuthorType) => {\n return authorTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n authorTypeOptions,\n getAuthorTypeOption,\n }\n}\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst { required, minLength } = useValidate()\n\nexport function useAuthorValidation(author: Ref<DamAuthor>, validationScope: ValidationScope = undefined) {\n const rules = computed(() => ({\n author: {\n name: {\n required,\n minLength: minLength(3),\n },\n identifier: {\n minLength: minLength(3),\n },\n },\n }))\n const v$ = useVuelidate(rules, { author }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","import type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { AuthorType } from '@/components/damImage/uploadQueue/author/AuthorType'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useAuthorFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamAuthor => {\n return {\n id: '',\n name: '',\n identifier: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n },\n type: AuthorType.Default,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 0,\n modifiedBy: 0,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValidationScope } from '@/types/Validation'\nimport { ADamAuthorCreateValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { useAuthorType } from '@/components/damImage/uploadQueue/author/AuthorType'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { useAuthorValidation } from '@/components/damImage/uploadQueue/author/authorValidation'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { createAuthor } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useAuthorFactory } from '@/components/damImage/uploadQueue/author/AuthorFactory'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport AFormValueObjectOptionsSelect from '@/components/form/AFormValueObjectOptionsSelect.vue'\n\nconst props = withDefaults(\n defineProps<{\n initialValue?: string\n disableRedirect?: boolean\n variant?: 'button' | 'icon'\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n disabled?: boolean | undefined\n validationScope?: ValidationScope\n }>(),\n {\n initialValue: '',\n disableRedirect: false,\n variant: 'button',\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: undefined,\n disabled: undefined,\n validationScope: ADamAuthorCreateValidationScopeSymbol,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSuccess', data: DamAuthor): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { initialized } = useDamConfigState()\nif (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n}\n\nconst { createDefault } = useAuthorFactory()\nconst author = ref<DamAuthor>(createDefault(initialized.damConfigExtSystem))\nconst dialog = ref(false)\nconst buttonLoading = ref(false)\n\nconst onClick = () => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n author.value = createDefault(initialized.damConfigExtSystem, true)\n author.value.name = props.initialValue\n dialog.value = true\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { v$ } = useAuthorValidation(author, props.validationScope)\nconst { t } = useI18n()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n if (buttonLoading.value) return\n try {\n buttonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await createAuthor(damClient, author.value)\n emit('onSuccess', res)\n showRecordWas('created')\n dialog.value = false\n if (!isUndefined(res.id) && !props.disableRedirect) {\n // router.push({ name: ROUTE.DAM.AUTHOR.DETAIL, params: { id: res.id } })\n }\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n buttonLoading.value = false\n }\n}\n\nconst { authorTypeOptions } = useAuthorType()\n</script>\n\n<template>\n <ABtnPrimary\n v-if=\"variant === 'button'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :disabled=\"disabled\"\n rounded=\"pill\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :disabled=\"disabled\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.author.button.add') }}\n </VTooltip>\n </VBtn>\n <VDialog v-model=\"dialog\">\n <VCard\n v-if=\"dialog\"\n width=\"500\"\n class=\"mt-0 mr-auto ml-auto\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.author.meta.create') }}\n </ADialogToolbar>\n <VCardText>\n <ASystemEntityScope\n :system=\"SYSTEM_CORE_DAM\"\n subject=\"author\"\n >\n <ARow>\n <AFormTextField\n v-model=\"author.name\"\n :label=\"t('common.damImage.author.model.name')\"\n :v=\"v$.author.name\"\n required\n data-cy=\"author-name\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormTextField\n v-model=\"author.identifier\"\n :label=\"t('common.damImage.author.model.identifier')\"\n :v=\"v$.author.identifier\"\n data-cy=\"author-identifier\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormValueObjectOptionsSelect\n v-model=\"author.type\"\n :label=\"t('common.damImage.author.model.type')\"\n :items=\"authorTypeOptions\"\n data-cy=\"author-type\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n </ASystemEntityScope>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport {\n useDamCachedAuthors,\n useDamCachedAuthorsForRemoteAutocomplete,\n} from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isArray } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/components/form/AFormRemoteAutocompleteWithCached.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChip from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChipConflicts from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue'\nimport { useAuthorSelectActions } from '@/components/damImage/uploadQueue/author/authorActions'\nimport { useAuthorFilter } from '@/components/damImage/uploadQueue/author/AuthorFilter'\nimport AuthorCreateButton from '@/components/damImage/uploadQueue/author/AuthorCreateButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n authorConflicts?: DocId[]\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n authorConflicts: undefined,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst { t } = useI18n()\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n required: requiredIf(requiredComputed.value),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst { fetchItemsMinimal } = useAuthorSelectActions()\n\nconst innerFilter = useAuthorFilter()\n\nconst addAuthor = async (id: null | DocId | undefined) => {\n if (!id) return\n if (!modelValueComputed.value.includes(id)) {\n modelValueComputed.value = [...modelValueComputed.value, ...[id]]\n }\n}\n\nconst addNewAuthorText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewAuthorText.value = newValue\n}\n\nconst { addManualToCachedAuthors } = useDamCachedAuthors()\n\nconst afterCreate = (author: DamAuthor) => {\n addManualToCachedAuthors(author)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, author.id]\n return\n }\n modelValueComputed.value = author.id\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n\nonMounted(() => {\n //\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <AFormRemoteAutocompleteWithCached\n v-model=\"modelValueComputed\"\n :use-cached=\"useDamCachedAuthorsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :inner-filter=\"innerFilter\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n :data-cy=\"dataCy\"\n item-title=\"name\"\n item-value=\"id\"\n @search-change=\"searchChange\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n </AFormRemoteAutocompleteWithCached>\n <div>\n <AuthorCreateButton\n variant=\"icon\"\n data-cy=\"add-author\"\n :initial-value=\"addNewAuthorText\"\n disable-redirect\n :disabled=\"disabled\"\n @on-success=\"afterCreate\"\n />\n </div>\n </div>\n <div\n v-if=\"!disabled && authorConflicts && authorConflicts.length > 0\"\n class=\"d-flex flex-column\"\n >\n <div>\n <span class=\"text-caption\">{{ t('common.damImage.author.conflicts') }}</span>\n </div>\n <div>\n <AuthorRemoteAutocompleteCachedAuthorChipConflicts\n v-for=\"authorId in authorConflicts\"\n :id=\"authorId\"\n :key=\"authorId\"\n class=\"mr-1 mt-1\"\n @add-author=\"addAuthor(authorId)\"\n />\n </div>\n </div>\n</template>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull } from '@/utils/common'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { fetchKeywordList, fetchKeywordListByIds } from '@/components/damImage/uploadQueue/api/keywordApi'\n\nexport const useKeywordSelectActions = () => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { initialized } = useDamConfigState()\n\n const mapToValueObject = (keyword: DamKeyword): ValueObjectOption<string> => ({\n title: keyword.name,\n value: keyword.id,\n })\n\n const mapToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n })\n\n const mapToValueObjects = (keywords: DamKeyword[]): ValueObjectOption<string>[] => {\n return keywords.map((keyword: DamKeyword) => mapToValueObject(keyword))\n }\n\n const mapToMinimals = (keywords: DamKeyword[]): DamKeywordMinimal[] => {\n return keywords.map((keyword: DamKeyword) => mapToMinimal(keyword))\n }\n\n const fetchItems = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchKeywordList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsMinimal = async (pagination: Pagination, filterBag: FilterBag) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToMinimals(await fetchKeywordList(damClient, initialized.damConfigExtSystem, pagination, filterBag))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n return mapToValueObjects(await fetchKeywordListByIds(damClient, initialized.damConfigExtSystem, ids))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n }\n}\n","import { reactive } from 'vue'\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, ENTITY)\n\nconst filter = reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n id: {\n ...makeFilter({ name: 'id' }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n reviewed: {\n ...makeFilter({ name: 'reviewed' }),\n },\n})\n\nexport function useKeywordListFilter() {\n return filter\n}\n\nexport function useKeywordFilter() {\n return reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n })\n}\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n }\n)\n\nconst { getCachedKeyword } = useDamCachedKeywords()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamKeywordMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedKeyword(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newKeywordNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n","import type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useKeywordFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamKeyword => {\n return {\n id: '',\n name: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n },\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 1,\n modifiedBy: 1,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport type { ValidationScope } from '@/types/Validation'\n\nconst { required, minLength } = useValidate()\n\nexport function useKeywordValidation(keyword: Ref<DamKeyword>, validationScope: ValidationScope = undefined) {\n const rules = computed(() => ({\n keyword: {\n name: {\n required,\n minLength: minLength(3),\n },\n },\n }))\n const v$ = useVuelidate(rules, { keyword }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { ValidationScope } from '@/types/Validation'\nimport { ADamKeywordCreateValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { useKeywordFactory } from '@/components/damImage/uploadQueue/keyword/KeywordFactory'\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useKeywordValidation } from '@/components/damImage/uploadQueue/keyword/keywordValidation'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { createKeyword, ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\n\nconst props = withDefaults(\n defineProps<{\n initialValue?: string\n disableRedirect?: boolean\n variant?: 'button' | 'icon'\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n disabled?: boolean | undefined\n validationScope?: ValidationScope\n }>(),\n {\n initialValue: '',\n disableRedirect: false,\n variant: 'button',\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: undefined,\n disabled: undefined,\n validationScope: ADamKeywordCreateValidationScopeSymbol,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSuccess', data: DamKeyword): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { initialized } = useDamConfigState()\nif (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n}\n\nconst { createDefault } = useKeywordFactory()\nconst keyword = ref<DamKeyword>(createDefault(initialized.damConfigExtSystem))\nconst dialog = ref(false)\nconst buttonLoading = ref(false)\n\nconst onClick = () => {\n if (isNull(initialized.damConfigExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n keyword.value = createDefault(initialized.damConfigExtSystem, true)\n keyword.value.name = props.initialValue\n dialog.value = true\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { v$ } = useKeywordValidation(keyword, props.validationScope)\nconst { t } = useI18n()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n if (buttonLoading.value) return\n try {\n buttonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await createKeyword(damClient, keyword.value)\n emit('onSuccess', res)\n showRecordWas('created')\n dialog.value = false\n if (!isUndefined(res.id) && !props.disableRedirect) {\n // router.push({ name: ROUTE.DAM.KEYWORD.DETAIL, params: { id: res.id } })\n }\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n buttonLoading.value = false\n }\n}\n</script>\n\n<template>\n <ABtnPrimary\n v-if=\"variant === 'button'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :disabled=\"disabled\"\n rounded=\"pill\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :disabled=\"disabled\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.keyword.button.add') }}\n </VTooltip>\n </VBtn>\n <VDialog v-model=\"dialog\">\n <VCard\n v-if=\"dialog\"\n width=\"500\"\n class=\"mt-0 mr-auto ml-auto\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.keyword.meta.create') }}\n </ADialogToolbar>\n <VCardText>\n <ASystemEntityScope\n :system=\"SYSTEM_CORE_DAM\"\n :subject=\"ENTITY\"\n >\n <ARow>\n <AFormTextField\n v-model=\"keyword.name\"\n :label=\"t('common.damImage.keyword.model.name')\"\n :v=\"v$.keyword.name\"\n required\n data-cy=\"keyword-name\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n </ASystemEntityScope>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, ref } from 'vue'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport { useKeywordSelectActions } from '@/components/damImage/uploadQueue/keyword/keywordActions'\nimport { useKeywordFilter } from '@/components/damImage/uploadQueue/keyword/KeywordFilter'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isArray } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/components/form/AFormRemoteAutocompleteWithCached.vue'\nimport { useDamCachedAuthorsForRemoteAutocomplete } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport KeywordRemoteAutocompleteCachedKeywordChip from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue'\nimport KeywordCreateButton from '@/components/damImage/uploadQueue/keyword/KeywordCreateButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n required: requiredIf(requiredComputed),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst { fetchItemsMinimal } = useKeywordSelectActions()\n\nconst innerFilter = useKeywordFilter()\n\nconst addNewKeywordText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewKeywordText.value = newValue\n}\n\nconst { addManualToCachedKeywords } = useDamCachedKeywords()\n\nconst afterCreate = (keyword: DamKeyword) => {\n addManualToCachedKeywords(keyword)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, keyword.id]\n return\n }\n modelValueComputed.value = keyword.id\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n</script>\n\n<template>\n <div class=\"d-flex\">\n <AFormRemoteAutocompleteWithCached\n v-model=\"modelValueComputed\"\n :use-cached=\"useDamCachedAuthorsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :inner-filter=\"innerFilter\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n item-title=\"name\"\n item-value=\"id\"\n :data-cy=\"dataCy\"\n @search-change=\"searchChange\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n </AFormRemoteAutocompleteWithCached>\n <div>\n <KeywordCreateButton\n variant=\"icon\"\n data-cy=\"add-keyword\"\n :initial-value=\"addNewKeywordText\"\n disable-redirect\n :disabled=\"disabled\"\n @on-success=\"afterCreate\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :asset-type=\"assetType\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"damConfigExtSystem[assetType].keywords.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].keywords.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"damConfigExtSystem[assetType].authors.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].authors.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText class=\"text-caption\">\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { isNull } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetMetadata from '@/components/damImage/uploadQueue/components/AssetMetadata.vue'\nimport { updateAssetMetadata } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\n\nwithDefaults(\n defineProps<{\n isActive: boolean\n dataCy?: string\n assetType: DamAssetType\n }>(),\n {\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, updateUploadStore } = storeToRefs(assetDetailStore)\nconst uploadQueueStore = useUploadQueuesStore()\n\nconst saveButtonLoading = ref(false)\n\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\n\nconst v$ = useVuelidate({}, {}, { $scope: ADamAssetMetadataValidationScopeSymbol })\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onSave = async () => {\n if (isNull(asset.value)) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await updateAssetMetadata(damClient, asset.value)\n if (updateUploadStore.value && !isNull(asset.value)) {\n await uploadQueueStore.updateFromDetail(asset.value)\n }\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper v-if=\"isActive\">\n <ABtnPrimary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n :loading=\"saveButtonLoading\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <AssetMetadata />\n</template>\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport type { RegionOfInterest } from '@/types/coreDam/Roi'\n\ninterface State {\n imageFile: null | AssetFileImage\n loader: boolean\n roi: null | RegionOfInterest\n timestampCropper: number\n timestampRoiPreviews: number\n}\n\nexport const useImageRoiStore = defineStore('damImageRoiStore', {\n state: (): State => ({\n imageFile: null,\n loader: false,\n roi: null,\n timestampCropper: Date.now(),\n timestampRoiPreviews: Date.now(),\n }),\n actions: {\n setImageFile(file: AssetFileImage | null) {\n this.imageFile = file\n },\n setRoi(roi: RegionOfInterest | null) {\n this.roi = roi\n },\n showLoader() {\n this.loader = true\n },\n hideLoader() {\n this.loader = false\n },\n forceReloadRoiPreviews() {\n this.timestampRoiPreviews = Date.now()\n },\n forceReloadCropper() {\n this.timestampCropper = Date.now()\n },\n reset() {\n this.imageFile = null\n this.loader = false\n this.roi = null\n this.timestampCropper = Date.now()\n this.timestampRoiPreviews = Date.now()\n },\n },\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useImageRoiStore, import.meta.hot))\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { rotateImage } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n imageId: DocId\n dataCy?: string\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'afterRotate'): void\n}>()\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst loading = ref(false)\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst rotate = async (angle: 90 | 270) => {\n try {\n loading.value = true\n await rotateImage(damClient, props.imageId, angle)\n showRecordWas('updated')\n emit('afterRotate')\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.rotate.rotateMainFileImage') }}\n </div>\n <div\n v-if=\"loading\"\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div v-else>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-right\"\n class=\"mr-2\"\n data-cy=\"button-rotate-right\"\n @click.stop=\"rotate(90)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateClockwise') }}\n </ABtnTertiary>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-left\"\n data-cy=\"button-rotate-left\"\n @click.stop=\"rotate(270)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateCounterclockwise') }}\n </ABtnTertiary>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\n// export interface AssetMetadataBulkItem {\n// id: DocId\n// title: string\n// description: string\n// described: boolean\n// }\n\nconst END_POINT = '/adm/v1/roi'\nconst END_POINT_IMAGE_ROI = '/adm/v1/image/:id/roi'\nexport const ENTITY = 'asset'\n\nexport const fetchRoi = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<RegionOfInterest>(client, END_POINT + '/:id', { id }, 'coreDam', ENTITY)\n\nexport const updateRoi = (client: () => AxiosInstance, id: DocId, data: RegionOfInterest) =>\n apiUpdateOne<RegionOfInterest>(client, data, END_POINT + '/:id', { id }, 'coreDam', ENTITY)\n\nexport const fetchImageRoiList = (\n client: () => AxiosInstance,\n imageId: DocId,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<any[]>(client, END_POINT_IMAGE_ROI, { id: imageId }, pagination, filterBag, 'coreDam', ENTITY)\n","<script lang=\"ts\" setup>\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { useI18n } from 'vue-i18n'\nimport { usePagination } from '@/composables/system/pagination'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { cloneDeep } from '@/utils/common'\nimport { onMounted } from 'vue'\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport AssetFileRotate from '@/components/damImage/uploadQueue/components/AssetFileRotate.vue'\nimport { fetchImageRoiList, fetchRoi } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nwithDefaults(\n defineProps<{\n isActive: boolean\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst imageRoiStore = useImageRoiStore()\nconst assetDetailStore = useAssetDetailStore()\n\nconst pagination = usePagination()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst loadRois = async () => {\n if (imageRoiStore.imageFile) {\n imageRoiStore.showLoader()\n const res = await fetchImageRoiList(damClient, imageRoiStore.imageFile.id, pagination, {})\n if (res.length > 0 && res[0].id) {\n const roi = await fetchRoi(damClient, res[0].id)\n imageRoiStore.setRoi(roi)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n}\n\nconst afterRotate = async () => {\n await loadRois()\n imageRoiStore.forceReloadRoiPreviews()\n imageRoiStore.forceReloadCropper()\n}\n\n// const activeSlotChange = async (slot: null | AssetSlot) => {\n// imageRoiStore.setRoi(null)\n// if (!slot || !assetFileIsImageFile(slot.assetFile)) return\n// imageRoiStore.showLoader()\n// const imageFileDetail = await fetchImageFile(slot.assetFile.id)\n// imageRoiStore.setImageFile(cloneDeep(imageFileDetail))\n// await loadRois()\n// imageRoiStore.forceReloadRoiPreviews()\n// imageRoiStore.forceReloadCropper()\n// }\n\nonMounted(async () => {\n imageRoiStore.reset()\n imageRoiStore.showLoader()\n if (\n assetDetailStore.asset &&\n assetDetailStore.asset.mainFile &&\n assetFileIsImageFile(assetDetailStore.asset.mainFile)\n ) {\n imageRoiStore.setImageFile(cloneDeep(assetDetailStore.asset.mainFile))\n await loadRois()\n }\n imageRoiStore.hideLoader()\n})\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper v-if=\"isActive\">\n <ABtnTertiary\n v-if=\"!imageRoiStore.loader\"\n @click.stop=\"imageRoiStore.forceReloadRoiPreviews()\"\n >\n {{ t('common.damImage.asset.detail.roi.refresh') }}\n </ABtnTertiary>\n </AssetDetailSidebarActionsWrapper>\n <div class=\"px-3\">\n <!-- <AssetDetailSlotSelect-->\n <!-- class=\"mt-4\"-->\n <!-- @active-slot-change=\"activeSlotChange\"-->\n <!-- />-->\n <div class=\"v-expansion-panel-title px-0\">\n {{ t('common.damImage.asset.detail.roi.title') }}\n </div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.description') }}\n </div>\n </div>\n <div\n v-if=\"imageRoiStore.loader\"\n class=\"w-100 h-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div\n v-else-if=\"imageRoiStore.roi\"\n class=\"crop-preview pa-2\"\n >\n <div\n v-for=\"item in imageRoiStore.roi?.links.image_roi_example\"\n :key=\"item.url\"\n class=\"pb-2\"\n >\n <div class=\"text-subtitle-2\">\n {{ item.title }}\n </div>\n <img\n :src=\"item.url + '?timestamp=' + imageRoiStore.timestampRoiPreviews\"\n :width=\"item.width\"\n :height=\"item.height\"\n alt=\"\"\n >\n </div>\n </div>\n <AssetFileRotate\n v-if=\"imageRoiStore.imageFile\"\n :image-id=\"imageRoiStore.imageFile.id\"\n class=\"mx-2\"\n @after-rotate=\"afterRotate\"\n />\n</template>\n\n<style lang=\"scss\">\n.crop-preview {\n width: 100%;\n\n img {\n max-width: 100%;\n height: auto;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { nextTick, onBeforeUnmount, onMounted } from 'vue'\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\n\nconst { mounted, unMounted } = useAssetDetailSidebarActionbar()\n\nonMounted(async () => {\n await nextTick()\n mounted()\n})\n\nonBeforeUnmount(() => {\n unMounted()\n})\n</script>\n\n<template>\n <div id=\"anzu-asset-detail-sidebar-actions\" />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport type { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetInfobox from '@/components/damImage/uploadQueue/components/AssetInfobox.vue'\nimport AssetDetailSidebarMetadata from '@/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\n\nwithDefaults(\n defineProps<{\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n dataCy?: string\n assetStatus: DamAssetStatus\n assetType: DamAssetType\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <AssetInfobox\n :asset-status=\"assetStatus\"\n :asset-main-file-status=\"assetMainFileStatus\"\n :asset-main-file-fail-reason=\"assetMainFileFailReason\"\n />\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <AssetDetailSidebarMetadata\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\" />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget />\n </div>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport type Cropper from 'cropperjs'\nimport { stringToFloat, stringToInt } from '@/utils/string'\n\nconst PRECISION = 3\n\nexport const regionToCrop = function (\n cropper: Cropper,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n const ratio = imageData.naturalHeight / originalImageHeight\n\n return {\n x: regionOfInterest.pointX * ratio,\n y: regionOfInterest.pointY * ratio,\n width: regionOfInterest.percentageWidth * imageData.naturalWidth,\n height: regionOfInterest.percentageHeight * imageData.naturalHeight,\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n }\n}\n\nexport const cropToRegion = function (\n cropper: Cropper,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n const data = cropper.getData()\n const ratio = imageData.naturalHeight / originalImageHeight\n\n let pointX = stringToInt((data.x / ratio).toFixed(PRECISION))\n if (pointX < 0) pointX = 0\n\n let pointY = stringToInt((data.y / ratio).toFixed(PRECISION))\n if (pointY < 0) pointY = 0\n\n let percentageWidth = stringToFloat((data.width / imageData.naturalWidth).toFixed(PRECISION))\n const validateWidth = percentageWidth * originalImageWidth + pointX\n if (validateWidth > originalImageWidth) {\n percentageWidth = percentageWidth - ((validateWidth - originalImageWidth) * 100) / originalImageWidth\n }\n\n let percentageHeight = stringToFloat((data.height / imageData.naturalHeight).toFixed(PRECISION))\n const validateHeight = percentageHeight * originalImageHeight + pointY\n if (validateHeight > originalImageHeight) {\n percentageHeight = percentageHeight - ((validateHeight - originalImageHeight) * 100) / originalImageHeight\n }\n\n regionOfInterest.pointX = pointX\n regionOfInterest.pointY = pointY\n regionOfInterest.percentageWidth = percentageWidth\n regionOfInterest.percentageHeight = percentageHeight\n\n return regionOfInterest\n}\n","/*!\n * Cropper.js v1.6.1\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-09-17T03:44:19.860Z\n */\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'cropper';\n\n// Actions\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw';\n\n// Classes\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n// Data keys\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n// Drag modes\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none';\n\n// Events\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel';\nvar EVENT_ZOOM = 'zoom';\n\n// Mime types\nvar MIME_TYPE_JPEG = 'image/jpeg';\n\n// RegExps\nvar REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^img|canvas$/i;\n\n// Misc\n// Inspired by the default width and height of a canvas element.\nvar MIN_CONTAINER_WIDTH = 200;\nvar MIN_CONTAINER_HEIGHT = 100;\n\nvar DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n};\n\nvar TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n/**\n * Check if the given value is not a number.\n */\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n};\n\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n}\n\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\nfunction forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n}\n\n/**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\nvar assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n};\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\nvar REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\nfunction setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n}\n\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\nfunction hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\nfunction addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n}\n\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\nfunction removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n}\n\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\nfunction toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n}\nvar REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\nfunction toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n}\n\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\nfunction getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n}\n\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\nfunction setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n}\n\n/**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\nfunction removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n}\nvar REGEXP_SPACES = /\\s\\s*/;\nvar onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n}();\n\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n}\n\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n}\n\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\nfunction dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n}\n\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\nfunction getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n}\nvar location = WINDOW.location;\nvar REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n/**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\nfunction isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n}\n\n/**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\nfunction addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n}\n\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\nfunction getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n}\n\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n}\n\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\nfunction getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n}\n\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\nfunction getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n}\n\n/**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\nfunction getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n}\n\n/**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\nfunction getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n}\nvar REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n/**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\nfunction dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n}\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n};\n\nvar preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n};\n\nvar events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n};\n\nvar handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n};\n\nvar change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n};\n\nvar methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n};\n\nvar AnotherCropper = WINDOW.Cropper;\nvar Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n return Cropper;\n}();\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport { Cropper as default };\n","<script setup lang=\"ts\" generic=\"T extends EventTarget = EventTarget\">\nimport Cropper from 'cropperjs'\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue'\nimport { isNull } from '@/utils/common'\nimport 'cropperjs/dist/cropper.css'\n\nconst props = withDefaults(\n defineProps<{\n // Library props\n src?: string\n alt?: string\n containerStyle?: { [key: string]: string } | undefined\n imgStyle?: { [key: string]: string } | undefined\n // CropperJS props\n aspectRatio?: number\n autoCrop?: boolean\n autoCropArea?: number\n background?: boolean\n center?: boolean\n checkCrossOrigin?: boolean\n checkOrientation?: boolean\n cropBoxMovable?: boolean\n cropBoxResizable?: boolean\n data?: Cropper.SetDataOptions | null\n dragMode?: Cropper.DragMode\n guides?: boolean\n highlight?: boolean\n initialAspectRatio?: number\n modal?: boolean\n movable?: boolean\n preview?: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | string\n responsive?: boolean\n restore?: boolean\n rotatable?: boolean\n scalable?: boolean\n toggleDragModeOnDblclick?: boolean\n viewMode?: Cropper.ViewMode\n wheelZoomRatio?: number\n zoomOnTouch?: boolean\n zoomOnWheel?: boolean\n zoomable?: boolean\n // Size limitation\n minCanvasWidth?: number\n minCanvasHeight?: number\n minContainerWidth?: number\n minContainerHeight?: number\n minCropBoxWidth?: number\n minCropBoxHeight?: number\n // callbacks\n ready?: null | ((event: Cropper.ReadyEvent<T>) => void)\n crop?: null | ((event: Cropper.CropEvent<T>) => void)\n cropend?: null | ((event: Cropper.CropEndEvent<T>) => void)\n cropmove?: null | ((event: Cropper.CropMoveEvent<T>) => void)\n cropstart?: null | ((event: Cropper.CropStartEvent<T>) => void)\n zoom?: null | ((event: Cropper.ZoomEvent<T>) => void)\n }>(),\n {\n containerStyle: undefined,\n src: '',\n alt: '',\n imgStyle: undefined,\n aspectRatio: NaN,\n autoCrop: true,\n autoCropArea: 0.8,\n background: true,\n center: true,\n checkCrossOrigin: true,\n checkOrientation: true,\n cropBoxMovable: true,\n cropBoxResizable: true,\n data: null,\n dragMode: 'crop',\n guides: true,\n highlight: true,\n initialAspectRatio: NaN,\n modal: true,\n movable: true,\n preview: '',\n responsive: true,\n restore: true,\n rotatable: true,\n scalable: true,\n toggleDragModeOnDblclick: true,\n viewMode: 0,\n wheelZoomRatio: 0.1,\n zoomOnTouch: true,\n zoomable: true,\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minContainerWidth: 200,\n minContainerHeight: 100,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n ready: null,\n crop: null,\n cropend: null,\n cropmove: null,\n cropstart: null,\n zoom: null,\n }\n)\n\nconst cropperInstance = ref<InstanceType<typeof Cropper> | null>(null)\nconst imgEl = ref<HTMLImageElement | HTMLCanvasElement | null>(null)\nconst loading = ref(true)\n\nconst enable = () => {\n cropperInstance.value?.enable()\n}\n\nconst disable = () => {\n cropperInstance.value?.disable()\n}\n\nconst destroy = () => {\n cropperInstance.value?.destroy()\n}\n\nconst getImageData = () => {\n return cropperInstance.value?.getImageData()\n}\n\nconst getData = () => {\n return cropperInstance.value?.getData()\n}\n\nconst setData = (data: Cropper.SetDataOptions) => {\n return cropperInstance.value?.setData(data)\n}\n\ndefineExpose({\n enable,\n disable,\n destroy,\n getImageData,\n getData,\n setData,\n})\n\nonMounted(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { containerStyle, src, alt, imgStyle, ...data } = props\n const propsOptions = data as Record<string, any>\n const options: Record<string, any> = {}\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(propsOptions, key) && propsOptions[key] !== undefined) {\n options[key] = propsOptions[key]\n }\n }\n nextTick(() => {\n if (!isNull(imgEl.value)) {\n cropperInstance.value = new Cropper(imgEl.value as any, options)\n loading.value = false\n }\n })\n})\n\nonUnmounted(() => {\n destroy()\n})\n</script>\n<template>\n <div :style=\"containerStyle\">\n <VProgressCircular\n v-if=\"loading\"\n indeterminate\n />\n <div :style=\"{ opacity: loading ? 0 : undefined }\">\n <img\n ref=\"imgEl\"\n :alt=\"alt\"\n :src=\"src\"\n :style=\"imgStyle\"\n >\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { updateRoi } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { cropToRegion, regionToCrop } from '@/components/damImage/uploadQueue/composables/cropperJsService'\nimport ACropperjs from '@/components/ACropperjs.vue'\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst DAM_IMAGE_ASPECT_RATIO = 16 / 9\nconst cropperContainerStyle = { overflow: 'hidden', maxHeight: 'calc(100vh - 160px)' }\n\nconst imageRoiStore = useImageRoiStore()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst cropper = ref<any>(null) // fix any\n\nconst imageUrl = computed(() => {\n if (imageRoiStore.imageFile && imageRoiStore.imageFile.links?.image_detail) {\n return imageRoiStore.imageFile.links.image_detail.url\n }\n return ''\n})\n\nconst enableCropper = () => {\n if (cropper.value) {\n cropper.value.enable()\n }\n}\n\nconst disableCropper = () => {\n if (cropper.value) {\n cropper.value.disable()\n }\n}\n\nconst applyRegionOfInterest = () => {\n if (cropper.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n enableCropper()\n const data = regionToCrop(\n cropper.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n cropper.value.setData(data)\n disableCropper()\n }\n}\n\nconst saveRoi = async () => {\n if (cropper.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n const roi = cropToRegion(\n cropper.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n try {\n imageRoiStore.showLoader()\n await updateRoi(damClient, roi.id, roi)\n showRecordWas('updated')\n setTimeout(() => {\n imageRoiStore.forceReloadRoiPreviews()\n }, 2000)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n imageRoiStore.hideLoader()\n }\n }\n}\n\nconst cropperReady = () => {\n applyRegionOfInterest()\n enableCropper()\n}\n\nconst cropperEnd = () => {\n saveRoi()\n}\n\nconst showCropper = computed(() => {\n if (imageRoiStore.imageFile && imageRoiStore.imageFile.links?.image_detail && !imageRoiStore.loader) {\n return true\n }\n return false\n})\n\nonUnmounted(() => {\n if (cropper.value) {\n cropper.value.destroy()\n cropper.value = null\n }\n})\n</script>\n\n<template>\n <VProgressCircular\n v-if=\"imageRoiStore.loader\"\n indeterminate\n color=\"primary\"\n />\n <ACropperjs\n v-if=\"showCropper\"\n :key=\"imageRoiStore.timestampCropper\"\n ref=\"cropper\"\n :aspect-ratio=\"DAM_IMAGE_ASPECT_RATIO\"\n :background=\"false\"\n :check-cross-origin=\"false\"\n :container-style=\"cropperContainerStyle\"\n :ready=\"cropperReady\"\n :cropend=\"cropperEnd\"\n :src=\"imageUrl\"\n :view-mode=\"1\"\n :zoom-on-wheel=\"false\"\n canvas\n responsive\n />\n</template>\n\n<style lang=\"scss\">\n.cropper-modal {\n background-color: #f1f4f6;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetDetailDialogSidebar from '@/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport AssetImageRoiSelect from '@/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue'\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, dialog, activeTab, loading } = storeToRefs(assetDetailStore)\n\nconst closeDialog = () => {\n assetDetailStore.setAsset(null)\n dialog.value = false\n}\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst onImageLoad = () => {\n // imageLoading.value = false\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatus.Default\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (asset.value?.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_detail) {\n return {\n url: asset.value.mainFile.links.image_detail.url,\n width: asset.value.mainFile.links.image_detail.width,\n height: asset.value.mainFile.links.image_detail.height,\n bgColor:\n assetFileIsImageFile(asset.value.mainFile) &&\n asset.value.mainFile.imageAttributes &&\n asset.value.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\nconst toolbarTitle = computed(() => {\n if (!asset.value) return ''\n return asset.value.texts.displayTitle\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n</script>\n\n<template>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n fullscreen\n >\n <AssetDetailDialogLoader\n v-if=\"loading\"\n @close-dialog=\"closeDialog\"\n />\n <VCard\n v-else-if=\"asset\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div>DAM: {{ toolbarTitle }}</div>\n </div>\n <VSpacer />\n <div>\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImageRoiSelect />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n use-component\n @load=\"onImageLoad\"\n @error=\"onImageLoad\"\n />\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <AssetDetailDialogSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n />\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { ref } from 'vue'\n\nconst uploadQueueDialog = ref(false)\nconst uploadQueueSidebar = ref(false)\n\nexport function useUploadQueueDialog () {\n const toggleUploadQueueSidebar = () => {\n uploadQueueSidebar.value = !uploadQueueSidebar.value\n }\n\n return {\n toggleUploadQueueSidebar,\n uploadQueueDialog,\n uploadQueueSidebar,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { dateTimePretty } from '@/utils/datetime'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched } = storeToRefs(assetDetailStore)\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst assetType = computed(() => {\n return DamAssetType.Image\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"item\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"item.customData\"\n :asset-type=\"assetType\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"damConfigExtSystem[assetType].keywords.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"item.keywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"damConfigExtSystem[assetType].keywords.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"damConfigExtSystem[assetType].authors.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"item.authors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"damConfigExtSystem[assetType].authors.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"asset\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText class=\"text-caption\">\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport UploadQueueDialogSingleSidebarMetadataContent from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n isActive: boolean\n dataCy?: string\n assetType: DamAssetType\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst v$ = useVuelidate({}, {}, { $scope: ADamAssetMetadataValidationScopeSymbol })\n\nconst { showValidationError } = useAlerts()\n\nconst onSave = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSave')\n}\n\nconst onSaveAndApply = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSaveAndApply')\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper v-if=\"isActive\">\n <ABtnSecondary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnSecondary>\n <ABtnPrimary\n type=\"submit\"\n class=\"mx-2\"\n data-cy=\"button-save-and-apply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <UploadQueueDialogSingleSidebarMetadataContent :queue-key=\"queueKey\" />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport type { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\nimport UploadQueueDialogSingleSidebarMetadata from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n enableRoiTab: boolean\n showFileInfo: boolean\n dataCy?: string\n assetStatus: DamAssetStatus\n assetType: DamAssetType\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage && enableRoiTab\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <UploadQueueDialogSingleSidebarMetadata\n :queue-key=\"queueKey\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n @on-save=\"emit('onSave')\"\n @on-save-and-apply=\"emit('onSaveAndApply')\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\" />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n isUploading: boolean\n dialogMaxWidth?: number\n buttonSize?: number\n dataCy?: string\n }>(),\n {\n dialogMaxWidth: 300,\n buttonSize: 26,\n dataCy: 'button-stop',\n }\n)\nconst emit = defineEmits<{\n (e: 'confirm'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!props.isUploading) {\n emit('confirm')\n return\n }\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('confirm')\n dialog.value = false\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n variant=\"flat\"\n :data-cy=\"dataCy\"\n icon\n :width=\"buttonSize\"\n :height=\"buttonSize\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.stop') }}\n </VTooltip>\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :width=\"500\"\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.upload.stopConfirmQuestion') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.damImage.upload.stop') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { type AssetDetailItemDto, DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport { AssetFileFailReason, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport AssetImageRoiSelect from '@/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport { dateTimeNow } from '@/utils/datetime'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { bulkUpdateAssetsMetadata, fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingleSidebar from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport { isNull, isString } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n fileInputKey: number\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onApply', items: ImageCreateUpdateAware[]): void\n}>()\n\nconst { showErrorsDefault, showRecordWas } = useAlerts()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab, loading, asset: assetDetail } = storeToRefs(assetDetailStore)\nconst enableRoiTab = ref(false)\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst asset = computed<AssetDetailItemDto | null>(() => {\n if (!item.value || !item.value.assetId) return null\n if (isDone.value && assetDetail.value) return assetDetail.value\n return {\n id: item.value.assetId,\n texts: {\n displayTitle: '',\n },\n attributes: {\n assetType: item.value.assetType,\n assetStatus: item.value.assetStatus,\n },\n flags: {\n described: false,\n visible: false,\n },\n licence: item.value.licenceId,\n mainFile: null,\n keywords: [],\n authors: [],\n podcasts: [],\n metadata: {\n authorSuggestions: {},\n keywordSuggestions: {},\n customData: {},\n },\n distributionCategory: null,\n assetFileProperties: {\n distributesInServices: [],\n slotNames: [],\n fromRss: false,\n width: 0,\n height: 0,\n },\n _resourceName: 'asset',\n _system: 'coreDam',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n }\n})\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst onImageLoad = () => {\n // imageLoading.value = false\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatus.Default\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (item.value?.imagePreview) {\n return {\n url: item.value.imagePreview.url,\n width: item.value.imagePreview.requestedWidth || undefined,\n height: item.value.imagePreview.requestedHeight || undefined,\n bgColor:\n assetFileIsImageFile(asset.value?.mainFile) &&\n asset.value?.mainFile.imageAttributes &&\n asset.value?.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n\nconst processing = computed(() => {\n return (\n !isNull(item.value) && [UploadQueueItemStatus.Processing, UploadQueueItemStatus.Loading].includes(item.value.status)\n )\n})\nconst waiting = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Waiting\n})\nconst isDone = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploaded\n})\nconst showDone = computed(() => {\n return !props.disableDoneAnimation && isDone.value\n})\nconst uploading = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return item.value?.progress.progressPercent\n})\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n assetDetailStore.setAsset(null)\n uploadQueueDialog.value = false\n}\n\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst onSave = async () => {\n if (items.value.length === 0) return\n // saveAndCloseButtonLoading.value = true\n // v$.value.$touch()\n // if (v$.value.$invalid) {\n // showValidationError()\n // saveAndCloseButtonLoading.value = false\n // return\n // }\n try {\n await bulkUpdateAssetsMetadata(damClient, items.value)\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n // saveAndCloseButtonLoading.value = false\n }\n}\n\nconst onSaveAndApply = async () => {\n if (items.value.length === 0) return\n // saveAndCloseButtonLoading.value = true\n // v$.value.$touch()\n // if (v$.value.$invalid) {\n // showValidationError()\n // saveAndCloseButtonLoading.value = false\n // return\n // }\n let description = ''\n let source = ''\n try {\n const assetsMetadataRes = await bulkUpdateAssetsMetadata(damClient, items.value)\n if (!assetsMetadataRes[0]) {\n throw new Error('Fatal error updating asset metadata')\n }\n showRecordWas('updated')\n if (isString(assetsMetadataRes[0].customData?.description)) {\n description = assetsMetadataRes[0].customData.description.trim()\n }\n if (assetsMetadataRes[0].authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, assetsMetadataRes[0].authors)\n source = authorsRes.map((author) => author.name).join(', ')\n }\n emit(\n 'onApply',\n items.value.map((item) => {\n return {\n texts: {\n description: description,\n source: source,\n },\n dam: {\n damId: item.fileId ?? '',\n regionPosition: 0,\n },\n position: 1,\n }\n })\n )\n\n await onStopConfirm()\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n // saveAndCloseButtonLoading.value = false\n }\n}\n\nwatch(\n isDone,\n async (newValue) => {\n if (!newValue || !item.value?.assetId) return\n try {\n const res = await fetchAsset(damClient, item.value.assetId)\n assetDetailStore.setAsset(res)\n enableRoiTab.value = true\n } catch (e) {\n showErrorsDefault(e)\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n activeTab.value = AssetDetailTabImageWithRoi.Info\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"uploadQueueDialog\"\n fullscreen\n >\n <AssetDetailDialogLoader\n v-if=\"loading || !item\"\n @close-dialog=\"onStopConfirm\"\n />\n <VCard\n v-else-if=\"item\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n <VSpacer />\n <div>\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI && enableRoiTab\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImageRoiSelect />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <div class=\"position-relative\">\n <AssetImage\n v-if=\"item\"\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"showDone\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n @load=\"onImageLoad\"\n @error=\"onImageLoad\"\n />\n <div\n v-if=\"item && item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item && item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <UploadQueueDialogSingleSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :queue-key=\"queueKey\"\n :enable-roi-tab=\"enableRoiTab\"\n :show-file-info=\"enableRoiTab\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n @on-save=\"onSave\"\n @on-save-and-apply=\"onSaveAndApply\"\n />\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport { cloneDeep, isNull, isString, isUndefined } from '@/utils/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport { createImage, deleteImage, fetchImage, updateImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport ImageDetailDialogMetadata from '@/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { computed, inject, ref, type ShallowRef, toRaw, watch } from 'vue'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport { fetchAsset, fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingle from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport type { VBtn } from 'vuetify/components'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n disableOnClickMenu: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n}>()\n\nconst imageWidgetExtSystemConfig = inject<ShallowRef<DamExtSystemConfig> | undefined>(\n ImageWidgetExtSystemConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetExtSystemConfig)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst { t } = useI18n()\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst imageStore = useImageStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst resImage = ref<null | ImageAware>(null)\nconst clickMenuOpened = ref(false)\nconst assetSelectDialog = ref(false)\nconst metadataDialog = ref(false)\nconst metadataDialogSaving = ref(false)\nconst metadataDialogLoading = ref(false)\n\nconst withoutImage = computed(() => {\n return isNull(props.modelValue)\n})\n\n// const { image, modelValue } = toRefs(props)\n\nconst resolvedSrc = ref('')\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst enabledInteractionComputed = computed(() => {\n return true\n})\n\nconst imageLoaded = computed(() => {\n return !isNull(resImage.value)\n})\n\nconst actionEditMeta = () => {\n imageStore.setImageDetail(toRaw(resImage.value))\n metadataDialog.value = true\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst onDrop = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\nconst onFileInput = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetExtSystemConfig.value\n)\n\nconst reload = async (newImage: ImageAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = imagePlaceholderPath\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n }\n return\n }\n}\n\nconst reset = () => {\n resolvedSrc.value = imagePlaceholderPath\n resImage.value = null\n emit('update:modelValue', null)\n}\n\nwatch(\n [() => props.image, () => props.modelValue],\n async ([newImage, newImageId]) => {\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n metadataDialogLoading.value = true\n imageStore.setImageDetail(null)\n metadataDialog.value = true\n let description = ''\n let source = ''\n if (data.type === 'asset') {\n if (!data.value[0] || !data.value[0].mainFile) return\n try {\n const assetRes = await fetchAsset(damClient, data.value[0].id)\n if (isString(assetRes.metadata.customData?.description)) {\n description = assetRes.metadata.customData.description.trim()\n }\n if (assetRes.authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, assetRes.authors)\n source = authorsRes.map((author) => author.name).join(', ')\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n const image: ImageCreateUpdateAware = {\n texts: {\n description: description,\n source: source,\n },\n dam: {\n damId: data.value[0].mainFile.id,\n regionPosition: 0,\n },\n position: 1,\n }\n if (!isNull(props.modelValue)) {\n image.id = props.modelValue\n }\n imageStore.setImageDetail(image)\n metadataDialogLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = true\n try {\n const asset = await fetchAssetByFileId(damClient, assetFileId)\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onMetadataDialogClose = () => {\n imageStore.setImageDetail(null)\n metadataDialog.value = false\n}\n\nconst onMetadataDialogConfirm = async () => {\n if (isNull(imageStore.imageDetail)) return\n metadataDialogSaving.value = true\n try {\n const res = imageStore.imageDetail.id\n ? await updateImage(imageClient, imageStore.imageDetail.id, imageStore.imageDetail)\n : await createImage(imageClient, imageStore.imageDetail)\n metadataDialog.value = false\n emit('update:modelValue', res.id)\n imageStore.setImageDetail(null)\n reload(res, res.id, true)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst onImageDelete = async () => {\n if (isNull(props.modelValue)) return\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, props.modelValue)\n reset()\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n reset()\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (!items[0]) return\n\n if (!isNull(props.modelValue)) {\n items[0].id = props.modelValue\n }\n imageStore.setImageDetail(items[0])\n metadataDialog.value = true\n}\n\nconst expandedUploadButton = ref<InstanceType<typeof AFileInput> | null>(null)\n\nconst onDropzoneClick = () => {\n if (!props.expandOptions) {\n clickMenuOpened.value = true\n return\n }\n expandedUploadButton.value?.activate()\n}\n</script>\n\n<template>\n <div class=\"a-image-widget\">\n <div class=\"a-image-widget__options\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div v-show=\"enabledInteractionComputed\">\n <div\n v-if=\"expandOptions\"\n class=\"d-flex flex-row\"\n >\n <VBtn\n v-if=\"imageLoaded\"\n class=\"mr-2 mb-2\"\n @click=\"actionEditMeta\"\n >\n {{ t('common.damImage.image.meta.edit') }}\n </VBtn>\n <VBtn\n class=\"mr-2 mb-2\"\n @click=\"actionLibrary\"\n >\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VBtn>\n <AFileInput\n ref=\"expandedUploadButton\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn v-bind=\"fileInputProps\">\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInput>\n </div>\n <VBtn\n v-else\n variant=\"text\"\n size=\"x-small\"\n icon\n >\n <VIcon icon=\"mdi-dots-horizontal\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.damImage.image.button.options') }}\n </VTooltip>\n <VMenu\n v-model=\"clickMenuOpened\"\n activator=\"parent\"\n location=\"bottom right\"\n eager\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-if=\"imageLoaded\"\n @click=\"actionEditMeta\"\n >\n <VListItemTitle>{{ t('common.damImage.image.meta.edit') }}</VListItemTitle>\n </VListItem>\n <VListItem @click=\"actionLibrary\">\n <VListItemTitle>\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VListItemTitle>\n </VListItem>\n <AFileInput\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VListItem @click.stop=\"fileInputProps.onClick\">\n {{ t('common.damImage.image.button.upload') }}\n </VListItem>\n </template>\n </AFileInput>\n <VListItem\n v-if=\"imageLoaded\"\n @click=\"onImageDelete\"\n >\n <VListItemTitle>{{ t('common.damImage.image.button.removeImage') }}</VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n </div>\n <div class=\"position-relative\">\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <AImageDropzone\n variant=\"fill\"\n transparent\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n :hide-text=\"!withoutImage\"\n @on-click=\"onDropzoneClick\"\n @on-drop=\"onDrop\"\n />\n </div>\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :asset-licence-id=\"licenceId\"\n :min-count=\"1\"\n :max-count=\"1\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n <ImageDetailDialogMetadata\n v-model=\"metadataDialog\"\n :saving=\"metadataDialogSaving\"\n :loading=\"metadataDialogLoading\"\n @edit-asset=\"onEditAsset\"\n @on-confirm=\"onMetadataDialogConfirm\"\n @on-close=\"onMetadataDialogClose\"\n />\n <AssetDetailDialog />\n <UploadQueueDialogSingle\n v-if=\"uploadQueueDialog\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-apply=\"onAssetUploadConfirm\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/types/common'\nimport { onMounted, provide, ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageAware } from '@/types/ImageAware'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport ImageWidgetInner from '@/components/damImage/uploadQueue/components/ImageWidgetInner.vue'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n disableOnClickMenu: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n initialized,\n loadDamConfigExtSystem,\n damConfigExtSystem,\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n} = useDamConfigState(damClient)\n\nonMounted(async () => {\n const promises: Promise<any>[] = []\n if (!initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n if (initialized.damConfigExtSystem !== props.extSystem) {\n promises.push(loadDamConfigExtSystem(props.extSystem))\n promises.push(loadDamConfigAssetCustomFormElements(props.extSystem))\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetExtSystemConfig, damConfigExtSystem)\n</script>\n\n<template>\n <ImageWidgetInner\n v-if=\"status === 'ready'\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-image-widget';\n\n.#{$class-name-root} {\n &__options {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { computed } from 'vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport type { DocId } from '@/types/common'\nimport { isNull, isUndefined } from '@/utils/common'\nimport AActionDeleteButton from '@/components/buttons/action/AActionDeleteButton.vue'\nimport { HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useI18n } from 'vue-i18n'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n disableDraggable: boolean\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'removeItem', index: number): void\n}>()\n\nconst imageStore = useImageStore()\nconst { t } = useI18n()\n\nconst image = computed(() => imageStore.images[props.index])\n\nconst { v$ } = useImageValidation(image, AImageMetadataValidationScopeSymbol)\n\nconst onEditAsset = () => {\n if (isNull(image.value) || isUndefined(image.value)) return\n emit('editAsset', image.value.dam.damId)\n}\n\nconst removeItem = () => {\n emit('removeItem', props.index)\n}\n</script>\n\n<template>\n <div class=\"asset-list-tiles__item\">\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <div class=\"d-flex justify-md-space-between align-center\">\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n </div>\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n />\n <VRow dense>\n <VCol class=\"d-flex justify-space-between mt-1\">\n <VBtn\n variant=\"text\"\n size=\"small\"\n class=\"mb-2\"\n @click.stop=\"onEditAsset\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n <AActionDeleteButton\n variant=\"icon\"\n :size=\"30\"\n button-class=\"\"\n @delete-record=\"removeItem\"\n />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image.texts.source\"\n />\n </VCol>\n </VRow>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-list-tiles--thumbnail.a-sortable-widget__group .asset-list-tiles__item img:not(.img-svg) {\n padding: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatus } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\nimport { type UploadQueueItem, UploadQueueItemStatus, type UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport ATableCopyIdButton from '@/components/buttons/table/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/utils/file'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: string\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst { t } = useI18n()\n\nconst processing = computed(() => {\n return [UploadQueueItemStatus.Processing, UploadQueueItemStatus.Loading].includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatus.Default\n return props.item.assetStatus\n})\n\nconst { damConfigExtSystem } = useDamConfigState()\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return [UploadQueueItemStatus.Loading, UploadQueueItemStatus.Waiting, UploadQueueItemStatus.Uploading].includes(\n props.item.status\n )\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <div\n v-if=\"item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n </div>\n <div>\n <div v-if=\"item.isDuplicate\" />\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showCancel\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <!-- <AActionDeleteButton-->\n <!-- variant=\"icon\"-->\n <!-- :disabled=\"!item.canEditMetadata && !item.isDuplicate\"-->\n <!-- button-class=\"\"-->\n <!-- @delete-record=\"remove\"-->\n <!-- />-->\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n dense\n class=\"my-2 mb-3 mt-0 text-caption\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\"> ({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.isDuplicate\"\n class=\"text-caption text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"customData\"\n :asset-type=\"assetType\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"damConfigExtSystem[assetType].keywords.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].keywords.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"damConfigExtSystem[assetType].authors.enabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n clearable\n multiple\n :required=\"damConfigExtSystem[assetType].authors.required\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n modelValue: { [key: string]: any }\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'fillEmptyField', data: { assetType: DamAssetType; elementProperty: string; value: any }): void\n (e: 'replaceField', data: { assetType: DamAssetType; elementProperty: string; value: any }): void\n}>()\n\nconst { t } = useI18n()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n}\n\nconst fillEmptyField = (elementProperty: string, value: any) => {\n emit('fillEmptyField', { assetType: props.assetType, elementProperty, value })\n}\nconst replaceField = (elementProperty: string, value: any) => {\n emit('replaceField', { assetType: props.assetType, elementProperty, value })\n}\n\nconst { damConfigAssetCustomFormElements } = useDamConfigState()\n\nconst elements = computed(() => {\n return damConfigAssetCustomFormElements.value[props.assetType]\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <VRow\n v-for=\"element in elements\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <div v-if=\"element.attributes.readonly\" />\n <div\n v-else\n class=\"d-flex\"\n >\n <ACustomDataFormElement\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </VCol>\n </VRow>\n </div>\n</template>\n","import type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\n\nexport function useUploadQueueMassOperations(queueKey: UploadQueueKey) {\n const uploadQueuesStore = useUploadQueuesStore()\n\n const replaceEmptyCustomDataValue = (\n data: { assetType: DamAssetType; elementProperty: string; value: any },\n forceReplace = false\n ) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item.assetType !== data.assetType) continue\n if (\n forceReplace ||\n isUndefined(item.customData[data.elementProperty]) ||\n item.customData[data.elementProperty] === ''\n ) {\n item.customData[data.elementProperty] = data.value\n }\n }\n }\n\n const replaceEmptyKeywords = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.keywords) || item.keywords.length === 0) {\n item.keywords = value\n }\n }\n }\n\n const replaceEmptyAuthors = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.authors) || item.authors.length === 0) {\n item.authors = value\n }\n }\n }\n\n return {\n replaceEmptyCustomDataValue,\n replaceEmptyKeywords,\n replaceEmptyAuthors,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { useUploadQueueMassOperations } from '@/components/damImage/uploadQueue/composables/uploadQueueMassOperations'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n }>(),\n {}\n)\n\nconst massOperationsData = ref({ image: {}, video: {}, audio: {}, document: {} })\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\nconst panels = ref<Array<string>>(['general'])\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { replaceEmptyCustomDataValue, replaceEmptyAuthors, replaceEmptyKeywords } = useUploadQueueMassOperations(\n props.queueKey\n)\n\nconst fillEmptyField = (data: { assetType: DamAssetType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (forceReplace) {\n replaceAuthors()\n replaceKeywords()\n return\n }\n fillEmptyAuthors()\n fillEmptyKeywords()\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return uploadQueuesStore.getQueueItemsTypes(props.queueKey)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-caption pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted } from 'vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem, UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport UploadQueueItemEditable from '@/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue'\nimport AssetQueueSelectedSidebar from '@/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DocId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n massOperations: boolean\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'showDetail', data: DocId): void\n}>()\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst list = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst cancelItem = (data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }) => {\n uploadQueuesStore.stopItemUpload(data.queueKey, data.item, data.index)\n}\n\nconst removeItem = (index: number) => {\n uploadQueuesStore.removeByIndex(props.queueKey, index)\n}\n\nconst { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\nonMounted(() => {\n list.value.forEach((item) => {\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n })\n fetchCachedKeywords()\n fetchCachedAuthors()\n})\n</script>\n\n<template>\n <div\n class=\"asset-queue-editable\"\n :class=\"{ 'asset-queue-editable--sidebar-active': massOperations }\"\n >\n <div class=\"asset-queue-editable__left\">\n <div class=\"overflow-y-auto overflow-x-hidden h-100\">\n <VRow class=\"dam-upload-queue dam-upload-queue--editable pa-2 mb-5\">\n <UploadQueueItemEditable\n v-for=\"(item, index) in list\"\n :key=\"item.key\"\n v-model:customData=\"item.customData\"\n v-model:keywords=\"item.keywords\"\n v-model:authors=\"item.authors\"\n :item=\"item\"\n :index=\"index\"\n :queue-key=\"queueKey\"\n :disable-done-animation=\"disableDoneAnimation\"\n @cancel-item=\"cancelItem\"\n @remove-item=\"removeItem\"\n @show-detail=\"emit('showDetail', $event)\"\n />\n </VRow>\n </div>\n </div>\n <div\n v-if=\"list.length > 0\"\n class=\"asset-queue-editable__sidebar system-border-l\"\n >\n <AssetQueueSelectedSidebar :queue-key=\"queueKey\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/components/damImage/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { computed, ref, toRaw } from 'vue'\nimport { useTheme } from '@/composables/themeSettings'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/composables/system/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n} from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onFilesInput', files: File[]): void\n (e: 'onApply', items: ImageCreateUpdateAware[]): void\n}>()\n\nconst { uploadQueueDialog, uploadQueueSidebar, toggleUploadQueueSidebar } = useUploadQueueDialog()\n\nconst imageStore = useImageStore()\nconst { maxPosition } = storeToRefs(imageStore)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst v$ = useVuelidate()\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = false\n}\n\nconst onSave = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n console.error(error)\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst metadataMap = async (queueItems: UploadQueueItem[], bulkItems: AssetMetadataBulkItem[]) => {\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n bulkItems.forEach((bulkItem) => {\n assetMetadataMap.set(bulkItem.id, {\n description: isString(bulkItem.customData?.description) ? bulkItem.customData.description.trim() : '',\n authorIds: bulkItem.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, [...authorIdsToFetch])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n const queueItemsWithAssetId = queueItems.filter(\n (queueItem) => !isNull(queueItem.assetId) && !isNull(queueItem.fileId)\n )\n\n return queueItemsWithAssetId.map((queueItem) => {\n maxPosition.value++\n const description = assetMetadataMap.get(queueItem.assetId!)?.description\n const authorNames: string[] = []\n assetMetadataMap.get(queueItem.assetId!)?.authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n return {\n key: generateUUIDv1(),\n texts: {\n description: description ?? '',\n source: authorNames.join(', '),\n },\n dam: {\n damId: queueItem.fileId as DocId,\n regionPosition: 0,\n },\n position: maxPosition.value,\n }\n })\n}\n\nconst onSaveAndApply = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n const res = await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n const mapped = await metadataMap(itemsRaw, res)\n emit('onApply', mapped)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading, dialog, updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n try {\n assetDetailStore.setAsset(null)\n loading.value = true\n dialog.value = true\n updateUploadStore.value = true\n assetDetailStore.setAsset(await fetchAsset(damClient, id))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 system-border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2 d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-caption d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n @files-input=\"emit('onFilesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n tabindex=\"-1\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n @on-drop=\"emit('onDrop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport { computed, inject, nextTick, onMounted, ref, type ShallowRef, toRaw } from 'vue'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport ImageWidgetMultipleItem from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue'\nimport { storeToRefs } from 'pinia'\nimport { bulkUpdateImages, deleteImage, fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport UploadQueueDialog from '@/components/damImage/uploadQueue/components/UploadQueueDialog.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { fetchAssetByFileId, fetchAssetListByIds } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { CHOSEN_CLASS, DRAG_CLASS, GHOST_CLASS, GROUP_CLASS, HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useSortable, type UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport { AImageMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n disableDraggable?: boolean\n widgetIdentifierId?: string | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n width: undefined,\n disableDraggable: false,\n widgetIdentifierId: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst assetSelectDialog = ref(false)\n\nconst imageWidgetExtSystemConfig = inject<ShallowRef<DamExtSystemConfig> | undefined>(\n ImageWidgetExtSystemConfig,\n undefined\n)\n\nif (isUndefined(imageWidgetExtSystemConfig)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst uploadButtonComponent = ref<InstanceType<any> | null>(null)\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetExtSystemConfig.value\n)\n\nconst { t } = useI18n()\n\nconst imagesLoading = ref(false)\n\nconst imageStore = useImageStore()\nconst { images, maxPosition } = storeToRefs(imageStore)\n\nconst fetchImagesOnLoad = async () => {\n try {\n imagesLoading.value = true\n const imagesRes = await fetchImageListByIds(imageClient, props.modelValue)\n imageStore.setImages(\n imagesRes.map((imageRes) => {\n imageStore.updateMaxPositionIfGreater(imageRes.position)\n return {\n key: generateUUIDv1(),\n ...imageRes,\n }\n })\n )\n emit('update:modelValue', images.value.map((image) => image.id).filter((id) => id !== undefined) as IntegerId[])\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n imagesLoading.value = false\n }\n}\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst onFileInput = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\n\nconst onDrop = (files: File[]) => {\n uploadQueuesStore.addByFiles(props.queueKey, props.licenceId, files)\n uploadQueueDialog.value = true\n}\n\nconst assetSelectConfirmMap = async (items: AssetSearchListItemDto[]) => {\n const ids = items.map((item) => item.id)\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n const assetDetails = await fetchAssetListByIds(damClient, ids, props.licenceId)\n assetDetails.forEach((assetDetail) => {\n assetMetadataMap.set(assetDetail.id, {\n description: isString(assetDetail.metadata.customData?.description)\n ? assetDetail.metadata.customData.description.trim()\n : '',\n authorIds: assetDetail.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, [...authorIdsToFetch])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n return items.map((asset) => {\n maxPosition.value++\n const description = assetMetadataMap.get(asset.id)?.description\n const authorNames: string[] = []\n assetMetadataMap.get(asset.id)?.authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n return {\n key: generateUUIDv1(),\n texts: {\n description: description ?? '',\n source: authorNames.join(', '),\n },\n dam: {\n damId: asset.mainFile!.id,\n regionPosition: 0,\n },\n position: maxPosition.value,\n }\n })\n}\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n if (data.type === 'asset') {\n if (data.value.length === 0) return\n const items = await assetSelectConfirmMap(data.value.filter((asset) => !isNull(asset.mainFile)))\n imageStore.addImages(items)\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = true\n try {\n const asset = await fetchAssetByFileId(damClient, assetFileId)\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (items.length === 0) return\n imageStore.addImages(\n items.map((item) => {\n maxPosition.value++\n return {\n key: generateUUIDv1(),\n ...item,\n position: maxPosition.value,\n }\n })\n )\n uploadQueueDialog.value = false\n uploadQueuesStore.stopUpload(props.queueKey)\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst v$ = useVuelidate({}, {}, { $scope: AImageMetadataValidationScopeSymbol })\n\nconst saveImages = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return false\n }\n try {\n const resItems = await bulkUpdateImages(imageClient, toRaw(images.value))\n const ids: IntegerId[] = []\n const items = resItems.map((resItem) => {\n ids.push(resItem.id)\n return {\n key: generateUUIDv1(),\n ...resItem,\n }\n })\n imageStore.setImages(items)\n emit('update:modelValue', ids)\n return true\n } catch (e) {\n return false\n }\n}\n\nconst removeItem = async (index: number) => {\n const image = images.value[index]\n if (!image) return\n if (isUndefined(image.id)) {\n imageStore.removeImageByIndex(index)\n return\n }\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, image.id)\n imageStore.removeImageByIndex(index)\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n imageStore.removeImageByIndex(index)\n}\n\nconst widgetEl = ref<HTMLElement | null>(null)\nconst randomUuid = ref<string>(generateUUIDv1())\nconst sortableInstance = ref<UseSortableReturn | null>(null)\nconst forceRerender = ref(0)\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst forceRerenderWidgetHtml = () => {\n forceRerender.value++\n nextTick(() => {\n initSortable()\n })\n}\n\nconst updateAllPositions = () => {\n let pos = 0\n images.value.forEach((image) => {\n pos++\n image.position = pos\n })\n imageStore.maxPosition = pos\n}\nconst moveImagePositions = (from: number, to: number) => {\n if (to >= 0 && to < images.value.length) {\n const element = images.value.splice(from, 1)[0]\n images.value.splice(to, 0, element)\n updateAllPositions()\n forceRerenderWidgetHtml()\n }\n}\n\nconst initSortable = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortable = widgetEl.value.querySelector<HTMLElement>('.' + GROUP_CLASS)\n if (!nestedSortable) return\n sortableInstance.value = useSortable(nestedSortable, [], {\n handle: '.' + HANDLE_CLASS,\n ghostClass: GHOST_CLASS,\n dragClass: DRAG_CLASS,\n chosenClass: CHOSEN_CLASS,\n onEnd: async (event: SortableEvent) => {\n if (isUndefined(event.oldIndex) || isUndefined(event.newIndex)) return\n moveImagePositions(event.oldIndex, event.newIndex)\n },\n })\n}\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortable()\n})\n\ndefineExpose({\n saveImages,\n})\n\nonMounted(() => {\n fetchImagesOnLoad()\n})\n</script>\n\n<template>\n <div :id=\"widgetHtmlId\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div class=\"pb-2\">\n <AFileInput\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n ref=\"uploadButtonComponent\"\n v-bind=\"fileInputProps\"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInput>\n <VBtn\n class=\"mr-2\"\n @click=\"actionLibrary\"\n >\n {{ t('common.damImage.image.button.addFromDam') }}\n </VBtn>\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :asset-licence-id=\"licenceId\"\n :min-count=\"1\"\n :max-count=\"50\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n\n <div\n class=\"position-relative w-100\"\n style=\"min-height: 140px\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n class=\"asset-list-tiles asset-list-tiles--thumbnail\"\n >\n <ImageWidgetMultipleItem\n v-for=\"(image, index) in images\"\n :key=\"image.key\"\n :index=\"index\"\n :disable-draggable=\"disableDraggable\"\n @edit-asset=\"onEditAsset\"\n @remove-item=\"removeItem\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n :hover-only=\"modelValue.length > 0 || images.length > 0\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-drop=\"onDrop\"\n @on-click=\"uploadButtonComponent?.$el.click()\"\n />\n </div>\n <UploadQueueDialog\n v-if=\"uploadQueueDialog\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n multiple\n @on-apply=\"onAssetUploadConfirm\"\n />\n <AssetDetailDialog />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport { onMounted, provide, ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { ImageWidgetExtSystemConfig } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport ImageWidgetMultipleInner from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[] // initial ids, updated only when save is called\n queueKey: UploadQueueKey\n licenceId: IntegerId\n extSystem: IntegerId\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n initialized,\n loadDamConfigExtSystem,\n damConfigExtSystem,\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n} = useDamConfigState(damClient)\n\nonMounted(async () => {\n const promises: Promise<any>[] = []\n if (!initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n if (initialized.damConfigExtSystem !== props.extSystem) {\n promises.push(loadDamConfigExtSystem(props.extSystem))\n promises.push(loadDamConfigAssetCustomFormElements(props.extSystem))\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetMultipleInner> | null>(null)\n\nconst saveImages = async () => {\n if (!innerComponent.value) return false\n return await innerComponent.value.saveImages() as boolean\n}\n\nprovide(ImageWidgetExtSystemConfig, damConfigExtSystem)\n\ndefineExpose({\n saveImages,\n})\n</script>\n\n<template>\n <ImageWidgetMultipleInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware } from '@/types/ImageAware'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { ref, toRefs, watch } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport { fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n images?: ImageAware[]\n configName?: string\n label?: string | undefined\n width?: number | undefined\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n }>(),\n {\n images: () => [],\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n }\n)\n\nconst { images, modelValue } = toRefs(props)\n\nconst resImages = ref<ImageAware[]>([])\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\n\nwatch(\n [images, modelValue],\n async ([newImages, newImageIds]) => {\n resImages.value = []\n if (newImages && newImages.length > 0) {\n resImages.value = cloneDeep(newImages)\n return\n }\n if (newImageIds && newImageIds.length > 0) {\n try {\n resImages.value = await fetchImageListByIds(imageClient, newImageIds)\n } catch (error) {\n showErrorsDefault(error)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"asset-list-tiles asset-list-tiles--thumbnail\">\n <div\n v-for=\"image in resImages\"\n :key=\"image.id\"\n class=\"asset-list-tiles__item\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n :config-name=\"configName\"\n :width=\"width\"\n :disable-aspect-ratio=\"disableAspectRatio\"\n :aspect-ratio=\"aspectRatio\"\n :show-description=\"showDescription\"\n :show-source=\"showSource\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import { computed, type Ref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport { usePagination } from '@/composables/system/pagination'\nimport { isUndefined } from '@/utils/common'\n\nexport const DATETIME_AUTO_LABEL_TRACKING = ['createdAt', 'modifiedAt']\n\nexport type DatatableSortBy =\n | {\n key: string\n order: 'asc' | 'desc'\n }\n | null\n | undefined\n\nexport type DatatableOrderingOption = { id: number; titleT: string; sortBy?: DatatableSortBy; customData?: any }\n\nexport type DatatableOrderingOptions = Array<DatatableOrderingOption>\n\nexport type ColumnConfig = {\n key: string\n title?: string\n sortable?: boolean\n fixed?: boolean\n}\n\nexport type ColumnInternalValues = {\n key: string\n title?: string\n sortable: boolean\n fixed: boolean\n}\n\nconst defaultColumn: ColumnInternalValues = {\n key: '',\n title: undefined,\n sortable: false,\n fixed: false,\n}\n\nexport function createDatatableColumnsConfig(\n config: ColumnConfig[],\n columnsHidden: Ref<Array<string>>,\n system: string | undefined = undefined,\n subject: string | undefined = undefined,\n disableActions: boolean = false,\n customPagination: Pagination | undefined = undefined,\n customI18n: undefined | any = undefined\n) {\n const localI18n = customI18n ?? i18n\n const { t } = localI18n.global || localI18n\n const pagination: Pagination = usePagination()\n if (customPagination) {\n for (const prop of Object.keys(pagination)) {\n if (prop in customPagination) {\n // @ts-ignore\n pagination[prop] = customPagination[prop]\n }\n }\n }\n\n const columnsAll = config.map((item) => {\n const obj = { ...defaultColumn, ...item }\n if (!isUndefined(obj.title)) {\n // do not modify\n } else if (isUndefined(obj.title) && DATETIME_AUTO_LABEL_TRACKING.includes(obj.key)) {\n obj.title = t('common.model.tracking.' + obj.key)\n } else if (isUndefined(obj.title) && system && subject) {\n obj.title = t(system + '.' + subject + '.model.' + obj.key)\n } else {\n obj.title = ''\n }\n return obj\n })\n\n const columnsVisible = computed(() => {\n const columns: any = []\n columnsAll.forEach((column) => {\n if (!columnsHidden.value.includes(column.key)) {\n columns.push(column)\n }\n })\n if (!disableActions) columns.push({ key: 'actions', sortable: false, fixed: true })\n return columns\n })\n\n const updateSortBy = (sortBy: any) => {\n if (sortBy) {\n pagination.sortBy = sortBy.key\n pagination.descending = sortBy.order === 'desc' ? true : false\n return\n }\n pagination.sortBy = null\n }\n\n return {\n columnsAll,\n columnsVisible,\n columnsHidden,\n updateSortBy,\n pagination,\n }\n}\n","import { createDatatableColumnsConfig, type DatatableOrderingOption } from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n fetch: (pag: Pagination, fb: FilterBag) => Promise<Array<TItem>>,\n filter: FilterBag\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n\n const { resetFilter, submitFilter } = useFilterHelpers()\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, pagination, updateSortBy, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject\n )\n\n const onOpen = () => {\n resetState()\n getList()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n updateSortBy(option.sortBy)\n getList()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n pagination.page++\n try {\n items.value.push(...(await fetch(pagination, filter)))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = await fetch(pagination, filter)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (!eventTarget) return\n const parent = eventTarget.parentElement\n if (!parent || !parent.classList.contains('v-data-table__tr')) return\n const firstTd = parent.firstElementChild\n if (!firstTd || !firstTd.classList.contains('v-data-table__td')) return\n const input = firstTd.querySelector('input')\n if (!input) return\n input.click()\n }\n\n return {\n items,\n selected,\n pagination,\n columnsVisible,\n columnsHidden,\n columnsAll,\n filterTouched,\n loading,\n onRowClick,\n onFetchNextPage,\n onOpen,\n sortByChange,\n getList,\n resetFilter: () => resetFilter(filter, pagination, getList),\n submitFilter: () => submitFilter(filter, pagination, getList),\n }\n}\n","export interface VDatatableSelectableItem {\n value: any\n selectable: boolean\n}\n\ninterface DataTableSelectStrategy {\n showSelectAll: boolean\n allSelected: (data: {\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n }) => VDatatableSelectableItem[]\n select: (data: { items: VDatatableSelectableItem[]; value: boolean; selected: Set<unknown> }) => Set<unknown>\n selectAll: (data: {\n value: boolean\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n selected: Set<unknown>\n }) => Set<unknown>\n}\n\nexport const generateDatatableMinMaxSelectStrategy = (min: number, max: number): DataTableSelectStrategy => {\n return {\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value, selected }) => {\n if (min === max && min === 1) {\n return new Set(value ? [items[0]?.value] : [])\n }\n for (const item of items) {\n if (selected.size >= max && value) break\n else if (value) selected.add(item.value)\n else selected.delete(item.value)\n }\n return selected\n },\n selectAll: ({ selected }) => selected,\n }\n}\n","export const booleanToInteger = (value: boolean) => {\n return value ? 1 : 0\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport { isString } from '@/utils/common'\nimport type { AnzuUser } from '@/types/AnzuUser'\n\nexport function useAnzuUserFactory(system = '', resourceName = 'user') {\n let _system = system\n let _resourceName = resourceName\n const createAnzuUser = (system?: string, resourceName?: string): AnzuUser => {\n if (isString(system)) _system = system\n if (isString(resourceName)) _resourceName = resourceName\n\n return {\n id: 0,\n createdAt: dateTimeNow(),\n createdBy: 0,\n email: '',\n avatar: {\n color: '',\n text: '',\n },\n person: {\n firstName: '',\n fullName: '',\n lastName: '',\n },\n enabled: false,\n modifiedAt: dateTimeNow(),\n modifiedBy: 0,\n permissionGroups: [],\n permissions: {},\n resolvedPermissions: {},\n roles: [],\n _system: _system,\n _resourceName: _resourceName,\n }\n }\n\n return {\n createAnzuUser,\n }\n}\n","import type { PermissionConfig } from '@/types/PermissionConfig'\n\nexport function usePermissionConfigFactory() {\n const createPermissionConfig = (): PermissionConfig => {\n return {\n config: {},\n defaultGrants: [],\n roles: [],\n translation: {\n actions: {},\n subjects: {},\n roles: {},\n },\n }\n }\n\n return {\n createPermissionConfig,\n }\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport type { PermissionGroup } from '@/types/PermissionGroup'\n\nexport function usePermissionGroupFactory() {\n const createPermissionGroup = (): PermissionGroup => {\n return {\n id: 0,\n title: '',\n description: '',\n permissions: {},\n createdBy: 0,\n modifiedBy: 0,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n _resourceName: 'permissionGroup',\n _system: '',\n }\n }\n\n return {\n createPermissionGroup,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isNull } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig, Method } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiAnyRequest = <T, R = T>(\n client: () => AxiosInstance,\n method: Method,\n urlTemplate = '',\n urlParams: UrlParams = {},\n object: T | null = null,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const axiosConfig: AxiosRequestConfig = { method: method }\n if (urlTemplate !== '') {\n axiosConfig.url = replaceUrlParameters(urlTemplate, urlParams)\n }\n if (!isNull(object)) {\n axiosConfig.data = JSON.stringify(object)\n }\n client()\n .request({ ...options, ...axiosConfig })\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isDefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { usePagination } from '@/composables/system/pagination'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n type ApiInfiniteResponseList,\n type ApiResponseList,\n isApiInfiniteResponseList,\n isApiResponseList,\n} from '@/types/ApiResponse'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\nconst generateListApiQuery = (pagination: Pagination, filterBag: FilterBag | undefined = undefined): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n\nconst generateListApiQueryWithoutPagination = (\n rowsPerPage: number,\n page: number,\n orderField: string,\n orderDesc: boolean,\n filterBag: FilterBag | undefined = undefined\n): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(rowsPerPage)\n querySetOffset(page, rowsPerPage)\n querySetOrder(orderField, orderDesc)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n// todo: alpha version\n/**\n * Used to fetch all items from list api.\n *\n * @template R Response type override, optional\n */\nexport const apiFetchListBatch = async <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n sortBy = 'id',\n sortDesc = true,\n filterBag: FilterBag | undefined = undefined,\n batchSize = 100,\n system: string,\n entity: string,\n forceElastic = false,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n const searchApi = (isDefined(filterBag?._elastic) || forceElastic) ? '/search' : ''\n const pagination = usePagination(sortBy)\n pagination.rowsPerPage = batchSize\n pagination.sortBy = sortBy\n pagination.descending = sortDesc\n const urlPart = replaceUrlParameters(urlTemplate, urlParams) + searchApi\n const results = [] as unknown as R\n\n try {\n const res = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n if (!isValidHTTPStatus(res.status)) {\n return Promise.reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n // @ts-ignore\n results.push(...resData.data)\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n if (pagination.hasNextPage) {\n while (pagination.hasNextPage) {\n pagination.page++\n const nextPageResponse = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n const nextPageData = nextPageResponse.data\n // @ts-ignore\n results.push(...nextPageData.data)\n pagination.hasNextPage = nextPageData.hasNextPage\n }\n }\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n if (pagination.totalCount <= pagination.rowsPerPage) {\n return Promise.resolve(results as R)\n }\n const promises: Promise<any>[] = []\n const numPages = Math.ceil(pagination.totalCount / pagination.rowsPerPage)\n for (let i = 0; i < numPages; i++) {\n promises.push(\n client().get(\n urlPart +\n generateListApiQueryWithoutPagination(\n pagination.rowsPerPage,\n i,\n pagination.sortBy,\n pagination.descending,\n filterBag\n ),\n options\n )\n )\n }\n const allResponses = await Promise.all(promises)\n allResponses.forEach((pageResponse) => {\n // @ts-ignore\n results.push(...pageResponse.data.data)\n })\n }\n pagination.currentViewCount = res.data.data.length\n return Promise.resolve(results as R)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return Promise.resolve([] as R)\n }\n\n return results\n } catch (err: any) {\n if (axiosErrorResponseIsForbidden(err)) {\n return Promise.reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return Promise.reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return Promise.reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return Promise.reject(new AnzuFatalError(err))\n }\n}\n","import { isAnzuApiValidationError } from '@/model/error/AnzuApiValidationError'\nimport { isAnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isAnzuApiForbiddenError } from '@/model/error/AnzuApiForbiddenError'\nimport { isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\n\nexport function useErrors() {\n return {\n isAnzuFatalError,\n isAnzuApiForbiddenError,\n isAnzuApiValidationError,\n isAnzuApiResponseCodeError,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport type { JobBase } from '@/types/Job'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { stringToKebabCase } from '@/utils/string'\n\nconst END_POINT = '/adm/v1/job'\nexport const ENTITY = 'job'\n\nexport function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string) {\n const fetchJobList = (pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<JobType[]>(client, END_POINT, {}, pagination, filterBag, system, ENTITY)\n\n const fetchJob = (id: number) => apiFetchOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n const createJob = (data: JobType) => {\n const type = stringToKebabCase(data._resourceName)\n .slice(4) // remove \"job-\" prefix\n .replace('-kind-', '-kind/') // replace \"-kind-\" with \"-kind/\" if the needle is found\n\n return apiCreateOne<JobType>(client, data, END_POINT + '/:type', { type }, system, ENTITY)\n }\n\n const deleteJob = (id: number) => apiDeleteOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n return {\n fetchJobList,\n fetchJob,\n createJob,\n deleteJob,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const JOB_RESOURCE_USER_DATA_DELETE = 'jobUserDataDelete'\n\nexport type JobBaseResource = typeof JOB_RESOURCE_USER_DATA_DELETE | `job${string}`\n\nexport function useJobBaseResource<T extends JobBaseResource = JobBaseResource>(\n customJobs: ValueObjectOption<T>[] = []\n) {\n const { t } = useI18n()\n\n const jobResourceOptions = ref<ValueObjectOption<T>[]>([\n ...([\n {\n value: 'jobUserDataDelete',\n title: t('common.job.jobResource.jobUserDataDelete'),\n },\n ] as unknown as ValueObjectOption<T>[]),\n ...customJobs,\n ])\n\n const getJobResourceOption = (value: T): ValueObjectOption<T> => {\n return jobResourceOptions.value.find((item) => item.value === value) as ValueObjectOption<T>\n }\n\n return {\n jobResourceOptions,\n getJobResourceOption,\n }\n}\n","import type { App, DeepReadonly, Ref, UnwrapRef } from 'vue'\nimport type { AnzuUser } from '@/types/AnzuUser'\nimport type { AclValue } from '@/types/Permission'\nimport Acl from '@/components/permission/Acl.vue'\nimport Notification from '@kyvg/vue3-notification'\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport {\n AvailableLanguagesSymbol,\n CurrentUserSymbol,\n CustomAclResolverSymbol,\n DefaultLanguageSymbol,\n} from '@/components/injectionKeys'\nimport type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport { initCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { initCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nexport type PluginOptions<T extends AclValue = AclValue> = {\n currentUser: CurrentUserType\n languages: { available: LanguageCode[]; default: LanguageCode }\n customAclResolver?: CustomAclResolver<T>\n coreDam?: CommonAdminCoreDamOptions\n image?: CommonAdminImageOptions\n}\n\nexport type CustomAclResolver<T extends AclValue = AclValue> =\n | undefined\n | {\n can?: (acl: T, subject?: object) => boolean\n canOwner?: (subject: object) => boolean\n }\n\nexport type CurrentUserType = DeepReadonly<Ref<UnwrapRef<AnzuUser | undefined>>>\n\nexport interface CommonAdminImageConfig {\n imageClient: () => AxiosInstance\n previewDomain: string\n width: number\n height: number\n}\n\nexport type CommonAdminImageOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminImageConfig }\n }\n\nexport interface CommonAdminCoreDamConfig {\n damClient: () => AxiosInstance\n defaultLicenceId?: IntegerId\n}\n\nexport type CommonAdminCoreDamOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminCoreDamConfig }\n apiTimeout: number\n uploadStatusFallback: boolean\n notification: {\n enabled: boolean\n webSocketUrl: string\n }\n }\n\nexport default {\n install<T extends AclValue = AclValue>(app: App, options: PluginOptions<T>): void {\n app.provide(CurrentUserSymbol, options.currentUser)\n app.provide(CustomAclResolverSymbol, options.customAclResolver)\n app.provide(AvailableLanguagesSymbol, options.languages.available)\n app.provide(DefaultLanguageSymbol, options.languages.default)\n app.component('Acl', Acl)\n app.use(Notification, { componentName: 'Notifications' })\n initCommonAdminImageOptions(options.image)\n initCommonAdminCoreDamOptions(options.coreDam)\n },\n}\n","export const arrayItemToggle = <T>(array: Array<T>, value: T) => {\n const index = array.indexOf(value)\n if (index === -1) {\n array.push(value)\n return\n }\n array.splice(index, 1)\n}\n\nexport const arrayToString = (values: Array<string | number>, separator = ', ') => values.join(separator)\n\nexport const arrayFromArgs = <T>(...args: [T[]]) => Array.from(...args)\n\nexport type NestedArray<T> = Array<NestedArray<T> | T>\n\nexport const arrayFlatten = <T>(input: NestedArray<T>, acc: T[] = []): T[] => {\n return input.reduce((_: T[], current) => {\n if (Array.isArray(current)) return arrayFlatten(current, acc)\n acc.push(current)\n return acc\n }, [])\n}\n\nexport const arraysHaveSameElements = <T>(array1: T[], array2: T[]): boolean => {\n if (array1.length !== array2.length) {\n return false\n }\n\n // Sort both arrays\n const sortedArray1 = array1.slice().sort()\n const sortedArray2 = array2.slice().sort()\n\n // Compare the sorted arrays\n for (let i = 0; i < sortedArray1.length; i++) {\n if (sortedArray1[i] !== sortedArray2[i]) {\n return false\n }\n }\n\n return true\n}\n","import type { RouteLocationRaw, Router } from 'vue-router'\n\nexport const browserHistoryReplaceUrlByString = (path: string) => {\n history.replaceState(history.state, '', path)\n}\n\nexport const browserHistoryReplaceUrlByRouter = (router: Router, to: RouteLocationRaw) => {\n const resolved = router.resolve(to)\n browserHistoryReplaceUrlByString(resolved.href)\n}\n","import alert from '@/locales/cs/common/alert.json'\nimport button from '@/locales/cs/common/button.json'\nimport model from '@/locales/cs/common/model.json'\nimport system from '@/locales/cs/common/system.json'\nimport anzuUser from '@/locales/cs/common/anzuUser.json'\nimport job from '@/locales/cs/common/job.json'\nimport log from '@/locales/cs/common/log.json'\nimport permission from '@/locales/cs/common/permission.json'\nimport permissionGroup from '@/locales/cs/common/permissionGroup.json'\nimport vuetify from '@/locales/cs/vuetify.json'\nimport apiValidation from '@/locales/cs/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/cs/error/apiForbiddenOperation.json'\nimport jsValidation from '@/locales/cs/error/jsValidation.json'\nimport assetSelect from '@/locales/cs/common/assetSelect.json'\nimport subjectSelect from '@/locales/cs/common/subjectSelect.json'\nimport time from '@/locales/cs/common/time.json'\nimport sortable from '@/locales/cs/common/sortable.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import vuetify from '@/locales/en/vuetify.json'\nimport alert from '@/locales/en/common/alert.json'\nimport button from '@/locales/en/common/button.json'\nimport model from '@/locales/en/common/model.json'\nimport system from '@/locales/en/common/system.json'\nimport anzuUser from '@/locales/en/common/anzuUser.json'\nimport job from '@/locales/en/common/job.json'\nimport log from '@/locales/en/common/log.json'\nimport permission from '@/locales/en/common/permission.json'\nimport permissionGroup from '@/locales/en/common/permissionGroup.json'\nimport apiValidation from '@/locales/en/error/apiValidation.json'\nimport jsValidation from '@/locales/en/error/jsValidation.json'\nimport apiForbiddenOperation from '@/locales/en/error/apiForbiddenOperation.json'\nimport assetSelect from '@/locales/en/common/assetSelect.json'\nimport subjectSelect from '@/locales/en/common/subjectSelect.json'\nimport time from '@/locales/en/common/time.json'\nimport sortable from '@/locales/en/common/sortable.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import alert from '@/locales/sk/common/alert.json'\nimport button from '@/locales/sk/common/button.json'\nimport model from '@/locales/sk/common/model.json'\nimport system from '@/locales/sk/common/system.json'\nimport anzuUser from '@/locales/sk/common/anzuUser.json'\nimport job from '@/locales/sk/common/job.json'\nimport log from '@/locales/sk/common/log.json'\nimport permission from '@/locales/sk/common/permission.json'\nimport permissionGroup from '@/locales/sk/common/permissionGroup.json'\nimport vuetify from '@/locales/sk/vuetify.json'\nimport apiValidation from '@/locales/sk/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/sk/error/apiForbiddenOperation.json'\nimport jsValidation from '@/locales/sk/error/jsValidation.json'\nimport assetSelect from '@/locales/sk/common/assetSelect.json'\nimport subjectSelect from '@/locales/sk/common/subjectSelect.json'\nimport time from '@/locales/sk/common/time.json'\nimport sortable from '@/locales/sk/common/sortable.json'\nimport damImage from '@/locales/sk/common/damImage.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import { VBtn, VChip } from 'vuetify/components'\n\nexport const useCommonVuetifyConfig = () => {\n const commonTheme = () => {\n return {\n defaultTheme: 'light',\n variations: {\n colors: [],\n lighten: 0,\n darken: 0,\n },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#ffffff',\n surface: '#ffffff',\n 'on-surface': '#333',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n 'on-success': '#fff',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n dark: {\n dark: true,\n colors: {\n background: '#1A1A1A',\n surface: '#1A1A1A',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n },\n }\n }\n\n const commonDefaults = () => {\n return {\n global: {},\n VTextField: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VTextarea: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSelect: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VAutocomplete: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VCombobox: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSwitch: {\n color: 'success',\n density: 'compact',\n },\n VCard: {\n variant: 'flat',\n },\n VDialog: {\n noClickAnimation: true,\n persistent: true,\n },\n VProgressCircular: {\n color: 'primary',\n },\n VBtn: {\n variant: 'flat',\n },\n ABtnPrimary: {\n variant: 'flat',\n color: 'primary',\n },\n ABtnSecondary: {\n variant: 'outlined',\n color: 'primary',\n },\n ABtnTertiary: {\n variant: 'text',\n color: 'primary',\n },\n ABtnIcon: {\n variant: 'text',\n icon: true,\n },\n }\n }\n\n const commonAliases = () => {\n return {\n ABtnPrimary: VBtn as any,\n ABtnSecondary: VBtn as any,\n ABtnTertiary: VBtn as any,\n ABtnIcon: VBtn as any,\n AChipNoLink: VChip as any,\n }\n }\n\n return {\n commonAliases,\n commonDefaults,\n commonTheme,\n }\n}\n","export async function loadCommonFonts() {\n const webfontloader = await import('webfontloader')\n\n webfontloader.load({\n google: {\n families: ['Roboto:100,300,400,500,700,900&display=swap'],\n },\n // urls: ['https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css']\n })\n}\n","import type { JobBase, JobUserDataDelete } from '@/types/Job'\nimport { JobStatus } from '@/model/valueObject/JobStatus'\nimport { dateTimeNow } from '@/utils/datetime'\nimport type { JobBaseResource } from '@/model/valueObject/JobBaseResource'\n\nexport function useCommonJobFactory() {\n const createBase = (resourceName: JobBaseResource, system: string): JobBase => {\n return {\n id: 0,\n status: JobStatus.Default,\n result: '',\n batchProcessedIterationCount: 0,\n finishedAt: null,\n startedAt: null,\n lastBatchProcessedRecord: '',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n _resourceName: resourceName,\n _system: system,\n }\n }\n\n const createUserDataDelete = (system: string): JobUserDataDelete => {\n return {\n ...createBase('jobUserDataDelete', system),\n ...{\n targetUserId: null,\n anonymizeUser: false,\n },\n }\n }\n\n return {\n createBase,\n createUserDataDelete,\n }\n}\n","import { readonly, ref } from 'vue'\nimport type { RouteLocationNormalized } from 'vue-router'\nimport { isNull } from '@/utils/common'\n\nenum LoginState {\n Success = 'success',\n FailureSsoCommunicationFailed = 'failure-sso-communication',\n FailureInternalError = 'failure-internal-error',\n FailureUnauthorized = 'failure-unauthorized',\n}\n\nconst status = ref<string | null>(null)\n\nexport function useLoginStatus(to: RouteLocationNormalized) {\n if (to.query.loginState) {\n status.value = to.query.loginState.toString()\n }\n\n const isStatusNotDefined = () => isNull(status.value)\n const isStatusLoginSuccess = () => status.value === LoginState.Success\n const isStatusSsoCommunicationFailure = () => status.value === LoginState.FailureSsoCommunicationFailed\n const isStatusInternalErrorFailure = () => status.value === LoginState.FailureInternalError\n const isStatusUnauthorized = () => status.value === LoginState.FailureUnauthorized\n\n return {\n status: readonly(status),\n isStatusNotDefined,\n isStatusLoginSuccess,\n isStatusSsoCommunicationFailure,\n isStatusInternalErrorFailure,\n isStatusUnauthorized,\n }\n}\n"],"names":["props","__props","t","useI18n","booleanValue","computed","text","color","loadingComputed","isUndefined","value","isDefined","isNull","isNumber","isString","isArray","isFunction","isBoolean","isDocId","isInt","x","isObject","isEmptyObject","isEmptyArray","isEmpty","cloneDeep","object","isProxy","toRaw","isRef","unref","stringToInt","fallbackValue","check","stringToFloat","stringSplitOnFirstOccurrence","delimiter","index","stringToSlug","stringToKebabCase","stringTrimLength","maxLength","stringUrlTemplateReplace","template","params","newParts","part","key","stringUrlTemplateReplaceVueRouter","regex","match","stringNormalizeForSlotName","name","stringIsValidEmail","email","SystemScopeSymbol","SubjectScopeSymbol","CurrentUserSymbol","CustomAclResolverSymbol","AvailableLanguagesSymbol","DefaultLanguageSymbol","emit","__emit","system","inject","subject","onUpdate","newValue","onBlur","_a","errorMessageComputed","_b","item","labelComputed","path","requiredComputed","provide","modelValueComputed","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","rowsPerPageComputed","watch","oldValue","pageComputed","onClickFirst","onClickLast","onClickPrev","onClickNext","isVisible","toggleVisibility","cloned","active","ref","defaultItems","defaultItemsMostRelevant","activeTitle","found","options","onItemClick","onCancel","computedData","o","e","i","F","pt","n","s","dt","w","G","mt","yt","j","ht","gt","vt","k","_t","$","c","f","l","A","z","I","b","xt","Tt","Dt","Et","wt","kt","$t","At","T","v","g","W","p","S","C","a","u","h","O","P","y","q","J","K","tt","ot","it","st","at","d","rt","_","lt","N","Q","Z","U","X","H","B","et","nt","ct","m","M","ut","D","ft","R","E","V","Y","L","It","Ct","REQUIRED_LOCALES","i18n","createI18n","locale","isAnzuFatalError","error","AnzuFatalError","cause","message","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_VALID_ALL","axiosErrorResponseIsForbidden","axios","isAnzuApiForbiddenError","AnzuApiForbiddenError","ERROR_VALIDATION","axiosErrorResponseHasValidationData","_c","isAnzuApiValidationError","AnzuApiValidationError","resolveResponseData","axiosError","entity","data","items","values","__publicField","isAnzuApiResponseCodeError","AnzuApiResponseCodeError","code","ERROR_FORBIDDEN_OPERATION","axiosErrorResponseHasForbiddenOperationData","isAnzuApiForbiddenOperationError","AnzuApiForbiddenOperationError","DEFAULT_DURATION_SECONDS","NEW_LINE_MARK","useAlerts","showSuccess","duration","notify","showSuccessT","translation","showError","showErrorT","showInfo","showInfoT","showWarning","showWarningT","showValidationError","showRecordWas","variant","showApiValidationError","errors","fieldIsTranslated","te","texts","fieldText","errorsTexts","showApiForbiddenOperationError","detail","showUnknownError","showForbiddenError","buttonLoading","onOpen","onClose","router","useRouter","showErrorsDefault","onConfirm","res","config","onMounted","useFetch","module","this","r","dayjs","utc","SUFFIX","FORMAT","DATETIME_MIN","DATETIME_MAX","dateNow","dateTimeToDate","isoDate","timestampCurrent","dateTimeNow","ignoreFractionalSeconds","ignoreSeconds","dateTimeStartOfDay","days","dateTimeEndOfDay","dateModifyMinutes","minutes","date","dateToUtc","yearNow","dateTimePretty","edgeDateValue","dateTimeFriendly","displayYear","displayDayMonth","now","datePretty","timePretty","dateDiff","date1","date2","unit","date1dayjs","date2dayjs","createdAt","modifiedAt","makeFilterHelper","defaultValue","titleT","useFilterHelpers","clearOne","filter","clearAll","filterBag","filterName","clearAllErrors","pagination","callback","label","placeholderComputed","model","filterId","filterText","filterDocId","filterUrl","filterOverrides","toRefs","filterActive","clearIfActive","clearAllActiveExcept","exceptFilter","_d","_e","_f","_g","_h","_i","overrideFilter","currentFilter","setFilters","newModel","autodetectFilter","filterLabels","currentFilterModel","eventClickBlur","event","onClick","icon","resetFilter","advancedFilter","toggleAdvancedFilter","Grant","useGrant","grantOptions","selectedGrant","newGrant","getGrantOption","GrantOrigin","useGrantOrigin","grantOriginOptions","grantOption","getGrantOriginOption","grantOriginOption","objectDeepFreeze","obj","propNames","objectGetValues","objectGetValueByPath","splitChar","objectSetValueByPath","objectDeletePropertyByPath","pathParts","lastIndex","recurse","isOwnerAware","isCreatedByAware","ROLE_SUPER_ADMIN","useAcl","shouldInject","currentUser","customAclProvider","can","acl","permission","canOwner","acls","allowed","pretty","HOOKS","defaults","err","givenDate","week1","english","nth","pad","number","length","int","bool","debounce","fn","wait","_this","args","arrayify","toggleClass","elem","className","createElement","tag","content","clearNode","node","findParent","condition","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","getEventTarget","doNothing","monthToStr","monthNumber","shorthand","revFormat","dateObj","monthName","hour","day","amPM","shortMonth","seconds","unixSeconds","weekNum","weekNumber","year","ISODate","month","unixMillSeconds","tokenRegex","formats","createDateFormatter","l10n","isMobile","frmt","overrideLocale","arr","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","format","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","val","compareDates","isBetween","ts","ts1","ts2","calculateSecondsSinceMidnight","hours","parseSeconds","secondsSinceMidnight","getDefaultHours","minHour","minMinutes","minSeconds","maxHr","maxMinutes","target","_loop_1","source","args_1","__assign","__spreadArrays","il","jl","DEBOUNCED_CHANGE_MS","FlatpickrInstance","element","instanceConfig","self","defaultOptions","flatpickr","English","bind","setHoursFromDate","positionCalendar","changeMonth","changeYear","clear","close","onMouseOver","createDay","destroy","isEnabled","jumpToDate","updateValue","open","redraw","set","setDate","toggle","setupHelperFunctions","yr","init","parseConfig","setupLocale","setupInputs","setupDates","build","bindEvents","setCalendarWidth","isSafari","triggerEvent","getClosestActiveElement","bindToInstance","daysWidth","updateTime","defaultDate","timeWrapper","prevValue","setHoursFromInputs","ampm2military","military2ampm","limitMinHours","limitMaxHours","minBound","maxBound","currentTime","result","maxTime","minTime","setHours","onYearInput","eventTarget","handler","ev","el","triggerChange","evt","setupMobile","debouncedResize","onResize","onKeyDown","documentClick","onMonthNavClick","selectDate","selText","timeIncrement","jumpDate","jumpTo","oldYear","oldMonth","buildMonthSwitch","incrementNumInput","delta","inputElem","input","createEvent","fragment","buildMonthNav","buildWeeks","weekWrapper","weekNumbers","buildWeekdays","buildDays","buildTime","customAppend","_dayNumber","dateIsEnabled","dayElement","isDateSelected","isDateInRange","focusOnDayElem","targetNode","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","getNextAvailableDay","current","givenMonth","loopDelta","numMonthDays","focusOnDay","offset","activeElement","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","daysInMonth","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayIndex","dayNum","dayContainer","frag","shouldBuildMonth","buildMonth","container","monthNavFragment","monthElement","selectedMonth","yearInput","yearElement","currentMonth","buildMonths","updateNavigationCurrentMonth","separator","hourInput","minuteInput","secondInput","updateWeekdays","firstDayOfWeek","weekdays","isOffset","triggerChangeEvent","toInitial","isCalendarElem","eventTarget_1","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","array","parsed","valueChanged","getDateStr","allowInput","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","delta_1","elems","cellClass","hoverDate","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","hoverableCells","dayElem","timestamp","outOfRange","positionElement","wasOpen","minMaxDateSetter","type","inverseDateObj","boolOpts","userConfig","dates","parseDateRules","timeMode","defaultDateFormat","defaultAltFormat","minMaxTimeSetter","hook","pluginConf","getInputElem","customPositionElement","calendarHeight","acc","child","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","top","left","isCenter","isRight","right","rightMost","centerMost","doc","getDocumentStyleSheet","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","centerStyle","editableSheet","sheet","createStyleSheet","style","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","single","range","CALLBACKS","updatePositionElement","option","setSelectedDate","inputDate","rule","preloadedDate","inputType","hooks","specificFormat","dObj","isPrevMonth","isNextMonth","isKeyDown","min","max","step","curValue","isHourElem","isMinuteElem","_flatpickr","nodeList","nodes","instances","selector","includedEvents","excludedEvents","camelToKebab","string","nullify","allEvents","configCallbacks","Component","defineComponent","safeConfig","globalCallbacks","localCallback","onCloseCb","nextTick","selectedDates","dateStr","newState","newConfig","global","factory","exports","fp","Slovak","sk","Czech","cs","useValidateRequiredIf","createI18nMessage","requiredIf","ALL_LANGUAGES","storedSettings","useStorage","modifyLanguageSettings","configAvailableLanguages","configDefaultLanguage","addMessages","language","messages","setLanguage","readonly","useLanguageSettings","shortcutButtonsPlugin","pluginsImported","flatickrRefIsInitialized","flatickrRef","textFieldRef","isOpened","textFieldValue","flatpickrValue","initialized","fixFormat","checkIfReallyEmitChange","onFlatpickrUpdate","onFlatpickrOpen","onTextFieldBlur","onFlatpickrClose","onFlatpickrChange","filtered","altFormat","v$","onClear","enableComputed","defaultValueComputed","pluginsComputed","languages","currentLanguageCode","flatpickrConfig","onCalendarClick","rules","useVuelidate","checkboxModel","onCheckboxClick","usePagination","sortBy","reactive","usePaginationAutoHide","modelValue","search","isFocused","autoFetchTimer","innerFilter","multipleComputedVuetifyTypeFix","fetchedItems","selectedItemsCache","allItems","final","loadingLocal","apiSearch","query","filterField","findLocalDataByValues","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","onFocus","singleItemSelectedTitle","onSearchUpdate","onClickClear","watchDebounced","loading","hasError","uniqueId","internalModelValue","success","returnValue","JobStatus","useJobStatus","jobStatusOptions","getJobStatusOption","commonConfig","COMMON_CONFIG","cached","shallowRef","loaded","containerClassComputed","displayTitle","LogLevel","useLogLevel","logLevelOptions","getLogLevelOption","levelOption","numberToString","copy","isSupported","useClipboard","customColorClass","routerToComputed","variantComputed","dialog","closeDialog","__expose","ThemeSettings","Theme","QUERY","settings","theme","systemHasDarkPreference","setTheme","setThemeSettings","toolbarColor","useTheme","setThemeAuto","setThemeDark","setThemeLight","toggleTheme","isOpen","_hoisted_1","_hoisted_6","_sfc_render","_ctx","_cache","_hoisted_2","_createElementVNode","_hoisted_3","currentFlagComponent","FlagSk","FlagEn","FlagEmpty","onLanguageChange","currentLocale","availableLocales","reloadAdmin","AnzuNewVersionFetchError","showSystemBar","checkNewVersion","contentType","json","systemBarComponent","ASystemBarNewVersion","pause","useIntervalFn","onBeforeUnmount","fontSize","firstNameLastName","swatches","generatedColor","generateRandomColor","randomRow","buttonColorComputed","onColorPickerChange","newColor","logoutDialog","fetch","add","addManualMinimal","fetchedItemsMinimal","tryToAddFromFetchedItems","ids","resolve","deleteWasPressedTime","onKeydownDelete","idsToFetch","DamAssetStatus","DamAssetType","damAssetTypeValueToEnum","makeFilter","useAssetListFilter","AssetSelectReturnType","assetSelectReturnTypeValuesToEnum","useAssetSelectStore","defineStore","assetListItems","loader","licenceId","assetType","AssetTypeValue","selectedAssets","singleMode","minCount","maxCount","showLoader","hideLoader","setLicenceId","setSingleMode","setAssetType","setMinCount","setMaxCount","setList","appendList","assets","asset","toggleSelectedByIndex","isSelectedMax","unselectAllExcept","clearSelected","addToSelected","removeFromSelected","ignoreIndex","assetItem","assetId","getSelectedMainFileIds","fileIds","getSelectedAssetIds","getSelectedAssets","getSelectedData","selectedCount","reset","commonAdminCoreDamOptions","initCommonAdminCoreDamOptions","useCommonAdminCoreDamOptions","configName","useCommonAdminCoreDamOptionsGlobal","replaceUrlParameters","urlTemplate","urlParams","overrideUrlTemplate","isValidHTTPStatus","statusCode","apiFetchOne","client","reject","useApiQueryBuilder","querySetLimit","queryAdd","querySetOffset","page","limit","querySetOrder","field","desc","formatValue","queryAddFilter","filterVariant","getValue","isSearchApi","isApiResponseList","isApiInfiniteResponseList","generateListApiQuery","queryBuild","querySetFilters","apiFetchList","searchApi","resData","DamDistributionRequirementStrategy","DamDistributionServiceType","DamDistributionStatus","UserAuthType","END_POINT","PUB_END_POINT_PREFIX","PUB_END_POINT","ENTITY","fetchPubConfiguration","damClient","SYSTEM_CORE_DAM","fetchConfiguration","fetchExtSystemConfiguration","extSystem","fetchAssetCustomFormElements","fetchDistributionCustomFormElements","distributionService","createDefaultExtSystemConfig","override","damPubConfig","damPrvConfig","damConfigExtSystem","damConfigAssetCustomFormElements","damConfigDistributionCustomFormElements","useDamConfigState","onConfigError","loadDamPubConfig","setDamPubConfig","loadDamPrvConfig","setDamPrvConfig","loadDamConfigExtSystem","extSystemId","setDamConfigExtSystem","loadDamConfigAssetCustomFormElements","promises","responses","setDamConfigAssetCustomFormElements","loadDamConfigDistributionCustomFormElements","distributionServiceName","BULK_METADATA_LIMIT","FETCH_BY_IDS_MAX_LIMIT","fetchAssetList","fetchAsset","id","fetchAssetByFileId","assetFileId","bulkUpdateAssetsMetadata","bulkItems","listItemsToMetadataBulkItems","updateMetadataSequence","bulkItemsRes","response","fetchAssetListByIdsSequence","totalCalls","reduced","fetchAssetListByIds","dtoItems","handleMetadataValidationError","updateAssetMetadata","filterIsTouched","useAssetListActions","assetListStore","storeToRefs","apiFetchAssetList","fetchNextPage","resetAssetList","filterTouch","filterUnTouch","initStoreContext","IMAGE_HEIGHT","IMAGE_BG_COLOR_DEFAULT","useAssetItemActions","assetStatus","imageProperties","tableImageProperties","imagePlaceholderPath","onError","srcComputed","placeholder16x9","showIconComputed","prettyBytes","bytes","decimals","dm","sizes","IMAGE_WIDTH","toRef","AssetSelectGridView","gridView","useGridView","setGridView","sidebarLeft","useSidebar","toggleSidebar","closeSidebar","openSidebar","onAnyFilterUpdate","submitFilter","componentComputed","AssetSelectFilterFormImage","AssetSelectFilterFormDefault","dialogLocal","defaultLicenceId","autoloadOnIntersect","isIntersecting","AssetSelectListTable","AssetSelectListTiles","disabledSubmit","ownKeys","enumerableOnly","keys","symbols","sym","_objectSpread2","_defineProperty","_typeof","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","off","matches","getParentOrHost","closest","ctx","includeCTX","R_SPACE","state","css","prop","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","bottom","height","width","containerRect","elMatrix","scaleX","scaleY","getContentRect","rect","paddingLeft","paddingTop","paddingRight","paddingBottom","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","includeDragEl","currentChild","children","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","includeSelf","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","ms","cancelThrottle","scrollBy","clone","Polymer","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","translateX","translateY","repaint","plugins","PluginManager","plugin","eventName","sortable","eventNameGlobal","pluginName","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","store","willInsertAfter","onMoveFn","retVal","firstElRect","sortableContentRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","useSortable","document","defaultDocument","resetOptions","moveArrayElement","start","unrefElement","stop","tryOnMounted","tryOnScopeDispose","_valueIsRef","toValue","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","buf","clockseq","seedBytes","msecs","nsecs","tl","tmh","randomUUID","native","v4","rnds","generateUUIDv1","uuidv1","generateUUIDv4","uuidv4","HANDLE_CLASS","GHOST_CLASS","DRAG_CLASS","CHOSEN_CLASS","GROUP_CLASS","useSortableActions","initSortableCallback","removeDialog","itemToRemove","widgetEl","randomUuid","sortableInstance","forceRerender","dirtyLocal","transformItem","forceRerenderWidgetHtml","emitData","touchDirty","untouchDirty","updatePositions","updatedPositions","position","clonedData","returnData","findItemIndexById","updateDataCommon","dirty","updateData","foundIndex","updateDataAtIndex","addAfterIndex","targetIndex","addAfterId","targetId","removeById","removeByIndex","WIDGET_HTML_ID_PREFIX","onAddAfterClick","onDeleteClick","onEditClick","onAddLastClick","widgetHtmlId","initSortable","nestedSortable","needsRefresh","refresh","onRemoveDialogConfirm","NESTED_HANDLE_CLASS","NESTED_GHOST_CLASS","NESTED_DRAG_CLASS","NESTED_CHOSEN_CLASS","NESTED_GROUP_CLASS","SortableLevel","useSortableNestedActions","initSortablesCallback","sortableInstances","dragging","nestedData","updatePositionsSameParent","updatePositionsDifferentParent","itemsTarget","itemsSource","indexTarget","indexSource","calculateParentDepth","depth","parentItem","calculateChildDepth","childDepth","currentDepth","calculateNodeMaxDepth","parentDepth","findItemById","foundInChildren","currentId","maxDepth","itemToMove","itemToMoveParentItem","targetItem","childrenAllowed","insertData","targetItemParentItem","itemFound","onAddChildClick","level","showAddChildButtonComputed","widgetClass","initSortables","nestedSortables","parentId","addChildToId","paginationComputed","filterTouched","selectedItemsCount","onPageChange","hasNextPage","showAll","useCustomDataForm","CustomDataFormElementType","CustomDataFormElementTypeDefault","useCustomDataFormElementType","customDataFormElementTypeOptions","useValidateBetween","between","useValidateEmail","useValidateMaxLength","useValidateMaxValue","maxValue","useValidateMinLength","minLength","useValidateMinValue","minValue","useValidateNumeric","numeric","useValidateRequired","required","useValidateSlug","helpers","useValidateStringArrayItemLength","withI18nMessage","stringArrayItemLengthValidator","useValidateUrl","url","useValidate","fixValue","updateModelValue","stringArrayItemLength","dynamicRules","counter","toggleForm","updated","elementsPinned","elementsOther","showHideButtonText","showHideButtonIcon","enableShowHide","isDraggingFile","draggingTimer","useDropzoneGlobalDragState","dragoverHandler","checkReallyDraggingEnded","dragleaveHandler","dropHandler","dragEventContainsFiles","damFileTypeFix","file","useFormatAndSizeCheck","accept","maxSizes","acceptKeys","maxSizeKeys","checkFormatsAndSizes","files","disableAlert","incorrectFileNames","validFiles","isFileValid","checkFormats","checkSizes","accepts","splitType","dropZoneRef","onDrop","isOverDropZone","useDropZone","imageOptions","initCommonAdminImageOptions","useCommonAdminImageOptions","useImageActions","image","random","useDamAcceptTypeAndSizeHelper","createSizesByAssetType","uploadSizes","uploadAccept","UploadQueueItemType","UploadQueueItemStatus","AssetFileProcessStatus","AssetFileFailReason","AssetFileLinkType","assetFileIsImageFile","assetFileIsVideoFile","assetFileIsAudioFile","assetFileIsDocumentFile","useUploadQueueItemFactory","status","chunkSize","getAssetTypeByMimeType","mimeType","useDamUploadChunkSize","apiTimeout","lastChunkSize","minUploadTimeThreshold","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","expectedChunkUploadSpeed","returnFromRange","CHUNK_UPLOAD_TIMEOUT","imageUploadStart","imageUploadChunk","imageId","buffer","size","onUploadProgressCallback","formData","imageUploadFinish","sha","rotateImage","angle","NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS","NOTIFICATION_FALLBACK_MAX_TRIES","damUploadStart","damUploadChunk","damUploadFinish","uploadStatusFallback","notificationFallbackCallback","calculateFallbackTime","uploadQueuesStore","useUploadQueuesStore","modules","installedModules","__webpack_require__","moduleId","getter","property","_classCallCheck","instance","Constructor","RushaCore","_require","toHex","ceilHeapSize","conv","padlen","len","padZeroes","bin","h8","om","align","padData","chunkLen","msgLen","getRawDigest","heap","padMaxChunkLen","io","out","Rusha","padMsgLen","padChunkLen","view","chunkOffset","finalize","chunk","turnOffset","inputLen","precomputedHex","arrayBuffer","binarray","isRunningInWorker","isRunningInSharedWorker","isRunningInServiceWorker","hashData","hasher","cb","hashFile","readTotal","blockSize","reader","workerBehaviourEnabled","done","hash","work","createHash","runWorker","isDedicatedWorkerScope","isRunningInDedicatedWorker","worker","terminate","webpackBootstrapFunc","moduleNameReqExp","dependencyRegExp","quoteRegExp","getModuleDependencies","sources","queueName","retval","fnString","wrapperSignature","webpackRequireName","re","hasValuesInQueues","queues","hasValues","getRequiredModules","modulesQueue","requiredModules","seenModules","queue","moduleToCheck","newModules","newModulesKeys","entryModule","blob","URL","workerUrl","stdlib$840","foreign$841","heap$842","H$843","hash$844","k$845","x$846","i$847","j$848","y0$849","z0$850","y1$851","z1$852","y2$853","z2$854","y3$855","z3$856","y4$857","z4$858","t0$859","t1$860","convStr","H8","H32","lm","convBuf","convBlob","_createClass","defineProperties","descriptor","protoProps","staticProps","Hash","encoding","digest","CHUNK_MAX_RETRY","SPEED_CHECK_INTERVAL","CHUNK_RETRY_INTERVAL","CHUNK_RETRY_MULTIPLY","failUpload","queueItem","finishUpload","handleValidationErrorMessage","errorMessages","readFile","partial","sleep","useUpload","uploadCallback","fileSize","progress","speedStack","lastTimestamp","endTimestamp","lastLoaded","rusha","getCurrentTimestamp","progressCallback","progressEvent","currentStamp","dataSent","uploadChunk","chunkFile","exception","processAndUploadChunk","cancelToken","sleepTime","attempt","speedCheck","speedCheckRun","avgSpeed","remainingBytes","filesize","uploadedChunk","uploadStop","cancelTokenSource","damNotificationsEventBusKey","useDamNotificationsEventBus","useEventBus","DamNotificationName","damNotificationsInitialized","initDamNotifications","notification","enabled","ws","useWebSocket","eventBus","useDamNotifications","useAssetSuggestions","suggestions","newNames","conflicts","defineCached","mapFullToMinimal","mapIdToMinimal","fetchCallback","idProp","cache","toFetch","toAdd","arg","addManual","updateMap","updateToFetch","apiFetch","debouncedFetch","useDebounceFn","generateByIdsApiQuery","apiFetchByIds","apiCreateOne","END_POINT_LIST","fetchKeywordListByIds","fetchKeywordList","createKeyword","keyword","has","get","isLoaded","useDamCachedKeywords","fetchAuthorListByIds","fetchAuthorList","createAuthor","author","useDamCachedAuthors","useDamCachedAuthorsForRemoteAutocomplete","QUEUE_MAX_PARALLEL_UPLOADS","QUEUE_CHUNK_SIZE","addToCachedKeywords","fetchCachedKeywords","addToCachedAuthors","fetchCachedAuthors","createDefault","addDamNotificationListener","queueItemProcessed","queueItemFailed","queueItemDuplicate","queueItemMetadataProcessed","getQueue","queueKey","getQueueItems","addByFiles","assetLicence","createQueue","addQueueItem","recalculateQueueCounts","processUpload","getQueueItemsByStatus","waitingItems","queueItemUploadStart","upload","uploadInit","estimate","setUploadSpeed","originAssetFile","updateNewNames","getAuthorConflicts","assetRes","failReason","stopItemUpload","updateFromDetail","getQueueTotalCount","getQueueProcessedCount","stopUpload","currentItems","clearQueue","forceReloadFileInput","getQueueFileInputKey","getQueueItemsTypes","types","BLOCK_DOUBLE_CLICK_MS","inputRef","fileInputKeyLocal","blockDoubleClick","clickInput","validateData","checked","onDropzoneDrop","onInputFileChange","payload","onFileDropzoneClick","ImageWidgetExtSystemConfig","apiUpdateOne","apiDeleteOne","SYSTEM_CMS","fetchImageListByIds","fetchImage","createImage","updateImage","deleteImage","bulkUpdateImages","updateImagesSequence","images","reqData","imageClient","widgetImageToDamImageUrl","resImage","resolvedSrc","newImage","newImageId","useImageStore","imageDetail","maxPosition","setImageDetail","setImages","addImages","updateMaxPositionIfGreater","newPosition","removeImageByIndex","ADamAssetMetadataValidationScopeSymbol","AImageMetadataValidationScopeSymbol","ADamKeywordCreateValidationScopeSymbol","ADamAuthorCreateValidationScopeSymbol","useImageValidation","validationScope","imageStore","onDialogModelUpdate","onEditAsset","AssetDetailTabImageWithRoi","useAssetDetailStore","authorConflicts","metadataAreTouched","activeTab","updateUploadStore","setAsset","MINUTE_IN_SECONDS","HOUR_IN_SECONDS","DAY_IN_SECONDS","useRemainingTime","remainingTime","short","prefix","svg2k","svg4k","svg8k","svgqhd","svgfhd","svgslot","svglow","svgrss","DIMENSIONS_CONFIG","ICON_SLOTS","ICON_RSS","ICON_LOW","LOW_DIMENSION","checkDimensions","icons","titles","checkDistributions","iconPath","onLoad","uploadingPercentage","backgroundColorComputed","iconColor","remainingTimeShort","useAssetFileFailReason","assetFileFailReasonOptions","getAssetFileFailReasonOption","reasonOption","buttonsDiv","useAssetDetailSidebarActionbar","mounted","unMounted","canTeleport","elements","pinnedCount","getCachedAuthor","displayNewIcon","clickClose","useAuthorSelectActions","mapToMinimal","mapToValueObject","mapToValueObjects","authors","mapToMinimals","useAuthorFilter","AuthorType","useAuthorType","authorTypeOptions","useAuthorValidation","useAuthorFactory","reviewed","fetchItemsMinimal","addAuthor","addNewAuthorText","searchChange","addManualToCachedAuthors","afterCreate","itemSlotIsSelected","useKeywordSelectActions","keywords","useKeywordFilter","getCachedKeyword","useKeywordFactory","useKeywordValidation","addNewKeywordText","addManualToCachedKeywords","panels","assetDetailStore","isTypeImage","assetMainFile","onAnyMetadataChange","uploadQueueStore","saveButtonLoading","onSave","useImageRoiStore","roi","rotate","END_POINT_IMAGE_ROI","fetchRoi","updateRoi","fetchImageRoiList","imageRoiStore","loadRois","afterRotate","PRECISION","regionToCrop","cropper","regionOfInterest","originalImageWidth","originalImageHeight","imageData","ratio","cropToRegion","pointX","pointY","percentageWidth","validateWidth","percentageHeight","validateHeight","_defineProperties","_toPropertyKey","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","arr2","_toPrimitive","hint","prim","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isPositiveNumber","hasOwnProperty","isPlainObject","_constructor","prototype","slice","toArray","forEach","assign","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","styles","hasClass","addClass","removeClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","setData","removeData","REGEXP_SPACES","onceSupported","supported","once","listener","removeListener","listeners","addListener","_handler","_element$listeners","_len2","_key2","getOffset","box","location","REGEXP_ORIGINS","isCrossOriginURL","parts","addTimestamp","getTransforms","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","getPointer","endOnly","pageX","pageY","end","getPointersCenter","startX","startY","getAdjustedSizes","aspectRatio","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","context","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","param","fromCharCode","getStringFromCharCode","dataView","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","uint8","arrayBufferToDataURL","chunks","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","render","containerData","viewMode","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","img","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","events","handlers","ratioX","ratioY","buttons","button","action","change","minLeft","minTop","renderable","side","methods","hasSameSize","offsetX","offsetY","_this$canvasData","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","scale","mode","dragBox","face","croppable","movable","AnotherCropper","Cropper","xhr","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","sizingImage","body","cropBox","parentNode","cropperInstance","imgEl","enable","disable","containerStyle","imgStyle","propsOptions","onUnmounted","DAM_IMAGE_ASPECT_RATIO","cropperContainerStyle","imageUrl","enableCropper","disableCropper","applyRegionOfInterest","saveRoi","cropperReady","cropperEnd","showCropper","sidebar","onImageLoad","isTypeVideo","isTypeAudio","isTypeDocument","toolbarTitle","uploadQueueDialog","uploadQueueSidebar","useUploadQueueDialog","onSaveAndApply","IMAGE_ASPECT_RATIO","assetDetail","enableRoiTab","isDone","processing","waiting","showDone","uploading","uploadProgress","onStopConfirm","queueTotalCount","queueProcessedCount","isUploading","description","assetsMetadataRes","imageWidgetExtSystemConfig","clickMenuOpened","assetSelectDialog","metadataDialog","metadataDialogSaving","metadataDialogLoading","withoutImage","uploadQueue","enabledInteractionComputed","imageLoaded","actionEditMeta","actionLibrary","onFileInput","reload","force","onAssetSelectConfirm","assetLoading","assetDialog","onMetadataDialogClose","onMetadataDialogConfirm","onImageDelete","onAssetUploadConfirm","expandedUploadButton","onDropzoneClick","removeItem","customData","imageSrc","cancelItem","showCancel","showDetail","fillEmptyField","elementProperty","replaceField","useUploadQueueMassOperations","forceReplace","massOperationsData","massOperationsKeywords","massOperationsAuthors","replaceEmptyCustomDataValue","replaceEmptyAuthors","replaceEmptyKeywords","fillEmptyKeywords","replaceKeywords","fillEmptyAuthors","replaceAuthors","fillAll","clearForm","assetTypes","toggleUploadQueueSidebar","isFinished","saveAndCloseButtonLoading","itemsRaw","metadataMap","queueItems","assetMetadataMap","authorIdsToFetch","authorsMap","bulkItem","assetMeta","authorId","authorNames","mapped","uploadButtonComponent","imagesLoading","fetchImagesOnLoad","imagesRes","imageRes","assetSelectConfirmMap","saveImages","resItems","resItem","updateAllPositions","pos","moveImagePositions","innerComponent","resImages","newImages","newImageIds","DATETIME_AUTO_LABEL_TRACKING","defaultColumn","createDatatableColumnsConfig","columnsHidden","disableActions","customPagination","customI18n","localI18n","columnsAll","columnsVisible","columns","column","useSubjectSelect","datatableConfig","datatableHiddenColumns","selected","updateSortBy","resetState","getList","sortByChange","onFetchNextPage","firstTd","generateDatatableMinMaxSelectStrategy","booleanToInteger","useAnzuUserFactory","resourceName","_system","_resourceName","usePermissionConfigFactory","usePermissionGroupFactory","apiAnyRequest","method","axiosConfig","generateListApiQueryWithoutPagination","rowsPerPage","orderField","orderDesc","apiFetchListBatch","sortDesc","batchSize","forceElastic","urlPart","results","nextPageData","numPages","pageResponse","useErrors","useJobApi","JOB_RESOURCE_USER_DATA_DELETE","useJobBaseResource","customJobs","jobResourceOptions","AnzuSystemsCommonAdmin","app","Acl","Notification","arrayItemToggle","arrayToString","arrayFromArgs","arrayFlatten","arraysHaveSameElements","array1","array2","sortedArray1","sortedArray2","browserHistoryReplaceUrlByString","browserHistoryReplaceUrlByRouter","resolved","alert","anzuUser","job","log","permissionGroup","assetSelect","subjectSelect","vuetify","apiValidation","apiForbiddenOperation","jsValidation","en","damImage","useCommonVuetifyConfig","VBtn","VChip","loadCommonFonts","useCommonJobFactory","createBase","useLoginStatus","isStatusNotDefined","isStatusLoginSuccess","isStatusSsoCommunicationFailure","isStatusInternalErrorFailure","isStatusUnauthorized"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAYR,EAAE,GAAAC,MAAMC,MAERC,IAAeC,EAAS,MACrBL,EAAM,UAAU,MAAQA,EAAM,UAAU,KAAKA,EAAM,UAAU,MACrE,GAEKM,IAAOD,EAAS,MAChBD,EAAa,QACRF,EAAE,2BAA2B,IAE/BA,EAAE,4BAA4B,CACtC,GAEKK,IAAQF,EAAS,MACjBL,EAAM,cACDI,EAAa,QAAQ,UAAU,YAEjCA,EAAa,QAAQ,YAAY,OACzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BD,UAAMJ,IAAQC,GAWRO,IAAkBH,EAAS,MACxBL,EAAM,UAAU,YAAY,EACpC;;;;;;;;;;;;;ICdYS,IAAc,CAACC,MACnB,OAAOA,IAAU,KAGbC,KAAY,CAAID,MACpB,CAACD,EAAYC,CAAK,GAGdE,KAAS,CAACF,MACdA,MAAU,MAGNG,KAAW,CAACH,MAChB,OAAOA,KAAU,UAGbI,KAAW,CAACJ,MAChB,OAAOA,KAAU,UAObK,KAAU,CAAcL,MAC5B,MAAM,QAAQA,CAAK,GAGfM,KAAa,CAAoCN,MACrD,OAAOA,KAAU,YAGbO,KAAY,CAACP,MACjB,OAAOA,KAAU,WAGbQ,KAAU,CAACR,MACfI,GAASJ,CAAK,KAAK,gFAAgF,KAAKA,CAAK,GAGzGS,KAAQ,CAACT,MAAgC;AAC9C,QAAAU,IAAI,WAAWV,CAAK;AAE1B,SAAO,CAAC,MAAMA,CAAK,MAAMU,IAAI,OAAOA;AACtC,GAEaC,KAAW,CAACX,MAChB,OAAOA,KAAU,YAAY,CAACK,GAAQL,CAAK,KAAK,CAACE,GAAOF,CAAK,GAGzDY,KAAgB,CAAIZ,MAC3BW,GAASX,CAAK,IACT,OAAO,KAAKA,CAAK,EAAE,WAAW,IAEhC,IAGIa,KAAe,CAACb,MACpBK,GAAQL,CAAK,KAAKA,EAAM,WAAW,GAG/Bc,KAAU,CAACd,MAEpBE,GAAOF,CAAK,KAAKD,EAAYC,CAAK,KAAKA,MAAU,MAAMA,MAAU,KAAKa,GAAab,CAAK,KAAKY,GAAcZ,CAAK,GAOvGe,KAAY,CAAIC,MAAc;AACrC,MAAA,OAAO,mBAAoB;AACzB,QAAA;AACE,aAAAC,GAAQD,CAAM,IACT,gBAAgBE,GAAMF,CAAM,CAAC,IAElCG,GAAMH,CAAM,IACP,gBAAgBI,EAAMJ,CAAM,CAAC,IAE/B,gBAAgBA,CAAM;AAAA,YACf;AACd,aAAO,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC;AAAA,IAC1C;AAEF,SAAO,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC;AAC1C,GCrFaK,KAAc,CAACrB,GAAYsB,IAAgB,MAAc;AACpE,MAAIC,IAAQD;AACR,MAAA;AACM,IAAAC,IAAA,OAAO,SAASvB,GAAO,EAAE;AAAA,EAAA,QAC3B;AACC,WAAAsB;AAAA,EACT;AAEI,SAAA,OAAO,MAAMC,CAAK,IACbD,IAGFC;AACT,GAEaC,KAAgB,CAACxB,GAAYsB,IAAgB,MAAc;AACtE,MAAIC,IAAQD;AACR,MAAA;AACM,IAAAC,IAAA,OAAO,WAAWvB,CAAK;AAAA,EAAA,QACzB;AACC,WAAAsB;AAAA,EACT;AAEI,SAAA,OAAO,MAAMC,CAAK,IACbD,IAGFC;AACT,GAEaE,KAA+B,CAACzB,GAAe0B,IAAY,OAAO;AACvE,QAAAC,IAAQ3B,EAAM,QAAQ0B,CAAS;AAE9B,SAAA;AAAA,IACL,OAAO1B,EAAM,MAAM,GAAG2B,CAAK;AAAA,IAC3B,KAAK3B,EAAM,MAAM2B,IAAQD,EAAU,MAAM;AAAA,EAAA;AAE7C,GAEaE,KAAe,CAAC5B,MACpBA,EACJ,SAAS,EACT,YAAY,EACZ,KACA,EAAA,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,QAAQ,GAAG,EACnB,QAAQ,MAAM,GAAG,EACjB,QAAQ,YAAY,EAAE,EACtB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,EAAE,EACjB,QAAQ,OAAO,EAAE,GAOT6B,KAAoB,CAAmB7B,MAClDA,EAAM,QAAQ,gCAAgC,OAAO,EAAE,YAAY,GAExD8B,KAAmB,CAAC9B,GAAe+B,IAAY,OACtD/B,EAAM,SAAS+B,IACV/B,EAAM,UAAU,GAAG+B,CAAS,IAAI,QAGlC/B,GASIgC,KAA2B,CAACC,GAAkBC,MAAsB;AAC3E,MAAAD,EAAS,QAAQ,GAAG,MAAM;AAAW,WAAAA;AACzC,QAAME,IAAqB,CAAA;AAErB,SADQF,EAAS,MAAM,GAAG,EAC1B,QAAQ,CAACG,GAAMT,MAAU;AAEzB,QADJQ,EAASR,CAAK,IAAIS,GACd,CAACA,EAAK,WAAW,GAAG;AAAG;AACrB,UAAAC,IAAMD,EAAK,UAAU,CAAC;AAC5B,IAAKrC,EAAYmC,EAAOG,CAAG,CAAC,MAAGF,EAASR,CAAK,IAAIO,EAAOE,EAAK,UAAU,CAAC,CAAC,IAAI;AAAA,EAAA,CAC9E,GACMD,EAAS,KAAK,GAAG;AAC1B,GAQaG,KAAoC,CAACL,GAAkBC,MAAsB;AACpF,MAAAD,EAAS,QAAQ,GAAG,MAAM;AAAW,WAAAA;AACzC,QAAME,IAAqB,CAAA;AAErB,SADQF,EAAS,MAAM,GAAG,EAC1B,QAAQ,CAACG,GAAcT,MAAkB;AAEzC,QADJQ,EAASR,CAAK,IAAIS,GACd,CAACA,EAAK,WAAW,GAAG;AAAG;AAC3B,IAAAD,EAASR,CAAK,IAAIS,EAAK,UAAU,CAAC;AAClC,UAAMG,IAAQ,wBACRC,IAAQJ,EAAK,MAAMG,CAAK;AAC9B,IAAIrC,GAAOsC,CAAK,KAAK,CAACA,EAAM,CAAC,KACxBzC,EAAYmC,EAAOM,EAAM,CAAC,CAAC,CAAC,MAAGL,EAASR,CAAK,IAAIO,EAAOM,EAAM,CAAC,CAAC,IAAI;AAAA,EAAA,CAC1E,GACML,EAAS,KAAK,GAAG;AAC1B,GAKaM,KAA6B,CAACC,MAAiBA,EAAK,QAAQ,KAAK,GAAG,GAEpEC,KAAqB,CAACC,MACd,mDACD,KAAKA,CAAK,GCpHjBC,KAAsD,OAAO,IAAI,kBAAkB,GACnFC,KAAuD,OAAO,IAAI,mBAAmB,GACrFC,KAA+D,OAAO,IAAI,kBAAkB,GAC5FC,KAAuE,OAAO,IAAI,wBAAwB,GAC1GC,KAAqE,OAAO,IAAI,yBAAyB,GACzGC,KAAgE,OAAO,IAAI,sBAAsB;;;;;;;;;;;;;;;;;;;;;ACA9G,UAAM5D,IAAQC,GA6BR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEU,IAAW,CAACC,MAAqB;AACrC,MAAAN,EAAK,qBAAqBM,CAAQ;AAAA,IAAA,GAE9BC,IAAS,MAAM;;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjED,UAAMA,IAAQC,GA0BR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEU,IAAW,CAACC,MAAqB;AACrC,MAAAN,EAAK,qBAAqBM,CAAQ;AAAA,IAAA,GAE9BC,IAAS,MAAM;;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnED,UAAMA,IAAQC;AAQE,WAAA2E,GAAArB,IAAmBvD,EAAM,MAAM,GAE/B4E,GAAApB,IAAoBxD,EAAM,OAAO;;;;;;;;;;;;;;ACRjD,UAAMA,IAAQC,GAWR4D,IAAOC,GAKPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAsB;AACnB,QAAAN,EAAA,qBAAqBpC,GAAU0C,CAAQ,CAAC;AAAA,MAC/C;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAER2E,IAAWzE,EAAS,MACjB,KAAK,KAAKwE,EAAmB,MAAM,aAAaA,EAAmB,MAAM,WAAW,CAC5F,GAEKE,IAAgB1E,EAAS,MACtBwE,EAAmB,MAAM,OAAOA,EAAmB,MAAM,cAAcA,EAAmB,MAAM,cAAc,CACtH,GAEKG,IAAc3E,EAAS,MAEzBwE,EAAmB,MAAM,OAAOA,EAAmB,MAAM,cACzDA,EAAmB,MAAM,cACzBA,EAAmB,MAAM,gBAE5B,GAEKI,IAAuB5E,EAAS,MAC7BwE,EAAmB,MAAM,SAAS,CAC1C,GAEKK,IAAe7E,EAAS,MACrB,CAACO,GAAOiE,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASC,EAAS,KACpG,GAEKK,IAAe9E,EAAS,MAEzBO,GAAOiE,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASC,EAAS,SAC5FD,EAAmB,MAAM,gBAAgB,EAE5C,GAEKO,IAAyB/E,EAAS,MACjCO,GAAOiE,EAAmB,MAAM,WAAW,IAGzCA,EAAmB,MAAM,aAFvBA,EAAmB,MAAM,cAAcG,EAAY,QAAQ,IAAI,MAAMA,EAAY,KAG3F,GAEKK,IAAsBhF,EAAS,MAC5BwE,EAAmB,MAAM,WACjC;AACK,IAAAS,GAAAD,GAAqB,CAAClB,GAAUoB,MAAa;AACjD,MAAIpB,MAAaoB,MACfV,EAAmB,MAAM,OAAO,GAChChB,EAAK,QAAQ;AAAA,IACf,CACD;AACK,UAAA2B,IAAenF,EAAS,MACrBwE,EAAmB,MAAM,IACjC;AACK,IAAAS,GAAAE,GAAc,CAACrB,GAAUoB,MAAa;AAC1C,MAAIpB,MAAaoB,KACf1B,EAAK,QAAQ;AAAA,IACf,CACD;AAED,UAAM4B,IAAe,MAAM;AACzB,MAAAZ,EAAmB,MAAM,OAAO;AAAA,IAAA,GAG5Ba,IAAc,MAAM;AACL,MAAAb,EAAA,MAAM,OAAOC,EAAS;AAAA,IAAA,GAGrCa,IAAc,MAAM;AACxB,MAAAd,EAAmB,MAAM,OAAOA,EAAmB,MAAM,OAAO;AAAA,IAAA,GAG5De,IAAc,MAAM;AACxB,MAAAf,EAAmB,MAAM,OAAOA,EAAmB,MAAM,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjGlE,UAAM7E,IAAQC,GAcR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAER0F,IAAY,CAAC9C,MACV,CAAC/C,EAAM,cAAc,SAAS+C,CAAG,GAGpC+C,IAAmB,CAAC/C,MAAgB;AAClC,YAAAgD,IAAStE,GAAUzB,EAAM,aAAa,GACtCqC,IAAQ0D,EAAO,QAAQhD,CAAG;AAChC,UAAIV,IAAQ,IAAI;AACP,QAAA0D,EAAA,OAAO1D,GAAO,CAAC,GACtBwB,EAAK,wBAAwBkC,CAAM;AACnC;AAAA,MACF;AACA,MAAAA,EAAO,KAAKhD,CAAG,GACfc,EAAK,wBAAwBkC,CAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCrC,UAAM/F,IAAQC,GAYR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAGR6F,IAASC,EAAIjG,EAAM,UAAU,GAE7B6E,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAkB;AACpB,QAAA6B,EAAO,QAAQ7B,GACfN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEK+B,IAAyC;AAAA,MAC7C,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAO,SAAS;AAAA,MAC5G,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAO,QAAQ;AAAA,IAAA,GAGnGC,IAAqD;AAAA,MACzD,EAAE,IAAI,GAAG,QAAQ,gDAAgD;AAAA,MACjE,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAO,SAAS;AAAA,MAC5G,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAO,QAAQ;AAAA,IAAA,GAGnGC,IAAc/F,EAAS,MAAM;AAC3B,YAAAgG,IAAQC,EAAQ,MAAM,KAAK,CAAC9B,MAAcA,EAAK,OAAOwB,EAAO,KAAK;AACpE,aAAAK,IAAcnG,EAAEmG,EAAM,MAAM,IACzB;AAAA,IAAA,CACR,GAEKC,IAAUjG,EAAS,MACnBL,EAAM,gBAAsBA,EAAM,gBAClCA,EAAM,YAAY,kBAAwBmG,IACvCD,CACR,GAEKK,IAAc,CAAC/B,MAAkC;AACrD,MAAAK,EAAmB,QAAQL,EAAK;AAAA,IAAA;AAGlC,WAAAc;AAAA,MACEU;AAAA,MACA,CAAC7B,GAAUoB,MAAa;AAClB,YAAA9E,EAAY8E,CAAQ,KAAKpB,MAAaoB;AAAU;AAC9C,cAAAc,IAAQC,EAAQ,MAAM,KAAK,CAAC9B,MAAcA,EAAK,OAAOL,CAAQ;AAChE,QAAAkC,KAAOxC,EAAK,gBAAgBwC,CAAK;AAAA,MACvC;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBf;AAAA,MACET;AAAA,MACA,CAACV,GAAUoB,MAAa;AAClB,QAAA9E,EAAY8E,CAAQ,KAAKpB,MAAaoB,MAC1CS,EAAO,QAAQ7B;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChFpB,UAAMN,IAAOC,GAIP0C,IAAW,MAAM;AACrB,MAAA3C,EAAK,UAAU;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHjB,UAAM7D,IAAQC,GAORwG,IAAepG,EAAS,MACrBL,EAAM,IACd;AAED,WAAAsF;AAAA,MACEmB;AAAA,MACA,CAACtC,MAAa;AACZ,gBAAQ,IAAIA,CAAQ;AAAA,MACtB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;CCnBnB,WAAU;AAAC,MAAIuC;AAAe,MAAG;AAAC,QAAG,OAAO,WAAS,KAAI;AAAC,UAAIC,IAAE,SAAS,cAAc,OAAO;AAAE,MAAAA,EAAE,SAAOD,IAAE,SAAS,KAAK,cAAc,0BAA0B,MAAI,OAAK,SAAOA,EAAE,SAAQC,EAAE,YAAY,SAAS,eAAe,0xBAA0xB,CAAC,GAAE,SAAS,KAAK,YAAYA,CAAC;AAAA,IAAC;AAAA,EAAC,SAAOC,GAAE;AAAC,YAAQ,MAAM,kCAAiCA,CAAC;AAAA,EAAC;AAAC;AAExlC,MAAMC,KAAoB,oBAAI;AAC9B,MAAMC,GAAG;AAAA,EACP,YAAYJ,GAAGK,GAAGC,GAAG;AACnB,SAAK,YAAYD,GAAG,KAAK,WAAWL,GAAG,KAAK,aAAaM,GAAG,KAAK,OAAM;AAAA,EACxE;AAAA,EACD,QAAQ;AACN,iBAAa,KAAK,WAAW,KAAK,GAAG,KAAK,aAAa,KAAK,QAAQ,KAAK;AAAA,EAC1E;AAAA,EACD,SAAS;AACP,SAAK,QAAQ,KAAK,IAAK,GAAE,aAAa,KAAK,WAAW,KAAK,GAAG,KAAK,WAAW,QAAQ,WAAW,KAAK,UAAU,KAAK,SAAS;AAAA,EAC/H;AACH;AACA,SAASC,GAAGN,GAAG;AACb,SAAO,EAAE,KAAKA,IAAIA,KAAqB,oBAAI,IAAG,GAAI,IAAI,SAASD,GAAGK,GAAG;AACnE,QAAIC,IAAIL,EAAE,IAAID,CAAC;AACf,IAAAM,IAAIA,EAAE,KAAKD,CAAC,IAAIJ,EAAE,IAAID,GAAG,CAACK,CAAC,CAAC;AAAA,EAChC,GAAK,KAAK,SAASL,GAAGK,GAAG;AACrB,QAAIC,IAAIL,EAAE,IAAID,CAAC;AACf,IAAAM,MAAMD,IAAIC,EAAE,OAAOA,EAAE,QAAQD,CAAC,MAAM,GAAG,CAAC,IAAIJ,EAAE,IAAID,GAAG,CAAE,CAAA;AAAA,EAC3D,GAAK,MAAM,SAASA,GAAGK,GAAG;AACtB,QAAIC,IAAIL,EAAE,IAAID,CAAC;AACf,IAAAM,KAAKA,EAAE,MAAO,EAAC,IAAI,SAAS,GAAG;AAC7B,QAAED,CAAC;AAAA,IACJ,CAAA,IAAIC,IAAIL,EAAE,IAAI,GAAG,MAAMK,EAAE,MAAK,EAAG,IAAI,SAAS,GAAG;AAChD,QAAEN,GAAGK,CAAC;AAAA,IACZ,CAAK;AAAA,EACL;AACA;AACA,MAAM3F,KAAI6F,GAAI,GAAEC,KAAI,uBAAuBC,KAAI;AAAA,EAC7C;AAAA,IACE,MAAM;AAAA,IACN,QAAQ,IAAI,OAAO,IAAID,EAAC,KAAK;AAAA,EAC9B;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ,IAAI,OAAO,IAAIA,EAAC,IAAI;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ,IAAI,OAAO,IAAIA,EAAC,GAAG;AAAA,EAC5B;AACH,GAAGE,KAAK,CAACT,MAAM;AACb,MAAIA,MAAM;AACR,WAAO;AAAA,MACL,MAAMA;AAAA,MACN,OAAO;AAAA,IACb;AACE,WAASD,IAAI,GAAGA,IAAIS,GAAE,QAAQT,KAAK;AACjC,UAAMK,IAAII,GAAET,CAAC;AACb,QAAIK,EAAE,OAAO,KAAKJ,CAAC;AACjB,aAAO;AAAA,QACL,MAAMI,EAAE;AAAA,QACR,OAAO,WAAWJ,CAAC;AAAA,MAC3B;AAAA,EACG;AACD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAOA;AAAA,EACX;AACA,GAAGU,KAAK,CAACV,MAAM;AACb,UAAQ,OAAOA,GAAC;AAAA,IACd,KAAK;AACH,aAAO,EAAE,MAAM,MAAM,OAAOA,EAAC;AAAA,IAC/B,KAAK;AACH,aAAOS,GAAGT,CAAC;AAAA,IACb;AACE,aAAO,EAAE,MAAM,IAAI,OAAOA,EAAC;AAAA,EAC9B;AACH,GAAGW,KAAI;AAAA,EACL,GAAmB,oBAAI,IAAI,CAAC,QAAQ,UAAU,OAAO,CAAC;AAAA,EACtD,GAAmB,oBAAI,IAAI,CAAC,OAAO,QAAQ,CAAC;AAC9C,GAAGC,KAAM,kBAACZ,MAAM,MAAMA,KAAK,CAAC,GAAGa,KAAK,CAACb,MAAM,OAAOA,KAAK,WAAW,CAAE,IAAGA,EAAE,MAAM,OAAO,EAAE,OAAO,OAAO,GAAGc,KAAK,CAACd,MAAM;AACnH,SAAOA,KAAK,aAAaA,IAAIa,GAAGb,CAAC;AACjC,MAAID,IAAI,MAAMK,IAAI;AAClB,SAAOJ,EAAE,QAAQ,CAACK,MAAM;AACtB,IAAAM,GAAE,EAAE,IAAIN,CAAC,MAAMD,IAAIC,IAAIM,GAAE,EAAE,IAAIN,CAAC,MAAMN,IAAIM;AAAA,EAC3C,CAAA,GAAG,EAAE,GAAGN,GAAG,GAAGK,EAAC;AAClB,GAAGW,KAAI;AAAA,EACL,UAAU,CAAC,OAAO,OAAO;AAAA,EACzB,cAAc;AAAA,EACd,mBAAmB;AAAA,IACjB,OAAO,CAACf,OAAO;AAAA,MACb,QAAQ,CAACA,EAAE,cAAc,CAAC;AAAA,MAC1B,SAAS,CAAC,GAAG,CAAC;AAAA,IACpB;AAAA,IACI,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,CAAC,GAAG,CAAC;AAAA,IACf;AAAA,EACF;AACH,GAAGgB,KAAqBC,gBAAAA,EAAE;AAAA,EACxB,QAAQ;AAAA,EACR,OAAO,CAAC,SAAS,SAAS,aAAa;AAAA,EACvC,MAAMjB,GAAG,EAAE,MAAMD,EAAC,GAAI;AACpB,UAAMK,IAAI,CAACc,GAAGC,MAAM;AAClB,MAAApB,EAAE,SAASmB,GAAGC,CAAC;AAAA,IACrB,GAAOd,IAAI,CAACa,GAAGC,MAAM;AACf,MAAApB,EAAE,SAASmB,GAAGC,CAAC;AAAA,IAChB,GAAE,IAAI,MAAM;AACX,MAAApB,EAAE,aAAa;AAAA,IACrB;AACI,WAAO,CAACmB,GAAGC,OAAOC,EAAC,GAAIC,EAAEC,IAAG;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,SAASlB;AAAA,MACT,SAASC;AAAA,MACT,cAAc;AAAA,IACpB,GAAO;AAAA,MACD,SAASkB,EAAE,MAAM;AAAA,QACfC,GAAEN,EAAE,QAAQ,SAAS;AAAA,MAC7B,CAAO;AAAA,MACD,GAAG;AAAA,IACJ,CAAA;AAAA,EACF;AACH,CAAC,GAAGO,KAAqBR,gBAAAA,EAAE;AAAA,EACzB,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,MAAM,CAAE;AAAA,EACT;AAAA,EACD,MAAMjB,GAAG;AACP,WAAO,CAACD,GAAGK,OAAOgB,EAAC,GAAIC,EAAEC,IAAG;AAAA,MAC1B,KAAK;AAAA,MACL,MAAMvB,EAAE;AAAA,IACd,GAAO;AAAA,MACD,SAASwB,EAAE,MAAM;AAAA,QACfC,GAAEzB,EAAE,QAAQ,SAAS;AAAA,MAC7B,CAAO;AAAA,MACD,GAAG;AAAA,IACJ,GAAE,GAAG,CAAC,MAAM,CAAC;AAAA,EACf;AACH,CAAC,GAAG2B,KAAK,CAAC,SAAS,GAAGC,KAAK,CAAC,SAAS,GAAGC,KAAK,CAAC,WAAW,GAAGC,KAAK,CAAC,WAAW,GAAGC,KAAK;AAAA,EACnF,KAAK;AAAA,EACL,OAAO;AACT,GAAGC,KAAK,EAAE,OAAO,uBAAsB,GAAIC,KAAqBf,gBAAAA,EAAE;AAAA,EAChE,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,OAAO,EAAE,SAAS,GAAI;AAAA,IACtB,OAAO,EAAE,SAAS,IAAK;AAAA,IACvB,SAAS,EAAE,MAAM,SAAS,SAAS,GAAI;AAAA,IACvC,UAAU,EAAE,SAASF,GAAE,SAAU;AAAA,IACjC,SAAS,EAAE,SAAS,mBAAoB;AAAA,IACxC,eAAe,EAAE,SAAS,MAAO;AAAA,IACjC,WAAW,EAAE,SAASA,GAAE,kBAAmB;AAAA,IAC3C,eAAe,EAAE,SAASA,GAAE,aAAc;AAAA,IAC1C,OAAO,EAAE,SAAS,IAAK;AAAA,IACvB,UAAU,EAAE,SAAS,IAAK;AAAA,IAC1B,OAAO,EAAE,SAAS,EAAG;AAAA,IACrB,KAAK,EAAE,SAAS,MAAO;AAAA,IACvB,kBAAkB,EAAE,MAAM,SAAS,SAAS,GAAI;AAAA,IAChD,cAAc,EAAE,MAAM,SAAS,SAAS,GAAI;AAAA,IAC5C,cAAc,EAAE,MAAM,SAAS,SAAS,GAAI;AAAA,IAC5C,yBAAyB,EAAE,MAAM,SAAS,SAAS,GAAI;AAAA,EACxD;AAAA,EACD,OAAO,CAAC,SAAS,WAAW,OAAO;AAAA,EACnC,MAAMf,GAAG,EAAE,MAAMD,EAAC,GAAI;AACpB,UAAMK,IAAIJ,GAAGK,IAAI;AAAA,MACf,MAAM;AAAA,MACN,WAAW;AAAA,IACZ,GAAE,IAAI4B,EAAE,CAAE,CAAA,GAAGf,IAAIe,EAAE,IAAI,GAAGd,IAAIc,EAAE/B,GAAE,IAAI,UAAU,CAAC,GAAGgC,IAAIC,EAAE,MAAM/B,EAAE,kBAAkB,UAAU,GAAGgC,IAAID,EAAE,MAAMD,EAAE,QAAQlB,KAAKS,EAAE,GAAGY,IAAIF,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC5I,MAAMA,EAAE,UAAU8G,EAAE,SAAS,CAAC,GAAGiC,IAAIH,EAAE,MAAMzB,GAAGN,EAAE,KAAK,CAAC,GAAGmC,IAAIJ,EAAE,MAAM;AACnO,YAAM,EAAE,GAAG5I,GAAG,GAAGiJ,MAAM1B,GAAGV,EAAE,QAAQ,GAAGH,IAAIqC,EAAE,MAAM,OAAOG,IAAIH,EAAE,MAAM,MAAMI,IAAI;AAAA,QAC9E,OAAOzC,IAAIwC;AAAA,MACnB;AACM,aAAOD,MAAME,EAAEF,CAAC,IAAI,QAAQjJ,MAAMA,MAAM,WAAWmJ,EAAE,OAAO,cAAc,CAACzC,IAAI,CAAC,GAAGwC,CAAC,MAAMC,EAAEnJ,CAAC,IAAI,QAAQmJ;AAAA,IAC/G,CAAK,GAAGC,IAAIR,EAAE,MAAM,YAAYI,EAAE,KAAK,GAAGK,IAAI,CAACrJ,MAAM;AAC/C,MAAAwG,EAAE,SAASxG,CAAC,GAAG6G,EAAE,gBAAgByC,EAAEtJ,CAAC;AAAA,IACrC,GAAEuJ,IAAI,MAAM;AACX,UAAIvJ;AACJ,MAAA6G,EAAE,kBAAkB7G,IAAI2H,EAAE,UAAU,QAAQ3H,EAAE,MAAK;AAAA,IACpD,GAAEwJ,IAAI,MAAM;AACX,UAAIxJ;AACJ,MAAA6G,EAAE,kBAAkB7G,IAAI2H,EAAE,UAAU,QAAQ3H,EAAE,OAAM;AAAA,IAC1D,GAAOyJ,IAAI,CAACzJ,IAAI,OAAO;AACjB,UAAIA,EAAE,UAAUA,EAAE,QAAQ,KAAKA,EAAE,SAASA,EAAE,OAAO,CAAE,IAAG6G,EAAE,UAAU7G,EAAE;AACpE;AACF,UAAIA,EAAE,SAASA,EAAE,OAAO;AACtB,QAAA0J;AACA;AAAA,MACD;AACD,YAAMT,IAAI,OAAOjJ,EAAE,YAAY,WAAWA,EAAE,WAAW6G,EAAE,UAAUH,IAAI,OAAO1G,EAAE,SAAS,WAAWA,EAAE,QAAQ6G,EAAE,OAAOqC,IAAI,OAAOlJ,EAAE,oBAAoB,YAAYA,EAAE,mBAAmB6G,EAAE,kBAAkB,EAAE,OAAOsC,GAAG,MAAMQ,GAAI,MAAMC,GAAI,MAAMC,GAAI,IAAIC,EAAE,IAAK9J,GAAG+J,IAAI;AAAA,QACvQ,IAAID,KAAMzC,GAAI;AAAA,QACd,OAAO8B;AAAA,QACP,MAAMQ;AAAA,QACN,MAAMC;AAAA,QACN,OAAO9C,EAAE;AAAA,QACT,OAAOJ;AAAA,QACP,QAAQuC,IAAI,IAAIvC;AAAA,QAChB,MAAMmD;AAAA,MACd;AACM,MAAAZ,KAAK,MAAMtB,EAAE,QAAQ,IAAIf,GAAG,MAAM0C,EAAES,CAAC,GAAGA,EAAE,QAAQA,CAAC;AACnD,YAAMC,KAAKnD,EAAE,UAAU,CAACuC,EAAE,QAAQA,EAAE;AACpC,UAAIa,KAAI;AACR,YAAMC,KAAKpB,EAAE,MAAM,KAAK,CAACqB,OAAMA,GAAE,UAAUnK,EAAE,SAASmK,GAAE,SAASnK,EAAE,IAAI;AACvE,OAAC,CAACkJ,KAAK,CAACgB,QAAQF,MAAM,EAAE,MAAM,KAAKD,CAAC,GAAGvD,EAAE,SAASuD,CAAC,GAAGjB,EAAE,MAAM,SAASjC,EAAE,QAAQoD,KAAI,OAAO,EAAE,MAAM,QAAQF,CAAC,GAAGvD,EAAE,SAASuD,CAAC,GAAGjB,EAAE,MAAM,SAASjC,EAAE,QAAQoD,KAAInB,EAAE,MAAM,SAAS,KAAKmB,OAAM,MAAMX,EAAER,EAAE,MAAMmB,EAAC,CAAC;AAAA,IAClN,GAAOG,IAAI,CAACpK,MAAM;AACZ,MAAAqK,EAAErK,CAAC;AAAA,IACT,GAAOsK,IAAI,CAACtK,MAAM;AAAA,MACZ;AAAA,MACA6G,EAAE;AAAA,MACF7G,EAAE,QAAQ;AAAA,IAChB,GAAOuK,IAAI,CAACvK,MAAM2I,EAAE,QAAQ,SAAS,EAAE,YAAY,OAAO3I,EAAE,KAAK,KAAI,GAAIsJ,IAAI,CAACtJ,MAAM;AAC9E,mBAAaA,EAAE,KAAK,GAAGA,EAAE,QAAQ8G,EAAE,WAAW0D,GAAC,GAAIhE,EAAE,WAAWxG,CAAC;AAAA,IACvE,GAAOqK,IAAI,CAACrK,MAAM;AACZ,YAAMiJ,IAAI,EAAE,MAAM,KAAK,CAACvC,MAAMA,EAAE,OAAO1G,CAAC;AACxC,MAAAiJ,KAAKK,EAAEL,CAAC;AAAA,IACT,GAAES,IAAK,MAAM;AACZ,MAAAZ,EAAE,MAAM,QAAQQ,CAAC;AAAA,IACvB,GAAOmB,IAAI,CAACzK,GAAGiJ,MAAM;AACf,UAAIC;AACJ,YAAMxC,KAAKwC,IAAIrC,EAAE,cAAc,OAAO,SAASqC,EAAElJ,CAAC;AAClD,aAAO,OAAO0G,KAAK,aAAaA,EAAEuC,CAAC,IAAIvC;AAAA,IAC7C,GAAOgE,IAAK,CAAC1K,GAAGiJ,MAAM;AAChB,UAAI,CAACN,EAAE;AACL;AACF,YAAMjC,IAAI+D,EAAE,SAASzK,CAAC;AACtB,MAAA4H,EAAE,MAAM5H,GAAG0G,GAAG;AAAA,QACZ,UAAUG,EAAE;AAAA,QACZ,UAAUoC;AAAA,MAClB,CAAO;AAAA,IACP,GAAO0B,KAAK,CAAC3K,GAAGiJ,MAAM;AAChB,UAAI,CAACN,EAAE;AACL;AACF,YAAMjC,IAAI+D,EAAE,SAASzK,CAAC;AACtB,MAAA4H,EAAE,MAAM5H,GAAG0G,GAAG;AAAA,QACZ,UAAUG,EAAE;AAAA,QACZ,UAAUoC;AAAA,MAClB,CAAO;AAAA,IACP;AACI,aAASuB,KAAI;AACX,QAAE,QAAQ,EAAE,MAAM,OAAO,CAACxK,MAAMA,EAAE,UAAU8G,EAAE,SAAS;AAAA,IACxD;AACD,WAAO8D,GAAG,MAAM;AACd,MAAA1J,GAAE,GAAG,OAAOuI,CAAC,GAAGvI,GAAE,GAAG,SAASkJ,CAAC;AAAA,IACrC,CAAK,GAAG,CAACpK,GAAGiJ,OAAOpB,EAAG,GAAEgD,EAAE,OAAO;AAAA,MAC3B,OAAO;AAAA,MACP,OAAOC,GAAE9B,EAAE,KAAK;AAAA,IACtB,GAAO;AAAA,OACAnB,EAAG,GAAEC,EAAEiD,GAAGlC,EAAE,KAAK,GAAG;AAAA,QACnB,MAAM7I,EAAE;AAAA,QACR,SAAS0K;AAAA,QACT,SAASC;AAAA,QACT,cAAcH;AAAA,MACtB,GAAS;AAAA,QACD,SAASxC,EAAE,MAAM;AAAA,WACdH,EAAE,EAAE,GAAGgD,EAAEG,IAAG,MAAMC,GAAGnC,EAAE,OAAO,CAACpC,OAAOmB,EAAC,GAAIgD,EAAE,OAAO;AAAA,YACnD,KAAKnE,EAAE;AAAA,YACP,OAAO;AAAA,YACP,OAAOoE,GAAEP,EAAE7D,CAAC,CAAC;AAAA,YACb,WAAWA,EAAE;AAAA,YACb,cAAc6C;AAAA,YACd,cAAcC;AAAA,UAC1B,GAAa;AAAA,YACDvB,GAAEjI,EAAE,QAAQ,QAAQ;AAAA,cAClB,OAAOkL,GAAE,CAAClL,EAAE,SAAS0G,EAAE,IAAI,CAAC;AAAA,cAC5B,MAAMA;AAAA,cACN,OAAO,MAAM4C,EAAE5C,CAAC;AAAA,YAC9B,GAAe,MAAM;AAAA,cACPyE,EAAE,OAAO;AAAA,gBACP,OAAOD,GAAEZ,EAAE5D,CAAC,CAAC;AAAA,gBACb,SAAS,CAACwC,MAAMG,EAAE3C,CAAC;AAAA,cACnC,GAAiB;AAAA,gBACD1G,EAAE,2BAA2B6H,KAAKgD,EAAEG,IAAG,EAAE,KAAK,KAAK;AAAA,kBACjDtE,EAAE,SAASmB,KAAKgD,EAAE,OAAO;AAAA,oBACvB,KAAK;AAAA,oBACL,OAAO;AAAA,oBACP,WAAWnE,EAAE;AAAA,kBACjC,GAAqB,MAAM,GAAG2B,EAAE,KAAK+C,EAAE,IAAI,EAAE;AAAA,kBAC3BD,EAAE,OAAO;AAAA,oBACP,OAAO;AAAA,oBACP,WAAWzE,EAAE;AAAA,kBACjC,GAAqB,MAAM,GAAG4B,EAAE;AAAA,gBAChC,GAAmB,EAAE,MAAMT,KAAKgD,EAAEG,IAAG,EAAE,KAAK,KAAK;AAAA,kBAC/BtE,EAAE,SAASmB,EAAC,GAAIgD,EAAE,OAAOtC,IAAI8C,EAAE3E,EAAE,KAAK,GAAG,CAAC,KAAK0E,EAAE,IAAI,EAAE;AAAA,kBACvDD,EAAE,OAAO3C,IAAI6C,EAAE3E,EAAE,IAAI,GAAG,CAAC;AAAA,gBAC1B,GAAE,EAAE;AAAA,cACrB,GAAiB,IAAI0B,EAAE;AAAA,YACvB,CAAa;AAAA,UACF,GAAE,IAAID,EAAE,EAAE,GAAG,GAAG;AAAA,QAC3B,CAAS;AAAA,QACD,GAAG;AAAA,MACX,GAAS,IAAI,CAAC,MAAM,CAAC;AAAA,IACrB,GAAO,CAAC;AAAA,EACL;AACH,CAAC,GACKmD,KAAI,CAAC7E,MAAM;AACf,SAAOA,KAAK,aAAaA,IAAI,EAAE,OAAO,IAAI,MAAMA,EAAG,IAAG,OAAOA,KAAK,YAAYvF,GAAE,KAAK,OAAOuF,CAAC;AAC/F;AACA6E,GAAE,QAAQ,CAAC7E,MAAM;AACf,EAAAvF,GAAE,KAAK,SAASuF,CAAC;AACnB;AAEA,SAAS8E,GAAG9E,GAAGD,IAAI,IAAI;AACrB,SAAO,QAAQA,CAAC,EAAE,QAAQ,CAACM,MAAMH,GAAE,IAAI,GAAGG,CAAC,CAAC;AAC5C,QAAMD,IAAIL,EAAE,QAAQ;AACpB,EAAAC,EAAE,OAAO,iBAAiB,MAAMI,CAAC,IAAIyE,IAAG7E,EAAE,UAAUD,EAAE,iBAAiB,iBAAiBiC,EAAE;AAC5F;AACA,MAAM+C,KAAK;AAAA,EACT,SAASD;AACX,GC1SME,KAAmB,CAAC,MAAM,IAAI,GAEvBC,KAAOC,GAA4B;AAAA,EAC9C,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,QAAQF,GAAiB,CAAC;AAAA,EAC1B,gBAAgB;AAAA,EAChB,SAAS,CAACG,GAAgB/I,MAAc;AAClC,IAAA4I,GAAiB,SAASG,CAAM,KAClC,QAAQ,KAAK,WAAWA,CAAM,iBAAiB/I,CAAG,EAAE;AAAA,EAExD;AACF,CAAC,GClBYgJ,KAAmB,CAACC,MACxBA,aAAiBC;AAGnB,MAAMA,WAAuB,MAAM;AAAA,EACxC,YAAYC,GAAeC,IAAU,IAAI;AACvC,UAAMA,CAAO,GACb,KAAK,OAAO,kBACZ,KAAK,QAAQD,GACb,KAAK,UAAUC;AAAA,EACjB;AACF;ACXO,MAAMC,KAAiB,KACjBC,KAAsB,KACtBC,KAAyB,KACzBC,KAA0B,KAC1BC,KAA2B,KAC3BC,KAAwB,KACxBC,KAAmC,KAEnCC,KAAwB,CAACP,IAAgBC,IAAqBC,EAAsB,GCLpFM,KAAgC,CAACZ,MAAiB;;AAC7D,SAAOa,GAAM,aAAab,CAAK,OAAK3H,IAAA2H,EAAM,aAAN,gBAAA3H,EAAgB,YAAWoI;AACjE,GAEaK,KAA0B,CAACd,MAC/BA,aAAiBe;AAGnB,MAAMA,WAA8B,MAAM;AAAA,EAC/C,YAAYb,GAAeC,IAAU,IAAI;AACvC,UAAMA,CAAO,GACb,KAAK,OAAO,yBACZ,KAAK,QAAQD,GACb,KAAK,UAAUC;AAAA,EACjB;AACF;ACAA,MAAMa,KAAmB,qBAEZC,KAAsC,CAACjB,MAAiB;;AACnE,SACEa,GAAM,aAAab,CAAK,OACxB3H,IAAA2H,EAAM,aAAN,gBAAA3H,EAAgB,YAAWqI,QAC3BnI,IAAAyH,EAAM,SAAS,SAAf,gBAAAzH,EAAqB,WAAUyI,QAC/BE,IAAAlB,EAAM,SAAS,SAAf,gBAAAkB,EAAqB;AAEzB,GAEaC,KAA2B,CAACnB,MAChCA,aAAiBoB;AAG1B,SAASC,GAAoBC,GAAwBvJ,GAAgBwJ,GAAgB;;AAC7E,QAAAC,KAAOnJ,IAAAiJ,EAAW,aAAX,gBAAAjJ,EAAqB,MAC5BoJ,IAAQ,CAAA;AACH,aAAA,CAAC1K,GAAK2K,CAAM,KAAK,OAAO,QAAQF,EAAK,MAAM;AACpD,IAAAC,EAAM,KAAK;AAAA,MACT,OAAO1J,IAAS,MAAMwJ,IAAS,YAAYxK;AAAA,MAC3C,QAAQ2K;AAAA,IAAA,CACT;AAEI,SAAAD;AACT;AAEO,MAAML,WAA+B,MAAM;AAAA,EAGhD,YAAYE,GAAwBvJ,GAAgBwJ,GAAgBrB,GAAeC,IAAU,IAAI;AAC/F,UAAMA,CAAO;AAHf,IAAAwB,GAAA;AAIE,SAAK,OAAO,0BACZ,KAAK,QAAQzB,GACb,KAAK,UAAUC,GACf,KAAK,SAASkB,GAAoBC,GAAYvJ,GAAQwJ,CAAM;AAAA,EAC9D;AACF;ACvDa,MAAAK,KAA6B,CAAC5B,MAClCA,aAAiB6B;AAGnB,MAAMA,WAAiC,MAAM;AAAA,EAGlD,YAAYC,GAAc5B,GAAeC,GAAkB;AACzD,UAAMA,CAAO;AAHf,IAAAwB,GAAA;AAIE,SAAK,OAAO,4BACZ,KAAK,QAAQzB,GACb,KAAK,OAAO4B;AAAA,EACd;AACF;ACJA,MAAMC,KAA4B,6BAErBC,KAA8C,CAAChC,MAAiB;;AAC3E,SACEa,GAAM,aAAab,CAAK,OACxB3H,IAAA2H,EAAM,aAAN,gBAAA3H,EAAgB,YAAWqI,QAC3BnI,IAAAyH,EAAM,SAAS,SAAf,gBAAAzH,EAAqB,WAAUwJ,QAC/Bb,IAAAlB,EAAM,SAAS,SAAf,gBAAAkB,EAAqB;AAEzB,GAEae,KAAmC,CAACjC,MACxCA,aAAiBkC;AAG1B,SAASb,GAAoBC,GAAwB;;AAEnD,WADajJ,IAAAiJ,EAAW,aAAX,gBAAAjJ,EAAqB,MACtB;AACd;AAEO,MAAM6J,WAAuC,MAAM;AAAA,EAGxD,YAAYZ,GAAwBpB,GAAeC,IAAU,IAAI;AAC/D,UAAMA,CAAO;AAHf,IAAAwB,GAAA;AAIE,SAAK,OAAO,kCACZ,KAAK,QAAQzB,GACb,KAAK,UAAUC,GACV,KAAA,SAASkB,GAAoBC,CAAU;AAAA,EAC9C;AACF;AC/BA,MAAMa,KAA2B,GAEpBC,KAAgB;AAAA;AAItB,SAASC,KAAY;AAC1B,QAAMC,IAAc,CAACnC,GAAiBoC,IAAWJ,OAA6B;AACrEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGE,IAAe,CAACC,GAAqBH,IAAWJ,OAA6B;AAC3E,UAAA,EAAE,GAAAjO,EAAE,IAAI0L,GAAK;AACP,IAAA0C,EAAApO,EAAEwO,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAGhCI,IAAY,CAACxC,GAAiBoC,IAAWJ,OAA6B;AACnEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGK,IAAa,CAACF,GAAqBH,IAAWJ,OAA6B;AACzE,UAAA,EAAE,GAAAjO,EAAE,IAAI0L,GAAK;AACT,IAAA+C,EAAAzO,EAAEwO,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAG9BM,IAAW,CAAC1C,GAAiBoC,IAAWJ,OAA6B;AAClEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGO,IAAY,CAACJ,GAAqBH,IAAWJ,OAA6B;AACxE,UAAA,EAAE,GAAAjO,EAAE,IAAI0L,GAAK;AACV,IAAAiD,EAAA3O,EAAEwO,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAG7BQ,IAAc,CAAC5C,GAAiBoC,IAAWJ,OAA6B;AACrEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGS,IAAe,CAACN,GAAqBH,IAAWJ,OAA6B;AAC3E,UAAA,EAAE,GAAAjO,EAAE,IAAI0L,GAAK;AACP,IAAAmD,EAAA7O,EAAEwO,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAGhCU,IAAsB,CAACV,IAAWJ,OAA6B;AAC7D,UAAA,EAAE,GAAAjO,EAAE,IAAI0L,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMtO,EAAE,kCAAkC;AAAA,MAC1C,UAAUqO,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGW,IAAgB,CAACC,GAAwBZ,IAAWJ,OAA6B;AAC/E,UAAA,EAAE,GAAAjO,EAAE,IAAI0L,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMtO,EAAE,4BAA4BiP,CAAO;AAAA,MAC3C,UAAUZ,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGa,IAAyB,CAACC,GAA2Bd,IAAW,IAAIe,IAAoB,OAAU;AACtG,UAAM,EAAE,GAAApP,GAAG,IAAAqP,MAAO3D,GAAK,QACjB4D,IAAQ,CAACtP,EAAE,qCAAqC,CAAC;AAEvD,aAAS0G,IAAI,GAAGA,IAAIyI,EAAO,QAAQzI,KAAK;AACtC,UAAI6I,IAAY;AAChB,MAAIH,IACWG,KAAAJ,EAAOzI,CAAC,EAAE,QACd2I,EAAGF,EAAOzI,CAAC,EAAE,KAAK,MAC3B6I,KAAavP,EAAEmP,EAAOzI,CAAC,EAAE,KAAK;AAE1B,YAAA8I,wBAAkB;AACf,eAAApI,IAAI,GAAGA,IAAI+H,EAAOzI,CAAC,EAAE,OAAO,QAAQU,KAAK;AAC5C,YAAAiI,EAAG,yBAAyBF,EAAOzI,CAAC,EAAE,OAAOU,CAAC,CAAC,GAAG;AACxC,UAAAoI,EAAA,IAAIxP,EAAE,yBAAyBmP,EAAOzI,CAAC,EAAE,OAAOU,CAAC,CAAC,CAAC;AAC/D;AAAA,QACF;AACY,QAAAoI,EAAA,IAAIxP,EAAE,mCAAmC,CAAC;AAAA,MACxD;AACI,MAAAuP,EAAU,SAAS,KACfD,EAAA,KAAKC,IAAY,OAAO,MAAM,KAAKC,CAAW,EAAE,KAAK,IAAI,CAAC;AAAA,IAEpE;AACOlB,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMgB,EAAM,KAAKpB,EAAa;AAAA,MAC9B,UAAUG,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGoB,IAAiC,CAACC,GAAgBrB,IAAW,OAAO;AACxE,UAAM,EAAE,GAAArO,GAAG,IAAAqP,MAAO3D,GAAK;AACnB,QAAAtL,IAAOJ,EAAE,2CAA2C;AACpD,IAAAqP,EAAG,iCAAiCK,CAAM,MACrCtP,IAAAJ,EAAE,iCAAiC0P,CAAM,IAE3CpB,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAAlO;AAAA,MACA,UAAUiO,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGsB,IAAmB,CAACtB,IAAW,OAAO;AACpC,UAAA,EAAE,GAAArO,EAAE,IAAI0L,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMtO,EAAE,2BAA2B;AAAA,MACnC,UAAUqO,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGuB,IAAqB,CAACvB,IAAWJ,OAA6B;AAC5D,UAAA,EAAE,GAAAjO,EAAE,IAAI0L,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMtO,EAAE,6BAA6B;AAAA,MACrC,UAAUqO,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA;AA2BI,SAAA;AAAA,IACL,aAAAD;AAAA,IACA,cAAAG;AAAA,IACA,WAAAE;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,wBAAAE;AAAA,IACA,gCAAAO;AAAA,IACA,kBAAAE;AAAA,IACA,oBAAAC;AAAA,IACA,mBAvCwB,CAAC9D,MACrBc,GAAwBd,CAAK,KACZ8D,KACZ,MAEL3C,GAAyBnB,CAAK,KAChCoD,EAAuBpD,EAAM,MAAM,GAC5B,MAELiC,GAAiCjC,CAAK,KACxC2D,EAA+B3D,EAAM,MAAM,GACpC,MAELD,GAAiBC,CAAK,KAItB4B,GAA2B5B,CAAK,KACjB6D,KACV,MAEF;AAAA,EAkBP;AAEJ;;;;;;;;;;;;;;;;AC7LA,UAAM7P,IAAQC,GAuBR4D,IAAOC,GASP,EAAE,GAAA5D,MAAMC,MAER4P,IAAgB9J,EAAI,EAAK,GAEzB+J,IAAS,MAAM;AACnB,MAAAnM,EAAK,qBAAqB,EAAI,GAC9BA,EAAK,QAAQ;AAAA,IAAA,GAGToM,IAAU,MAAM;AACpB,MAAApM,EAAK,qBAAqB,EAAK,GAC/BA,EAAK,SAAS;AAAA,IAAA,GAGVqM,IAASC,MACT,EAAE,qBAAAlB,GAAqB,eAAAC,GAAe,mBAAAkB,MAAsB/B,GAAU,GAEtEgC,IAAY,YAAY;;AAC5B,MAAAxM,EAAK,WAAW;AACZ,UAAA;AAGF,YAFAkM,EAAc,QAAQ,KACtB1L,IAAArE,EAAM,MAAN,QAAAqE,EAAS,UACL,CAAC5D,EAAYT,EAAM,CAAC,KAAKA,EAAM,EAAE,UAAU;AACzB,UAAAiP,KACpBc,EAAc,QAAQ;AACtB;AAAA,QACF;AACM,cAAAO,IAAM,MAAMtQ,EAAM;AACxB,QAAA6D,EAAK,aAAayM,CAAG,GACrBpB,EAAc,SAAS,GACfe,KACJ,CAACxP,EAAY6P,EAAI,EAAE,KAAK,CAACtQ,EAAM,mBAAmBA,EAAM,qBAC1DkQ,EAAO,KAAK;AAAA,UACV,MAAMlQ,EAAM;AAAA,UACZ,QAAQ,EAAE,CAACA,EAAM,iBAAiB,GAAGsQ,EAAItQ,EAAM,iBAAiB,EAAE;AAAA,QAAA,CACnE;AAAA,eAEIgM,GAAO;AACd,QAAAoE,EAAkBpE,CAAK,GACvBnI,EAAK,WAAWmI,CAAK;AAAA,MAAA,UACrB;AACA,QAAA+D,EAAc,QAAQ;AAAA,MACxB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7EF,UAAM/P,IAAQC,GASR,EAAE,GAAAC,MAAMC,MASRoQ,IAAStK,EAAuB,CAAA,CAAE;AAExC,WAAAuK,GAAU,YAAY;AACpB,UAAIxQ,EAAM,aAAaA,EAAM,UAAU,SAAS;AAC1C,YAAA;AACI,gBAAA,EAAE,MAAAwN,MAAS,MAAMiD,GAA4BzQ,EAAM,SAAS,EAAE,MAAM;AAC1E,UAAAuQ,EAAO,QAAQ/C,EAAK;AAAA,gBACV;AAAA,QAEZ;AAAA,IACF,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCD,GAAC,SAAStN,GAAEyG,GAAE;AAAsD,IAAA+J,YAAe/J,EAAmH;AAAA,EAAA,GAAEgK,IAAM,WAAU;AAAc,QAAIzQ,IAAE,KAAIyG,IAAE,KAAII,IAAE,MAAK6J,IAAE,eAAchK,IAAE,UAASI,IAAE,UAASoC,IAAE,QAAOD,IAAE,OAAMzC,IAAE,QAAOmB,IAAE,SAAQC,IAAE,WAAUuB,IAAE,QAAOY,IAAE,QAAOlC,IAAE,gBAAeH,IAAE,8FAA6F4B,IAAE,uFAAsFwB,IAAE,EAAC,MAAK,MAAK,UAAS,2DAA2D,MAAM,GAAG,GAAE,QAAO,wFAAwF,MAAM,GAAG,GAAE,SAAQ,SAAS9K,GAAE;AAAC,UAAIyG,IAAE,CAAC,MAAK,MAAK,MAAK,IAAI,GAAEI,IAAE7G,IAAE;AAAI,aAAM,MAAIA,KAAGyG,GAAGI,IAAE,MAAI,EAAE,KAAGJ,EAAEI,CAAC,KAAGJ,EAAE,CAAC,KAAG;AAAA,IAAG,EAAC,GAAEoE,IAAE,SAAS7K,GAAEyG,GAAEI,GAAE;AAAC,UAAI6J,IAAE,OAAO1Q,CAAC;AAAE,aAAM,CAAC0Q,KAAGA,EAAE,UAAQjK,IAAEzG,IAAE,KAAG,MAAMyG,IAAE,IAAEiK,EAAE,MAAM,EAAE,KAAK7J,CAAC,IAAE7G;AAAA,IAAC,GAAE2I,IAAE,EAAC,GAAEkC,GAAE,GAAE,SAAS7K,GAAE;AAAC,UAAIyG,IAAE,CAACzG,EAAE,UAAS,GAAG6G,IAAE,KAAK,IAAIJ,CAAC,GAAEiK,IAAE,KAAK,MAAM7J,IAAE,EAAE,GAAEH,IAAEG,IAAE;AAAG,cAAOJ,KAAG,IAAE,MAAI,OAAKoE,EAAE6F,GAAE,GAAE,GAAG,IAAE,MAAI7F,EAAEnE,GAAE,GAAE,GAAG;AAAA,IAAC,GAAE,GAAE,SAAS1G,EAAEyG,GAAEI,GAAE;AAAC,UAAGJ,EAAE,KAAM,IAACI,EAAE,KAAM;AAAC,eAAM,CAAC7G,EAAE6G,GAAEJ,CAAC;AAAE,UAAIiK,IAAE,MAAI7J,EAAE,KAAM,IAACJ,EAAE,KAAI,MAAKI,EAAE,MAAK,IAAGJ,EAAE,MAAK,IAAIC,IAAED,EAAE,MAAK,EAAG,IAAIiK,GAAE/I,CAAC,GAAEb,IAAED,IAAEH,IAAE,GAAEwC,IAAEzC,EAAE,MAAO,EAAC,IAAIiK,KAAG5J,IAAE,KAAG,IAAGa,CAAC;AAAE,aAAM,EAAE,EAAE+I,KAAG7J,IAAEH,MAAII,IAAEJ,IAAEwC,IAAEA,IAAExC,OAAK;AAAA,IAAE,GAAE,GAAE,SAAS1G,GAAE;AAAC,aAAOA,IAAE,IAAE,KAAK,KAAKA,CAAC,KAAG,IAAE,KAAK,MAAMA,CAAC;AAAA,IAAC,GAAE,GAAE,SAASA,GAAE;AAAC,aAAM,EAAC,GAAE2H,GAAE,GAAEwB,GAAE,GAAE3C,GAAE,GAAEyC,GAAE,GAAEc,GAAE,GAAEb,GAAE,GAAEpC,GAAE,GAAEJ,GAAE,IAAGgK,GAAE,GAAE9I,EAAC,EAAE5H,CAAC,KAAG,OAAOA,KAAG,EAAE,EAAE,YAAa,EAAC,QAAQ,MAAK,EAAE;AAAA,IAAC,GAAE,GAAE,SAASA,GAAE;AAAC,aAAgBA,MAAT;AAAA,IAAU,EAAC,GAAE4I,IAAE,MAAKoC,IAAE,CAAE;AAAC,IAAAA,EAAEpC,CAAC,IAAEkC;AAAE,QAAIhC,IAAE,kBAAiBC,IAAE,SAAS/I,GAAE;AAAC,aAAOA,aAAaiK,KAAG,EAAE,CAACjK,KAAG,CAACA,EAAE8I,CAAC;AAAA,IAAE,GAAE9B,KAAE,SAAShH,EAAEyG,GAAEI,GAAE6J,GAAE;AAAC,UAAIhK;AAAE,UAAG,CAACD;AAAE,eAAOmC;AAAE,UAAa,OAAOnC,KAAjB,UAAmB;AAAC,YAAIK,IAAEL,EAAE,YAAa;AAAC,QAAAuE,EAAElE,CAAC,MAAIJ,IAAEI,IAAGD,MAAImE,EAAElE,CAAC,IAAED,GAAEH,IAAEI;AAAG,YAAIoC,IAAEzC,EAAE,MAAM,GAAG;AAAE,YAAG,CAACC,KAAGwC,EAAE,SAAO;AAAE,iBAAOlJ,EAAEkJ,EAAE,CAAC,CAAC;AAAA,MAAC,OAAK;AAAC,YAAID,KAAExC,EAAE;AAAK,QAAAuE,EAAE/B,EAAC,IAAExC,GAAEC,IAAEuC;AAAA,MAAC;AAAC,aAAM,CAACyH,KAAGhK,MAAIkC,IAAElC,IAAGA,KAAG,CAACgK,KAAG9H;AAAA,IAAC,GAAEQ,KAAE,SAASpJ,GAAEyG,GAAE;AAAC,UAAGsC,EAAE/I,CAAC;AAAE,eAAOA,EAAE,MAAO;AAAC,UAAI6G,IAAY,OAAOJ,KAAjB,WAAmBA,IAAE;AAAG,aAAOI,EAAE,OAAK7G,GAAE6G,EAAE,OAAK,WAAU,IAAIoD,EAAEpD,CAAC;AAAA,IAAC,GAAEoB,IAAEU;AAAE,IAAAV,EAAE,IAAEjB,IAAEiB,EAAE,IAAEc,GAAEd,EAAE,IAAE,SAASjI,GAAEyG,GAAE;AAAC,aAAO2C,GAAEpJ,GAAE,EAAC,QAAOyG,EAAE,IAAG,KAAIA,EAAE,IAAG,GAAEA,EAAE,IAAG,SAAQA,EAAE,QAAO,CAAC;AAAA,IAAC;AAAE,QAAIwD,IAAE,WAAU;AAAC,eAASa,EAAE9K,GAAE;AAAC,aAAK,KAAGgH,GAAEhH,EAAE,QAAO,MAAK,EAAE,GAAE,KAAK,MAAMA,CAAC,GAAE,KAAK,KAAG,KAAK,MAAIA,EAAE,KAAG,CAAA,GAAG,KAAK8I,CAAC,IAAE;AAAA,MAAE;AAAC,UAAI+B,IAAEC,EAAE;AAAU,aAAOD,EAAE,QAAM,SAAS7K,GAAE;AAAC,aAAK,KAAG,SAASA,GAAE;AAAC,cAAIyG,IAAEzG,EAAE,MAAK6G,IAAE7G,EAAE;AAAI,cAAUyG,MAAP;AAAS,mBAAO,oBAAI,KAAK,GAAG;AAAE,cAAGwB,EAAE,EAAExB,CAAC;AAAE,mBAAO,oBAAI;AAAK,cAAGA,aAAa;AAAK,mBAAO,IAAI,KAAKA,CAAC;AAAE,cAAa,OAAOA,KAAjB,YAAoB,CAAC,MAAM,KAAKA,CAAC,GAAE;AAAC,gBAAIiK,IAAEjK,EAAE,MAAMiB,CAAC;AAAE,gBAAGgJ,GAAE;AAAC,kBAAIhK,KAAEgK,EAAE,CAAC,IAAE,KAAG,GAAE5J,MAAG4J,EAAE,CAAC,KAAG,KAAK,UAAU,GAAE,CAAC;AAAE,qBAAO7J,IAAE,IAAI,KAAK,KAAK,IAAI6J,EAAE,CAAC,GAAEhK,IAAEgK,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAE5J,EAAC,CAAC,IAAE,IAAI,KAAK4J,EAAE,CAAC,GAAEhK,IAAEgK,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAE5J,EAAC;AAAA,YAAC;AAAA,UAAC;AAAC,iBAAO,IAAI,KAAKL,CAAC;AAAA,QAAC,EAAEzG,CAAC,GAAE,KAAK,KAAM;AAAA,MAAA,GAAE6K,EAAE,OAAK,WAAU;AAAC,YAAI7K,IAAE,KAAK;AAAG,aAAK,KAAGA,EAAE,eAAc,KAAK,KAAGA,EAAE,SAAQ,GAAG,KAAK,KAAGA,EAAE,QAAO,GAAG,KAAK,KAAGA,EAAE,UAAS,KAAK,KAAGA,EAAE,SAAQ,GAAG,KAAK,KAAGA,EAAE,WAAY,GAAC,KAAK,KAAGA,EAAE,WAAY,GAAC,KAAK,MAAIA,EAAE;MAAiB,GAAE6K,EAAE,SAAO,WAAU;AAAC,eAAO5C;AAAA,MAAC,GAAE4C,EAAE,UAAQ,WAAU;AAAC,eAAQ,KAAK,GAAG,eAAahD;AAAA,MAAE,GAAEgD,EAAE,SAAO,SAAS7K,GAAEyG,GAAE;AAAC,YAAII,IAAEuC,GAAEpJ,CAAC;AAAE,eAAO,KAAK,QAAQyG,CAAC,KAAGI,KAAGA,KAAG,KAAK,MAAMJ,CAAC;AAAA,MAAC,GAAEoE,EAAE,UAAQ,SAAS7K,GAAEyG,GAAE;AAAC,eAAO2C,GAAEpJ,CAAC,IAAE,KAAK,QAAQyG,CAAC;AAAA,MAAC,GAAEoE,EAAE,WAAS,SAAS7K,GAAEyG,GAAE;AAAC,eAAO,KAAK,MAAMA,CAAC,IAAE2C,GAAEpJ,CAAC;AAAA,MAAC,GAAE6K,EAAE,KAAG,SAAS7K,GAAEyG,GAAEI,GAAE;AAAC,eAAOoB,EAAE,EAAEjI,CAAC,IAAE,KAAKyG,CAAC,IAAE,KAAK,IAAII,GAAE7G,CAAC;AAAA,MAAC,GAAE6K,EAAE,OAAK,WAAU;AAAC,eAAO,KAAK,MAAM,KAAK,QAAO,IAAG,GAAG;AAAA,MAAC,GAAEA,EAAE,UAAQ,WAAU;AAAC,eAAO,KAAK,GAAG,QAAS;AAAA,MAAA,GAAEA,EAAE,UAAQ,SAAS7K,GAAEyG,GAAE;AAAC,YAAII,IAAE,MAAK6J,IAAE,CAAC,CAACzI,EAAE,EAAExB,CAAC,KAAGA,GAAEmB,IAAEK,EAAE,EAAEjI,CAAC,GAAE6H,KAAE,SAAS7H,IAAEyG,IAAE;AAAC,cAAIC,KAAEuB,EAAE,EAAEpB,EAAE,KAAG,KAAK,IAAIA,EAAE,IAAGJ,IAAEzG,EAAC,IAAE,IAAI,KAAK6G,EAAE,IAAGJ,IAAEzG,EAAC,GAAE6G,CAAC;AAAE,iBAAO6J,IAAEhK,KAAEA,GAAE,MAAMuC,CAAC;AAAA,QAAC,GAAEvB,KAAE,SAAS1H,IAAEyG,IAAE;AAAC,iBAAOwB,EAAE,EAAEpB,EAAE,OAAM,EAAG7G,EAAC,EAAE,MAAM6G,EAAE,OAAO,GAAG,IAAG6J,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,GAAG,GAAG,MAAMjK,EAAC,CAAC,GAAEI,CAAC;AAAA,QAAC,GAAEyC,KAAE,KAAK,IAAGwB,KAAE,KAAK,IAAGD,KAAE,KAAK,IAAGlC,KAAE,SAAO,KAAK,KAAG,QAAM;AAAI,gBAAOf;UAAG,KAAKuB;AAAE,mBAAOuH,IAAE7I,GAAE,GAAE,CAAC,IAAEA,GAAE,IAAG,EAAE;AAAA,UAAE,KAAKF;AAAE,mBAAO+I,IAAE7I,GAAE,GAAEiD,EAAC,IAAEjD,GAAE,GAAEiD,KAAE,CAAC;AAAA,UAAE,KAAKtE;AAAE,gBAAIoC,KAAE,KAAK,UAAU,aAAW,GAAEoC,MAAG1B,KAAEV,KAAEU,KAAE,IAAEA,MAAGV;AAAE,mBAAOf,GAAE6I,IAAE7F,KAAEG,KAAEH,MAAG,IAAEG,KAAGF,EAAC;AAAA,UAAE,KAAK7B;AAAA,UAAE,KAAKc;AAAE,mBAAOrC,GAAEiB,KAAE,SAAQ,CAAC;AAAA,UAAE,KAAKO;AAAE,mBAAOxB,GAAEiB,KAAE,WAAU,CAAC;AAAA,UAAE,KAAK7B;AAAE,mBAAOY,GAAEiB,KAAE,WAAU,CAAC;AAAA,UAAE,KAAKjC;AAAE,mBAAOgB,GAAEiB,KAAE,gBAAe,CAAC;AAAA,UAAE;AAAQ,mBAAO,KAAK,MAAO;AAAA,QAAA;AAAA,MAAC,GAAEkC,EAAE,QAAM,SAAS7K,GAAE;AAAC,eAAO,KAAK,QAAQA,GAAE,EAAE;AAAA,MAAC,GAAE6K,EAAE,OAAK,SAAS7K,GAAEyG,GAAE;AAAC,YAAII,GAAEL,IAAEyB,EAAE,EAAEjI,CAAC,GAAE4H,IAAE,SAAO,KAAK,KAAG,QAAM,KAAIC,MAAGhB,IAAE,CAAA,GAAGA,EAAEoC,CAAC,IAAErB,IAAE,QAAOf,EAAEkD,CAAC,IAAEnC,IAAE,QAAOf,EAAEc,CAAC,IAAEC,IAAE,SAAQf,EAAEsC,CAAC,IAAEvB,IAAE,YAAWf,EAAEqC,CAAC,IAAEtB,IAAE,SAAQf,EAAEC,CAAC,IAAEc,IAAE,WAAUf,EAAEH,CAAC,IAAEkB,IAAE,WAAUf,EAAE6J,CAAC,IAAE9I,IAAE,gBAAef,GAAGL,CAAC,GAAEkB,KAAElB,MAAIyC,IAAE,KAAK,MAAIxC,IAAE,KAAK,MAAIA;AAAE,YAAGD,MAAImB,KAAGnB,MAAI2C,GAAE;AAAC,cAAIG,KAAE,KAAK,QAAQ,IAAIS,GAAE,CAAC;AAAE,UAAAT,GAAE,GAAGzB,EAAC,EAAEH,EAAC,GAAE4B,GAAE,KAAI,GAAG,KAAK,KAAGA,GAAE,IAAIS,GAAE,KAAK,IAAI,KAAK,IAAGT,GAAE,YAAW,CAAE,CAAC,EAAE;AAAA,QAAE;AAAM,UAAAzB,MAAG,KAAK,GAAGA,EAAC,EAAEH,EAAC;AAAE,eAAO,KAAK,KAAM,GAAC;AAAA,MAAI,GAAEmD,EAAE,MAAI,SAAS7K,GAAEyG,GAAE;AAAC,eAAO,KAAK,MAAO,EAAC,KAAKzG,GAAEyG,CAAC;AAAA,MAAC,GAAEoE,EAAE,MAAI,SAAS7K,GAAE;AAAC,eAAO,KAAKiI,EAAE,EAAEjI,CAAC,CAAC;MAAG,GAAE6K,EAAE,MAAI,SAAS6F,GAAE9I,GAAE;AAAC,YAAImC,GAAElC,IAAE;AAAK,QAAA6I,IAAE,OAAOA,CAAC;AAAE,YAAIhJ,IAAEO,EAAE,EAAEL,CAAC,GAAE0B,KAAE,SAAStJ,IAAE;AAAC,cAAIyG,KAAE2C,GAAEvB,CAAC;AAAE,iBAAOI,EAAE,EAAExB,GAAE,KAAKA,GAAE,KAAM,IAAC,KAAK,MAAMzG,KAAE0Q,CAAC,CAAC,GAAE7I,CAAC;AAAA,QAAC;AAAE,YAAGH,MAAIC;AAAE,iBAAO,KAAK,IAAIA,GAAE,KAAK,KAAG+I,CAAC;AAAE,YAAGhJ,MAAIyB;AAAE,iBAAO,KAAK,IAAIA,GAAE,KAAK,KAAGuH,CAAC;AAAE,YAAGhJ,MAAIuB;AAAE,iBAAOK,GAAE,CAAC;AAAE,YAAG5B,MAAIlB;AAAE,iBAAO8C,GAAE,CAAC;AAAE,YAAIwB,MAAGf,IAAE,CAAE,GAACA,EAAEjD,CAAC,IAAEL,GAAEsD,EAAEb,CAAC,IAAErC,GAAEkD,EAAErD,CAAC,IAAE1G,GAAE+J,GAAGrC,CAAC,KAAG,GAAEmD,KAAE,KAAK,GAAG,QAAS,IAAC6F,IAAE5F;AAAE,eAAO7C,EAAE,EAAE4C,IAAE,IAAI;AAAA,MAAC,GAAEA,EAAE,WAAS,SAAS7K,GAAEyG,GAAE;AAAC,eAAO,KAAK,IAAI,KAAGzG,GAAEyG,CAAC;AAAA,MAAC,GAAEoE,EAAE,SAAO,SAAS7K,GAAE;AAAC,YAAIyG,IAAE,MAAKI,IAAE,KAAK,QAAO;AAAG,YAAG,CAAC,KAAK,QAAO;AAAG,iBAAOA,EAAE,eAAagB;AAAE,YAAI6I,IAAE1Q,KAAG,wBAAuB0G,IAAEuB,EAAE,EAAE,IAAI,GAAEnB,KAAE,KAAK,IAAGoC,KAAE,KAAK,IAAGD,KAAE,KAAK,IAAGzC,KAAEK,EAAE,UAASc,KAAEd,EAAE,QAAOe,KAAEf,EAAE,UAASsC,KAAE,SAASnJ,IAAE6G,IAAEH,IAAEI,IAAE;AAAC,iBAAO9G,OAAIA,GAAE6G,EAAC,KAAG7G,GAAEyG,GAAEiK,CAAC,MAAIhK,GAAEG,EAAC,EAAE,MAAM,GAAEC,EAAC;AAAA,QAAC,GAAEiD,KAAE,SAAS/J,IAAE;AAAC,iBAAOiI,EAAE,EAAEnB,KAAE,MAAI,IAAG9G,IAAE,GAAG;AAAA,QAAC,GAAE0H,KAAEE,MAAG,SAAS5H,IAAEyG,IAAEI,IAAE;AAAC,cAAI6J,KAAE1Q,KAAE,KAAG,OAAK;AAAK,iBAAO6G,KAAE6J,GAAE,YAAa,IAACA;AAAA,QAAC;AAAE,eAAOA,EAAE,QAAQpH,GAAG,SAAStJ,IAAE0Q,IAAE;AAAC,iBAAOA,MAAG,SAAS1Q,IAAE;AAAC,oBAAOA,IAAC;AAAA,cAAE,KAAI;AAAK,uBAAO,OAAOyG,EAAE,EAAE,EAAE,MAAM,EAAE;AAAA,cAAE,KAAI;AAAO,uBAAOwB,EAAE,EAAExB,EAAE,IAAG,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAOwC,KAAE;AAAA,cAAE,KAAI;AAAK,uBAAOhB,EAAE,EAAEgB,KAAE,GAAE,GAAE,GAAG;AAAA,cAAE,KAAI;AAAM,uBAAOE,GAAEtC,EAAE,aAAYoC,IAAEtB,IAAE,CAAC;AAAA,cAAE,KAAI;AAAO,uBAAOwB,GAAExB,IAAEsB,EAAC;AAAA,cAAE,KAAI;AAAI,uBAAOxC,EAAE;AAAA,cAAG,KAAI;AAAK,uBAAOwB,EAAE,EAAExB,EAAE,IAAG,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOA,EAAE,EAAE;AAAA,cAAE,KAAI;AAAK,uBAAO0C,GAAEtC,EAAE,aAAYJ,EAAE,IAAGD,IAAE,CAAC;AAAA,cAAE,KAAI;AAAM,uBAAO2C,GAAEtC,EAAE,eAAcJ,EAAE,IAAGD,IAAE,CAAC;AAAA,cAAE,KAAI;AAAO,uBAAOA,GAAEC,EAAE,EAAE;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOK,EAAC;AAAA,cAAE,KAAI;AAAK,uBAAOmB,EAAE,EAAEnB,IAAE,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAOiD,GAAE,CAAC;AAAA,cAAE,KAAI;AAAK,uBAAOA,GAAE,CAAC;AAAA,cAAE,KAAI;AAAI,uBAAOrC,GAAEZ,IAAEoC,IAAE,EAAE;AAAA,cAAE,KAAI;AAAI,uBAAOxB,GAAEZ,IAAEoC,IAAE,EAAE;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOA,EAAC;AAAA,cAAE,KAAI;AAAK,uBAAOjB,EAAE,EAAEiB,IAAE,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOzC,EAAE,EAAE;AAAA,cAAE,KAAI;AAAK,uBAAOwB,EAAE,EAAExB,EAAE,IAAG,GAAE,GAAG;AAAA,cAAE,KAAI;AAAM,uBAAOwB,EAAE,EAAExB,EAAE,KAAI,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAOC;AAAA,YAAC;AAAC,mBAAO;AAAA,UAAI,EAAE1G,EAAC,KAAG0G,EAAE,QAAQ,KAAI,EAAE;AAAA,QAAC,CAAC;AAAA,MAAE,GAAEmE,EAAE,YAAU,WAAU;AAAC,eAAO,KAAG,CAAC,KAAK,MAAM,KAAK,GAAG,kBAAmB,IAAC,EAAE;AAAA,MAAC,GAAEA,EAAE,OAAK,SAAS6F,GAAE3G,GAAElC,GAAE;AAAC,YAAIH,GAAE4B,IAAE,MAAKwB,KAAE7C,EAAE,EAAE8B,CAAC,GAAEc,KAAEzB,GAAEsH,CAAC,GAAE/H,MAAGkC,GAAE,UAAS,IAAG,KAAK,eAAapE,GAAEmC,KAAE,OAAKiC,IAAEG,KAAE,WAAU;AAAC,iBAAO/C,EAAE,EAAEqB,GAAEuB,EAAC;AAAA,QAAC;AAAE,gBAAOC,IAAG;AAAA,UAAA,KAAK3B;AAAE,YAAAzB,IAAEsD,GAAC,IAAG;AAAG;AAAA,UAAM,KAAKrD;AAAE,YAAAD,IAAEsD;AAAI;AAAA,UAAM,KAAKpD;AAAE,YAAAF,IAAEsD,GAAC,IAAG;AAAE;AAAA,UAAM,KAAKxE;AAAE,YAAAkB,KAAGkB,KAAED,MAAG;AAAO;AAAA,UAAM,KAAKM;AAAE,YAAAvB,KAAGkB,KAAED,MAAG;AAAM;AAAA,UAAM,KAAKO;AAAE,YAAAxB,IAAEkB,KAAE/B;AAAE;AAAA,UAAM,KAAKC;AAAE,YAAAY,IAAEkB,KAAEnC;AAAE;AAAA,UAAM,KAAKC;AAAE,YAAAgB,IAAEkB,KAAE5I;AAAE;AAAA,UAAM;AAAQ,YAAA0H,IAAEkB;AAAA,QAAC;AAAC,eAAOf,IAAEH,IAAEO,EAAE,EAAEP,CAAC;AAAA,MAAC,GAAEmD,EAAE,cAAY,WAAU;AAAC,eAAO,KAAK,MAAMlD,CAAC,EAAE;AAAA,MAAE,GAAEkD,EAAE,UAAQ,WAAU;AAAC,eAAOG,EAAE,KAAK,EAAE;AAAA,MAAC,GAAEH,EAAE,SAAO,SAAS7K,GAAEyG,GAAE;AAAC,YAAG,CAACzG;AAAE,iBAAO,KAAK;AAAG,YAAI6G,IAAE,KAAK,SAAQ6J,IAAE1J,GAAEhH,GAAEyG,GAAE,EAAE;AAAE,eAAOiK,MAAI7J,EAAE,KAAG6J,IAAG7J;AAAA,MAAC,GAAEgE,EAAE,QAAM,WAAU;AAAC,eAAO5C,EAAE,EAAE,KAAK,IAAG,IAAI;AAAA,MAAC,GAAE4C,EAAE,SAAO,WAAU;AAAC,eAAO,IAAI,KAAK,KAAK,SAAS;AAAA,MAAC,GAAEA,EAAE,SAAO,WAAU;AAAC,eAAO,KAAK,QAAS,IAAC,KAAK,gBAAc;AAAA,MAAI,GAAEA,EAAE,cAAY,WAAU;AAAC,eAAO,KAAK,GAAG,YAAa;AAAA,MAAA,GAAEA,EAAE,WAAS,WAAU;AAAC,eAAO,KAAK,GAAG,YAAa;AAAA,MAAA,GAAEC;AAAA,IAAC,KAAItD,IAAEyC,EAAE;AAAU,WAAOb,GAAE,YAAU5B,GAAE,CAAC,CAAC,OAAMkJ,CAAC,GAAE,CAAC,MAAKhK,CAAC,GAAE,CAAC,MAAKI,CAAC,GAAE,CAAC,MAAKoC,CAAC,GAAE,CAAC,MAAKD,CAAC,GAAE,CAAC,MAAKtB,CAAC,GAAE,CAAC,MAAKwB,CAAC,GAAE,CAAC,MAAKY,CAAC,CAAC,EAAE,QAAS,SAAS/J,GAAE;AAAC,MAAAwH,EAAExH,EAAE,CAAC,CAAC,IAAE,SAASyG,GAAE;AAAC,eAAO,KAAK,GAAGA,GAAEzG,EAAE,CAAC,GAAEA,EAAE,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC,IAAIoJ,GAAE,SAAO,SAASpJ,GAAEyG,GAAE;AAAC,aAAOzG,EAAE,OAAKA,EAAEyG,GAAEwD,GAAEb,EAAC,GAAEpJ,EAAE,KAAG,KAAIoJ;AAAA,IAAC,GAAEA,GAAE,SAAOpC,IAAEoC,GAAE,UAAQL,GAAEK,GAAE,OAAK,SAASpJ,GAAE;AAAC,aAAOoJ,GAAE,MAAIpJ,CAAC;AAAA,IAAC,GAAEoJ,GAAE,KAAG4B,EAAEpC,CAAC,GAAEQ,GAAE,KAAG4B,GAAE5B,GAAE,IAAE,IAAGA;AAAA,EAAC,CAAC;;;;;;ACAr/N,GAAC,SAASpJ,GAAE0G,GAAE;AAAsD,IAAA8J,EAAA,UAAe9J,EAA8H;AAAA,EAAA,GAAE+J,IAAM,WAAU;AAAc,QAAIzQ,IAAE,UAAS0G,IAAE,wBAAuBD,IAAE;AAAe,WAAO,SAAS,GAAEmB,GAAEf,GAAE;AAAC,UAAIqC,IAAEtB,EAAE;AAAU,MAAAf,EAAE,MAAI,SAAS7G,GAAE;AAAC,YAAI0G,IAAE,EAAC,MAAK1G,GAAE,KAAI,IAAG,MAAK,UAAS;AAAE,eAAO,IAAI4H,EAAElB,CAAC;AAAA,MAAC,GAAEwC,EAAE,MAAI,SAASxC,GAAE;AAAC,YAAID,IAAEI,EAAE,KAAK,OAAQ,GAAC,EAAC,QAAO,KAAK,IAAG,KAAI,GAAE,CAAC;AAAE,eAAOH,IAAED,EAAE,IAAI,KAAK,UAAS,GAAGzG,CAAC,IAAEyG;AAAA,MAAC,GAAEyC,EAAE,QAAM,WAAU;AAAC,eAAOrC,EAAE,KAAK,OAAQ,GAAC,EAAC,QAAO,KAAK,IAAG,KAAI,GAAE,CAAC;AAAA,MAAC;AAAE,UAAIL,IAAE0C,EAAE;AAAM,MAAAA,EAAE,QAAM,SAASlJ,GAAE;AAAC,QAAAA,EAAE,QAAM,KAAK,KAAG,KAAI,KAAK,OAAM,EAAG,EAAEA,EAAE,OAAO,MAAI,KAAK,UAAQA,EAAE,UAASwG,EAAE,KAAK,MAAKxG,CAAC;AAAA,MAAC;AAAE,UAAI0Q,IAAExH,EAAE;AAAK,MAAAA,EAAE,OAAK,WAAU;AAAC,YAAG,KAAK,IAAG;AAAC,cAAIlJ,IAAE,KAAK;AAAG,eAAK,KAAGA,EAAE,eAAgB,GAAC,KAAK,KAAGA,EAAE,YAAa,GAAC,KAAK,KAAGA,EAAE,WAAY,GAAC,KAAK,KAAGA,EAAE,UAAW,GAAC,KAAK,KAAGA,EAAE,YAAa,GAAC,KAAK,KAAGA,EAAE,cAAe,GAAC,KAAK,KAAGA,EAAE,iBAAgB,KAAK,MAAIA,EAAE,mBAAkB;AAAA,QAAE;AAAM,UAAA0Q,EAAE,KAAK,IAAI;AAAA,MAAC;AAAE,UAAIzH,IAAEC,EAAE;AAAU,MAAAA,EAAE,YAAU,SAASpC,GAAEc,GAAE;AAAC,YAAIf,IAAE,KAAK,OAAM,EAAG;AAAE,YAAGA,EAAEC,CAAC;AAAE,iBAAO,KAAK,KAAG,IAAED,EAAE,KAAK,OAAO,IAAEoC,EAAE,KAAK,IAAI,IAAE,KAAK;AAAQ,YAAa,OAAOnC,KAAjB,aAAqBA,IAAE,SAAS9G,GAAE;AAAC,UAASA,MAAT,WAAaA,IAAE;AAAI,cAAI8G,IAAE9G,EAAE,MAAM0G,CAAC;AAAE,cAAG,CAACI;AAAE,mBAAO;AAAK,cAAIc,KAAG,KAAGd,EAAE,CAAC,GAAG,MAAML,CAAC,KAAG,CAAC,KAAI,GAAE,CAAC,GAAEI,IAAEe,EAAE,CAAC,GAAEsB,KAAE,KAAG,CAACtB,EAAE,CAAC,IAAG,CAACA,EAAE,CAAC;AAAE,iBAAWsB,OAAJ,IAAM,IAAQrC,MAAN,MAAQqC,KAAE,CAACA;AAAA,QAAC,EAAEpC,CAAC,GAASA,MAAP;AAAU,iBAAO;AAAK,YAAIoC,IAAE,KAAK,IAAIpC,CAAC,KAAG,KAAG,KAAGA,IAAEA,GAAEN,IAAE;AAAK,YAAGoB;AAAE,iBAAOpB,EAAE,UAAQ0C,GAAE1C,EAAE,KAAOM,MAAJ,GAAMN;AAAE,YAAOM,MAAJ,GAAM;AAAC,cAAI4J,IAAE,KAAK,KAAG,KAAK,OAAM,EAAG,sBAAoB,KAAG,KAAK,UAAW;AAAC,WAAClK,IAAE,KAAK,MAAK,EAAG,IAAI0C,IAAEwH,GAAE1Q,CAAC,GAAG,UAAQkJ,GAAE1C,EAAE,GAAG,eAAakK;AAAA,QAAC;AAAM,UAAAlK,IAAE,KAAK;AAAM,eAAOA;AAAA,MAAC;AAAE,UAAI2C,IAAED,EAAE;AAAO,MAAAA,EAAE,SAAO,SAASlJ,GAAE;AAAC,YAAI0G,IAAE1G,MAAI,KAAK,KAAG,2BAAyB;AAAI,eAAOmJ,EAAE,KAAK,MAAKzC,CAAC;AAAA,MAAC,GAAEwC,EAAE,UAAQ,WAAU;AAAC,YAAIlJ,IAAE,KAAK,SAAS,EAAE,KAAK,OAAO,IAAE,IAAE,KAAK,WAAS,KAAK,GAAG,gBAAc,KAAK,GAAG,kBAAmB;AAAE,eAAO,KAAK,GAAG,YAAU,MAAIA;AAAA,MAAC,GAAEkJ,EAAE,QAAM,WAAU;AAAC,eAAM,CAAC,CAAC,KAAK;AAAA,MAAE,GAAEA,EAAE,cAAY,WAAU;AAAC,eAAO,KAAK,OAAM,EAAG;MAAa,GAAEA,EAAE,WAAS,WAAU;AAAC,eAAO,KAAK,OAAM,EAAG,YAAW;AAAA,MAAE;AAAE,UAAIrB,IAAEqB,EAAE;AAAO,MAAAA,EAAE,SAAO,SAASlJ,GAAE;AAAC,eAAYA,MAAN,OAAS,KAAK,UAAQ6G,EAAE,KAAK,OAAO,yBAAyB,CAAC,EAAE,OAAM,IAAGgB,EAAE,KAAK,IAAI;AAAA,MAAC;AAAE,UAAIF,IAAEuB,EAAE;AAAK,MAAAA,EAAE,OAAK,SAASlJ,GAAE0G,GAAED,GAAE;AAAC,YAAGzG,KAAG,KAAK,OAAKA,EAAE;AAAG,iBAAO2H,EAAE,KAAK,MAAK3H,GAAE0G,GAAED,CAAC;AAAE,YAAIK,IAAE,KAAK,MAAK,GAAGc,IAAEf,EAAE7G,CAAC,EAAE;AAAQ,eAAO2H,EAAE,KAAKb,GAAEc,GAAElB,GAAED,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC,CAAC;;;;ACO1sEkK,GAAM,OAAOC,EAAG;AAEhB,MAAMC,KAAS,YACTC,KAAS,uBAEFC,KAAe,+BACfC,KAAe,+BAEfC,KAAU,MACdN,GAAM,EAAE,IAAI,EAAE,OAAO,GAGjBO,KAAiB,CAACC,MACtBR,GAAMQ,CAAO,EAAE,UAEXC,KAAmB,MACvBvP,GAAY8O,GAAM,EAAE,IAAI,EAAE,KAAM,CAAA,GAG5BU,KAAc,CAACC,IAA0B,IAAMC,IAAgB,OACtED,KAA2B,CAACC,IAAsBZ,GAAQ,EAAA,IAAA,EAAM,OAAO,qBAAqB,IAAIE,KAChGS,KAA2BC,IAAsBZ,GAAQ,EAAA,IAAA,EAAM,OAAO,qBAAqB,IAAIE,KAC/F,CAACS,KAA2BC,IAAsBZ,GAAQ,EAAA,IAAA,EAAM,OAAO,4BAA4B,IAAI,MACpGA,GAAQ,EAAA,IAAA,EAAM,OAAO,4BAA4B,IAAI,KAGjDa,KAAqB,CAACC,IAAO,MACpCA,MAAS,IACJd,GAAA,EAAQ,QAAQ,KAAK,EAAE,IAAI,EAAE,OAAOG,EAAM,IAAID,KAEhDF,GAAM,EAAE,IAAIc,GAAM,MAAM,EAAE,QAAQ,KAAK,EAAE,IAAM,EAAA,OAAOX,EAAM,IAAID,IAG5Da,KAAmB,CAACD,IAAO,MAClCA,MAAS,IACJd,GAAA,EAAQ,MAAM,KAAK,EAAE,IAAI,EAAE,OAAOG,EAAM,IAAID,KAE9CF,GAAM,EAAE,IAAIc,GAAM,MAAM,EAAE,MAAM,KAAK,EAAE,IAAM,EAAA,OAAOX,EAAM,IAAID,IAG1Dc,KAAoB,CAACC,IAAU,GAAGC,IAAoB,UAC7DA,MAAS,SAAMA,wBAAW,SAC1BD,MAAY,IAAUC,IACtBD,IAAU,IAAUjB,GAAMkB,CAAI,EAAE,IAAID,GAAS,SAAS,EAAE,WACxDA,IAAU,IAAUjB,GAAMkB,CAAI,EAAE,SAAS,KAAK,IAAID,CAAO,GAAG,SAAS,EAAE,WACpEC,IAGIC,KAAY,CAACD,MACjBlB,GAAMkB,CAAI,EAAE,IAAM,EAAA,OAAO,qBAAqB,IAAIhB,IAG9CkB,KAAU,MACdpB,GAAM,EAAE,IAAI,EAAE,OAAO,MAAM,GAGvBqB,KAAiB,CAC5Bb,GACAc,IAAgB,OAEZd,MAAYH,MAAgBG,MAAYJ,MAAgBI,MAAY,MAAMzQ,GAAOyQ,CAAO,KAAK5Q,EAAY4Q,CAAO,IAC3Gc,IACFtB,GAAMQ,CAAO,EAAE,OAAO,kBAAkB,GAGpCe,KAAmB,CAACf,GAA4Dc,IAAgB,OAAO;AAEhH,MAAAd,MAAYH,MACZG,MAAYJ,MACZI,MAAY,MACZzQ,GAAOyQ,CAAO,KACd5Q,EAAY4Q,CAAO;AAEZ,WAAAc;AAET,MAAIE,IAAc,IACdC,IAAkB;AAChB,QAAAP,IAAOlB,GAAMQ,CAAO,GACpBkB,IAAM1B;AAOR,SANA0B,EAAI,OAAO,MAAM,MAAMR,EAAK,OAAO,MAAM,MAC7BM,IAAA,KAEZE,EAAI,OAAO,YAAY,MAAMR,EAAK,OAAO,YAAY,MACrCO,IAAA,KAEhB,CAACD,KAAe,CAACC,IAAwBzB,GAAMkB,CAAI,EAAE,OAAO,MAAM,IACjEM,IACExB,GAAMkB,CAAI,EAAE,OAAO,eAAe,IADhBlB,GAAMkB,CAAI,EAAE,OAAO,WAAW;AAEzD,GAEaS,KAAa,CAACnB,GAA4Dc,IAAgB,OACjGd,MAAYH,MAAgBG,MAAYJ,MAAgBI,MAAY,MAAMzQ,GAAOyQ,CAAO,KAAK5Q,EAAY4Q,CAAO,IAC3Gc,IACFtB,GAAMQ,CAAO,EAAE,OAAO,YAAY,GAG9BoB,KAAa,CAACpB,GAA4Dc,IAAgB,OACjGd,MAAYH,MAAgBG,MAAYJ,MAAgBI,MAAY,MAAMzQ,GAAOyQ,CAAO,KAAK5Q,EAAY4Q,CAAO,IAC3Gc,IACFtB,GAAMQ,CAAO,EAAE,OAAO,OAAO,GAGzBqB,KAAW,CAACC,GAAaC,GAAaC,IAA+B,SAAS;AACnF,QAAAC,IAAajC,GAAM8B,CAAK,GACxBI,IAAalC,GAAM+B,CAAK;AACvB,SAAAE,EAAW,KAAKC,GAAYF,CAAI;AACzC;;;;;;;;;;;;;;AC1GA,UAAM7S,IAAQC,GAYR+S,IAAY3S,EAAS,MAClB6R,GAAelS,EAAM,KAAK,SAAS,CAC3C,GACKiT,IAAa5S,EAAS,MACnB6R,GAAelS,EAAM,KAAK,UAAU,CAC5C,GAEK,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;ACXE,SAAA+S,GAA0BnP,GAAiBE,GAAkB;AACpE,SAAA,CAACqC,IAAyC,OAAkB;AACjE,UAAM6I,IAAU1O,EAAY6F,EAAQ,OAAO,IAAI,OAAOA,EAAQ;AAE9D,QAAI6M,IAAe1S,EAAY6F,EAAQ,OAAO,IAAI,OAAOA,EAAQ;AACjE,IAAI7F,EAAY6F,EAAQ,OAAO,KAAK6I,MAAY,SAC9CgE,IAAe,CAAA;AAEjB,QAAIC,IAAS9M,EAAQ;AACrB,WAAI7F,EAAY2S,CAAM,KAAKrP,KAAUE,KAAWqC,EAAQ,SACtD8M,IAASrP,IAAS,MAAME,IAAU,aAAaqC,EAAQ,OAGlD;AAAA,MACL,SAAA6I;AAAA,MACA,QAAAiE;AAAA,MACA,SAASD;AAAA,MACT,OAAO1S,EAAY6F,EAAQ,KAAK,IAAI,KAAKA,EAAQ;AAAA,MACjD,UAAUvF,GAAQoS,CAAY;AAAA,MAC9B,WAAW1S,EAAY6F,EAAQ,SAAS,IAAI,KAAQA,EAAQ;AAAA,MAC5D,SAAS7F,EAAY6F,EAAQ,OAAO,IAAI,KAAQA,EAAQ;AAAA,MACxD,OAAO7E,GAAU0R,CAAY;AAAA,MAC7B,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAEO,SAASE,KAAmB;AAC3B,QAAAC,IAAW,CAACC,MAAmB;AACnC,IAAAA,EAAO,QAAQA,EAAO,SACtBA,EAAO,QAAQ;AAAA,EAAA,GAGXC,IAAW,CAACC,MAAyB;AACzC,eAAWC,KAAcD;AACd,MAAAH,EAAAG,EAAUC,CAAU,CAAC;AAAA,EAChC,GAGIC,IAAiB,CAACF,MAAyB;AAC/C,eAAWC,KAAcD;AACb,MAAAA,EAAAC,CAAU,EAAE,QAAQ;AAAA,EAChC;AAeK,SAAA;AAAA,IACL,gBAAAC;AAAA,IACA,UAAAH;AAAA,IACA,UAAAF;AAAA,IACA,aAhBkB,CAACG,GAAsBG,GAAwBC,MAAmB;AACpF,MAAAL,EAASC,CAAS,GAClBG,EAAW,OAAO,GACdC,KAAmBA;IAAA;AAAA,IAcvB,cAXmB,CAACJ,GAAsBG,GAAwBC,MAAwB;AAC1F,MAAAF,EAAeF,CAAS,GACxBG,EAAW,OAAO,GACTC;IAAA;AAAA,EAQT;AAEJ;;;;;;;;;;ACxEA,UAAM7T,IAAQC,GAWR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,UAAAmP,MAAaD,MAEf,EAAE,GAAAnT,MAAMC,MAER2T,IAAQzT,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEK+T,IAAsB1T,EAAS,MAC9BI,EAAYT,EAAM,WAAW,IAC9BA,EAAM,WAAW,YAAY,eAAqBE,EAAE,2CAA2C,IAC/FF,EAAM,WAAW,YAAY,OAAaE,EAAE,mCAAmC,IAC/EF,EAAM,WAAW,YAAY,cAAcA,EAAM,WAAW,YAAY,WACnEE,EAAE,yCAAyC,IAC7C,KALqCF,EAAM,WAMnD;;;;;;;;;;;;;;;;;;;;;;;ACtCD,UAAMA,IAAQC,GAoBR+T,IAAQ/N,EAAI,EAAE,GACd,EAAE,UAAAgO,GAAU,YAAAC,GAAY,aAAAC,GAAa,WAAAC,GAAW,iBAAAC,EAAgB,IAAIC,GAAOtU,CAAK,GAChF,EAAE,GAAAE,MAAMC,MAERoU,IAAe,CAAChB,MACb,CAAC9S,EAAY8S,CAAM,KAAK,CAAC9S,EAAY8S,EAAO,KAAK,GAEpD,EAAE,UAAAD,MAAaD,MACfmB,IAAgB,CAACjB,MAAgD;AACjE,MAAAgB,EAAahB,CAAM,KACrBD,EAASC,EAAO,KAAK;AAAA,IACvB,GAEIkB,IAAuB,CAACC,IAAoD,WAAc;;AAC9F,QAAIrQ,IAAAqQ,KAAA,gBAAAA,EAAc,UAAd,gBAAArQ,EAAqB,cAAWE,IAAA0P,KAAA,gBAAAA,EAAU,UAAV,gBAAA1P,EAAiB,WACnDiQ,EAAcP,CAAQ,KAEpB/G,IAAAwH,KAAA,gBAAAA,EAAc,UAAd,gBAAAxH,EAAqB,cAAWyH,IAAAR,KAAA,gBAAAA,EAAa,UAAb,gBAAAQ,EAAoB,WACtDH,EAAcL,CAAW,KAEvBS,KAAAF,KAAA,gBAAAA,EAAc,UAAd,gBAAAE,GAAqB,cAAWC,KAAAX,KAAA,gBAAAA,EAAY,UAAZ,gBAAAW,GAAmB,WACrDL,EAAcN,CAAU,KAEtBY,IAAAJ,KAAA,gBAAAA,EAAc,UAAd,gBAAAI,EAAqB,cAAWC,IAAAX,KAAA,gBAAAA,EAAW,UAAX,gBAAAW,EAAkB,WACpDP,EAAcJ,CAAS,GAEpB3T,EAAY4T,CAAe,MACdW,IAAAX,EAAA,UAAA,QAAAW,EAAO,QAAQ,CAACzB,MAAgB;;AAC9C,UAAIlP,IAAAqQ,KAAA,gBAAAA,EAAc,UAAd,gBAAArQ,EAAqB,YAAWkP,EAAO,UACzCD,EAASC,CAAM;AAAA,MACjB;AAAA,IAEJ,GAEI0B,IAA0ChP,EAAI,MAAS;AAC7D,IAAAX,GAAM2P,GAAgB,MAAM;AACtB,UAAAV,EAAaU,CAAc,GAAG;AACjB,QAAAA,EAAA,MAAM,QAAQjB,EAAM,OACnCkB,EAAc,QAAQD,EAAe,OACrCR,EAAqBQ,CAAc;AACnC;AAAA,MACF;AACA,MAAAE,EAAWnB,EAAM,KAAK;AAAA,IAAA,CACvB;AACK,UAAAkB,IAAyCjP,EAAI,MAAS;AACtD,IAAAX,GAAA0O,GAAO,CAACoB,MAAqB;AACjC,MAAAD,EAAWC,CAAQ;AAAA,IAAA,CACpB;AACK,UAAAD,IAAa,CAACC,MAAqB;AACnC,UAAAb,EAAaU,CAAc,GAAG;AAChC,QAAAA,EAAe,MAAM,QAAQG;AAC7B;AAAA,MACF;AACM,YAAA7B,IAAS8B,EAAiBD,CAAQ;AACpC,MAAC3U,EAAY8S,CAAM,MACrBA,EAAO,QAAQ6B,IAEjBF,EAAc,QAAQ3B,GACtBkB,EAAqBS,CAAa;AAAA,IAAA,GAE9BG,IAAmB,CAACD,MAAyC;AAC7D,UAAAjU,GAAMiU,CAAQ,KACZb,EAAaN,CAAQ;AACvB,eAAOA,EAAS;AAGhB,UAAA/S,GAAQkU,CAAQ,KACdb,EAAaJ,CAAW;AAC1B,eAAOA,EAAY;AAGvB,UAAIrT,GAASsU,CAAQ,KAAKA,EAAS,SAAS,GAAG;AAC7C,YAAIb,EAAaH,CAAS,KAAKgB,EAAS,WAAW,MAAM;AACvD,iBAAOhB,EAAU;AAEf,YAAAG,EAAaL,CAAU;AACzB,iBAAOA,EAAW;AAAA,MAEtB;AAAA,IACO,GAGHJ,IAAQzT,EAAS,MAAM;AACvB,UAAAkU,EAAaU,CAAc;AAC7B,eAAO/U,EAAE+U,EAAe,MAAM,UAAU,EAAE;AAExC,UAAAV,EAAaW,CAAa;AAC5B,eAAOhV,EAAEgV,EAAc,MAAM,UAAU,EAAE;AAE3C,YAAMI,IAAe,CAAA;AACjB,aAAAf,EAAaN,CAAQ,KACvBqB,EAAa,KAAKpV,EAAE+T,EAAS,MAAM,UAAU,EAAE,CAAC,GAE9CM,EAAaJ,CAAW,KAC1BmB,EAAa,KAAKpV,EAAEiU,EAAY,MAAM,UAAU,EAAE,CAAC,GAEjDI,EAAaH,CAAS,KACxBkB,EAAa,KAAKpV,EAAEkU,EAAU,MAAM,UAAU,EAAE,CAAC,GAE/CG,EAAaL,CAAU,KACzBoB,EAAa,KAAKpV,EAAEgU,EAAW,MAAM,UAAU,EAAE,CAAC,GAE7CoB,EAAa,KAAK,GAAG;AAAA,IAAA,CAC7B,GAEKC,IAAqBlV,EAAS,MAAM;;AACxC,cAAOgE,IAAA6Q,EAAc,UAAd,gBAAA7Q,EAAqB;AAAA,IAAA,CAC7B;AACK,IAAAiB,GAAAiQ,GAAoB,CAACH,MAAa;AACtC,MAAI,CAAC5T,GAAQwS,EAAM,KAAK,KAAKxS,GAAQ4T,CAAQ,MAC3CpB,EAAM,QAAQ;AAAA,IAChB,CACD;AAEK,UAAAD,IAAsB1T,EAAS,MAAM;;AACrC,aAACI,EAAYT,EAAM,WAAW,MAC9BqE,IAAA6Q,EAAc,UAAd,gBAAA7Q,EAAqB,aAAY,eAAqBnE,EAAE,2CAA2C,MACnGqE,IAAA2Q,EAAc,UAAd,gBAAA3Q,EAAqB,aAAY,OAAarE,EAAE,mCAAmC,MACnFgN,IAAAgI,EAAc,UAAd,gBAAAhI,EAAqB,aAAY,gBAAcyH,IAAAO,EAAc,UAAd,gBAAAP,EAAqB,aAAY,WAC3EzU,EAAE,yCAAyC,IAC7C,KALqCF,EAAM;AAAA,IAK3C,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9ID,UAAMA,IAAQC,GASR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAO+B,GAAYoC,IAAW,EAAE,EAAK,CAAA;AAAA,MAC7F;AAAA,IAAA,CACD,GAEK,EAAE,UAAAmP,MAAaD,MAEf,EAAE,GAAAnT,MAAMC,MAER2T,IAAQzT,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D;;;;;;;;;;ICnCYwV,KAAiB,CAACC,MAAwB;AACjD,GAAAA,KAAA,gBAAAA,EAAO,0BAAyB,eAClCA,EAAM,cAAc;AAExB;;;;;;;;;ACaA,UAAM5R,IAAOC,GAIPkC,IAASC,EAAI,EAAK,GAElByP,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACbzP,EAAA,QAAQ,CAACA,EAAO,OACvBnC,EAAK,gBAAgB;AAAA,IAAA,GAGjB8R,IAAOtV,EAAS,MACb2F,EAAO,QAAQ,0BAA0B,yBACjD,GAEK,EAAE,GAAA9F,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfd,UAAM0D,IAAOC,GAIP4R,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB5R,EAAK,QAAQ;AAAA,IAAA,GAGT,EAAE,GAAA3D,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;ACXd,UAAM0D,IAAOC,GAIP4R,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB5R,EAAK,OAAO;AAAA,IAAA,GAGR,EAAE,GAAA3D,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLd,UAAM0D,IAAOC,GAIP8R,IAAc,MAAM;AACxB,MAAA/R,EAAK,aAAa;AAAA,IAAA,GAGdgS,IAAiB5P,EAAI,EAAK,GAE1B6P,IAAuB,MAAM;AAClB,MAAAD,EAAA,QAAQ,CAACA,EAAe;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3B7B,IAAAE,uBAAAA,OACVA,EAAAA,EAAA,OAAO,CAAP,IAAA,QACAA,EAAAA,EAAA,aAAa,CAAb,IAAA,cACAA,EAAAA,EAAA,QAAQ,CAAR,IAAA,SACAA;AAAAA,EAAAA,EAAA,UAAU;AAAA;AAAV,IAAA,WAJUA,IAAAA,MAAA,CAAA,CAAA;AAOL,SAASC,KAAW;AACnB,QAAA,EAAE,MAAM7V,MAER8V,IAAehQ,EAAgC;AAAA,IACnD;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,8BAA8B;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,oCAAoC;AAAA,MAC7C,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,+BAA+B;AAAA,MACxC,OAAO;AAAA,IACT;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,cAAAgQ;AAAA,IACA,gBANqB,CAACvV,MACfuV,EAAa,MAAM,KAAK,CAACzR,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAK7D;AAEJ;;;;;;;;;ACpCA,UAAMV,IAAQC,GAIR4D,IAAOC,GAGPoS,IAAgB7V,EAAS;AAAA,MAC7B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImW,GAAU;AACZ,QAAAtS,EAAK,UAAUsS,CAAQ;AAAA,MACzB;AAAA,IAAA,CACD,GACK,EAAE,gBAAAC,MAAmBJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACff,IAAAK,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,QAAQ,SACRA,EAAA,OAAO,QACPA,EAAA,eAAe,WACfA,EAAA,UAAU,WALAA,IAAAA,MAAA,CAAA,CAAA;AAQL,SAASC,KAAiB;AACzB,QAAA,EAAE,MAAMnW,MAERoW,IAAqBtQ,EAAsC;AAAA,IAC/D;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,oCAAoC;AAAA,IAC/C;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,qCAAqC;AAAA,IAChD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,oCAAoC;AAAA,IAC/C;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,4CAA4C;AAAA,IACvD;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,oBAAAsQ;AAAA,IACA,sBAN2B,CAAC7V,MACrB6V,EAAmB,MAAM,KAAK,CAAC/R,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKnE;AAEJ;;;;;;;;;;;ACrCA,UAAMV,IAAQC,GAKR,EAAE,gBAAAmW,MAAmBJ,MACrBQ,IAAcnW,EAAS,MAAM+V,EAAepW,EAAM,KAAK,CAAC,GAExD,EAAE,sBAAAyW,MAAyBH,MAC3BI,IAAoBrW,EAAS,MAAMoW,EAAqBzW,EAAM,WAAW,CAAC;;;;;;;;;;;;;;;;;ICZnE2W,KAAmB,CAAIC,MAAW;AACvC,QAAAC,IAAY,OAAO,oBAAoBD,CAAG;AAChD,aAAWxT,KAAQyT,GAAW;AACtB,UAAAnW,IAASkW,EAAYxT,CAAI;AAC3B,IAAA1C,KAAS,OAAOA,KAAU,YAC5BiW,GAAiBjW,CAAK;AAAA,EAE1B;AACO,SAAA,OAAO,OAAOkW,CAAG;AAC1B,GAEaE,KAAkB,CAAIF,MAC1B,OAAO,KAAKA,CAAG,EAAE,IAAI,CAAClP,MAAMkP,EAAIlP,CAAC,CAAC,GAG9BqP,KAAuB,CAAUH,GAAUlS,GAAcsS,IAAY,QAAQ;AAClF,QAAA,IAAItS,EAAK,MAAMsS,CAAS;AAC9B,MAAItQ,IAAIkQ;AACR,SAAO,EAAE,UAAQ;AACT,UAAA7P,IAAI,EAAE;AACZ,QAAItG,EAAYsG,CAAC,KAAK,EAAEA,KAAKL;AAAI;AACjC,IAAAA,IAAIA,EAAEK,CAAC;AAAA,EACT;AACO,SAAAL;AACT,GAEauQ,KAAuB,CAACL,GAAUlS,GAAchE,GAAYsW,IAAY,QAAQ;AACrF,QAAA7N,IAAIzE,EAAK,MAAMsS,CAAS;AAC9B,MAAItQ,IAAIkQ;AACD,SAAAzN,EAAE,SAAS,KAAG;AACb,UAAA,IAAIA,EAAE;AACZ,QAAI1I,EAAY,CAAC;AAAG;AACpB,IAAM,KAAKiG,MAAMA,EAAA,CAAC,IAAI,KACtBA,IAAIA,EAAE,CAAC;AAAA,EACT;AACE,EAAAA,EAAAyC,EAAE,CAAC,CAAC,IAAIzI;AACZ;AAEO,SAASwW,GAA8BN,GAAQlS,GAAcsS,IAAY,KAAQ;AAChF,QAAAG,IAAYzS,EAAK,MAAMsS,CAAS,GAChCI,IAAYD,EAAU,SAAS;AAE5B,WAAAE,EAAQT,GAAUvU,IAAQ,GAAG;AAC9B,UAAAU,IAAMoU,EAAU9U,CAAK;AAE3B,QAAIA,MAAU+U,GAAW;AACvB,aAAOR,EAAI7T,CAAG;AACd;AAAA,IACF;AAEA,IAAAsU,EAAQT,EAAI7T,CAAG,GAAGV,IAAQ,CAAC;AAAA,EAC7B;AAEA,SAAAgV,EAAQT,CAAG,GACJA;AACT;AClDa,MAAAU,KAAe,CAAC5W,MACpBW,GAASX,CAAK,KAAK,OAAO,OAAOA,GAAO,QAAQ,GCF5C6W,KAAmB,CAAC7W,MACxB,OAAO,OAAOA,GAAO,WAAW,GCG5B8W,KAAmB;AAQzB,SAASC,GAAsCnR,GAA6B;AACjF,QAAMoR,IAAejX,EAAY6F,CAAO,KAAK7F,EAAY6F,EAAQ,aAAa,GACxEqR,KACJrR,KAAA,gBAAAA,EAAS,iBACRoR,IAAgB1T,GAAOP,IAAmB,MAAS,IAAoC,SACpFmU,KACJtR,KAAA,gBAAAA,EAAS,uBACRoR,IAAgB1T,GAAON,IAAyB,MAAS,IAA0B,SAEhFmU,IAAM,CAACC,GAAQ7T,MAA8B;AACjD,QAAIxD,EAAYkX,CAAW;AACnB,YAAA,IAAI,MAAM,gGAAgG;AAClH,QAAIhX,GAAUiX,CAAiB,KAAKjX,GAAUiX,EAAkB,GAAG;AAAU,aAAAA,EAAkB,IAAIE,GAAK7T,CAAO;AAC/G,QAAIxD,EAAYkX,EAAY,KAAK,KAAKA,EAAY,MAAM,OAAO;AAAU,aAAA;AACzE,QAAIA,EAAY,MAAM,MAAM,SAASH,EAAgB;AAAU,aAAA;AAC/D,UAAMO,IAAahB,GAAqBY,EAAY,OAAO,yBAAyBG,CAAG;AACvF,QAAIrX,EAAYsX,CAAU;AAAU,aAAA;AACpC,YAAQA,GAAY;AAAA,MAClB,KAAKhC,GAAM;AACF,eAAA;AAAA,MACT,KAAKA,GAAM;AACF,eAAA;AAAA,MACT,KAAKA,GAAM;AACT,YAAItV,EAAYwD,CAAO;AACrB,gBAAM,IAAI,MAAM,6BAA6B6T,CAAG,mDAAmD;AACrG,eAAOE,EAAS/T,CAAO;AAAA,MACzB;AACS,eAAA;AAAA,IACX;AAAA,EAAA;AAGF,WAAS+T,EAAS/T,GAAiB;AACjC,QAAIxD,EAAYkX,CAAW;AACnB,YAAA,IAAI,MAAM,gGAAgG;AAClH,QAAI,CAAClX,EAAYmX,CAAiB,KAAK,CAACnX,EAAYmX,EAAkB,QAAQ;AACrE,aAAAA,EAAkB,SAAS3T,CAAO;AAC3C,QAAI0T,EAAY,OAAO;AACjB,UAAAL,GAAarT,CAAO;AACtB,eAAOA,EAAQ,OAAO,SAAS0T,EAAY,MAAM,EAAE;AAEjD,UAAAJ,GAAiBtT,CAAO;AACnB,eAAAA,EAAQ,cAAc0T,EAAY,MAAM;AAAA,IAEnD;AACO,WAAA;AAAA,EACT;AAoBO,SAAA;AAAA,IACL,KAAAE;AAAA,IACA,WApBgB,CAACI,GAAWhU,MACxBgU,EAAK,WAAW,IACX,KAEFA,EAAK,MAAM,CAACH,MACVD,EAAIC,GAAK7T,CAAO,CACxB;AAAA,IAeD,YAZiB,CAACgU,GAAWhU,MACzBgU,EAAK,WAAW,IACX,KAEFA,EAAK,KAAK,CAACH,MACTD,EAAIC,GAAK7T,CAAO,CACxB;AAAA,EAMD;AAEJ;;;;;;;;ACjFA,UAAMjE,IAAQC,GAUR0X,IAAc3T,GAAOP,EAAiB,GACtC,EAAE,KAAAoU,MAAQJ,MAEVS,IAAUjS,EAAa4R,EAAI7X,EAAM,YAAYA,EAAM,OAAO,CAAC;AAEjE,WAAAsF,GAAMqS,GAAa,MAAM;AACvB,MAAAO,EAAQ,QAAQL,EAAI7X,EAAM,YAAYA,EAAM,OAAO;AAAA,IAAA,CACpD;;;;;;;;;ACnBD,UAAMA,IAAQC,GAURkY,IAAS9X,EAAS,MACf6R,GAAelS,EAAM,UAAUA,EAAM,aAAa,CAC1D;;;;ACjBM,IAAIoY,KAAQ;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GACWC,KAAW;AAAA,EAClB,UAAU,CAAE;AAAA,EACZ,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,eAAe;AAAA,EACf,SAAS,OAAO,UAAW,YACvB,OAAO,UAAU,UAAU,QAAQ,MAAM,MAAM;AAAA,EACnD,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,SAAS,CAAE;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,cAAc,SAAUC,GAAK;AACzB,WAAO,OAAO,UAAY,OAAe,QAAQ,KAAKA,CAAG;AAAA,EAC5D;AAAA,EACD,SAAS,SAAUC,GAAW;AAC1B,QAAIxG,IAAO,IAAI,KAAKwG,EAAU,QAAS,CAAA;AACvC,IAAAxG,EAAK,SAAS,GAAG,GAAG,GAAG,CAAC,GACxBA,EAAK,QAAQA,EAAK,QAAS,IAAG,KAAMA,EAAK,OAAQ,IAAG,KAAK,CAAE;AAC3D,QAAIyG,IAAQ,IAAI,KAAKzG,EAAK,eAAe,GAAG,CAAC;AAC7C,WAAQ,IACJ,KAAK,QAAQA,EAAK,QAAO,IAAKyG,EAAM,QAAO,KAAM,QAC7C,KACEA,EAAM,WAAW,KAAK,KACxB,CAAC;AAAA,EACZ;AAAA,EACD,eAAe;AAAA,EACf,sBAAsB,CAAE;AAAA,EACxB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,KAAK,oBAAI,KAAM;AAAA,EACf,UAAU,CAAE;AAAA,EACZ,SAAS,CAAE;AAAA,EACX,aAAa,CAAE;AAAA,EACf,WAAW,CAAE;AAAA,EACb,WAAW,CAAE;AAAA,EACb,eAAe,CAAE;AAAA,EACjB,QAAQ,CAAE;AAAA,EACV,eAAe,CAAE;AAAA,EACjB,SAAS,CAAE;AAAA,EACX,eAAe,CAAE;AAAA,EACjB,cAAc,CAAE;AAAA,EAChB,uBAAuB,CAAE;AAAA,EACzB,SAAS,CAAE;AAAA,EACX,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,aAAa;AAAA,EACb,MAAM;AACV,GClFWC,KAAU;AAAA,EACjB,UAAU;AAAA,IACN,WAAW,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,IAC3D,UAAU;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,EACJ;AAAA,EACD,QAAQ;AAAA,IACJ,WAAW;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,IACD,UAAU;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,EACJ;AAAA,EACD,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,EAC5D,gBAAgB;AAAA,EAChB,SAAS,SAAUC,GAAK;AACpB,QAAI1R,IAAI0R,IAAM;AACd,QAAI1R,IAAI,KAAKA,IAAI;AACb,aAAO;AACX,YAAQA,IAAI,IAAE;AAAA,MACV,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACd;AAAA,EACJ;AAAA,EACD,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,MAAM,CAAC,MAAM,IAAI;AAAA,EACjB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,WAAW;AACf,GCtEW2R,KAAM,SAAUC,GAAQC,GAAQ;AACvC,SAAIA,MAAW,WAAUA,IAAS,KAC1B,QAAQD,GAAQ,MAAMC,IAAS,EAAE;AAC7C,GACWC,KAAM,SAAUC,GAAM;AAAE,SAAQA,MAAS,KAAO,IAAI;;AACxD,SAASC,GAASC,GAAIC,GAAM;AAC/B,MAAIhZ;AACJ,SAAO,WAAY;AACf,QAAIiZ,IAAQ,MACRC,IAAO;AACX,iBAAalZ,CAAC,GACdA,IAAI,WAAW,WAAY;AAAE,aAAO+Y,EAAG,MAAME,GAAOC,CAAI;AAAA,OAAMF,CAAI;AAAA,EAC1E;AACA;AACO,IAAIG,KAAW,SAAUzC,GAAK;AACjC,SAAOA,aAAe,QAAQA,IAAM,CAACA,CAAG;AAC5C;AChBO,SAAS0C,GAAYC,GAAMC,GAAWT,GAAM;AAC/C,MAAIA,MAAS;AACT,WAAOQ,EAAK,UAAU,IAAIC,CAAS;AACvC,EAAAD,EAAK,UAAU,OAAOC,CAAS;AACnC;AACO,SAASC,GAAcC,GAAKF,GAAWG,GAAS;AACnD,MAAIhT,IAAI,OAAO,SAAS,cAAc+S,CAAG;AACzC,SAAAF,IAAYA,KAAa,IACzBG,IAAUA,KAAW,IACrBhT,EAAE,YAAY6S,GACVG,MAAY,WACZhT,EAAE,cAAcgT,IACbhT;AACX;AACO,SAASiT,GAAUC,GAAM;AAC5B,SAAOA,EAAK;AACR,IAAAA,EAAK,YAAYA,EAAK,UAAU;AACxC;AACO,SAASC,GAAWD,GAAME,GAAW;AACxC,MAAIA,EAAUF,CAAI;AACd,WAAOA;AACN,MAAIA,EAAK;AACV,WAAOC,GAAWD,EAAK,YAAYE,CAAS;AAEpD;AACO,SAASC,GAAkBC,GAAgBC,GAAM;AACpD,MAAIC,IAAUV,GAAc,OAAO,iBAAiB,GAAGW,IAAWX,GAAc,SAAS,cAAcQ,CAAc,GAAGI,IAAUZ,GAAc,QAAQ,SAAS,GAAGa,IAAYb,GAAc,QAAQ,WAAW;AAQjN,MAPI,UAAU,UAAU,QAAQ,UAAU,MAAM,KAC5CW,EAAS,OAAO,YAGhBA,EAAS,OAAO,QAChBA,EAAS,UAAU,SAEnBF,MAAS;AACT,aAASnX,KAAOmX;AACZ,MAAAE,EAAS,aAAarX,GAAKmX,EAAKnX,CAAG,CAAC;AAC5C,SAAAoX,EAAQ,YAAYC,CAAQ,GAC5BD,EAAQ,YAAYE,CAAO,GAC3BF,EAAQ,YAAYG,CAAS,GACtBH;AACX;AACO,SAASI,GAAe9E,GAAO;AAClC,MAAI;AACA,QAAI,OAAOA,EAAM,gBAAiB,YAAY;AAC1C,UAAI/Q,IAAO+Q,EAAM;AACjB,aAAO/Q,EAAK,CAAC;AAAA,IAChB;AACD,WAAO+Q,EAAM;AAAA,EAChB,QACa;AACV,WAAOA,EAAM;AAAA,EAChB;AACL;ACpDA,IAAI+E,KAAY,WAAY;GACjBC,KAAa,SAAUC,GAAaC,GAAW7O,GAAQ;AAAE,SAAOA,EAAO,OAAO6O,IAAY,cAAc,UAAU,EAAED,CAAW;AAAE,GACjIE,KAAY;AAAA,EACnB,GAAGJ;AAAA,EACH,GAAG,SAAUK,GAASC,GAAWhP,GAAQ;AACrC,IAAA+O,EAAQ,SAAS/O,EAAO,OAAO,SAAS,QAAQgP,CAAS,CAAC;AAAA,EAC7D;AAAA,EACD,GAAG,SAAUD,GAASE,GAAM;AACxB,IAAAF,EAAQ,UAAUA,EAAQ,SAAU,KAAI,KAAK,KAAK,KAAK,WAAWE,CAAI,CAAC;AAAA,EAC1E;AAAA,EACD,GAAG,SAAUF,GAASE,GAAM;AACxB,IAAAF,EAAQ,SAAS,WAAWE,CAAI,CAAC;AAAA,EACpC;AAAA,EACD,GAAG,SAAUF,GAASG,GAAK;AACvB,IAAAH,EAAQ,QAAQ,WAAWG,CAAG,CAAC;AAAA,EAClC;AAAA,EACD,GAAG,SAAUH,GAASI,GAAMnP,GAAQ;AAChC,IAAA+O,EAAQ,SAAUA,EAAQ,SAAU,IAAG,KACnC,KAAK/B,GAAI,IAAI,OAAOhN,EAAO,KAAK,CAAC,GAAG,GAAG,EAAE,KAAKmP,CAAI,CAAC,CAAC;AAAA,EAC3D;AAAA,EACD,GAAG,SAAUJ,GAASK,GAAYpP,GAAQ;AACtC,IAAA+O,EAAQ,SAAS/O,EAAO,OAAO,UAAU,QAAQoP,CAAU,CAAC;AAAA,EAC/D;AAAA,EACD,GAAG,SAAUL,GAASM,GAAS;AAC3B,IAAAN,EAAQ,WAAW,WAAWM,CAAO,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUhR,GAAGiR,GAAa;AAAE,WAAO,IAAI,KAAK,WAAWA,CAAW,IAAI,GAAI;AAAA,EAAI;AAAA,EACjF,GAAG,SAAUP,GAASQ,GAASvP,GAAQ;AACnC,QAAIwP,IAAa,SAASD,CAAO,GAC7BtJ,IAAO,IAAI,KAAK8I,EAAQ,YAAW,GAAI,GAAG,KAAKS,IAAa,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAClF,WAAAvJ,EAAK,QAAQA,EAAK,QAAS,IAAGA,EAAK,OAAQ,IAAGjG,EAAO,cAAc,GAC5DiG;AAAA,EACV;AAAA,EACD,GAAG,SAAU8I,GAASU,GAAM;AACxB,IAAAV,EAAQ,YAAY,WAAWU,CAAI,CAAC;AAAA,EACvC;AAAA,EACD,GAAG,SAAUpR,GAAGqR,GAAS;AAAE,WAAO,IAAI,KAAKA,CAAO;AAAA,EAAI;AAAA,EACtD,GAAG,SAAUX,GAASG,GAAK;AACvB,IAAAH,EAAQ,QAAQ,WAAWG,CAAG,CAAC;AAAA,EAClC;AAAA,EACD,GAAG,SAAUH,GAASE,GAAM;AACxB,IAAAF,EAAQ,UAAUA,EAAQ,SAAU,KAAI,KAAK,KAAK,KAAK,WAAWE,CAAI,CAAC;AAAA,EAC1E;AAAA,EACD,GAAG,SAAUF,GAAS/I,GAAS;AAC3B,IAAA+I,EAAQ,WAAW,WAAW/I,CAAO,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAU+I,GAASG,GAAK;AACvB,IAAAH,EAAQ,QAAQ,WAAWG,CAAG,CAAC;AAAA,EAClC;AAAA,EACD,GAAGR;AAAA,EACH,GAAG,SAAUK,GAASY,GAAO;AACzB,IAAAZ,EAAQ,SAAS,WAAWY,CAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUZ,GAASY,GAAO;AACzB,IAAAZ,EAAQ,SAAS,WAAWY,CAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUZ,GAASM,GAAS;AAC3B,IAAAN,EAAQ,WAAW,WAAWM,CAAO,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUhR,GAAGuR,GAAiB;AAC7B,WAAO,IAAI,KAAK,WAAWA,CAAe,CAAC;AAAA,EAC9C;AAAA,EACD,GAAGlB;AAAA,EACH,GAAG,SAAUK,GAASU,GAAM;AACxB,IAAAV,EAAQ,YAAY,MAAO,WAAWU,CAAI,CAAC;AAAA,EAC9C;AACL,GACWI,KAAa;AAAA,EACpB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP,GACWC,KAAU;AAAA,EACjB,GAAG,SAAU7J,GAAM;AAAE,WAAOA,EAAK,YAAa;AAAA,EAAG;AAAA,EACjD,GAAG,SAAUA,GAAMjG,GAAQxF,GAAS;AAChC,WAAOwF,EAAO,SAAS,UAAU8P,GAAQ,EAAE7J,GAAMjG,GAAQxF,CAAO,CAAC;AAAA,EACpE;AAAA,EACD,GAAG,SAAUyL,GAAMjG,GAAQxF,GAAS;AAChC,WAAOmU,GAAWmB,GAAQ,EAAE7J,GAAMjG,GAAQxF,CAAO,IAAI,GAAG,IAAOwF,CAAM;AAAA,EACxE;AAAA,EACD,GAAG,SAAUiG,GAAMjG,GAAQxF,GAAS;AAChC,WAAOqS,GAAIiD,GAAQ,EAAE7J,GAAMjG,GAAQxF,CAAO,CAAC;AAAA,EAC9C;AAAA,EACD,GAAG,SAAUyL,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,SAAU,CAAA;AAAA,EAAI;AAAA,EACnD,GAAG,SAAUA,GAAMjG,GAAQ;AACvB,WAAOA,EAAO,YAAY,SACpBiG,EAAK,QAAO,IAAKjG,EAAO,QAAQiG,EAAK,SAAS,IAC9CA,EAAK,QAAO;AAAA,EACrB;AAAA,EACD,GAAG,SAAUA,GAAMjG,GAAQ;AAAE,WAAOA,EAAO,KAAKgN,GAAI/G,EAAK,SAAQ,IAAK,EAAE,CAAC;AAAA,EAAI;AAAA,EAC7E,GAAG,SAAUA,GAAMjG,GAAQ;AACvB,WAAO2O,GAAW1I,EAAK,SAAU,GAAE,IAAMjG,CAAM;AAAA,EAClD;AAAA,EACD,GAAG,SAAUiG,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,WAAY,CAAA;AAAA,EAAI;AAAA,EACrD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,QAAO,IAAK;AAAA,EAAO;AAAA,EACpD,GAAG,SAAUA,GAAM5H,GAAG7D,GAAS;AAC3B,WAAOA,EAAQ,QAAQyL,CAAI;AAAA,EAC9B;AAAA,EACD,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,YAAW,GAAI,CAAC;AAAA,EAAI;AAAA,EACzD,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,QAAS,CAAA;AAAA,EAAI;AAAA,EAClD,GAAG,SAAUA,GAAM;AAAE,WAAQA,EAAK,SAAQ,IAAK,KAAKA,EAAK,SAAQ,IAAK,KAAK;AAAA,EAAM;AAAA,EACjF,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,WAAY,CAAA;AAAA,EAAI;AAAA,EACrD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,QAAS;AAAA,EAAG;AAAA,EAC7C,GAAG,SAAUA,GAAMjG,GAAQ;AACvB,WAAOA,EAAO,SAAS,SAASiG,EAAK,OAAQ,CAAA;AAAA,EAChD;AAAA,EACD,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,SAAQ,IAAK,CAAC;AAAA,EAAI;AAAA,EACvD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,SAAQ,IAAK;AAAA,EAAI;AAAA,EAClD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,WAAY;AAAA,EAAG;AAAA,EAChD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,QAAS;AAAA,EAAG;AAAA,EAC7C,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,OAAQ;AAAA,EAAG;AAAA,EAC5C,GAAG,SAAUA,GAAM;AAAE,WAAO,OAAOA,EAAK,YAAW,CAAE,EAAE,UAAU,CAAC;AAAA,EAAI;AAC1E,GClIW8J,KAAsB,SAAUxX,GAAI;AAC3C,MAAIE,IAAKF,EAAG,QAAQkM,IAAShM,MAAO,SAAS8T,KAAW9T,GAAI2I,IAAK7I,EAAG,MAAMyX,IAAO5O,MAAO,SAASuL,KAAUvL,GAAIyH,IAAKtQ,EAAG,UAAU0X,IAAWpH,MAAO,SAAS,KAAQA;AACpK,SAAO,SAAUkG,GAASmB,GAAMC,GAAgB;AAC5C,QAAInQ,IAASmQ,KAAkBH;AAC/B,WAAIvL,EAAO,eAAe,UAAa,CAACwL,IAC7BxL,EAAO,WAAWsK,GAASmB,GAAMlQ,CAAM,IAE3CkQ,EACF,MAAM,EAAE,EACR,IAAI,SAAUnU,GAAGjB,GAAGsV,GAAK;AAC1B,aAAON,GAAQ/T,CAAC,KAAKqU,EAAItV,IAAI,CAAC,MAAM,OAC9BgV,GAAQ/T,CAAC,EAAEgT,GAAS/O,GAAQyE,CAAM,IAClC1I,MAAM,OACFA,IACA;AAAA,IACtB,CAAS,EACI,KAAK,EAAE;AAAA,EACpB;AACA,GACWsU,KAAmB,SAAU9X,GAAI;AACxC,MAAIE,IAAKF,EAAG,QAAQkM,IAAShM,MAAO,SAAS8T,KAAW9T,GAAI2I,IAAK7I,EAAG,MAAMyX,IAAO5O,MAAO,SAASuL,KAAUvL;AAC3G,SAAO,SAAU6E,GAAMqK,GAAaC,GAAUC,GAAc;AACxD,QAAI,EAAAvK,MAAS,KAAK,CAACA,IAEnB;AAAA,UAAIjG,IAASwQ,KAAgBR,GACzBS,GACAC,IAAWzK;AACf,UAAIA,aAAgB;AAChB,QAAAwK,IAAa,IAAI,KAAKxK,EAAK,QAAS,CAAA;AAAA,eAC/B,OAAOA,KAAS,YACrBA,EAAK,YAAY;AACjB,QAAAwK,IAAa,IAAI,KAAKxK,CAAI;AAAA,eACrB,OAAOA,KAAS,UAAU;AAC/B,YAAI0K,IAASL,MAAgB7L,KAAU8H,IAAU,YAC7CqE,IAAU,OAAO3K,CAAI,EAAE,KAAI;AAC/B,YAAI2K,MAAY;AACZ,UAAAH,IAAa,oBAAI,QACjBF,IAAW;AAAA,iBAEN9L,KAAUA,EAAO;AACtB,UAAAgM,IAAahM,EAAO,UAAUwB,GAAM0K,CAAM;AAAA,iBAErC,KAAK,KAAKC,CAAO,KACtB,OAAO,KAAKA,CAAO;AACnB,UAAAH,IAAa,IAAI,KAAKxK,CAAI;AAAA,aAEzB;AAED,mBADI4K,IAAU,QAAQC,IAAM,CAAA,GACnBhW,IAAI,GAAGiW,IAAa,GAAGC,IAAW,IAAIlW,IAAI6V,EAAO,QAAQ7V,KAAK;AACnE,gBAAImW,IAAQN,EAAO7V,CAAC,GAChBoW,IAAcD,MAAU,MACxBE,IAAUR,EAAO7V,IAAI,CAAC,MAAM,QAAQoW;AACxC,gBAAIrB,GAAWoB,CAAK,KAAK,CAACE,GAAS;AAC/B,cAAAH,KAAYnB,GAAWoB,CAAK;AAC5B,kBAAI7Z,IAAQ,IAAI,OAAO4Z,CAAQ,EAAE,KAAK/K,CAAI;AAC1C,cAAI7O,MAAUyZ,IAAU,OACpBC,EAAIG,MAAU,MAAM,SAAS,SAAS,EAAE;AAAA,gBACpC,IAAInC,GAAUmC,CAAK;AAAA,gBACnB,KAAK7Z,EAAM,EAAE2Z,CAAU;AAAA,cACvD,CAA6B;AAAA,YAER;AACI,cAAKG,MACNF,KAAY;AAAA,UACnB;AACD,UAAAP,IACI,CAAChM,KAAU,CAACA,EAAO,aACb,IAAI,MAAK,oBAAI,KAAM,GAAC,YAAa,GAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IACnD,IAAI,MAAK,oBAAI,KAAI,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,GAClDqM,EAAI,QAAQ,SAAUvY,GAAI;AACtB,gBAAI4U,IAAK5U,EAAG,IAAI6Y,KAAM7Y,EAAG;AACzB,mBAAQkY,IAAatD,EAAGsD,GAAYW,IAAKpR,CAAM,KAAKyQ;AAAA,UACxE,CAAiB,GACDA,IAAaI,IAAUJ,IAAa;AAAA,QACvC;AAAA,MACJ;AACD,UAAI,EAAEA,aAAsB,QAAQ,CAAC,MAAMA,EAAW,QAAS,CAAA,IAAI;AAC/D,QAAAhM,EAAO,aAAa,IAAI,MAAM,4BAA4BiM,CAAQ,CAAC;AACnE;AAAA,MACH;AACD,aAAIH,MAAa,MACbE,EAAW,SAAS,GAAG,GAAG,GAAG,CAAC,GAC3BA;AAAA;AAAA,EACf;AACA;AACO,SAASY,GAAaxK,GAAOC,GAAOyJ,GAAU;AAEjD,SADIA,MAAa,WAAUA,IAAW,KAClCA,MAAa,KACL,IAAI,KAAK1J,EAAM,QAAS,CAAA,EAAE,SAAS,GAAG,GAAG,GAAG,CAAC,IACjD,IAAI,KAAKC,EAAM,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,CAAC,IAE9CD,EAAM,QAAO,IAAKC,EAAM,QAAO;AAC1C;AAOO,IAAIwK,KAAY,SAAUC,GAAIC,GAAKC,GAAK;AAC3C,SAAOF,IAAK,KAAK,IAAIC,GAAKC,CAAG,KAAKF,IAAK,KAAK,IAAIC,GAAKC,CAAG;AAC5D,GACWC,KAAgC,SAAUC,GAAO3L,GAASqJ,GAAS;AAC1E,SAAOsC,IAAQ,OAAO3L,IAAU,KAAKqJ;AACzC,GACWuC,KAAe,SAAUC,GAAsB;AACtD,MAAIF,IAAQ,KAAK,MAAME,IAAuB,IAAI,GAAG7L,KAAW6L,IAAuBF,IAAQ,QAAQ;AACvG,SAAO,CAACA,GAAO3L,GAAS6L,IAAuBF,IAAQ,OAAO3L,IAAU,EAAE;AAC9E,GACWvD,KAAW;AAAA,EAClB,KAAK;AACT;AACO,SAASqP,GAAgBrN,GAAQ;AACpC,MAAIkN,IAAQlN,EAAO,aACfuB,IAAUvB,EAAO,eACjB4K,IAAU5K,EAAO;AACrB,MAAIA,EAAO,YAAY,QAAW;AAC9B,QAAIsN,IAAUtN,EAAO,QAAQ,SAAQ,GACjCuN,IAAavN,EAAO,QAAQ,WAAU,GACtCwN,IAAaxN,EAAO,QAAQ,WAAU;AAC1C,IAAIkN,IAAQI,MACRJ,IAAQI,IAERJ,MAAUI,KAAW/L,IAAUgM,MAC/BhM,IAAUgM,IAEVL,MAAUI,KAAW/L,MAAYgM,KAAc3C,IAAU4C,MACzD5C,IAAU5K,EAAO,QAAQ;EAChC;AACD,MAAIA,EAAO,YAAY,QAAW;AAC9B,QAAIyN,IAAQzN,EAAO,QAAQ,SAAQ,GAC/B0N,IAAa1N,EAAO,QAAQ,WAAU;AAC1C,IAAAkN,IAAQ,KAAK,IAAIA,GAAOO,CAAK,GACzBP,MAAUO,MACVlM,IAAU,KAAK,IAAImM,GAAYnM,CAAO,IACtC2L,MAAUO,KAASlM,MAAYmM,MAC/B9C,IAAU5K,EAAO,QAAQ;EAChC;AACD,SAAO,EAAE,OAAOkN,GAAO,SAAS3L,GAAS,SAASqJ;AACtD;AC7II,OAAO,OAAO,UAAW,eACzB,OAAO,SAAS,SAAU+C,GAAQ;AAE9B,WADI9E,IAAO,CAAA,GACFpE,IAAK,GAAGA,IAAK,UAAU,QAAQA;AACpC,IAAAoE,EAAKpE,IAAK,CAAC,IAAI,UAAUA,CAAE;AAE/B,MAAI,CAACkJ;AACD,UAAM,UAAU,4CAA4C;AAOhE,WALIC,IAAU,SAAUC,GAAQ;AAC5B,IAAIA,KACA,OAAO,KAAKA,CAAM,EAAE,QAAQ,SAAUrb,GAAK;AAAE,aAAQmb,EAAOnb,CAAG,IAAIqb,EAAOrb,CAAG;AAAA,IAAK,CAAA;AAAA,EAElG,GACiBsB,IAAK,GAAGga,IAASjF,GAAM/U,IAAKga,EAAO,QAAQha,KAAM;AACtD,QAAI+Z,IAASC,EAAOha,CAAE;AACtB,IAAA8Z,EAAQC,CAAM;AAAA,EACjB;AACD,SAAOF;AACf;ACpBA,IAAII,KAAsC,WAAY;AAClD,SAAAA,KAAW,OAAO,UAAU,SAAS,GAAG;AACpC,aAAStX,GAAGJ,IAAI,GAAGG,IAAI,UAAU,QAAQH,IAAIG,GAAGH,KAAK;AACjD,MAAAI,IAAI,UAAUJ,CAAC;AACf,eAASoC,KAAKhC;AAAG,QAAI,OAAO,UAAU,eAAe,KAAKA,GAAGgC,CAAC,MAC1D,EAAEA,CAAC,IAAIhC,EAAEgC,CAAC;AAAA,IACjB;AACD,WAAO;AAAA,EACf,GACWsV,GAAS,MAAM,MAAM,SAAS;AACzC,GACIC,KAAkD,WAAY;AAC9D,WAASvX,IAAI,GAAG,IAAI,GAAGwX,IAAK,UAAU,QAAQ,IAAIA,GAAI;AAAK,IAAAxX,KAAK,UAAU,CAAC,EAAE;AAC7E,WAAS4J,IAAI,MAAM5J,CAAC,GAAGU,IAAI,GAAG,IAAI,GAAG,IAAI8W,GAAI;AACzC,aAASrV,IAAI,UAAU,CAAC,GAAG7B,IAAI,GAAGmX,IAAKtV,EAAE,QAAQ7B,IAAImX,GAAInX,KAAKI;AAC1D,MAAAkJ,EAAElJ,CAAC,IAAIyB,EAAE7B,CAAC;AAClB,SAAOsJ;AACX,GAQI8N,KAAsB;AAC1B,SAASC,GAAkBC,GAASC,GAAgB;AAChD,MAAIC,IAAO;AAAA,IACP,QAAQR,GAASA,GAAS,CAAA,GAAIS,EAAc,GAAGC,GAAU,aAAa;AAAA,IACtE,MAAMC;AAAAA,EACd;AACI,EAAAH,EAAK,YAAY3C,GAAiB,EAAE,QAAQ2C,EAAK,QAAQ,MAAMA,EAAK,KAAI,CAAE,GAC1EA,EAAK,YAAY,IACjBA,EAAK,iBAAiB,IACtBA,EAAK,gBAAgB,IACrBA,EAAK,QAAQI,GACbJ,EAAK,oBAAoBK,GACzBL,EAAK,oBAAoBM,IACzBN,EAAK,cAAcO,IACnBP,EAAK,aAAaQ,IAClBR,EAAK,QAAQS,IACbT,EAAK,QAAQU,IACbV,EAAK,cAAcW,IACnBX,EAAK,iBAAiBrF,IACtBqF,EAAK,YAAYY,GACjBZ,EAAK,UAAUa,IACfb,EAAK,YAAYc,IACjBd,EAAK,aAAae,GAClBf,EAAK,cAAcgB,IACnBhB,EAAK,OAAOiB,IACZjB,EAAK,SAASkB,IACdlB,EAAK,MAAMmB,IACXnB,EAAK,UAAUoB,IACfpB,EAAK,SAASqB;AACd,WAASC,IAAuB;AAC5B,IAAAtB,EAAK,QAAQ;AAAA,MACT,gBAAgB,SAAUrD,GAAO4E,GAAI;AAGjC,eAFI5E,MAAU,WAAUA,IAAQqD,EAAK,eACjCuB,MAAO,WAAUA,IAAKvB,EAAK,cAC3BrD,MAAU,MAAO4E,IAAK,MAAM,KAAKA,IAAK,QAAQ,KAAMA,IAAK,QAAQ,KAC1D,KACJvB,EAAK,KAAK,YAAYrD,CAAK;AAAA,MACrC;AAAA,IACb;AAAA,EACK;AACD,WAAS6E,IAAO;AACZ,IAAAxB,EAAK,UAAUA,EAAK,QAAQF,GAC5BE,EAAK,SAAS,IACdyB,MACAC,MACAC,MACAC,MACAN,KACKtB,EAAK,YACN6B,KACJC,MACI9B,EAAK,cAAc,UAAUA,EAAK,OAAO,gBACrCA,EAAK,OAAO,cACZK,EAAiBL,EAAK,OAAO,aAAaA,EAAK,wBAAwB,MAAS,GAEpFgB,GAAY,EAAK,IAErBe;AACA,QAAIC,IAAW,iCAAiC,KAAK,UAAU,SAAS;AACxE,IAAI,CAAChC,EAAK,YAAYgC,KAClB1B,MAEJ2B,GAAa,SAAS;AAAA,EACzB;AACD,WAASC,IAA0B;AAC/B,QAAI3c;AACJ,aAAUA,IAAKya,EAAK,uBAAuB,QAAQza,MAAO,SAAS,SAASA,EAAG,YAAa,GACvF,iBAAiB,SAAS;AAAA,EAClC;AACD,WAAS4c,EAAehI,GAAI;AACxB,WAAOA,EAAG,KAAK6F,CAAI;AAAA,EACtB;AACD,WAAS+B,IAAmB;AACxB,QAAItQ,IAASuO,EAAK;AAClB,IAAIvO,EAAO,gBAAgB,MAASA,EAAO,eAAe,KAGjDA,EAAO,eAAe,MAC3B,OAAO,sBAAsB,WAAY;AAKrC,UAJIuO,EAAK,sBAAsB,WAC3BA,EAAK,kBAAkB,MAAM,aAAa,UAC1CA,EAAK,kBAAkB,MAAM,UAAU,UAEvCA,EAAK,kBAAkB,QAAW;AAClC,YAAIoC,KAAapC,EAAK,KAAK,cAAc,KAAKvO,EAAO;AACrD,QAAAuO,EAAK,cAAc,MAAM,QAAQoC,IAAY,MAC7CpC,EAAK,kBAAkB,MAAM,QACzBoC,KACKpC,EAAK,gBAAgB,SAChBA,EAAK,YAAY,cACjB,KACN,MACRA,EAAK,kBAAkB,MAAM,eAAe,YAAY,GACxDA,EAAK,kBAAkB,MAAM,eAAe,SAAS;AAAA,MACxD;AAAA,IACjB,CAAa;AAAA,EAER;AACD,WAASqC,EAAWxa,GAAG;AACnB,QAAImY,EAAK,cAAc,WAAW,GAAG;AACjC,UAAIsC,IAActC,EAAK,OAAO,YAAY,UACtC3B,GAAa,oBAAI,KAAM,GAAE2B,EAAK,OAAO,OAAO,KAAK,IAC/C,oBAAI,KAAM,IACV,IAAI,KAAKA,EAAK,OAAO,QAAQ,QAAS,CAAA,GACxCzG,IAAWuF,GAAgBkB,EAAK,MAAM;AAC1C,MAAAsC,EAAY,SAAS/I,EAAS,OAAOA,EAAS,SAASA,EAAS,SAAS+I,EAAY,gBAAiB,CAAA,GACtGtC,EAAK,gBAAgB,CAACsC,CAAW,GACjCtC,EAAK,wBAAwBsC;AAAA,IAChC;AACD,IAAIza,MAAM,UAAaA,EAAE,SAAS,UAC9B0a,GAAY1a,CAAC;AAEjB,QAAI2a,IAAYxC,EAAK,OAAO;AAC5B,IAAAyC,KACAzB,MACIhB,EAAK,OAAO,UAAUwC,KACtBxC,EAAK,iBAAgB;AAAA,EAE5B;AACD,WAAS0C,EAAczG,GAAME,GAAM;AAC/B,WAAQF,IAAO,KAAM,KAAKjC,GAAImC,MAAS6D,EAAK,KAAK,KAAK,CAAC,CAAC;AAAA,EAC3D;AACD,WAAS2C,EAAc1G,GAAM;AACzB,YAAQA,IAAO,IAAE;AAAA,MACb,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAOA,IAAO;AAAA,IACrB;AAAA,EACJ;AACD,WAASwG,IAAqB;AAC1B,QAAI,EAAAzC,EAAK,gBAAgB,UAAaA,EAAK,kBAAkB,SAE7D;AAAA,UAAIrB,KAAS,SAASqB,EAAK,YAAY,MAAM,MAAM,EAAE,GAAG,EAAE,KAAK,KAAK,IAAIhN,KAAW,SAASgN,EAAK,cAAc,OAAO,EAAE,KAAK,KAAK,IAAI3D,IAAU2D,EAAK,kBAAkB,UAChK,SAASA,EAAK,cAAc,OAAO,EAAE,KAAK,KAAK,KAChD;AACN,MAAIA,EAAK,SAAS,WACdrB,IAAQ+D,EAAc/D,GAAOqB,EAAK,KAAK,WAAW;AAEtD,UAAI4C,IAAgB5C,EAAK,OAAO,YAAY,UACvCA,EAAK,OAAO,WACTA,EAAK,kBACLA,EAAK,yBACL3B,GAAa2B,EAAK,uBAAuBA,EAAK,OAAO,SAAS,EAAI,MAC9D,GACR6C,KAAgB7C,EAAK,OAAO,YAAY,UACvCA,EAAK,OAAO,WACTA,EAAK,kBACLA,EAAK,yBACL3B,GAAa2B,EAAK,uBAAuBA,EAAK,OAAO,SAAS,EAAI,MAC9D;AACZ,UAAIA,EAAK,OAAO,YAAY,UACxBA,EAAK,OAAO,YAAY,UACxBA,EAAK,OAAO,UAAUA,EAAK,OAAO,SAAS;AAC3C,YAAI8C,KAAWpE,GAA8BsB,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,OAAO,QAAQ,WAAU,GAAIA,EAAK,OAAO,QAAQ,WAAU,CAAE,GAC3I+C,KAAWrE,GAA8BsB,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,OAAO,QAAQ,WAAU,GAAIA,EAAK,OAAO,QAAQ,WAAU,CAAE,GAC3IgD,KAActE,GAA8BC,GAAO3L,GAASqJ,CAAO;AACvE,YAAI2G,KAAcD,MAAYC,KAAcF,IAAU;AAClD,cAAIG,KAASrE,GAAakE,EAAQ;AAClC,UAAAnE,IAAQsE,GAAO,CAAC,GAChBjQ,IAAUiQ,GAAO,CAAC,GAClB5G,IAAU4G,GAAO,CAAC;AAAA,QACrB;AAAA,MACJ,OACI;AACD,YAAIJ,IAAe;AACf,cAAIK,KAAUlD,EAAK,OAAO,YAAY,SAChCA,EAAK,OAAO,UACZA,EAAK,OAAO;AAClB,UAAArB,IAAQ,KAAK,IAAIA,GAAOuE,GAAQ,SAAQ,CAAE,GACtCvE,MAAUuE,GAAQ,SAAU,MAC5BlQ,IAAU,KAAK,IAAIA,GAASkQ,GAAQ,WAAU,CAAE,IAChDlQ,MAAYkQ,GAAQ,WAAY,MAChC7G,IAAU,KAAK,IAAIA,GAAS6G,GAAQ,WAAU,CAAE;AAAA,QACvD;AACD,YAAIN,GAAe;AACf,cAAIO,KAAUnD,EAAK,OAAO,YAAY,SAChCA,EAAK,OAAO,UACZA,EAAK,OAAO;AAClB,UAAArB,IAAQ,KAAK,IAAIA,GAAOwE,GAAQ,SAAQ,CAAE,GACtCxE,MAAUwE,GAAQ,SAAU,KAAInQ,IAAUmQ,GAAQ,WAAY,MAC9DnQ,IAAUmQ,GAAQ,eAClBnQ,MAAYmQ,GAAQ,WAAY,MAChC9G,IAAU,KAAK,IAAIA,GAAS8G,GAAQ,WAAU,CAAE;AAAA,QACvD;AAAA,MACJ;AACD,MAAAC,EAASzE,GAAO3L,GAASqJ,CAAO;AAAA;AAAA,EACnC;AACD,WAASgE,EAAiBtE,GAAS;AAC/B,QAAI9I,IAAO8I,KAAWiE,EAAK;AAC3B,IAAI/M,KAAQA,aAAgB,QACxBmQ,EAASnQ,EAAK,YAAYA,EAAK,cAAcA,EAAK,WAAU,CAAE;AAAA,EAErE;AACD,WAASmQ,EAASzE,GAAO3L,GAASqJ,GAAS;AAIvC,IAHI2D,EAAK,0BAA0B,UAC/BA,EAAK,sBAAsB,SAASrB,IAAQ,IAAI3L,GAASqJ,KAAW,GAAG,CAAC,GAExE,GAAC2D,EAAK,eAAe,CAACA,EAAK,iBAAiBA,EAAK,cAErDA,EAAK,YAAY,QAAQnG,GAAKmG,EAAK,OAAO,YAEpCrB,KADE,KAAKA,KAAS,KAAM,KAAK3E,GAAI2E,IAAQ,OAAO,CAAC,CAC1C,GACXqB,EAAK,cAAc,QAAQnG,GAAI7G,CAAO,GAClCgN,EAAK,SAAS,WACdA,EAAK,KAAK,cAAcA,EAAK,KAAK,KAAKhG,GAAI2E,KAAS,EAAE,CAAC,IACvDqB,EAAK,kBAAkB,WACvBA,EAAK,cAAc,QAAQnG,GAAIwC,CAAO;AAAA,EAC7C;AACD,WAASgH,EAAY1M,GAAO;AACxB,QAAI2M,IAAc7H,GAAe9E,CAAK,GAClC8F,IAAO,SAAS6G,EAAY,KAAK,KAAK3M,EAAM,SAAS;AACzD,KAAI8F,IAAO,MAAO,KACb9F,EAAM,QAAQ,WAAW,CAAC,QAAQ,KAAK8F,EAAK,SAAU,CAAA,MACvD+D,GAAW/D,CAAI;AAAA,EAEtB;AACD,WAAS2D,EAAKN,GAASnJ,GAAO4M,GAAS/b,GAAS;AAC5C,QAAImP,aAAiB;AACjB,aAAOA,EAAM,QAAQ,SAAU6M,IAAI;AAAE,eAAOpD,EAAKN,GAAS0D,IAAID,GAAS/b,CAAO;AAAA,MAAI,CAAA;AACtF,QAAIsY,aAAmB;AACnB,aAAOA,EAAQ,QAAQ,SAAU2D,IAAI;AAAE,eAAOrD,EAAKqD,IAAI9M,GAAO4M,GAAS/b,CAAO;AAAA,MAAI,CAAA;AACtF,IAAAsY,EAAQ,iBAAiBnJ,GAAO4M,GAAS/b,CAAO,GAChDwY,EAAK,UAAU,KAAK;AAAA,MAChB,QAAQ,WAAY;AAAE,eAAOF,EAAQ,oBAAoBnJ,GAAO4M,GAAS/b,CAAO;AAAA,MAAI;AAAA,IAChG,CAAS;AAAA,EACJ;AACD,WAASkc,IAAgB;AACrB,IAAAzB,GAAa,UAAU;AAAA,EAC1B;AACD,WAASH,IAAa;AAQlB,QAPI9B,EAAK,OAAO,QACZ,CAAC,QAAQ,SAAS,UAAU,OAAO,EAAE,QAAQ,SAAU2D,GAAK;AACxD,YAAM,UAAU,QAAQ,KAAK3D,EAAK,QAAQ,iBAAiB,WAAW2D,IAAM,GAAG,GAAG,SAAUF,GAAI;AAC5F,eAAOrD,EAAKqD,GAAI,SAASzD,EAAK2D,CAAG,CAAC;AAAA,MACtD,CAAiB;AAAA,IACjB,CAAa,GAED3D,EAAK,UAAU;AACf,MAAA4D;AACA;AAAA,IACH;AACD,QAAIC,IAAkB3J,GAAS4J,IAAU,EAAE;AA2B3C,QA1BA9D,EAAK,mBAAmB9F,GAASwJ,GAAe9D,EAAmB,GAC/DI,EAAK,iBAAiB,CAAC,oBAAoB,KAAK,UAAU,SAAS,KACnEI,EAAKJ,EAAK,eAAe,aAAa,SAAUnY,GAAG;AAC/C,MAAImY,EAAK,OAAO,SAAS,WACrBW,GAAYlF,GAAe5T,CAAC,CAAC;AAAA,IACjD,CAAa,GACLuY,EAAKJ,EAAK,QAAQ,WAAW+D,EAAS,GAClC/D,EAAK,sBAAsB,UAC3BI,EAAKJ,EAAK,mBAAmB,WAAW+D,EAAS,GAEjD,CAAC/D,EAAK,OAAO,UAAU,CAACA,EAAK,OAAO,UACpCI,EAAK,QAAQ,UAAUyD,CAAe,GACtC,OAAO,iBAAiB,SACxBzD,EAAK,OAAO,UAAU,cAAc4D,EAAa,IAEjD5D,EAAK,OAAO,UAAU,aAAa4D,EAAa,GACpD5D,EAAK,OAAO,UAAU,SAAS4D,IAAe,EAAE,SAAS,GAAI,CAAE,GAC3DhE,EAAK,OAAO,eAAe,OAC3BI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,GACpCI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,IAEpCA,EAAK,kBAAkB,WACvBI,EAAKJ,EAAK,UAAU,SAASiE,EAAe,GAC5C7D,EAAKJ,EAAK,UAAU,CAAC,SAAS,WAAW,GAAGqD,CAAW,GACvDjD,EAAKJ,EAAK,eAAe,SAASkE,EAAU,IAE5ClE,EAAK,kBAAkB,UACvBA,EAAK,kBAAkB,UACvBA,EAAK,gBAAgB,QAAW;AAChC,UAAImE,IAAU,SAAUtc,GAAG;AACvB,eAAO4T,GAAe5T,CAAC,EAAE;MACzC;AACY,MAAAuY,EAAKJ,EAAK,eAAe,CAAC,WAAW,GAAGqC,CAAU,GAClDjC,EAAKJ,EAAK,eAAe,QAAQqC,GAAY,EAAE,SAAS,GAAI,CAAE,GAC9DjC,EAAKJ,EAAK,eAAe,SAASoE,CAAa,GAC/ChE,EAAK,CAACJ,EAAK,aAAaA,EAAK,aAAa,GAAG,CAAC,SAAS,OAAO,GAAGmE,CAAO,GACpEnE,EAAK,kBAAkB,UACvBI,EAAKJ,EAAK,eAAe,SAAS,WAAY;AAAE,eAAOA,EAAK,iBAAiBA,EAAK,cAAc,OAAQ;AAAA,MAAG,CAAA,GAC3GA,EAAK,SAAS,UACdI,EAAKJ,EAAK,MAAM,SAAS,SAAUnY,GAAG;AAClC,QAAAwa,EAAWxa,CAAC;AAAA,MAChC,CAAiB;AAAA,IAER;AACD,IAAImY,EAAK,OAAO,cACZI,EAAKJ,EAAK,QAAQ,QAAQ1a,EAAM;AAAA,EAEvC;AACD,WAASyb,EAAWsD,GAAUX,GAAe;AACzC,QAAIY,IAASD,MAAa,SACpBrE,EAAK,UAAUqE,CAAQ,IACvBrE,EAAK,0BACFA,EAAK,OAAO,WAAWA,EAAK,OAAO,UAAUA,EAAK,MAC7CA,EAAK,OAAO,UACZA,EAAK,OAAO,WAAWA,EAAK,OAAO,UAAUA,EAAK,MAC9CA,EAAK,OAAO,UACZA,EAAK,MACnBuE,IAAUvE,EAAK,aACfwE,KAAWxE,EAAK;AACpB,QAAI;AACA,MAAIsE,MAAW,WACXtE,EAAK,cAAcsE,EAAO,eAC1BtE,EAAK,eAAesE,EAAO;IAElC,SACMzc,IAAG;AACN,MAAAA,GAAE,UAAU,4BAA4Byc,GACxCtE,EAAK,OAAO,aAAanY,EAAC;AAAA,IAC7B;AACD,IAAI6b,KAAiB1D,EAAK,gBAAgBuE,MACtCtC,GAAa,cAAc,GAC3BwC,MAEAf,MACC1D,EAAK,gBAAgBuE,KAAWvE,EAAK,iBAAiBwE,OACvDvC,GAAa,eAAe,GAEhCjC,EAAK,OAAM;AAAA,EACd;AACD,WAASoE,EAAcvc,GAAG;AACtB,QAAIyb,IAAc7H,GAAe5T,CAAC;AAClC,IAAI,CAACyb,EAAY,UAAU,QAAQ,OAAO,KACtCoB,EAAkB7c,GAAGyb,EAAY,UAAU,SAAS,SAAS,IAAI,IAAI,EAAE;AAAA,EAC9E;AACD,WAASoB,EAAkB7c,GAAG8c,GAAOC,GAAW;AAC5C,QAAIxF,IAASvX,KAAK4T,GAAe5T,CAAC,GAC9Bgd,KAAQD,KACPxF,KAAUA,EAAO,cAAcA,EAAO,WAAW,YAClDzI,KAAQmO,GAAY,WAAW;AACnC,IAAAnO,GAAM,QAAQgO,GACdE,MAASA,GAAM,cAAclO,EAAK;AAAA,EACrC;AACD,WAASkL,IAAQ;AACb,QAAIkD,IAAW,OAAO,SAAS,uBAAsB;AAGrD,QAFA/E,EAAK,oBAAoBrF,GAAc,OAAO,oBAAoB,GAClEqF,EAAK,kBAAkB,WAAW,IAC9B,CAACA,EAAK,OAAO,YAAY;AAGzB,UAFA+E,EAAS,YAAYC,EAAa,CAAE,GACpChF,EAAK,iBAAiBrF,GAAc,OAAO,0BAA0B,GACjEqF,EAAK,OAAO,aAAa;AACzB,YAAIza,IAAK0f,EAAU,GAAIC,IAAc3f,EAAG,aAAa4f,IAAc5f,EAAG;AACtE,QAAAya,EAAK,eAAe,YAAYkF,CAAW,GAC3ClF,EAAK,cAAcmF,GACnBnF,EAAK,cAAckF;AAAA,MACtB;AACD,MAAAlF,EAAK,aAAarF,GAAc,OAAO,sBAAsB,GAC7DqF,EAAK,WAAW,YAAYoF,EAAe,CAAA,GACtCpF,EAAK,kBACNA,EAAK,gBAAgBrF,GAAc,OAAO,gBAAgB,GAC1DqF,EAAK,cAAc,WAAW,KAElCqF,KACArF,EAAK,WAAW,YAAYA,EAAK,aAAa,GAC9CA,EAAK,eAAe,YAAYA,EAAK,UAAU,GAC/C+E,EAAS,YAAY/E,EAAK,cAAc;AAAA,IAC3C;AACD,IAAIA,EAAK,OAAO,cACZ+E,EAAS,YAAYO,EAAS,CAAE,GAEpC9K,GAAYwF,EAAK,mBAAmB,aAAaA,EAAK,OAAO,SAAS,OAAO,GAC7ExF,GAAYwF,EAAK,mBAAmB,WAAWA,EAAK,OAAO,YAAY,EAAI,GAC3ExF,GAAYwF,EAAK,mBAAmB,cAAcA,EAAK,OAAO,aAAa,CAAC,GAC5EA,EAAK,kBAAkB,YAAY+E,CAAQ;AAC3C,QAAIQ,KAAevF,EAAK,OAAO,aAAa,UACxCA,EAAK,OAAO,SAAS,aAAa;AACtC,SAAIA,EAAK,OAAO,UAAUA,EAAK,OAAO,YAClCA,EAAK,kBAAkB,UAAU,IAAIA,EAAK,OAAO,SAAS,WAAW,QAAQ,GACzEA,EAAK,OAAO,WACR,CAACuF,MAAgBvF,EAAK,QAAQ,aAC9BA,EAAK,QAAQ,WAAW,aAAaA,EAAK,mBAAmBA,EAAK,OAAO,WAAW,IAC/EA,EAAK,OAAO,aAAa,UAC9BA,EAAK,OAAO,SAAS,YAAYA,EAAK,iBAAiB,IAE3DA,EAAK,OAAO,SAAQ;AACpB,UAAI3E,KAAUV,GAAc,OAAO,mBAAmB;AACtD,MAAIqF,EAAK,QAAQ,cACbA,EAAK,QAAQ,WAAW,aAAa3E,IAAS2E,EAAK,OAAO,GAC9D3E,GAAQ,YAAY2E,EAAK,OAAO,GAC5BA,EAAK,YACL3E,GAAQ,YAAY2E,EAAK,QAAQ,GACrC3E,GAAQ,YAAY2E,EAAK,iBAAiB;AAAA,IAC7C;AAEL,IAAI,CAACA,EAAK,OAAO,UAAU,CAACA,EAAK,OAAO,WACnCA,EAAK,OAAO,aAAa,SACpBA,EAAK,OAAO,WACZ,OAAO,SAAS,MAAM,YAAYA,EAAK,iBAAiB;AAAA,EACrE;AACD,WAASY,EAAUlG,GAAWzH,GAAMuS,GAAY1d,GAAG;AAC/C,QAAI2d,KAAgB3E,GAAU7N,GAAM,EAAI,GAAGyS,KAAa/K,GAAc,QAAQD,GAAWzH,EAAK,QAAO,EAAG,SAAU,CAAA;AAClH,WAAAyS,GAAW,UAAUzS,GACrByS,GAAW,KAAK5d,GAChB4d,GAAW,aAAa,cAAc1F,EAAK,WAAW/M,GAAM+M,EAAK,OAAO,cAAc,CAAC,GACnFtF,EAAU,QAAQ,QAAQ,MAAM,MAChC2D,GAAapL,GAAM+M,EAAK,GAAG,MAAM,MACjCA,EAAK,gBAAgB0F,IACrBA,GAAW,UAAU,IAAI,OAAO,GAChCA,GAAW,aAAa,gBAAgB,MAAM,IAE9CD,MACAC,GAAW,WAAW,IAClBC,GAAe1S,CAAI,MACnByS,GAAW,UAAU,IAAI,UAAU,GACnC1F,EAAK,mBAAmB0F,IACpB1F,EAAK,OAAO,SAAS,YACrBxF,GAAYkL,IAAY,cAAc1F,EAAK,cAAc,CAAC,KACtD3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,GAAG,EAAI,MAAM,CAAC,GACzDxF,GAAYkL,IAAY,YAAY1F,EAAK,cAAc,CAAC,KACpD3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,GAAG,EAAI,MAAM,CAAC,GACrDtF,MAAc,kBACdgL,GAAW,UAAU,IAAI,SAAS,OAK9CA,GAAW,UAAU,IAAI,oBAAoB,GAE7C1F,EAAK,OAAO,SAAS,WACjB4F,GAAc3S,CAAI,KAAK,CAAC0S,GAAe1S,CAAI,KAC3CyS,GAAW,UAAU,IAAI,SAAS,GAEtC1F,EAAK,eACLA,EAAK,OAAO,eAAe,KAC3BtF,MAAc,kBACd5S,IAAI,MAAM,KACVkY,EAAK,YAAY,mBAAmB,aAAa,iCAAiCA,EAAK,OAAO,QAAQ/M,CAAI,IAAI,SAAS,GAE3HgP,GAAa,eAAeyD,EAAU,GAC/BA;AAAA,EACV;AACD,WAASG,EAAeC,GAAY;AAChC,IAAAA,EAAW,MAAK,GACZ9F,EAAK,OAAO,SAAS,WACrBW,GAAYmF,CAAU;AAAA,EAC7B;AACD,WAASC,EAAqBpB,GAAO;AAGjC,aAFIqB,IAAarB,IAAQ,IAAI,IAAI3E,EAAK,OAAO,aAAa,GACtDiG,IAAWtB,IAAQ,IAAI3E,EAAK,OAAO,aAAa,IAC3C/T,IAAI+Z,GAAY/Z,KAAKga,GAAUha,KAAK0Y;AAIzC,eAHIhI,KAAQqD,EAAK,cAAc,SAAS/T,CAAC,GACrCia,KAAavB,IAAQ,IAAI,IAAIhI,GAAM,SAAS,SAAS,GACrDwJ,KAAWxB,IAAQ,IAAIhI,GAAM,SAAS,SAAS,IAC1C7U,KAAIoe,IAAYpe,MAAKqe,IAAUre,MAAK6c,GAAO;AAChD,YAAI5b,KAAI4T,GAAM,SAAS7U,EAAC;AACxB,YAAIiB,GAAE,UAAU,QAAQ,QAAQ,MAAM,MAAM+X,GAAU/X,GAAE,OAAO;AAC3D,iBAAOA;AAAA,MACd;AAAA,EAGR;AACD,WAASqd,GAAoBC,GAAS1B,GAAO;AAMzC,aALI2B,IAAaD,EAAQ,UAAU,QAAQ,OAAO,MAAM,KAClDA,EAAQ,QAAQ,SAAU,IAC1BrG,EAAK,cACPiG,IAAWtB,IAAQ,IAAI3E,EAAK,OAAO,aAAa,IAChDuG,KAAY5B,IAAQ,IAAI,IAAI,IACvB1Y,KAAIqa,IAAatG,EAAK,cAAc/T,MAAKga,GAAUha,MAAKsa;AAQ7D,eAPI5J,KAAQqD,EAAK,cAAc,SAAS/T,EAAC,GACrCia,KAAaI,IAAatG,EAAK,iBAAiB/T,KAC9Coa,EAAQ,KAAK1B,IACbA,IAAQ,IACJhI,GAAM,SAAS,SAAS,IACxB,GACN6J,KAAe7J,GAAM,SAAS,QACzB7U,KAAIoe,IAAYpe,MAAK,KAAKA,KAAI0e,MAAgB1e,OAAM6c,IAAQ,IAAI6B,KAAe,KAAK1e,MAAKye,IAAW;AACzG,YAAIxd,KAAI4T,GAAM,SAAS7U,EAAC;AACxB,YAAIiB,GAAE,UAAU,QAAQ,QAAQ,MAAM,MAClC+X,GAAU/X,GAAE,OAAO,KACnB,KAAK,IAAIsd,EAAQ,KAAKve,EAAC,KAAK,KAAK,IAAI6c,CAAK;AAC1C,iBAAOkB,EAAe9c,EAAC;AAAA,MAC9B;AAEL,IAAAiX,EAAK,YAAYuG,EAAS,GAC1BE,GAAWV,EAAqBQ,EAAS,GAAG,CAAC;AAAA,EAEhD;AACD,WAASE,GAAWJ,GAASK,GAAQ;AACjC,QAAIC,IAAgBzE,KAChB0E,IAAaC,GAASF,KAAiB,SAAS,IAAI,GACpDG,KAAYT,MAAY,SACtBA,IACAO,IACID,IACA3G,EAAK,qBAAqB,UAAa6G,GAAS7G,EAAK,gBAAgB,IACjEA,EAAK,mBACLA,EAAK,kBAAkB,UAAa6G,GAAS7G,EAAK,aAAa,IAC3DA,EAAK,gBACL+F,EAAqBW,IAAS,IAAI,IAAI,EAAE;AAC1D,IAAII,OAAc,SACd9G,EAAK,OAAO,UAEN4G,IAINR,GAAoBU,IAAWJ,CAAM,IAHrCb,EAAeiB,EAAS;AAAA,EAK/B;AACD,WAASC,EAAetK,GAAME,GAAO;AAKjC,aAJIqK,KAAgB,IAAI,KAAKvK,GAAME,GAAO,CAAC,EAAE,OAAM,IAAKqD,EAAK,KAAK,iBAAiB,KAAK,GACpFiH,IAAgBjH,EAAK,MAAM,gBAAgBrD,IAAQ,IAAI,MAAM,IAAIF,CAAI,GACrEyK,KAAclH,EAAK,MAAM,eAAerD,GAAOF,CAAI,GAAG5J,KAAO,OAAO,SAAS,uBAAsB,GAAIsU,KAAenH,EAAK,OAAO,aAAa,GAAGoH,KAAoBD,KAAe,wBAAwB,gBAAgBE,KAAoBF,KAAe,wBAAwB,gBACxRG,KAAYL,IAAgB,IAAID,GAAcO,KAAW,GACtDD,MAAaL,GAAeK,MAAaC;AAC5C,MAAA1U,GAAK,YAAY+N,EAAU,mBAAmBwG,IAAmB,IAAI,KAAK3K,GAAME,IAAQ,GAAG2K,EAAS,GAAGA,IAAWC,EAAQ,CAAC;AAE/H,SAAKD,KAAY,GAAGA,MAAaJ,IAAaI,MAAaC;AACvD,MAAA1U,GAAK,YAAY+N,EAAU,iBAAiB,IAAI,KAAKnE,GAAME,GAAO2K,EAAS,GAAGA,IAAWC,EAAQ,CAAC;AAEtG,aAASC,KAASN,KAAc,GAAGM,MAAU,KAAKR,MAC7ChH,EAAK,OAAO,eAAe,KAAKuH,KAAW,MAAM,IAAIC,MAAUD;AAChE,MAAA1U,GAAK,YAAY+N,EAAU,mBAAmByG,IAAmB,IAAI,KAAK5K,GAAME,IAAQ,GAAG6K,KAASN,EAAW,GAAGM,IAAQD,EAAQ,CAAC;AAEvI,QAAIE,KAAe9M,GAAc,OAAO,cAAc;AACtD,WAAA8M,GAAa,YAAY5U,EAAI,GACtB4U;AAAA,EACV;AACD,WAASpC,IAAY;AACjB,QAAIrF,EAAK,kBAAkB,QAG3B;AAAA,MAAAlF,GAAUkF,EAAK,aAAa,GACxBA,EAAK,eACLlF,GAAUkF,EAAK,WAAW;AAE9B,eADI0H,IAAO,SAAS,0BACX5f,IAAI,GAAGA,IAAIkY,EAAK,OAAO,YAAYlY,KAAK;AAC7C,YAAIqD,IAAI,IAAI,KAAK6U,EAAK,aAAaA,EAAK,cAAc,CAAC;AACvD,QAAA7U,EAAE,SAAS6U,EAAK,eAAelY,CAAC,GAChC4f,EAAK,YAAYX,EAAe5b,EAAE,YAAW,GAAIA,EAAE,SAAU,CAAA,CAAC;AAAA,MACjE;AACD,MAAA6U,EAAK,cAAc,YAAY0H,CAAI,GACnC1H,EAAK,OAAOA,EAAK,cAAc,YAC3BA,EAAK,OAAO,SAAS,WAAWA,EAAK,cAAc,WAAW,KAC9DW;;EAEP;AACD,WAAS8D,IAAmB;AACxB,QAAI,EAAAzE,EAAK,OAAO,aAAa,KACzBA,EAAK,OAAO,sBAAsB,aAEtC;AAAA,UAAI2H,IAAmB,SAAUhL,GAAO;AACpC,eAAIqD,EAAK,OAAO,YAAY,UACxBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,KACtDrD,IAAQqD,EAAK,OAAO,QAAQ,SAAQ,IAC7B,KAEJ,EAAEA,EAAK,OAAO,YAAY,UAC7BA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,KACtDrD,IAAQqD,EAAK,OAAO,QAAQ,SAAU;AAAA,MACtD;AACQ,MAAAA,EAAK,wBAAwB,WAAW,IACxCA,EAAK,wBAAwB,YAAY;AACzC,eAASlY,IAAI,GAAGA,IAAI,IAAIA;AACpB,YAAK6f,EAAiB7f,CAAC,GAEvB;AAAA,cAAI6U,IAAQhC,GAAc,UAAU,+BAA+B;AACnE,UAAAgC,EAAM,QAAQ,IAAI,KAAKqD,EAAK,aAAalY,CAAC,EAAE,WAAW,YACvD6U,EAAM,cAAchB,GAAW7T,GAAGkY,EAAK,OAAO,uBAAuBA,EAAK,IAAI,GAC9ErD,EAAM,WAAW,IACbqD,EAAK,iBAAiBlY,MACtB6U,EAAM,WAAW,KAErBqD,EAAK,wBAAwB,YAAYrD,CAAK;AAAA;AAAA;AAAA,EAErD;AACD,WAASiL,IAAa;AAClB,QAAIC,IAAYlN,GAAc,OAAO,iBAAiB,GAClDmN,IAAmB,OAAO,SAAS,uBAAsB,GACzDC;AACJ,IAAI/H,EAAK,OAAO,aAAa,KACzBA,EAAK,OAAO,sBAAsB,WAClC+H,IAAepN,GAAc,QAAQ,WAAW,KAGhDqF,EAAK,0BAA0BrF,GAAc,UAAU,gCAAgC,GACvFqF,EAAK,wBAAwB,aAAa,cAAcA,EAAK,KAAK,cAAc,GAChFI,EAAKJ,EAAK,yBAAyB,UAAU,SAAUnY,IAAG;AACtD,UAAIuX,KAAS3D,GAAe5T,EAAC,GACzBmgB,KAAgB,SAAS5I,GAAO,OAAO,EAAE;AAC7C,MAAAY,EAAK,YAAYgI,KAAgBhI,EAAK,YAAY,GAClDiC,GAAa,eAAe;AAAA,IAC5C,CAAa,GACDwC,KACAsD,IAAe/H,EAAK;AAExB,QAAIiI,IAAY/M,GAAkB,YAAY,EAAE,UAAU,KAAI,CAAE,GAC5DgN,KAAcD,EAAU,qBAAqB,OAAO,EAAE,CAAC;AAC3D,IAAAC,GAAY,aAAa,cAAclI,EAAK,KAAK,aAAa,GAC1DA,EAAK,OAAO,WACZkI,GAAY,aAAa,OAAOlI,EAAK,OAAO,QAAQ,YAAW,EAAG,SAAQ,CAAE,GAE5EA,EAAK,OAAO,YACZkI,GAAY,aAAa,OAAOlI,EAAK,OAAO,QAAQ,YAAW,EAAG,SAAQ,CAAE,GAC5EkI,GAAY,WACR,CAAC,CAAClI,EAAK,OAAO,WACVA,EAAK,OAAO,QAAQ,YAAW,MAAOA,EAAK,OAAO,QAAQ;AAEtE,QAAImI,KAAexN,GAAc,OAAO,yBAAyB;AACjE,WAAAwN,GAAa,YAAYJ,CAAY,GACrCI,GAAa,YAAYF,CAAS,GAClCH,EAAiB,YAAYK,EAAY,GACzCN,EAAU,YAAYC,CAAgB,GAC/B;AAAA,MACH,WAAWD;AAAA,MACX,aAAaK;AAAA,MACb,cAAcH;AAAA,IAC1B;AAAA,EACK;AACD,WAASK,IAAc;AACnB,IAAAtN,GAAUkF,EAAK,QAAQ,GACvBA,EAAK,SAAS,YAAYA,EAAK,YAAY,GACvCA,EAAK,OAAO,eACZA,EAAK,eAAe,IACpBA,EAAK,gBAAgB;AAEzB,aAAS/T,IAAI+T,EAAK,OAAO,YAAY/T,OAAM;AACvC,UAAI0Q,IAAQiL;AACZ,MAAA5H,EAAK,aAAa,KAAKrD,EAAM,WAAW,GACxCqD,EAAK,cAAc,KAAKrD,EAAM,YAAY,GAC1CqD,EAAK,SAAS,YAAYrD,EAAM,SAAS;AAAA,IAC5C;AACD,IAAAqD,EAAK,SAAS,YAAYA,EAAK,YAAY;AAAA,EAC9C;AACD,WAASgF,IAAgB;AACrB,WAAAhF,EAAK,WAAWrF,GAAc,OAAO,kBAAkB,GACvDqF,EAAK,eAAe,IACpBA,EAAK,gBAAgB,IACrBA,EAAK,eAAerF,GAAc,QAAQ,sBAAsB,GAChEqF,EAAK,aAAa,YAAYA,EAAK,OAAO,WAC1CA,EAAK,eAAerF,GAAc,QAAQ,sBAAsB,GAChEqF,EAAK,aAAa,YAAYA,EAAK,OAAO,WAC1CoI,KACA,OAAO,eAAepI,GAAM,uBAAuB;AAAA,MAC/C,KAAK,WAAY;AAAE,eAAOA,EAAK;AAAA,MAAuB;AAAA,MACtD,KAAK,SAAU/F,GAAM;AACjB,QAAI+F,EAAK,yBAAyB/F,MAC9BO,GAAYwF,EAAK,cAAc,sBAAsB/F,CAAI,GACzD+F,EAAK,uBAAuB/F;AAAA,MAEnC;AAAA,IACb,CAAS,GACD,OAAO,eAAe+F,GAAM,uBAAuB;AAAA,MAC/C,KAAK,WAAY;AAAE,eAAOA,EAAK;AAAA,MAAuB;AAAA,MACtD,KAAK,SAAU/F,GAAM;AACjB,QAAI+F,EAAK,yBAAyB/F,MAC9BO,GAAYwF,EAAK,cAAc,sBAAsB/F,CAAI,GACzD+F,EAAK,uBAAuB/F;AAAA,MAEnC;AAAA,IACb,CAAS,GACD+F,EAAK,qBAAqBA,EAAK,aAAa,CAAC,GAC7CqI,MACOrI,EAAK;AAAA,EACf;AACD,WAASsF,IAAY;AACjB,IAAAtF,EAAK,kBAAkB,UAAU,IAAI,SAAS,GAC1CA,EAAK,OAAO,cACZA,EAAK,kBAAkB,UAAU,IAAI,YAAY;AACrD,QAAIzG,IAAWuF,GAAgBkB,EAAK,MAAM;AAC1C,IAAAA,EAAK,gBAAgBrF,GAAc,OAAO,gBAAgB,GAC1DqF,EAAK,cAAc,WAAW;AAC9B,QAAIsI,IAAY3N,GAAc,QAAQ,4BAA4B,GAAG,GACjE4N,IAAYrN,GAAkB,kBAAkB;AAAA,MAChD,cAAc8E,EAAK,KAAK;AAAA,IACpC,CAAS;AACD,IAAAA,EAAK,cAAcuI,EAAU,qBAAqB,OAAO,EAAE,CAAC;AAC5D,QAAIC,IAActN,GAAkB,oBAAoB;AAAA,MACpD,cAAc8E,EAAK,KAAK;AAAA,IACpC,CAAS;AAwBD,QAvBAA,EAAK,gBAAgBwI,EAAY,qBAAqB,OAAO,EAAE,CAAC,GAChExI,EAAK,YAAY,WAAWA,EAAK,cAAc,WAAW,IAC1DA,EAAK,YAAY,QAAQnG,GAAImG,EAAK,wBAC5BA,EAAK,sBAAsB,SAAU,IACrCA,EAAK,OAAO,YACRzG,EAAS,QACToJ,EAAcpJ,EAAS,KAAK,CAAC,GACvCyG,EAAK,cAAc,QAAQnG,GAAImG,EAAK,wBAC9BA,EAAK,sBAAsB,WAAY,IACvCzG,EAAS,OAAO,GACtByG,EAAK,YAAY,aAAa,QAAQA,EAAK,OAAO,cAAc,SAAQ,CAAE,GAC1EA,EAAK,cAAc,aAAa,QAAQA,EAAK,OAAO,gBAAgB,SAAQ,CAAE,GAC9EA,EAAK,YAAY,aAAa,OAAOA,EAAK,OAAO,YAAY,MAAM,GAAG,GACtEA,EAAK,YAAY,aAAa,OAAOA,EAAK,OAAO,YAAY,OAAO,IAAI,GACxEA,EAAK,YAAY,aAAa,aAAa,GAAG,GAC9CA,EAAK,cAAc,aAAa,OAAO,GAAG,GAC1CA,EAAK,cAAc,aAAa,OAAO,IAAI,GAC3CA,EAAK,cAAc,aAAa,aAAa,GAAG,GAChDA,EAAK,cAAc,YAAYuI,CAAS,GACxCvI,EAAK,cAAc,YAAYsI,CAAS,GACxCtI,EAAK,cAAc,YAAYwI,CAAW,GACtCxI,EAAK,OAAO,aACZA,EAAK,cAAc,UAAU,IAAI,UAAU,GAC3CA,EAAK,OAAO,eAAe;AAC3B,MAAAA,EAAK,cAAc,UAAU,IAAI,YAAY;AAC7C,UAAIyI,KAAcvN,GAAkB,kBAAkB;AACtD,MAAA8E,EAAK,gBAAgByI,GAAY,qBAAqB,OAAO,EAAE,CAAC,GAChEzI,EAAK,cAAc,QAAQnG,GAAImG,EAAK,wBAC9BA,EAAK,sBAAsB,WAAY,IACvCzG,EAAS,OAAO,GACtByG,EAAK,cAAc,aAAa,QAAQA,EAAK,cAAc,aAAa,MAAM,CAAC,GAC/EA,EAAK,cAAc,aAAa,OAAO,GAAG,GAC1CA,EAAK,cAAc,aAAa,OAAO,IAAI,GAC3CA,EAAK,cAAc,aAAa,aAAa,GAAG,GAChDA,EAAK,cAAc,YAAYrF,GAAc,QAAQ,4BAA4B,GAAG,CAAC,GACrFqF,EAAK,cAAc,YAAYyI,EAAW;AAAA,IAC7C;AACD,WAAKzI,EAAK,OAAO,cACbA,EAAK,OAAOrF,GAAc,QAAQ,mBAAmBqF,EAAK,KAAK,KAAKhG,IAAKgG,EAAK,wBACxEA,EAAK,YAAY,QACjBA,EAAK,OAAO,eAAe,EAAE,CAAC,CAAC,GACrCA,EAAK,KAAK,QAAQA,EAAK,KAAK,aAC5BA,EAAK,KAAK,WAAW,IACrBA,EAAK,cAAc,YAAYA,EAAK,IAAI,IAErCA,EAAK;AAAA,EACf;AACD,WAASoF,IAAgB;AACrB,IAAKpF,EAAK,mBAGNlF,GAAUkF,EAAK,gBAAgB,IAF/BA,EAAK,mBAAmBrF,GAAc,OAAO,oBAAoB;AAGrE,aAAS7S,IAAIkY,EAAK,OAAO,YAAYlY,OAAM;AACvC,UAAI+f,IAAYlN,GAAc,OAAO,4BAA4B;AACjE,MAAAqF,EAAK,iBAAiB,YAAY6H,CAAS;AAAA,IAC9C;AACD,WAAAa,KACO1I,EAAK;AAAA,EACf;AACD,WAAS0I,IAAiB;AACtB,QAAK1I,EAAK,kBAGV;AAAA,UAAI2I,IAAiB3I,EAAK,KAAK,gBAC3B4I,IAAWnJ,GAAeO,EAAK,KAAK,SAAS,SAAS;AAC1D,MAAI2I,IAAiB,KAAKA,IAAiBC,EAAS,WAChDA,IAAWnJ,GAAemJ,EAAS,OAAOD,GAAgBC,EAAS,MAAM,GAAGA,EAAS,OAAO,GAAGD,CAAc,CAAC;AAElH,eAAS7gB,IAAIkY,EAAK,OAAO,YAAYlY;AACjC,QAAAkY,EAAK,iBAAiB,SAASlY,CAAC,EAAE,YAAY;AAAA;AAAA,YAAuD8gB,EAAS,KAAK,yCAAyC,IAAI;AAAA;AAAA;AAAA;AAAA,EAEvK;AACD,WAAS3D,IAAa;AAClB,IAAAjF,EAAK,kBAAkB,UAAU,IAAI,UAAU;AAC/C,QAAIkF,IAAcvK,GAAc,OAAO,uBAAuB;AAC9D,IAAAuK,EAAY,YAAYvK,GAAc,QAAQ,qBAAqBqF,EAAK,KAAK,gBAAgB,CAAC;AAC9F,QAAImF,IAAcxK,GAAc,OAAO,iBAAiB;AACxD,WAAAuK,EAAY,YAAYC,CAAW,GAC5B;AAAA,MACH,aAAaD;AAAA,MACb,aAAaC;AAAA,IACzB;AAAA,EACK;AACD,WAAS5E,GAAY3e,GAAOinB,GAAU;AAClC,IAAIA,MAAa,WAAUA,IAAW;AACtC,QAAIlE,IAAQkE,IAAWjnB,IAAQA,IAAQoe,EAAK;AAC5C,IAAK2E,IAAQ,KAAK3E,EAAK,wBAAwB,MAC1C2E,IAAQ,KAAK3E,EAAK,wBAAwB,OAE/CA,EAAK,gBAAgB2E,IACjB3E,EAAK,eAAe,KAAKA,EAAK,eAAe,QAC7CA,EAAK,eAAeA,EAAK,eAAe,KAAK,IAAI,IACjDA,EAAK,gBAAgBA,EAAK,eAAe,MAAM,IAC/CiC,GAAa,cAAc,GAC3BwC,MAEJY,KACApD,GAAa,eAAe,GAC5BoG;EACH;AACD,WAAS5H,GAAMqI,GAAoBC,GAAW;AAc1C,QAbID,MAAuB,WAAUA,IAAqB,KACtDC,MAAc,WAAUA,IAAY,KACxC/I,EAAK,MAAM,QAAQ,IACfA,EAAK,aAAa,WAClBA,EAAK,SAAS,QAAQ,KACtBA,EAAK,gBAAgB,WACrBA,EAAK,YAAY,QAAQ,KAC7BA,EAAK,gBAAgB,IACrBA,EAAK,wBAAwB,QACzB+I,MAAc,OACd/I,EAAK,cAAcA,EAAK,aAAa,YAAW,GAChDA,EAAK,eAAeA,EAAK,aAAa,SAAQ,IAE9CA,EAAK,OAAO,eAAe,IAAM;AACjC,UAAIza,IAAKuZ,GAAgBkB,EAAK,MAAM,GAAGrB,IAAQpZ,EAAG,OAAOyN,KAAUzN,EAAG,SAAS8W,KAAU9W,EAAG;AAC5F,MAAA6d,EAASzE,GAAO3L,IAASqJ,EAAO;AAAA,IACnC;AACD,IAAA2D,EAAK,OAAM,GACP8I,KACA7G,GAAa,UAAU;AAAA,EAC9B;AACD,WAASvB,KAAQ;AACb,IAAAV,EAAK,SAAS,IACTA,EAAK,aACFA,EAAK,sBAAsB,UAC3BA,EAAK,kBAAkB,UAAU,OAAO,MAAM,GAE9CA,EAAK,WAAW,UAChBA,EAAK,OAAO,UAAU,OAAO,QAAQ,IAG7CiC,GAAa,SAAS;AAAA,EACzB;AACD,WAASpB,KAAU;AACf,IAAIb,EAAK,WAAW,UAChBiC,GAAa,WAAW;AAC5B,aAASna,IAAIkY,EAAK,UAAU,QAAQlY;AAChC,MAAAkY,EAAK,UAAUlY,CAAC,EAAE,OAAM;AAG5B,QADAkY,EAAK,YAAY,IACbA,EAAK;AACL,MAAIA,EAAK,YAAY,cACjBA,EAAK,YAAY,WAAW,YAAYA,EAAK,WAAW,GAC5DA,EAAK,cAAc;AAAA,aAEdA,EAAK,qBAAqBA,EAAK,kBAAkB;AACtD,UAAIA,EAAK,OAAO,UAAUA,EAAK,kBAAkB,YAAY;AACzD,YAAI3E,IAAU2E,EAAK,kBAAkB;AAErC,YADA3E,EAAQ,aAAaA,EAAQ,YAAYA,EAAQ,SAAS,GACtDA,EAAQ,YAAY;AACpB,iBAAOA,EAAQ;AACX,YAAAA,EAAQ,WAAW,aAAaA,EAAQ,YAAYA,CAAO;AAC/D,UAAAA,EAAQ,WAAW,YAAYA,CAAO;AAAA,QACzC;AAAA,MACJ;AAEG,QAAA2E,EAAK,kBAAkB,WAAW,YAAYA,EAAK,iBAAiB;AAE5E,IAAIA,EAAK,aACLA,EAAK,MAAM,OAAO,QACdA,EAAK,SAAS,cACdA,EAAK,SAAS,WAAW,YAAYA,EAAK,QAAQ,GACtD,OAAOA,EAAK,WAEZA,EAAK,UACLA,EAAK,MAAM,OAAOA,EAAK,MAAM,OAC7BA,EAAK,MAAM,UAAU,OAAO,iBAAiB,GAC7CA,EAAK,MAAM,gBAAgB,UAAU,IAEzC;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACZ,EAAU,QAAQ,SAAUpX,GAAG;AACnB,UAAI;AACA,eAAOoX,EAAKpX,CAAC;AAAA,MAChB,QACS;AAAA,MAAG;AAAA,IACzB,CAAS;AAAA,EACJ;AACD,WAASogB,GAAevO,GAAM;AAC1B,WAAOuF,EAAK,kBAAkB,SAASvF,CAAI;AAAA,EAC9C;AACD,WAASuJ,GAAcnc,GAAG;AACtB,QAAImY,EAAK,UAAU,CAACA,EAAK,OAAO,QAAQ;AACpC,UAAIiJ,IAAgBxN,GAAe5T,CAAC,GAChCqhB,IAAoBF,GAAeC,CAAa,GAChDE,IAAUF,MAAkBjJ,EAAK,SACjCiJ,MAAkBjJ,EAAK,YACvBA,EAAK,QAAQ,SAASiJ,CAAa,KAClCphB,EAAE,QACCA,EAAE,KAAK,YACN,CAACA,EAAE,KAAK,QAAQmY,EAAK,KAAK,KACvB,CAACnY,EAAE,KAAK,QAAQmY,EAAK,QAAQ,IACrCoJ,KAAY,CAACD,KACb,CAACD,KACD,CAACF,GAAenhB,EAAE,aAAa,GAC/BwhB,KAAY,CAACrJ,EAAK,OAAO,qBAAqB,KAAK,SAAUvF,IAAM;AACnE,eAAOA,GAAK,SAASwO,CAAa;AAAA,MAClD,CAAa;AACD,MAAIG,MAAaC,OACTrJ,EAAK,OAAO,cACZA,EAAK,QAAQA,EAAK,OAAO,OAAO,IAAOA,EAAK,OAAO,WAC7CA,EAAK,OAAO,YACZA,EAAK,OAAO,UAAU,GAE5BA,EAAK,kBAAkB,UACvBA,EAAK,kBAAkB,UACvBA,EAAK,gBAAgB,UACrBA,EAAK,MAAM,UAAU,MACrBA,EAAK,MAAM,UAAU,UACrBqC,KAEJrC,EAAK,MAAK,GACNA,EAAK,UACLA,EAAK,OAAO,SAAS,WACrBA,EAAK,cAAc,WAAW,KAC9BA,EAAK,MAAM,EAAK;AAAA,IAE3B;AAAA,EACJ;AACD,WAASQ,GAAW8I,GAAS;AACzB,QAAI,GAACA,KACAtJ,EAAK,OAAO,WAAWsJ,IAAUtJ,EAAK,OAAO,QAAQ,iBACrDA,EAAK,OAAO,WAAWsJ,IAAUtJ,EAAK,OAAO,QAAQ,gBAE1D;AAAA,UAAIuJ,IAAaD,GAASE,IAAYxJ,EAAK,gBAAgBuJ;AAC3D,MAAAvJ,EAAK,cAAcuJ,KAAcvJ,EAAK,aAClCA,EAAK,OAAO,WACZA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAW,IACpDA,EAAK,eAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,YAAY,IAEzEA,EAAK,OAAO,WACjBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAW,MACpDA,EAAK,eAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,YAAY,IAE9EwJ,MACAxJ,EAAK,OAAM,GACXiC,GAAa,cAAc,GAC3BwC;;EAEP;AACD,WAAS3D,GAAU7N,GAAMsK,GAAU;AAC/B,QAAIhY;AACJ,IAAIgY,MAAa,WAAUA,IAAW;AACtC,QAAIkM,IAAczJ,EAAK,UAAU/M,GAAM,QAAWsK,CAAQ;AAC1D,QAAKyC,EAAK,OAAO,WACbyJ,KACApL,GAAaoL,GAAazJ,EAAK,OAAO,SAASzC,MAAa,SAAYA,IAAW,CAACyC,EAAK,cAAc,IAAI,KAC1GA,EAAK,OAAO,WACTyJ,KACApL,GAAaoL,GAAazJ,EAAK,OAAO,SAASzC,MAAa,SAAYA,IAAW,CAACyC,EAAK,cAAc,IAAI;AAC/G,aAAO;AACX,QAAI,CAACA,EAAK,OAAO,UAAUA,EAAK,OAAO,QAAQ,WAAW;AACtD,aAAO;AACX,QAAIyJ,MAAgB;AAChB,aAAO;AAEX,aADIxP,KAAO,CAAC,CAAC+F,EAAK,OAAO,QAAQ0J,MAASnkB,IAAKya,EAAK,OAAO,YAAY,QAAQza,MAAO,SAASA,IAAKya,EAAK,OAAO,SACvGlY,KAAI,GAAGqD,KAAI,QAAQrD,KAAI4hB,GAAM,QAAQ5hB,MAAK;AAE/C,UADAqD,KAAIue,GAAM5hB,EAAC,GACP,OAAOqD,MAAM,cACbA,GAAEse,CAAW;AACb,eAAOxP;AACN,UAAI9O,cAAa,QAClBse,MAAgB,UAChBte,GAAE,QAAO,MAAOse,EAAY,QAAS;AACrC,eAAOxP;AACN,UAAI,OAAO9O,MAAM,UAAU;AAC5B,YAAIwe,KAAS3J,EAAK,UAAU7U,IAAG,QAAW,EAAI;AAC9C,eAAOwe,MAAUA,GAAO,QAAO,MAAOF,EAAY,QAAS,IACrDxP,KACA,CAACA;AAAA,MACV,WACQ,OAAO9O,MAAM,YAClBse,MAAgB,UAChBte,GAAE,QACFA,GAAE,MACFse,EAAY,QAAS,KAAIte,GAAE,KAAK,QAAS,KACzCse,EAAY,QAAS,KAAIte,GAAE,GAAG,QAAS;AACvC,eAAO8O;AAAA,IACd;AACD,WAAO,CAACA;AAAA,EACX;AACD,WAAS4M,GAASpM,GAAM;AACpB,WAAIuF,EAAK,kBAAkB,SACfvF,EAAK,UAAU,QAAQ,QAAQ,MAAM,MACzCA,EAAK,UAAU,QAAQ,oBAAoB,MAAM,MACjDuF,EAAK,cAAc,SAASvF,CAAI,IACjC;AAAA,EACV;AACD,WAASnV,GAAOuC,GAAG;AACf,QAAIshB,IAAUthB,EAAE,WAAWmY,EAAK,QAC5B4J,IAAe5J,EAAK,OAAO,MAAM,QAAO,MAAO6J;AACnD,IAAIV,KACAS,KACA,EAAE/hB,EAAE,iBAAiBmhB,GAAenhB,EAAE,aAAa,MACnDmY,EAAK,QAAQA,EAAK,OAAO,OAAO,IAAMnY,EAAE,WAAWmY,EAAK,WAClDA,EAAK,OAAO,YACZA,EAAK,OAAO,UAAU;AAAA,EAEnC;AACD,WAAS+D,GAAUlc,GAAG;AAClB,QAAIyb,IAAc7H,GAAe5T,CAAC,GAC9BshB,IAAUnJ,EAAK,OAAO,OACpBF,EAAQ,SAASwD,CAAW,IAC5BA,MAAgBtD,EAAK,QACvB8J,IAAa9J,EAAK,OAAO,YACzB+J,KAAe/J,EAAK,WAAW,CAAC8J,KAAc,CAACX,IAC/Ca,KAAqBhK,EAAK,OAAO,UAAUmJ,KAAW,CAACW;AAC3D,QAAIjiB,EAAE,YAAY,MAAMshB,GAAS;AAC7B,UAAIW;AACA,eAAA9J,EAAK,QAAQA,EAAK,OAAO,OAAO,IAAMsD,MAAgBtD,EAAK,WACrDA,EAAK,OAAO,YACZA,EAAK,OAAO,UAAU,GAC5BA,EAAK,MAAK,GACHsD,EAAY;AAGnB,MAAAtD,EAAK,KAAI;AAAA,IAEhB,WACQgJ,GAAe1F,CAAW,KAC/ByG,MACAC,IAAoB;AACpB,UAAIC,KAAY,CAAC,CAACjK,EAAK,iBACnBA,EAAK,cAAc,SAASsD,CAAW;AAC3C,cAAQzb,EAAE,SAAO;AAAA,QACb,KAAK;AACD,UAAIoiB,MACApiB,EAAE,eAAc,GAChBwa,KACA6H,QAGAhG,GAAWrc,CAAC;AAChB;AAAA,QACJ,KAAK;AACD,UAAAA,EAAE,eAAc,GAChBqiB;AACA;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,UAAIf,KAAW,CAACnJ,EAAK,OAAO,eACxBnY,EAAE,eAAc,GAChBmY,EAAK,MAAK;AAEd;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,cAAI,CAACiK,MAAa,CAACd,GAAS;AACxB,YAAAthB,EAAE,eAAc;AAChB,gBAAI8e,KAAgBzE;AACpB,gBAAIlC,EAAK,kBAAkB,WACtB8J,MAAe,MACXnD,MAAiBE,GAASF,EAAa,IAAK;AACjD,kBAAIwD,KAAUtiB,EAAE,YAAY,KAAK,IAAI;AACrC,cAAKA,EAAE,WAGHA,EAAE,gBAAe,GACjB0Y,GAAY4J,EAAO,GACnB1D,GAAWV,EAAqB,CAAC,GAAG,CAAC,KAJrCU,GAAW,QAAW0D,EAAO;AAAA,YAMpC;AAAA,UACJ;AACI,YAAInK,EAAK,eACVA,EAAK,YAAY;AACrB;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,UAAAnY,EAAE,eAAc;AAChB,cAAI8c,KAAQ9c,EAAE,YAAY,KAAK,IAAI;AACnC,UAAKmY,EAAK,iBACNsD,EAAY,OAAO,UACnBA,MAAgBtD,EAAK,SACrBsD,MAAgBtD,EAAK,WACjBnY,EAAE,WACFA,EAAE,gBAAe,GACjB2Y,GAAWR,EAAK,cAAc2E,EAAK,GACnC8B,GAAWV,EAAqB,CAAC,GAAG,CAAC,KAE/BkE,MACNxD,GAAW,QAAW9B,KAAQ,CAAC,IAE9BrB,MAAgBtD,EAAK,qBAC1BQ,GAAWR,EAAK,cAAc2E,EAAK,IAE9B3E,EAAK,OAAO,eACb,CAACiK,MAAajK,EAAK,eACnBA,EAAK,YAAY,SACrBqC,EAAWxa,CAAC,GACZmY,EAAK,iBAAgB;AAEzB;AAAA,QACJ,KAAK;AACD,cAAIiK,IAAW;AACX,gBAAIG,KAAQ;AAAA,cACRpK,EAAK;AAAA,cACLA,EAAK;AAAA,cACLA,EAAK;AAAA,cACLA,EAAK;AAAA,YACR,EACI,OAAOA,EAAK,cAAc,EAC1B,OAAO,SAAU1d,IAAG;AAAE,qBAAOA;AAAA,YAAI,CAAA,GAClCwF,KAAIsiB,GAAM,QAAQ9G,CAAW;AACjC,gBAAIxb,OAAM,IAAI;AACV,kBAAIsX,KAASgL,GAAMtiB,MAAKD,EAAE,WAAW,KAAK,EAAE;AAC5C,cAAAA,EAAE,eAAc,IACfuX,MAAUY,EAAK,QAAQ,MAAK;AAAA,YAChC;AAAA,UACJ;AACI,YAAI,CAACA,EAAK,OAAO,cAClBA,EAAK,iBACLA,EAAK,cAAc,SAASsD,CAAW,KACvCzb,EAAE,aACFA,EAAE,eAAc,GAChBmY,EAAK,OAAO;AAEhB;AAAA,MAGP;AAAA,IACJ;AACD,QAAIA,EAAK,SAAS,UAAasD,MAAgBtD,EAAK;AAChD,cAAQnY,EAAE,KAAG;AAAA,QACT,KAAKmY,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;AAAA,QAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAa;AAC1C,UAAAA,EAAK,KAAK,cAAcA,EAAK,KAAK,KAAK,CAAC,GACxCyC,KACAzB;AACA;AAAA,QACJ,KAAKhB,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;AAAA,QAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAa;AAC1C,UAAAA,EAAK,KAAK,cAAcA,EAAK,KAAK,KAAK,CAAC,GACxCyC,KACAzB;AACA;AAAA,MACP;AAEL,KAAImI,KAAWH,GAAe1F,CAAW,MACrCrB,GAAa,aAAapa,CAAC;AAAA,EAElC;AACD,WAAS8Y,GAAYlG,GAAM4P,GAAW;AAElC,QADIA,MAAc,WAAUA,IAAY,kBACpC,EAAArK,EAAK,cAAc,WAAW,KAC7BvF,MACI,CAACA,EAAK,UAAU,SAAS4P,CAAS,KAC/B5P,EAAK,UAAU,SAAS,oBAAoB,KAOxD;AAAA,eALI6P,IAAY7P,IACVA,EAAK,QAAQ,QAAS,IACtBuF,EAAK,KAAK,kBAAkB,QAAQ,QAAS,GAAEuK,IAAcvK,EAAK,UAAUA,EAAK,cAAc,CAAC,GAAG,QAAW,EAAI,EAAE,QAAO,GAAIwK,KAAiB,KAAK,IAAIF,GAAWtK,EAAK,cAAc,CAAC,EAAE,QAAO,CAAE,GAAGyK,KAAe,KAAK,IAAIH,GAAWtK,EAAK,cAAc,CAAC,EAAE,QAAO,CAAE,GAC1Q0K,KAAmB,IACnBC,KAAW,GAAGC,KAAW,GACpBxpB,KAAIopB,IAAgBppB,KAAIqpB,IAAcrpB,MAAKqO,GAAS;AACzD,QAAKqR,GAAU,IAAI,KAAK1f,EAAC,GAAG,EAAI,MAC5BspB,KACIA,MAAqBtpB,KAAIopB,MAAkBppB,KAAIqpB,IAC/CrpB,KAAImpB,MAAgB,CAACI,MAAYvpB,KAAIupB,MACrCA,KAAWvpB,KACNA,KAAImpB,MAAgB,CAACK,MAAYxpB,KAAIwpB,QAC1CA,KAAWxpB;AAGvB,UAAIypB,KAAiB,MAAM,KAAK7K,EAAK,WAAW,iBAAiB,oBAAoBA,EAAK,OAAO,aAAa,UAAUqK,CAAS,CAAC;AAClI,MAAAQ,GAAe,QAAQ,SAAUC,IAAS;AACtC,YAAI7X,KAAO6X,GAAQ,SACfC,KAAY9X,GAAK,WACjB+X,KAAcL,KAAW,KAAKI,KAAYJ,MACzCC,KAAW,KAAKG,KAAYH;AACjC,YAAII,IAAY;AACZ,UAAAF,GAAQ,UAAU,IAAI,YAAY,GAClC,CAAC,WAAW,cAAc,UAAU,EAAE,QAAQ,SAAU/hB,IAAG;AACvD,YAAA+hB,GAAQ,UAAU,OAAO/hB,EAAC;AAAA,UAC9C,CAAiB;AACD;AAAA,QACH,WACQ2hB,MAAoB,CAACM;AAC1B;AACJ,SAAC,cAAc,WAAW,YAAY,YAAY,EAAE,QAAQ,SAAUjiB,IAAG;AACrE,UAAA+hB,GAAQ,UAAU,OAAO/hB,EAAC;AAAA,QAC1C,CAAa,GACG0R,MAAS,WACTA,EAAK,UAAU,IAAI6P,KAAatK,EAAK,cAAc,CAAC,EAAE,QAAS,IACzD,eACA,UAAU,GACZuK,IAAcD,KAAaS,OAAcR,IACzCO,GAAQ,UAAU,IAAI,YAAY,IAC7BP,IAAcD,KAAaS,OAAcR,KAC9CO,GAAQ,UAAU,IAAI,UAAU,GAChCC,MAAaJ,OACZC,OAAa,KAAKG,MAAaH,OAChCtM,GAAUyM,IAAWR,GAAaD,CAAS,KAC3CQ,GAAQ,UAAU,IAAI,SAAS;AAAA,MAEnD,CAAS;AAAA;AAAA,EACJ;AACD,WAAShH,KAAW;AAChB,IAAI9D,EAAK,UAAU,CAACA,EAAK,OAAO,UAAU,CAACA,EAAK,OAAO,UACnDM;EACP;AACD,WAASW,GAAKpZ,GAAGojB,GAAiB;AAE9B,QADIA,MAAoB,WAAUA,IAAkBjL,EAAK,mBACrDA,EAAK,aAAa,IAAM;AACxB,UAAInY,GAAG;AACH,QAAAA,EAAE,eAAc;AAChB,YAAIyb,IAAc7H,GAAe5T,CAAC;AAClC,QAAIyb,KACAA,EAAY,KAAI;AAAA,MAEvB;AACD,MAAItD,EAAK,gBAAgB,WACrBA,EAAK,YAAY,SACjBA,EAAK,YAAY,UAErBiC,GAAa,QAAQ;AACrB;AAAA,IACH,WACQjC,EAAK,OAAO,YAAYA,EAAK,OAAO;AACzC;AAEJ,QAAIkL,IAAUlL,EAAK;AACnB,IAAAA,EAAK,SAAS,IACTkL,MACDlL,EAAK,kBAAkB,UAAU,IAAI,MAAM,GAC3CA,EAAK,OAAO,UAAU,IAAI,QAAQ,GAClCiC,GAAa,QAAQ,GACrB3B,GAAiB2K,CAAe,IAEhCjL,EAAK,OAAO,eAAe,MAAQA,EAAK,OAAO,eAAe,MAC1DA,EAAK,OAAO,eAAe,OAC1BnY,MAAM,UACH,CAACmY,EAAK,cAAc,SAASnY,EAAE,aAAa,MAChD,WAAW,WAAY;AAAE,aAAOmY,EAAK,YAAY;IAAS,GAAI,EAAE;AAAA,EAG3E;AACD,WAASmL,GAAiBC,GAAM;AAC5B,WAAO,SAAUnY,GAAM;AACnB,UAAI8I,IAAWiE,EAAK,OAAO,MAAMoL,IAAO,MAAM,IAAIpL,EAAK,UAAU/M,GAAM+M,EAAK,OAAO,UAAU,GACzFqL,IAAiBrL,EAAK,OAAO,OAAOoL,MAAS,QAAQ,QAAQ,SAAS,MAAM;AAChF,MAAIrP,MAAY,WACZiE,EAAKoL,MAAS,QAAQ,mBAAmB,gBAAgB,IACrDrP,EAAQ,SAAQ,IAAK,KACjBA,EAAQ,WAAU,IAAK,KACvBA,EAAQ,WAAY,IAAG,IAE/BiE,EAAK,kBACLA,EAAK,gBAAgBA,EAAK,cAAc,OAAO,SAAU7U,IAAG;AAAE,eAAO2V,GAAU3V,EAAC;AAAA,MAAI,CAAA,GAChF,CAAC6U,EAAK,cAAc,UAAUoL,MAAS,SACvC/K,EAAiBtE,CAAO,GAC5BiF,OAEAhB,EAAK,kBACLkB,MACInF,MAAY,SACZiE,EAAK,mBAAmBoL,CAAI,IAAIrP,EAAQ,YAAW,EAAG,aAEtDiE,EAAK,mBAAmB,gBAAgBoL,CAAI,GAChDpL,EAAK,mBAAmB,WACpB,CAAC,CAACqL,KACEtP,MAAY,UACZsP,EAAe,YAAW,MAAOtP,EAAQ,YAAW;AAAA,IAE5E;AAAA,EACK;AACD,WAAS0F,KAAc;AACnB,QAAI6J,IAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACZ,GACYC,IAAa/L,GAASA,GAAS,CAAA,GAAI,KAAK,MAAM,KAAK,UAAUM,EAAQ,WAAW,CAAA,CAAE,CAAC,CAAC,GAAGC,CAAc,GACrGjD,IAAU,CAAA;AACd,IAAAkD,EAAK,OAAO,YAAYuL,EAAW,WACnCvL,EAAK,OAAO,aAAauL,EAAW,YACpC,OAAO,eAAevL,EAAK,QAAQ,UAAU;AAAA,MACzC,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAU;AAAA,MAChD,KAAK,SAAUwL,IAAO;AAClB,QAAAxL,EAAK,OAAO,UAAUyL,GAAeD,EAAK;AAAA,MAC7C;AAAA,IACb,CAAS,GACD,OAAO,eAAexL,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAK,SAAUwL,IAAO;AAClB,QAAAxL,EAAK,OAAO,WAAWyL,GAAeD,EAAK;AAAA,MAC9C;AAAA,IACb,CAAS;AACD,QAAIE,IAAWH,EAAW,SAAS;AACnC,QAAI,CAACA,EAAW,eAAeA,EAAW,cAAcG,IAAW;AAC/D,UAAIC,KAAoBzL,GAAU,cAAc,cAAcD,GAAe;AAC7E,MAAAnD,EAAQ,aACJyO,EAAW,cAAcG,IACnB,SAASH,EAAW,gBAAgB,OAAO,MAC3CI,KAAoB,UAAUJ,EAAW,gBAAgB,OAAO;AAAA,IAC7E;AACD,QAAIA,EAAW,aACVA,EAAW,cAAcG,MAC1B,CAACH,EAAW,WAAW;AACvB,UAAIK,KAAmB1L,GAAU,cAAc,aAAaD,GAAe;AAC3E,MAAAnD,EAAQ,YACJyO,EAAW,cAAcG,IACnB,SAASH,EAAW,gBAAgB,SAAS,QAC7CK,MAAoB,UAAUL,EAAW,gBAAgB,OAAO,MAAM;AAAA,IACnF;AACD,WAAO,eAAevL,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAKmL,GAAiB,KAAK;AAAA,IACvC,CAAS,GACD,OAAO,eAAenL,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAKmL,GAAiB,KAAK;AAAA,IACvC,CAAS;AACD,QAAIU,KAAmB,SAAUT,IAAM;AAAE,aAAO,SAAUhN,IAAK;AAC3D,QAAA4B,EAAK,OAAOoL,OAAS,QAAQ,aAAa,UAAU,IAAIpL,EAAK,UAAU5B,IAAK,OAAO;AAAA,MACtF;AAAA;AACD,WAAO,eAAe4B,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAK6L,GAAiB,KAAK;AAAA,IACvC,CAAS,GACD,OAAO,eAAe7L,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAK6L,GAAiB,KAAK;AAAA,IACvC,CAAS,GACGN,EAAW,SAAS,WACpBvL,EAAK,OAAO,aAAa,IACzBA,EAAK,OAAO,aAAa,KAE7B,OAAO,OAAOA,EAAK,QAAQlD,GAASyO,CAAU;AAC9C,aAASzjB,KAAI,GAAGA,KAAIwjB,EAAS,QAAQxjB;AACjC,MAAAkY,EAAK,OAAOsL,EAASxjB,EAAC,CAAC,IACnBkY,EAAK,OAAOsL,EAASxjB,EAAC,CAAC,MAAM,MACzBkY,EAAK,OAAOsL,EAASxjB,EAAC,CAAC,MAAM;AACzC,IAAAwR,GAAM,OAAO,SAAUwS,IAAM;AAAE,aAAO9L,EAAK,OAAO8L,EAAI,MAAM;AAAA,IAAU,CAAE,EAAE,QAAQ,SAAUA,IAAM;AAC9F,MAAA9L,EAAK,OAAO8L,EAAI,IAAIvR,GAASyF,EAAK,OAAO8L,EAAI,KAAK,CAAE,CAAA,EAAE,IAAI3J,CAAc;AAAA,IACpF,CAAS,GACDnC,EAAK,WACD,CAACA,EAAK,OAAO,iBACT,CAACA,EAAK,OAAO,UACbA,EAAK,OAAO,SAAS,YACrB,CAACA,EAAK,OAAO,QAAQ,UACrB,CAACA,EAAK,OAAO,UACb,CAACA,EAAK,OAAO,eACb,iEAAiE,KAAK,UAAU,SAAS;AACjG,aAASlY,KAAI,GAAGA,KAAIkY,EAAK,OAAO,QAAQ,QAAQlY,MAAK;AACjD,UAAIikB,KAAa/L,EAAK,OAAO,QAAQlY,EAAC,EAAEkY,CAAI,KAAK;AACjD,eAAS/b,MAAO8nB;AACZ,QAAIzS,GAAM,QAAQrV,EAAG,IAAI,KACrB+b,EAAK,OAAO/b,EAAG,IAAIsW,GAASwR,GAAW9nB,EAAG,CAAC,EACtC,IAAIke,CAAc,EAClB,OAAOnC,EAAK,OAAO/b,EAAG,CAAC,IAEvB,OAAOsnB,EAAWtnB,EAAG,IAAM,QAChC+b,EAAK,OAAO/b,EAAG,IAAI8nB,GAAW9nB,EAAG;AAAA,IAE5C;AACD,IAAKsnB,EAAW,kBACZvL,EAAK,OAAO,gBACRgM,GAAY,EAAG,YAAY,MAAMhM,EAAK,OAAO,gBAErDiC,GAAa,eAAe;AAAA,EAC/B;AACD,WAAS+J,KAAe;AACpB,WAAOhM,EAAK,OAAO,OACbF,EAAQ,cAAc,cAAc,IACpCA;AAAA,EACT;AACD,WAAS4B,KAAc;AACnB,IAAI,OAAO1B,EAAK,OAAO,UAAW,YAC9B,OAAOE,GAAU,MAAMF,EAAK,OAAO,MAAM,IAAM,OAC/CA,EAAK,OAAO,aAAa,IAAI,MAAM,+BAA+BA,EAAK,OAAO,MAAM,CAAC,GACzFA,EAAK,OAAOR,GAASA,GAAS,CAAE,GAAEU,GAAU,MAAM,OAAO,GAAI,OAAOF,EAAK,OAAO,UAAW,WACrFA,EAAK,OAAO,SACZA,EAAK,OAAO,WAAW,YACnBE,GAAU,MAAMF,EAAK,OAAO,MAAM,IAClC,SACVnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,SAAS,UAAU,KAAK,GAAG,IAAI,KAC9DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,SAAS,SAAS,KAAK,GAAG,IAAI,KAC7DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,OAAO,UAAU,KAAK,GAAG,IAAI,KAC5DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,OAAO,SAAS,KAAK,GAAG,IAAI,KAC3DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,KAAK,CAAC,IAAI,MAAMA,EAAK,KAAK,KAAK,CAAC,IAAI,MAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAa,IAAG,MAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAW,IAAK;AACnJ,QAAIuL,IAAa/L,GAASA,GAAS,CAAA,GAAIO,CAAc,GAAG,KAAK,MAAM,KAAK,UAAUD,EAAQ,WAAW,CAAE,CAAA,CAAC,CAAC;AACzG,IAAIyL,EAAW,cAAc,UACzBrL,GAAU,cAAc,cAAc,WACtCF,EAAK,OAAO,YAAYA,EAAK,KAAK,YAEtCA,EAAK,aAAajD,GAAoBiD,CAAI,GAC1CA,EAAK,YAAY3C,GAAiB,EAAE,QAAQ2C,EAAK,QAAQ,MAAMA,EAAK,KAAI,CAAE;AAAA,EAC7E;AACD,WAASM,GAAiB2L,GAAuB;AAC7C,QAAI,OAAOjM,EAAK,OAAO,YAAa;AAChC,aAAO,KAAKA,EAAK,OAAO,SAASA,GAAMiM,CAAqB;AAEhE,QAAIjM,EAAK,sBAAsB,QAE/B;AAAA,MAAAiC,GAAa,uBAAuB;AACpC,UAAIgJ,IAAkBgB,KAAyBjM,EAAK,kBAChDkM,IAAiB,MAAM,UAAU,OAAO,KAAKlM,EAAK,kBAAkB,UAAW,SAAUmM,IAAKC,IAAO;AAAE,eAAOD,KAAMC,GAAM;AAAA,MAAe,GAAG,CAAC,GAAGC,IAAgBrM,EAAK,kBAAkB,aAAasM,KAAYtM,EAAK,OAAO,SAAS,MAAM,GAAG,GAAGuM,KAAoBD,GAAU,CAAC,GAAGE,KAAsBF,GAAU,SAAS,IAAIA,GAAU,CAAC,IAAI,MAAMG,KAAcxB,EAAgB,sBAAqB,GAAIyB,KAAqB,OAAO,cAAcD,GAAY,QAAQE,KAAYJ,OAAsB,WAC3eA,OAAsB,WACnBG,KAAqBR,KACrBO,GAAY,MAAMP,GACtBU,KAAM,OAAO,cACbH,GAAY,OACVE,KAA+C,CAACT,IAAiB,IAArDjB,EAAgB,eAAe;AAGjD,UAFAzQ,GAAYwF,EAAK,mBAAmB,YAAY,CAAC2M,EAAS,GAC1DnS,GAAYwF,EAAK,mBAAmB,eAAe2M,EAAS,GACxD,CAAA3M,EAAK,OAAO,QAEhB;AAAA,YAAI6M,KAAO,OAAO,cAAcJ,GAAY,MACxCK,KAAW,IACXC,KAAU;AACd,QAAIP,OAAwB,YACxBK,OAASR,IAAgBI,GAAY,SAAS,GAC9CK,KAAW,MAENN,OAAwB,YAC7BK,MAAQR,IAAgBI,GAAY,OACpCM,KAAU,KAEdvS,GAAYwF,EAAK,mBAAmB,aAAa,CAAC8M,MAAY,CAACC,EAAO,GACtEvS,GAAYwF,EAAK,mBAAmB,eAAe8M,EAAQ,GAC3DtS,GAAYwF,EAAK,mBAAmB,cAAc+M,EAAO;AACzD,YAAIC,KAAQ,OAAO,SAAS,KAAK,eAC5B,OAAO,cAAcP,GAAY,QAClCQ,KAAYJ,KAAOR,IAAgB,OAAO,SAAS,KAAK,aACxDa,KAAaF,KAAQX,IAAgB,OAAO,SAAS,KAAK;AAE9D,YADA7R,GAAYwF,EAAK,mBAAmB,aAAaiN,EAAS,GACtD,CAAAjN,EAAK,OAAO;AAGhB,cADAA,EAAK,kBAAkB,MAAM,MAAM4M,KAAM,MACrC,CAACK;AACD,YAAAjN,EAAK,kBAAkB,MAAM,OAAO6M,KAAO,MAC3C7M,EAAK,kBAAkB,MAAM,QAAQ;AAAA,mBAEhC,CAACkN;AACN,YAAAlN,EAAK,kBAAkB,MAAM,OAAO,QACpCA,EAAK,kBAAkB,MAAM,QAAQgN,KAAQ;AAAA,eAE5C;AACD,gBAAIG,KAAMC;AACV,gBAAID,OAAQ;AACR;AACJ,gBAAIE,KAAY,OAAO,SAAS,KAAK,aACjCC,KAAa,KAAK,IAAI,GAAGD,KAAY,IAAIhB,IAAgB,CAAC,GAC1DkB,KAAe,yCACfC,KAAc,wCACdC,KAAcN,GAAI,SAAS,QAC3BO,KAAc,WAAWjB,GAAY,OAAO;AAChDjS,YAAAA,GAAYwF,EAAK,mBAAmB,aAAa,EAAK,GACtDxF,GAAYwF,EAAK,mBAAmB,cAAc,EAAI,GACtDmN,GAAI,WAAWI,KAAe,MAAMC,KAAcE,IAAaD,EAAW,GAC1EzN,EAAK,kBAAkB,MAAM,OAAOsN,KAAa,MACjDtN,EAAK,kBAAkB,MAAM,QAAQ;AAAA,UACxC;AAAA;AAAA;AAAA,EACJ;AACD,WAASoN,KAAwB;AAE7B,aADIO,IAAgB,MACX7lB,IAAI,GAAGA,IAAI,SAAS,YAAY,QAAQA,KAAK;AAClD,UAAI8lB,IAAQ,SAAS,YAAY9lB,CAAC;AAClC,UAAK8lB,EAAM,UAEX;AAAA,YAAI;AACA,UAAAA,EAAM;AAAA,QACT,QACW;AACR;AAAA,QACH;AACD,QAAAD,IAAgBC;AAChB;AAAA;AAAA,IACH;AACD,WAAOD,KAAwCE,GAAgB;AAAA,EAClE;AACD,WAASA,KAAmB;AACxB,QAAIC,IAAQ,SAAS,cAAc,OAAO;AAC1C,oBAAS,KAAK,YAAYA,CAAK,GACxBA,EAAM;AAAA,EAChB;AACD,WAAS5M,KAAS;AACd,IAAIlB,EAAK,OAAO,cAAcA,EAAK,aAEnCyE,KACA4D,MACAhD;EACH;AACD,WAAS6E,KAAgB;AACrB,IAAAlK,EAAK,OAAO,SACR,OAAO,UAAU,UAAU,QAAQ,MAAM,MAAM,MAC/C,UAAU,qBAAqB,SAC/B,WAAWA,EAAK,OAAO,CAAC,IAGxBA,EAAK,MAAK;AAAA,EAEjB;AACD,WAASkE,GAAWrc,GAAG;AACnB,IAAAA,EAAE,eAAc,GAChBA,EAAE,gBAAe;AACjB,QAAIkmB,IAAe,SAAU7R,IAAK;AAC9B,aAAOA,GAAI,aACPA,GAAI,UAAU,SAAS,eAAe,KACtC,CAACA,GAAI,UAAU,SAAS,oBAAoB,KAC5C,CAACA,GAAI,UAAU,SAAS,YAAY;AAAA,IACpD,GACY9a,IAAI4Z,GAAWS,GAAe5T,CAAC,GAAGkmB,CAAY;AAClD,QAAI3sB,MAAM,QAEV;AAAA,UAAIge,IAAShe,GACT4sB,KAAgBhO,EAAK,wBAAwB,IAAI,KAAKZ,EAAO,QAAQ,QAAS,CAAA,GAC9E6O,MAAqBD,GAAa,SAAU,IAAGhO,EAAK,gBACpDgO,GAAa,SAAU,IACnBhO,EAAK,eAAeA,EAAK,OAAO,aAAa,MACjDA,EAAK,OAAO,SAAS;AAEzB,UADAA,EAAK,mBAAmBZ,GACpBY,EAAK,OAAO,SAAS;AACrB,QAAAA,EAAK,gBAAgB,CAACgO,EAAY;AAAA,eAC7BhO,EAAK,OAAO,SAAS,YAAY;AACtC,YAAIkO,KAAgBvI,GAAeqI,EAAY;AAC/C,QAAIE,KACAlO,EAAK,cAAc,OAAO,SAASkO,EAAa,GAAG,CAAC,IAEpDlO,EAAK,cAAc,KAAKgO,EAAY;AAAA,MAC3C;AACI,QAAIhO,EAAK,OAAO,SAAS,YACtBA,EAAK,cAAc,WAAW,KAC9BA,EAAK,MAAM,IAAO,EAAK,GAE3BA,EAAK,wBAAwBgO,IAC7BhO,EAAK,cAAc,KAAKgO,EAAY,GAChC3P,GAAa2P,IAAchO,EAAK,cAAc,CAAC,GAAG,EAAI,MAAM,KAC5DA,EAAK,cAAc,KAAK,SAAU3V,IAAGhB,IAAG;AAAE,iBAAOgB,GAAE,QAAO,IAAKhB,GAAE,QAAS;AAAA,QAAG,CAAA;AAGrF,UADAoZ,KACIwL,IAAmB;AACnB,YAAIzE,KAAYxJ,EAAK,gBAAgBgO,GAAa,YAAW;AAC7D,QAAAhO,EAAK,cAAcgO,GAAa,eAChChO,EAAK,eAAegO,GAAa,YAC7BxE,OACAvH,GAAa,cAAc,GAC3BwC,MAEJxC,GAAa,eAAe;AAAA,MAC/B;AAcD,UAbAoG,MACAhD,KACArE,MACI,CAACiN,MACDjO,EAAK,OAAO,SAAS,WACrBA,EAAK,OAAO,eAAe,IAC3B6F,EAAezG,CAAM,IAChBY,EAAK,qBAAqB,UAC/BA,EAAK,gBAAgB,UACrBA,EAAK,oBAAoBA,EAAK,iBAAiB,MAAK,GAEpDA,EAAK,gBAAgB,UACrBA,EAAK,gBAAgB,UAAaA,EAAK,YAAY,MAAK,GACxDA,EAAK,OAAO,eAAe;AAC3B,YAAImO,KAASnO,EAAK,OAAO,SAAS,YAAY,CAACA,EAAK,OAAO,YACvDoO,KAAQpO,EAAK,OAAO,SAAS,WAC7BA,EAAK,cAAc,WAAW,KAC9B,CAACA,EAAK,OAAO;AACjB,SAAImO,MAAUC,OACVlE;MAEP;AACD,MAAAxG;;EACH;AACD,MAAI2K,KAAY;AAAA,IACZ,QAAQ,CAAC3M,IAAagH,CAAc;AAAA,IACpC,YAAY,CAACN,GAAarG,GAAkBqD,CAAa;AAAA,IACzD,SAAS,CAACrE,CAAU;AAAA,IACpB,SAAS,CAACA,CAAU;AAAA,IACpB,iBAAiB,CAACuN,EAAqB;AAAA,IACvC,YAAY;AAAA,MACR,WAAY;AACR,QAAItO,EAAK,OAAO,eAAe,MAC3BI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,GACpCI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,MAGpCA,EAAK,OAAO,oBAAoB,SAASA,EAAK,IAAI,GAClDA,EAAK,OAAO,oBAAoB,SAASA,EAAK,IAAI;AAAA,MAEzD;AAAA,IACJ;AAAA,EACT;AACI,WAASmB,GAAIoN,GAAQ3sB,GAAO;AACxB,QAAI2sB,MAAW,QAAQ,OAAOA,KAAW,UAAU;AAC/C,aAAO,OAAOvO,EAAK,QAAQuO,CAAM;AACjC,eAAStqB,KAAOsqB;AACZ,QAAIF,GAAUpqB,CAAG,MAAM,UACnBoqB,GAAUpqB,CAAG,EAAE,QAAQ,SAAU3B,GAAG;AAAE,iBAAOA;QAAI,CAAE;AAAA,IAE9D;AAEG,MAAA0d,EAAK,OAAOuO,CAAM,IAAI3sB,GAClBysB,GAAUE,CAAM,MAAM,SACtBF,GAAUE,CAAM,EAAE,QAAQ,SAAUjsB,GAAG;AAAE,eAAOA;MAAI,CAAE,IACjDgX,GAAM,QAAQiV,CAAM,IAAI,OAC7BvO,EAAK,OAAOuO,CAAM,IAAIhU,GAAS3Y,CAAK;AAE5C,IAAAoe,EAAK,OAAM,GACXgB,GAAY,EAAI;AAAA,EACnB;AACD,WAASwN,GAAgBC,GAAW9Q,GAAQ;AACxC,QAAI6N,IAAQ,CAAA;AACZ,QAAIiD,aAAqB;AACrB,MAAAjD,IAAQiD,EAAU,IAAI,SAAUtjB,GAAG;AAAE,eAAO6U,EAAK,UAAU7U,GAAGwS,CAAM;AAAA,MAAI,CAAA;AAAA,aACnE8Q,aAAqB,QAAQ,OAAOA,KAAc;AACvD,MAAAjD,IAAQ,CAACxL,EAAK,UAAUyO,GAAW9Q,CAAM,CAAC;AAAA,aACrC,OAAO8Q,KAAc;AAC1B,cAAQzO,EAAK,OAAO,MAAI;AAAA,QACpB,KAAK;AAAA,QACL,KAAK;AACD,UAAAwL,IAAQ,CAACxL,EAAK,UAAUyO,GAAW9Q,CAAM,CAAC;AAC1C;AAAA,QACJ,KAAK;AACD,UAAA6N,IAAQiD,EACH,MAAMzO,EAAK,OAAO,WAAW,EAC7B,IAAI,SAAU/M,GAAM;AAAE,mBAAO+M,EAAK,UAAU/M,GAAM0K,CAAM;AAAA,UAAE,CAAE;AACjE;AAAA,QACJ,KAAK;AACD,UAAA6N,IAAQiD,EACH,MAAMzO,EAAK,KAAK,cAAc,EAC9B,IAAI,SAAU/M,GAAM;AAAE,mBAAO+M,EAAK,UAAU/M,GAAM0K,CAAM;AAAA,UAAE,CAAE;AACjE;AAAA,MAGP;AAAA;AAGD,MAAAqC,EAAK,OAAO,aAAa,IAAI,MAAM,4BAA4B,KAAK,UAAUyO,CAAS,CAAC,CAAC;AAC7F,IAAAzO,EAAK,gBAAiBA,EAAK,OAAO,sBAC5BwL,IACAA,EAAM,OAAO,SAAUrgB,GAAG;AAAE,aAAOA,aAAa,QAAQ2V,GAAU3V,GAAG,EAAK;AAAA,IAAE,CAAE,GAChF6U,EAAK,OAAO,SAAS,WACrBA,EAAK,cAAc,KAAK,SAAU3V,GAAGhB,IAAG;AAAE,aAAOgB,EAAE,QAAO,IAAKhB,GAAE,QAAS;AAAA,IAAG,CAAA;AAAA,EACpF;AACD,WAAS+X,GAAQnO,GAAMyQ,GAAe/F,GAAQ;AAG1C,QAFI+F,MAAkB,WAAUA,IAAgB,KAC5C/F,MAAW,WAAUA,IAASqC,EAAK,OAAO,aACzC/M,MAAS,KAAK,CAACA,KAAUA,aAAgB,SAASA,EAAK,WAAW;AACnE,aAAO+M,EAAK,MAAM0D,CAAa;AACnC,IAAA8K,GAAgBvb,GAAM0K,CAAM,GAC5BqC,EAAK,wBACDA,EAAK,cAAcA,EAAK,cAAc,SAAS,CAAC,GACpDA,EAAK,OAAM,GACXe,EAAW,QAAW2C,CAAa,GACnCrD,KACIL,EAAK,cAAc,WAAW,KAC9BA,EAAK,MAAM,EAAK,GAEpBgB,GAAY0C,CAAa,GACrBA,KACAzB,GAAa,UAAU;AAAA,EAC9B;AACD,WAASwJ,GAAerO,GAAK;AACzB,WAAOA,EACF,MAAO,EACP,IAAI,SAAUsR,GAAM;AACrB,aAAI,OAAOA,KAAS,YAChB,OAAOA,KAAS,YAChBA,aAAgB,OACT1O,EAAK,UAAU0O,GAAM,QAAW,EAAI,IAEtCA,KACL,OAAOA,KAAS,YAChBA,EAAK,QACLA,EAAK,KACE;AAAA,QACH,MAAM1O,EAAK,UAAU0O,EAAK,MAAM,MAAS;AAAA,QACzC,IAAI1O,EAAK,UAAU0O,EAAK,IAAI,MAAS;AAAA,MACzD,IACmBA;AAAA,IACnB,CAAS,EACI,OAAO,SAAUpsB,GAAG;AAAE,aAAOA;AAAA,IAAI,CAAA;AAAA,EACzC;AACD,WAASsf,KAAa;AAClB,IAAA5B,EAAK,gBAAgB,IACrBA,EAAK,MAAMA,EAAK,UAAUA,EAAK,OAAO,GAAG,KAAK,oBAAI;AAClD,QAAI2O,IAAgB3O,EAAK,OAAO,iBAC1BA,EAAK,MAAM,aAAa,WACtBA,EAAK,MAAM,aAAa,eACxBA,EAAK,MAAM,eACXA,EAAK,MAAM,UAAUA,EAAK,MAAM,cAC9B,OACAA,EAAK,MAAM;AACrB,IAAI2O,KACAH,GAAgBG,GAAe3O,EAAK,OAAO,UAAU,GACzDA,EAAK,eACDA,EAAK,cAAc,SAAS,IACtBA,EAAK,cAAc,CAAC,IACpBA,EAAK,OAAO,WACVA,EAAK,OAAO,QAAQ,QAAS,IAAGA,EAAK,IAAI,QAAS,IAChDA,EAAK,OAAO,UACZA,EAAK,OAAO,WACVA,EAAK,OAAO,QAAQ,QAAS,IAAGA,EAAK,IAAI,QAAS,IAChDA,EAAK,OAAO,UACZA,EAAK,KACvBA,EAAK,cAAcA,EAAK,aAAa,YAAW,GAChDA,EAAK,eAAeA,EAAK,aAAa,SAAQ,GAC1CA,EAAK,cAAc,SAAS,MAC5BA,EAAK,wBAAwBA,EAAK,cAAc,CAAC,IACjDA,EAAK,OAAO,YAAY,WACxBA,EAAK,OAAO,UAAUA,EAAK,UAAUA,EAAK,OAAO,SAAS,KAAK,IAC/DA,EAAK,OAAO,YAAY,WACxBA,EAAK,OAAO,UAAUA,EAAK,UAAUA,EAAK,OAAO,SAAS,KAAK,IACnEA,EAAK,iBACD,CAAC,CAACA,EAAK,OAAO,YACTA,EAAK,OAAO,QAAQ,SAAU,IAAG,KAC9BA,EAAK,OAAO,QAAQ,WAAY,IAAG,KACnCA,EAAK,OAAO,QAAQ,WAAY,IAAG,IAC/CA,EAAK,iBACD,CAAC,CAACA,EAAK,OAAO,YACTA,EAAK,OAAO,QAAQ,SAAU,IAAG,KAC9BA,EAAK,OAAO,QAAQ,WAAY,IAAG,KACnCA,EAAK,OAAO,QAAQ,WAAY,IAAG;AAAA,EAClD;AACD,WAAS2B,KAAc;AAEnB,QADA3B,EAAK,QAAQgM,MACT,CAAChM,EAAK,OAAO;AACb,MAAAA,EAAK,OAAO,aAAa,IAAI,MAAM,iCAAiC,CAAC;AACrE;AAAA,IACH;AACD,IAAAA,EAAK,MAAM,QAAQA,EAAK,MAAM,MAC9BA,EAAK,MAAM,OAAO,QAClBA,EAAK,MAAM,UAAU,IAAI,iBAAiB,GAC1CA,EAAK,SAASA,EAAK,OACfA,EAAK,OAAO,aACZA,EAAK,WAAWrF,GAAcqF,EAAK,MAAM,UAAUA,EAAK,OAAO,aAAa,GAC5EA,EAAK,SAASA,EAAK,UACnBA,EAAK,SAAS,cAAcA,EAAK,MAAM,aACvCA,EAAK,SAAS,WAAWA,EAAK,MAAM,UACpCA,EAAK,SAAS,WAAWA,EAAK,MAAM,UACpCA,EAAK,SAAS,WAAWA,EAAK,MAAM,UACpCA,EAAK,SAAS,OAAO,QACrBA,EAAK,MAAM,aAAa,QAAQ,QAAQ,GACpC,CAACA,EAAK,OAAO,UAAUA,EAAK,MAAM,cAClCA,EAAK,MAAM,WAAW,aAAaA,EAAK,UAAUA,EAAK,MAAM,WAAW,IAE3EA,EAAK,OAAO,cACbA,EAAK,OAAO,aAAa,YAAY,UAAU,GACnDsO;EACH;AACD,WAASA,KAAwB;AAC7B,IAAAtO,EAAK,mBAAmBA,EAAK,OAAO,mBAAmBA,EAAK;AAAA,EAC/D;AACD,WAAS4D,KAAc;AACnB,QAAIgL,IAAY5O,EAAK,OAAO,aACtBA,EAAK,OAAO,aACR,SACA,mBACJ;AACN,IAAAA,EAAK,cAAcrF,GAAc,SAASqF,EAAK,MAAM,YAAY,mBAAmB,GACpFA,EAAK,YAAY,WAAW,GAC5BA,EAAK,YAAY,OAAO4O,GACxB5O,EAAK,YAAY,WAAWA,EAAK,MAAM,UACvCA,EAAK,YAAY,WAAWA,EAAK,MAAM,UACvCA,EAAK,YAAY,cAAcA,EAAK,MAAM,aAC1CA,EAAK,kBACD4O,MAAc,mBACR,kBACAA,MAAc,SACV,UACA,SACV5O,EAAK,cAAc,SAAS,MAC5BA,EAAK,YAAY,eAAeA,EAAK,YAAY,QAAQA,EAAK,WAAWA,EAAK,cAAc,CAAC,GAAGA,EAAK,eAAe,IAEpHA,EAAK,OAAO,YACZA,EAAK,YAAY,MAAMA,EAAK,WAAWA,EAAK,OAAO,SAAS,OAAO,IACnEA,EAAK,OAAO,YACZA,EAAK,YAAY,MAAMA,EAAK,WAAWA,EAAK,OAAO,SAAS,OAAO,IACnEA,EAAK,MAAM,aAAa,MAAM,MAC9BA,EAAK,YAAY,OAAO,OAAOA,EAAK,MAAM,aAAa,MAAM,CAAC,IAClEA,EAAK,MAAM,OAAO,UACdA,EAAK,aAAa,WAClBA,EAAK,SAAS,OAAO;AACzB,QAAI;AACA,MAAIA,EAAK,MAAM,cACXA,EAAK,MAAM,WAAW,aAAaA,EAAK,aAAaA,EAAK,MAAM,WAAW;AAAA,IAClF,QACU;AAAA,IAAG;AACd,IAAAI,EAAKJ,EAAK,aAAa,UAAU,SAAUnY,GAAG;AAC1C,MAAAmY,EAAK,QAAQvE,GAAe5T,CAAC,EAAE,OAAO,IAAOmY,EAAK,eAAe,GACjEiC,GAAa,UAAU,GACvBA,GAAa,SAAS;AAAA,IAClC,CAAS;AAAA,EACJ;AACD,WAASZ,GAAOxZ,GAAG;AACf,QAAImY,EAAK,WAAW;AAChB,aAAOA,EAAK;AAChB,IAAAA,EAAK,KAAKnY,CAAC;AAAA,EACd;AACD,WAASoa,GAAatL,GAAOjI,GAAM;AAC/B,QAAIsR,EAAK,WAAW,QAEpB;AAAA,UAAI6O,IAAQ7O,EAAK,OAAOrJ,CAAK;AAC7B,UAAIkY,MAAU,UAAaA,EAAM,SAAS;AACtC,iBAAS/mB,IAAI,GAAG+mB,EAAM/mB,CAAC,KAAKA,IAAI+mB,EAAM,QAAQ/mB;AAC1C,UAAA+mB,EAAM/mB,CAAC,EAAEkY,EAAK,eAAeA,EAAK,MAAM,OAAOA,GAAMtR,CAAI;AAEjE,MAAIiI,MAAU,eACVqJ,EAAK,MAAM,cAAc8E,GAAY,QAAQ,CAAC,GAC9C9E,EAAK,MAAM,cAAc8E,GAAY,OAAO,CAAC;AAAA;AAAA,EAEpD;AACD,WAASA,GAAYxgB,GAAM;AACvB,QAAIuD,IAAI,SAAS,YAAY,OAAO;AACpC,WAAAA,EAAE,UAAUvD,GAAM,IAAM,EAAI,GACrBuD;AAAA,EACV;AACD,WAAS8d,GAAe1S,GAAM;AAC1B,aAASnL,IAAI,GAAGA,IAAIkY,EAAK,cAAc,QAAQlY,KAAK;AAChD,UAAIkmB,IAAehO,EAAK,cAAclY,CAAC;AACvC,UAAIkmB,aAAwB,QACxB3P,GAAa2P,GAAc/a,CAAI,MAAM;AACrC,eAAO,KAAKnL;AAAA,IACnB;AACD,WAAO;AAAA,EACV;AACD,WAAS8d,GAAc3S,GAAM;AACzB,WAAI+M,EAAK,OAAO,SAAS,WAAWA,EAAK,cAAc,SAAS,IACrD,KACH3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,CAAC,KAAK,KACjD3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,CAAC,KAAK;AAAA,EACpD;AACD,WAASqI,KAA+B;AACpC,IAAIrI,EAAK,OAAO,cAAcA,EAAK,YAAY,CAACA,EAAK,aAErDA,EAAK,aAAa,QAAQ,SAAUkI,GAAapgB,GAAG;AAChD,UAAIqD,IAAI,IAAI,KAAK6U,EAAK,aAAaA,EAAK,cAAc,CAAC;AACvD,MAAA7U,EAAE,SAAS6U,EAAK,eAAelY,CAAC,GAC5BkY,EAAK,OAAO,aAAa,KACzBA,EAAK,OAAO,sBAAsB,WAClCA,EAAK,cAAclY,CAAC,EAAE,cAClB6T,GAAWxQ,EAAE,SAAQ,GAAI6U,EAAK,OAAO,uBAAuBA,EAAK,IAAI,IAAI,MAG7EA,EAAK,wBAAwB,QAAQ7U,EAAE,SAAQ,EAAG,YAEtD+c,EAAY,QAAQ/c,EAAE,YAAa,EAAC,SAAQ;AAAA,IACxD,CAAS,GACD6U,EAAK,sBACDA,EAAK,OAAO,YAAY,WACnBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,IACjDA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,SAAU,IACnDA,EAAK,cAAcA,EAAK,OAAO,QAAQ,YAAW,IAChEA,EAAK,sBACDA,EAAK,OAAO,YAAY,WACnBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,IACjDA,EAAK,eAAe,IAAIA,EAAK,OAAO,QAAQ,SAAU,IACtDA,EAAK,cAAcA,EAAK,OAAO,QAAQ,YAAW;AAAA,EACnE;AACD,WAAS6J,GAAWiF,GAAgB;AAChC,QAAInR,IAASmR,MACR9O,EAAK,OAAO,WAAWA,EAAK,OAAO,YAAYA,EAAK,OAAO;AAChE,WAAOA,EAAK,cACP,IAAI,SAAU+O,GAAM;AAAE,aAAO/O,EAAK,WAAW+O,GAAMpR,CAAM;AAAA,KAAI,EAC7D,OAAO,SAAUxS,GAAGrD,GAAGsV,IAAK;AAC7B,aAAO4C,EAAK,OAAO,SAAS,WACxBA,EAAK,OAAO,cACZ5C,GAAI,QAAQjS,CAAC,MAAMrD;AAAA,IACnC,CAAS,EACI,KAAKkY,EAAK,OAAO,SAAS,UACzBA,EAAK,OAAO,cACZA,EAAK,KAAK,cAAc;AAAA,EACjC;AACD,WAASgB,GAAY0C,GAAe;AAChC,IAAIA,MAAkB,WAAUA,IAAgB,KAC5C1D,EAAK,gBAAgB,UAAaA,EAAK,oBACvCA,EAAK,YAAY,QACbA,EAAK,0BAA0B,SACzBA,EAAK,WAAWA,EAAK,uBAAuBA,EAAK,eAAe,IAChE,KAEdA,EAAK,MAAM,QAAQ6J,GAAW7J,EAAK,OAAO,UAAU,GAChDA,EAAK,aAAa,WAClBA,EAAK,SAAS,QAAQ6J,GAAW7J,EAAK,OAAO,SAAS,IAEtD0D,MAAkB,MAClBzB,GAAa,eAAe;AAAA,EACnC;AACD,WAASgC,GAAgBpc,GAAG;AACxB,QAAIyb,IAAc7H,GAAe5T,CAAC,GAC9BmnB,IAAchP,EAAK,aAAa,SAASsD,CAAW,GACpD2L,IAAcjP,EAAK,aAAa,SAASsD,CAAW;AACxD,IAAI0L,KAAeC,IACf1O,GAAYyO,IAAc,KAAK,CAAC,IAE3BhP,EAAK,aAAa,QAAQsD,CAAW,KAAK,IAC/CA,EAAY,OAAM,IAEbA,EAAY,UAAU,SAAS,SAAS,IAC7CtD,EAAK,WAAWA,EAAK,cAAc,CAAC,IAE/BsD,EAAY,UAAU,SAAS,WAAW,KAC/CtD,EAAK,WAAWA,EAAK,cAAc,CAAC;AAAA,EAE3C;AACD,WAASuC,GAAY1a,GAAG;AACpB,IAAAA,EAAE,eAAc;AAChB,QAAIqnB,IAAYrnB,EAAE,SAAS,WAAWyb,IAAc7H,GAAe5T,CAAC,GAAGgd,IAAQvB;AAC/E,IAAItD,EAAK,SAAS,UAAasD,MAAgBtD,EAAK,SAChDA,EAAK,KAAK,cACNA,EAAK,KAAK,KAAKhG,GAAIgG,EAAK,KAAK,gBAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC;AAEvE,QAAImP,KAAM,WAAWtK,EAAM,aAAa,KAAK,CAAC,GAAGuK,KAAM,WAAWvK,EAAM,aAAa,KAAK,CAAC,GAAGwK,KAAO,WAAWxK,EAAM,aAAa,MAAM,CAAC,GAAGyK,KAAW,SAASzK,EAAM,OAAO,EAAE,GAAGF,KAAQ9c,EAAE,UACxLqnB,IAAarnB,EAAE,UAAU,KAAK,IAAI,KAAM,IACzCxC,KAAWiqB,KAAWD,KAAO1K;AACjC,QAAI,OAAOE,EAAM,QAAU,OAAeA,EAAM,MAAM,WAAW,GAAG;AAChE,UAAI0K,KAAa1K,MAAU7E,EAAK,aAAawP,KAAe3K,MAAU7E,EAAK;AAC3E,MAAI3a,KAAW8pB,MACX9pB,KACI+pB,KACI/pB,KACA2U,GAAI,CAACuV,EAAU,KACdvV,GAAIuV,EAAU,KAAKvV,GAAI,CAACgG,EAAK,IAAI,IACtCwP,MACA9K,EAAkB,QAAW,IAAI1E,EAAK,WAAW,KAEhD3a,KAAW+pB,OAChB/pB,KACIwf,MAAU7E,EAAK,cAAc3a,KAAW+pB,KAAMpV,GAAI,CAACgG,EAAK,IAAI,IAAImP,IAChEK,MACA9K,EAAkB,QAAW,GAAG1E,EAAK,WAAW,IAEpDA,EAAK,QACLuP,OACCF,OAAS,IACJhqB,KAAWiqB,OAAa,KACxB,KAAK,IAAIjqB,KAAWiqB,EAAQ,IAAID,QACtCrP,EAAK,KAAK,cACNA,EAAK,KAAK,KAAKhG,GAAIgG,EAAK,KAAK,gBAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAEvE6E,EAAM,QAAQhL,GAAIxU,EAAQ;AAAA,IAC7B;AAAA,EACJ;AACD,SAAAmc,KACOxB;AACX;AACA,SAASyP,GAAWC,GAAUje,GAAQ;AAKlC,WAJIke,IAAQ,MAAM,UAAU,MACvB,KAAKD,CAAQ,EACb,OAAO,SAAUptB,GAAG;AAAE,WAAOA,aAAa;AAAA,EAAY,CAAE,GACzDstB,IAAY,CAAA,GACP9nB,IAAI,GAAGA,IAAI6nB,EAAM,QAAQ7nB,KAAK;AACnC,QAAIiT,IAAO4U,EAAM7nB,CAAC;AAClB,QAAI;AACA,UAAIiT,EAAK,aAAa,cAAc,MAAM;AACtC;AACJ,MAAIA,EAAK,eAAe,WACpBA,EAAK,WAAW,WAChBA,EAAK,aAAa,SAEtBA,EAAK,aAAa8E,GAAkB9E,GAAMtJ,KAAU,CAAE,CAAA,GACtDme,EAAU,KAAK7U,EAAK,UAAU;AAAA,IACjC,SACMlT,GAAG;AACN,cAAQ,MAAMA,CAAC;AAAA,IAClB;AAAA,EACJ;AACD,SAAO+nB,EAAU,WAAW,IAAIA,EAAU,CAAC,IAAIA;AACnD;AACI,OAAO,cAAgB,OACvB,OAAO,iBAAmB,OAC1B,OAAO,WAAa,QACpB,eAAe,UAAU,YAAY,SAAS,UAAU,YAAY,SAAUne,GAAQ;AAClF,SAAOge,GAAW,MAAMhe,CAAM;AACtC,GACI,YAAY,UAAU,YAAY,SAAUA,GAAQ;AAChD,SAAOge,GAAW,CAAC,IAAI,GAAGhe,CAAM;AACxC;AAEA,IAAIyO,KAAY,SAAU2P,GAAUpe,GAAQ;AACxC,SAAI,OAAOoe,KAAa,WACbJ,GAAW,OAAO,SAAS,iBAAiBI,CAAQ,GAAGpe,CAAM,IAE/Doe,aAAoB,OAClBJ,GAAW,CAACI,CAAQ,GAAGpe,CAAM,IAG7Bge,GAAWI,GAAUpe,CAAM;AAE1C;AACAyO,GAAU,gBAAgB,CAAA;AAC1BA,GAAU,QAAQ;AAAA,EACd,IAAIV,GAAS,CAAE,GAAEW,EAAO;AAAA,EACxB,SAASX,GAAS,CAAE,GAAEW,EAAO;AACjC;AACAD,GAAU,WAAW,SAAUlD,GAAM;AACjC,EAAAkD,GAAU,MAAM,UAAUV,GAASA,GAAS,IAAIU,GAAU,MAAM,OAAO,GAAGlD,CAAI;AAClF;AACAkD,GAAU,cAAc,SAAUzO,GAAQ;AACtC,EAAAyO,GAAU,gBAAgBV,GAASA,GAAS,CAAE,GAAEU,GAAU,aAAa,GAAGzO,CAAM;AACpF;AACAyO,GAAU,YAAY7C,GAAiB,CAAA,CAAE;AACzC6C,GAAU,aAAanD,GAAoB,CAAA,CAAE;AAC7CmD,GAAU,eAAe7B;AACrB,OAAO,SAAW,OAAe,OAAO,OAAO,KAAO,QACtD,OAAO,GAAG,YAAY,SAAU5M,GAAQ;AACpC,SAAOge,GAAW,MAAMhe,CAAM;AACtC;AAEA,KAAK,UAAU,UAAU,SAAUoB,GAAM;AACrC,SAAO,IAAI,KAAK,KAAK,YAAa,GAAE,KAAK,SAAU,GAAE,KAAK,QAAS,KAAI,OAAOA,KAAS,WAAW,SAASA,GAAM,EAAE,IAAIA,EAAK;AAChI;AACI,OAAO,SAAW,QAClB,OAAO,YAAYqN;AC3/DvB,MAAM4P,KAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAEMC,KAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AChBA,SAASC,GAAaC,GAAQ;AAC1B,SAAOA,EAAO,QAAQ,mBAAmB,OAAO,EAAE,YAAW;AACjE;AACA,SAAS1V,GAASzC,GAAK;AACnB,SAAOA,aAAe,QAChBA,IACA,CAACA,CAAG;AACd;AACA,SAASoY,GAAQtuB,GAAO;AACpB,SAAQA,KAASA,EAAM,SACjBA,IACA;AACV;ACPA,MAAMuuB,KAAY,CAAC,GAAGL,IAAgB,GAAGC,EAAc,GAEjDK,KAAkB,CAAC,UAAU,YAAY,GAC/CC,KAAeC,EAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,cAAc;AAAA,IACV,MAAM;AAAA,EACT;AAAA,EACD,SAAS;AACL,WAAO/lB,GAAE,SAAS;AAAA,MACd,MAAM;AAAA,MACN,cAAc;AAAA,MACd,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,IAC1B,CAAS;AAAA,EACJ;AAAA,EACD,OAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,GAAG4lB,GAAU,IAAIH,EAAY;AAAA,EAChC;AAAA,EACD,OAAO;AAAA,IACH,YAAY;AAAA,MACR,MAAM,CAAC,QAAQ,QAAQ,MAAM,OAAO,IAAI;AAAA,MACxC,UAAU;AAAA,IACb;AAAA;AAAA,IAED,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,QACZ,aAAa;AAAA,QACb,MAAM;AAAA,MACtB;AAAA,IACS;AAAA,IACD,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,MAAMF;AAAA,IAClB;AAAA,IACD,UAAU;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACZ;AAAA,EACJ;AAAA,EACD,OAAO;AACH,WAAO;AAAA,MACH,IAAI;AAAA;AAAA,IAChB;AAAA,EACK;AAAA,EACD,UAAU;AAGN,IAAI,KAAK,OAGT,KAAK,KAAK5P,GAAU,KAAK,QAAO,GAAI,KAAK,cAAa,CAAE,GAExD,KAAK,QAAO,EAAG,iBAAiB,QAAQ,KAAK,MAAM,GAGnD,KAAK,OAAO,YAAY,KAAK,eAAe;AAAA,MACxC,WAAW;AAAA,IACvB,CAAS;AAAA,EACJ;AAAA,EACD,SAAS;AAAA,IACL,gBAAgB;AAEZ,UAAIqQ,IAAa,OAAO,OAAO,CAAA,GAAI,KAAK,MAAM;AAC9C,WAAK,OAAO,QAAQ,CAACzE,MAAS;AAE1B,YAAI0E,IAAkBtQ,GAAU,cAAc4L,CAAI,KAAK,CAAA,GAEnD2E,IAAgB,IAAInW,MAAS;AAC7B,eAAK,MAAM0V,GAAalE,CAAI,GAAG,GAAGxR,CAAI;AAAA,QAC1D;AAEgB,QAAAiW,EAAWzE,CAAI,IAAIvR,GAASgW,EAAWzE,CAAI,KAAK,CAAA,CAAE,EAAE,OAAO0E,GAAiBC,CAAa;AAAA,MACzG,CAAa;AACD,YAAMC,IAAY,KAAK,QAAQ,KAAK,IAAI;AACxC,aAAAH,EAAW,UAAahW,GAASgW,EAAW,WAAc,EAAE,EAAE,OAAOG,CAAS,GAE9EH,EAAW,cAAc,KAAK,cAAcA,EAAW,aAChDA;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,UAAU;AACN,aAAO,KAAK,OAAO,OAAO,KAAK,IAAI,aAAa,KAAK;AAAA,IACxD;AAAA;AAAA;AAAA;AAAA,IAID,QAAQ5Z,GAAO;AACX,YAAMkO,IAAQlO,EAAM;AAEpB,MAAAga,GAAQ,EAAG,KAAK,MAAM;AAClB,aAAK,MAAM,qBAAqBT,GAAQrL,EAAM,KAAK,CAAC;AAAA,MACpE,CAAa;AAAA,IACJ;AAAA,IACD,UAAU;AACN,aAAO,KAAK,GAAG,YAAY,KAAK,GAAG;AAAA,IACtC;AAAA;AAAA;AAAA;AAAA,IAID,OAAOlO,GAAO;AACV,WAAK,MAAM,QAAQuZ,GAAQvZ,EAAM,OAAO,KAAK,CAAC;AAAA,IACjD;AAAA;AAAA;AAAA;AAAA,IAID,QAAQia,GAAeC,GAAS;AAC5B,WAAK,MAAM,qBAAqBA,CAAO;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA,IAID,cAAcC,GAAU;AACpB,MAAIA,IACA,KAAK,QAAS,EAAC,aAAa,YAAY,EAAE,IAG1C,KAAK,QAAO,EAAG,gBAAgB,UAAU;AAAA,IAEhD;AAAA,EACJ;AAAA,EACD,OAAO;AAAA;AAAA;AAAA;AAAA,IAIH,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,QAAQC,GAAW;AACf,YAAI,CAAC,KAAK;AACN;AACJ,YAAIR,IAAa,OAAO,OAAO,CAAE,GAAEQ,CAAS;AAK5C,QAAAZ,GAAU,QAAQ,CAACrE,MAAS;AACxB,iBAAOyE,EAAWzE,CAAI;AAAA,QAC1C,CAAiB,GACD,KAAK,GAAG,IAAIyE,CAAU,GAEtBH,GAAgB,QAAQ,CAAC9rB,MAAS;AAC9B,UAAI,OAAOisB,EAAWjsB,CAAI,IAAM,OAC5B,KAAK,GAAG,IAAIA,GAAMisB,EAAWjsB,CAAI,CAAC;AAAA,QAE1D,CAAiB;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA,IAID,WAAWe,GAAU;AACjB,UAAIE;AAEJ,MAAI,CAAC,KAAK,OAAOF,MAAa6qB,GAAQ,KAAK,IAAI,KAAK,MAGnD3qB,IAAK,KAAK,QAAQ,QAAQA,MAAO,UAAkBA,EAAG,QAAQF,GAAU,EAAI;AAAA,IAChF;AAAA,EACJ;AAAA,EACD,gBAAgB;AAEZ,IAAK,KAAK,OAEV,KAAK,QAAO,EAAG,oBAAoB,QAAQ,KAAK,MAAM,GACtD,KAAK,GAAG,WACR,KAAK,KAAK;AAAA,EACb;AACL,CAAC;;;AClLD,GAAC,SAAU2rB,GAAQC,GAAS;AACqC,IAAAA,EAAQC,CAAO;AAAA,KAG9Erf,IAAO,SAAUqf,GAAS;AAE1B,QAAIC,IAAK,OAAO,SAAW,OAAe,OAAO,cAAc,SACzD,OAAO,YACP;AAAA,MACE,OAAO,CAAE;AAAA,IACnB,GACMC,IAAS;AAAA,MACT,UAAU;AAAA,QACN,WAAW,CAAC,OAAO,OAAO,MAAM,OAAO,OAAO,OAAO,KAAK;AAAA,QAC1D,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,QAAQ;AAAA,QACJ,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,QACD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,SAAS,WAAY;AACjB,eAAO;AAAA,MACV;AAAA,IACP;AACE,IAAAD,EAAG,MAAM,KAAKC;AACd,QAAIC,IAAKF,EAAG;AAEZ,IAAAD,EAAQ,SAASE,GACjBF,EAAQ,UAAUG,GAElB,OAAO,eAAeH,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,EAE9D;;;;ACrEA,GAAC,SAAUF,GAAQC,GAAS;AACqC,IAAAA,EAAQC,CAAO;AAAA,KAG9Erf,IAAO,SAAUqf,GAAS;AAE1B,QAAIC,IAAK,OAAO,SAAW,OAAe,OAAO,cAAc,SACzD,OAAO,YACP;AAAA,MACE,OAAO,CAAE;AAAA,IACnB,GACMG,IAAQ;AAAA,MACR,UAAU;AAAA,QACN,WAAW,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,QACpD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,QAAQ;AAAA,QACJ,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,QACD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,gBAAgB;AAAA,MAChB,SAAS,WAAY;AACjB,eAAO;AAAA,MACV;AAAA,MACD,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,eAAe;AAAA,MACf,WAAW;AAAA,IACjB;AACE,IAAAH,EAAG,MAAM,KAAKG;AACd,QAAIC,IAAKJ,EAAG;AAEZ,IAAAD,EAAQ,QAAQI,GAChBJ,EAAQ,UAAUK,GAElB,OAAO,eAAeL,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,EAE9D;;;;AC1EA,GAAC,SAAUF,GAAQC,GAAS;AACqC,IAAAA,EAAQC,CAAO;AAAA,KAG9Erf,IAAO,SAAUqf,GAAS;AAE1B,QAAIvX,IAAU;AAAA,MACV,UAAU;AAAA,QACN,WAAW,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,QAC3D,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,QAAQ;AAAA,QACJ,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,QACD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC5D,gBAAgB;AAAA,MAChB,SAAS,SAAUC,GAAK;AACpB,YAAI,IAAIA,IAAM;AACd,YAAI,IAAI,KAAK,IAAI;AACb,iBAAO;AACX,gBAAQ,IAAI,IAAE;AAAA,UACV,KAAK;AACD,mBAAO;AAAA,UACX,KAAK;AACD,mBAAO;AAAA,UACX,KAAK;AACD,mBAAO;AAAA,UACX;AACI,mBAAO;AAAA,QACd;AAAA,MACJ;AAAA,MACD,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,MAAM,CAAC,MAAM,IAAI;AAAA,MACjB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,WAAW;AAAA,IACjB;AAEE,IAAAsX,EAAQ,UAAUvX,GAClBuX,EAAQ,UAAUvX,GAElB,OAAO,eAAeuX,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,EAE9D;;;AChFA,MAAM,KAAE9vB,GAAE,IAAI0L,GAAK;AAEZ,SAAS0kB,KAAwB;AAGtC,SAFwBC,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBswB,IAAY;AAAA,IACjC,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACEO,MAAMC,KAAgB;AAAA,EAC3B;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AACF,GAEMC,KAAiBC,GAAqC,YAAY,SAAS;AAEjE,SAAAC,GAAuBC,GAA0CC,GAAqC;AACpH,EAAIJ,GAAe,UAAU,cAAWA,GAAe,QAAQI;AAGtD,WAAAC,EAAYC,GAAwBC,GAAe;AACtD,IAAA,CAACrlB,MAAQ,CAACA,GAAK,UAEdA,GAAA,OAAO,iBAAiBolB,GAAUC,CAAQ;AAAA,EACjD;AAEM,QAAAC,IAAc,CAACpjB,MACf,CAAClC,MAAQ,CAACA,GAAK,SAAe,KAC9BilB,EAAyB,SAAS/iB,CAAI,KAAKA,MAAS,QAEtD4iB,GAAe,QAAQ5iB,GAElBlC,GAAA,OAAO,OAAO,QAAQkC,GAEpBA,KAEF;AAiBF,SAAA;AAAA,IACL,aAAAijB;AAAA,IACA,oBAhByB,MAAM;AAC/B,UAAI,GAACnlB,MAAQ,CAACA,GAAK,UAAU8kB,GAAe,UAAU,YACtD;AAAA,YAAIG,EAAyB,SAASH,GAAe,KAAK,KAAKA,GAAe,UAAU,MAAM;AAGvF,UAAA9kB,GAAA,OAAO,OAAO,QAAQ8kB,GAAe;AAC1C;AAAA,QACF;AACAA,QAAAA,GAAe,QAAQI,GAGlBllB,GAAA,OAAO,OAAO,QAAQklB;AAAA;AAAA,IAAA;AAAA,IAM3B,qBAAqBK,GAAST,EAAc;AAAA,IAC5C,aAAAQ;AAAA,IACA,cAAcT;AAAA,EAAA;AAElB;AAEO,SAASW,KAAsB;AAC7B,SAAA;AAAA,IACL,qBAAqBD,GAAST,EAAc;AAAA,EAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;AC/DA,UAAM1wB,IAAQC,GAqCR4D,IAAOC,GAQPutB,IAAwBprB,EAAS,MAAS,GAC1CqrB,IAAkBrrB,EAAI,EAAK,GAE3BsrB,IAA2B,CAC/BtrB,MAEOA,MAAQ,QAAQ,OAAOA,EAAI,KAAO,KAGrCurB,IAAcvrB,EAAkB,IAAI,GACpCwrB,IAAexrB,EAAkB,IAAI,GACrCyrB,IAAWzrB,EAAI,EAAK,GACpB0rB,IAAiB1rB,EAAI,EAAE,GACvB2rB,IAAiB3rB,EAAmB,IAAI,GACxC4rB,IAAc5rB,EAAI,EAAK,GAEvB,EAAE,GAAA/F,MAAMC,MAER2xB,IAAY,CAACpxB,MACVA,EAAM,QAAQ,KAAK,MAAM,GAG5BqxB,IAA0B,CAACrxB,MAAe;AAC9C,MAAIA,MAAUV,EAAM,eACpB6D,EAAK,qBAAqBnD,CAAK,GAC/BmD,EAAK,QAAQ;AAAA,IAAA,GAGTmuB,IAAoB,CAACtxB,MAAe;AACxC,UAAIA,MAAU,QAAQD,EAAYC,CAAK,GAAG;AACxC,QAAAqxB,EAAwB,IAAI;AAC5B;AAAA,MACF;AACI,UAAArxB,KAASA,EAAM,MAAM;AACvB,QAAAqxB,EAAwBD,EAAUpxB,EAAM,OAAO,EAAE,CAAC;AAClD;AAAA,MACF;AACwB,MAAAqxB,EAAAD,EAAUpxB,IAAQ,EAAE,CAAC;AAAA,IAAA,GAGzCuxB,IAAkB,MAAM;AACZ,MAAAC,KAChBR,EAAS,QAAQ,IACjB7tB,EAAK,QAAQ;AAAA,IAAA,GAGTsuB,IAAmB,MAAM;AAC7B,MAAAT,EAAS,QAAQ,IACjB7tB,EAAK,SAAS;AAAA,IAAA,GAGVuuB,IAAoB,MAAM;AAC1B,MAACb,EAAyBC,EAAY,KAAK,MAC/CG,EAAe,QAAQH,EAAY,MAAM,QAAA,EAAU;AAAA,IAAA,GAG/CU,IAAkB,MAAM;;AACxB,UAAA,CAACX,EAAyBC,EAAY,KAAK;AAAG;AAClD,YAAMa,IAAWV,EAAe,MAAM,QAAQ,cAAc,EAAE,GACxD5f,IAAOyf,EAAY,MAAM,GAAG,UAAUa,GAAUC,EAAU,KAAK;AACjE,UAAA7xB,EAAYsR,CAAI,GAAG;AACjB,QAAAnR,GAAOZ,EAAM,YAAY,KACfqE,KAAAmtB,EAAA,UAAA,QAAAntB,GAAO,GAAG,MAAM,OAE5BE,KAAAitB,EAAY,UAAZ,QAAAjtB,GAAmB,GAAG,QAAQvE,EAAM,cAAc,KAEjDuyB,EAAA,MAAM,eAAe,UACxB1uB,EAAK,MAAM;AACX;AAAA,MACF;AACA,OAAAqJ,KAAAskB,EAAY,UAAZ,QAAAtkB,GAAmB,GAAG,QAAQ6E,GAAM,KACjCwgB,EAAA,MAAM,eAAe,UACxB1uB,EAAK,MAAM;AAAA,IAAA,GAGP2uB,IAAU,MAAM;AACpB,MAAAZ,EAAe,QAAQ5xB,EAAM,cAC7B6D,EAAK,qBAAqB/B,EAAM9B,EAAM,YAAY,CAAC;AAAA,IAAA,GAG/CsyB,IAAYjyB,EAAS,MAClBL,EAAM,SAAS,aAAa,cAAc,OAClD,GAEK+T,IAAsB1T,EAAS,MAC5BL,EAAM,SAAS,aAAa,qBAAqB,YACzD,GAEKyyB,IAAiBpyB,EAAS,MAC1BL,EAAM,UAAUA,EAAM,OAAO,SAAS,IACjCA,EAAM,SAER;AAAA,MACL;AAAA,QACE,MAAM,IAAI,KAAK,MAAM,CAAC;AAAA,QACtB,IAAI,IAAI,KAAK,MAAM,EAAE;AAAA,MACvB;AAAA,IAAA,CAEH,GAEK0yB,KAAuBryB,EAAS,MAC7BO,GAAOZ,EAAM,YAAY,IAAI,SAAYA,EAAM,YACvD,GAEK2yB,KAAkBtyB,EAAS,MAC3BL,EAAM,gBAAgBS,EAAY4wB,EAAsB,KAAK,IACxD,KAEF;AAAA,MACLA,EAAsB,MAAM;AAAA,QAC1B,QAAQ;AAAA,UACN;AAAA,YACE,OAAOnxB,EAAE,mBAAmB;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,SAAS,CAACmC,GAAe4tB,MAA2B;AAClD,gBAAM1d,KAAMpB;AACT,UAAA8e,EAAA,QAAQ1d,IAAK,EAAI,GACFyf,EAAAhgB,GAAUO,EAAG,CAAC;AAAA,QAClC;AAAA,MAAA,CACD;AAAA,IAAA,CAEJ,GAGKqgB,IAAY;AAAA,MAChB,IAAI1C,GAAA;AAAA,MACJ,IAAIjR,GAAA;AAAA,MACJ,IAAImR,GAAA;AAAA,IAAA,GAGA,EAAE,qBAAAyC,MAAwBzB,MAE1B0B,IAAkBzyB,EAAS,MAAM;;AACrC,YAAM0pB,KAAkB1lB,IAAAotB,EAAa,UAAb,gBAAAptB,EAAoB,IAAI,cAAc;AACvD,aAAA;AAAA,QACL,YAAYrE,EAAM,SAAS;AAAA,QAC3B,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAWsyB,EAAU;AAAA,QACrB,aAAaI,GAAqB;AAAA,QAClC,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,QACf,iBAAiB3I,KAAmB;AAAA;AAAA,QAEpC,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,UAAU;AAAA;AAAA,QAEV,QAAQ,EAAE,GAAG6I,EAAUC,EAAoB,KAAK,EAAE;AAAA,QAClD,QAAQJ,EAAe;AAAA,QACvB,aAAazyB,EAAM;AAAA;AAAA,QAEnB,SAASA,EAAM,UAAS,oBAAI,QAAO,QAAQ,EAAE,IAAI;AAAA,QACjD,SAAS2yB,GAAgB;AAAA,MAAA;AAAA,IAC3B,CACD,GAEKI,IAAkB,MAAM;AAC5B,iBAAW,MAAM;AACX,YAACxB,EAAyBC,EAAY,KAAK,GAC/C;AAAA,cAAIE,EAAS,OAAO;AACN,YAAAF,EAAA,MAAM,GAAG;AACrB;AAAA,UACF;AACgB,UAAAU,KACJV,EAAA,MAAM,GAAG,QACTA,EAAA,MAAM,QAAQ,EAAE,MAAM;AAAA;AAAA,SACjC,CAAC;AAAA,IAAA,GAGAhB,IAAaF,MAEb0C,IAAQ3yB,EAAS,OACd;AAAA,MACL,gBAAgB;AAAA,QACd,UAAUmwB,EAAWxwB,EAAM,QAAQ;AAAA,MACrC;AAAA,IAAA,EAEH,GAEKuyB,IAAKU,GAAaD,GAAO,EAAE,gBAAArB,EAAgB,CAAA,GAE3CrtB,IAAuBjE,EAAS,MAC/BI,EAAYT,EAAM,aAAa,IAChCuyB,EAAG,MAAM,eAAe,QAAQ,SAC3B,CAACA,EAAG,MAAM,eAAe,QAAQ,IAAI,CAAC/tB,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IACtF,KAHuCxE,EAAM,aAIrD;AAED,WAAAsF;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,GAAUoB,MAAa;AACtB,YAAIpB,MAAaoB,GACZ;AAAA,eAAA3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,MAAM,CAACvD,GAAOZ,EAAM,YAAY,GAAG;AAC9E,YAAA4xB,EAAe,QAAQ5xB,EAAM;AAC7B;AAAA,UACF;AACA,UAAA4xB,EAAe,QAAQnxB,EAAY0D,CAAQ,IAAI,OAAOA;AAAA;AAAA,MACxD;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBmB;AAAA,MACEksB;AAAA,MACA,CAACrtB,GAAUoB,MAAa;AACtB,QAAIssB,EAAY,UAAU,MACtB1tB,MAAaoB,MACb3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,MAC1BiuB,KAClBP,EAAY,QAAQ;AAAA,MACtB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBrhB,GAAU,MAAM;AAEd,aAAO,0CAA4B,EAAA,KAAA,CAAAzJ,MAAAA,EAAA,CAAA,EAAE,KAAK,CAAC2J,MAAW;AACpD,QAAA2gB,EAAsB,QAAQ3gB,EAAO,SACrC4gB,EAAgB,QAAQ;AAAA,MAAA,CACzB;AAAA,IAAA,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzRD,UAAMtxB,IAAQC,GAmBR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEqB,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAA2C;AAC7C,QAAAN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKC,IAAS,MAAM;;AACnB,MAAAP,EAAK,QAAQpD,EAAYT,EAAM,UAAU,IAAI,OAAOA,EAAM,UAAU,IACpEqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR;;;;;;;;;;;;;;;;;;;;;;;;;AC5DD,UAAMA,IAAQC,GAmBR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElE0vB,IAAgBjtB,EAAI,EAAK,GAEzBpB,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAA2C;AAC7C,QAAAN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKC,IAAS,MAAM;;AACnB,MAAAP,EAAK,QAAQpD,EAAYT,EAAM,UAAU,IAAI,OAAOA,EAAM,UAAU,IACpEqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD;AAED,IAAAY;AAAA,MACET;AAAA,MACA,CAACV,GAAUoB,MAAa;AACtB,YAAIpB,MAAaoB,GACjB;AAAA,cAAI3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,GAAG;AAC7C,YAAA+uB,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,UAAAA,EAAc,QAAQ;AAAA;AAAA,MACxB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;AAGd,UAAAC,IAAkB,CAACzyB,MAAmB;AAC1C,UAAIA,GAAO;AACT,QAAAmE,EAAmB,QAAQ;AAC3B;AAAA,MACF;AACI,UAAA7E,EAAM,2BAA2B,OAAO;AAC1C,QAAA6E,EAAmB,QAAQ0M;AAC3B;AAAA,MACF;AACI,UAAAvQ,GAAWhB,EAAM,sBAAsB,GAAG;AACzB,QAAA6E,EAAA,QAAQ7E,EAAM;AACjC;AAAA,MACF;AACA,MAAA6E,EAAmB,QAAQ7E,EAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FnC,UAAMA,IAAQC,GASR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAER2T,IAAQzT,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D;;;;;;;;;;;AC7Be,SAAAozB,GAAcC,IAAwB,MAAM;AAC1D,SAAOC,GAAqB;AAAA,IAC1B,QAAAD;AAAA,IACA,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,YAAY;AAAA,EAAA,CACb;AACH;AAEO,SAASE,GAAsB3f,GAAwB;AAMrD,SAAA;AAAA,IACL,gBANqBvT,EAAS,MAC1B,EAAAuT,EAAW,SAAS,KAAKA,EAAW,mBAAmBA,EAAW,YAEvE;AAAA,EAGC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA,UAAM5T,IAAQC,GAkCR4D,IAAOC,GAOP0vB,IAAanzB,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAA4D;AACzD,QAAAN,EAAA,qBAAqBpC,GAA4D0C,CAAQ,CAAC;AAAA,MACjG;AAAA,IAAA,CACD,GAEKsvB,IAASxtB,EAAI,EAAE,GACfytB,IAAYztB,EAAI,EAAK,GACrB0tB,IAAiE1tB,EAAI,MAAS,GAE9E,EAAE,GAAA/F,MAAMC,MAER,EAAE,aAAAyzB,EAAA,IAAgBtf,GAAOtU,CAAK,GAE9B+D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEY,IAAS,MAAM;;AACnB,MAAAsvB,EAAU,QAAQ,IACb7vB,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAevE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,IACtF,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,MACxBqE,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,eAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,aADtBvE,EAAM;AAAA,IACgB,CAChE,GAEK6zB,IAAiCxzB,EAAS,MAC1CL,EAAM,aAAa,EAExB,GAGK4T,IAAawf,GAAcpzB,EAAM,YAAY,GAC7C8zB,IAAe7tB,EAA0C,CAAA,CAAE,GAC3D8tB,IAAqB9tB,EAA0C,CAAA,CAAE,GAEjE+tB,IAAW3zB,EAAiD,MAAM;AAChE,YAAA4zB,wBAAY;AACC,aAAAF,EAAA,MAAM,QAAQ,CAACrzB,MAAU;AACpC,QAAAuzB,EAAA,IAAIvzB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACYozB,EAAA,MAAM,QAAQ,CAACpzB,MAAU;AAC9B,QAAAuzB,EAAA,IAAIvzB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACM,MAAM,KAAKuzB,GAAO,CAAC,CAAClxB,GAAKrC,CAAK,OAC5B,EAAE,OAAOqC,GAAK,OAAOrC,EAAM,MAAM,EACzC;AAAA,IAAA,CACF,GAEKwzB,IAAejuB,EAAI,EAAK,GACxBzF,IAAkBH,EAAS,MAC3B6zB,EAAa,QAAc,KACxBl0B,EAAM,OACd,GAEKm0B,IAAY,OAAOC,MAAkB;AACzC,MAAAF,EAAa,QAAQ;AACrB,YAAMG,IAAcT,EAAY,MAAM5zB,EAAM,aAAa;AACzD,MAAAq0B,EAAY,QAAQD,GACpBN,EAAa,QAAQ,MAAM9zB,EAAM,WAAW4T,GAAYggB,EAAY,KAAK,GACzEM,EAAa,QAAQ;AAAA,IAAA,GAGjBI,IAAwB,CAAC5mB,MAAqC;AAC5D,YAAArH,IAAQ2tB,EAAS,MAAM,OAAO,CAACxvB,MAA6CkJ,EAAO,SAASlJ,EAAK,KAAK,CAAC;AACrG,aAAA,CAA4C,EAAA,OAAO6B,CAAK;AAAA,IAAA,GAG5DkuB,KAAyB,OAAO7zB,MAAiD;AACrF,UAAI8zB,IAAQ,GACRC,IAAa,CAAA;AACb,aAAA1zB,GAAQL,CAAK,KACf8zB,IAAQ9zB,EAAM,QACd+zB,IAAaH,EAAsB5zB,CAAK,KAE3B+zB,IAAAH,EAAsB,CAAC5zB,CAAK,CAAC,GAE5CqzB,EAAmB,QAAQU,GACpBA,EAAW,WAAWD;AAAA,IAAA,GAGzBE,KAAczuB,EAAI,EAAK,GACvB0uB,IAAsB,MAAM;AAChC,mBAAahB,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IAAA,GAEnBiB,IAAY,YAAY;AAE5B,MADoBD,KAChBD,GAAY,UAAU,OAC1BA,GAAY,QAAQ,IAMpBR,EAAa,QAAQ,IACrBJ,EAAa,QAAQ,MAAM9zB,EAAM,WAAW4T,GAAYggB,EAAY,KAAK,GACzEM,EAAa,QAAQ;AAAA,IAAA,GAGjBW,IAAU,MAAM;AACpB,MAAAnB,EAAU,QAAQ,IACEiB,KACVC;IAAA,GAGNE,IAA0Bz0B,EAAS,MAAM;AAC7C,UAAI,CAACL,EAAM,YAAY+zB,EAAmB,MAAM,CAAC;AACxC,eAAAA,EAAmB,MAAM,CAAC,EAAE;AAAA,IAE9B,CACR,GAEKgB,IAAiB,CAACX,MAAkB;AACxC,MAAI,CAACp0B,EAAM,YAAY,CAAC0zB,EAAU,SAASU,EAAM,WAAW,KACxDU,EAAwB,UAAUV,MACtCX,EAAO,QAAQW;AAAA,IAAA,GAGXY,IAAe,YAAY;AAE/B,UADAlB,EAAa,QAAQ,MAAM9zB,EAAM,WAAW4T,GAAYggB,EAAY,KAAK,GACrE5zB,EAAM,UAAU;AAClB,QAAAwzB,EAAW,QAAQ;AACnB;AAAA,MACF;AACA,MAAAA,EAAW,QAAQ;AAAA,IAAA;AAGrB,WAAAluB;AAAA,MACEkuB;AAAA,MACA,OAAOrvB,GAAUoB,MAAa;AAC5B,YAAIpB,MAAaoB;AAAU;AACvB,YAAA3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,KAAMpD,GAAQoD,CAAQ,KAAKA,EAAS,WAAW,GAAI;AAEzF,cADJ4vB,EAAmB,QAAQ,IACvB/zB,EAAM,oBAAoB00B,GAAY,UAAU;AAAM;AAC3C,UAAAf,EAAA,QAAQ,WAAW,MAAM;AAC5B,YAAAiB;aACT,GAAI;AACP;AAAA,QACF;AAEI,YADU,OAAML,GAAuBpwB,CAAQ,GAE/C;AAAA,cAAApD,GAA2BoD,CAAQ,GAAG;AACxC,YAAA+vB,EAAa,QAAQ,IACrBH,EAAmB,QAAQ,MAAM/zB,EAAM,gBAAgBmE,CAAoC,GAC3F+vB,EAAa,QAAQ;AACrB;AAAA,UACF;AACA,UAAAA,EAAa,QAAQ,IACrBH,EAAmB,QAAQ,MAAM/zB,EAAM,gBAAgB,CAACmE,CAA6B,CAAC,GACtF+vB,EAAa,QAAQ;AAAA;AAAA,MACvB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBe;AAAA,MACExB;AAAA,MACA,CAACtvB,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,MACf4uB,EAAUhwB,CAAQ,GAClBN,EAAK,yBAAyBM,CAAQ;AAAA,MAE1C;AAAA,MACA,EAAE,UAAU,KAAK,SAAS,IAAK;AAAA,IAAA,GAG3BmB,GAAAmuB,GAAQ,CAACtvB,GAAUoB,MAAa;AACpC,MAAIpB,MAAaoB,KACf1B,EAAK,gBAAgBM,CAAQ;AAAA,IAC/B,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjPD,UAAMnE,IAAQC,GAiBR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEiB,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKwwB,IAAUjvB,EAAI,EAAK,GACnBkvB,IAAWlvB,EAAI,EAAK,GACpBmvB,IAAWnvB,EAAI,EAAE,GAEjBpB,IAAqBxE,EAAS,MAC3BL,EAAM,UACd,GAGKq1B,IAAqBpvB,EAAIjG,EAAM,UAAU,GAEzC0V,IAAU,YAAY;AAC1B,UAAIwf,EAAQ;AAAO;AAGf,UAFJA,EAAQ,QAAQ,IAChBC,EAAS,QAAQ,IACbE,EAAmB,UAAU,IAAM;AAC/BC,cAAAA,IAAU,MAAMt1B,EAAM;AACvB,QAAA6D,EAAA,qBAAqB,CAACyxB,CAAO,GAClCD,EAAmB,QAAQ,CAACC,GACvBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAChB;AAAA,MACF;AACM,YAAAI,IAAU,MAAMt1B,EAAM;AAC5B,MAAA6D,EAAK,qBAAqByxB,CAAO,GACjCD,EAAmB,QAAQC,GACtBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAAA,IAAA;AAGZ,WAAA5vB,GAAAT,GAAoB,CAACV,GAAUoB,MAAa;AAChD,MAAIpB,MAAaoB,MACf8vB,EAAmB,QAAQlxB,GAC3BgxB,EAAS,QAAQ;AAAA,IACnB,CACD,GAED3kB,GAAU,MAAM;AACL,MAAA4kB,EAAA,QAAQ,mBAAmB,KAAK,IAAI;AAAA,IAAA,CAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxED,UAAMp1B,IAAQC,GAiBR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEiB,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKwwB,IAAUjvB,EAAI,EAAK,GACnBkvB,IAAWlvB,EAAI,EAAK,GACpBmvB,IAAWnvB,EAAI,EAAE,GAEjBpB,IAAqBxE,EAAS,MAC3BL,EAAM,UACd,GAGKq1B,IAAqBpvB,EAAIjG,EAAM,UAAU,GAEzC0V,IAAU,YAAY;AAC1B,UAAIwf,EAAQ;AAAO;AAGf,UAFJA,EAAQ,QAAQ,IAChBC,EAAS,QAAQ,IACbE,EAAmB,UAAU,IAAM;AAC/BC,cAAAA,IAAU,MAAMt1B,EAAM;AACvB,QAAA6D,EAAA,qBAAqB,CAACyxB,CAAO,GAClCD,EAAmB,QAAQ,CAACC,GACvBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAChB;AAAA,MACF;AACM,YAAAI,IAAU,MAAMt1B,EAAM;AAC5B,MAAA6D,EAAK,qBAAqByxB,CAAO,GACjCD,EAAmB,QAAQC,GACtBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAAA,IAAA;AAGZ,WAAA5vB,GAAAT,GAAoB,CAACV,GAAUoB,MAAa;AAChD,MAAIpB,MAAaoB,MACf8vB,EAAmB,QAAQlxB,GAC3BgxB,EAAS,QAAQ;AAAA,IACnB,CACD,GAED3kB,GAAU,MAAM;AACL,MAAA4kB,EAAA,QAAQ,qBAAqB,KAAK,IAAI;AAAA,IAAA,CAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvED,UAAMp1B,IAAQC,GA0BR4D,IAAOC,GAKP0vB,IAAanzB,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqBpC,GAAe0C,CAAQ,CAAC;AAAA,MACpD;AAAA,IAAA,CACD,GAEKJ,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElE,EAAE,GAAAtD,MAAMC,MAERiE,IAAS,MAAM;;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAevE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,IACtF,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR,GAEK6zB,IAAiCxzB,EAAS,MAC1CL,EAAM,aAAa,EAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzED,UAAMA,IAAQC,GAOR4D,IAAOC,GAIP,EAAE,UAAAwP,MAAaD,MAEf3S,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG,GACzEN,EAAK,QAAQ;AAAA,MACf;AAAA,IAAA,CACD,GAEK,EAAE,GAAA3D,MAAMC,MAER2T,IAAQzT,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEK6zB,IAAiCxzB,EAAS,MAC1CL,EAAM,WAAW,aAAa,EAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBD,UAAMA,IAAQC,GAkBR4D,IAAOC,GAIPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAA4D;AAC9D,QAAAN,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOyB,GAAU0C,CAAQ,EAAK,CAAA;AAAA,MACtF;AAAA,IAAA,CACD,GAEKsvB,IAASxtB,EAAI,EAAE,GACfytB,IAAYztB,EAAI,EAAK,GACrB0tB,IAAiE1tB,EAAI,MAAS,GAE9E,EAAE,GAAA/F,MAAMC,MAER,EAAE,aAAAyzB,EAAA,IAAgBtf,GAAOtU,CAAK,GAE9BoE,IAAS,MAAM;AACnB,MAAAsvB,EAAU,QAAQ;AAAA,IAAA,GAGd5f,IAAQzT,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEK6zB,IAAiCxzB,EAAS,MAC1CL,EAAM,WAAW,aAAa,EAEnC,GAGK4T,IAAawf,GAAcpzB,EAAM,YAAY,GAC7C8zB,IAAe7tB,EAA0C,CAAA,CAAE,GAC3D8tB,IAAqB9tB,EAA0C,CAAA,CAAE,GAEjE+tB,IAAW3zB,EAAiD,MAAM;AAChE,YAAA4zB,wBAAY;AACC,aAAAF,EAAA,MAAM,QAAQ,CAACrzB,MAAU;AACpC,QAAAuzB,EAAA,IAAIvzB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACYozB,EAAA,MAAM,QAAQ,CAACpzB,MAAU;AAC9B,QAAAuzB,EAAA,IAAIvzB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACM,MAAM,KAAKuzB,GAAO,CAAC,CAAClxB,GAAKrC,CAAK,OAC5B,EAAE,OAAOqC,GAAK,OAAOrC,EAAM,MAAM,EACzC;AAAA,IAAA,CACF,GAEKw0B,IAAUjvB,EAAI,EAAK,GAEnBkuB,IAAY,OAAOC,MAAkB;AACzC,MAAAc,EAAQ,QAAQ;AAChB,YAAMb,IAAcT,EAAY,MAAM5zB,EAAM,aAAa;AACzD,MAAAq0B,EAAY,QAAQD,GACpBN,EAAa,QAAQ,MAAM9zB,EAAM,WAAW4T,GAAYggB,EAAY,KAAK,GACzEsB,EAAQ,QAAQ;AAAA,IAAA,GAGZZ,IAAwB,CAAC5mB,MAAqC;AAC5D,YAAArH,IAAQ2tB,EAAS,MAAM,OAAO,CAACxvB,MAA6CkJ,EAAO,SAASlJ,EAAK,KAAK,CAAC;AACrG,aAAA,CAA4C,EAAA,OAAO6B,CAAK;AAAA,IAAA,GAG5DkuB,IAAyB,OAAO7zB,MAAiD;AACrF,UAAI8zB,IAAQ,GACRC,IAAa,CAAA;AACb,aAAA1zB,GAAQL,CAAK,KACf8zB,IAAQ9zB,EAAM,QACd+zB,IAAaH,EAAsB5zB,CAAK,KAE3B+zB,IAAAH,EAAsB,CAAC5zB,CAAK,CAAC,GAE5CqzB,EAAmB,QAAQU,GACpBA,EAAW,WAAWD;AAAA,IAAA,GAGzBE,IAAczuB,EAAI,EAAK,GACvB0uB,IAAsB,MAAM;AAChC,mBAAahB,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IAAA,GAEnBiB,IAAY,YAAY;AAE5B,MADoBD,KAChBD,EAAY,UAAU,OAC1BA,EAAY,QAAQ,IAMpBQ,EAAQ,QAAQ,IAChBpB,EAAa,QAAQ,MAAM9zB,EAAM,WAAW4T,GAAYggB,EAAY,KAAK,GACzEsB,EAAQ,QAAQ;AAAA,IAAA,GAGZL,IAAU,MAAM;AACpB,MAAAnB,EAAU,QAAQ,IACEiB,KACVC;IAAA,GAGNE,KAA0Bz0B,EAAS,MAAM;AAC7C,UAAI,CAACL,EAAM,WAAW,YAAY+zB,EAAmB,MAAM,CAAC;AACnD,eAAAA,EAAmB,MAAM,CAAC,EAAE;AAAA,IAE9B,CACR,GAEKgB,KAAiB,CAACX,MAAkB;AACpC,MAAA,CAACp0B,EAAM,WAAW,YAAY,CAAC0zB,EAAU,SAASU,EAAM,WAAW,KACnEU,GAAwB,UAAUV,MACtCX,EAAO,QAAQW;AAAA,IAAA,GAGXY,IAAe,YAAY;AAE3B,UADJlB,EAAa,QAAQ,MAAM9zB,EAAM,WAAW4T,GAAYggB,EAAY,KAAK,GACrE5zB,EAAM,WAAW,UAAU;AAC7B,QAAA6E,EAAmB,QAAQ;AAC3B;AAAA,MACF;AACA,MAAAA,EAAmB,QAAQ;AAAA,IAAA,GAGvBkP,IAAsB1T,EAAS,MAC9BI,EAAYT,EAAM,WAAW,IAC9BA,EAAM,WAAW,YAAY,eAAqBE,EAAE,2CAA2C,IAC/FF,EAAM,WAAW,YAAY,OAAaE,EAAE,mCAAmC,IAC/EF,EAAM,WAAW,YAAY,cAAcA,EAAM,WAAW,YAAY,WACnEE,EAAE,yCAAyC,IAC7C,KALqCF,EAAM,WAMnD;AAED,WAAAsF;AAAA,MACET;AAAA,MACA,OAAOV,GAAUoB,MAAa;AAC5B,YAAIpB,MAAaoB;AAAU;AACvB,YAAA3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,KAAMpD,GAAQoD,CAAQ,KAAKA,EAAS,WAAW,GAAI;AAEzF,cADJ4vB,EAAmB,QAAQ,IACvB/zB,EAAM,oBAAoB00B,EAAY,UAAU;AAAM;AAC3C,UAAAf,EAAA,QAAQ,WAAW,MAAM;AAC5B,YAAAiB;aACT,GAAI;AACP;AAAA,QACF;AAEI,YADU,OAAML,EAAuBpwB,CAAQ,GAE/C;AAAA,cAAApD,GAA2BoD,CAAQ,GAAG;AACxC,YAAA+wB,EAAQ,QAAQ,IAChBnB,EAAmB,QAAQ,MAAM/zB,EAAM,gBAAgBmE,CAAoC,GAC3F+wB,EAAQ,QAAQ;AAChB;AAAA,UACF;AACA,UAAAA,EAAQ,QAAQ,IAChBnB,EAAmB,QAAQ,MAAM/zB,EAAM,gBAAgB,CAACmE,CAA6B,CAAC,GACtF+wB,EAAQ,QAAQ;AAAA;AAAA,MAClB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBD;AAAA,MACExB;AAAA,MACA,CAACtvB,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,KACf4uB,EAAUhwB,CAAQ;AAAA,MAEtB;AAAA,MACA,EAAE,UAAU,KAAK,SAAS,IAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACrMjC,UAAMnE,IAAQC,GAWR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAER2T,IAAQzT,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BD,UAAMA,IAAQC,GASR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACA,eAAAI,EAAYT,EAAM,WAAW,KAAK,KAAKY,GAAOZ,EAAM,WAAW,KAAK,IAAU,KAC3EA,EAAM,WAAW,QAAQ,IAAI;AAAA,MACtC;AAAA,MACA,IAAImE,GAAU;AACZ,YAAIoxB,IAA8B;AAClC,QAAIpxB,MAAa,MAAiBoxB,IAAA,KAC9BpxB,MAAa,MAAiBoxB,IAAA,KAC7B1xB,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOu1B,EAAY,CAAG;AAAA,MAC9E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAr1B,MAAMC,MAER2T,IAAQzT,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEKyN,IAAQpN,EAAS,MACd;AAAA,MACL,EAAE,OAAO,IAAI,OAAOH,EAAE,0BAA0B,EAAE;AAAA,MAClD,EAAE,OAAO,GAAG,OAAOA,EAAE,2BAA2B,EAAE;AAAA,MAClD,EAAE,OAAO,GAAG,OAAOA,EAAE,4BAA4B,EAAE;AAAA,IAAA,CAEtD;;;;;;;;;;ACxCW,IAAAs1B,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,aAAa,cACbA,EAAA,uBAAuB,0BACvBA,EAAA,OAAO,QACPA,EAAA,QAAQ,SACRA,EAAA,UAAU,WANAA,IAAAA,MAAA,CAAA,CAAA;AASL,SAASC,KAAe;AACvB,QAAA,EAAE,MAAMt1B,MAERu1B,IAAmBzvB,EAAoC;AAAA,IAC3D;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,2BAA2B;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,8BAA8B;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,wCAAwC;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,wBAAwB;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,yBAAyB;AAAA,MAClC,OAAO;AAAA,IACT;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,kBAAAyvB;AAAA,IACA,oBANyB,CAACh1B,MACnBg1B,EAAiB,MAAM,KAAK,CAAClxB,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKjE;AAEJ;;;;;;;AChDA,UAAMV,IAAQC,GAIR,EAAE,oBAAA01B,MAAuBF,MACzBpI,IAAShtB,EAAS,MAAMs1B,EAAmB31B,EAAM,KAAK,CAAC;;;;;;;;;;;;;;;;;;ICNvD41B,KAAe;AAAA,EACnB,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,eAAe;AAAA,IACjB;AAAA,EACF;AACF,GAEaC,KAAgDlf,GAAiBif,EAAY;;;;;;;;;;;;;;;;;;ACP1F,UAAM51B,IAAQC,GA8BRiQ,IAASC,MACT2lB,IAASC,GAA4B,MAAS,GAC9CC,IAASD,GAAoB,EAAK,GAElCvxB,IAAOnE,EAAS,MACbL,EAAM,YAAYA,EAAM,EAAS,CACzC,GAEKi2B,IAAyB51B,EAAS,MAC/BL,EAAM,WAAWA,EAAM,iBAAiB,kBAAkBA,EAAM,cACxE,GAEKk2B,IAAe71B,EAAS,MACxBL,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC81B,EAAO,QACF/e,GAAqB+e,EAAO,OAAO91B,EAAM,eAAe,IAE1DA,EAAM,iBAAiBA,EAAM,KAAK,EAC1C,GAEK0V,IAAU,MAAM;AACb,MAAAxF,EAAA,KAAK,EAAE,MAAMlQ,EAAM,OAAO,QAAQ,EAAE,IAAIA,EAAM,GAAG,EAAG,CAAA;AAAA,IAAA;AAG7D,WAAAsF;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI6xB,EAAO,SACPv1B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD2xB,EAAO,QAAQ3xB,GACf6xB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnER,IAAAG,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,OAAO,QACPA,EAAA,SAAS,UACTA,EAAA,UAAU,WACVA,EAAA,QAAQ,SACRA,EAAA,WAAW,YACXA,EAAA,QAAQ,SACRA,EAAA,YAAY,aACZA,EAAA,UAAU,QATAA,IAAAA,MAAA,CAAA,CAAA;AAYL,SAASC,KAAc;AAC5B,QAAMC,IAAkBpwB,EAAmC;AAAA,IACzD;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,iBAAAowB;AAAA,IACA,mBANwB,CAAC31B,MAClB21B,EAAgB,MAAM,KAAK,CAAC7xB,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKhE;AAEJ;;;;;;;AC/DA,UAAMV,IAAQC,GAOR,EAAE,mBAAAq2B,MAAsBF,MACxBG,IAAcl2B,EAAS,MACpBi2B,EAAkBt2B,EAAM,KAAK,CACrC;;;;;;;;;;;;;ICdYw2B,KAAiB,CAAC91B,MACtB,KAAKA;;;;;;;;ACOd,UAAMV,IAAQC,GAYR,EAAE,MAAAw2B,GAAM,aAAAC,EAAY,IAAIC,GAAa,GACrC,EAAE,aAAAroB,MAAgBD,MAClB,EAAE,GAAAnO,MAAMC,MAERuV,IAAU,CAACD,MAAiB;AAEhC,MADAD,GAAeC,CAAK,GACfihB,MACD71B,GAASb,EAAM,KAAK,IACtBy2B,EAAKD,GAAex2B,EAAM,KAAK,CAAC,EAAE,KAAK,MAAM;AAC/B,QAAAsO,EAAApO,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B,IACQc,GAASd,EAAM,KAAK,KAAKA,EAAM,MAAM,UAC9Cy2B,EAAKz2B,EAAM,KAAK,EAAE,KAAK,MAAM;AACf,QAAAsO,EAAApO,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BF,UAAMA,IAAQC,GAaR22B,IAAmBv2B,EAAS,MACzBI,EAAYT,EAAM,KAAK,IAAI,iCAAiC,EACpE;;;;;;;;;;;;;;;;;;;;;;;;ACKK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBd,UAAMH,IAAQC,GAmBR,EAAE,GAAAC,MAAMC,MAER02B,IAAmBx2B,EAAS,MAAM;AAClC,UAAAI,CAAAA,EAAYT,EAAM,SAAS;AAG/B,eAAKS,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,cAFZ,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA;IAEtB,CAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BD,UAAMA,IAAQC,GAkBR,EAAE,GAAAC,MAAMC,MAER22B,IAAkBz2B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BD,UAAMA,IAAQC,GAmCR4D,IAAOC,GAIPizB,IAAS9wB,EAAI,EAAK,GAElByP,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpBshB,EAAO,QAAQ;AAAA,IAAA,GAEX1mB,IAAY,MAAM;AACtB,MAAAxM,EAAK,cAAc,GACd7D,EAAM,4BAAsCg3B;IAAA,GAG7CA,IAAc,MAAM;AACxB,MAAAD,EAAO,QAAQ;AAAA,IAAA,GAGXvwB,IAAW,MAAM;AACT,MAAAwwB;IAAA,GAGR,EAAE,GAAA92B,MAAMC;AAED,IAAA82B,EAAA;AAAA,MACX,aAAAD;AAAA,IAAA,CACD;AAEK,UAAAF,IAAkBz2B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzED,UAAMA,IAAQC,GAuBR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAER+P,IAASC,MAETuF,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB5R,EAAK,YAAY,GACVqM,EAAA,KAAK2mB,EAAiB,KAAK;AAAA,IAAA,GAG9BA,IAAmBx2B,EAAS,MAC3BI,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,SAAA,MAF3C,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA,GAGtD,GAEK82B,IAAkBz2B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCD,UAAM6D,IAAOC,GAIP4R,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB5R,EAAK,oBAAoB;AAAA,IAAA,GAGrB,EAAE,GAAA3D,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBd,UAAMH,IAAQC,GAoBR4D,IAAOC,GAIP4R,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB5R,EAAK,YAAY;AAAA,IAAA,GAGb,EAAE,GAAA3D,MAAMC,MAER22B,IAAkBz2B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCD,UAAMA,IAAQC,GAoBR,EAAE,GAAAC,MAAMC,MACR,EAAE,MAAAs2B,GAAM,aAAAC,EAAY,IAAIC,GAAa,GACrC,EAAE,aAAAroB,MAAgBD,MAElBqH,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GAChB5U,GAASb,EAAM,EAAE,KAAKA,EAAM,KAAK,IACnCy2B,EAAKD,GAAex2B,EAAM,EAAE,CAAC,EAAE,KAAK,MAAM;AAC5B,QAAAsO,EAAApO,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B,IACQc,GAASd,EAAM,EAAE,KAAKA,EAAM,GAAG,UACxCy2B,EAAKz2B,EAAM,EAAE,EAAE,KAAK,MAAM;AACZ,QAAAsO,EAAApO,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCF,UAAMA,IAAQC,GAkBR,EAAE,GAAAC,MAAMC,MAER02B,IAAmBx2B,EAAS,MAC3BI,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,SAAA,MAF3C,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA,GAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBD,UAAMA,IAAQC,GAkBR,EAAE,GAAAC,MAAMC,MAER02B,IAAmBx2B,EAAS,MAC3BI,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,SAAA,MAF3C,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA,GAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBD,UAAMA,IAAQC,GA0BR4D,IAAOC,GAIP4R,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB5R,EAAK,SAAS;AAAA,IAAA,GAGVizB,IAAkBz2B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEKQ,IAAkBH,EAAS,MAAM;AACrC,UAAI,CAACL,EAAM;AAAgB,eAAA;AAC3B,cAAQ82B,EAAgB,OAAO;AAAA,QAC7B,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEK,EAAE,GAAA52B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DF,IAAA+2B,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,OAAO,QACPA,EAAA,OAAO,QAHGA,IAAAA,MAAA,CAAA,CAAA,GAMAC,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,OAAO,QAFGA,IAAAA,MAAA,CAAA,CAAA;AAKZ,MAAMzG,KAAiBC;AAAA,EAAW;AAAA,EAAS;AAAA;GAErCyG,KAAQ,gCAERC,KAAWpxB;AAAA,EACf,OAAO,OAAOixB,EAAa,EAAE,KAAK,CAACha,MAAQA,MAAQwT,GAAe,KAAK,IACpDA,GAAe,QAC9B;AAAA;AACN,GACM4G,KAAQrxB;AAAA,EAAW;AAAA;GACnBsxB,KAA0BtxB,EAAI,OAAO,cAAc,OAAO,WAAWmxB,EAAK,EAAE,OAAO,GAEnFI,KAAW,MAAM;AACrB,UAAQH,GAAS,OAAO;AAAA,IACtB,KAAK;AACGC,MAAAA,GAAA,QAAQC,GAAwB,QAAQ,SAAa;AAC3D;AAAA,IACF,KAAK;AACHD,MAAAA,GAAM,QAAQ;AACd;AAAA,IACF,KAAK;AACHA,MAAAA,GAAM,QAAQ;AACd;AAAA,EACJ;AACF;AACAE;AAEA,MAAMC,KAAmB,CAAC/2B,MAAyB;AACjD,EAAA22B,GAAS,QAAQ32B,GACjBgwB,GAAe,QAAQhwB;AACzB;AAEA,OAAO,WAAW02B,EAAK,EAAE,iBAAiB,UAAU,CAAC3hB,MAAU;AAC7D,EAAA8hB,GAAwB,QAAQ9hB,EAAM,SAC7B+hB;AACX,CAAC;AAED,MAAME,KAAer3B,EAAS,MACrBi3B,GAAM,UAAU,UAAc,UAAU,SAChD;AAEM,SAASK,KAAW;AACzB,QAAMC,IAAe,MAAM;AACzB,IAAAH;AAAA,MAAiB;AAAA;AAAA,IAAkB,GAC1BD;EAAA,GAGLK,IAAe,MAAM;AACzB,IAAAJ;AAAA,MAAiB;AAAA;AAAA,IAAkB,GAC1BD;EAAA,GAGLM,IAAgB,MAAM;AAC1B,IAAAL;AAAA,MAAiB;AAAA;AAAA,IAAmB,GAC3BD;EAAA,GAGLO,IAAc,MAAM;AACxB,YAAQV,GAAS,OAAO;AAAA,MACtB,KAAK;AACU,QAAAQ;AACb;AAAA,MACF,KAAK;AACU,QAAAD;AACb;AAAA,MACF;AACgB,QAAAE;AACd;AAAA,IACJ;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,UAAU3G,GAASkG,EAAQ;AAAA,IAC3B,OAAOlG,GAASmG,EAAK;AAAA,IACrB,cAAcnG,GAASuG,EAAY;AAAA,IACnC,aAAAK;AAAA,IACA,cAAAH;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,EAAA;AAEJ;;;;ACzFA,UAAM,EAAE,cAAAD,GAAc,cAAAD,GAAc,eAAAE,GAAe,UAAAT,EAAA,IAAaM,MAE1D,EAAE,GAAAz3B,MAAMC,MAER63B,IAAS/xB,EAAI,EAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aCPpBgyB,KAAkC;AAAA,EAClC,OAAA;AAAA,EACA,eAAuB;AAAA;4tBAKrBC,KAAA;AAAA;;AARJ,SAAAC,GAAAC,GAAAC,GAAA;;;8DCCEJ,KAAkC;AAAA,EAClC,OAAO;AAAA;GAGLK,KAAWC,gBAAAA,EAAA,QAAA;AAAA,EACX;EACA,QAAc;AAAA;cACdC,KAAA;AAAA;;AARJ,SAAAL,GAAAC,GAAAC,GAAA;;;;;;;;;;ACQF,UAAMr4B,IAAQC,GAWRw4B,IAAuBp4B,EAAS,MAAM;AAC1C,cAAQL,EAAM,MAAM;AAAA,QAClB,KAAK;AACI,iBAAA04B;AAAAA,QACT,KAAK;AACI,iBAAAC;AAAA,QACT;AACS,iBAAAC;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;ACnBD,UAAM/0B,IAAOC,GAIP6T,IAAc3T,GAAOP,EAAiB,GACtCotB,IAA2B7sB,GAAOL,EAAwB,GAC1DmtB,IAAwB9sB,GAAOJ,EAAqB,GAEpD,EAAE,aAAAstB,EAAgB,IAAAN,GAAuBC,GAA0BC,CAAqB,GACxF,EAAE,qBAAA+B,MAAwBzB,MAE1ByH,IAAmB,CAAC/qB,MAAuB;AAE3C,MADWojB,EAAYpjB,CAAI,KACnBjK,EAAK,eAAeiK,CAAI;AAAA,IAAA,GAGhCgrB,IAAgBz4B,EAAS,MAAM;AAC7B,YAAAgG,IAAQoqB,GAAc,KAAK,CAACjsB,MAASA,EAAK,SAASquB,EAAoB,KAAK;AAC9E,aAAApyB,EAAY4F,CAAK,IACZoqB,GAAc,CAAC,IAEjBpqB;AAAA,IAAA,CACR,GAEK0yB,IAAmB14B,EAAS,MACzBowB,GAAc;AAAA,MACnB,CAACjsB,MACE;;AAAA,gBAAAqsB,EAAyB,SAASrsB,EAAK,IAAI,KAAKA,EAAK,SAAS,UAC9D,CAACA,EAAK,eAAaH,IAAAsT,EAAY,UAAZ,gBAAAtT,EAAmB,MAAM,SAASmT;AAAA;AAAA,IAAgB,CAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrCK,UAAA,EAAE,GAAAtX,MAAMC,MAER64B,IAAc,MAAM;AACxB,aAAO,SAAS;IAAO;;;;;;;;;;ACFlB,MAAMC,WAAiC,MAAM;AAAA,EAClD,YAAY9sB,IAAU,IAAI;AACxB,UAAMA,CAAO,GACb,KAAK,OAAO,4BACZ,KAAK,UAAUA;AAAA,EACjB;AACF;;;;;;;;;ACHA,UAAMnM,IAAQC,GAYRi5B,IAAgBjzB,EAAI,EAAK,GAEzBkzB,IAAkB,YAAY;AAC9B,UAAA;AACI,cAAA7oB,IAAM,MAAM,MAAM,IAAItQ,EAAM,gBAAgB,WAAW,KAAK,IAAK,CAAA,EAAE;AACzE,YAAIsQ,EAAI,IAAI;AACV,gBAAM8oB,IAAc9oB,EAAI,QAAQ,IAAI,cAAc;AAClD,cAAI,CAAC8oB,KAAe,CAACA,EAAY,SAAS,kBAAkB;AACpD,kBAAA,IAAIH,GAAyB,oDAAoD;AAEnF,gBAAAI,IAAO,MAAM/oB,EAAI;AACvB,cAAI,OAAO,KAAK+oB,CAAI,EAAE,SAAS;AACvB,kBAAA,IAAIJ,GAAyB,qDAAqD;AAE5E,UAAAC,EAAA,QAAQ,CAACz4B,EAAY44B,EAAK,UAAU,KAAKA,EAAK,eAAer5B,EAAM;AAEjF;AAAA,QACF;AACM,cAAA,IAAIi5B,GAAyB,qDAAqD;AAAA,eACjFjtB,GAAO;AACd,YAAIA,aAAiBitB,IAA0B;AACrC,kBAAA,IAAIjtB,EAAM,OAAO;AACzB;AAAA,QACF;AACA,YAAIA,aAAiB,aAAa;AACxB,kBAAA,IAAI,2BAA2BA,CAAK;AAC5C;AAAA,QACF;AACQ,gBAAA,IAAI,2CAA2CA,CAAK;AAAA,MAC9D;AAAA,IAAA,GAGIstB,IAAqBj5B,EAAS,MAC3Bk5B,EACR,GAGK,EAAE,OAAAC,MAAUC,GAAc,MAAM;AACpB,MAAAN;IAAA,GACfn5B,EAAM,aAAa;AAEtB,WAAA05B,GAAgB,MAAM;AACd,MAAAF;IAAA,CACP;;;;;;;;;;;;;;;;;;;;;;;AC1DD,UAAMx5B,IAAQC,GAaRM,IAAQF,EAAS,MAAM;;AACvB,cAAAgE,IAAArE,EAAM,SAAN,QAAAqE,EAAY,OAAO,SAASrE,EAAM,KAAK,OAAO,MAAM,WAAW,IAC1DA,EAAM,KAAK,OAAO,QAEpB;AAAA,IAAA,CACR,GAEK25B,IAAWt5B,EAAS,MACjBL,EAAM,OAAO,MAAM,IAC3B,GAEKM,IAAOD,EAAS,MAAM;AAC1B,UAAI,CAACL,EAAM;AAAa,eAAA;AACxB,UAAIA,EAAM,KAAK,OAAO,KAAK,SAAS;AAAU,eAAAA,EAAM,KAAK,OAAO;AAChE,YAAM45B,IAAoB55B,EAAM,KAAK,OAAO,UAAU,OAAO,CAAC,IAAIA,EAAM,KAAK,OAAO,SAAS,OAAO,CAAC;AACrG,aAAI45B,EAAkB,SAAS,IAAUA,IAClC55B,EAAM,KAAK,MAAM,MAAM,GAAG,CAAC;AAAA,IAAA,CACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BD,UAAMA,IAAQC,GAmBR4D,IAAOC,GAIP+1B,IAAW;AAAA,MACf,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,SAAS;AAAA,IAAA,GAE5BC,IAAiB7zB,EAAI,EAAE,GAEvB8zB,IAAsB,MAAM;AAChC,YAAMC,IAAY,KAAK,MAAM,KAAK,WAAWH,EAAS,MAAM;AAC5D,aAAAC,EAAe,QAAQD,EAASG,CAAS,EAAE,KAAK,MAAM,KAAK,OAAW,IAAAH,EAASG,CAAS,EAAE,MAAM,CAAC,GAC1FF,EAAe;AAAA,IAAA,GAGlBhD,IAAkBz2B,EAAS,MACxBL,EAAM,WAAW,SAAS,IAAI,SAAS,OAC/C,GAEKi6B,IAAsB55B,EAAS,MAC5BL,EAAM,WAAW,SAAS,IAAIA,EAAM,aAAa,MACzD,GAEKk6B,IAAsB,CAACC,MAAqB;AAChD,MAAAt2B,EAAK,qBAAqBs2B,CAAQ;AAAA,IAAA;AAGpC,WAAA70B;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,GAAUoB,MAAa;AACtB,YAAIpB,MAAaoB,KACbpB,EAAS,WAAW,KACpBA,EAAS,WAAW,KAAKnE,EAAM,aAAa;AAC1C,cAAA85B,EAAe,UAAU,IAAI;AAC1B,YAAAj2B,EAAA,qBAAqBk2B,GAAqB;AAC/C;AAAA,UACF;AACK,UAAAl2B,EAAA,qBAAqBi2B,EAAe,KAAK;AAAA,QAChD;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDd,UAAA,EAAE,GAAA55B,MAAMC,MAERi6B,IAAen0B,EAAI,EAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACM9B,UAAMjG,IAAQC,GAkCR4D,IAAOC,GASP,EAAE,OAAAu2B,GAAO,KAAAC,GAAK,kBAAAC,EAAiB,IAAIv6B,EAAM,aAEzCwzB,IAAanzB,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAwE;AACrE,QAAAN,EAAA,qBAAqBpC,GAAwE0C,CAAQ,CAAC;AAAA,MAC7G;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MACR4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEkwB,IAAYztB,EAAI,EAAK,GACrBwtB,IAASxtB,EAAI,EAAE,GACfiuB,IAAejuB,EAAI,EAAK,GACxB,EAAE,aAAA2tB,EAAA,IAAgBtf,GAAOtU,CAAK,GAE9B4T,IAAawf,GAAcpzB,EAAM,YAAY,GAE7Cw6B,IAAsBv0B,EAAqC,oBAAA,IAAK,CAAA,GAGhE4uB,IAAU,MAAM;AACpB,MAAAnB,EAAU,QAAQ,IACb7vB,EAAA,SAAS2vB,EAAW,KAAK;AAAA,IAAA,GAG1BpvB,IAAS,MAAM;;AACnB,MAAAsvB,EAAU,QAAQ,KAClBrvB,IAAArE,EAAM,MAAN,QAAAqE,EAAS,UACJR,EAAA,QAAQ2vB,EAAW,KAAK;AAAA,IAAA,GAGzBlvB,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAevE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,IACtF,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,MACxBqE,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,eAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,aADtBvE,EAAM;AAAA,IACgB,CAChE,GAEK6zB,IAAiCxzB,EAAS,MAC1CL,EAAM,aAAa,EAExB,GAEK+0B,IAAiB,CAACX,MAAkB;AACxC,MAAI,CAACp0B,EAAM,YAAY,CAAC0zB,EAAU,SAASU,EAAM,WAAW,MAC5DX,EAAO,QAAQW;AAAA,IAAA,GAGXD,IAAY,OAAOC,MAAkB;AACzC,MAAAF,EAAa,QAAQ;AACrB,YAAMG,IAAcT,EAAY,MAAM5zB,EAAM,aAAa;AACzD,MAAAq0B,EAAY,QAAQD,GACpBoG,EAAoB,MAAM,UACd,MAAMx6B,EAAM,kBAAkB4T,GAAYggB,EAAY,KAAK,GACnE,QAAQ,CAACpvB,MAAc;AACzB,QAAAg2B,EAAoB,MAAM,IAAIh2B,EAAKxE,EAAM,SAAS,GAAGwE,CAAI;AAAA,MAAA,CAC1D,GACD0vB,EAAa,QAAQ;AAAA,IAAA,GAGjBF,KAAW3zB,EAAiD,MAAM;AAChE,YAAA4zB,wBAA4C;AAC9C,aAAAlzB,GAAQyyB,EAAW,KAAK,IACfA,EAAA,MAAM,QAAQ,CAAC9yB,MAAU;AAC5B,QAAAuzB,EAAA,IAAIvzB,GAAO,EAAE;AAAA,MAAA,CACpB,IACQ8yB,EAAW,SACdS,EAAA,IAAIT,EAAW,OAAO,EAAE,GAEZgH,EAAA,MAAM,QAAQ,CAAC95B,MAAU;AACrC,QAAAuzB,EAAA,IAAIvzB,EAAMV,EAAM,SAAS,GAAGU,EAAMV,EAAM,SAAS,CAAC;AAAA,MAAA,CACzD,GACM,MAAM,KAAKi0B,GAAO,CAAC,CAAClxB,GAAKrC,CAAK,OAC5B,EAAE,OAAOqC,GAAK,OAAOrC,EAAM,EACnC;AAAA,IAAA,CACF,GAEK+5B,KAA2B,CAACC,MACzB,IAAI,QAAiB,CAACC,OAC3BH,EAAoB,MAAM,QAAQ,CAAC95B,GAAOqC,MAAQ;AAC5C,MAAA23B,EAAI,IAAI33B,CAAG,KACIw3B,EAAA94B,GAAUf,CAAK,CAAC;AAAA,IACnC,CACD,GACMi6B,EAAQ,EAAI,EACpB,GAGG3F,IAAe,MAAM;AAEzB,UADAb,EAAU,EAAE,GACRn0B,EAAM,UAAU;AAClB,QAAAwzB,EAAW,QAAQ;AACnB;AAAA,MACF;AACA,MAAAA,EAAW,QAAQ;AAAA,IAAA,GAGfoH,IAAuB30B,EAAI,CAAC,GAC5B40B,IAAkB,MAAM;AACP,MAAAD,EAAA,QAAQ,KAAK;IAAI;AAGxC,WAAA3F;AAAA,MACExB;AAAA,MACA,CAACtvB,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,MACf4uB,EAAUhwB,CAAQ,GAClBN,EAAK,yBAAyBM,CAAQ;AAAA,MAE1C;AAAA,MACA,EAAE,UAAU,KAAK,SAAS,IAAK;AAAA,IAAA,GAG3BmB,GAAAmuB,GAAQ,CAACtvB,GAAUoB,MAAa;AACpC,UAAIpB,EAAS,WAAW,KAAKuvB,EAAU,UAAU,MACnC,KAAK,QACPkH,EAAqB,QAAQ,KAAK;AAC1C,QAAAnH,EAAO,QAAQluB;AACf;AAAA,MACF;AAEF,MAAIpB,MAAaoB,KACf1B,EAAK,gBAAgBM,CAAQ;AAAA,IAC/B,CACD,GAEDmB;AAAA,MACEkuB;AAAA,MACA,OAAOrvB,MAAa;AACd,YAAAvD,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,KAAMpD,GAAQoD,CAAQ,KAAKA,EAAS,WAAW;AACzF;AAEF,cAAMuJ,IAAS3M,GAAQoD,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GACjD22B,IAAa,IAAI,IAAIptB,CAAM;AACjC,cAAM+sB,GAAyBK,CAAU,GAErCA,EAAW,OAAO,MAChBR,EAAA,MAAM,KAAKQ,CAAU,CAA6B,GAChDT;MAEV;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChNd,UAAA,EAAE,GAAAn6B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfd,UAAMH,IAAQC;AASd,WAAAuQ,GAAU,MAAM;AACd,MAAKxQ,EAAM,cACJ,OAAA,SAAS,OAAOA,EAAM,UAAU;AAAA,IAAA,CACxC;;;;;;;;ACLK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAR,UAAA,EAAE,GAAAD,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOR,UAAA,EAAE,GAAAD,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNF,IAAA46B,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,WAAW,aACXA,EAAA,WAAW,YACXA,EAAA,UAAU,SAJAA,IAAAA,MAAA,CAAA,CAAA,GAOAC,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,WAAW,YACXA,EAAA,UAAU,SALAA,IAAAA,MAAA,CAAA,CAAA;AAUC,MAAAC,KAA0B,CAACv6B,MAA8B;AACpE,UAAQA,GAAO;AAAA,IACb,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF,GCtCMw6B,KAAahoB,GAAiB,UAAU,aAAa,GAErDK,KAAS+f,GAAS;AAAA,EACtB,UAAU;AAAA,IACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,EACjC;AAAA,EACA,MAAM;AAAA,IACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ,SAAS,UAAU;AAAA,EACnD;AAAA,EACA,MAAM;AAAA,IACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ,SAAS,IAAI;AAAA,EAC7C;AAAA,EACA,QAAQ;AAAA,IACN,GAAGA,GAAW,EAAE,MAAM,UAAU,SAAS,CAAC,WAAW,GAAG;AAAA,EAC1D;AAAA,EACA,mBAAmB;AAAA,IACjB,GAAGA,GAAW,EAAE,MAAM,qBAAqB,SAAS,IAAI;AAAA,EAC1D;AAAA,EACA,0BAA0B;AAAA,IACxB,GAAGA,GAAW,EAAE,MAAM,4BAA4B,SAAS,IAAI;AAAA,EACjE;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,IAAI;AAAA,EAClD;AAAA,EACA,aAAa;AAAA,IACX,GAAGA,GAAW,EAAE,MAAM,eAAe,SAAS,IAAI;AAAA,EACpD;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,MAAM;AAAA,EACpD;AAAA,EACA,SAAS;AAAA,IACP,GAAGA,GAAW,EAAE,MAAM,WAAW,SAAS,IAAM;AAAA,EAClD;AAAA,EACA,mBAAmB;AAAA,IACjB,GAAGA,GAAW,EAAE,MAAM,qBAAqB,SAAS,IAAO;AAAA,EAC7D;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,MAAM;AAAA,EACpD;AAAA,EACA,SAAS;AAAA,IACP,GAAGA,GAAW,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,EAClD;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,IAAI;AAAA,EAClD;AAAA,EACA,uBAAuB;AAAA,IACrB,GAAGA,GAAW,EAAE,MAAM,yBAAyB,SAAS,IAAI,UAAU,IAAM;AAAA,EAC9E;AAAA,EACA,UAAU;AAAA,IACR,GAAGA,GAAW,EAAE,MAAM,YAAY,SAAS,IAAI;AAAA,EACjD;AAAA,EACA,uBAAuB;AAAA,IACrB,GAAGA,GAAW,EAAE,MAAM,yBAAyB,SAAS,MAAM;AAAA,EAChE;AAAA,EACA,wBAAwB;AAAA,IACtB,GAAGA,GAAW,EAAE,MAAM,0BAA0B,SAAS,MAAM;AAAA,EACjE;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,MAAM;AAAA,EACpD;AAAA,EACA,YAAY;AAAA,IACV,GAAGA,GAAW,EAAE,MAAM,cAAc,SAAS,MAAM;AAAA,EACrD;AAAA,EACA,YAAY;AAAA,IACV,GAAGA,GAAW,EAAE,MAAM,cAAc,SAAS,MAAM;AAAA,EACrD;AAAA,EACA,aAAa;AAAA,IACX,GAAGA,GAAW,EAAE,MAAM,eAAe,SAAS,MAAM;AAAA,EACtD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,iBAAiB;AAAA,IACf,GAAGA,GAAW,EAAE,MAAM,mBAAmB,SAAS,MAAM;AAAA,EAC1D;AAAA,EACA,iBAAiB;AAAA,IACf,GAAGA,GAAW,EAAE,MAAM,mBAAmB,SAAS,MAAM;AAAA,EAC1D;AAAA,EACA,kBAAkB;AAAA,IAChB,GAAGA,GAAW,EAAE,MAAM,oBAAoB,SAAS,MAAM;AAAA,EAC3D;AAAA,EACA,cAAc;AAAA,IACZ,GAAGA,GAAW,EAAE,MAAM,gBAAgB,SAAS,MAAM;AAAA,EACvD;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,cAAc;AAAA,IACZ,GAAGA,GAAW,EAAE,MAAM,gBAAgB,SAAS,MAAM;AAAA,EACvD;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACX,GAAGA,GAAW,EAAE,MAAM,eAAe,SAAS,MAAM;AAAA,EACtD;AAAA,EACA,cAAc;AAAA,IACZ,GAAGA,GAAW,EAAE,MAAM,gBAAgB,SAAS,MAAM;AAAA,EACvD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,iBAAiB;AAAA,IACf,GAAGA,GAAW,EAAE,MAAM,mBAAmB,SAAS,MAAM;AAAA,EAC1D;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AACF,CAAC;AAEM,SAASC,KAAqB;AAC5B,SAAA5nB;AACT;ACzHY,IAAA6nB,uBAAAA,OACVA,EAAA,aAAa,cACbA,EAAA,UAAU,WACVA,EAAA,QAAQ,SAHEA,IAAAA,MAAA,CAAA,CAAA;AAyBC,MAAAC,KAAoC,CAAC36B,MAAuC;AACvF,UAAQA,GAAO;AAAA,IACb,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL;AACS,aAAA;AAAA,EACX;AACF,GC1Ba46B,KAAsBC,GAAY,sCAAsC,MAAM;AACnF,QAAAC,IAAiBv1B,EAAgC,CAAA,CAAE,GACnDw1B,IAASx1B,EAAI,EAAK,GAClBy1B,IAAYz1B,EAAI,CAAC,GACjB01B,IAAY11B,EAAoB21B,GAAe,OAAO,GACtDC,IAAiB51B,EAAyC,oBAAA,IAAK,CAAA,GAC/D61B,IAAa71B,EAAI,EAAK,GACtB81B,IAAW91B,EAAI,CAAC,GAChB+1B,IAAW/1B,EAAI,CAAC;AAEtB,WAASg2B,IAAa;AACpB,IAAAR,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASS,IAAa;AACpB,IAAAT,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASU,EAAaz7B,GAAe;AACnC,IAAAg7B,EAAU,QAAQh7B;AAAA,EACpB;AAEA,WAAS07B,EAAc17B,GAAgB;AACrC,IAAAo7B,EAAW,QAAQp7B;AAAA,EACrB;AAEA,WAAS27B,EAAa37B,GAAqB;AACzC,IAAAi7B,EAAU,QAAQj7B;AAAA,EACpB;AAEA,WAAS47B,EAAY57B,GAAe;AAClC,IAAAq7B,EAAS,QAAQr7B;AAAA,EACnB;AAEA,WAAS67B,EAAY77B,GAAe;AAClC,IAAAs7B,EAAS,QAAQt7B;AAAA,EACnB;AAEA,WAAS87B,EAAQ/uB,GAAiC;AAChD,IAAA+tB,EAAe,QAAQ/tB,EAAM,IAAI,CAACjJ,OACzB;AAAA,MACL,OAAOA;AAAA,MACP,UAAU;AAAA,IAAA,EAEb;AAAA,EACH;AAEA,WAASi4B,EAAWhvB,GAAiC;AACnD,UAAMivB,IAASjvB,EAAM,IAAI,CAACkvB,OACjB;AAAA,MACL,OAAAA;AAAA,MACA,UAAU;AAAA,IAAA,EAEb;AACD,IAAAnB,EAAe,QAAQA,EAAe,MAAM,OAAOkB,CAAM;AAAA,EAC3D;AAEA,WAASE,EAAsBv6B,GAAe;AACxC,QAACm5B,EAAe,MAAMn5B,CAAK,KAE3B,GAACy5B,EAAW,SAASe,GAAc,SAAS,CAACrB,EAAe,MAAMn5B,CAAK,EAAE,WAM7E;AAAA,UAFem5B,EAAA,MAAMn5B,CAAK,EAAE,WAAW,CAACm5B,EAAe,MAAMn5B,CAAK,EAAE,UAEhEy5B,EAAW,SAASN,EAAe,MAAMn5B,CAAK,EAAE,UAAU;AAC5D,QAAAy6B,EAAkBz6B,CAAK,GACT06B,KACAC,EAAAxB,EAAe,MAAMn5B,CAAK,CAAC;AACzC;AAAA,MACF;AAEA,UAAI,CAACy5B,EAAW,SAASN,EAAe,MAAMn5B,CAAK,EAAE,UAAU;AAC/C,QAAA26B,EAAAxB,EAAe,MAAMn5B,CAAK,CAAC;AACzC;AAAA,MACF;AAEA,MAAA46B,EAAmBzB,EAAe,MAAMn5B,CAAK,EAAE,MAAM,EAAE;AAAA;AAAA,EACzD;AAEA,WAASy6B,EAAkBI,GAAqB;AAC9C,UAAMzvB,IAAQ+tB,EAAe;AAC7B,aAAS50B,IAAI,GAAGA,IAAI6G,EAAM,QAAQ7G;AAChC,MAAI6G,EAAM7G,CAAC,EAAE,YAAYA,MAAMs2B,MACvBzvB,EAAA7G,CAAC,EAAE,WAAW;AAAA,EAG1B;AAEA,WAASm2B,IAAgB;AACvB,IAAAlB,EAAe,MAAM;EACvB;AAEA,WAASmB,EAAcG,GAAgC;AACrD,IAAKtB,EAAe,MAAM,IAAIsB,EAAU,MAAM,EAAE,KAC9CtB,EAAe,MAAM,IAAIsB,EAAU,MAAM,IAAIA,CAAS;AAAA,EAE1D;AAEA,WAASF,EAAmBG,GAAgB;AAC1C,IAAIvB,EAAe,MAAM,IAAIuB,CAAO,KACnBvB,EAAA,MAAM,OAAOuB,CAAO;AAAA,EAEvC;AAEA,WAASC,IAAkC;;AACnC,UAAAC,wBAA0B;AAChC,eAAW58B,KAASm7B,EAAe,MAAM,OAAA;AACnC,OAAAx3B,IAAA3D,EAAM,MAAM,aAAZ,QAAA2D,EAAsB,MACxBi5B,EAAQ,IAAI58B,EAAM,MAAM,SAAS,EAAE;AAGhC,WAAA,MAAM,KAAK48B,CAAO;AAAA,EAC3B;AAEA,WAASC,IAA+B;AACtC,WAAO,MAAM,KAAK1B,EAAe,MAAM,KAAM,CAAA;AAAA,EAC/C;AAEA,WAAS2B,IAA8C;AACrD,UAAMd,IAAwC,CAAA;AAC9C,eAAWh8B,KAASm7B,EAAe,MAAM,OAAA;AACvC,MAAAa,EAAO,KAAK96B,GAAMlB,EAAM,KAAK,CAAC;AAEzB,WAAAg8B;AAAA,EACT;AAEA,WAASe,GAAgBvT,GAAoD;AAC3E,YAAQA,GAAM;AAAA,MACZ,KAAKkR,GAAsB;AAClB,eAAA;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,OAAOmC,EAAoB;AAAA,QAAA;AAAA,MAE/B,KAAKnC,GAAsB;AAClB,eAAA;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,OAAOoC,EAAkB;AAAA,QAAA;AAAA,MAE7B,KAAKpC,GAAsB;AAAA,MAC3B;AACS,eAAA;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,OAAOiC,EAAuB;AAAA,QAAA;AAAA,IAEpC;AAAA,EACF;AAEM,QAAAR,KAAgBx8B,EAAS,MACtBq9B,EAAc,SAAS1B,EAAS,KACxC,GAEK0B,IAAgBr9B,EAAS,MACtBw7B,EAAe,MAAM,IAC7B;AAED,WAAS8B,IAAQ;AACf,IAAAnC,EAAe,QAAQ,IACvBC,EAAO,QAAQ,IACDsB;EAChB;AAEO,SAAA;AAAA,IACL,WAAArB;AAAA,IACA,WAAAC;AAAA,IACA,YAAAG;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAA0B;AAAA,IACA,gBAAA7B;AAAA,IACA,QAAAJ;AAAA,IACA,gBAAAD;AAAA,IACA,iBAAAiC;AAAA,IACA,cAAApB;AAAA,IACA,cAAAF;AAAA,IACA,eAAAC;AAAA,IACA,aAAAE;AAAA,IACA,aAAAC;AAAA,IACA,YAAAN;AAAA,IACA,YAAAC;AAAA,IACA,SAAAM;AAAA,IACA,YAAAC;AAAA,IACA,uBAAAG;AAAA,IACA,eAAAG;AAAA,IACA,OAAAY;AAAA,EAAA;AAEJ,CAAC,GClMKC,KAA4B33B,EAA2C,MAAS;AAE/E,SAAS43B,GAA8BrwB,GAAiC;AAC7E,EAAAowB,GAA0B,QAAQpwB;AACpC;AAEgB,SAAAswB,GAA6BC,IAAqB,WAAW;AAC3E,MACEt9B,EAAYm9B,GAA0B,KAAK,KAC3Cn9B,EAAYm9B,GAA0B,MAAM,OAAO,KACnDn9B,EAAYm9B,GAA0B,MAAM,QAAQG,CAAU,CAAC;AAEzD,UAAA,IAAI,MAAM,oEAAoE;AAG/E,SAAA;AAAA,IACL,WAAWH,GAA0B,MAAM,QAAQG,CAAU,EAAE;AAAA,IAC/D,kBAAkBH,GAA0B,MAAM,QAAQG,CAAU,EAAE;AAAA,EAAA;AAE1E;AAEO,SAASC,KAAqC;AAEjD,MAAAv9B,EAAYm9B,GAA0B,KAAK,KAC3Cn9B,EAAYm9B,GAA0B,MAAM,OAAO;AAE7C,UAAA,IAAI,MAAM,oEAAoE;AAG/E,SAAA;AAAA,IACL,YAAYA,GAA0B,MAAM;AAAA,IAC5C,sBAAsBA,GAA0B,MAAM;AAAA,IACtD,cAAcA,GAA0B,MAAM;AAAA,EAAA;AAElD;AChCO,MAAMK,KAAuB,CAACC,GAAqBC,GAAsBC,IAAsB,OAChG98B,GAAc68B,CAAS,IAAUD,IAC9Bx7B,GAAyB07B,MAAwB,KAAKF,IAAcE,GAAqBD,CAAS,GCP9FE,KAAoB,CAACC,MACzB3xB,GAAsB,SAAS2xB,CAAU,GCarCC,KAAc,CACzBC,GACAN,GACAC,IAAuB,CAAC,GACxBp6B,GACAwJ,GACAjH,IAA8B,OAEvB,IAAI,QAAQ,CAACq0B,GAAS8D,MAAW;AAC/B,EAAAD,EAAA,EACJ,IAAIP,GAAqBC,GAAaC,CAAS,GAAG73B,CAAO,EACzD,KAAK,CAACgK,MACA+tB,GAAkB/tB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnB8D,EAAO,IAAIxyB,GAAA,CAAgB,IARzBwyB,EAAO,IAAI5wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCmmB,EAAO,IAAIrxB,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ;AC5CI,SAASomB,KAAqB;AAC7B,QAAAj1B,IAAIxD,EAAc,CAAA,CAAE,GAEpB04B,IAAgB,CAACj+B,MAAwB;AAC7C,IAAAk+B,EAAS,SAASl+B,CAAK;AAAA,EAAA,GAGnBm+B,IAAiB,CAACC,GAAcC,MAAwB;AACnD,IAAAH,EAAA,UAAUE,IAAOC,IAAQA,CAAK;AAAA,EAAA,GAGnCC,IAAgB,CAACC,GAAsBC,MAAwB;AACnE,IAAI,CAACt+B,GAAOq+B,CAAK,KAAKA,EAAM,SAAS,KAAGL,EAAS,WAAWK,IAAQ,KAAKC,IAAO,SAAS,KAAK;AAAA,EAAA,GAG1FC,IAAc,CAACz+B,MACfO,GAAUP,CAAK,IACVA,IAAQ,MAAM,MAEhBA,GAGH0+B,IAAiB,CAACC,GAA8BJ,GAAev+B,MAA2C;AAC9G,IAAII,GAASJ,CAAK,KAAKA,EAAM,WAAW,KACtC+I,EAAA,MAAM,KAAK,YAAY41B,IAAgB,MAAMJ,IAAQ,OAAOE,EAAYz+B,CAAK,CAAC;AAAA,EAAA,GAG5E4+B,IAAW,CAAC/rB,MAAqD;AACrE,UAAMS,IAAQT,EAAO;AACjB,WAAA3S,GAAOoT,CAAK,IACVT,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAELzS,GAASkT,CAAK,IACZA,EAAM,WAAW,IACfT,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAEF,mBAAmBS,CAAK,IAE7BjT,GAAQiT,CAAK,IACXA,EAAM,WAAW,IACfT,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAEFS,EAAM,IAAI,CAACxP,MAAU1D,GAAS0D,CAAI,IAAI,mBAAmBA,CAAI,IAAIA,CAAK,EAAE,KAAK,GAAG,IAErF3D,GAASmT,CAAK,KAAK/S,GAAU+S,CAAK,IAC7BA,IAGF;AAAA,EAAA,GAGH4qB,IAAW,CAAC77B,GAAarC,MAAqB;AAClD,IAAA+I,EAAE,MAAM,KAAK1G,IAAM,MAAMrC,CAAK;AAAA,EAAA;AA2BzB,SAAA;AAAA,IACL,eAAAi+B;AAAA,IACA,gBAAAE;AAAA,IACA,eAAAG;AAAA,IACA,gBAAAI;AAAA,IACA,iBAzBsB,CAAC3rB,MAA+B;AACtD,YAAM8rB,IAAc,CAAC9+B,EAAYgT,EAAU,QAAQ;AACnD,iBAAWC,KAAcD,GAAW;AAC5B,cAAAF,IAASE,EAAUC,CAAU,GAC7BurB,IAAQ1rB,EAAO,SAASG;AAC9B,YAAIH,EAAO;AACT;AAEI,cAAA7S,IAAQ4+B,EAAS/rB,CAAM;AACzB,YAAA,CAAA3S,GAAOF,CAAK,GAGhB;AAAA,cAAI6+B,GAAa;AACf,YAAAX,EAASK,GAAOv+B,CAAK;AACrB;AAAA,UACF;AACe,UAAA0+B,EAAA7rB,EAAO,SAAS0rB,GAAOv+B,CAAK;AAAA;AAAA,MAC7C;AAAA,IAAA;AAAA,IASA,UAAAk+B;AAAA,IACA,YA/BiB,MACV,MAAMn1B,EAAE,MAAM,KAAK,GAAG;AAAA,EA8B7B;AAEJ;AC/Fa,MAAA+1B,KAAoB,CAAI9+B,MAC5BW,GAASX,CAAK,KAAK,OAAO,OAAOA,GAAO,YAAY,GAGhD++B,KAA4B,CAAI/+B,MACpCW,GAASX,CAAK,KAAK,OAAO,OAAOA,GAAO,aAAa,GCExDg/B,KAAuB,CAAC9rB,GAAwBH,MAAiC;AACrF,QAAM,EAAE,eAAAkrB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,iBAAAC,EAAA,IAAoBlB;AACtF,SAAAC,EAAc/qB,EAAW,WAAW,GACrBirB,EAAAjrB,EAAW,MAAMA,EAAW,WAAW,GACxCorB,EAAAprB,EAAW,QAAQA,EAAW,UAAU,GACtDgsB,EAAgBnsB,CAAS,GAClBksB,EAAW;AACpB,GAKaE,KAAe,CAC1BrB,GACAN,GACAC,IAAuB,CACvB,GAAAvqB,GACAH,GACA1P,GACAwJ,GACAjH,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACq0B,GAAS8D,MAAW;AACtC,QAAMqB,IAAYr/B,EAAYgT,EAAU,QAAQ,IAAI,KAAK;AACzD,EAAA+qB,EACG,EAAA;AAAA,IACCP,GAAqBC,GAAaC,CAAS,IAAI2B,IAAYJ,GAAqB9rB,GAAYH,CAAS;AAAA,IACrGnN;AAAA,EAAA,EAED,KAAK,CAACgK,MAAQ;AACb,QAAI,CAAC+tB,GAAkB/tB,EAAI,MAAM;AAC/B,aAAOmuB,EAAO,IAAI5wB,GAAyByC,EAAI,MAAM,CAAC;AAExD,QAAIA,EAAI,MAAM;AACZ,YAAMyvB,IAAUzvB,EAAI;AAChB,aAAAmvB,GAA0BM,CAAO,IACxBnsB,EAAA,cAActD,EAAI,KAAK,cACzBkvB,GAAkBO,CAAO,MAClCnsB,EAAW,aAAamsB,EAAQ,aAEvBnsB,EAAA,mBAAmBtD,EAAI,KAAK,KAAK,QACrCqqB,EAAQrqB,EAAI,KAAK,IAAI;AAAA,IAC9B;AACI,WAAAA,EAAI,WAAWhE,KACVquB,EAAQ,CAAA,CAAO,IAEjB8D,EAAO,IAAIxyB,GAAA,CAAgB;AAAA,EAAA,CACnC,EACA,MAAM,CAACqM,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCmmB,EAAO,IAAIrxB,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ;ACJS,IAAA0nB,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,aAAa,gBACbA,EAAA,cAAc,iBACdA,EAAA,aAAa,gBACbA,EAAA,UAAU,QALAA,IAAAA,MAAA,CAAA,CAAA,GAkBAC,uBAAAA,OACVA,EAAA,UAAU,uBACVA,EAAA,KAAK,kBACLA,EAAA,SAAS,sBAHCA,IAAAA,MAAA,CAAA,CAAA,GAMAC,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,eAAe,gBACfA,EAAA,mBAAmB,qBACnBA,EAAA,cAAc,eACdA,EAAA,SAAS,UACTA,EAAA,UAAU,WANAA,IAAAA,MAAA,CAAA,CAAA,GAaAC,uBAAAA,OACVA,EAAA,kBAAkB,oBAClBA,EAAA,SAAS,UACTA,EAAA,UAAU,oBAHAA,IAAAA,MAAA,CAAA,CAAA;AC1GZ,MAAMC,KAAY,yBACZC,KAAuB,QACvBC,KAAgBD,KAAuB,qBACvCE,KAAS,YAEFC,KAAwB,CAACC,MACpClC,GAA0BkC,GAAWH,IAAe,CAAI,GAAAI,IAAiBH,EAAM,GAEpEI,KAAqB,CAACF,MACjClC,GAA0BkC,GAAWL,IAAW,CAAI,GAAAM,IAAiBH,EAAM,GAEhEK,KAA8B,CAACC,GAAsBJ,MAChElC,GAAgCkC,GAAWL,KAAY,iBAAiBS,GAAW,IAAIH,IAAiBH,EAAM,GCV1GH,KAAY,6BACZG,KAAS,mBAGFO,KAA+B,CAC1CL,GACAI,GACAlF,MAEA4C;AAAA,EACEkC;AAAA,EACAL,KAAY;AAAA,EACZ,EAAE,WAAAS,GAAW,WAAAlF,EAAU;AAAA,EACvB+E;AAAA,EACAH;AACF,GAGWQ,KAAsC,CACjDN,GACAO,MAEAzC;AAAA,EACEkC;AAAA,EACAL,KAAY;AAAA,EACZ,EAAE,qBAAAY,EAAoB;AAAA,EACtBN;AAAA,EACAH;AACF,GCbIU,KAA+B,CAACC,IAA4C,QAAgC;AAAA,EAE9G,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,UAAU,CAAC;AAAA,EACX,WAAW,CAAC;AAAA,EACZ,cAAc;AAAA,IACZ,sBAAsB,CAAC;AAAA,IACvB,0BAA0B,CAAC;AAAA,EAC7B;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,4BAA4B;AAAA,EAC5B,OAAO,CAAC;AAAA,EAEV,GAAGA;AACL,IAEMrP,KAAcyB,GAKjB;AAAA,EACD,cAAc;AAAA,EACd,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,kCAAkC;AACpC,CAAC,GAEK6N,KAAepL,GAAyB;AAAA,EAC5C,cAAcoK,GAAa;AAC7B,CAAC,GAEKiB,KAAerL,GAAyB;AAAA,EAC5C,UAAU,CAAC;AAAA,EACX,wBAAwB,CAAC;AAAA,EACzB,sBAAsB,CAAC;AAAA,EACvB,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,MAChB,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,kBAAkB;AAAA,EACpB;AACF,CAAC,GAEKsL,KAAqBtL,GAA+B;AAAA,EACxD,wBAAwB,CAAC;AAAA,EACzB,OAAOkL,GAA6B;AAAA,EACpC,UAAUA,GAA6B;AAAA,EACvC,OAAOA,GAA6B;AAAA,EACpC,OAAOA,GAA6B;AACtC,CAAC,GAEKK,KAAmCvL,GAA+D;AAAA,EACtG,OAAO,CAAC;AAAA,EACR,OAAO,CAAC;AAAA,EACR,OAAO,CAAC;AAAA,EACR,UAAU,CAAC;AACb,CAAC,GAEKwL,KAA0CxL;AAAA,EAC9C,CAAC;AACH;AAEgB,SAAAyL,GAAkBhD,IAA4C,QAAW;AACvF,WAASiD,EAAcz1B,GAAc;AACnC,YAAQ,MAAMA,CAAK;AAAA,EACrB;AAEA,WAAS01B,IAAmB;AAC1B,WAAO,IAAI,QAAQ,CAAC/G,GAAS8D,MAAW;AAElC,UADJ5M,GAAY,eAAe,IACvBpxB,EAAY+9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAA+B,GAAsBhC,CAAM,EACzB,KAAK,CAACjuB,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AACzB,gBAAA,IAAI,MAAM,qDAAqD;AAEvE,QAAAoxB,EAAgBpxB,CAAM,GACtBoqB,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,QAAAmpB,EAAcnpB,CAAG,GACjBmmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAEA,WAASkD,EAAgBn0B,GAAoB;AACvC,QAAA;AACW,MAAA2zB,GAAA,MAAM,eAAe3zB,EAAK,cAEvCqkB,GAAY,eAAe;AAAA,YACf;AACN,YAAA,IAAI,MAAM,0DAA0D;AAAA,IAC5E;AAAA,EACF;AAEA,WAAS+P,IAAmB;AAC1B,WAAO,IAAI,QAAQ,CAACjH,GAAS8D,MAAW;AAElC,UADJ5M,GAAY,eAAe,IACvBpxB,EAAY+9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAAkC,GAAmBnC,CAAM,EACtB,KAAK,CAACjuB,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AACzB,gBAAA,IAAI,MAAM,yDAAyD;AAE3E,QAAAsxB,EAAgBtxB,CAAM,GACtBoqB,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,QAAAmpB,EAAcnpB,CAAG,GACjBmmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAEA,WAASoD,EAAgBr0B,GAAoB;AACvC,QAAA;AACW,MAAA4zB,GAAA,MAAM,WAAW5zB,EAAK,UACtB4zB,GAAA,MAAM,WAAW5zB,EAAK,UACtB4zB,GAAA,MAAM,yBAAyB5zB,EAAK,wBACpC4zB,GAAA,MAAM,uBAAuB5zB,EAAK,sBAE/CqkB,GAAY,eAAe;AAAA,YACf;AACN,YAAA,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAAA,EACF;AAEA,WAASiQ,EAAuBC,GAAwB;AACtD,WAAO,IAAI,QAAQ,CAACpH,GAAS8D,MAAW;AAElC,UADJ5M,GAAY,qBAAqB,MAC7BpxB,EAAY+9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAAmC,GAA4BmB,GAAavD,CAAM,EAC5C,KAAK,CAACjuB,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AACzB,gBAAA,IAAI,MAAM,gEAAgE;AAElF,QAAAyxB,EAAsBzxB,GAAQwxB,CAAW,GACjC,QAAA,IAAIV,GAAmB,KAAK,GACpC1G,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,gBAAQ,IAAIA,CAAG,GACfmpB,EAAcnpB,CAAG,GACjBmmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAES,WAAAuD,EAAsBx0B,GAA0Bu0B,GAAwB;AAC3E,QAAA;AACiB,MAAAV,GAAA,MAAM,yBAAyB7zB,EAAK,wBACpC6zB,GAAA,MAAM,QAAQ7zB,EAAK,OACnB6zB,GAAA,MAAM,WAAW7zB,EAAK,UACtB6zB,GAAA,MAAM,QAAQ7zB,EAAK,OACnB6zB,GAAA,MAAM,QAAQ7zB,EAAK,OAEtCqkB,GAAY,qBAAqBkQ;AAAA,YACrB;AACN,YAAA,IAAI,MAAM,iEAAiE;AAAA,IACnF;AAAA,EACF;AAGA,WAASE,EAAqCF,GAAwB;AACpE,WAAO,IAAI,QAAQ,CAACpH,GAAS8D,MAAW;AAElC,UADJ5M,GAAY,qBAAqB,MAC7BpxB,EAAY+9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,YAAMyD,IAAW;AAAA,QACfpB,GAA6BtC,GAAQuD,GAAa/G,GAAa,KAAK;AAAA,QACpE8F,GAA6BtC,GAAQuD,GAAa/G,GAAa,KAAK;AAAA,QACpE8F,GAA6BtC,GAAQuD,GAAa/G,GAAa,KAAK;AAAA,QACpE8F,GAA6BtC,GAAQuD,GAAa/G,GAAa,QAAQ;AAAA,MAAA;AAGzE,cAAQ,IAAIkH,CAAQ,EACjB,KAAK,CAACC,MAAc;AACnB,YACEA,EAAU,WAAW,KACrB,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS,KACnC,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS,KACnC,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS,KACnC,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS;AAE7B,gBAAA,IAAI,MAAM,mEAAmE;AAErF,QAAAC,EAAoCD,GAAWJ,CAAW,GAC1DpH,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,QAAAmpB,EAAcnpB,CAAG,GACjBmmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAES,WAAA2D,EACPD,GAGAJ,GACA;AACI,QAAA;AACF,MAAAT,GAAiC,MAAM,QAAQa,EAAU,CAAC,EAAE,MAC5Db,GAAiC,MAAM,QAAQa,EAAU,CAAC,EAAE,MAC5Db,GAAiC,MAAM,QAAQa,EAAU,CAAC,EAAE,MAC5Db,GAAiC,MAAM,WAAWa,EAAU,CAAC,EAAE,MAE/DtQ,GAAY,mCAAmCkQ;AAAA,YACnC;AACN,YAAA,IAAI,MAAM,oEAAoE;AAAA,IACtF;AAAA,EACF;AAEA,WAASM,EAA6CC,GAAqD;AACzG,WAAO,IAAI,QAAQ,CAAC3H,GAAS8D,MAAW;AAClC,UAAAh+B,EAAY+9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACI,UAAA8C,GAAwC,MAAMe,CAAuB,GAAG;AAC1E,QAAA3H,EAAQ,EAAI;AACZ;AAAA,MACF;AACA,MAAAoG,GAAoCvC,GAAQ8D,CAAuB,EAChE,KAAK,CAAChyB,MAAQ;AAC2B,QAAAixB,GAAA,MAAMe,CAAuB,IAAIhyB,EAAI,MAC7EqqB,EAAQ,EAAI;AAAA,MACZ,CACD,EACA,MAAM,CAAC3uB,MAAU;AAChB,QAAAyyB,EAAOzyB,CAAK;AAAA,MACZ,CACD;AAAA,IAAA,CACJ;AAAA,EACH;AAEO,SAAA;AAAA,IACL,aAAA6lB;AAAA,IACA,cAAAsP;AAAA,IACA,cAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,kCAAAC;AAAA,IACA,yCAAAC;AAAA,IACA,kBAAAK;AAAA,IACA,kBAAAF;AAAA,IACA,wBAAAI;AAAA,IACA,sCAAAG;AAAA,IACA,6CAAAI;AAAA,EAAA;AAEJ;ACpRA,MAAMjC,KAAY,iBACZmC,KAAsB,IACfhC,KAAS,SACTG,KAAkB,WACzB8B,KAAyB,IAYlBC,KAAiB,CAC5BjE,GACA9C,GACA9nB,GACAH,MAEAosB;AAAA,EACErB;AAAA,EACA4B,KAAY;AAAA,EACZ,EAAE,WAAA1E,EAAU;AAAA,EACZ9nB;AAAA,EACAH;AAAA,EACAitB;AAAA,EACAH;AACF,GAEWmC,KAAa,CAAClE,GAA6BmE,MACtDpE,GAAgCC,GAAQ4B,KAAY,QAAQ,EAAE,IAAAuC,EAAA,GAAMjC,IAAiBH,EAAM,GAEhFqC,KAAqB,CAACpE,GAA6BqE,MAC9DtE,GAAgCC,GAAQ4B,KAAY,mBAAmB,EAAE,IAAIyC,EAAY,GAAGnC,IAAiBH,EAAM,GAExGuC,KAA2B,CAACtE,GAA6B/wB,MAC7D,IAAI,QAAiC,CAACktB,GAAS8D,MAAW;AACzD,QAAAsE,IAAYC,GAA6Bv1B,CAAK;AACpD,EAAAw1B,GAAuBzE,GAAQuE,CAAS,EACrC,KAAK,CAACZ,MAAc;AACf,QAAAY,EAAU,WAAW;AAChB,aAAApI,EAAQ,CAAA,CAAE;AACnB,QAAWwH,EAAU,WAAW;AAC9B,aAAO1D,EAAO0D,CAAS;AAEvB,QAAAA,EAAU,MAAM,CAAC7xB,MACRA,EAAI,WAAWlE,EACvB,GACD;AACA,YAAM82B,IAAwCf,EAAU,QAAQ,CAAAgB,MAAYA,EAAS,IAAI;AACzF,aAAOxI,EAAQuI,CAAY;AAAA,IAAA;AAE3B,aAAOzE,EAAO0D,CAAS;AAAA,EACzB,CACD,EACA,MAAM,CAAC7pB,MAECmmB,EAAOnmB,CAAG,CAClB;AAAA,CACJ;AAGH,eAAe8qB,GAA4B5E,GAA6B9D,GAAcgB,GAAmB;AACvG,MAAIhB,EAAI,WAAW;AAAU,WAAA,QAAQ,QAAQ,CAAA,CAAE;AAC/C,QAAM2I,IAAa,KAAK,KAAK3I,EAAI,SAAS8H,EAAsB,GAC1DL,IAAY,CAAA;AAElB,WAASv7B,IAAI,GAAGA,IAAIy8B,GAAYz8B,KAAK;AACnC,UAAM4e,IAAS5e,IAAI47B,IACbc,IAAU5I,EAAI,MAAMlV,GAAQA,IAASgd,EAAsB,GAC3DlyB,IAAM,MAAMkuB,EAAO,EAAE,IAAI4B,KAAY,YAAY1E,CAAS,QAAQ4H,EAAQ,KAAK,GAAG,CAAC,EAAE;AAC3F,IAAAnB,EAAU,KAAK7xB,CAAG;AAAA,EACpB;AACO,SAAA6xB;AACT;AAEO,MAAMoB,KAIwB,CAAC/E,GAA6B9D,GAAcgB,MACxE,IAAI,QAAQ,CAACf,GAAS8D,MAAW;AACtC,EAAA2E,GAA4B5E,GAAQ9D,GAAKgB,CAAS,EAC/C,KAAK,CAACyG,MAAc;AACf,QAAAzH,EAAI,WAAW;AACV,aAAAC,EAAQ,CAAA,CAAE;AACnB,QAAWwH,EAAU,WAAW;AAC9B,MAAA1D,EAAO0D,CAAS;AAAA,aAEhBA,EAAU,MAAM,CAAC7xB,MACRA,EAAI,WAAWlE,EACvB,GACD;AACA,YAAM6nB,IAAQ,CAAA;AACd,eAASrtB,IAAI,GAAGA,IAAIu7B,EAAU,QAAQv7B;AACpC,QAAAqtB,EAAM,KAAK,GAAGkO,EAAUv7B,CAAC,EAAE,KAAK,IAAI;AAEtC,MAAA+zB,EAAQ1G,CAA6B;AAAA,IAAA;AAErC,MAAAwK,EAAO0D,CAAS;AAAA,EAClB,CACD,EACA,MAAM,CAAC7pB,MAAQ;AAEd,IAAAmmB,EAAOnmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ;AAGH,eAAe2qB,GAAuBzE,GAA6BuE,GAAoC;AACrG,QAAMM,IAAa,KAAK,KAAKN,EAAU,SAASR,EAAmB,GAC7DJ,IAA6B,CAAA;AACnC,MAAIY,EAAU,WAAW;AAAU,WAAA,QAAQ,QAAQ,CAAA,CAAE;AAErD,WAASn8B,IAAI,GAAGA,IAAIy8B,GAAYz8B,KAAK;AACnC,UAAM4e,IAAS5e,IAAI27B,IACbe,IAAUP,EAAU,MAAMvd,GAAQA,IAAS+c,EAAmB,GAC9DjyB,IAAM,MAAMkuB,EAAS,EAAA,MAAM4B,KAAY,yBAAyB,KAAK,UAAUkD,CAAO,CAAC;AAC7F,IAAAnB,EAAU,KAAK7xB,CAAG;AAAA,EACpB;AACO,SAAA6xB;AACT;AAEA,SAASa,GAA8Bv1B,GAA0B;AAC/D,QAAM+1B,IAAoC,CAAA;AACpC,SAAA/1B,EAAA,QAAQ,CAACjJ,MAAS;AACtB,IAAI,CAAC5D,GAAO4D,EAAK,OAAO,KAAKA,EAAK,mBAChCg/B,EAAS,KAAK;AAAA,MACZ,IAAIh/B,EAAK;AAAA,MACT,UAAUA,EAAK;AAAA,MACf,SAASA,EAAK;AAAA,MACd,WAAW;AAAA,MACX,YAAYA,EAAK;AAAA,IAAA,CAClB;AAAA,EACH,CACD,GAEMg/B;AACT;AAEA,MAAM,EAAE,kBAAA3zB,IAAkB,wBAAAT,OAA2Bf,MAE/Co1B,KAAgC,CAACz3B,GAAY2vB,MAA4B;AACvE,QAAA,EAAE,kCAAA2F,MAAqCE;AAC7C,MAAI,CAACx1B,KAAS,CAACA,EAAM,YAAY,CAACA,EAAM,SAAS;AAAM;AACjD,QAAAwB,IAAOxB,EAAM,SAAS,MACtByB,IAAQ,CAAA;AACH,aAAA,CAAC1K,GAAK2K,CAAM,KAAK,OAAO,QAAQF,EAAK,MAAM,GAAG;AACvD,UAAMyxB,IAAQl8B,EAAI,MAAM,GAAG,EAAE,IAAI,GAC3BsD,IAAQi7B,EAAiC,MAAM3F,CAAS,EAAE,KAAK,CAACn3B,MAASA,EAAK,aAAay6B,CAAK;AACtG,IAAI54B,KACFoH,EAAM,KAAK;AAAA,MACT,OAAOpH,EAAM;AAAA,MACb,QAAQqH;AAAA,IAAA,CACT;AAAA,EAEL;AACA,MAAID,EAAM,QAAQ;AACO,IAAA2B,GAAA3B,GAAO,IAAI,EAAI;AACtC;AAAA,EACF;AACiB,EAAAoC;AACnB,GAEa6zB,KAAsB,CAAClF,GAA6B7B,MACxD,IAAI,QAAQ,CAAChC,GAAS8D,MAAW;AACtC,QAAMjxB,IAAO;AAAA,IACX,IAAImvB,EAAM;AAAA,IACV,UAAUA,EAAM;AAAA,IAChB,SAASA,EAAM;AAAA,IACf,WAAW;AAAA,IACX,YAAYA,EAAM,SAAS;AAAA,EAAA;AAE7B,EAAA6B,IACG,MAAM4B,KAAY,yBAAyB,KAAK,UAAU,CAAC5yB,CAAI,CAAC,CAAC,EACjE,KAAK,CAAC8C,MAAQ;AACT,IAAAA,EAAI,WAAWlE,KACjBuuB,EAAQrqB,EAAI,IAAI,IAGTmuB;EACT,CACD,EACA,MAAM,CAACnmB,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,KACXmrB,GAAAnrB,GAAKqkB,EAAM,WAAW,SAAS,GACtD8B,EAAO,IAAIrxB,GAAuBkL,GAAKooB,IAAiBH,IAAQjoB,CAAG,CAAC,KAEzEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GCnNG/E,KAAS4nB,GAAmB,GAC5BvnB,KAAawf,GAAc,GAC3BuQ,KAAkB19B,EAAI,EAAK;AAEjB,SAAA29B,GAAoB7F,IAAa,WAAW;AAC1D,QAAM,EAAE,WAAA0C,EAAA,IAAc3C,GAA6BC,CAAU,GAEvD8F,IAAiBvI,MACjB,EAAE,eAAAoC,GAAe,gBAAA7B,GAAgB,gBAAAL,GAAgB,QAAAC,MAAWqI,GAAYD,CAAc,GAEtF,EAAE,aAAAjuB,MAAgBvC,MAClB,EAAE,mBAAAjD,MAAsB/B,MAExBo0B,IAAiB,YAAY;AACjC7uB,IAAAA,GAAW,OAAO;AACd,QAAA;AACF,MAAAiwB,EAAe,WAAW,GACXA,EAAA,QAAQ,MAAME,GAAkBtD,GAAWoD,EAAe,WAAWjwB,IAAYL,EAAM,CAAC;AAAA,aAChGvH,GAAO;AACd,MAAAoE,EAAkBpE,CAAK;AAAA,IAAA,UACvB;AACA,MAAA63B,EAAe,WAAW;AAAA,IAC5B;AAAA,EAAA,GAEIG,IAAgB,YAAY;AACrBpwB,IAAAA,GAAA,OAAOA,GAAW,OAAO;AAChC,QAAA;AACF,MAAAiwB,EAAe,WAAW,GACXA,EAAA,WAAW,MAAME,GAAkBtD,GAAWoD,EAAe,WAAWjwB,IAAYL,EAAM,CAAC;AAAA,aACnGvH,GAAO;AACd,MAAAoE,EAAkBpE,CAAK;AAAA,IAAA,UACvB;AACA,MAAA63B,EAAe,WAAW;AAAA,IAC5B;AAAA,EAAA,GAGIt9B,IAAc,CAACiH,MAA4C;AAChD,IAAAq2B,EAAA,sBAAsBr2B,EAAK,KAAK;AAAA,EAAA,GAG3Cy2B,IAAiB,YAAY;AACjC,IAAAJ,EAAe,MAAM,GACrBtwB,GAAO,KAAK,UAAU,CAACswB,EAAe,SAAS,GACnCjuB,EAAArC,IAAQK,IAAY6uB,CAAc;AAAA,EAAA,GAG1CyB,IAAc,MAAM;AACxB,IAAAP,GAAgB,QAAQ;AAAA,EAAA,GAEpBQ,IAAgB,MAAM;AAC1B,IAAAR,GAAgB,QAAQ;AAAA,EAAA,GAGpBS,IAAmB,CACvB1I,GACAC,GACAG,GACAC,GACAC,MACS;AACT,IAAA6H,EAAe,cAAc,GAC7BA,EAAe,aAAalI,CAAS,GACrCkI,EAAe,aAAanI,CAAS,GACrCmI,EAAe,cAAc/H,CAAU,GACvC+H,EAAe,YAAY9H,CAAQ,GACnC8H,EAAe,YAAY7H,CAAQ;AAAA,EAAA;AAG9B,SAAA;AAAA,IACL,iBAAA2H;AAAA,IAAA,QACApwB;AAAAA,IACA,eAAAmqB;AAAA,IACA,gBAAA7B;AAAA,IAAA,YACAjoB;AAAAA,IACA,QAAA6nB;AAAA,IACA,gBAAAD;AAAA,IACA,iBAAiBqI,EAAe;AAAA,IAChC,aAAAt9B;AAAA,IAAA,gBACAk8B;AAAAA,IACA,eAAAuB;AAAA,IACA,gBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA;AAEJ;AC9FA,MAAMC,KAAe,KACfC,KAAyB;AAExB,SAASC,GAAoB//B,GAA0C;AACtE,QAAAm4B,IAAQt8B,EAAiC,MACtCmE,EAAK,MAAM,KACnB,GAEKm3B,IAAYt7B,EAAS,MAClBs8B,EAAM,MAAM,WAAW,SAC/B,GAEK6H,IAAcnkC,EAAS,MACpBs8B,EAAM,MAAM,WAAW,WAC/B,GAEK8H,IAAkBpkC,EAAS,MAC3Bs8B,EAAM,MAAM,YAAYA,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,aAC5E;AAAA,IACL,KAAKA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC3C,OAAOA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC7C,QAAQA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC9C,SAAS2H;AAAA,EAAA,IAGN;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQD;AAAAA,IACR,SAASC;AAAA,EAAA,CAEZ,GAEKI,IAAuBrkC,EAAS,MAChCs8B,EAAM,MAAM,YAAYA,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,cAC5E;AAAA,IACL,KAAKA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC5C,OAAOA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC9C,QAAQA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC/C,SAAS2H;AAAA,EAAA,IAGN;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQD;AAAAA,IACR,SAASC;AAAA,EAAA,CAEZ;AAEM,SAAA;AAAA,IACL,OAAA3H;AAAA,IACA,WAAAhB;AAAA,IACA,aAAA6I;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA;AAEJ;AC7DA,MAAeC,KAAA;;;;;;;;;;;;;;;;;;;;;ACMf,UAAM3kC,IAAQC,GAwBR4D,IAAOC,GAIP8gC,IAAU,MAAM;AACpB,MAAA/gC,EAAK,OAAO;AAAA,IAAA,GAGR8R,IAAOtV,EAAS,MAAM;AACtB,UAAAL,EAAM,gBAAgB+6B,GAAe;AAAiB,eAAA;AAC1D,cAAQ/6B,EAAM,WAAW;AAAA,QACvB,KAAKg7B,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,aAAa;AAAA,QACtE,KAAKC,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,cAAc;AAAA,QACvE;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEK8J,IAAcxkC,EAAS,MACpBI,EAAYT,EAAM,GAAG,IAAI8kC,KAAkB9kC,EAAM,GACzD,GAEK+kC,IAAmB1kC,EAAS,MAC5B,EAAAL,EAAM,cAAcg7B,GAAa,SAASh7B,EAAM,IAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7DYglC,KAAc,CAACC,GAAeC,IAAW,MAAM;AAC1D,MAAID,MAAU;AACL,WAAA;AAGT,QAAMv9B,IAAI,MACJy9B,IAAKD,IAAW,IAAI,IAAIA,GACxBE,IAAQ,CAAC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAChEx+B,IAAI,KAAK,MAAM,KAAK,IAAIq+B,CAAK,IAAI,KAAK,IAAIv9B,CAAC,CAAC;AAElD,SAAO,YAAYu9B,IAAQ,KAAK,IAAIv9B,GAAGd,CAAC,GAAG,QAAQu+B,CAAE,CAAC,IAAI,MAAMC,EAAMx+B,CAAC;AACzE,GCgBMy9B,KAAe,IACfgB,KAAc;;;;;;;;;AAlBpB,UAAMrlC,IAAQC,GAWR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAKRqE,IAAO8gC,GAAMtlC,GAAO,MAAM,GAE1B,EAAE,OAAA28B,GAAO,sBAAA+H,GAAsB,WAAA/I,GAAW,aAAA6I,MAAgBD,GAAoB//B,CAAI,GAElF+B,IAAc,MAAM;AACnB,MAAA1C,EAAA,aAAa,EAAE,SAAS84B,EAAM,MAAM,IAAI,OAAO38B,EAAM,MAAA,CAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9B7D,UAAA,EAAE,GAAAE,MAAMC,MAER,EAAE,aAAAoG,GAAa,gBAAAi1B,GAAgB,QAAAC,MAAWmI,GAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLxD,IAAA2B,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,YAAY,aACZA,EAAA,QAAQ,SACRA,EAAA,UAAU,WAJAA,IAAAA,MAAA,CAAA,CAAA;AAOZ,MAAMC,KAAWv/B;AAAA,EAAyB;AAAA;;AAEnC,SAASw/B,KAAc;AACtB,QAAAC,IAAc,CAAChlC,MAA+B;AAClD,IAAA8kC,GAAS,QAAQ9kC;AAAA,EAAA;AAGZ,SAAA;AAAA,IACL,UAAUywB,GAASqU,EAAQ;AAAA,IAC3B,aAAAE;AAAA,EAAA;AAEJ;AClBA,MAAMC,KAAc1/B,EAAI,EAAK;AAEtB,SAAS2/B,KAAa;AAC3B,QAAMC,IAAgB,MAAM;AACd,IAAAF,GAAA,QAAQG,EAAa,IAAIC,EAAY;AAAA,EAAA,GAG7CA,IAAc,MAAM;AACxB,IAAAJ,GAAY,QAAQ;AAAA,EAAA,GAGhBG,IAAe,MAAM;AACzB,IAAAH,GAAY,QAAQ;AAAA,EAAA;AAGf,SAAA;AAAA,IACL,aAAAA;AAAA,IACA,eAAAE;AAAA,IACA,aAAAE;AAAA,EAAA;AAEJ;;;;ACjBM,UAAA,EAAE,GAAA7lC,MAAMC,MACR,EAAE,aAAAulC,MAAgBD,MAClB,EAAE,eAAAI,MAAkBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uRCkBpBvB,KAAe;;;;;;;;;AAjBrB,UAAMrkC,IAAQC,GAWR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAIRoG,IAAc,MAAM;AACnB,MAAA1C,EAAA,aAAa,EAAE,SAAS84B,EAAM,MAAM,IAAI,OAAO38B,EAAM,MAAA,CAAO;AAAA,IAAA,GAG7DwE,IAAO8gC,GAAMtlC,GAAO,MAAM,GAE1B,EAAE,OAAA28B,GAAO,WAAAhB,GAAW,aAAA6I,GAAa,iBAAAC,MAAoBF,GAAoB//B,CAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3B7E,UAAA,EAAE,UAAAghC,MAAaC,MACf,EAAE,aAAAl/B,GAAa,gBAAAi1B,GAAgB,QAAAC,MAAWmI,GAAoB,GAE9D,EAAE,GAAA1jC,MAAMC;;;;;;;;;;;;;;;;;;ACJd,UAAM,EAAE,QAAAoT,GAAQ,aAAA2wB,GAAa,eAAAC,GAAe,gBAAA1B,EAAA,IAAmBmB,MAEzDoC,IAAoB,MAAM;AAClB,MAAA9B;IAAA,GAGR+B,IAAe,MAAM;AACX,MAAA9B,KACC1B;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTjB,UAAM,EAAE,QAAAlvB,GAAQ,gBAAAkvB,GAAgB,aAAAyB,GAAa,eAAAC,EAAA,IAAkBP,MAEzDqC,IAAe,MAAM;AACX,MAAA9B,KACC1B;IAAA,GAGXuD,IAAoB,MAAM;AAClB,MAAA9B;IAAA;;;;;;;;;;;;;;;;;;;;;;;ACHR,UAAA,EAAE,GAAAhkC,MAAMC,MACR,EAAE,gBAAAsiC,GAAgB,gBAAAwB,GAAgB,eAAAE,GAAe,iBAAAR,EAAA,IAAoBC,MAErEC,IAAiBvI,MAEjB2K,IAAe,MAAM;AACX,MAAA9B,KACC1B;IAAA,GAGX7sB,IAAc,MAAM;AACT,MAAAquB,KACDE;IAAA,GAGV+B,IAAoB7lC,EAAS,MAAM;AACvC,cAAQwjC,EAAe,WAAW;AAAA,QAChC,KAAKjI,GAAe;AACX,iBAAAuK;AAAAA,QACT;AACS,iBAAAC;AAAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTD,UAAMpmC,IAAQC,GAkBR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERkmC,IAAcpgC,EAAI,EAAK,GACvB8wB,IAAS12B,EAAS;AAAA,MACtB,MAAM;AACA,eAAAI,EAAYT,EAAM,UAAU,IAAUqmC,EAAY,QAC/CrmC,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,IAAmB;AACrB,QAAAkiC,EAAY,QAAQliC,IACpBN,EAAK,qBAAqBM,EAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEK,EAAE,eAAAu5B,GAAe,QAAAjC,GAAQ,YAAA7nB,GAAY,eAAAowB,GAAe,gBAAAC,GAAgB,iBAAAxG,GAAiB,kBAAA2G,MACzFR,MAEI,EAAE,aAAAmC,GAAa,aAAAJ,EAAY,IAAIC,GAAW,GAG1C,EAAE,kBAAAU,EAAqB,IAAAxI,GAA6B99B,EAAM,UAAU,GAEpEgQ,IAAS,MAAM;AACb,YAAA0rB,KAAY17B,EAAM,kBAAkBsmC;AACtC,UAAA7lC,EAAYi7B,EAAS;AACjB,cAAA,IAAI,MAAM,gFAAgF;AAGlG,MAAA0I;AAAA,QACE1I;AAAA,QACAT,GAAwBj7B,EAAM,SAAS;AAAA,QACjCA,EAAM,aAAZ,KAAwBA,EAAM,aAAaA,EAAM;AAAA,QACjDA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA,GAEOikC,KACH8B,KACZhP,EAAO,QAAQ;AAAA,IAAA;AAGjB,IAAAzxB;AAAA,MACEyxB;AAAA,MACA,OAAO5yB,IAAUoB,OAAa;AACxB,QAAApB,OAAaoB,MAAY,CAACpB,MACvB6L;MACT;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;AAGpB,UAAMC,IAAU,MAAM;AACpB,MAAA8mB,EAAO,QAAQ;AAAA,IAAA,GAGX1mB,IAAY,MAAM;AACtB,MAAAxM,EAAK,aAAa45B,EAAgBpC,GAAkCr7B,EAAM,UAAU,CAAC,CAAC,GAC9EiQ;IAAA,GAGJs2B,IAAsB,CAACC,OAA4B;AACnD,MAAAA,MAAkB5yB,EAAW,gBAAgB,MACjCowB;IAChB,GAGI,EAAE,UAAAwB,MAAaC,MAEfS,IAAoB7lC,EAAS,MAAM;AACvC,cAAQmlC,EAAS,OAAO;AAAA,QACtB,KAAKD,GAAoB;AAChB,iBAAAkB;AAAAA,QACT;AAAA,QACA,KAAKlB,GAAoB;AAAA,QACzB,KAAKA,GAAoB;AAChB,iBAAAmB;AAAAA,MACX;AAAA,IAAA,CACD,GAEKC,IAAiBtmC,EAAS,MACvBq9B,EAAc,QAAQ19B,EAAM,YAAY09B,EAAc,QAAQ19B,EAAM,QAC5E;AAEY,WAAAi3B,EAAA;AAAA,MACX,MAAMjnB;AAAA,IAAA,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChID;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS42B,GAAQllC,GAAQmlC,GAAgB;AACvC,MAAIC,IAAO,OAAO,KAAKplC,CAAM;AAC7B,MAAI,OAAO,uBAAuB;AAChC,QAAIqlC,IAAU,OAAO,sBAAsBrlC,CAAM;AACjD,IAAImlC,MACFE,IAAUA,EAAQ,OAAO,SAAUC,GAAK;AACtC,aAAO,OAAO,yBAAyBtlC,GAAQslC,CAAG,EAAE;AAAA,IAC5D,CAAO,IAEHF,EAAK,KAAK,MAAMA,GAAMC,CAAO;AAAA,EAC9B;AACD,SAAOD;AACT;AACA,SAASG,GAAe/oB,GAAQ;AAC9B,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,QAAIE,IAAS,UAAU,CAAC,KAAK,OAAO,UAAU,CAAC,IAAI;AACnD,IAAI,IAAI,IACNwoB,GAAQ,OAAOxoB,CAAM,GAAG,EAAI,EAAE,QAAQ,SAAUrb,GAAK;AACnDmkC,MAAAA,GAAgBhpB,GAAQnb,GAAKqb,EAAOrb,CAAG,CAAC;AAAA,IAChD,CAAO,IACQ,OAAO,4BAChB,OAAO,iBAAiBmb,GAAQ,OAAO,0BAA0BE,CAAM,CAAC,IAExEwoB,GAAQ,OAAOxoB,CAAM,CAAC,EAAE,QAAQ,SAAUrb,GAAK;AAC7C,aAAO,eAAemb,GAAQnb,GAAK,OAAO,yBAAyBqb,GAAQrb,CAAG,CAAC;AAAA,IACvF,CAAO;AAAA,EAEJ;AACD,SAAOmb;AACT;AACA,SAASipB,GAAQvwB,GAAK;AACpB;AAEA,SAAI,OAAO,UAAW,cAAc,OAAO,OAAO,YAAa,WAC7DuwB,KAAU,SAAUvwB,GAAK;AACvB,WAAO,OAAOA;AAAA,EACpB,IAEIuwB,KAAU,SAAUvwB,GAAK;AACvB,WAAOA,KAAO,OAAO,UAAW,cAAcA,EAAI,gBAAgB,UAAUA,MAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,EAC/H,GAESuwB,GAAQvwB,CAAG;AACpB;AACA,SAASswB,GAAgBtwB,GAAK7T,GAAKrC,GAAO;AACxC,SAAIqC,KAAO6T,IACT,OAAO,eAAeA,GAAK7T,GAAK;AAAA,IAC9B,OAAOrC;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EAChB,CAAK,IAEDkW,EAAI7T,CAAG,IAAIrC,GAENkW;AACT;AACA,SAASwwB,KAAW;AAClB,SAAAA,KAAW,OAAO,UAAU,SAAUlpB,GAAQ;AAC5C,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAIE,IAAS,UAAU,CAAC;AACxB,eAASrb,KAAOqb;AACd,QAAI,OAAO,UAAU,eAAe,KAAKA,GAAQrb,CAAG,MAClDmb,EAAOnb,CAAG,IAAIqb,EAAOrb,CAAG;AAAA,IAG7B;AACD,WAAOmb;AAAA,EACX,GACSkpB,GAAS,MAAM,MAAM,SAAS;AACvC;AACA,SAASC,GAA8BjpB,GAAQkpB,GAAU;AACvD,MAAIlpB,KAAU;AAAM,WAAO;AAC3B,MAAIF,IAAS,CAAA,GACTqpB,IAAa,OAAO,KAAKnpB,CAAM,GAC/Brb,GAAK6D;AACT,OAAKA,IAAI,GAAGA,IAAI2gC,EAAW,QAAQ3gC;AAEjC,IADA7D,IAAMwkC,EAAW3gC,CAAC,GACd,EAAA0gC,EAAS,QAAQvkC,CAAG,KAAK,OAC7Bmb,EAAOnb,CAAG,IAAIqb,EAAOrb,CAAG;AAE1B,SAAOmb;AACT;AACA,SAASspB,GAAyBppB,GAAQkpB,GAAU;AAClD,MAAIlpB,KAAU;AAAM,WAAO;AAC3B,MAAIF,IAASmpB,GAA8BjpB,GAAQkpB,CAAQ,GACvDvkC,GAAK6D;AACT,MAAI,OAAO,uBAAuB;AAChC,QAAI6gC,IAAmB,OAAO,sBAAsBrpB,CAAM;AAC1D,SAAKxX,IAAI,GAAGA,IAAI6gC,EAAiB,QAAQ7gC;AAEvC,MADA7D,IAAM0kC,EAAiB7gC,CAAC,GACpB,EAAA0gC,EAAS,QAAQvkC,CAAG,KAAK,MACxB,OAAO,UAAU,qBAAqB,KAAKqb,GAAQrb,CAAG,MAC3Dmb,EAAOnb,CAAG,IAAIqb,EAAOrb,CAAG;AAAA,EAE3B;AACD,SAAOmb;AACT;AA2BA,IAAIwpB,KAAU;AAEd,SAASC,GAAUC,GAAS;AAC1B,MAAI,OAAO,SAAW,OAAe,OAAO;AAC1C,WAAO,CAAC,CAAe,0BAAU,UAAU,MAAMA,CAAO;AAE5D;AACA,IAAIC,KAAaF,GAAU,uDAAuD,GAC9EG,KAAOH,GAAU,OAAO,GACxBI,KAAUJ,GAAU,UAAU,GAC9BK,KAASL,GAAU,SAAS,KAAK,CAACA,GAAU,SAAS,KAAK,CAACA,GAAU,UAAU,GAC/EM,KAAMN,GAAU,iBAAiB,GACjCO,KAAmBP,GAAU,SAAS,KAAKA,GAAU,UAAU,GAE/DQ,KAAc;AAAA,EAChB,SAAS;AAAA,EACT,SAAS;AACX;AACA,SAASC,GAAG7lB,GAAI9M,GAAOwD,GAAI;AACzB,EAAAsJ,EAAG,iBAAiB9M,GAAOwD,GAAI,CAAC4uB,MAAcM,EAAW;AAC3D;AACA,SAASE,GAAI9lB,GAAI9M,GAAOwD,GAAI;AAC1B,EAAAsJ,EAAG,oBAAoB9M,GAAOwD,GAAI,CAAC4uB,MAAcM,EAAW;AAC9D;AACA,SAASG,GAAyB/lB,GAAeoM,GAAU;AACzD,MAAKA,GAEL;AAAA,QADAA,EAAS,CAAC,MAAM,QAAQA,IAAWA,EAAS,UAAU,CAAC,IACnDpM;AACF,UAAI;AACF,YAAIA,EAAG;AACL,iBAAOA,EAAG,QAAQoM,CAAQ;AACrB,YAAIpM,EAAG;AACZ,iBAAOA,EAAG,kBAAkBoM,CAAQ;AAC/B,YAAIpM,EAAG;AACZ,iBAAOA,EAAG,sBAAsBoM,CAAQ;AAAA,MAE3C,QAAW;AACV,eAAO;AAAA,MACR;AAEH,WAAO;AAAA;AACT;AACA,SAAS4Z,GAAgBhmB,GAAI;AAC3B,SAAOA,EAAG,QAAQA,MAAO,YAAYA,EAAG,KAAK,WAAWA,EAAG,OAAOA,EAAG;AACvE;AACA,SAASimB,GAAyBjmB,GAAeoM,GAA0B8Z,GAAKC,GAAY;AAC1F,MAAInmB,GAAI;AACN,IAAAkmB,IAAMA,KAAO;AACb,OAAG;AACD,UAAI9Z,KAAY,SAASA,EAAS,CAAC,MAAM,MAAMpM,EAAG,eAAekmB,KAAOH,GAAQ/lB,GAAIoM,CAAQ,IAAI2Z,GAAQ/lB,GAAIoM,CAAQ,MAAM+Z,KAAcnmB,MAAOkmB;AAC7I,eAAOlmB;AAET,UAAIA,MAAOkmB;AAAK;AAAA,IAEtB,SAAalmB,IAAKgmB,GAAgBhmB,CAAE;AAAA,EACjC;AACD,SAAO;AACT;AACA,IAAIomB,KAAU;AACd,SAASrvB,GAAYiJ,GAAInf,GAAMwlC,GAAO;AACpC,MAAIrmB,KAAMnf;AACR,QAAImf,EAAG;AACL,MAAAA,EAAG,UAAUqmB,IAAQ,QAAQ,QAAQ,EAAExlC,CAAI;AAAA,SACtC;AACL,UAAIoW,KAAa,MAAM+I,EAAG,YAAY,KAAK,QAAQomB,IAAS,GAAG,EAAE,QAAQ,MAAMvlC,IAAO,KAAK,GAAG;AAC9F,MAAAmf,EAAG,aAAa/I,KAAaovB,IAAQ,MAAMxlC,IAAO,KAAK,QAAQulC,IAAS,GAAG;AAAA,IAC5E;AAEL;AACA,SAASE,GAAItmB,GAAIumB,GAAM5rB,GAAK;AAC1B,MAAI0P,IAAQrK,KAAMA,EAAG;AACrB,MAAIqK,GAAO;AACT,QAAI1P,MAAQ;AACV,aAAI,SAAS,eAAe,SAAS,YAAY,mBAC/CA,IAAM,SAAS,YAAY,iBAAiBqF,GAAI,EAAE,IACzCA,EAAG,iBACZrF,IAAMqF,EAAG,eAEJumB,MAAS,SAAS5rB,IAAMA,EAAI4rB,CAAI;AAEvC,IAAI,EAAEA,KAAQlc,MAAUkc,EAAK,QAAQ,QAAQ,MAAM,OACjDA,IAAO,aAAaA,IAEtBlc,EAAMkc,CAAI,IAAI5rB,KAAO,OAAOA,KAAQ,WAAW,KAAK;AAAA,EAEvD;AACH;AACA,SAAS6rB,GAAOxmB,GAAIymB,GAAU;AAC5B,MAAIC,IAAoB;AACxB,MAAI,OAAO1mB,KAAO;AAChB,IAAA0mB,IAAoB1mB;AAAA;AAEpB,OAAG;AACD,UAAI2mB,IAAYL,GAAItmB,GAAI,WAAW;AACnC,MAAI2mB,KAAaA,MAAc,WAC7BD,IAAoBC,IAAY,MAAMD;AAAA,IAGzC,SAAQ,CAACD,MAAazmB,IAAKA,EAAG;AAEjC,MAAI4mB,IAAW,OAAO,aAAa,OAAO,mBAAmB,OAAO,aAAa,OAAO;AAExF,SAAOA,KAAY,IAAIA,EAASF,CAAiB;AACnD;AACA,SAASG,GAAKX,GAAKY,GAASC,GAAU;AACpC,MAAIb,GAAK;AACP,QAAIc,IAAOd,EAAI,qBAAqBY,CAAO,GACzCziC,IAAI,GACJG,IAAIwiC,EAAK;AACX,QAAID;AACF,aAAO1iC,IAAIG,GAAGH;AACZ,QAAA0iC,EAASC,EAAK3iC,CAAC,GAAGA,CAAC;AAGvB,WAAO2iC;AAAA,EACR;AACD,SAAO;AACT;AACA,SAASC,KAA4B;AACnC,MAAIC,IAAmB,SAAS;AAChC,SAAIA,KAGK,SAAS;AAEpB;AAWA,SAASC,GAAQnnB,GAAIonB,GAA2BC,GAA2BC,GAAWljB,GAAW;AAC/F,MAAI,GAACpE,EAAG,yBAAyBA,MAAO,SACxC;AAAA,QAAIunB,GAAQpe,GAAKC,GAAMoe,GAAQje,GAAOke,GAAQC;AAiB9C,QAhBI1nB,MAAO,UAAUA,EAAG,cAAcA,MAAOinB,QAC3CM,IAASvnB,EAAG,yBACZmJ,IAAMoe,EAAO,KACbne,IAAOme,EAAO,MACdC,IAASD,EAAO,QAChBhe,IAAQge,EAAO,OACfE,IAASF,EAAO,QAChBG,IAAQH,EAAO,UAEfpe,IAAM,GACNC,IAAO,GACPoe,IAAS,OAAO,aAChBje,IAAQ,OAAO,YACfke,IAAS,OAAO,aAChBC,IAAQ,OAAO,cAEZN,KAA6BC,MAA8BrnB,MAAO,WAErEoE,IAAYA,KAAapE,EAAG,YAIxB,CAACslB;AACH;AACE,YAAIlhB,KAAaA,EAAU,0BAA0BkiB,GAAIliB,GAAW,WAAW,MAAM,UAAUijB,KAA6Bf,GAAIliB,GAAW,UAAU,MAAM,WAAW;AACpK,cAAIujB,IAAgBvjB,EAAU;AAG9B,UAAA+E,KAAOwe,EAAc,MAAM,SAASrB,GAAIliB,GAAW,kBAAkB,CAAC,GACtEgF,KAAQue,EAAc,OAAO,SAASrB,GAAIliB,GAAW,mBAAmB,CAAC,GACzEojB,IAASre,IAAMoe,EAAO,QACtBhe,IAAQH,IAAOme,EAAO;AACtB;AAAA,QACD;AAAA,aAEMnjB,IAAYA,EAAU;AAGnC,QAAIkjB,KAAatnB,MAAO,QAAQ;AAE9B,UAAI4nB,IAAWpB,GAAOpiB,KAAapE,CAAE,GACnC6nB,IAASD,KAAYA,EAAS,GAC9BE,IAASF,KAAYA,EAAS;AAChC,MAAIA,MACFze,KAAO2e,GACP1e,KAAQye,GACRH,KAASG,GACTJ,KAAUK,GACVN,IAASre,IAAMse,GACfle,IAAQH,IAAOse;AAAA,IAElB;AACD,WAAO;AAAA,MACL,KAAKve;AAAA,MACL,MAAMC;AAAA,MACN,QAAQoe;AAAA,MACR,OAAOje;AAAA,MACP,OAAOme;AAAA,MACP,QAAQD;AAAA,IACZ;AAAA;AACA;AAMA,SAASM,GAAe/nB,GAAI;AAC1B,MAAIgoB,IAAOb,GAAQnnB,CAAE,GACjBioB,IAAc,SAAS3B,GAAItmB,GAAI,cAAc,CAAC,GAChDkoB,IAAa,SAAS5B,GAAItmB,GAAI,aAAa,CAAC,GAC5CmoB,IAAe,SAAS7B,GAAItmB,GAAI,eAAe,CAAC,GAChDooB,IAAgB,SAAS9B,GAAItmB,GAAI,gBAAgB,CAAC;AACpD,SAAAgoB,EAAK,OAAOE,IAAa,SAAS5B,GAAItmB,GAAI,kBAAkB,CAAC,GAC7DgoB,EAAK,QAAQC,IAAc,SAAS3B,GAAItmB,GAAI,mBAAmB,CAAC,GAEhEgoB,EAAK,QAAQhoB,EAAG,cAAcioB,IAAcE,GAC5CH,EAAK,SAAShoB,EAAG,eAAekoB,IAAaE,GAC7CJ,EAAK,SAASA,EAAK,MAAMA,EAAK,QAC9BA,EAAK,QAAQA,EAAK,OAAOA,EAAK,OACvBA;AACT;AASA,SAASK,GAAeroB,GAAIsoB,GAAQC,GAAY;AAK9C,WAJIC,IAASC,GAA2BzoB,GAAI,EAAI,GAC9C0oB,IAAYvB,GAAQnnB,CAAE,EAAEsoB,CAAM,GAGzBE,KAAQ;AACb,QAAIG,IAAgBxB,GAAQqB,CAAM,EAAED,CAAU,GAC5CK,IAAU;AAMZ,QALIL,MAAe,SAASA,MAAe,SACzCK,IAAUF,KAAaC,IAEvBC,IAAUF,KAAaC,GAErB,CAACC;AAAS,aAAOJ;AACrB,QAAIA,MAAWvB,GAAyB;AAAI;AAC5C,IAAAuB,IAASC,GAA2BD,GAAQ,EAAK;AAAA,EAClD;AACD,SAAO;AACT;AAUA,SAASK,GAAS7oB,GAAI8oB,GAAU/kC,GAASglC,GAAe;AAItD,WAHIC,IAAe,GACjB3kC,IAAI,GACJ4kC,IAAWjpB,EAAG,UACT3b,IAAI4kC,EAAS,UAAQ;AAC1B,QAAIA,EAAS5kC,CAAC,EAAE,MAAM,YAAY,UAAU4kC,EAAS5kC,CAAC,MAAM6kC,GAAS,UAAUH,KAAiBE,EAAS5kC,CAAC,MAAM6kC,GAAS,YAAYjD,GAAQgD,EAAS5kC,CAAC,GAAGN,EAAQ,WAAWic,GAAI,EAAK,GAAG;AACvL,UAAIgpB,MAAiBF;AACnB,eAAOG,EAAS5kC,CAAC;AAEnB,MAAA2kC;AAAA,IACD;AACD,IAAA3kC;AAAA,EACD;AACD,SAAO;AACT;AAQA,SAAS8kC,GAAUnpB,GAAIoM,GAAU;AAE/B,WADIgd,IAAOppB,EAAG,kBACPopB,MAASA,MAASF,GAAS,SAAS5C,GAAI8C,GAAM,SAAS,MAAM,UAAUhd,KAAY,CAAC2Z,GAAQqD,GAAMhd,CAAQ;AAC/G,IAAAgd,IAAOA,EAAK;AAEd,SAAOA,KAAQ;AACjB;AASA,SAAStpC,GAAMkgB,GAAIoM,GAAU;AAC3B,MAAItsB,IAAQ;AACZ,MAAI,CAACkgB,KAAM,CAACA,EAAG;AACb,WAAO;AAIT,SAAOA,IAAKA,EAAG;AACb,IAAIA,EAAG,SAAS,YAAW,MAAO,cAAcA,MAAOkpB,GAAS,UAAU,CAAC9c,KAAY2Z,GAAQ/lB,GAAIoM,CAAQ,MACzGtsB;AAGJ,SAAOA;AACT;AAQA,SAASupC,GAAwBrpB,GAAI;AACnC,MAAIspB,IAAa,GACfC,IAAY,GACZC,IAAcvC,GAAyB;AACzC,MAAIjnB;AACF,OAAG;AACD,UAAI4nB,IAAWpB,GAAOxmB,CAAE,GACtB6nB,IAASD,EAAS,GAClBE,IAASF,EAAS;AACpB,MAAA0B,KAActpB,EAAG,aAAa6nB,GAC9B0B,KAAavpB,EAAG,YAAY8nB;AAAA,IAC7B,SAAQ9nB,MAAOwpB,MAAgBxpB,IAAKA,EAAG;AAE1C,SAAO,CAACspB,GAAYC,CAAS;AAC/B;AAQA,SAASE,GAAc9vB,GAAKtF,GAAK;AAC/B,WAAShQ,KAAKsV;AACZ,QAAKA,EAAI,eAAetV,CAAC;AACzB,eAAS7D,KAAO6T;AACd,YAAIA,EAAI,eAAe7T,CAAG,KAAK6T,EAAI7T,CAAG,MAAMmZ,EAAItV,CAAC,EAAE7D,CAAG;AAAG,iBAAO,OAAO6D,CAAC;AAAA;AAG5E,SAAO;AACT;AACA,SAASokC,GAA2BzoB,GAAI0pB,GAAa;AAEnD,MAAI,CAAC1pB,KAAM,CAACA,EAAG;AAAuB,WAAOinB,GAAyB;AACtE,MAAIjwB,IAAOgJ,GACP2pB,IAAU;AACd;AAEE,QAAI3yB,EAAK,cAAcA,EAAK,eAAeA,EAAK,eAAeA,EAAK,cAAc;AAChF,UAAI4yB,IAAUtD,GAAItvB,CAAI;AACtB,UAAIA,EAAK,cAAcA,EAAK,gBAAgB4yB,EAAQ,aAAa,UAAUA,EAAQ,aAAa,aAAa5yB,EAAK,eAAeA,EAAK,iBAAiB4yB,EAAQ,aAAa,UAAUA,EAAQ,aAAa,WAAW;AACpN,YAAI,CAAC5yB,EAAK,yBAAyBA,MAAS,SAAS;AAAM,iBAAOiwB;AAClE,YAAI0C,KAAWD;AAAa,iBAAO1yB;AACnC,QAAA2yB,IAAU;AAAA,MACX;AAAA,IACF;AAAA,SAEM3yB,IAAOA,EAAK;AACrB,SAAOiwB,GAAyB;AAClC;AACA,SAAS4C,GAAOC,GAAKC,GAAK;AACxB,MAAID,KAAOC;AACT,aAASvpC,KAAOupC;AACd,MAAIA,EAAI,eAAevpC,CAAG,MACxBspC,EAAItpC,CAAG,IAAIupC,EAAIvpC,CAAG;AAIxB,SAAOspC;AACT;AACA,SAASE,GAAYC,GAAOC,GAAO;AACjC,SAAO,KAAK,MAAMD,EAAM,GAAG,MAAM,KAAK,MAAMC,EAAM,GAAG,KAAK,KAAK,MAAMD,EAAM,IAAI,MAAM,KAAK,MAAMC,EAAM,IAAI,KAAK,KAAK,MAAMD,EAAM,MAAM,MAAM,KAAK,MAAMC,EAAM,MAAM,KAAK,KAAK,MAAMD,EAAM,KAAK,MAAM,KAAK,MAAMC,EAAM,KAAK;AAC5N;AACA,IAAIC;AACJ,SAASC,GAAS94B,GAAU+4B,GAAI;AAC9B,SAAO,WAAY;AACjB,QAAI,CAACF,IAAkB;AACrB,UAAItzB,IAAO,WACTD,IAAQ;AACV,MAAIC,EAAK,WAAW,IAClBvF,EAAS,KAAKsF,GAAOC,EAAK,CAAC,CAAC,IAE5BvF,EAAS,MAAMsF,GAAOC,CAAI,GAE5BszB,KAAmB,WAAW,WAAY;AACxC,QAAAA,KAAmB;AAAA,MACpB,GAAEE,CAAE;AAAA,IACN;AAAA,EACL;AACA;AACA,SAASC,KAAiB;AACxB,eAAaH,EAAgB,GAC7BA,KAAmB;AACrB;AACA,SAASI,GAASvqB,GAAInhB,GAAGoI,GAAG;AAC1B,EAAA+Y,EAAG,cAAcnhB,GACjBmhB,EAAG,aAAa/Y;AAClB;AACA,SAASujC,GAAMxqB,GAAI;AACjB,MAAIyqB,IAAU,OAAO,SACjBplC,IAAI,OAAO,UAAU,OAAO;AAChC,SAAIolC,KAAWA,EAAQ,MACdA,EAAQ,IAAIzqB,CAAE,EAAE,UAAU,EAAI,IAC5B3a,IACFA,EAAE2a,CAAE,EAAE,MAAM,EAAI,EAAE,CAAC,IAEnBA,EAAG,UAAU,EAAI;AAE5B;AAeA,IAAI0qB,KAAU,cAAa,oBAAI,KAAM,GAAC,QAAO;AAE7C,SAASC,KAAwB;AAC/B,MAAIC,IAAkB,CAAE,GACtBC;AACF,SAAO;AAAA,IACL,uBAAuB,WAAiC;AAEtD,UADAD,IAAkB,CAAA,GACd,EAAC,KAAK,QAAQ,WAClB;AAAA,YAAI3B,IAAW,CAAA,EAAG,MAAM,KAAK,KAAK,GAAG,QAAQ;AAC7C,QAAAA,EAAS,QAAQ,SAAUtgB,GAAO;AAChC,cAAI,EAAA2d,GAAI3d,GAAO,SAAS,MAAM,UAAUA,MAAUugB,GAAS,QAC3D;AAAA,YAAA0B,EAAgB,KAAK;AAAA,cACnB,QAAQjiB;AAAA,cACR,MAAMwe,GAAQxe,CAAK;AAAA,YAC7B,CAAS;AACD,gBAAImiB,IAAWpG,GAAe,CAAA,GAAIkG,EAAgBA,EAAgB,SAAS,CAAC,EAAE,IAAI;AAGlF,gBAAIjiB,EAAM,uBAAuB;AAC/B,kBAAIoiB,IAAcvE,GAAO7d,GAAO,EAAI;AACpC,cAAIoiB,MACFD,EAAS,OAAOC,EAAY,GAC5BD,EAAS,QAAQC,EAAY;AAAA,YAEhC;AACD,YAAApiB,EAAM,WAAWmiB;AAAA;AAAA,QACzB,CAAO;AAAA;AAAA,IACF;AAAA,IACD,mBAAmB,SAA2BzE,GAAO;AACnD,MAAAuE,EAAgB,KAAKvE,CAAK;AAAA,IAC3B;AAAA,IACD,sBAAsB,SAA8B1qB,GAAQ;AAC1D,MAAAivB,EAAgB,OAAOnB,GAAcmB,GAAiB;AAAA,QACpD,QAAQjvB;AAAA,MAChB,CAAO,GAAG,CAAC;AAAA,IACN;AAAA,IACD,YAAY,SAAoBrK,GAAU;AACxC,UAAIsF,IAAQ;AACZ,UAAI,CAAC,KAAK,QAAQ,WAAW;AAC3B,qBAAai0B,CAAmB,GAC5B,OAAOv5B,KAAa,cAAYA;AACpC;AAAA,MACD;AACD,UAAI05B,IAAY,IACdC,IAAgB;AAClB,MAAAL,EAAgB,QAAQ,SAAUvE,GAAO;AACvC,YAAI6E,IAAO,GACTvvB,IAAS0qB,EAAM,QACfyE,IAAWnvB,EAAO,UAClBwvB,IAAShE,GAAQxrB,CAAM,GACvByvB,IAAezvB,EAAO,cACtB0vB,IAAa1vB,EAAO,YACpB2vB,IAAgBjF,EAAM,MACtBkF,IAAe/E,GAAO7qB,GAAQ,EAAI;AACpC,QAAI4vB,MAEFJ,EAAO,OAAOI,EAAa,GAC3BJ,EAAO,QAAQI,EAAa,IAE9B5vB,EAAO,SAASwvB,GACZxvB,EAAO,yBAELquB,GAAYoB,GAAcD,CAAM,KAAK,CAACnB,GAAYc,GAAUK,CAAM;AAAA,SAErEG,EAAc,MAAMH,EAAO,QAAQG,EAAc,OAAOH,EAAO,WAAWL,EAAS,MAAMK,EAAO,QAAQL,EAAS,OAAOK,EAAO,UAE9HD,IAAOM,GAAkBF,GAAeF,GAAcC,GAAYz0B,EAAM,OAAO,IAK9EozB,GAAYmB,GAAQL,CAAQ,MAC/BnvB,EAAO,eAAemvB,GACtBnvB,EAAO,aAAawvB,GACfD,MACHA,IAAOt0B,EAAM,QAAQ,YAEvBA,EAAM,QAAQ+E,GAAQ2vB,GAAeH,GAAQD,CAAI,IAE/CA,MACFF,IAAY,IACZC,IAAgB,KAAK,IAAIA,GAAeC,CAAI,GAC5C,aAAavvB,EAAO,mBAAmB,GACvCA,EAAO,sBAAsB,WAAW,WAAY;AAClD,UAAAA,EAAO,gBAAgB,GACvBA,EAAO,eAAe,MACtBA,EAAO,WAAW,MAClBA,EAAO,aAAa,MACpBA,EAAO,wBAAwB;AAAA,QAChC,GAAEuvB,CAAI,GACPvvB,EAAO,wBAAwBuvB;AAAA,MAEzC,CAAO,GACD,aAAaL,CAAmB,GAC3BG,IAGHH,IAAsB,WAAW,WAAY;AAC3C,QAAI,OAAOv5B,KAAa,cAAYA;MACrC,GAAE25B,CAAa,IAJZ,OAAO35B,KAAa,cAAYA,KAMtCs5B,IAAkB,CAAA;AAAA,IACnB;AAAA,IACD,SAAS,SAAiBjvB,GAAQ8vB,GAAaN,GAAQn/B,GAAU;AAC/D,UAAIA,GAAU;AACZ,QAAAs6B,GAAI3qB,GAAQ,cAAc,EAAE,GAC5B2qB,GAAI3qB,GAAQ,aAAa,EAAE;AAC3B,YAAIisB,IAAWpB,GAAO,KAAK,EAAE,GAC3BqB,IAASD,KAAYA,EAAS,GAC9BE,IAASF,KAAYA,EAAS,GAC9B8D,KAAcD,EAAY,OAAON,EAAO,SAAStD,KAAU,IAC3D8D,KAAcF,EAAY,MAAMN,EAAO,QAAQrD,KAAU;AAC3D,QAAAnsB,EAAO,aAAa,CAAC,CAAC+vB,GACtB/vB,EAAO,aAAa,CAAC,CAACgwB,GACtBrF,GAAI3qB,GAAQ,aAAa,iBAAiB+vB,IAAa,QAAQC,IAAa,OAAO,GACnF,KAAK,kBAAkBC,GAAQjwB,CAAM,GAErC2qB,GAAI3qB,GAAQ,cAAc,eAAe3P,IAAW,QAAQ,KAAK,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,GAAG,GACjHs6B,GAAI3qB,GAAQ,aAAa,oBAAoB,GAC7C,OAAOA,EAAO,YAAa,YAAY,aAAaA,EAAO,QAAQ,GACnEA,EAAO,WAAW,WAAW,WAAY;AACvC,UAAA2qB,GAAI3qB,GAAQ,cAAc,EAAE,GAC5B2qB,GAAI3qB,GAAQ,aAAa,EAAE,GAC3BA,EAAO,WAAW,IAClBA,EAAO,aAAa,IACpBA,EAAO,aAAa;AAAA,QACrB,GAAE3P,CAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACL;AACA;AACA,SAAS4/B,GAAQjwB,GAAQ;AACvB,SAAOA,EAAO;AAChB;AACA,SAAS6vB,GAAkBF,GAAeR,GAAUK,GAAQpnC,GAAS;AACnE,SAAO,KAAK,KAAK,KAAK,IAAI+mC,EAAS,MAAMQ,EAAc,KAAK,CAAC,IAAI,KAAK,IAAIR,EAAS,OAAOQ,EAAc,MAAM,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,IAAIR,EAAS,MAAMK,EAAO,KAAK,CAAC,IAAI,KAAK,IAAIL,EAAS,OAAOK,EAAO,MAAM,CAAC,CAAC,IAAIpnC,EAAQ;AAC7N;AAEA,IAAI8nC,KAAU,CAAA,GACV/1B,KAAW;AAAA,EACb,qBAAqB;AACvB,GACIg2B,KAAgB;AAAA,EAClB,OAAO,SAAeC,GAAQ;AAE5B,aAASjhB,KAAUhV;AACjB,MAAIA,GAAS,eAAegV,CAAM,KAAK,EAAEA,KAAUihB,OACjDA,EAAOjhB,CAAM,IAAIhV,GAASgV,CAAM;AAGpC,IAAA+gB,GAAQ,QAAQ,SAAUplC,GAAG;AAC3B,UAAIA,EAAE,eAAeslC,EAAO;AAC1B,cAAM,iCAAiC,OAAOA,EAAO,YAAY,iBAAiB;AAAA,IAE1F,CAAK,GACDF,GAAQ,KAAKE,CAAM;AAAA,EACpB;AAAA,EACD,aAAa,SAAqBC,GAAWC,GAAU/rB,GAAK;AAC1D,QAAItJ,IAAQ;AACZ,SAAK,gBAAgB,IACrBsJ,EAAI,SAAS,WAAY;AACvB,MAAAtJ,EAAM,gBAAgB;AAAA,IAC5B;AACI,QAAIs1B,IAAkBF,IAAY;AAClC,IAAAH,GAAQ,QAAQ,SAAUE,GAAQ;AAChC,MAAKE,EAASF,EAAO,UAAU,MAE3BE,EAASF,EAAO,UAAU,EAAEG,CAAe,KAC7CD,EAASF,EAAO,UAAU,EAAEG,CAAe,EAAExH,GAAe;AAAA,QAC1D,UAAUuH;AAAA,MACpB,GAAW/rB,CAAG,CAAC,GAKL+rB,EAAS,QAAQF,EAAO,UAAU,KAAKE,EAASF,EAAO,UAAU,EAAEC,CAAS,KAC9EC,EAASF,EAAO,UAAU,EAAEC,CAAS,EAAEtH,GAAe;AAAA,QACpD,UAAUuH;AAAA,MACpB,GAAW/rB,CAAG,CAAC;AAAA,IAEf,CAAK;AAAA,EACF;AAAA,EACD,mBAAmB,SAA2B+rB,GAAUjsB,GAAIlK,GAAU/R,GAAS;AAC7E,IAAA8nC,GAAQ,QAAQ,SAAUE,GAAQ;AAChC,UAAII,IAAaJ,EAAO;AACxB,UAAI,GAACE,EAAS,QAAQE,CAAU,KAAK,CAACJ,EAAO,sBAC7C;AAAA,YAAIzc,IAAc,IAAIyc,EAAOE,GAAUjsB,GAAIisB,EAAS,OAAO;AAC3D,QAAA3c,EAAY,WAAW2c,GACvB3c,EAAY,UAAU2c,EAAS,SAC/BA,EAASE,CAAU,IAAI7c,GAGvBuV,GAAS/uB,GAAUwZ,EAAY,QAAQ;AAAA;AAAA,IAC7C,CAAK;AACD,aAASxE,KAAUmhB,EAAS;AAC1B,UAAKA,EAAS,QAAQ,eAAenhB,CAAM,GAC3C;AAAA,YAAIshB,IAAW,KAAK,aAAaH,GAAUnhB,GAAQmhB,EAAS,QAAQnhB,CAAM,CAAC;AAC3E,QAAI,OAAOshB,IAAa,QACtBH,EAAS,QAAQnhB,CAAM,IAAIshB;AAAA;AAAA,EAGhC;AAAA,EACD,oBAAoB,SAA4BvrC,GAAMorC,GAAU;AAC9D,QAAII,IAAkB,CAAA;AACtB,WAAAR,GAAQ,QAAQ,SAAUE,GAAQ;AAChC,MAAI,OAAOA,EAAO,mBAAoB,cACtClH,GAASwH,GAAiBN,EAAO,gBAAgB,KAAKE,EAASF,EAAO,UAAU,GAAGlrC,CAAI,CAAC;AAAA,IAC9F,CAAK,GACMwrC;AAAA,EACR;AAAA,EACD,cAAc,SAAsBJ,GAAUprC,GAAM1C,GAAO;AACzD,QAAImuC;AACJ,WAAAT,GAAQ,QAAQ,SAAUE,GAAQ;AAEhC,MAAKE,EAASF,EAAO,UAAU,KAG3BA,EAAO,mBAAmB,OAAOA,EAAO,gBAAgBlrC,CAAI,KAAM,eACpEyrC,IAAgBP,EAAO,gBAAgBlrC,CAAI,EAAE,KAAKorC,EAASF,EAAO,UAAU,GAAG5tC,CAAK;AAAA,IAE5F,CAAK,GACMmuC;AAAA,EACR;AACH;AAEA,SAASC,GAAcC,GAAM;AAC3B,MAAIP,IAAWO,EAAK,UAClBC,IAASD,EAAK,QACd3rC,IAAO2rC,EAAK,MACZE,IAAWF,EAAK,UAChBG,IAAUH,EAAK,SACfI,IAAOJ,EAAK,MACZK,IAASL,EAAK,QACdM,IAAWN,EAAK,UAChBO,IAAWP,EAAK,UAChBQ,IAAoBR,EAAK,mBACzBS,IAAoBT,EAAK,mBACzBU,IAAgBV,EAAK,eACrBW,IAAcX,EAAK,aACnBY,IAAuBZ,EAAK;AAE9B,MADAP,IAAWA,KAAYQ,KAAUA,EAAO/B,EAAO,GAC3C,EAACuB,GACL;AAAA,QAAI/rB,GACFnc,IAAUkoC,EAAS,SACnBoB,IAAS,OAAOxsC,EAAK,OAAO,CAAC,EAAE,YAAW,IAAKA,EAAK,OAAO,CAAC;AAE9D,IAAI,OAAO,eAAe,CAACykC,MAAc,CAACC,KACxCrlB,IAAM,IAAI,YAAYrf,GAAM;AAAA,MAC1B,SAAS;AAAA,MACT,YAAY;AAAA,IAClB,CAAK,KAEDqf,IAAM,SAAS,YAAY,OAAO,GAClCA,EAAI,UAAUrf,GAAM,IAAM,EAAI,IAEhCqf,EAAI,KAAK0sB,KAAQH,GACjBvsB,EAAI,OAAO2sB,KAAUJ,GACrBvsB,EAAI,OAAOwsB,KAAYD,GACvBvsB,EAAI,QAAQysB,GACZzsB,EAAI,WAAW4sB,GACf5sB,EAAI,WAAW6sB,GACf7sB,EAAI,oBAAoB8sB,GACxB9sB,EAAI,oBAAoB+sB,GACxB/sB,EAAI,gBAAgBgtB,GACpBhtB,EAAI,WAAWitB,IAAcA,EAAY,cAAc;AACvD,QAAIG,IAAqB5I,GAAeA,GAAe,IAAI0I,CAAoB,GAAGtB,GAAc,mBAAmBjrC,GAAMorC,CAAQ,CAAC;AAClI,aAASnhB,KAAUwiB;AACjB,MAAAptB,EAAI4K,CAAM,IAAIwiB,EAAmBxiB,CAAM;AAEzC,IAAI2hB,KACFA,EAAO,cAAcvsB,CAAG,GAEtBnc,EAAQspC,CAAM,KAChBtpC,EAAQspC,CAAM,EAAE,KAAKpB,GAAU/rB,CAAG;AAAA;AAEtC;AAEA,IAAIqtB,KAAY,CAAC,KAAK,GAClBC,KAAc,SAAqBxB,GAAWC,GAAU;AAC1D,MAAIO,IAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAE,GAC/EU,IAAgBV,EAAK,KACrBvhC,IAAOg6B,GAAyBuH,GAAMe,EAAS;AACjD,EAAAzB,GAAc,YAAY,KAAK5C,EAAQ,EAAE8C,GAAWC,GAAUvH,GAAe;AAAA,IAC3E,QAAQ+I;AAAA,IACR,UAAUC;AAAA,IACV,SAASC;AAAA,IACT,QAAQlB;AAAA,IACR,QAAQmB;AAAA,IACR,YAAYC;AAAA,IACZ,SAASlB;AAAA,IACT,aAAamB;AAAA,IACb,aAAaC;AAAA,IACb,aAAaZ;AAAA,IACb,gBAAgBjE,GAAS;AAAA,IACzB,eAAegE;AAAA,IACf,UAAUJ;AAAA,IACV,mBAAmBE;AAAA,IACnB,UAAUD;AAAA,IACV,mBAAmBE;AAAA,IACnB,oBAAoBe;AAAA,IACpB,sBAAsBC;AAAA,IACtB,gBAAgB,WAA0B;AACxC,MAAAH,KAAc;AAAA,IACf;AAAA,IACD,eAAe,WAAyB;AACtC,MAAAA,KAAc;AAAA,IACf;AAAA,IACD,uBAAuB,SAA+BjtC,GAAM;AAC1D,MAAAqtC,GAAe;AAAA,QACb,UAAUjC;AAAA,QACV,MAAMprC;AAAA,QACN,eAAeqsC;AAAA,MACvB,CAAO;AAAA,IACF;AAAA,EACL,GAAKjiC,CAAI,CAAC;AACV;AACA,SAASijC,GAAeC,GAAM;AAC5B5B,EAAAA,GAAc7H,GAAe;AAAA,IAC3B,aAAayI;AAAA,IACb,SAASR;AAAA,IACT,UAAUc;AAAA,IACV,QAAQhB;AAAA,IACR,UAAUK;AAAA,IACV,mBAAmBE;AAAA,IACnB,UAAUD;AAAA,IACV,mBAAmBE;AAAA,EACvB,GAAKkB,CAAI,CAAC;AACV;AACA,IAAIV,IACFC,IACAC,IACAlB,IACAmB,IACAC,IACAlB,IACAmB,IACAhB,IACAC,IACAC,IACAC,IACAmB,IACAjB,IACAkB,KAAsB,IACtBC,KAAkB,IAClBC,KAAY,CAAE,GACdC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAd,IACAe,IACAC,IACAC,KAAwB,IACxBC,KAAyB,IACzBC,IAEAC,IACAC,KAAmC,CAAE,GAGrCC,KAAU,IACVC,KAAoB,CAAA,GAGlBC,KAAiB,OAAO,WAAa,KACvCC,KAA0B9J,IAC1B+J,KAAmBlK,MAAQD,KAAa,aAAa,SAErDoK,KAAmBH,MAAkB,CAAC5J,MAAoB,CAACD,MAAO,eAAe,SAAS,cAAc,KAAK,GAC7GiK,KAA0B,WAAY;AACpC,MAAKJ,IAEL;AAAA,QAAIjK;AACF,aAAO;AAET,QAAItlB,IAAK,SAAS,cAAc,GAAG;AACnC,WAAAA,EAAG,MAAM,UAAU,uBACZA,EAAG,MAAM,kBAAkB;AAAA;AACtC,EAAK,GACH4vB,KAAmB,SAA0B5vB,GAAIjc,GAAS;AACxD,MAAI8rC,IAAQvJ,GAAItmB,CAAE,GAChB8vB,IAAU,SAASD,EAAM,KAAK,IAAI,SAASA,EAAM,WAAW,IAAI,SAASA,EAAM,YAAY,IAAI,SAASA,EAAM,eAAe,IAAI,SAASA,EAAM,gBAAgB,GAChKE,IAASlH,GAAS7oB,GAAI,GAAGjc,CAAO,GAChCisC,IAASnH,GAAS7oB,GAAI,GAAGjc,CAAO,GAChCksC,IAAgBF,KAAUzJ,GAAIyJ,CAAM,GACpCG,IAAiBF,KAAU1J,GAAI0J,CAAM,GACrCG,IAAkBF,KAAiB,SAASA,EAAc,UAAU,IAAI,SAASA,EAAc,WAAW,IAAI9I,GAAQ4I,CAAM,EAAE,OAC9HK,IAAmBF,KAAkB,SAASA,EAAe,UAAU,IAAI,SAASA,EAAe,WAAW,IAAI/I,GAAQ6I,CAAM,EAAE;AACpI,MAAIH,EAAM,YAAY;AACpB,WAAOA,EAAM,kBAAkB,YAAYA,EAAM,kBAAkB,mBAAmB,aAAa;AAErG,MAAIA,EAAM,YAAY;AACpB,WAAOA,EAAM,oBAAoB,MAAM,GAAG,EAAE,UAAU,IAAI,aAAa;AAEzE,MAAIE,KAAUE,EAAc,SAAYA,EAAc,UAAa,QAAQ;AACzE,QAAII,IAAqBJ,EAAc,UAAa,SAAS,SAAS;AACtE,WAAOD,MAAWE,EAAe,UAAU,UAAUA,EAAe,UAAUG,KAAsB,aAAa;AAAA,EAClH;AACD,SAAON,MAAWE,EAAc,YAAY,WAAWA,EAAc,YAAY,UAAUA,EAAc,YAAY,WAAWA,EAAc,YAAY,UAAUE,KAAmBL,KAAWD,EAAMJ,EAAgB,MAAM,UAAUO,KAAUH,EAAMJ,EAAgB,MAAM,UAAUU,IAAkBC,IAAmBN,KAAW,aAAa;AACtV,GACDQ,KAAqB,SAA4BC,GAAUC,GAAYC,GAAU;AAC/E,MAAIC,IAAcD,IAAWF,EAAS,OAAOA,EAAS,KACpDI,IAAcF,IAAWF,EAAS,QAAQA,EAAS,QACnDK,IAAkBH,IAAWF,EAAS,QAAQA,EAAS,QACvDM,IAAcJ,IAAWD,EAAW,OAAOA,EAAW,KACtDM,IAAcL,IAAWD,EAAW,QAAQA,EAAW,QACvDO,IAAkBN,IAAWD,EAAW,QAAQA,EAAW;AAC7D,SAAOE,MAAgBG,KAAeF,MAAgBG,KAAeJ,IAAcE,IAAkB,MAAMC,IAAcE,IAAkB;AAC5I,GAODC,KAA8B,SAAqCnyC,GAAGoI,GAAG;AACvE,MAAIgqC;AACJ,SAAA1C,GAAU,KAAK,SAAUtC,GAAU;AACjC,QAAIiF,IAAYjF,EAASvB,EAAO,EAAE,QAAQ;AAC1C,QAAI,GAACwG,KAAa/H,GAAU8C,CAAQ,IACpC;AAAA,UAAIjE,IAAOb,GAAQ8E,CAAQ,GACzBkF,IAAqBtyC,KAAKmpC,EAAK,OAAOkJ,KAAaryC,KAAKmpC,EAAK,QAAQkJ,GACrEE,IAAmBnqC,KAAK+gC,EAAK,MAAMkJ,KAAajqC,KAAK+gC,EAAK,SAASkJ;AACrE,UAAIC,KAAsBC;AACxB,eAAOH,IAAMhF;AAAA;AAAA,EAErB,CAAK,GACMgF;AACR,GACDI,KAAgB,SAAuBttC,GAAS;AAC9C,WAASutC,EAAKnzC,GAAOozC,GAAM;AACzB,WAAO,SAAUC,GAAIC,GAAMhE,GAAQvtB,GAAK;AACtC,UAAIwxB,IAAYF,EAAG,QAAQ,MAAM,QAAQC,EAAK,QAAQ,MAAM,QAAQD,EAAG,QAAQ,MAAM,SAASC,EAAK,QAAQ,MAAM;AACjH,UAAItzC,KAAS,SAASozC,KAAQG;AAG5B,eAAO;AACF,UAAIvzC,KAAS,QAAQA,MAAU;AACpC,eAAO;AACF,UAAIozC,KAAQpzC,MAAU;AAC3B,eAAOA;AACF,UAAI,OAAOA,KAAU;AAC1B,eAAOmzC,EAAKnzC,EAAMqzC,GAAIC,GAAMhE,GAAQvtB,CAAG,GAAGqxB,CAAI,EAAEC,GAAIC,GAAMhE,GAAQvtB,CAAG;AAErE,UAAIyxB,KAAcJ,IAAOC,IAAKC,GAAM,QAAQ,MAAM;AAClD,aAAOtzC,MAAU,MAAQ,OAAOA,KAAU,YAAYA,MAAUwzC,KAAcxzC,EAAM,QAAQA,EAAM,QAAQwzC,CAAU,IAAI;AAAA,IAElI;AAAA,EACK;AACD,MAAIC,IAAQ,CAAA,GACRC,IAAgB9tC,EAAQ;AAC5B,GAAI,CAAC8tC,KAAiBjN,GAAQiN,CAAa,KAAK,cAC9CA,IAAgB;AAAA,IACd,MAAMA;AAAA,EACd,IAEID,EAAM,OAAOC,EAAc,MAC3BD,EAAM,YAAYN,EAAKO,EAAc,MAAM,EAAI,GAC/CD,EAAM,WAAWN,EAAKO,EAAc,GAAG,GACvCD,EAAM,cAAcC,EAAc,aAClC9tC,EAAQ,QAAQ6tC;AACjB,GACD5D,KAAsB,WAA+B;AACnD,EAAI,CAAC2B,MAA2BhC,MAC9BrH,GAAIqH,IAAS,WAAW,MAAM;AAEjC,GACDM,KAAwB,WAAiC;AACvD,EAAI,CAAC0B,MAA2BhC,MAC9BrH,GAAIqH,IAAS,WAAW,EAAE;AAEhC;AAGI4B,MAAkB,CAAC5J,MACrB,SAAS,iBAAiB,SAAS,SAAUzlB,GAAK;AAChD,MAAIouB;AACF,WAAApuB,EAAI,eAAc,GAClBA,EAAI,mBAAmBA,EAAI,mBAC3BA,EAAI,4BAA4BA,EAAI,4BACpCouB,KAAkB,IACX;AAEV,GAAE,EAAI;AAET,IAAIwD,KAAgC,SAAuC5xB,GAAK;AAC9E,MAAIutB,IAAQ;AACV,IAAAvtB,IAAMA,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA;AACrC,QAAI6xB,IAAUf,GAA4B9wB,EAAI,SAASA,EAAI,OAAO;AAClE,QAAI6xB,GAAS;AAEX,UAAI7+B,IAAQ,CAAA;AACZ,eAAS7O,KAAK6b;AACZ,QAAIA,EAAI,eAAe7b,CAAC,MACtB6O,EAAM7O,CAAC,IAAI6b,EAAI7b,CAAC;AAGpB,MAAA6O,EAAM,SAASA,EAAM,SAAS6+B,GAC9B7+B,EAAM,iBAAiB,QACvBA,EAAM,kBAAkB,QACxB6+B,EAAQrH,EAAO,EAAE,YAAYx3B,CAAK;AAAA,IACnC;AAAA,EACF;AACH,GACI8+B,KAAwB,SAA+B9xB,GAAK;AAC9D,EAAIutB,MACFA,GAAO,WAAW/C,EAAO,EAAE,iBAAiBxqB,EAAI,MAAM;AAE1D;AAOA,SAASgpB,GAASlpB,GAAIjc,GAAS;AAC7B,MAAI,EAAEic,KAAMA,EAAG,YAAYA,EAAG,aAAa;AACzC,UAAM,8CAA8C,OAAO,CAAE,EAAC,SAAS,KAAKA,CAAE,CAAC;AAEjF,OAAK,KAAKA,GACV,KAAK,UAAUjc,IAAU8gC,GAAS,CAAE,GAAE9gC,CAAO,GAG7Cic,EAAG0qB,EAAO,IAAI;AACd,MAAI50B,IAAW;AAAA,IACb,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,WAAW,KAAKkK,EAAG,QAAQ,IAAI,QAAQ;AAAA,IAClD,eAAe;AAAA;AAAA,IAEf,YAAY;AAAA;AAAA,IAEZ,uBAAuB;AAAA;AAAA,IAEvB,mBAAmB;AAAA,IACnB,WAAW,WAAqB;AAC9B,aAAO4vB,GAAiB5vB,GAAI,KAAK,OAAO;AAAA,IACzC;AAAA,IACD,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS,SAAiBiyB,GAAcxE,GAAQ;AAC9C,MAAAwE,EAAa,QAAQ,QAAQxE,EAAO,WAAW;AAAA,IAChD;AAAA,IACD,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,kBAAkB;AAAA,IAClB,sBAAsB,OAAO,WAAW,SAAS,QAAQ,SAAS,OAAO,kBAAkB,EAAE,KAAK;AAAA,IAClG,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,MACd,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAAA,IACD,gBAAgBvE,GAAS,mBAAmB,MAAS,kBAAkB,UAAU,CAACzD;AAAA,IAClF,sBAAsB;AAAA,EAC1B;AACE,EAAAqG,GAAc,kBAAkB,MAAM9rB,GAAIlK,CAAQ;AAGlD,WAASjV,KAAQiV;AACf,MAAEjV,KAAQkD,OAAaA,EAAQlD,CAAI,IAAIiV,EAASjV,CAAI;AAEtD,EAAAwwC,GAActtC,CAAO;AAGrB,WAAS2S,KAAM;AACb,IAAIA,EAAG,OAAO,CAAC,MAAM,OAAO,OAAO,KAAKA,CAAE,KAAM,eAC9C,KAAKA,CAAE,IAAI,KAAKA,CAAE,EAAE,KAAK,IAAI;AAKjC,OAAK,kBAAkB3S,EAAQ,gBAAgB,KAAQ2rC,IACnD,KAAK,oBAEP,KAAK,QAAQ,sBAAsB,IAIjC3rC,EAAQ,iBACV8hC,GAAG7lB,GAAI,eAAe,KAAK,WAAW,KAEtC6lB,GAAG7lB,GAAI,aAAa,KAAK,WAAW,GACpC6lB,GAAG7lB,GAAI,cAAc,KAAK,WAAW,IAEnC,KAAK,oBACP6lB,GAAG7lB,GAAI,YAAY,IAAI,GACvB6lB,GAAG7lB,GAAI,aAAa,IAAI,IAE1BuuB,GAAU,KAAK,KAAK,EAAE,GAGtBxqC,EAAQ,SAASA,EAAQ,MAAM,OAAO,KAAK,KAAKA,EAAQ,MAAM,IAAI,IAAI,KAAK,CAAE,CAAA,GAG7E8gC,GAAS,MAAM8F,GAAqB,CAAE;AACxC;AACAzB,GAAS;AAA4C;AAAA,EACnD,aAAaA;AAAA,EACb,kBAAkB,SAA0BvtB,GAAQ;AAClD,IAAI,CAAC,KAAK,GAAG,SAASA,CAAM,KAAKA,MAAW,KAAK,OAC/CmzB,KAAa;AAAA,EAEhB;AAAA,EACD,eAAe,SAAuB5uB,GAAKvE,GAAQ;AACjD,WAAO,OAAO,KAAK,QAAQ,aAAc,aAAa,KAAK,QAAQ,UAAU,KAAK,MAAMuE,GAAKvE,GAAQ8xB,EAAM,IAAI,KAAK,QAAQ;AAAA,EAC7H;AAAA,EACD,aAAa,SAA6CvtB,GAAK;AAC7D,QAAKA,EAAI,YACT;AAAA,UAAItJ,IAAQ,MACVoJ,IAAK,KAAK,IACVjc,IAAU,KAAK,SACfmuC,IAAkBnuC,EAAQ,iBAC1B4jB,IAAOzH,EAAI,MACXiyB,IAAQjyB,EAAI,WAAWA,EAAI,QAAQ,CAAC,KAAKA,EAAI,eAAeA,EAAI,gBAAgB,WAAWA,GAC3FvE,KAAUw2B,KAASjyB,GAAK,QACxBkyB,IAAiBlyB,EAAI,OAAO,eAAeA,EAAI,QAAQA,EAAI,KAAK,CAAC,KAAKA,EAAI,gBAAgBA,EAAI,aAAY,EAAG,CAAC,MAAMvE,GACpH3K,IAASjN,EAAQ;AAInB,UAHAsuC,GAAuBryB,CAAE,GAGrB,CAAAytB,MAGA,0BAAwB,KAAK9lB,CAAI,KAAKzH,EAAI,WAAW,KAAKnc,EAAQ,aAKlE,CAAAquC,EAAe,qBAKf,GAAC,KAAK,mBAAmB3M,MAAU9pB,KAAUA,EAAO,QAAQ,YAAa,MAAK,cAGlFA,IAASsqB,GAAQtqB,GAAQ5X,EAAQ,WAAWic,GAAI,EAAK,GACjD,EAAArE,KAAUA,EAAO,aAGjBkyB,OAAelyB,IAUnB;AAAA,YAJAmxB,KAAWhtC,GAAM6b,CAAM,GACvBqxB,KAAoBltC,GAAM6b,GAAQ5X,EAAQ,SAAS,GAG/C,OAAOiN,KAAW;AACpB,cAAIA,EAAO,KAAK,MAAMkP,GAAKvE,GAAQ,IAAI,GAAG;AACxC,YAAAuyB,GAAe;AAAA,cACb,UAAUt3B;AAAA,cACV,QAAQw7B;AAAA,cACR,MAAM;AAAA,cACN,UAAUz2B;AAAA,cACV,MAAMqE;AAAA,cACN,QAAQA;AAAA,YAClB,CAAS,GACDwtB,GAAY,UAAU52B,GAAO;AAAA,cAC3B,KAAKsJ;AAAA,YACf,CAAS,GACDgyB,KAAmBhyB,EAAI,cAAcA,EAAI,eAAc;AACvD;AAAA,UACD;AAAA,mBACQlP,MACTA,IAASA,EAAO,MAAM,GAAG,EAAE,KAAK,SAAUshC,GAAU;AAElD,cADAA,IAAWrM,GAAQmM,GAAgBE,EAAS,QAAQtyB,GAAI,EAAK,GACzDsyB;AACF,mBAAApE,GAAe;AAAA,cACb,UAAUt3B;AAAA,cACV,QAAQ07B;AAAA,cACR,MAAM;AAAA,cACN,UAAU32B;AAAA,cACV,QAAQqE;AAAA,cACR,MAAMA;AAAA,YAClB,CAAW,GACDwtB,GAAY,UAAU52B,GAAO;AAAA,cAC3B,KAAKsJ;AAAA,YACjB,CAAW,GACM;AAAA,QAEjB,CAAO,GACGlP,IAAQ;AACV,UAAAkhC,KAAmBhyB,EAAI,cAAcA,EAAI,eAAc;AACvD;AAAA,QACD;AAEH,QAAInc,EAAQ,UAAU,CAACkiC,GAAQmM,GAAgBruC,EAAQ,QAAQic,GAAI,EAAK,KAKxE,KAAK,kBAAkBE,GAAKiyB,GAAOx2B,CAAM;AAAA;AAAA;AAAA,EAC1C;AAAA,EACD,mBAAmB,SAAwCuE,GAAiBiyB,GAAyBx2B,GAAQ;AAC3G,QAAI/E,IAAQ,MACVoJ,IAAKpJ,EAAM,IACX7S,IAAU6S,EAAM,SAChB27B,IAAgBvyB,EAAG,eACnBwyB;AACF,QAAI72B,KAAU,CAAC8xB,MAAU9xB,EAAO,eAAeqE,GAAI;AACjD,UAAIuwB,IAAWpJ,GAAQxrB,CAAM;AAoE7B,UAnEA8wB,KAASzsB,GACTytB,KAAS9xB,GACT+xB,KAAWD,GAAO,YAClBG,KAASH,GAAO,aAChBI,KAAalyB,GACbyyB,KAAcrqC,EAAQ,OACtBmlC,GAAS,UAAUuE,IACnBe,KAAS;AAAA,QACP,QAAQf;AAAA,QACR,UAAU0E,KAASjyB,GAAK;AAAA,QACxB,UAAUiyB,KAASjyB,GAAK;AAAA,MAChC,GACM0uB,KAAkBJ,GAAO,UAAU+B,EAAS,MAC5C1B,KAAiBL,GAAO,UAAU+B,EAAS,KAC3C,KAAK,UAAU4B,KAASjyB,GAAK,SAC7B,KAAK,UAAUiyB,KAASjyB,GAAK,SAC7ButB,GAAO,MAAM,aAAa,IAAI,OAC9B+E,IAAc,WAAuB;AAInC,YAHAhF,GAAY,cAAc52B,GAAO;AAAA,UAC/B,KAAKsJ;AAAA,QACf,CAAS,GACGgpB,GAAS,eAAe;AAC1B,UAAAtyB,EAAM,QAAO;AACb;AAAA,QACD;AAGD,QAAAA,EAAM,0BAAyB,GAC3B,CAAC4uB,MAAW5uB,EAAM,oBACpB62B,GAAO,YAAY,KAIrB72B,EAAM,kBAAkBsJ,GAAKiyB,CAAK,GAGlCjE,GAAe;AAAA,UACb,UAAUt3B;AAAA,UACV,MAAM;AAAA,UACN,eAAesJ;AAAA,QACzB,CAAS,GAGDnJ,GAAY02B,IAAQ1pC,EAAQ,aAAa,EAAI;AAAA,MACrD,GAGMA,EAAQ,OAAO,MAAM,GAAG,EAAE,QAAQ,SAAUuuC,GAAU;AACpD,QAAAzL,GAAK4G,IAAQ6E,EAAS,KAAM,GAAEG,EAAiB;AAAA,MACvD,CAAO,GACD5M,GAAG0M,GAAe,YAAYT,EAA6B,GAC3DjM,GAAG0M,GAAe,aAAaT,EAA6B,GAC5DjM,GAAG0M,GAAe,aAAaT,EAA6B,GAC5DjM,GAAG0M,GAAe,WAAW37B,EAAM,OAAO,GAC1CivB,GAAG0M,GAAe,YAAY37B,EAAM,OAAO,GAC3CivB,GAAG0M,GAAe,eAAe37B,EAAM,OAAO,GAG1C4uB,MAAW,KAAK,oBAClB,KAAK,QAAQ,sBAAsB,GACnCiI,GAAO,YAAY,KAErBD,GAAY,cAAc,MAAM;AAAA,QAC9B,KAAKttB;AAAA,MACb,CAAO,GAGGnc,EAAQ,UAAU,CAACA,EAAQ,oBAAoBouC,OAAW,CAAC,KAAK,mBAAmB,EAAE5M,MAAQD,MAAc;AAC7G,YAAI4D,GAAS,eAAe;AAC1B,eAAK,QAAO;AACZ;AAAA,QACD;AAID,QAAArD,GAAG0M,GAAe,WAAW37B,EAAM,mBAAmB,GACtDivB,GAAG0M,GAAe,YAAY37B,EAAM,mBAAmB,GACvDivB,GAAG0M,GAAe,eAAe37B,EAAM,mBAAmB,GAC1DivB,GAAG0M,GAAe,aAAa37B,EAAM,4BAA4B,GACjEivB,GAAG0M,GAAe,aAAa37B,EAAM,4BAA4B,GACjE7S,EAAQ,kBAAkB8hC,GAAG0M,GAAe,eAAe37B,EAAM,4BAA4B,GAC7FA,EAAM,kBAAkB,WAAW47B,GAAazuC,EAAQ,KAAK;AAAA,MACrE;AACQ,QAAAyuC;IAEH;AAAA,EACF;AAAA,EACD,8BAA8B,SAAsEpuC,GAAG;AACrG,QAAI+tC,IAAQ/tC,EAAE,UAAUA,EAAE,QAAQ,CAAC,IAAIA;AACvC,IAAI,KAAK,IAAI,KAAK,IAAI+tC,EAAM,UAAU,KAAK,MAAM,GAAG,KAAK,IAAIA,EAAM,UAAU,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,KAAK,QAAQ,uBAAuB,KAAK,mBAAmB,OAAO,oBAAoB,EAAE,KAChM,KAAK,oBAAmB;AAAA,EAE3B;AAAA,EACD,qBAAqB,WAA+B;AAClD,IAAA1E,MAAUgF,GAAkBhF,EAAM,GAClC,aAAa,KAAK,eAAe,GACjC,KAAK,0BAAyB;AAAA,EAC/B;AAAA,EACD,2BAA2B,WAAqC;AAC9D,QAAI8E,IAAgB,KAAK,GAAG;AAC5B,IAAAzM,GAAIyM,GAAe,WAAW,KAAK,mBAAmB,GACtDzM,GAAIyM,GAAe,YAAY,KAAK,mBAAmB,GACvDzM,GAAIyM,GAAe,eAAe,KAAK,mBAAmB,GAC1DzM,GAAIyM,GAAe,aAAa,KAAK,4BAA4B,GACjEzM,GAAIyM,GAAe,aAAa,KAAK,4BAA4B,GACjEzM,GAAIyM,GAAe,eAAe,KAAK,4BAA4B;AAAA,EACpE;AAAA,EACD,mBAAmB,SAAwCryB,GAAiBiyB,GAAO;AACjF,IAAAA,IAAQA,KAASjyB,EAAI,eAAe,WAAWA,GAC3C,CAAC,KAAK,mBAAmBiyB,IACvB,KAAK,QAAQ,iBACftM,GAAG,UAAU,eAAe,KAAK,YAAY,IACpCsM,IACTtM,GAAG,UAAU,aAAa,KAAK,YAAY,IAE3CA,GAAG,UAAU,aAAa,KAAK,YAAY,KAG7CA,GAAG4H,IAAQ,WAAW,IAAI,GAC1B5H,GAAG4G,IAAQ,aAAa,KAAK,YAAY;AAE3C,QAAI;AACF,MAAI,SAAS,YAEXiG,GAAU,WAAY;AACpB,iBAAS,UAAU;MAC7B,CAAS,IAED,OAAO,eAAe;IAE9B,QAAkB;AAAA,IAAE;AAAA,EACjB;AAAA,EACD,cAAc,SAAsBC,GAAUzyB,GAAK;AAEjD,QADAmuB,KAAsB,IAClB5B,MAAUgB,IAAQ;AACpB,MAAAD,GAAY,eAAe,MAAM;AAAA,QAC/B,KAAKttB;AAAA,MACb,CAAO,GACG,KAAK,mBACP2lB,GAAG,UAAU,YAAYmM,EAAqB;AAEhD,UAAIjuC,IAAU,KAAK;AAGnB,OAAC4uC,KAAY57B,GAAY02B,IAAQ1pC,EAAQ,WAAW,EAAK,GACzDgT,GAAY02B,IAAQ1pC,EAAQ,YAAY,EAAI,GAC5CmlC,GAAS,SAAS,MAClByJ,KAAY,KAAK,gBAGjBzE,GAAe;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,QACN,eAAehuB;AAAA,MACvB,CAAO;AAAA,IACP;AACM,WAAK,SAAQ;AAAA,EAEhB;AAAA,EACD,kBAAkB,WAA4B;AAC5C,QAAIuuB,IAAU;AACZ,WAAK,SAASA,GAAS,SACvB,KAAK,SAASA,GAAS,SACvBT;AAGA,eAFIryB,IAAS,SAAS,iBAAiB8yB,GAAS,SAASA,GAAS,OAAO,GACrEjG,IAAS7sB,GACNA,KAAUA,EAAO,eACtBA,IAASA,EAAO,WAAW,iBAAiB8yB,GAAS,SAASA,GAAS,OAAO,GAC1E9yB,MAAW6sB;AACf,QAAAA,IAAS7sB;AAGX,UADA8xB,GAAO,WAAW/C,EAAO,EAAE,iBAAiB/uB,CAAM,GAC9C6sB;AACF,WAAG;AACD,cAAIA,EAAOkC,EAAO,GAAG;AACnB,gBAAIkI,IAAW;AAOf,gBANAA,IAAWpK,EAAOkC,EAAO,EAAE,YAAY;AAAA,cACrC,SAAS+D,GAAS;AAAA,cAClB,SAASA,GAAS;AAAA,cAClB,QAAQ9yB;AAAA,cACR,QAAQ6sB;AAAA,YACtB,CAAa,GACGoK,KAAY,CAAC,KAAK,QAAQ;AAC5B;AAAA,UAEH;AACD,UAAAj3B,IAAS6sB;AAAA,QACV,SAC6BA,IAASA,EAAO;AAEhD,MAAAyF;IACD;AAAA,EACF;AAAA,EACD,cAAc,SAAsC/tB,GAAK;AACvD,QAAIsuB,IAAQ;AACV,UAAIzqC,IAAU,KAAK,SACjB8uC,IAAoB9uC,EAAQ,mBAC5B+uC,IAAiB/uC,EAAQ,gBACzBouC,IAAQjyB,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GACvC6yB,IAAcpF,MAAWnH,GAAOmH,IAAS,EAAI,GAC7C9F,IAAS8F,MAAWoF,KAAeA,EAAY,GAC/CjL,IAAS6F,MAAWoF,KAAeA,EAAY,GAC/CC,IAAuBxD,MAA2BL,MAAuB9F,GAAwB8F,EAAmB,GACpH8D,KAAMd,EAAM,UAAU3D,GAAO,UAAUsE,EAAe,MAAMjL,KAAU,MAAMmL,IAAuBA,EAAqB,CAAC,IAAI5D,GAAiC,CAAC,IAAI,MAAMvH,KAAU,IACnLqL,KAAMf,EAAM,UAAU3D,GAAO,UAAUsE,EAAe,MAAMhL,KAAU,MAAMkL,IAAuBA,EAAqB,CAAC,IAAI5D,GAAiC,CAAC,IAAI,MAAMtH,KAAU;AAGrL,UAAI,CAACoB,GAAS,UAAU,CAACmF,IAAqB;AAC5C,YAAIwE,KAAqB,KAAK,IAAI,KAAK,IAAIV,EAAM,UAAU,KAAK,MAAM,GAAG,KAAK,IAAIA,EAAM,UAAU,KAAK,MAAM,CAAC,IAAIU;AAChH;AAEF,aAAK,aAAa3yB,GAAK,EAAI;AAAA,MAC5B;AACD,UAAIytB,IAAS;AACX,QAAIoF,KACFA,EAAY,KAAKE,KAAMvE,MAAU,IACjCqE,EAAY,KAAKG,KAAMvE,MAAU,MAEjCoE,IAAc;AAAA,UACZ,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAGE;AAAA,UACH,GAAGC;AAAA,QACf;AAEQ,YAAIC,IAAY,UAAU,OAAOJ,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG;AAC1L,QAAAzM,GAAIqH,IAAS,mBAAmBwF,CAAS,GACzC7M,GAAIqH,IAAS,gBAAgBwF,CAAS,GACtC7M,GAAIqH,IAAS,eAAewF,CAAS,GACrC7M,GAAIqH,IAAS,aAAawF,CAAS,GACnCzE,KAASuE,GACTtE,KAASuE,GACTzE,KAAW0D;AAAA,MACZ;AACD,MAAAjyB,EAAI,cAAcA,EAAI;IACvB;AAAA,EACF;AAAA,EACD,cAAc,WAAwB;AAGpC,QAAI,CAACytB,IAAS;AACZ,UAAIvpB,IAAY,KAAK,QAAQ,iBAAiB,SAAS,OAAOqoB,IAC5DzE,IAAOb,GAAQsG,IAAQ,IAAM+B,IAAyB,IAAMprB,CAAS,GACrErgB,IAAU,KAAK;AAGjB,UAAIyrC,IAAyB;AAG3B,aADAL,KAAsB/qB,GACfkiB,GAAI6I,IAAqB,UAAU,MAAM,YAAY7I,GAAI6I,IAAqB,WAAW,MAAM,UAAUA,OAAwB;AACtI,UAAAA,KAAsBA,GAAoB;AAE5C,QAAIA,OAAwB,SAAS,QAAQA,OAAwB,SAAS,mBACxEA,OAAwB,aAAUA,KAAsBlI,GAAyB,IACrFe,EAAK,OAAOmH,GAAoB,WAChCnH,EAAK,QAAQmH,GAAoB,cAEjCA,KAAsBlI,GAAyB,GAEjDmI,KAAmC/F,GAAwB8F,EAAmB;AAAA,MAC/E;AACD,MAAAxB,KAAUF,GAAO,UAAU,EAAI,GAC/B12B,GAAY42B,IAAS5pC,EAAQ,YAAY,EAAK,GAC9CgT,GAAY42B,IAAS5pC,EAAQ,eAAe,EAAI,GAChDgT,GAAY42B,IAAS5pC,EAAQ,WAAW,EAAI,GAC5CuiC,GAAIqH,IAAS,cAAc,EAAE,GAC7BrH,GAAIqH,IAAS,aAAa,EAAE,GAC5BrH,GAAIqH,IAAS,cAAc,YAAY,GACvCrH,GAAIqH,IAAS,UAAU,CAAC,GACxBrH,GAAIqH,IAAS,OAAO3F,EAAK,GAAG,GAC5B1B,GAAIqH,IAAS,QAAQ3F,EAAK,IAAI,GAC9B1B,GAAIqH,IAAS,SAAS3F,EAAK,KAAK,GAChC1B,GAAIqH,IAAS,UAAU3F,EAAK,MAAM,GAClC1B,GAAIqH,IAAS,WAAW,KAAK,GAC7BrH,GAAIqH,IAAS,YAAY6B,KAA0B,aAAa,OAAO,GACvElJ,GAAIqH,IAAS,UAAU,QAAQ,GAC/BrH,GAAIqH,IAAS,iBAAiB,MAAM,GACpCzE,GAAS,QAAQyE,IACjBvpB,EAAU,YAAYupB,EAAO,GAG7BrH,GAAIqH,IAAS,oBAAoBiB,KAAkB,SAASjB,GAAQ,MAAM,KAAK,IAAI,MAAM,OAAOkB,KAAiB,SAASlB,GAAQ,MAAM,MAAM,IAAI,MAAM,GAAG;AAAA,IAC5J;AAAA,EACF;AAAA,EACD,cAAc,SAAiCztB,GAAiByyB,GAAU;AACxE,QAAI/7B,IAAQ,MACRq7B,IAAe/xB,EAAI,cACnBnc,IAAU6S,EAAM;AAIpB,QAHA42B,GAAY,aAAa,MAAM;AAAA,MAC7B,KAAKttB;AAAA,IACX,CAAK,GACGgpB,GAAS,eAAe;AAC1B,WAAK,QAAO;AACZ;AAAA,IACD;AACD,IAAAsE,GAAY,cAAc,IAAI,GACzBtE,GAAS,kBACZyD,KAAUnC,GAAMiD,EAAM,GACtBd,GAAQ,gBAAgB,IAAI,GAC5BA,GAAQ,YAAY,IACpBA,GAAQ,MAAM,aAAa,IAAI,IAC/B,KAAK,WAAU,GACf51B,GAAY41B,IAAS,KAAK,QAAQ,aAAa,EAAK,GACpDzD,GAAS,QAAQyD,KAInB/1B,EAAM,UAAU87B,GAAU,WAAY;AAEpC,MADAlF,GAAY,SAAS52B,CAAK,GACtB,CAAAsyB,GAAS,kBACRtyB,EAAM,QAAQ,qBACjB61B,GAAO,aAAaE,IAASc,EAAM,GAErC72B,EAAM,WAAU,GAChBs3B,GAAe;AAAA,QACb,UAAUt3B;AAAA,QACV,MAAM;AAAA,MACd,CAAO;AAAA,IACP,CAAK,GACD,CAAC+7B,KAAY57B,GAAY02B,IAAQ1pC,EAAQ,WAAW,EAAI,GAGpD4uC,KACFrE,KAAkB,IAClB13B,EAAM,UAAU,YAAYA,EAAM,kBAAkB,EAAE,MAGtDkvB,GAAI,UAAU,WAAWlvB,EAAM,OAAO,GACtCkvB,GAAI,UAAU,YAAYlvB,EAAM,OAAO,GACvCkvB,GAAI,UAAU,eAAelvB,EAAM,OAAO,GACtCq7B,MACFA,EAAa,gBAAgB,QAC7BluC,EAAQ,WAAWA,EAAQ,QAAQ,KAAK6S,GAAOq7B,GAAcxE,EAAM,IAErE5H,GAAG,UAAU,QAAQjvB,CAAK,GAG1B0vB,GAAImH,IAAQ,aAAa,eAAe,IAE1CY,KAAsB,IACtBz3B,EAAM,eAAe87B,GAAU97B,EAAM,aAAa,KAAKA,GAAO+7B,GAAUzyB,CAAG,CAAC,GAC5E2lB,GAAG,UAAU,eAAejvB,CAAK,GACjCm3B,KAAQ,IACJtI,MACFa,GAAI,SAAS,MAAM,eAAe,MAAM;AAAA,EAE3C;AAAA;AAAA,EAED,aAAa,SAAgCpmB,GAAK;AAChD,QAAIF,IAAK,KAAK,IACZrE,IAASuE,EAAI,QACbqwB,GACAC,GACA4C,GACArvC,IAAU,KAAK,SACf6tC,IAAQ7tC,EAAQ,OAChBsvC,IAAiBnK,GAAS,QAC1BoK,IAAUlF,OAAgBwD,GAC1B2B,IAAUxvC,EAAQ,MAClByvC,IAAerG,MAAekG,GAC9B5C,GACA75B,IAAQ,MACR68B,IAAiB;AACnB,QAAIpE;AAAS;AACb,aAASqE,EAAc7yC,GAAM8yC,GAAO;AAClC,MAAAnG,GAAY3sC,GAAM+V,GAAO8tB,GAAe;AAAA,QACtC,KAAKxkB;AAAA,QACL,SAASozB;AAAA,QACT,MAAM7C,IAAW,aAAa;AAAA,QAC9B,QAAQ2C;AAAA,QACR,UAAU7C;AAAA,QACV,YAAYC;AAAA,QACZ,SAAS+C;AAAA,QACT,cAAcC;AAAA,QACd,QAAQ73B;AAAA,QACR,WAAWi4B;AAAA,QACX,QAAQ,SAAgBj4B,IAAQk4B,IAAO;AACrC,iBAAOC,GAAQrH,IAAQzsB,GAAIytB,IAAQ8C,GAAU50B,IAAQwrB,GAAQxrB,EAAM,GAAGuE,GAAK2zB,EAAK;AAAA,QACjF;AAAA,QACD,SAASE;AAAA,MACjB,GAASJ,CAAK,CAAC;AAAA,IACV;AAGD,aAASK,IAAU;AACjB,MAAAN,EAAc,0BAA0B,GACxC98B,EAAM,sBAAqB,GACvBA,MAAU48B,KACZA,EAAa,sBAAqB;AAAA,IAErC;AAGD,aAASI,EAAUK,GAAW;AAC5B,aAAAP,EAAc,qBAAqB;AAAA,QACjC,WAAWO;AAAA,MACnB,CAAO,GACGA,MAEEX,IACFD,EAAe,WAAU,IAEzBA,EAAe,WAAWz8B,CAAK,GAE7BA,MAAU48B,MAEZz8B,GAAY02B,IAAQN,KAAcA,GAAY,QAAQ,aAAakG,EAAe,QAAQ,YAAY,EAAK,GAC3Gt8B,GAAY02B,IAAQ1pC,EAAQ,YAAY,EAAI,IAE1CopC,OAAgBv2B,KAASA,MAAUsyB,GAAS,SAC9CiE,KAAcv2B,IACLA,MAAUsyB,GAAS,UAAUiE,OACtCA,KAAc,OAIZqG,MAAiB58B,MACnBA,EAAM,wBAAwB+E,IAEhC/E,EAAM,WAAW,WAAY;AAC3B,QAAA88B,EAAc,2BAA2B,GACzC98B,EAAM,wBAAwB;AAAA,MACxC,CAAS,GACGA,MAAU48B,MACZA,EAAa,WAAU,GACvBA,EAAa,wBAAwB,SAKrC73B,MAAW8xB,MAAU,CAACA,GAAO,YAAY9xB,MAAWqE,KAAM,CAACrE,EAAO,cACpEmzB,KAAa,OAIX,CAAC/qC,EAAQ,kBAAkB,CAACmc,EAAI,UAAUvE,MAAW,aACvD8xB,GAAO,WAAW/C,EAAO,EAAE,iBAAiBxqB,EAAI,MAAM,GAGtD,CAAC+zB,KAAanC,GAA8B5xB,CAAG,IAEjD,CAACnc,EAAQ,kBAAkBmc,EAAI,mBAAmBA,EAAI,mBAC/CuzB,IAAiB;AAAA,IACzB;AAGD,aAASM,IAAU;AACjB,MAAAhH,KAAWjtC,GAAM2tC,EAAM,GACvBR,KAAoBntC,GAAM2tC,IAAQ1pC,EAAQ,SAAS,GACnDmqC,GAAe;AAAA,QACb,UAAUt3B;AAAA,QACV,MAAM;AAAA,QACN,MAAMoJ;AAAA,QACN,UAAU+sB;AAAA,QACV,mBAAmBE;AAAA,QACnB,eAAe/sB;AAAA,MACvB,CAAO;AAAA,IACF;AAMD,QALIA,EAAI,mBAAmB,UACzBA,EAAI,cAAcA,EAAI,kBAExBvE,IAASsqB,GAAQtqB,GAAQ5X,EAAQ,WAAWic,GAAI,EAAI,GACpD0zB,EAAc,UAAU,GACpBxK,GAAS;AAAe,aAAOuK;AACnC,QAAIhG,GAAO,SAASvtB,EAAI,MAAM,KAAKvE,EAAO,YAAYA,EAAO,cAAcA,EAAO,cAAc/E,EAAM,0BAA0B+E;AAC9H,aAAOi4B,EAAU,EAAK;AAGxB,QADAtF,KAAkB,IACd+E,KAAkB,CAACtvC,EAAQ,aAAauvC,IAAUC,MAAYH,IAAS1F,OAAajB,MACtFU,OAAgB,SAAS,KAAK,cAAciB,GAAY,UAAU,MAAMiF,GAAgB5F,IAAQvtB,CAAG,MAAM0xB,EAAM,SAAS,MAAMyB,GAAgB5F,IAAQvtB,CAAG,IAAI;AAI7J,UAHAuwB,IAAW,KAAK,cAAcvwB,GAAKvE,CAAM,MAAM,YAC/C40B,IAAWpJ,GAAQsG,EAAM,GACzBiG,EAAc,eAAe,GACzBxK,GAAS;AAAe,eAAOuK;AACnC,UAAIL;AACF,eAAA1F,KAAWjB,IACXuH,KACA,KAAK,WAAU,GACfN,EAAc,QAAQ,GACjBxK,GAAS,kBACR0E,KACFnB,GAAO,aAAagB,IAAQG,EAAM,IAElCnB,GAAO,YAAYgB,EAAM,IAGtBmG,EAAU,EAAI;AAEvB,UAAIM,IAAc/K,GAAUnpB,GAAIjc,EAAQ,SAAS;AACjD,UAAI,CAACmwC,KAAeC,GAAaj0B,GAAKuwB,GAAU,IAAI,KAAK,CAACyD,EAAY,UAAU;AAI9E,YAAIA,MAAgBzG;AAClB,iBAAOmG,EAAU,EAAK;AAUxB,YANIM,KAAel0B,MAAOE,EAAI,WAC5BvE,IAASu4B,IAEPv4B,MACF60B,IAAarJ,GAAQxrB,CAAM,IAEzBm4B,GAAQrH,IAAQzsB,GAAIytB,IAAQ8C,GAAU50B,GAAQ60B,GAAYtwB,GAAK,CAAC,CAACvE,CAAM,MAAM;AAC/E,iBAAAq4B,KACIE,KAAeA,EAAY,cAE7Bl0B,EAAG,aAAaytB,IAAQyG,EAAY,WAAW,IAE/Cl0B,EAAG,YAAYytB,EAAM,GAEvBC,KAAW1tB,GAEX+zB,KACOH,EAAU,EAAI;AAAA,MAE/B,WAAiBM,KAAeE,GAAcl0B,GAAKuwB,GAAU,IAAI,GAAG;AAE5D,YAAI4D,IAAaxL,GAAS7oB,GAAI,GAAGjc,GAAS,EAAI;AAC9C,YAAIswC,MAAe5G;AACjB,iBAAOmG,EAAU,EAAK;AAIxB,YAFAj4B,IAAS04B,GACT7D,IAAarJ,GAAQxrB,CAAM,GACvBm4B,GAAQrH,IAAQzsB,GAAIytB,IAAQ8C,GAAU50B,GAAQ60B,GAAYtwB,GAAK,EAAK,MAAM;AAC5E,iBAAA8zB,KACAh0B,EAAG,aAAaytB,IAAQ4G,CAAU,GAClC3G,KAAW1tB,GAEX+zB,KACOH,EAAU,EAAI;AAAA,MAE/B,WAAiBj4B,EAAO,eAAeqE,GAAI;AACnC,QAAAwwB,IAAarJ,GAAQxrB,CAAM;AAC3B,YAAI24B,IAAY,GACdC,GACAC,IAAiB/G,GAAO,eAAeztB,GACvCy0B,KAAkB,CAACnE,GAAmB7C,GAAO,YAAYA,GAAO,UAAU8C,GAAU50B,EAAO,YAAYA,EAAO,UAAU60B,GAAYC,CAAQ,GAC5IiE,KAAQjE,IAAW,QAAQ,QAC3BkE,IAAkBtM,GAAe1sB,GAAQ,OAAO,KAAK,KAAK0sB,GAAeoF,IAAQ,OAAO,KAAK,GAC7FmH,IAAeD,IAAkBA,EAAgB,YAAY;AAC/D,QAAI7F,OAAenzB,MACjB44B,IAAwB/D,EAAWkE,EAAK,GACxC1F,KAAwB,IACxBC,KAAyB,CAACwF,MAAmB1wC,EAAQ,cAAcywC,IAErEF,IAAYO,GAAkB30B,GAAKvE,GAAQ60B,GAAYC,GAAUgE,KAAkB,IAAI1wC,EAAQ,eAAeA,EAAQ,yBAAyB,OAAOA,EAAQ,gBAAgBA,EAAQ,uBAAuBkrC,IAAwBH,OAAenzB,CAAM;AAC1P,YAAIm5B;AACJ,YAAIR,MAAc,GAAG;AAEnB,cAAIS,IAAYj1C,GAAM2tC,EAAM;AAC5B;AACE,YAAAsH,KAAaT,GACbQ,IAAUpH,GAAS,SAASqH,CAAS;AAAA,iBAC9BD,MAAYxO,GAAIwO,GAAS,SAAS,MAAM,UAAUA,MAAYnH;AAAA,QACxE;AAED,YAAI2G,MAAc,KAAKQ,MAAYn5B;AACjC,iBAAOi4B,EAAU,EAAK;AAExB,QAAA9E,KAAanzB,GACbozB,KAAgBuF;AAChB,YAAIU,IAAcr5B,EAAO,oBACvBk4B,IAAQ;AACV,QAAAA,IAAQS,MAAc;AACtB,YAAIW,IAAanB,GAAQrH,IAAQzsB,GAAIytB,IAAQ8C,GAAU50B,GAAQ60B,GAAYtwB,GAAK2zB,CAAK;AACrF,YAAIoB,MAAe;AACjB,kBAAIA,MAAe,KAAKA,MAAe,QACrCpB,IAAQoB,MAAe,IAEzB5F,KAAU,IACV,WAAW6F,IAAW,EAAE,GACxBlB,KACIH,KAAS,CAACmB,IACZh1B,EAAG,YAAYytB,EAAM,IAErB9xB,EAAO,WAAW,aAAa8xB,IAAQoG,IAAQmB,IAAcr5B,CAAM,GAIjEg5B,KACFpK,GAASoK,GAAiB,GAAGC,IAAeD,EAAgB,SAAS,GAEvEjH,KAAWD,GAAO,YAGd8G,MAA0B,UAAa,CAACtF,OAC1CC,KAAqB,KAAK,IAAIqF,IAAwBpN,GAAQxrB,CAAM,EAAE+4B,EAAK,CAAC,IAE9EX,KACOH,EAAU,EAAI;AAAA,MAExB;AACD,UAAI5zB,EAAG,SAASytB,EAAM;AACpB,eAAOmG,EAAU,EAAK;AAAA,IAEzB;AACD,WAAO;AAAA,EACR;AAAA,EACD,uBAAuB;AAAA,EACvB,gBAAgB,WAA0B;AACxC,IAAA9N,GAAI,UAAU,aAAa,KAAK,YAAY,GAC5CA,GAAI,UAAU,aAAa,KAAK,YAAY,GAC5CA,GAAI,UAAU,eAAe,KAAK,YAAY,GAC9CA,GAAI,UAAU,YAAYgM,EAA6B,GACvDhM,GAAI,UAAU,aAAagM,EAA6B,GACxDhM,GAAI,UAAU,aAAagM,EAA6B;AAAA,EACzD;AAAA,EACD,cAAc,WAAwB;AACpC,QAAIS,IAAgB,KAAK,GAAG;AAC5B,IAAAzM,GAAIyM,GAAe,WAAW,KAAK,OAAO,GAC1CzM,GAAIyM,GAAe,YAAY,KAAK,OAAO,GAC3CzM,GAAIyM,GAAe,aAAa,KAAK,OAAO,GAC5CzM,GAAIyM,GAAe,eAAe,KAAK,OAAO,GAC9CzM,GAAI,UAAU,eAAe,IAAI;AAAA,EAClC;AAAA,EACD,SAAS,SAA4B5lB,GAAK;AACxC,QAAIF,IAAK,KAAK,IACZjc,IAAU,KAAK;AAajB,QAVAgpC,KAAWjtC,GAAM2tC,EAAM,GACvBR,KAAoBntC,GAAM2tC,IAAQ1pC,EAAQ,SAAS,GACnDypC,GAAY,QAAQ,MAAM;AAAA,MACxB,KAAKttB;AAAA,IACX,CAAK,GACDwtB,KAAWD,MAAUA,GAAO,YAG5BV,KAAWjtC,GAAM2tC,EAAM,GACvBR,KAAoBntC,GAAM2tC,IAAQ1pC,EAAQ,SAAS,GAC/CmlC,GAAS,eAAe;AAC1B,WAAK,SAAQ;AACb;AAAA,IACD;AACD,IAAAmF,KAAsB,IACtBY,KAAyB,IACzBD,KAAwB,IACxB,cAAc,KAAK,OAAO,GAC1B,aAAa,KAAK,eAAe,GACjCmG,GAAgB,KAAK,OAAO,GAC5BA,GAAgB,KAAK,YAAY,GAG7B,KAAK,oBACPrP,GAAI,UAAU,QAAQ,IAAI,GAC1BA,GAAI9lB,GAAI,aAAa,KAAK,YAAY,IAExC,KAAK,eAAc,GACnB,KAAK,aAAY,GACbylB,MACFa,GAAI,SAAS,MAAM,eAAe,EAAE,GAEtCA,GAAImH,IAAQ,aAAa,EAAE,GACvBvtB,MACE6tB,OACF7tB,EAAI,cAAcA,EAAI,kBACtB,CAACnc,EAAQ,cAAcmc,EAAI,gBAAe,IAE5CytB,MAAWA,GAAQ,cAAcA,GAAQ,WAAW,YAAYA,EAAO,IACnElB,OAAWiB,MAAYP,MAAeA,GAAY,gBAAgB,YAEpER,MAAWA,GAAQ,cAAcA,GAAQ,WAAW,YAAYA,EAAO,GAErEc,OACE,KAAK,mBACP3H,GAAI2H,IAAQ,WAAW,IAAI,GAE7BgF,GAAkBhF,EAAM,GACxBA,GAAO,MAAM,aAAa,IAAI,IAI1BM,MAAS,CAACM,MACZt3B,GAAY02B,IAAQN,KAAcA,GAAY,QAAQ,aAAa,KAAK,QAAQ,YAAY,EAAK,GAEnGp2B,GAAY02B,IAAQ,KAAK,QAAQ,aAAa,EAAK,GAGnDS,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,eAAextB;AAAA,IACzB,CAAS,GACGusB,OAAWiB,MACTX,MAAY,MAEdmB,GAAe;AAAA,MACb,QAAQR;AAAA,MACR,MAAM;AAAA,MACN,MAAMA;AAAA,MACN,QAAQjB;AAAA,MACR,eAAevsB;AAAA,IAC7B,CAAa,GAGDguB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAextB;AAAA,IAC7B,CAAa,GAGDguB,GAAe;AAAA,MACb,QAAQR;AAAA,MACR,MAAM;AAAA,MACN,MAAMA;AAAA,MACN,QAAQjB;AAAA,MACR,eAAevsB;AAAA,IAC7B,CAAa,GACDguB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAextB;AAAA,IAC7B,CAAa,IAEHitB,MAAeA,GAAY,UAEvBJ,OAAaD,MACXC,MAAY,MAEdmB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAextB;AAAA,IAC/B,CAAe,GACDguB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAextB;AAAA,IAC/B,CAAe,IAIHgpB,GAAS,YAEP6D,MAAY,QAAQA,OAAa,QACnCA,KAAWD,IACXG,KAAoBD,KAEtBkB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAextB;AAAA,IAC3B,CAAW,GAGD,KAAK,KAAI,MAIf,KAAK,SAAQ;AAAA,EACd;AAAA,EACD,UAAU,WAAoB;AAC5B,IAAAstB,GAAY,WAAW,IAAI,GAC3Bf,KAASgB,KAASC,KAAWC,KAAUC,KAASjB,KAAUkB,KAAaC,KAAcU,KAASC,KAAWV,KAAQhB,KAAWE,KAAoBH,KAAWE,KAAoB8B,KAAaC,KAAgB5B,KAAciB,KAAclF,GAAS,UAAUA,GAAS,QAAQA,GAAS,QAAQA,GAAS,SAAS,MAC/SoG,GAAkB,QAAQ,SAAUtvB,GAAI;AACtC,MAAAA,EAAG,UAAU;AAAA,IACnB,CAAK,GACDsvB,GAAkB,SAASZ,KAASC,KAAS;AAAA,EAC9C;AAAA,EACD,aAAa,SAAgCzuB,GAAK;AAChD,YAAQA,EAAI,MAAI;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AACH,aAAK,QAAQA,CAAG;AAChB;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAIutB,OACF,KAAK,YAAYvtB,CAAG,GACpBk1B,GAAgBl1B,CAAG;AAErB;AAAA,MACF,KAAK;AACH,QAAAA,EAAI,eAAc;AAClB;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,SAAS,WAAmB;AAO1B,aANIm1B,IAAQ,CAAE,GACZr1B,GACAipB,IAAW,KAAK,GAAG,UACnB5kC,IAAI,GACJG,IAAIykC,EAAS,QACbllC,IAAU,KAAK,SACVM,IAAIG,GAAGH;AACZ,MAAA2b,IAAKipB,EAAS5kC,CAAC,GACX4hC,GAAQjmB,GAAIjc,EAAQ,WAAW,KAAK,IAAI,EAAK,KAC/CsxC,EAAM,KAAKr1B,EAAG,aAAajc,EAAQ,UAAU,KAAKuxC,GAAYt1B,CAAE,CAAC;AAGrE,WAAOq1B;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,MAAM,SAAcA,GAAOE,GAAc;AACvC,QAAIrqC,IAAQ,CAAE,GACZuhC,IAAS,KAAK;AAChB,SAAK,QAAS,EAAC,QAAQ,SAAUrM,GAAI/7B,GAAG;AACtC,UAAI2b,IAAKysB,EAAO,SAASpoC,CAAC;AAC1B,MAAI4hC,GAAQjmB,GAAI,KAAK,QAAQ,WAAWysB,GAAQ,EAAK,MACnDvhC,EAAMk1B,CAAE,IAAIpgB;AAAA,IAEf,GAAE,IAAI,GACPu1B,KAAgB,KAAK,yBACrBF,EAAM,QAAQ,SAAUjV,GAAI;AAC1B,MAAIl1B,EAAMk1B,CAAE,MACVqM,EAAO,YAAYvhC,EAAMk1B,CAAE,CAAC,GAC5BqM,EAAO,YAAYvhC,EAAMk1B,CAAE,CAAC;AAAA,IAEpC,CAAK,GACDmV,KAAgB,KAAK;EACtB;AAAA;AAAA;AAAA;AAAA,EAID,MAAM,WAAgB;AACpB,QAAIC,IAAQ,KAAK,QAAQ;AACzB,IAAAA,KAASA,EAAM,OAAOA,EAAM,IAAI,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,SAAmBx1B,GAAIoM,GAAU;AACxC,WAAO6Z,GAAQjmB,GAAIoM,KAAY,KAAK,QAAQ,WAAW,KAAK,IAAI,EAAK;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,QAAQ,SAAgBvrB,GAAM1C,GAAO;AACnC,QAAI4F,IAAU,KAAK;AACnB,QAAI5F,MAAU;AACZ,aAAO4F,EAAQlD,CAAI;AAEnB,QAAIyrC,IAAgBR,GAAc,aAAa,MAAMjrC,GAAM1C,CAAK;AAChE,IAAI,OAAOmuC,IAAkB,MAC3BvoC,EAAQlD,CAAI,IAAIyrC,IAEhBvoC,EAAQlD,CAAI,IAAI1C,GAEd0C,MAAS,WACXwwC,GAActtC,CAAO;AAAA,EAG1B;AAAA;AAAA;AAAA;AAAA,EAID,SAAS,WAAmB;AAC1B,IAAAypC,GAAY,WAAW,IAAI;AAC3B,QAAIxtB,IAAK,KAAK;AACd,IAAAA,EAAG0qB,EAAO,IAAI,MACd5E,GAAI9lB,GAAI,aAAa,KAAK,WAAW,GACrC8lB,GAAI9lB,GAAI,cAAc,KAAK,WAAW,GACtC8lB,GAAI9lB,GAAI,eAAe,KAAK,WAAW,GACnC,KAAK,oBACP8lB,GAAI9lB,GAAI,YAAY,IAAI,GACxB8lB,GAAI9lB,GAAI,aAAa,IAAI,IAG3B,MAAM,UAAU,QAAQ,KAAKA,EAAG,iBAAiB,aAAa,GAAG,SAAUA,GAAI;AAC7E,MAAAA,EAAG,gBAAgB,WAAW;AAAA,IACpC,CAAK,GACD,KAAK,QAAO,GACZ,KAAK,0BAAyB,GAC9BuuB,GAAU,OAAOA,GAAU,QAAQ,KAAK,EAAE,GAAG,CAAC,GAC9C,KAAK,KAAKvuB,IAAK;AAAA,EAChB;AAAA,EACD,YAAY,WAAsB;AAChC,QAAI,CAAC8tB,IAAa;AAEhB,UADAN,GAAY,aAAa,IAAI,GACzBtE,GAAS;AAAe;AAC5B,MAAA5C,GAAIqG,IAAS,WAAW,MAAM,GAC1B,KAAK,QAAQ,qBAAqBA,GAAQ,cAC5CA,GAAQ,WAAW,YAAYA,EAAO,GAExCmB,KAAc;AAAA,IACf;AAAA,EACF;AAAA,EACD,YAAY,SAAoBX,GAAa;AAC3C,QAAIA,EAAY,gBAAgB,SAAS;AACvC,WAAK,WAAU;AACf;AAAA,IACD;AACD,QAAIW,IAAa;AAEf,UADAN,GAAY,aAAa,IAAI,GACzBtE,GAAS;AAAe;AAG5B,MAAIuE,GAAO,cAAchB,MAAU,CAAC,KAAK,QAAQ,MAAM,cACrDA,GAAO,aAAaE,IAASc,EAAM,IAC1BG,KACTnB,GAAO,aAAaE,IAASiB,EAAM,IAEnCnB,GAAO,YAAYE,EAAO,GAExB,KAAK,QAAQ,MAAM,eACrB,KAAK,QAAQc,IAAQd,EAAO,GAE9BrG,GAAIqG,IAAS,WAAW,EAAE,GAC1BmB,KAAc;AAAA,IACf;AAAA,EACF;AACH;AACA,SAASsH,GAA2Bl1B,GAAK;AACvC,EAAIA,EAAI,iBACNA,EAAI,aAAa,aAAa,SAEhCA,EAAI,cAAcA,EAAI;AACxB;AACA,SAAS4zB,GAAQjH,GAAQD,GAAMa,GAAQ8C,GAAU7D,GAAU8D,GAAYtD,GAAeuI,GAAiB;AACrG,MAAIv1B,GACF+rB,IAAWY,EAAOnC,EAAO,GACzBgL,IAAWzJ,EAAS,QAAQ,QAC5B0J;AAEF,SAAI,OAAO,eAAe,CAACrQ,MAAc,CAACC,KACxCrlB,IAAM,IAAI,YAAY,QAAQ;AAAA,IAC5B,SAAS;AAAA,IACT,YAAY;AAAA,EAClB,CAAK,KAEDA,IAAM,SAAS,YAAY,OAAO,GAClCA,EAAI,UAAU,QAAQ,IAAM,EAAI,IAElCA,EAAI,KAAK0sB,GACT1sB,EAAI,OAAO2sB,GACX3sB,EAAI,UAAUutB,GACdvtB,EAAI,cAAcqwB,GAClBrwB,EAAI,UAAUwsB,KAAYE,GAC1B1sB,EAAI,cAAcswB,KAAcrJ,GAAQyF,CAAI,GAC5C1sB,EAAI,kBAAkBu1B,GACtBv1B,EAAI,gBAAgBgtB,GACpBL,EAAO,cAAc3sB,CAAG,GACpBw1B,MACFC,IAASD,EAAS,KAAKzJ,GAAU/rB,GAAKgtB,CAAa,IAE9CyI;AACT;AACA,SAASlD,GAAkBzyB,GAAI;AAC7B,EAAAA,EAAG,YAAY;AACjB;AACA,SAASk1B,KAAY;AACnB,EAAA7F,KAAU;AACZ;AACA,SAAS+E,GAAcl0B,GAAKuwB,GAAUxE,GAAU;AAC9C,MAAI2J,IAAczO,GAAQ0B,GAASoD,EAAS,IAAI,GAAGA,EAAS,SAAS,EAAI,CAAC,GACtE4J,IAAsB9N,GAAekE,EAAS,EAAE,GAChD6J,IAAS;AACb,SAAOrF,IAAWvwB,EAAI,UAAU21B,EAAoB,OAAOC,KAAU51B,EAAI,UAAU01B,EAAY,OAAO11B,EAAI,UAAU01B,EAAY,QAAQ11B,EAAI,UAAU21B,EAAoB,MAAMC,KAAU51B,EAAI,UAAU01B,EAAY,UAAU11B,EAAI,UAAU01B,EAAY;AAC1P;AACA,SAASzB,GAAaj0B,GAAKuwB,GAAUxE,GAAU;AAC7C,MAAI8J,IAAa5O,GAAQgC,GAAU8C,EAAS,IAAIA,EAAS,QAAQ,SAAS,CAAC,GACvE4J,IAAsB9N,GAAekE,EAAS,EAAE,GAChD6J,IAAS;AACb,SAAOrF,IAAWvwB,EAAI,UAAU21B,EAAoB,QAAQC,KAAU51B,EAAI,UAAU61B,EAAW,UAAU71B,EAAI,UAAU61B,EAAW,OAAO71B,EAAI,UAAU21B,EAAoB,SAASC,KAAU51B,EAAI,UAAU61B,EAAW,SAAS71B,EAAI,UAAU61B,EAAW;AAC3P;AACA,SAASlB,GAAkB30B,GAAKvE,GAAQ60B,GAAYC,GAAUuF,GAAeC,GAAuBC,GAAYC,GAAc;AAC5H,MAAIC,IAAc3F,IAAWvwB,EAAI,UAAUA,EAAI,SAC7Cm2B,IAAe5F,IAAWD,EAAW,SAASA,EAAW,OACzD8F,IAAW7F,IAAWD,EAAW,MAAMA,EAAW,MAClD+F,IAAW9F,IAAWD,EAAW,SAASA,EAAW,OACrDgG,IAAS;AACX,MAAI,CAACN;AAEH,QAAIC,KAAgBjH,KAAqBmH,IAAeL;AAOtD,UAJI,CAAChH,OAA0BD,OAAkB,IAAIqH,IAAcE,IAAWD,IAAeJ,IAAwB,IAAIG,IAAcG,IAAWF,IAAeJ,IAAwB,OAEvLjH,KAAwB,KAErBA;AAOH,QAAAwH,IAAS;AAAA,eALLzH,OAAkB,IAAIqH,IAAcE,IAAWpH,KACjDkH,IAAcG,IAAWrH;AACzB,eAAO,CAACH;AAAA,eAORqH,IAAcE,IAAWD,KAAgB,IAAIL,KAAiB,KAAKI,IAAcG,IAAWF,KAAgB,IAAIL,KAAiB;AACnI,aAAOS,GAAoB96B,CAAM;AAAA;AAKvC,SADA66B,IAASA,KAAUN,GACfM,MAEEJ,IAAcE,IAAWD,IAAeJ,IAAwB,KAAKG,IAAcG,IAAWF,IAAeJ,IAAwB,KAChIG,IAAcE,IAAWD,IAAe,IAAI,IAAI,KAGpD;AACT;AAQA,SAASI,GAAoB96B,GAAQ;AACnC,SAAI7b,GAAM2tC,EAAM,IAAI3tC,GAAM6b,CAAM,IACvB,IAEA;AAEX;AAQA,SAAS25B,GAAYt1B,GAAI;AAIvB,WAHI02B,IAAM12B,EAAG,UAAUA,EAAG,YAAYA,EAAG,MAAMA,EAAG,OAAOA,EAAG,aAC1D3b,IAAIqyC,EAAI,QACRC,IAAM,GACDtyC;AACL,IAAAsyC,KAAOD,EAAI,WAAWryC,CAAC;AAEzB,SAAOsyC,EAAI,SAAS,EAAE;AACxB;AACA,SAAStE,GAAuBuE,GAAM;AACpC,EAAAtH,GAAkB,SAAS;AAG3B,WAFIuH,IAASD,EAAK,qBAAqB,OAAO,GAC1CE,IAAMD,EAAO,QACVC,OAAO;AACZ,QAAI92B,IAAK62B,EAAOC,CAAG;AACnB,IAAA92B,EAAG,WAAWsvB,GAAkB,KAAKtvB,CAAE;AAAA,EACxC;AACH;AACA,SAAS0yB,GAAUh8B,GAAI;AACrB,SAAO,WAAWA,GAAI,CAAC;AACzB;AACA,SAASy+B,GAAgB/U,GAAI;AAC3B,SAAO,aAAaA,CAAE;AACxB;AAGImP,MACF1J,GAAG,UAAU,aAAa,SAAU3lB,GAAK;AACvC,GAAKgpB,GAAS,UAAUmF,OAAwBnuB,EAAI,cAClDA,EAAI,eAAc;AAExB,CAAG;AAIHgpB,GAAS,QAAQ;AAAA,EACf,IAAIrD;AAAA,EACJ,KAAKC;AAAA,EACL,KAAKQ;AAAA,EACL,MAAMO;AAAA,EACN,IAAI,SAAY7mB,GAAIoM,GAAU;AAC5B,WAAO,CAAC,CAAC6Z,GAAQjmB,GAAIoM,GAAUpM,GAAI,EAAK;AAAA,EACzC;AAAA,EACD,QAAQ6pB;AAAA,EACR,UAAUO;AAAA,EACV,SAASnE;AAAA,EACT,aAAalvB;AAAAA,EACb,OAAOyzB;AAAA,EACP,OAAO1qC;AAAA,EACP,UAAU4yC;AAAA,EACV,gBAAgByC;AAAA,EAChB,iBAAiBvF;AAAA,EACjB,UAAU/G;AACZ;AAOAK,GAAS,MAAM,SAAU7sB,GAAS;AAChC,SAAOA,EAAQquB,EAAO;AACxB;AAMAxB,GAAS,QAAQ,WAAY;AAC3B,WAAS6N,IAAO,UAAU,QAAQlL,IAAU,IAAI,MAAMkL,CAAI,GAAGC,IAAO,GAAGA,IAAOD,GAAMC;AAClF,IAAAnL,EAAQmL,CAAI,IAAI,UAAUA,CAAI;AAEhC,EAAInL,EAAQ,CAAC,EAAE,gBAAgB,UAAOA,IAAUA,EAAQ,CAAC,IACzDA,EAAQ,QAAQ,SAAUE,GAAQ;AAChC,QAAI,CAACA,EAAO,aAAa,CAACA,EAAO,UAAU;AACzC,YAAM,gEAAgE,OAAO,CAAE,EAAC,SAAS,KAAKA,CAAM,CAAC;AAEvG,IAAIA,EAAO,UAAO7C,GAAS,QAAQxE,GAAeA,GAAe,CAAE,GAAEwE,GAAS,KAAK,GAAG6C,EAAO,KAAK,IAClGD,GAAc,MAAMC,CAAM;AAAA,EAC9B,CAAG;AACH;AAOA7C,GAAS,SAAS,SAAUlpB,GAAIjc,GAAS;AACvC,SAAO,IAAImlC,GAASlpB,GAAIjc,CAAO;AACjC;AAGAmlC,GAAS,UAAU/D;AAEnB,IAAI8R,KAAc,CAAE,GAClBC,IACAC,IACAC,KAAY,IACZC,IACAC,IACAC,IACAC;AACF,SAASC,KAAmB;AAC1B,WAASC,IAAa;AACpB,SAAK,WAAW;AAAA,MACd,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,IACpB;AAGI,aAAShhC,KAAM;AACb,MAAIA,EAAG,OAAO,CAAC,MAAM,OAAO,OAAO,KAAKA,CAAE,KAAM,eAC9C,KAAKA,CAAE,IAAI,KAAKA,CAAE,EAAE,KAAK,IAAI;AAAA,EAGlC;AACD,SAAAghC,EAAW,YAAY;AAAA,IACrB,aAAa,SAAqBlL,GAAM;AACtC,UAAIU,IAAgBV,EAAK;AACzB,MAAI,KAAK,SAAS,kBAChB3G,GAAG,UAAU,YAAY,KAAK,iBAAiB,IAE3C,KAAK,QAAQ,iBACfA,GAAG,UAAU,eAAe,KAAK,yBAAyB,IACjDqH,EAAc,UACvBrH,GAAG,UAAU,aAAa,KAAK,yBAAyB,IAExDA,GAAG,UAAU,aAAa,KAAK,yBAAyB;AAAA,IAG7D;AAAA,IACD,mBAAmB,SAA2B8R,GAAO;AACnD,UAAIzK,IAAgByK,EAAM;AAE1B,MAAI,CAAC,KAAK,QAAQ,kBAAkB,CAACzK,EAAc,UACjD,KAAK,kBAAkBA,CAAa;AAAA,IAEvC;AAAA,IACD,MAAM,WAAgB;AACpB,MAAI,KAAK,SAAS,kBAChBpH,GAAI,UAAU,YAAY,KAAK,iBAAiB,KAEhDA,GAAI,UAAU,eAAe,KAAK,yBAAyB,GAC3DA,GAAI,UAAU,aAAa,KAAK,yBAAyB,GACzDA,GAAI,UAAU,aAAa,KAAK,yBAAyB,IAE3D8R,MACAC,MACAvN;IACD;AAAA,IACD,SAAS,WAAmB;AAC1B,MAAAiN,KAAaJ,KAAeD,KAAWE,KAAYI,KAA6BH,KAAkBC,KAAkB,MACpHL,GAAY,SAAS;AAAA,IACtB;AAAA,IACD,2BAA2B,SAAmC/2B,GAAK;AACjE,WAAK,kBAAkBA,GAAK,EAAI;AAAA,IACjC;AAAA,IACD,mBAAmB,SAA2BA,GAAKyyB,GAAU;AAC3D,UAAI/7B,IAAQ,MACR/X,KAAKqhB,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SAC3CjZ,KAAKiZ,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SACzClJ,IAAO,SAAS,iBAAiBnY,GAAGoI,CAAC;AAOvC,UANAswC,KAAar3B,GAMTyyB,KAAY,KAAK,QAAQ,2BAA2BpN,MAAQD,MAAcG,IAAQ;AACpF,QAAAqS,GAAW53B,GAAK,KAAK,SAASlJ,GAAM27B,CAAQ;AAG5C,YAAIoF,IAAiBtP,GAA2BzxB,GAAM,EAAI;AAC1D,QAAIogC,OAAc,CAACI,MAA8B34C,MAAMw4C,MAAmBpwC,MAAMqwC,QAC9EE,MAA8BI,GAA+B,GAE7DJ,KAA6B,YAAY,WAAY;AACnD,cAAIQ,IAAUvP,GAA2B,SAAS,iBAAiB5pC,GAAGoI,CAAC,GAAG,EAAI;AAC9E,UAAI+wC,MAAYD,MACdA,IAAiBC,GACjBH,OAEFC,GAAW53B,GAAKtJ,EAAM,SAASohC,GAASrF,CAAQ;AAAA,QACjD,GAAE,EAAE,GACL0E,KAAkBx4C,GAClBy4C,KAAkBrwC;AAAA,MAE5B,OAAa;AAEL,YAAI,CAAC,KAAK,QAAQ,gBAAgBwhC,GAA2BzxB,GAAM,EAAI,MAAMiwB,MAA6B;AACxG,UAAA4Q;AACA;AAAA,QACD;AACD,QAAAC,GAAW53B,GAAK,KAAK,SAASuoB,GAA2BzxB,GAAM,EAAK,GAAG,EAAK;AAAA,MAC7E;AAAA,IACF;AAAA,EACL,GACS6tB,GAAS6S,GAAY;AAAA,IAC1B,YAAY;AAAA,IACZ,qBAAqB;AAAA,EACzB,CAAG;AACH;AACA,SAASG,KAAmB;AAC1B,EAAAZ,GAAY,QAAQ,SAAUa,GAAY;AACxC,kBAAcA,EAAW,GAAG;AAAA,EAChC,CAAG,GACDb,KAAc,CAAA;AAChB;AACA,SAASW,KAAkC;AACzC,gBAAcJ,EAA0B;AAC1C;AACA,IAAIM,KAAa1N,GAAS,SAAUlqB,GAAKnc,GAAS0oC,GAAQwL,GAAY;AAEpE,MAAKl0C,EAAQ,QACb;AAAA,QAAIlF,KAAKqhB,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SAC3CjZ,KAAKiZ,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SACzCg4B,IAAOn0C,EAAQ,mBACfo0C,IAAQp0C,EAAQ,aAChBylC,IAAcvC,GAAyB,GACrCmR,IAAqB,IACvBC;AAGF,IAAIlB,OAAiB1K,MACnB0K,KAAe1K,GACfoL,MACAX,KAAWnzC,EAAQ,QACnBs0C,IAAiBt0C,EAAQ,UACrBmzC,OAAa,OACfA,KAAWzO,GAA2BgE,GAAQ,EAAI;AAGtD,QAAI6L,IAAY,GACZC,IAAgBrB;AACpB,OAAG;AACD,UAAIl3B,IAAKu4B,GACPvQ,IAAOb,GAAQnnB,CAAE,GACjBmJ,IAAM6e,EAAK,KACXR,IAASQ,EAAK,QACd5e,IAAO4e,EAAK,MACZze,IAAQye,EAAK,OACbN,IAAQM,EAAK,OACbP,IAASO,EAAK,QACdwQ,IAAa,QACbC,IAAa,QACbC,IAAc14B,EAAG,aACjB24B,IAAe34B,EAAG,cAClB6vB,KAAQvJ,GAAItmB,CAAE,GACd44B,KAAa54B,EAAG,YAChB64B,IAAa74B,EAAG;AAClB,MAAIA,MAAOwpB,KACTgP,IAAa9Q,IAAQgR,MAAgB7I,GAAM,cAAc,UAAUA,GAAM,cAAc,YAAYA,GAAM,cAAc,YACvH4I,IAAahR,IAASkR,MAAiB9I,GAAM,cAAc,UAAUA,GAAM,cAAc,YAAYA,GAAM,cAAc,eAEzH2I,IAAa9Q,IAAQgR,MAAgB7I,GAAM,cAAc,UAAUA,GAAM,cAAc,WACvF4I,IAAahR,IAASkR,MAAiB9I,GAAM,cAAc,UAAUA,GAAM,cAAc;AAE3F,UAAIiJ,IAAKN,MAAe,KAAK,IAAIjvB,IAAQ1qB,CAAC,KAAKq5C,KAAQU,KAAalR,IAAQgR,MAAgB,KAAK,IAAItvB,IAAOvqB,CAAC,KAAKq5C,KAAQ,CAAC,CAACU,KACxHG,IAAKN,MAAe,KAAK,IAAIjR,IAASvgC,CAAC,KAAKixC,KAAQW,IAAapR,IAASkR,MAAiB,KAAK,IAAIxvB,IAAMliB,CAAC,KAAKixC,KAAQ,CAAC,CAACW;AAC9H,UAAI,CAAC5B,GAAYqB,CAAS;AACxB,iBAASj0C,IAAI,GAAGA,KAAKi0C,GAAWj0C;AAC9B,UAAK4yC,GAAY5yC,CAAC,MAChB4yC,GAAY5yC,CAAC,IAAI;AAIvB,OAAI4yC,GAAYqB,CAAS,EAAE,MAAMQ,KAAM7B,GAAYqB,CAAS,EAAE,MAAMS,KAAM9B,GAAYqB,CAAS,EAAE,OAAOt4B,OACtGi3B,GAAYqB,CAAS,EAAE,KAAKt4B,GAC5Bi3B,GAAYqB,CAAS,EAAE,KAAKQ,GAC5B7B,GAAYqB,CAAS,EAAE,KAAKS,GAC5B,cAAc9B,GAAYqB,CAAS,EAAE,GAAG,IACpCQ,KAAM,KAAKC,KAAM,OACnBX,IAAqB,IAErBnB,GAAYqB,CAAS,EAAE,MAAM,aAAY,WAAY;AAEnD,QAAIL,KAAc,KAAK,UAAU,KAC/B/O,GAAS,OAAO,aAAaqO,EAAU;AAEzC,YAAIyB,IAAgB/B,GAAY,KAAK,KAAK,EAAE,KAAKA,GAAY,KAAK,KAAK,EAAE,KAAKkB,IAAQ,GAClFc,IAAgBhC,GAAY,KAAK,KAAK,EAAE,KAAKA,GAAY,KAAK,KAAK,EAAE,KAAKkB,IAAQ;AACtF,QAAI,OAAOE,KAAmB,cACxBA,EAAe,KAAKnP,GAAS,QAAQ,WAAWwB,EAAO,GAAGuO,GAAeD,GAAe94B,GAAKq3B,IAAYN,GAAY,KAAK,KAAK,EAAE,EAAE,MAAM,cAI/I1M,GAAS0M,GAAY,KAAK,KAAK,EAAE,IAAIgC,GAAeD,CAAa;AAAA,MAClE,GAAC,KAAK;AAAA,QACL,OAAOV;AAAA,MACjB,CAAS,GAAG,EAAE,KAGVA;AAAA,IACJ,SAAWv0C,EAAQ,gBAAgBw0C,MAAkB/O,MAAgB+O,IAAgB9P,GAA2B8P,GAAe,EAAK;AAClI,IAAAnB,KAAYgB;AAAA;AACd,GAAG,EAAE,GAEDc,KAAO,SAAc1M,GAAM;AAC7B,MAAIU,IAAgBV,EAAK,eACvBW,IAAcX,EAAK,aACnBiB,IAASjB,EAAK,QACd6G,IAAiB7G,EAAK,gBACtB2M,IAAwB3M,EAAK,uBAC7B4M,IAAqB5M,EAAK,oBAC1B6M,IAAuB7M,EAAK;AAC9B,MAAKU,GACL;AAAA,QAAIoM,IAAanM,KAAekG;AAChC,IAAA+F;AACA,QAAIjH,IAAQjF,EAAc,kBAAkBA,EAAc,eAAe,SAASA,EAAc,eAAe,CAAC,IAAIA,GAChHvxB,IAAS,SAAS,iBAAiBw2B,EAAM,SAASA,EAAM,OAAO;AACnE,IAAAkH,KACIC,KAAc,CAACA,EAAW,GAAG,SAAS39B,CAAM,MAC9Cw9B,EAAsB,OAAO,GAC7B,KAAK,QAAQ;AAAA,MACX,QAAQ1L;AAAA,MACR,aAAaN;AAAA,IACnB,CAAK;AAAA;AAEL;AACA,SAASoM,KAAS;AAAE;AACpBA,GAAO,YAAY;AAAA,EACjB,YAAY;AAAA,EACZ,WAAW,SAAmB5B,GAAO;AACnC,QAAI3K,IAAoB2K,EAAM;AAC9B,SAAK,aAAa3K;AAAA,EACnB;AAAA,EACD,SAAS,SAAiBwM,GAAO;AAC/B,QAAI/L,IAAS+L,EAAM,QACjBrM,IAAcqM,EAAM;AACtB,SAAK,SAAS,yBACVrM,KACFA,EAAY,sBAAqB;AAEnC,QAAI6H,IAAcnM,GAAS,KAAK,SAAS,IAAI,KAAK,YAAY,KAAK,OAAO;AAC1E,IAAImM,IACF,KAAK,SAAS,GAAG,aAAavH,GAAQuH,CAAW,IAEjD,KAAK,SAAS,GAAG,YAAYvH,CAAM,GAErC,KAAK,SAAS,cACVN,KACFA,EAAY,WAAU;AAAA,EAEzB;AAAA,EACD,MAAM+L;AACR;AACArU,GAAS0U,IAAQ;AAAA,EACf,YAAY;AACd,CAAC;AACD,SAASE,KAAS;AAAE;AACpBA,GAAO,YAAY;AAAA,EACjB,SAAS,SAAiBC,GAAO;AAC/B,QAAIjM,IAASiM,EAAM,QACjBvM,IAAcuM,EAAM,aAClBC,IAAiBxM,KAAe,KAAK;AACzC,IAAAwM,EAAe,sBAAqB,GACpClM,EAAO,cAAcA,EAAO,WAAW,YAAYA,CAAM,GACzDkM,EAAe,WAAU;AAAA,EAC1B;AAAA,EACD,MAAMT;AACR;AACArU,GAAS4U,IAAQ;AAAA,EACf,YAAY;AACd,CAAC;AAwpBDvQ,GAAS,MAAM,IAAIuO,GAAgB,CAAE;AACrCvO,GAAS,MAAMuQ,IAAQF,EAAM;ACnxG7B,SAASK,GAAY55B,GAAIgnB,GAAMjjC,IAAU,CAAA,GAAI;AAC3C,MAAIkoC;AACJ,QAAM,EAAE,UAAA4N,IAAWC,IAAiB,GAAGC,EAAY,IAAKh2C,GAClDyY,IAAiB;AAAA,IACrB,UAAU,CAACpY,MAAM;AACf,MAAA41C,GAAiBhT,GAAM5iC,EAAE,UAAUA,EAAE,QAAQ;AAAA,IAC9C;AAAA,EACL,GACQ61C,IAAQ,MAAM;AAClB,UAAMt+B,IAAS,OAAOqE,KAAO,WAAW65B,KAAY,OAAO,SAASA,EAAS,cAAc75B,CAAE,IAAIk6B,GAAal6B,CAAE;AAChH,IAAI,CAACrE,KAAUswB,MAAa,WAE5BA,IAAW,IAAI/C,GAASvtB,GAAQ,EAAE,GAAGa,GAAgB,GAAGu9B,EAAY,CAAE;AAAA,EAC1E,GACQI,IAAO,MAAM;AACjB,IAAAlO,KAAY,QAAgBA,EAAS,QAAO,GAC5CA,IAAW;AAAA,EACf,GACQnhB,IAAS,CAACjqB,GAAM1C,MAAU;AAC9B,QAAIA,MAAU;AACZ,MAAA8tC,KAAY,QAAgBA,EAAS,OAAOprC,GAAM1C,CAAK;AAAA;AAEvD,aAAO8tC,KAAY,OAAO,SAASA,EAAS,OAAOprC,CAAI;AAAA,EAC7D;AACE,SAAAu5C,GAAaH,CAAK,GAClBI,GAAkBF,CAAI,GACf,EAAE,MAAAA,GAAM,OAAAF,GAAO,QAAAnvB;AACxB;AACA,SAASkvB,GAAiBhT,GAAMyK,GAAMD,GAAI;AACxC,QAAM8I,IAAch7C,GAAM0nC,CAAI,GACxB/gB,IAAQq0B,IAAc,CAAC,GAAGC,GAAQvT,CAAI,CAAC,IAAIuT,GAAQvT,CAAI;AAC7D,MAAIwK,KAAM,KAAKA,IAAKvrB,EAAM,QAAQ;AAChC,UAAM5J,IAAU4J,EAAM,OAAOwrB,GAAM,CAAC,EAAE,CAAC;AACvC,IAAAvkB,GAAS,MAAM;AACb,MAAAjH,EAAM,OAAOurB,GAAI,GAAGn1B,CAAO,GACvBi+B,MACFtT,EAAK,QAAQ/gB;AAAA,IACrB,CAAK;AAAA,EACF;AACH;ACxCA,IAAIu0B;AACJ,MAAMC,KAAQ,IAAI,WAAW,EAAE;AAChB,SAASC,KAAM;AAE5B,MAAI,CAACF,OAEHA,KAAkB,OAAO,SAAW,OAAe,OAAO,mBAAmB,OAAO,gBAAgB,KAAK,MAAM,GAE3G,CAACA;AACH,UAAM,IAAI,MAAM,0GAA0G;AAI9H,SAAOA,GAAgBC,EAAK;AAC9B;ACXA,MAAME,KAAY,CAAA;AAElB,SAASt2C,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACzB,EAAAs2C,GAAU,MAAMt2C,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAG3C,SAASu2C,GAAgBjhC,GAAKsJ,IAAS,GAAG;AAG/C,SAAO03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM03B,GAAUhhC,EAAIsJ,IAAS,EAAE,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,EAAE,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,EAAE,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,EAAE,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,EAAE,CAAC,IAAI03B,GAAUhhC,EAAIsJ,IAAS,EAAE,CAAC;AACnf;ACVA,IAAI43B,IAEAC,IAGAC,KAAa,GACbC,KAAa;AAEjB,SAASC,GAAGl3C,GAASm3C,GAAKj4B,GAAQ;AAChC,MAAI5e,IAAI62C,KAAOj4B,KAAU;AACzB,QAAMrd,IAAIs1C,KAAO,IAAI,MAAM,EAAE;AAC7B,EAAAn3C,IAAUA,KAAW;AACrB,MAAIuT,IAAOvT,EAAQ,QAAQ82C,IACvBM,IAAWp3C,EAAQ,aAAa,SAAYA,EAAQ,WAAW+2C;AAInE,MAAIxjC,KAAQ,QAAQ6jC,KAAY,MAAM;AACpC,UAAMC,IAAYr3C,EAAQ,WAAWA,EAAQ,OAAO22C;AAEpD,IAAIpjC,KAAQ,SAEVA,IAAOujC,KAAU,CAACO,EAAU,CAAC,IAAI,GAAMA,EAAU,CAAC,GAAGA,EAAU,CAAC,GAAGA,EAAU,CAAC,GAAGA,EAAU,CAAC,GAAGA,EAAU,CAAC,CAAC,IAGzGD,KAAY,SAEdA,IAAWL,MAAaM,EAAU,CAAC,KAAK,IAAIA,EAAU,CAAC,KAAK;AAAA,EAE/D;AAMD,MAAIC,IAAQt3C,EAAQ,UAAU,SAAYA,EAAQ,QAAQ,KAAK,OAG3Du3C,IAAQv3C,EAAQ,UAAU,SAAYA,EAAQ,QAAQi3C,KAAa;AAEvE,QAAMt2C,IAAK22C,IAAQN,MAAcO,IAAQN,MAAc;AAavD,MAXIt2C,IAAK,KAAKX,EAAQ,aAAa,WACjCo3C,IAAWA,IAAW,IAAI,SAKvBz2C,IAAK,KAAK22C,IAAQN,OAAeh3C,EAAQ,UAAU,WACtDu3C,IAAQ,IAINA,KAAS;AACX,UAAM,IAAI,MAAM,iDAAiD;AAGnE,EAAAP,KAAaM,GACbL,KAAaM,GACbR,KAAYK,GAEZE,KAAS;AAET,QAAME,MAAOF,IAAQ,aAAa,MAAQC,KAAS;AACnD,EAAA11C,EAAEvB,GAAG,IAAIk3C,MAAO,KAAK,KACrB31C,EAAEvB,GAAG,IAAIk3C,MAAO,KAAK,KACrB31C,EAAEvB,GAAG,IAAIk3C,MAAO,IAAI,KACpB31C,EAAEvB,GAAG,IAAIk3C,IAAK;AAEd,QAAMC,IAAMH,IAAQ,aAAc,MAAQ;AAC1C,EAAAz1C,EAAEvB,GAAG,IAAIm3C,MAAQ,IAAI,KACrB51C,EAAEvB,GAAG,IAAIm3C,IAAM,KAEf51C,EAAEvB,GAAG,IAAIm3C,MAAQ,KAAK,KAAM,IAE5B51C,EAAEvB,GAAG,IAAIm3C,MAAQ,KAAK,KAEtB51C,EAAEvB,GAAG,IAAI82C,MAAa,IAAI,KAE1Bv1C,EAAEvB,GAAG,IAAI82C,IAAW;AAEpB,WAAS32C,IAAI,GAAGA,IAAI,GAAG,EAAEA;AACvB,IAAAoB,EAAEvB,IAAIG,CAAC,IAAI8S,EAAK9S,CAAC;AAGnB,SAAO02C,KAAON,GAAgBh1C,CAAC;AACjC;AC5FA,MAAM61C,KAAa,OAAO,SAAW,OAAe,OAAO,cAAc,OAAO,WAAW,KAAK,MAAM,GACvFC,KAAA;AAAA,EACb,YAAAD;AACF;ACCA,SAASE,GAAG53C,GAASm3C,GAAKj4B,GAAQ;AAChC,MAAIy4B,GAAO,cAAc,CAACR,KAAO,CAACn3C;AAChC,WAAO23C,GAAO;AAGhB,EAAA33C,IAAUA,KAAW;AACrB,QAAM63C,IAAO73C,EAAQ,WAAWA,EAAQ,OAAO22C;AAK/C,MAHAkB,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,IAC3BA,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,KAEvBV,GAAK;AACP,IAAAj4B,IAASA,KAAU;AAEnB,aAAS5e,IAAI,GAAGA,IAAI,IAAI,EAAEA;AACxB,MAAA62C,EAAIj4B,IAAS5e,CAAC,IAAIu3C,EAAKv3C,CAAC;AAG1B,WAAO62C;AAAA,EACR;AAED,SAAON,GAAgBgB,CAAI;AAC7B;ACvBO,MAAMC,KAAiB,MACrBC,GAAO,GAGHC,KAAiB,MACrBC,GAAO,GCAHC,KAAe,6BACfC,KAAc,4BACdC,KAAa,2BACbC,KAAe,6BACfC,KAAc;AAiCpB,SAASC,GACd7qC,GACA8qC,GACA9+C,GACA6D,GAoBA;AACM,QAAAk7C,IAAe94C,EAAI,EAAK,GACxB+4C,IAAe/4C,EAAyB,IAAI,GAC5Cg5C,IAAWh5C,EAAwB,IAAI,GACvCi5C,IAAaj5C,EAAYm4C,GAAA,CAAgB,GACzCe,IAAmBl5C,EAA8B,IAAI,GACrDm5C,IAAgBn5C,EAAI,CAAC,GACrBo5C,IAAap5C,EAAIjG,EAAM,KAAK;AAEzB,WAAAs/C,EAAc96C,GAAwBnC,GAA6B;AACnE,WAAA;AAAA,MACL,KAAKmC,EAAKxE,EAAM,QAAQ;AAAA,MACxB,OAAAqC;AAAA,MACA,KAAKmC;AAAA,IAAA;AAAA,EAET;AAEM,QAAAiJ,IAAQpN,EAAS,MACd2T,EAAM,MAAM,IAAI,CAACxP,GAAMnC,MAAUi9C,EAAc96C,GAAMnC,CAAK,CAAC,CACnE,GAEKk9C,IAA0B,CAACC,IAA2C,WAAc;AAC1E,IAAAJ,EAAA,SACT3+C,EAAY++C,CAAQ,KACvB37C,EAAK,qBAAqB27C,CAAQ,GAEpC/vB,GAAS,MAAM;AACQ,MAAAqvB;IAAA,CACtB;AAAA,EAAA,GAGGW,IAAa,CAAC9c,MAA0B;AACjC,IAAA0c,EAAA,MAAM,IAAI1c,CAAE;AAAA,EAAA,GAGnB+c,IAAe,CAAC/c,MAA0B;AACnC,IAAA0c,EAAA,MAAM,OAAO1c,CAAE;AAAA,EAAA,GAGtBgd,IAAkB,CACtBlyC,GACA4hC,GACAC,GACAsQ,IAA6C,OAC1C;AACG,UAAApD,IAAQnN,IAAWC,IAAWA,IAAWD;AAC/C,QAAIwQ,IAAWrD,IAAQ;AACvB,aAAS51C,IAAI41C,GAAO51C,IAAI6G,EAAM,QAAQ7G;AACpC,MAAAqQ,GAAqBxJ,EAAM7G,CAAC,GAAG5G,EAAM,eAAe6/C,CAAQ,GAC5DJ,EAAWhyC,EAAM7G,CAAC,EAAE5G,EAAM,QAAQ,CAAC,GACnC6/C,KACAD,EAAiB,KAAK;AAAA,QACpB,IAAInyC,EAAM7G,CAAC,EAAE;AAAA,QACb,UAAU6G,EAAM7G,CAAC,EAAE;AAAA,MAAA,CACpB;AAEI,WAAAg5C;AAAA,EAAA,GAGHrD,IAAmB,CAACvI,GAAcD,MAAyC;AACzE,UAAA+L,IAAar+C,GAAUuS,EAAM,KAAK;AACxC,QAAI+/B,KAAM,KAAKA,IAAK+L,EAAW,QAAQ;AACrC,UAAIC,IAAuC,CAAA;AAC3C,YAAMnhC,IAAUkhC,EAAW,OAAO9L,GAAM,CAAC,EAAE,CAAC;AACjC,aAAA8L,EAAA,OAAO/L,GAAI,GAAGn1B,CAAO,GAC3Bne,EAAYT,EAAM,cAAc,MACtB+/C,IAAAJ,EAAgBG,GAAY9L,GAAMD,CAAE,IAE3BwL,KACxB17C,EAAK,qBAAqBi8C,CAAU,GAC7BC;AAAA,IACT;AACA,WAAO;EAAC,GAGJC,IAAoB,CAACrd,GAAuBl1B,MAA8B;AACxE,UAAA4rC,IAAM5rC,EAAM,UAAU,CAACjJ,MAASA,EAAKxE,EAAM,QAAQ,MAAM2iC,CAAE;AACjE,WAAI0W,MAAQ,KAAW,OAChBA;AAAA,EAAA,GAGH4G,IAAmB,CACvBz7C,GACAgJ,GACAqyC,GACAK,IAAwB,SACrB;AACE,IAAA17C,EAAA,OAAO/C,GAAU+L,CAAI,GACrB5M,GAAOi/C,CAAQ,MAAGr7C,EAAK,KAAK,WAAWq7C,IACvCj/C,GAAOs/C,CAAK,KAAGT,EAAWjyC,EAAK,EAAE;AAAA,EAAA,GASlC2yC,IAAa,CACjBxd,GACAn1B,GACAqyC,IAA0B,MAC1BK,IAAwB,SACrB;AACG,UAAAJ,IAAar+C,GAAUuS,EAAM,KAAK,GAClCosC,IAAaJ,EAAkBrd,GAAImd,CAAU;AACnD,IAAI,CAACl/C,GAAOw/C,CAAU,KAAKN,EAAWM,CAAU,MAC9CH,EAAiBH,EAAWM,CAAU,GAAG5yC,GAAMqyC,GAAUK,CAAK,GAC9DX,EAAwBO,CAAU;AAAA,EACpC,GAGIO,IAAoB,CACxBh+C,GACAmL,GACAqyC,GACAK,IAAwB,SACrB;AACG,UAAAJ,IAAar+C,GAAUuS,EAAM,KAAK;AACpC,IAAA8rC,EAAWz9C,CAAK,MAClB49C,EAAiBH,EAAWz9C,CAAK,GAAGmL,GAAMqyC,GAAUK,CAAK,GACzDX,EAAwBO,CAAU;AAAA,EACpC,GAMIQ,IAAgB,CAACC,GAA4B/yC,MAAqD;AAChG,UAAAsyC,IAAar+C,GAAUuS,EAAM,KAAK;AAEpC,QAAApT,GAAO2/C,CAAW;AACT,aAAAT,EAAA,KAAKr+C,GAAU+L,CAAI,CAAC,GAC/B+xC,EAAwBO,CAAU,GAC3B;AAGT,UAAMC,IAAuC,CAAA;AAEzC,WAAAD,EAAWS,CAAW,KACxBT,EAAW,OAAOS,IAAc,GAAG,GAAG/yC,CAAI,GAC1CmyC,EAAgBG,GAAYS,IAAc,GAAGA,IAAc,GAAGR,CAAU,GACxER,EAAwBO,CAAU,GAC3BC,KAEF;EAAC,GAMJS,IAAa,CAACC,GAAoCjzC,MAAqD;AACrG,UAAAsyC,IAAar+C,GAAUuS,EAAM,KAAK;AAEpC,QAAApT,GAAO6/C,CAAQ;AACN,aAAAX,EAAA,KAAKr+C,GAAU+L,CAAI,CAAC,GAC/B+xC,EAAwBO,CAAU,GAC3B;AAGH,UAAAM,IAAaJ,EAAkBS,GAAUX,CAAU,GACnDC,IAAuC,CAAA;AAE7C,WAAI,CAACn/C,GAAOw/C,CAAU,KAAKN,EAAWM,CAAU,KAC9CN,EAAW,OAAOM,IAAa,GAAG,GAAG5yC,CAAI,GACzCmyC,EAAgBG,GAAYM,IAAa,GAAGA,IAAa,GAAGL,CAAU,GACtER,EAAwBO,CAAU,GAC3BC,KAGF;EAAC,GAGJW,IAAa,CAAC/d,MAAoD;AAChE,UAAAmd,IAAar+C,GAAUuS,EAAM,KAAK,GAClCosC,IAAaJ,EAAkBrd,GAAImd,CAAU,GAE7CC,IAAuC,CAAA;AAE7C,WAAI,CAACn/C,GAAOw/C,CAAU,KAAKN,EAAWM,CAAU,KACnCN,EAAA,OAAOM,GAAY,CAAC,GACfT,EAAAG,GAAYM,GAAYA,GAAYL,CAAU,GAC9DL,EAAa/c,CAAE,GACf4c,EAAwBO,CAAU,GAC3BC,KAEF;EAAC,GAGJY,KAAgB,CAACt+C,MAA4C;AAC3D,UAAAy9C,IAAar+C,GAAUuS,EAAM,KAAK,GAElC+rC,IAAuC,CAAA;AAEzC,QAAAD,EAAWz9C,CAAK,GAAG;AACrB,YAAMsgC,IAAKmd,EAAWz9C,CAAK,EAAErC,EAAM,QAAQ;AAChC,aAAA8/C,EAAA,OAAOz9C,GAAO,CAAC,GACVs9C,EAAAG,GAAYz9C,GAAOA,GAAO09C,CAAU,GACpDL,EAAa/c,CAAE,GACf4c,EAAwBO,CAAU,GAC3BC;AAAA,IACT;AACA,WAAO;EAAC,GAGJpgC,KAAU,MAAM;AACpB,IAAKs/B,EAAS,SACTE,EAAiB,UACtBA,EAAiB,MAAM,QACvBA,EAAiB,QAAQ;AAAA,EAAA;AAcpB,SAAA;AAAA,IACL,OAAA1xC;AAAA,IACA,eAAA2xC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAJ;AAAA,IACA,YAAAC;AAAA,IACA,cAAAH;AAAA,IACA,cAAAC;AAAA,IACA,kBAAAG;AAAA,IACA,SApBc,MAAM;AACZ,MAAAx/B,MACam/B;IAAA;AAAA,IAmBrB,uBAhB4B,MAAM;AAC9B,MAAAl+C,GAAOo+C,EAAa,KAAK,MACxBn7C,EAAA,YAAYm7C,EAAa,KAAK,GACnCD,EAAa,QAAQ;AAAA,IAAA;AAAA,IAcrB,SAAAp/B;AAAA,IACA,kBAAA48B;AAAA,IACA,YAAAiE;AAAA,IACA,eAAAF;AAAA,IACA,YAAAI;AAAA,IACA,eAAAC;AAAA,IACA,YAAAR;AAAA,IACA,mBAAAE;AAAA,EAAA;AAEJ;ACtTO,MAAMO,KAAwB;;;;;;;;;;;;;;;;;;;;ACiBrC,UAAM5gD,IAAQC,GAiCR4D,IAAOC,GAEPkQ,IAAQsxB,GAAM,MAAMtlC,EAAM,UAAU,GAEpC,EAAE,GAAAE,MAAMC,MAER0gD,IAAkB,CAACrzC,MAAuB;AAC9C,MAAA3J,EAAK,cAAc2J,CAAI;AAAA,IAAA,GAGnBszC,IAAgB,CAACtzC,MAAuB;AAC5C,MAAAwxC,EAAa,QAAQxxC,GACrBuxC,EAAa,QAAQ;AAAA,IAAA,GAGjBgC,IAAc,CAACvzC,MAAuB;AAC1C,MAAA3J,EAAK,UAAU2J,CAAI;AAAA,IAAA,GAGfwzC,IAAiB,MAAM;AACvB,UAAAhhD,EAAM,WAAW,SAAS,GAAG;AAC1B,QAAA6D,EAAA,aAAapC,GAAUzB,EAAM,WAAWA,EAAM,WAAW,SAAS,CAAC,CAAC,CAAC;AAC1E;AAAA,MACF;AACA,MAAA6D,EAAK,aAAa,IAAI;AAAA,IAAA,GAGlBo9C,IAAe5gD,EAAS,MACrBI,EAAYT,EAAM,kBAAkB,IAAI4gD,KAAwB1B,EAAW,QAAQl/C,EAAM,kBACjG,GAEKkhD,IAAe,MAAM;AAEzB,UADIlhD,EAAM,oBACN,CAACi/C,EAAS;AAAO;AACrB,YAAMkC,IAAiBlC,EAAS,MAAM,cAA2B,MAAML,EAAW;AAClF,MAAKuC,MACLhC,EAAiB,QAAQhD,GAAYgF,GAAgB,CAAA,GAAI;AAAA,QACvD,QAAQ,MAAM3C;AAAA,QACd,YAAYC;AAAA,QACZ,WAAWC;AAAA,QACX,aAAaC;AAAA,QACb,OAAO,OAAOlpC,MAAyB;AACjC,cAAAzV,EAAM,sBAAsBS,EAAYgV,EAAM,QAAQ,KAAKhV,EAAYgV,EAAM,QAAQ;AAAG;AAC5F,gBAAM2rC,IAAe7E,EAAiB9mC,EAAM,UAAUA,EAAM,QAAQ;AACpE,UAAA5R,EAAK,SAASu9C,CAAY;AAAA,QAC5B;AAAA,MAAA,CACD;AAAA,IAAA,GAGG;AAAA,MACJ,OAAA3zC;AAAA,MACA,eAAA2xC;AAAA,MACA,YAAAC;AAAA,MACA,kBAAA9C;AAAA,MACA,cAAAyC;AAAA,MACA,cAAAD;AAAA,MACA,SAAAp/B;AAAA,MACA,SAAA0hC;AAAA,MACA,uBAAAC;AAAA,MACA,kBAAAnC;AAAA,MACA,UAAAF;AAAA,MACA,YAAAC;AAAA,MACA,YAAAsB;AAAA,MACA,YAAAE;AAAA,MACA,YAAAP;AAAA,MACA,eAAAG;AAAA,MACA,eAAAK;AAAA,MACA,mBAAAN;AAAA,IACE,IAAAxB,GAAmB7qC,GAAOktC,GAAclhD,GAAO6D,CAAI;AAEvD,WAAA61B,GAAgB,MAAM;AACZ,MAAA/Z;IAAA,CACT,GAED8P,GAAS,MAAM;AACb,MAAAwvB,EAAS,QAAQ,SAAS,cAAc,MAAMgC,EAAa,KAAK,GACnDC;IAAA,CACd,GAED57C;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,OAAOmE,MAAa;AACV,QAAAwb,KACJxb,MAAa,MAAoB+8C;MACvC;AAAA,IAAA,GAGF57C;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,MAAa;AACZ,QAAAk7C,EAAW,QAAQl7C;AAAA,MACrB;AAAA,IAAA,GAGW8yB,EAAA;AAAA,MACX,SAAAoqB;AAAA,MACA,YAAAb;AAAA,MACA,eAAAF;AAAA,MACA,YAAAI;AAAA,MACA,eAAAC;AAAA,MACA,YAAAR;AAAA,MACA,mBAAAE;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IClJYkB,KAAsB,oCACtBC,KAAqB,mCACrBC,KAAoB,kCACpBC,KAAsB,oCACtBC,KAAqB,mCACrBC,KAAsC,OAAO,IAAI,oBAAoB;AAiClE,SAAAC,GACd7tC,GACA8tC,GACAj+C,GA8BA;AACM,QAAA,EAAE,cAAAmL,MAAiBX,MAEnB0zC,IAAoB97C,EAA8B,CAAA,CAAE,GACpDm5C,IAAgBn5C,EAAI,CAAC,GACrB84C,IAAe94C,EAAI,EAAK,GACxB+4C,IAAe/4C,EAA+B,IAAI,GAClD+7C,IAAW/7C,EAAI,EAAK,GACpBg5C,IAAWh5C,EAAwB,IAAI,GACvCi5C,IAAaj5C,EAAYm4C,GAAA,CAAgB,GAEzCmB,IAA0B,CAACC,IAAuC,WAAc;AACtE,IAAAJ,EAAA,SACT3+C,EAAY++C,CAAQ,KACvB37C,EAAK,qBAAqB27C,CAAQ,GAEpC/vB,GAAS,MAAM;AACS,MAAAqyB;IAAA,CACvB;AAAA,EAAA,GAGGT,IAAU,MAAM;AACZ,IAAA1hC,KACcmiC;EAAA,GAGlBR,IAAwB,MAAM;AAC9B,IAAA1gD,GAAOo+C,EAAa,KAAK,MACxBn7C,EAAA,YAAYm7C,EAAa,KAAK,GACnCD,EAAa,QAAQ;AAAA,EAAA,GAGjBp/B,IAAU,MAAM;AACpB,IAAKs/B,EAAS,UACI8C,EAAA,MAAM,QAAQ,CAACv9C,MAAS;AACxC,MAAAA,EAAK,KAAK;AAAA,IAAA,CACX,GACDu9C,EAAkB,QAAQ;EAAC,GAGvBtC,IAAa,CAACj7C,GAA0By9C,MAA+B;AAC3E,IAAAz9C,EAAK,KAAK,QAAQ,IAClBy9C,EAAW,KAAK,QAAQ;AAAA,EAAA,GAGpBC,IAA4B,CAChCz0C,GACA4hC,GACAC,GACAwQ,GACAF,IAA6C,OAC1C;AACG,UAAApD,IAAQnN,IAAWC,IAAWA,IAAWD;AAC/C,QAAIwQ,IAAWrD,IAAQ;AACvB,aAAS51C,IAAI41C,GAAO51C,IAAI6G,EAAM,QAAQ7G;AACpC,MAAI6G,EAAM7G,CAAC,EAAE,KAAK,aAAai5C,MACvBpyC,EAAA7G,CAAC,EAAE,KAAK,WAAWi5C,GACdJ,EAAAhyC,EAAM7G,CAAC,GAAGk5C,CAAU,GAC/BF,EAAiB,KAAK;AAAA,QACpB,IAAInyC,EAAM7G,CAAC,EAAE,KAAK;AAAA,QAClB,UAAU6G,EAAM7G,CAAC,EAAE,KAAK;AAAA,MAAA,CACzB,IAEHi5C;AAAA,EACF,GAEIsC,IAAiC,CACrCC,GACAC,GACAC,GACAC,GACAzC,GACAF,IAA6C,OAC1C;AACC,QAAAwC,EAAY,SAAS,GAAG;AAC1B,UAAIvC,IAAWyC,IAAc;AAC7B,eAAS17C,IAAI07C,GAAa17C,IAAIw7C,EAAY,QAAQx7C;AAChD,QAAIw7C,EAAYx7C,CAAC,EAAE,KAAK,aAAai5C,MACvBuC,EAAAx7C,CAAC,EAAE,KAAK,WAAWi5C,GACpBJ,EAAA2C,EAAYx7C,CAAC,GAAGk5C,CAAU,GACrCF,EAAiB,KAAK;AAAA,UACpB,IAAIwC,EAAYx7C,CAAC,EAAE,KAAK;AAAA,UACxB,UAAUw7C,EAAYx7C,CAAC,EAAE,KAAK;AAAA,QAAA,CAC/B,IAEHi5C;AAAA,IAEJ;AACI,QAAAwC,EAAY,SAAS,GAAG;AAC1B,UAAIxC,IAAW0C,IAAc;AAC7B,eAAS37C,IAAI27C,GAAa37C,IAAIy7C,EAAY,QAAQz7C;AAChD,QAAIy7C,EAAYz7C,CAAC,EAAE,KAAK,aAAai5C,MACvBwC,EAAAz7C,CAAC,EAAE,KAAK,WAAWi5C,GACpBJ,EAAA4C,EAAYz7C,CAAC,GAAGk5C,CAAU,GACrCF,EAAiB,KAAK;AAAA,UACpB,IAAIyC,EAAYz7C,CAAC,EAAE,KAAK;AAAA,UACxB,UAAUy7C,EAAYz7C,CAAC,EAAE,KAAK;AAAA,QAAA,CAC/B,IAEHi5C;AAAA,IAEJ;AAAA,EAAA,GAGI2C,IAAuB,CAC3BzX,GACAt9B,GACAg1C,IAAgB,MACL;AACX,QAAI1X,MAAW;AAAa,aAAA0X;AACtB,UAAAC,IAAaj1C,EAAM,KAAK,CAACjJ,MAASA,EAAK,KAAK,OAAOumC,CAAM;AAC/D,WAAK2X,KACLD,KACOD,EAAqBE,EAAW,KAAK,QAAQj1C,GAAOg1C,CAAK,KAFxCA;AAAA,EAEwC,GAG5DE,IAAsB,CAACnX,GAAiDiX,IAAgB,MAAc;AAC1G,QAAIG,IAAaH;AACb,QAAAjX,KAAYA,EAAS,QAAQ;AAC/B,MAAAiX;AACA,iBAAWv3B,KAASsgB,GAAU;AAC5B,cAAMqX,IAAeF,EAAoBz3B,EAAM,UAAUu3B,CAAK;AACjD,QAAAG,IAAA,KAAK,IAAIA,GAAYC,CAAY;AAAA,MAChD;AAAA,IACF;AACO,WAAAD;AAAA,EAAA,GAMHE,IAAwB,CAC5Bt+C,GACAiJ,GACAg1C,IAAgB,MACL;AACX,UAAMM,IAAcP,EAAqBh+C,EAAK,KAAK,QAAQiJ,CAAK,GAC1Dm1C,IAAaD,EAAoBn+C,EAAK,UAAUi+C,CAAK;AAC3D,WAAOM,IAAcH;AAAA,EAAA,GAGjBI,IAAe,CACnBrgB,GACAzmB,GACA6uB,IAAoC,SACgD;AACpF,eAAWvmC,KAAQ0X,GAAK;AAClB,UAAA1X,EAAK,KAAK,OAAOm+B;AACZ,eAAA;AAAA,UACL,WAAWn+B;AAAA,UACX,YAAYumC;AAAA,QAAA;AAGhB,UAAIvmC,EAAK,UAAU;AACjB,cAAMy+C,IAAkBD,EAAargB,GAAIn+B,EAAK,UAAUA,CAAI;AACxD,YAAAy+C,EAAgB,cAAc;AACzB,iBAAAA;AAAA,MAEX;AAAA,IACF;AAEO,WAAA;AAAA,MACL,WAAW;AAAA,MACX,YAAY;AAAA,IAAA;AAAA,EACd;AA2QK,SAAA;AAAA,IACL,UAAAjB;AAAA,IACA,UAAA/C;AAAA,IACA,YAAAC;AAAA,IACA,cAAAH;AAAA,IACA,cAAAC;AAAA,IACA,mBAAA+C;AAAA,IACA,eAAA3C;AAAA,IACA,SAAAiC;AAAA,IACA,uBAAAC;AAAA,IACA,SAAA3hC;AAAA,IACA,kBAlRuB,CACvBujC,GACAzC,GACAnR,GACAD,GACA8T,MAC6B;AACvB,YAAArD,IAA6Br+C,GAAUuS,EAAM,KAAK,GAElD,EAAE,WAAWovC,GAAY,YAAYC,MAAyBL,EAAaE,GAAWpD,EAAW,QAAQ;AAE/G,UAAI,CAACsD;AACH,uBAAQ,MAAM,wBAAwB,GAC/B;AAGT,YAAMrD,IAAuC,CAAA;AAG7C,UAAIU,MAAa,MAAM;AACrB,YAAI7/C,GAAOyiD,CAAoB,KAAK/T,MAAaD;AAE/C,iBAAO;AAEL,YAAAzuC,GAAOyiD,CAAoB,GAAG;AAEhC,gBAAMhK,KAAMyG,EAAW,SAAS,QAAQsD,CAAU;AAClD,cAAI/J,OAAQ,IAAI;AACd,kBAAMz6B,KAAUkhC,EAAW,SAAS,OAAOzG,IAAK,CAAC,EAAE,CAAC;AACpD,mBAAAyG,EAAW,SAAS,OAAOxQ,GAAU,GAAG1wB,EAAO,GAC/CsjC,EAA0BpC,EAAW,UAAUzG,IAAK/J,GAAUwQ,GAAYC,CAAU,GACpFR,EAAwBO,CAAU,GAC3B;UACT;AACA,yBAAQ,MAAM,wBAAwB,GAC/B;QACT;AACA,YAAI,CAACl/C,GAAOyiD,CAAoB,KAAKA,EAAqB,UAAU;AAElE,gBAAMhK,KAAMgK,EAAqB,SAAS,QAAQD,CAAU;AAC5D,cAAI/J,OAAQ,IAAI;AACd,YAAA+J,EAAW,KAAK,SAAS;AACzB,kBAAMxkC,KAAUykC,EAAqB,SAAS,OAAOhK,IAAK,CAAC,EAAE,CAAC;AAC9D,mBAAAyG,EAAW,SAAS,OAAOxQ,GAAU,GAAG1wB,EAAO,GAC/CujC;AAAA,cACErC,EAAW;AAAA,cACXuD,EAAqB;AAAA,cACrB/T;AAAA,cACA+J;AAAA,cACAyG;AAAA,cACAC;AAAA,YAAA,GAEFR,EAAwBO,CAAU,GAC3B;UACT;AACA,yBAAQ,MAAM,wBAAwB,GAC/B;QACT;AACA,uBAAQ,MAAM,wBAAwB,GAC/B;MACT;AAEA,YAAM,EAAE,WAAWwD,MAAeN,EAAavC,GAAUX,EAAW,QAAQ;AAE5E,UAAI,CAACwD,KAAc,CAACA,EAAW;AAGL,eAAA/D,KACjB;AAGL,UAAA,CAAC3+C,GAAOyiD,CAAoB,KAAKA,EAAqB,KAAK,OAAOC,EAAW,KAAK,MAAMhU,MAAaD;AAEvG,eAAO;AAGL,UAAAgU,KAAwBA,EAAqB,YAAYC,EAAW,KAAK,OAAOD,EAAqB,KAAK,IAAI;AAEhH,cAAMhK,KAAMgK,EAAqB,SAAS,QAAQD,CAAU;AAC5D,YAAI/J,OAAQ,IAAI;AACd,gBAAMz6B,KAAUykC,EAAqB,SAAS,OAAOhK,IAAK,CAAC,EAAE,CAAC;AAC9D,UAAAiK,EAAW,SAAS,OAAOhU,GAAU,GAAG1wB,EAAO,GAC/CsjC,EAA0BoB,EAAW,UAAUjK,IAAK/J,GAAUwQ,GAAYC,CAAU;AAAA,QACtF;AAAA,MAAA,WAEAsD,KACAA,EAAqB,YACrBC,EAAW,KAAK,OAAOD,EAAqB,KAAK,IACjD;AAEA,cAAMhK,KAAMgK,EAAqB,SAAS,QAAQD,CAAU;AAC5D,YAAI/J,OAAQ,IAAI;AACH,UAAA+J,EAAA,KAAK,SAASE,EAAW,KAAK;AACzC,gBAAM1kC,KAAUykC,EAAqB,SAAS,OAAOhK,IAAK,CAAC,EAAE,CAAC;AAC9D,UAAAiK,EAAW,SAAS,OAAOhU,GAAU,GAAG1wB,EAAO,GAC/CujC;AAAA,YACEmB,EAAW;AAAA,YACXD,EAAqB;AAAA,YACrB/T;AAAA,YACA+J;AAAA,YACAyG;AAAA,YACAC;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA,OACK;AAEL,cAAM1G,KAAMyG,EAAW,SAAS,QAAQsD,CAAU;AAClD,YAAI/J,OAAQ,IAAI;AACH,UAAA+J,EAAA,KAAK,SAASE,EAAW,KAAK;AACzC,gBAAM1kC,KAAUkhC,EAAW,SAAS,OAAOzG,IAAK,CAAC,EAAE,CAAC;AACpD,UAAAiK,EAAW,SAAS,OAAOhU,GAAU,GAAG1wB,EAAO,GAC/CujC,EAA+BmB,EAAW,UAAUxD,EAAW,UAAUxQ,GAAU+J,IAAKyG,GAAYC,CAAU;AAAA,QAChH;AAAA,MACF;AAEA,aAAI+C,EAAsBQ,GAAYxD,EAAW,QAAQ,IAAIqD,KAC3Dn0C,EAAa,qCAAqC,GAC1BuwC,KACjB,OAETA,EAAwBO,CAAU,GAC3BC;AAAA,IAAA;AAAA,IA0JP,YA1FiB,CACjBU,GACAjzC,GACA+1C,MAC6B;AACvB,YAAAzD,IAA6Br+C,GAAUuS,EAAM,KAAK,GAElDwvC,IAAiC;AAAA,QACrC,MAAM/hD,GAAU+L,CAAI;AAAA,QACpB,UAAU+1C,IAAkB,CAAK,IAAA;AAAA,QACjC,MAAM;AAAA,UACJ,OAAO;AAAA,QACT;AAAA,MAAA;AAGE,UAAA3iD,GAAO6/C,CAAQ;AACN,eAAAX,EAAA,SAAS,KAAK0D,CAAU,GACnCjE,EAAwBO,CAAU,GAC3B;AAGH,YAAA,EAAE,WAAWwD,GAAY,YAAYG,MAAyBT,EAAavC,GAAUX,EAAW,QAAQ;AAE9G,UAAI,CAACwD;AACH,eAAAt0C,EAAa,mCAAmC,GACzC;AAET,MAAAw0C,EAAW,KAAK,WAAWF,EAAW,KAAK,WAAW,GAC3CE,EAAA,KAAK,SAASF,EAAW,KAAK;AAEzC,YAAMvD,IAAuC,CAAA;AAE7C,UAAI,CAACn/C,GAAO6iD,CAAoB,KAAKA,EAAqB,UAAU;AAClE,cAAMpK,IAAMoK,EAAqB,SAAS,QAAQH,CAAU,IAAI;AAChE,QAAIjK,MAAQ,OACVoK,EAAqB,SAAS,OAAOpK,GAAK,GAAGmK,CAAU,GACvDtB,EAA0BuB,EAAqB,UAAUpK,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MAC3F,OACK;AAEL,cAAM1G,IAAMyG,EAAW,SAAS,QAAQwD,CAAU,IAAI;AACtD,QAAIjK,MAAQ,OACVyG,EAAW,SAAS,OAAOzG,GAAK,GAAGmK,CAAU,GAC7CtB,EAA0BpC,EAAW,UAAUzG,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MAEnF;AAEA,aAAAR,EAAwBO,CAAU,GAC3BC;AAAA,IAAA;AAAA,IA2CP,cAxCmB,CAACU,GAA6BjzC,GAAW+1C,MAA6B;AACnF,YAAAzD,IAA6Br+C,GAAUuS,EAAM,KAAK,GAElD,EAAE,WAAWsvC,MAAeN,EAAavC,GAAUX,EAAW,QAAQ;AAE5E,UAAI,CAACwD,GAAY;AACf,QAAAt0C,EAAa,mCAAmC;AAChD;AAAA,MACF;AACA,YAAMw0C,IAAiC;AAAA,QACrC,MAAM/hD,GAAU+L,CAAI;AAAA,QACpB,UAAU+1C,IAAkB,CAAK,IAAA;AAAA,QACjC,MAAM;AAAA,UACJ,OAAO;AAAA,QACT;AAAA,MAAA;AAES,MAAAC,EAAA,KAAK,KAAKh2C,EAAK,IACfg2C,EAAA,KAAK,WACdF,EAAW,YAAYA,EAAW,SAAS,SAAS,IAAIA,EAAW,SAAS,SAAS,IAAI,GAChFE,EAAA,KAAK,SAASF,EAAW,KAAK,IAErC,CAAC7iD,EAAY6iD,EAAW,QAAQ,KAAKA,EAAW,SAAS,WAAW,MAC3DA,EAAA,SAAS,KAAKE,CAAU,GACnCjE,EAAwBO,CAAU;AAAA,IACpC;AAAA,IAiBA,YAzJiB,CAACnd,MAAoD;AAChE,YAAAmd,IAA6Br+C,GAAUuS,EAAM,KAAK,GAClD,EAAE,WAAA0vC,GAAW,YAAAhB,MAAeM,EAAargB,GAAImd,EAAW,QAAQ;AACtE,UAAI,CAAC4D;AACH,eAAO;AAGT,YAAM3D,IAAuC,CAAA;AAEzC,UAAA2C,KAAcA,EAAW,UAAU;AACrC,cAAMrJ,IAAMqJ,EAAW,SAAS,QAAQgB,CAAS;AACjD,QAAIrK,MAAQ,OACCqJ,EAAA,SAAS,OAAOrJ,GAAK,CAAC,GACjC6I,EAA0BQ,EAAW,UAAUrJ,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MACjF,OACK;AACL,cAAM1G,IAAMyG,EAAW,SAAS,QAAQ4D,CAAS;AACjD,QAAIrK,MAAQ,OACCyG,EAAA,SAAS,OAAOzG,GAAK,CAAC,GACjC6I,EAA0BpC,EAAW,UAAUzG,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MAEnF;AAEA,aAAAR,EAAwBO,CAAU,GAC3BC;AAAA,IAAA;AAAA,IAkIP,YAvHiB,CACjBpd,GACAn1B,GACAg+B,IAAyD,MACzDqU,IAA0B,MAC1BK,IAAwB,MACxBnV,IAA+C,WAC5C;AACG,YAAA+U,IAA6Br+C,GAAUuS,EAAM,KAAK,GAElD,EAAE,WAAA0vC,EAAU,IAAIV,EAAargB,GAAImd,EAAW,QAAQ;AAC1D,MAAK4D,MAGKA,EAAA,OAAOjiD,GAAU+L,CAAI,GAC1B5M,GAAO4qC,CAAQ,MAAGkY,EAAU,WAAWlY,IACvC5qC,GAAOi/C,CAAQ,MAAG6D,EAAU,KAAK,WAAW7D,IAC5Cj/C,GAAOs/C,CAAK,MAAGwD,EAAU,KAAK,QAAQxD,IACvC,CAACt/C,GAAOs/C,CAAK,KAAKA,MAAU,OAAMJ,EAAW,KAAK,QAAQ,KACzDr/C,EAAYsqC,CAAM,MAAG2Y,EAAU,KAAK,SAAS3Y,IAClDwU,EAAwBO,CAAU;AAAA,IAAA;AAAA,EAmGlC;AAEJ;;;;;;;;;;;;;;ACvgBA,UAAM9/C,IAAQC,GAYR4D,IAAOC,GAOPg9C,IAAgB,CAACt8C,MAA0D;AAC/E,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,YAAYW,CAAI;AACrB;AAAA,MACF;AACA,MAAAX,EAAK,YAAYpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGlC+gD,IAAc,CAACv8C,MAA0D;AAC7E,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,UAAUW,CAAI;AACnB;AAAA,MACF;AACA,MAAAX,EAAK,UAAUpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGhC6gD,IAAkB,CAACr8C,MAA0D;AACjF,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,cAAcW,CAAI;AACvB;AAAA,MACF;AACA,MAAAX,EAAK,cAAcpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGpC2jD,IAAkB,CAACn/C,MAA0D;AACjF,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,cAAcW,CAAI;AACvB;AAAA,MACF;AACA,MAAAX,EAAK,cAAcpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGpC4jD,IAAQ5/C,GAAe49C,IAAe,CAAC;AAC7B,IAAAh9C,GAAAg9C,IAAegC,IAAQ,CAAC;AAElC,UAAAC,IAA6BxjD,EAAS,MAExCL,EAAM,sBACN,CAACS,EAAYT,EAAM,KAAK,QAAQ,KAChCA,EAAM,KAAK,SAAS,WAAW,KAC/B4jD,IAAQ5jD,EAAM,QAEjB,GAEK,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/Cd,UAAMH,IAAQC,GA0BR4D,IAAOC,GAEPkQ,IAAQsxB,GAAM,MAAMtlC,EAAM,UAAU,GAEpC6gD,IAAkB,CAACrzC,MAA6B;AACpD,MAAA3J,EAAK,cAAc2J,CAAI;AAAA,IAAA,GAGnBm2C,IAAkB,CAACn2C,MAA6B;AACpD,MAAA3J,EAAK,cAAc2J,CAAI;AAAA,IAAA,GAGnBszC,IAAgB,CAACtzC,MAA6B;AAClD,MAAAwxC,EAAa,QAAQxxC,GACrBuxC,EAAa,QAAQ;AAAA,IAAA,GAGjBgC,IAAc,CAACvzC,MAA6B;AAChD,MAAA3J,EAAK,UAAU2J,CAAI;AAAA,IAAA,GAGfwzC,IAAiB,MAAM;AAC3B,UAAIhhD,EAAM,WAAW,SAAS,SAAS,GAAG;AACnC,QAAA6D,EAAA,aAAapC,GAAUzB,EAAM,WAAW,SAASA,EAAM,WAAW,SAAS,SAAS,CAAC,CAAC,CAAC;AAC5F;AAAA,MACF;AACA,MAAA6D,EAAK,aAAa,IAAI;AAAA,IAAA,GAGlB,EAAE,GAAA3D,MAAMC,MAER8gD,IAAe5gD,EAAS,MACrBI,EAAYT,EAAM,kBAAkB,IAAI4gD,KAAwB1B,EAAW,QAAQl/C,EAAM,kBACjG,GAEK8jD,IAAczjD,EAAS,MACpBL,EAAM,gBAAgB,OAAOgiD,EAAS,QAAQhiD,EAAM,gBAAgB,eAAe,GAC3F,GAEK+jD,IAAgB,MAAM;AAE1B,UADI/jD,EAAM,oBACN,CAACi/C,EAAS;AAAO;AACf,YAAA+E,IAAkB,MAAM,KAAK/E,EAAS,MAAM,iBAA8B,MAAM0C,EAAkB,CAAC;AACzG,MAAAI,EAAkB,QAAQ;AAC1B,eAASn7C,IAAI,GAAGA,IAAIo9C,EAAgB,QAAQp9C;AACxB,QAAAm7C,EAAA,MAAMn7C,CAAC,IAAIu1C,GAAY6H,EAAgBp9C,CAAC,GAAG,IAAI;AAAA,UAC/D,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,UACP;AAAA,UACA,QAAQ,MAAM26C;AAAA,UACd,YAAYC;AAAA,UACZ,WAAWC;AAAA,UACX,aAAaC;AAAA,UACb,gBAAgB;AAAA,UAChB,eAAe;AAAA,UACf,eAAe;AAAA,UACf,mBAAmB;AAAA,UACnB,UAAU,MAAM;AAAA,UAAC;AAAA,UACjB,SAAS,MAAM;AACb,YAAAM,EAAS,QAAQ;AAAA,UACnB;AAAA,UACA,OAAO,CAACvsC,MAAyB;AAC/B,YAAAusC,EAAS,QAAQ,IACjBvyB,GAAS,MAAM;AACb,oBAAMkT,IAAK5gC,GAAY0T,EAAM,KAAK,aAAa,SAAS,KAAK,GAAG;AAChE,kBAAIktB,IAAK;AAAG;AACZ,oBAAM2M,IAAW75B,EAAM;AACvB,kBAAIhV,EAAY6uC,CAAQ;AAAG;AAC3B,oBAAMD,IAAW55B,EAAM;AACvB,kBAAIhV,EAAY4uC,CAAQ;AAAG;AAC3B,kBAAI4U,IAA0B;AACxB,oBAAAhU,KAAWx6B,EAAM,KAAK;AACxB,cAAC7U,GAAOqvC,EAAQ,MAClBgU,IAAWliD,GAAYkuC,GAAS,aAAa,SAAS,KAAK,GAAG,GAC1DgU,MAAa,MAAcA,IAAA;AAEjC,oBAAM7C,KAAe7E,EAAiB5Z,GAAIshB,GAAU3U,GAAUD,GAAUrvC,EAAM,QAAQ;AACtF,cAAA6D,EAAK,SAASu9C,EAAY;AAAA,YAAA,CAC3B;AAAA,UACH;AAAA,QAAA,CACD;AAAA,IACH,GAGI;AAAA,MACJ,UAAAY;AAAA,MACA,UAAA/C;AAAA,MACA,YAAAC;AAAA,MACA,cAAAH;AAAA,MACA,cAAAC;AAAA,MACA,eAAAI;AAAA,MACA,kBAAA7C;AAAA,MACA,YAAAiE;AAAA,MACA,cAAA0D;AAAA,MACA,YAAAxD;AAAA,MACA,YAAAP;AAAA,MACA,SAAAxgC;AAAA,MACA,SAAA0hC;AAAA,MACA,uBAAAC;AAAA,MACA,mBAAAS;AAAA,IACE,IAAAF,GAAyB7tC,GAAO+vC,GAAelgD,CAAI;AAEvD,WAAA61B,GAAgB,MAAM;AACZ,MAAA/Z;IAAA,CACT,GAED8P,GAAS,MAAM;AACb,MAAAwvB,EAAS,QAAQ,SAAS,cAAc,MAAMgC,EAAa,KAAK,GAClD8C;IAAA,CACf,GAEDz+C;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,OAAOmE,MAAa;AACV,QAAAwb,MACJxb,MAAa,MAAqB4/C;MACxC;AAAA,IAAA,GAGW9sB,EAAA;AAAA,MACX,SAAAoqB;AAAA,MACA,YAAAb;AAAA,MACA,cAAA0D;AAAA,MACA,YAAAxD;AAAA,MACA,YAAAP;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxKD,UAAMngD,IAAQC,GAsBR4D,IAAOC,GASPuiC,IAAcpgC,EAAI,EAAK,GACvB8wB,IAAS12B,EAAS;AAAA,MACtB,MAAM;AACA,eAAAI,EAAYT,EAAM,UAAU,IAAUqmC,EAAY,QAC/CrmC,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAmB;AACrB,QAAAkiC,EAAY,QAAQliC,GACpBN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKggD,IAAqB9jD,EAAS;AAAA,MAClC,KAAK,MAAML,EAAM;AAAA,MACjB,KAAK,CAACmE,MAAa;AACjB,QAAAN,EAAK,qBAAqB,EAAE,GAAGjC,GAAMuC,CAAQ,EAAG,CAAA;AAAA,MAClD;AAAA,IAAA,CACD,GAEKwhC,IAAc1/B,EAAI,EAAI,GACtBm+C,IAAgBn+C,EAAI,EAAK,GAEzB,EAAE,GAAA/F,MAAMC,MAERkkD,IAAqBhkD,EAAS,MAC3BL,EAAM,cAAc,MAC5B,GAEK2mC,IAAiBtmC,EAAS,MACvBgkD,EAAmB,QAAQrkD,EAAM,YAAYqkD,EAAmB,QAAQrkD,EAAM,QACtF,GAEKgQ,IAAS,MAAM;AACnB,MAAAnM,EAAK,QAAQ,GACb8hC,EAAY,QAAQ,IACpB5O,EAAO,QAAQ;AAAA,IAAA,GAGX8O,IAAgB,MAAM;AACd,MAAAF,EAAA,QAAQ,CAACA,EAAY;AAAA,IAAA,GAG7B11B,IAAU,MAAM;AACpB,MAAA8mB,EAAO,QAAQ;AAAA,IAAA,GAGX1mB,IAAY,MAAM;AACtB,MAAAxM;AAAA,QACE;AAAA,QACA7D,EAAM,cAAc,IAAI,CAACwE,MAAS5C,GAAM4C,CAAI,CAAC;AAAA,MAAA,GAEvCyL;IAAA,GAGJ+zB,IAAgB,MAAM;AAC1B,MAAAngC,EAAK,iBAAiB;AAAA,IAAA,GAGlBygD,IAAe,MAAM;AACzB,MAAAzgD,EAAK,cAAc;AAAA,IAAA,GAGfiB,IAAWzE,EAAS,MACjB,KAAK,KAAK8jD,EAAmB,MAAM,aAAaA,EAAmB,MAAM,WAAW,CAC5F,GAEKI,IAAclkD,EAAS,MACpB,EACJO,GAAOujD,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASr/C,EAAS,SAC5Fq/C,EAAmB,MAAM,gBAAgB,GAE5C,GAEK5d,IAAsB,CAACC,MAA4B;AACvD,MAAIA,KAAkB+d,EAAY,SAAS,CAACvkD,EAAM,WAClCgkC;IAChB;AAGW,WAAA/M,EAAA;AAAA,MACX,MAAMjnB;AAAA,IAAA,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvHKw0C,KAAUv+C,EAAI,EAAK;AAElB,SAASw+C,KAAoB;AAK3B,SAAA;AAAA,IACL,SAAAD;AAAA,IACA,YANiB,MAAM;AACf,MAAAA,GAAA,QAAQ,CAACA,GAAQ;AAAA,IAAA;AAAA,EAKzB;AAEJ;ACTO,MAAME,KAA4B;AAAA,EACvC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AACX,GACaC,KAAmCD,GAA0B;AAGnE,SAASE,KAA+B;AACvC,QAAA,EAAE,MAAMzkD,MACR0kD,IAAmC5+C,EAAwD;AAAA,IAC/F;AAAA,MACE,OAAOy+C,GAA0B;AAAA,MACjC,OAAO,EAAE,sCAAsC;AAAA,IACjD;AAAA,IACA;AAAA,MACE,OAAOA,GAA0B;AAAA,MACjC,OAAO,EAAE,uCAAuC;AAAA,IAClD;AAAA,IACA;AAAA,MACE,OAAOA,GAA0B;AAAA,MACjC,OAAO,EAAE,2CAA2C;AAAA,IACtD;AAAA,IACA;AAAA,MACE,OAAOA,GAA0B;AAAA,MACjC,OAAO,EAAE,uCAAuC;AAAA,IAClD;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,kCAAAG;AAAA,IACA,oCANyC,CAACnkD,MACnCmkD,EAAiC,MAAM,KAAK,CAACrgD,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKjF;AAEJ;ACvCA,MAAM,KAAER,GAAE,IAAI0L,GAAK;AAEZ,SAASk5C,KAAqB;AAGnC,SAFwBv0B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExB6kD,IAAS;AAAA,IAC9B,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAE7kD,GAAE,IAAI0L,GAAK;AAEZ,SAASo5C,KAAmB;AAGjC,SAFwBz0B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBoD,IAAO;AAAA,IAC5B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACRA,MAAM,KAAEpD,GAAE,IAAI0L,GAAK;AAEZ,SAASq5C,KAAuB;AAGrC,SAFwB10B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBuC,IAAW;AAAA,IAChC,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAEvC,GAAE,IAAI0L,GAAK;AAEZ,SAASs5C,KAAsB;AAGpC,SAFwB30B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBilD,IAAU;AAAA,IAC/B,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAEjlD,GAAE,IAAI0L,GAAK;AAEZ,SAASw5C,KAAuB;AAGrC,SAFwB70B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBmlD,IAAW;AAAA,IAChC,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAEnlD,GAAE,IAAI0L,GAAK;AAEZ,SAAS05C,KAAsB;AAGpC,SAFwB/0B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBqlD,IAAU;AAAA,IAC/B,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAErlD,GAAE,IAAI0L,GAAK;AAEZ,SAAS45C,KAAqB;AAGnC,SAFwBj1B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBulD,IAAS;AAAA,IAC9B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACRA,MAAM,KAAEvlD,GAAE,IAAI0L,GAAK;AAEZ,SAAS85C,KAAsB;AAGpC,SAFwBn1B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBylD,IAAU;AAAA,IAC/B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACRA,MAAM,KAAEzlD,GAAE,IAAI0L,GAAK;AAEZ,SAASg6C,KAAkB;AAGhC,SAFwBr1B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExB2lD,GAAQ,MAAM,gBAAgB,GAAG;AAAA,IACtD,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACPA,MAAM,KAAE3lD,GAAE,IAAI0L,GAAK;AAEZ,SAASk6C,KAAmC;AACjD,QAAMC,IAAkBx1B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,GAEzC8lD,IAAiC,CAAC/3B,GAAaC,MAC5C,CAACxtB,MACN,CAACmlD,GAAQ,IAAInlD,CAAK,KAAKA,EAAM,MAAM,CAAC8D,MAASA,EAAK,UAAU1C,EAAMmsB,CAAG,KAAKzpB,EAAK,UAAU1C,EAAMosB,CAAG,CAAC;AAkBvG,SAAO63B,EAhB6B,CAAC93B,GAAaC,OACzC;AAAA,IACL,YAAY83B,EAA+B/3B,GAAKC,CAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMnD,SAAS;AAAA,MACP,KAAAD;AAAA,MACA,KAAAC;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EAAA,IAIgD;AAAA,IAClD,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;AC9BA,MAAM,KAAEhuB,GAAE,IAAI0L,GAAK;AAEZ,SAASq6C,KAAiB;AAG/B,SAFwB11B,GAAkB,EAAErwB,GAAAA,GAAG,CAAA,EAExBgmD,IAAK;AAAA,IAC1B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACEO,SAASC,KAAc;AACrB,SAAA;AAAA,IACL,UAAUT,GAAoB;AAAA,IAC9B,YAAYp1B,GAAsB;AAAA,IAClC,WAAW80B,GAAqB;AAAA,IAChC,WAAWH,GAAqB;AAAA,IAChC,UAAUK,GAAoB;AAAA,IAC9B,UAAUJ,GAAoB;AAAA,IAC9B,SAASJ,GAAmB;AAAA,IAC5B,OAAOE,GAAiB;AAAA,IACxB,SAASQ,GAAmB;AAAA,IAC5B,MAAMI,GAAgB;AAAA,IACtB,KAAKK,GAAe;AAAA,IACpB,uBAAuBH,GAAiC;AAAA,EAAA;AAE5D;;;;;;;;;;;;;;;;;;;AClBA,UAAM9lD,IAAQC,GAUR4D,IAAOC,GAKPsiD,IAAW,CAAC1lD,MACZV,EAAM,OAAO,WAAW,SAAS0kD,GAA0B,UACtD,SAAShkD,CAAK,IAEhBA,GAGH2lD,IAAmB,CAAC3lD,MAAe;AAClC,MAAAmD,EAAA,qBAAqB,EAAE,UAAU7D,EAAM,OAAO,UAAU,OAAOomD,EAAS1lD,CAAK,EAAG,CAAA;AAAA,IAAA,GAGjFmE,IAAqBxE,EAAS,MAAM;AAClC,YAAAK,IAAQiB,GAAQ3B,EAAM,UAAU,IAAI4B,GAAM5B,EAAM,UAAU,IAAIA,EAAM;AAC1E,aAAIA,EAAM,OAAO,WAAW,SAAS0kD,GAA0B,eAAepjD,GAAcZ,CAAK,IAAU,KACpGA;AAAA,IAAA,CACR,GAEK,EAAE,WAAA+B,GAAW,WAAA4iD,GAAW,YAAA70B,GAAY,UAAA+0B,GAAU,UAAAJ,GAAU,uBAAAmB,MAA0BH,MAElFnzB,IAAQ3yB,EAAS,MAAM;AAC3B,YAAMkmD,IAAoC;AAAA,QACxC,oBAAoB;AAAA,UAClB,UAAU/1B,EAAWxwB,EAAM,OAAO,WAAW,QAAQ;AAAA,QACvD;AAAA,MAAA;AAEM,cAAAA,EAAM,OAAO,WAAW,MAAM;AAAA,QACpC,KAAK0kD,GAA0B;AAC7B,UAAA6B,EAAa,mBAAmB,YAAYlB;AAAA,YAC1CrlD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEumD,EAAa,mBAAmB,YAAY9jD;AAAA,YAC1CzC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,QACF,KAAK0kD,GAA0B;AAC7B,UAAA6B,EAAa,mBAAmB,WAAWhB;AAAA,YACzCvlD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEumD,EAAa,mBAAmB,WAAWpB;AAAA,YACzCnlD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,QACF,KAAK0kD,GAA0B;AAC7B,UAAA6B,EAAa,mBAAmB,YAAYlB;AAAA,YAC1CrlD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEumD,EAAa,mBAAmB,YAAY9jD;AAAA,YAC1CzC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExEumD,EAAa,mBAAmB,wBAAwBD;AAAA,YACtDtmD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,YACtEA,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,MACJ;AAEO,aAAAumD;AAAA,IAAA,CACR,GAGKh0B,IAAKU,GAAaD,GAAO,EAAE,oBAAAnuB,KAAsB,EAAE,QAAQ7E,EAAM,gBAAA,CAAiB,GAElFsE,IAAuBjE,EAAS,MAChCkyB,EAAG,MAAM,QAAQ,SAAe,CAACA,EAAG,MAAM,QAAQ,IAAI,CAAC/tB,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,EACR,GAEKgiD,IAAUvgD,EAAwB,MAAS;AACjD,IAAAugD,EAAQ,QAAQxmD,EAAM,OAAO,WAAW,YAAY;AAEpD,UAAMoE,IAAS,MAAM;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,GAC7BuyB,EAAG,MAAM;IAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvFlB,UAAMvyB,IAAQC,GAeR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAER,EAAE,SAAAqkD,GAAS,YAAAiC,EAAW,IAAIhC,GAAkB,GAE5C4B,IAAmB,CAAC74C,MAA2C;AACnE,YAAMk5C,IAAU,CAAA;AACR,MAAAA,EAAAl5C,EAAK,QAAQ,IAAIA,EAAK,OAC9B3J,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAY,GAAG0mD,GAAS,GAC7D7iD,EAAK,WAAW;AAAA,IAAA,GAGZ8iD,IAAiBtmD,EAAS,MACvBL,EAAM,SAAS,MAAM,GAAGA,EAAM,WAAW,CACjD,GAEK4mD,IAAgBvmD,EAAS,MACtBL,EAAM,SAAS,MAAMA,EAAM,WAAW,CAC9C,GAEK6mD,IAAqBxmD,EAAS,MAC3BmkD,EAAQ,QACXtkD,EAAE,kDAAkD,IACpDA,EAAE,kDAAkD,CACzD,GACK4mD,IAAqBzmD,EAAS,MAC3BmkD,EAAQ,QAAQ,cAAc,UACtC,GAEKuC,IAAiB1mD,EAAS,MACvBL,EAAM,SAAS,SAASA,EAAM,WACtC,GAGKuyB,IAAKU,GAAa,EAAE,QAAQjzB,EAAM,iBAAiB;AAM5C,WAAAi3B,EAAA;AAAA,MACX,UALe,MACR1E,EAAG,MAAM;IAIhB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrEKy0B,KAAiB/gD,EAAI,EAAK,GAC1BghD,KAAgEhhD,EAAI,MAAS;AAE5E,SAASihD,KAA6B;AACrC,QAAAC,IAAkB,CAAC1xC,MAAqB;AAC5C,IAAAA,EAAM,eAAe,GACrB2xC,EAAyB3xC,GAAO,EAAI;AAAA,EAAA,GAEhC4xC,IAAmB,CAAC5xC,MAAqB;AAC7C,IAAAA,EAAM,eAAe,GACrB2xC,EAAyB3xC,GAAO,EAAK;AAAA,EAAA,GAEjC6xC,IAAc,CAAC7xC,MAAqB;AACxC,IAAAA,EAAM,eAAe,GACrB2xC,EAAyB3xC,GAAO,EAAK;AAAA,EAAA,GAEjC2xC,IAA2B,CAAC3xC,GAAkBusC,MAAsB;AACpE,IAACuF,EAAuB9xC,CAAK,MAG7BusC,KACFgF,GAAe,QAAQ,IACvB,aAAaC,GAAc,KAAK,MAEhC,aAAaA,GAAc,KAAK,GAClBA,GAAA,QAAQ,WAAW,MAAM;AACrC,MAAAD,GAAe,QAAQ;AAAA,OACtB,GAAG;AAAA,EACR,GAEIO,IAAyB,CAAC9xC,MAAqB;;AAC/C,SAAApR,IAAAoR,EAAM,iBAAN,QAAApR,EAAoB;AACtB,eAASuC,IAAI,GAAGA,IAAI6O,EAAM,aAAa,MAAM,QAAQ7O;AACnD,YAAI6O,EAAM,aAAa,MAAM7O,CAAC,MAAM;AAC3B,iBAAA;AAAA;AAKN,WAAA;AAAA,EAAA;AAeF,SAAA;AAAA,IACL,gBAAAogD;AAAA,IACA,qBAd0B,MAAM;AACzB,aAAA,SAAS,iBAAiB,YAAYG,CAAe,GACrD,OAAA,SAAS,iBAAiB,aAAaE,CAAgB,GACvD,OAAA,SAAS,iBAAiB,QAAQC,CAAW;AAAA,IAAA;AAAA,IAYpD,wBAT6B,MAAM;AAC5B,aAAA,SAAS,oBAAoB,YAAYH,CAAe,GACxD,OAAA,SAAS,oBAAoB,aAAaE,CAAgB,GAC1D,OAAA,SAAS,oBAAoB,QAAQC,CAAW;AAAA,IAAA;AAAA,EAMvD;AAEJ;AC7Da,MAAAE,KAAiB,CAACC,MAAkC;;AAC/D,MAAI,CAACA;AAAa,WAAA;AAClB,MAAIA,EAAK,QAAQA,EAAK,KAAK,SAAS;AAClC,WAAOA,EAAK;AAGd,WADkBpjD,IAAAojD,EAAK,KAAK,MAAM,GAAG,EAAE,UAArB,gBAAApjD,EAA4B,eAC3B;AAAA,IACjB,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF;ACDgB,SAAAqjD,GAAsBC,GAA4BC,GAA8C;AACxG,QAAAC,IAAaxnD,EAAS,MACtBI,EAAYknD,CAAM,IACb,KAEFA,EAAO,MAAM,GAAG,CACxB,GAEKG,IAAcznD,EAAS,MACvBI,EAAYmnD,CAAQ,IACf,KAEF,OAAO,KAAKA,CAAQ,CAC5B,GAEKG,IAAuB,CAACC,GAAeC,IAAe,OAAU;AACpE,UAAMC,IAA+B,CAAA,GAC/BC,IAAaH,EAAM,OAAO,CAACP,MAAS;AAClC,YAAAW,IAAcC,EAAaZ,GAAMI,EAAW,KAAK,KAAKS,EAAWb,GAAMK,EAAY,OAAOF,CAAQ;AACxG,aAAKQ,KACgBF,EAAA,KAAKT,EAAK,IAAI,GAE5BW;AAAA,IAAA,CACR;AACG,QAAAF,EAAmB,UAAU,CAACD,GAAc;AACxC,YAAA,EAAE,aAAAl5C,MAAgBV,MAClB,EAAE,GAAAnO,EAAE,IAAI0L,GAAK;AACnB,MAAAmD,EAAY7O,EAAE,mCAAmC,IAAI,MAAMgoD,EAAmB,KAAK,IAAI,CAAC;AAAA,IAC1F;AAEO,WAAAC;AAAA,EAAA,GAGHE,IAAe,CAACZ,GAAYc,MAAsB;AAClD,QAAAA,EAAQ,WAAW;AACd,aAAA;AAET,aAAS3hD,IAAI,GAAGA,IAAI2hD,EAAQ,QAAQ3hD;AAClC,UAAI2hD,EAAQ3hD,CAAC,EAAE,WAAW,GAAG;AAEvB,YAAA6gD,EAAK,KAAK,YAAY,EAAE,SAASc,EAAQ3hD,CAAC,CAAC;AACtC,iBAAA;AAAA,aAEJ;AAEL,cAAM4hD,IAAYD,EAAQ3hD,CAAC,EAAE,MAAM,GAAG;AACtC,YAAI4hD,EAAU,CAAC,MAAM,OAAOhB,GAAeC,CAAI,EAAE,WAAWe,EAAU,CAAC,IAAI,GAAG;AACrE,iBAAA;YACED,EAAQ3hD,CAAC,MAAM4gD,GAAeC,CAAI;AACpC,iBAAA;AAAA,MAEX;AAEK,WAAA;AAAA,EAAA,GAGHa,IAAa,CAACb,GAAY3gB,GAAqB1B,MAA8C;AACjG,QAAI0B,EAAK,WAAW,KAAKrmC,EAAY2kC,CAAK;AACjC,aAAA;AAET,aAAS99B,IAAI,GAAGA,IAAIw/B,EAAK,QAAQx/B,KAAK;AAChC,UAAAw/B,EAAKx/B,CAAC,MAAM,OAAO89B,EAAM0B,EAAKx/B,CAAC,CAAC,KAAKmgD,EAAK;AAErC,eAAA;AACE,UAAA3gB,EAAKx/B,CAAC,EAAE,WAAW,GAAG,KAAK89B,EAAM0B,EAAKx/B,CAAC,CAAC,KAAKmgD,EAAK;AAEpD,eAAA;AACF;AAEL,cAAMe,IAAY1hB,EAAKx/B,CAAC,EAAE,MAAM,GAAG;AACnC,YAAIkhD,EAAU,CAAC,MAAM,OAAOhB,GAAeC,CAAI,EAAE,WAAWe,EAAU,CAAC,IAAI,GAAG,KAAKpjB,EAAM0B,EAAKx/B,CAAC,CAAC,IAAImgD,EAAK;AAChG,iBAAA;AACE,YAAA3gB,EAAKx/B,CAAC,MAAMkgD,GAAeC,CAAI,KAAKriB,EAAM0B,EAAKx/B,CAAC,CAAC,IAAImgD,EAAK;AAC5D,iBAAA;AAAA,MAEX;AAAA,IACF;AACO,WAAA;AAAA,EAAA;AAGF,SAAA;AAAA,IACL,sBAAAM;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;ACnFA,UAAM/nD,IAAQC,GAsBR4D,IAAOC,GAKP2kD,IAAcxiD,KAGd,EAAE,sBAAA8hD,EAAqB,IAAIL,GAAsB1nD,EAAM,QAAQA,EAAM,QAAQ;AAEnF,aAAS0oD,EAAOV,GAAsB;AACpC,MAAIhoD,EAAM,YACNY,GAAOonD,CAAK,KAAKA,EAAM,WAAW,KACjCnkD,EAAA,UAAUkkD,EAAqBC,CAAK,CAAC;AAAA,IAC5C;AAEA,UAAM,EAAE,gBAAAW,EAAmB,IAAAC,GAAYH,GAAaC,CAAM,GAEpD,EAAE,gBAAA1B,MAAmBE,MACrB,EAAE,GAAAhnD,MAAMC;;;;;;;;;;;;;;;;;;IChDR0oD,KAAe5iD,EAA6B,MAAS;AAEpD,SAAS6iD,GAA4Bt7C,GAA+B;AACzE,EAAAq7C,GAAa,QAAQr7C;AACvB;AAEgB,SAAAu7C,GAA2BhrB,IAAqB,WAAW;AACzE,MACEt9B,EAAYooD,GAAa,KAAK,KAC9BpoD,EAAYooD,GAAa,MAAM,OAAO,KACtCpoD,EAAYooD,GAAa,MAAM,QAAQ9qB,CAAU,CAAC;AAE5C,UAAA,IAAI,MAAM,oEAAoE;AAG/E,SAAA;AAAA,IACL,aAAa8qB,GAAa,MAAM,QAAQ9qB,CAAU,EAAE;AAAA,IACpD,eAAe8qB,GAAa,MAAM,QAAQ9qB,CAAU,EAAE;AAAA,IACtD,YAAY8qB,GAAa,MAAM,QAAQ9qB,CAAU,EAAE;AAAA,IACnD,aAAa8qB,GAAa,MAAM,QAAQ9qB,CAAU,EAAE;AAAA,EAAA;AAExD;ACtBO,SAASirB,GAAgBz4C,GAAuD;AAqB9E,SAAA;AAAA,IACL,0BArB+B,CAC/B04C,GACAhf,IAAQ15B,EAAO,YACfy5B,IAASz5B,EAAO,aAChB24C,IAAS,OAGP34C,EAAO,gBACP,aACA05B,IACA,OACAD,KACCif,EAAM,IAAI,iBAAiB,IAAI,OAAOA,EAAM,IAAI,iBAAiB,MAClE,MACAA,EAAM,IAAI,QACV,UACCC,IAAS,aAAa,KAAK,IAAQ,IAAA;AAAA,EAKtC;AAEJ;ACvBgB,SAAAC,GACdxtB,IAAsC,QACtC0F,GACA;AACM,QAAA+nB,IAAyB,CAACztB,MAA4B;AAC1D,UAAMyJ,IAAgC,CAAA;AAC7B,aAAAx+B,IAAI,GAAGA,IAAIy6B,EAAmB1F,CAAS,EAAE,UAAU,QAAQ/0B;AAC5D,MAAAw+B,EAAA/D,EAAmB1F,CAAS,EAAE,UAAU/0B,CAAC,CAAC,IAAIy6B,EAAmB1F,CAAS,EAAE;AAE7E,WAAAyJ;AAAA,EAAA,GAGHikB,IAAchpD,EAAS,MACvBs7B,IACK;AAAA,IACL,GAAGytB,EAAuBztB,CAAS;AAAA,EAAA,IAGhC;AAAA,IACL,GAAGytB,EAAuBpuB,GAAa,KAAK;AAAA,IAC5C,GAAGouB,EAAuBpuB,GAAa,KAAK;AAAA,IAC5C,GAAGouB,EAAuBpuB,GAAa,KAAK;AAAA,IAC5C,GAAGouB,EAAuBpuB,GAAa,QAAQ;AAAA,EAAA,CAElD,GAEKsuB,IAAejpD,EAAS,MACrB,OAAO,KAAKgpD,EAAY,KAAK,EAAE,KAAK,GAAG,CAC/C;AAEM,SAAA;AAAA,IACL,aAAAA;AAAA,IACA,cAAAC;AAAA,EAAA;AAEJ;ACbY,IAAAC,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,QAAQ,SACRA,EAAA,wBAAwB,yBACxBA,EAAA,WAAW,YAJDA,IAAAA,MAAA,CAAA,CAAA,GAOAC,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,UAAU,WACVA,EAAA,YAAY,aACZA,EAAA,aAAa,cACbA,EAAA,SAAS,UACTA,EAAA,WAAW,YACXA,EAAA,OAAO,QAPGA,IAAAA,MAAA,CAAA,CAAA,GC7BAC,uBAAAA,OACVA,EAAA,YAAY,aACZA,EAAA,WAAW,YACXA,EAAA,SAAS,UACTA,EAAA,YAAY,aACZA,EAAA,YAAY,aACZA,EAAA,SAAS,UANCA,IAAAA,MAAA,CAAA,CAAA,GASAC,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,UAAU,WACVA,EAAA,kBAAkB,oBAClBA,EAAA,kBAAkB,qBAClBA,EAAA,iBAAiB,mBACjBA,EAAA,cAAc,gBACdA,EAAA,UAAU,QAPAA,IAAAA,MAAA,CAAA,CAAA,GAmBAC,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,UAAU,SAHAA,IAAAA,MAAA,CAAA,CAAA;AAyEC,MAAAC,KAAuB,CAAClpD,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpBmpD,KAAuB,CAACnpD,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpBopD,KAAuB,CAACppD,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpBqpD,KAA0B,CAACrpD,MAClC,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB;ACpH1B,SAASspD,KAA4B;AAoDnC,SAAA;AAAA,IACL,eApDoB,CACpBjnD,GACAmnB,GACA+/B,GACAtuB,GACAuuB,GACAxuB,OAEO;AAAA,MACL,KAAA34B;AAAA,MACA,MAAAmnB;AAAA,MACA,MAAM;AAAA,MACN,QAAA+/B;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,WAAAtuB;AAAA,MACA,aAAaZ,GAAe;AAAA,MAC5B,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,sBAAsB;AAAA,MACtB,0BAA0B,CAAC;AAAA,MAC3B,UAAU,CAAC;AAAA,MACX,SAAS,CAAC;AAAA,MACV,iBAAiB,CAAC;AAAA,MAClB,YAAY,CAAC;AAAA,MACb,wBAAwB;AAAA,MACxB,WAAAmvB;AAAA,MACA,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,WAAAxuB;AAAA,MACA,cAAc;AAAA,MACd,UAAU;AAAA,QACR,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,OAAO;AAAA,MACT;AAAA,MACA,iBAAiB;AAAA,MACjB,OAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,qBAAqBguB,GAAoB;AAAA,MAC3C;AAAA,MACA,2BAA2B;AAAA,MAC3B,yBAAyB;AAAA,MACzB,UAAU;AAAA,MACV,OAAO;AAAA,IAAA;AAAA,EAKT;AAEJ;ACzDa,MAAAS,KAAyB,CACpCC,GACA/oB,MACwB;AACxB,aAAW,CAACt+B,GAAK2K,CAAM,KAAK,OAAO,QAAQ2zB,CAAkB;AAC3D,QAAK,OAAO,OAAOrG,EAAY,EAAE,SAASj4B,CAAmB;AAC7D,eAAS6D,IAAI,GAAGA,IAAI8G,EAAO,UAAU,QAAQ9G;AACvC,YAAAwjD,MAAa18C,EAAO,UAAU9G,CAAC;AAAU,iBAAA7D;AAAA;AAG1C,SAAA;AACT,GCVMmnD,KAAYjkD,EAAwB,MAAS;AAEnC,SAAAokD,GAAsBC,IAAqB,IAAI;AACvD,QAAA,EAAE,cAAAlpB,MAAiBI,MACnB+oB,IAAgBtkD,EAAIikD,GAAU,SAAS9oB,EAAa,MAAM,SAAS,iBAAiB,OAAO,GAE3FopB,IAAyBF,IAAa,GACtCG,IAA2BH,IAAa,GACxCI,IAAyBJ,IAAa,GAEtCK,IAAkB,CAACjQ,MAAyB;AAC5C,QAAA95C,GAAO85C,CAAK;AACP,aAAA;AAGH,UAAAkQ,IAA2BL,EAAc,QAAQ7P;AACvD,WAAIkQ,IAA2BF,KACfH,EAAA,QAAQM,EAAgBH,IAAyBhQ,CAAK,GACpEwP,GAAU,QAAQK,EAAc,OAEzB,MAELK,IAA2BJ,KACfD,EAAA,QAAQM,EAAgBJ,IAA2B/P,CAAK,GACtEwP,GAAU,QAAQK,EAAc,OAEzB,MAGF;AAAA,EAAA,GAGHM,IAAkB,CAACnqD,MACnBA,IAAQ0gC,EAAa,MAAM,SAAS,iBAAiB,UAChDA,EAAa,MAAM,SAAS,iBAAiB,UAElD1gC,IAAQ0gC,EAAa,MAAM,SAAS,iBAAiB,UAChDA,EAAa,MAAM,SAAS,iBAAiB,UAG/C1gC;AAGF,SAAA;AAAA,IACL,eAAA6pD;AAAA,IACA,iBAAAI;AAAA,EAAA;AAEJ;ACzCA,MAAMvqB,KAAY,iBACZ0qB,KAAuB,KAKhBC,KAAmB,CAACvsB,GAA6Bh6B,MACrD,IAAI,QAAQ,CAACm2B,GAAS8D,MAAW;;AAClC,MAAAynB,IAAM9lB,KAAY,cAAc57B,EAAK;AACzC,EAAIA,EAAK,SAAS+kD,GAAoB,YAAY/kD,EAAK,YAAYA,EAAK,YACtE0hD,IAAM9lB,KAAY,YAAY57B,EAAK,UAAU,gBAAgBA,EAAK,WAEpEg6B,EACG,EAAA;AAAA,IACC0nB;AAAA,IACA,KAAK,UAAU;AAAA,MACb,UAAUsB,GAAehjD,EAAK,IAAI;AAAA,MAClC,OAAMH,IAAAG,EAAK,SAAL,gBAAAH,EAAW;AAAA,IAAA,CAClB;AAAA,EAAA,EAEF,KAAK,CAACiM,MAAQ;AACT,IAAAA,EAAI,WAAWjE,KACjBsuB,EAAQrqB,EAAI,IAAI,IAGTmuB;EACT,CACD,EACA,MAAM,CAACnmB,MAAQ;AAEd,IAAAmmB,EAAOnmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGU0yC,KAAmB,CAC9BxsB,GACAh6B,GACAymD,GACAC,GACAC,GACA3lC,GACA4lC,IAAuE,WAEhE,IAAI,QAAQ,CAACzwB,GAAS8D,MAAW;AAChC,QAAA4sB,IAAW,IAAI,YACfnF,IAAM9lB,KAAY,MAAM6qB,IAAU;AAC/B,EAAAI,EAAA,OAAO,QAAQH,CAAM,GACrBG,EAAA;AAAA,IACP;AAAA,IACA,KAAK,UAAU;AAAA,MACb,QAAA7lC;AAAA,MACA,MAAA2lC;AAAA,IAAA,CACD;AAAA,EAAA,GAGH3sB,EAAOssB,EAAoB,EACxB,KAAK5E,GAAKmF,GAAU;AAAA,IACnB,aAAa7mD,EAAK,yBAAyBA,EAAK,uBAAuB,QAAQ;AAAA,IAC/E,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,kBAAkB4mD;AAAA,EAAA,CACnB,EACA,KAAK,CAAC96C,MAAQ;AACT,IAAAA,EAAI,WAAWjE,KACjBsuB,EAAQrqB,EAAI,IAAI,IAGTmuB;EACT,CACD,EACA,MAAM,CAACnmB,MAAQ;AAEd,IAAAmmB,EAAOnmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGUgzC,KAAoB,CAAC9sB,GAA6Bh6B,GAAuB+mD,MAC7E,IAAI,QAAQ,CAAC5wB,GAAS8D,MAAW;AACtC,QAAMynB,IAAM9lB,KAAY,MAAM57B,EAAK,SAAS;AAC5C,EAAAg6B,EACG,EAAA;AAAA,IACC0nB;AAAA,IACA,KAAK,UAAU;AAAA,MACb,UAAUqF;AAAA,IAAA,CACX;AAAA,EAAA,EAEF,KAAK,CAACj7C,MAAQ;AACT,IAAAA,EAAI,WAAWlE,KACjBuuB,EAAQrqB,EAAI,IAAI,IAGTmuB;EACT,CACD,EACA,MAAM,CAACnmB,MAAQ;AAEd,IAAAmmB,EAAOnmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGUkzC,KAAc,CAAChtB,GAA6BysB,GAAgBQ,MAChE,IAAI,QAAQ,CAAC9wB,GAAS8D,MAAW;AACtC,QAAMynB,IAAM9lB,KAAY,MAAM6qB,IAAU,aAAaQ;AACrD,EAAAjtB,EAAA,EACG,MAAM0nB,CAAG,EACT,KAAK,CAAC51C,MAAQ;AACT,IAAAA,EAAI,WAAWlE,KACjBuuB,EAAQrqB,EAAI,IAAI,IAGTmuB;EACT,CACD,EACA,MAAM,CAACnmB,MAAQ;AAEd,IAAAmmB,EAAOnmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GCtHGozC,KAA4C,IAC5CC,KAAkC,GAE3BC,KAA0G,CACrHptB,GACAh6B,MAEO,IAAI,QAAQ,CAACm2B,GAAS8D,MAAW;AAClC,MAAAj6B,EAAK,cAAcw2B,GAAa,OAAO;AAClC,IAAAyD;AACP;AAAA,EACF;AACA,EAAAssB,GAAiBvsB,GAAQh6B,CAAI,EAC1B,KAAK,CAAC8L,MAAQ;AACb,IAAAqqB,EAAQrqB,CAA6B;AAAA,EACrC,CACD,EACA,MAAM,CAACgI,MAAQmmB,EAAOnmB,CAAG,CAAC;AAAA,CAC9B,GAGUuzC,KAAiB,CAC5BrtB,GACAh6B,GACAymD,GACAC,GACAC,GACA3lC,GACA4lC,MAEO,IAAI,QAAQ,CAACzwB,GAAS8D,MAAW;AAClC,MAAAj6B,EAAK,cAAcw2B,GAAa,OAAO;AAClC,IAAAyD;AACP;AAAA,EACF;AACiB,EAAAusB,GAAAxsB,GAAQh6B,GAAMymD,GAASC,GAAQC,GAAM3lC,GAAQ4lC,CAAwB,EACnF,KAAK,CAAC96C,MAAQ;AACb,IAAAqqB,EAAQrqB,CAAG;AAAA,EAAA,CACZ,EACA,MAAM,CAACgI,MAAQ;AACd,IAAAmmB,EAAOnmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGUwzC,KAAkB,CAC7BttB,GACAh6B,GACA+mD,GACAQ,MAEO,IAAI,QAAQ,CAACpxB,GAAS8D,MAAW;AAClC,MAAAj6B,EAAK,cAAcw2B,GAAa,OAAO;AAClC,IAAAyD;AACP;AAAA,EACF;AACA,EAAA6sB,GAAkB9sB,GAAQh6B,GAAM+mD,CAAG,EAChC,KAAK,CAACj7C,MAAQ;AACb,IAAA9L,EAAK,SAASglD,GAAsB,YAChCuC,MACGvnD,EAAA,4BAA4B,WAAW,WAAY;AACtD,MAAAwnD,GAA6BxtB,GAAQh6B,CAAI;AAAA,IAAA,GACxCynD,GAAsBznD,CAAI,CAAC,IAEhCm2B,EAAQrqB,CAAG;AAAA,EAAA,CACZ,EACA,MAAM,CAACgI,MAAQmmB,EAAOnmB,CAAG,CAAC;AAAA,CAC9B;AAGH,SAAS2zC,GAAsBznD,GAAuB;AACpD,SAAOknD,KAA4C,MAAOlnD,EAAK,0BAA0BA,EAAK;AAChG;AAEA,eAAewnD,GAA6BxtB,GAA6Bh6B,GAAuB;AAI9F,MAHA,aAAaA,EAAK,yBAAyB,GACvCA,EAAK,WAAWglD,GAAsB,YACtChlD,EAAK,0BAA0BmnD,MAC/B,CAACnnD,EAAK;AAAS;AACnB,QAAMm4B,IAAQ,MAAM+F,GAAWlE,GAAQh6B,EAAK,OAAO;AACnD,MAAIm4B,KAASA,EAAM,YAAYA,EAAM,SAAS,gBAAgB;AAC5D,UAAMuvB,IAAoBC;AAC1B,QAAIxvB,EAAM,SAAS,eAAe,WAAW8sB,GAAuB,WAAW;AAC3D,MAAAyC,EAAA,mBAAmBvvB,EAAM,EAAE;AAC7C;AAAA,IAAA,WACSA,EAAM,SAAS,eAAe,WAAW8sB,GAAuB,WAAW;AAClE,MAAAyC,EAAA,mBAAmBvvB,EAAM,EAAE;AAC7C;AAAA,IAAA,WACSA,EAAM,SAAS,eAAe,WAAW8sB,GAAuB,QAAQ;AACjF,MAAAyC,EAAkB,gBAAgBvvB,EAAM,IAAIA,EAAM,SAAS,eAAe,UAAU;AACpF;AAAA,IACF;AAAA,EACF;AACK,EAAAn4B,EAAA,2BACAA,EAAA,4BAA4B,WAAW,WAAY;AACtD,IAAAwnD,GAA6BxtB,GAAQh6B,CAAI;AAAA,EAAA,GACxCynD,GAAsBznD,CAAI,CAAC;AAChC;;;AC9GA,GAAC,SAA0C20C,GAAMppB,GAAS;AAExD,IAAArf,EAAA,UAAiBqf;EAOlB,GAAE,OAAO,OAAS,MAAc,OAAOpf,IAAM,WAAW;AACzD;AAAA;AAAA,MAAiB,SAASy7C,GAAS;AAEzB,YAAIC,IAAmB,CAAA;AAGvB,iBAASC,EAAoBC,GAAU;AAGtC,cAAGF,EAAiBE,CAAQ;AAC3B,mBAAOF,EAAiBE,CAAQ,EAAE;AAGnC,cAAI77C,IAAS27C,EAAiBE,CAAQ,IAAI;AAAA;AAAA,YACzC,GAAGA;AAAA;AAAA,YACH,GAAG;AAAA;AAAA,YACH,SAAS,CAAE;AAAA;AAAA,UACvB;AAGW,iBAAAH,EAAQG,CAAQ,EAAE,KAAK77C,EAAO,SAASA,GAAQA,EAAO,SAAS47C,CAAmB,GAGlF57C,EAAO,IAAI,IAGJA,EAAO;AAAA,QACd;AAID,eAAA47C,EAAoB,IAAIF,GAGxBE,EAAoB,IAAID,GAGxBC,EAAoB,IAAI,SAASt8B,GAAS5sB,GAAMopD,GAAQ;AACvD,UAAIF,EAAoB,EAAEt8B,GAAS5sB,CAAI,KACtC,OAAO,eAAe4sB,GAAS5sB,GAAM;AAAA;AAAA,YACpC,cAAc;AAAA;AAAA,YACd,YAAY;AAAA;AAAA,YACZ,KAAKopD;AAAA;AAAA,UAClB,CAAa;AAAA,QAEb,GAGUF,EAAoB,IAAI,SAAS57C,GAAQ;AACxC,cAAI87C,IAAS97C,KAAUA,EAAO;AAAA;AAAA,YAC7B,WAAsB;AAAE,qBAAOA,EAAO;AAAA,YAAa;AAAA;AAAA;AAAA,YACnD,WAA4B;AAAE,qBAAOA;AAAA;;AACtC,iBAAA47C,EAAoB,EAAEE,GAAQ,KAAKA,CAAM,GAClCA;AAAA,QAClB,GAGUF,EAAoB,IAAI,SAAS5qD,GAAQ+qD,GAAU;AAAE,iBAAO,OAAO,UAAU,eAAe,KAAK/qD,GAAQ+qD,CAAQ;AAAA,QAAE,GAGnHH,EAAoB,IAAI,IAGjBA,EAAoBA,EAAoB,IAAI,CAAC;AAAA,MACpD,EAEA;AAAA;AAAA;AAAA,QAEH,SAAS57C,GAAQsf,GAASs8B,GAAqB;AAEtD,mBAASI,EAAgBC,GAAUC,GAAa;AAAE,gBAAI,EAAED,aAAoBC;AAAgB,oBAAM,IAAI,UAAU,mCAAmC;AAAA,UAAM;AAIzJ,cAAIC,IAAYP,EAAoB,CAAC,GAEjCQ,IAAWR,EAAoB,CAAC,GAChCS,IAAQD,EAAS,OACjBE,IAAeF,EAAS,cAExBG,IAAOX,EAAoB,CAAC,GAI5BY,IAAS,SAAUC,GAAK;AAC1B,iBAAKA,KAAO,GAAGA,IAAM,KAAK,GAAGA,KAAO;AAAG;AACvC,mBAAOA;AAAA,UACT,GAEIC,IAAY,SAAUC,GAAKF,GAAK;AAClC,gBAAIG,IAAK,IAAI,WAAWD,EAAI,MAAM,GAC9BE,IAAKJ,IAAM,GACXK,IAAQL,IAAMI;AAClB,oBAAQA,GAAE;AAAA,cACR,KAAK;AACH,gBAAAD,EAAGE,IAAQ,CAAC,IAAI;AAAA,cAClB,KAAK;AACH,gBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,cAClB,KAAK;AACH,gBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,cAClB,KAAK;AACH,gBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,YACnB;AACD,qBAAS5mD,KAAKumD,KAAO,KAAK,GAAGvmD,IAAIymD,EAAI,QAAQzmD;AAC3C,cAAAymD,EAAIzmD,CAAC,IAAI;AAAA,UAEb,GAEI6mD,IAAU,SAAUJ,GAAKK,GAAUC,GAAQ;AAC7C,YAAAN,EAAIK,KAAY,CAAC,KAAK,OAAQ,MAAMA,IAAW,KAAK,IAGpDL,IAAMK,KAAY,KAAK,IAAI,OAAS,EAAE,IAAIC,KAAU,KAAK,MAAM,GAC/DN,IAAMK,KAAY,KAAK,IAAI,OAAS,EAAE,IAAIC,KAAU;AAAA,UACtD,GAEIC,IAAe,SAAUC,GAAMC,GAAgB;AACjD,gBAAIC,IAAK,IAAI,WAAWF,GAAMC,IAAiB,KAAK,CAAC,GACjDE,IAAM,IAAI,WAAW,CAAC,GACtB9xC,IAAM,IAAI,SAAS8xC,EAAI,MAAM;AACjC,mBAAA9xC,EAAI,SAAS,GAAG6xC,EAAG,CAAC,GAAG,EAAK,GAC5B7xC,EAAI,SAAS,GAAG6xC,EAAG,CAAC,GAAG,EAAK,GAC5B7xC,EAAI,SAAS,GAAG6xC,EAAG,CAAC,GAAG,EAAK,GAC5B7xC,EAAI,SAAS,IAAI6xC,EAAG,CAAC,GAAG,EAAK,GAC7B7xC,EAAI,SAAS,IAAI6xC,EAAG,CAAC,GAAG,EAAK,GACtBC;AAAA,UACT,GAEIC,IAAQ,WAAY;AACtB,qBAASA,EAAM/D,GAAW;AAIxB,kBAHAwC,EAAgB,MAAMuB,CAAK,GAE3B/D,IAAYA,KAAa,KAAK,MAC1BA,IAAY,KAAK;AACnB,sBAAM,IAAI,MAAM,0CAA0C;AAE5D,mBAAK,UAAU,GACf,KAAK,eAAeA,GACpB,KAAK,kBAAkBgD,EAAOhD,CAAS,GAKvC,KAAK,QAAQ,IAAI,YAAY8C,EAAa,KAAK,kBAAkB,MAAM,EAAE,CAAC,GAC1E,KAAK,OAAO,IAAI,WAAW,KAAK,KAAK,GACrC,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,GACnC,KAAK,QAAQ,IAAIH,EAAU,EAAE,WAAsB,GAAI,CAAE,GAAE,KAAK,KAAK;AAAA,YACtE;AAED,mBAAAoB,EAAM,UAAU,aAAa,SAAoBJ,GAAMK,GAAW;AAChE,mBAAK,UAAU;AACf,kBAAIH,IAAK,IAAI,WAAWF,GAAMK,IAAY,KAAK,CAAC;AAChD,cAAAH,EAAG,CAAC,IAAI,YACRA,EAAG,CAAC,IAAI,YACRA,EAAG,CAAC,IAAI,aACRA,EAAG,CAAC,IAAI,WACRA,EAAG,CAAC,IAAI;AAAA,YACZ,GAEEE,EAAM,UAAU,YAAY,SAAmBP,GAAUC,GAAQ;AAC/D,kBAAIQ,IAAcjB,EAAOQ,CAAQ,GAC7BU,IAAO,IAAI,WAAW,KAAK,OAAO,GAAGD,KAAe,CAAC;AACzD,qBAAAf,EAAUgB,GAAMV,CAAQ,GACxBD,EAAQW,GAAMV,GAAUC,CAAM,GACvBQ;AAAA,YACX,GAEEF,EAAM,UAAU,SAAS,SAAgBzgD,GAAM6gD,GAAaX,GAAUrlB,GAAK;AACzE,cAAA4kB,EAAKz/C,GAAM,KAAK,KAAK,KAAK,MAAM6gD,GAAaX,GAAUrlB,KAAO,CAAC;AAAA,YACnE,GAEE4lB,EAAM,UAAU,YAAY,SAAmBzgD,GAAM6gD,GAAaX,GAAUC,GAAQW,GAAU;AAC5F,kBAAIH,IAAcT;AAClB,mBAAK,OAAOlgD,GAAM6gD,GAAaX,CAAQ,GACnCY,MACFH,IAAc,KAAK,UAAUT,GAAUC,CAAM,IAE/C,KAAK,MAAM,KAAKQ,GAAa,KAAK,eAAe;AAAA,YACrD,GAEEF,EAAM,UAAU,YAAY,SAAmBhV,GAAK;AAClD,kBAAI0U,IAAS1U,EAAI,cAAcA,EAAI,UAAUA,EAAI,QAAQ;AACzD,mBAAK,WAAW,KAAK,OAAO,KAAK,eAAe;AAChD,kBAAIoV,IAAc,GACdX,IAAW,KAAK;AACpB,mBAAKW,IAAc,GAAGV,IAASU,IAAcX,GAAUW,KAAeX;AACpE,qBAAK,UAAUzU,GAAKoV,GAAaX,GAAUC,GAAQ,EAAK;AAE1D,0BAAK,UAAU1U,GAAKoV,GAAaV,IAASU,GAAaV,GAAQ,EAAI,GAC5DC,EAAa,KAAK,OAAO,KAAK,eAAe;AAAA,YACxD,GAEEK,EAAM,UAAU,SAAS,SAAgBhV,GAAK;AAC5C,qBAAO8T,EAAM,KAAK,UAAU9T,CAAG,EAAE,MAAM;AAAA,YAC3C,GAEEgV,EAAM,UAAU,mBAAmB,SAA0BhV,GAAK;AAChE,qBAAO,KAAK,OAAOA,CAAG;AAAA,YAC1B,GAEEgV,EAAM,UAAU,mBAAmB,SAA0BhV,GAAK;AAChE,qBAAO,KAAK,OAAOA,CAAG;AAAA,YAC1B,GAEEgV,EAAM,UAAU,wBAAwB,SAA+BhV,GAAK;AAC1E,qBAAO,KAAK,OAAOA,CAAG;AAAA,YAC1B,GAEEgV,EAAM,UAAU,aAAa,WAAsB;AACjD,0BAAK,WAAW,KAAK,OAAO,KAAK,eAAe,GACzC;AAAA,YACX,GAEEA,EAAM,UAAU,SAAS,SAAgBM,GAAO;AAC9C,kBAAIF,IAAc,GACdX,IAAWa,EAAM,cAAcA,EAAM,UAAUA,EAAM,QAAQ,GAC7DC,IAAa,KAAK,UAAU,KAAK,cACjCC,IAAW;AAGf,mBADA,KAAK,WAAWf,GACTW,IAAcX;AACnB,gBAAAe,IAAW,KAAK,IAAIf,IAAWW,GAAa,KAAK,eAAeG,CAAU,GAC1E,KAAK,OAAOD,GAAOF,GAAaI,GAAUD,CAAU,GACpDA,KAAcC,GACdJ,KAAeI,GACXD,MAAe,KAAK,iBACtB,KAAK,MAAM,KAAK,KAAK,cAAc,KAAK,eAAe,GACvDA,IAAa;AAGjB,qBAAO;AAAA,YACX,GAEEP,EAAM,UAAU,WAAW,WAAoB;AAC7C,kBAAIO,IAAa,KAAK,UAAU,KAAK,cACjCX,IAAO;AACX,kBAAKW;AAIH,gBAAAX,IAAO,KAAK,MAAM,MAAM,CAAC;AAAA,mBAJV;AACf,oBAAIE,IAAK,IAAI,WAAW,KAAK,OAAO,KAAK,kBAAkB,KAAK,CAAC;AACjE,gBAAAF,IAAOE,EAAG,OAAO,MAAMA,EAAG,YAAYA,EAAG,aAAaA,EAAG,UAAU;AAAA,cACzE;AAGI,qBAAO;AAAA,gBACL,QAAQ,KAAK;AAAA,gBACb,MAAMF;AAAA,cACZ;AAAA,YACA,GAEEI,EAAM,UAAU,WAAW,SAAkBrlB,GAAO;AAElD,kBADA,KAAK,UAAUA,EAAM,QACjBA,EAAM,KAAK,eAAe,IAAI;AAChC,oBAAImlB,IAAK,IAAI,WAAW,KAAK,OAAO,KAAK,kBAAkB,KAAK,CAAC;AACjE,gBAAAA,EAAG,IAAI,IAAI,WAAWnlB,EAAM,IAAI,CAAC;AAAA,cACvC;AACM,qBAAK,KAAK,IAAI,IAAI,WAAWA,EAAM,IAAI,CAAC;AAE1C,qBAAO;AAAA,YACX,GAEEqlB,EAAM,UAAU,SAAS,WAAkB;AACzC,kBAAIN,IAAS,KAAK,SACdD,IAAWC,IAAS,KAAK,cACzBQ,IAAc,KAAK,UAAUT,GAAUC,CAAM;AACjD,mBAAK,MAAM,KAAKQ,GAAa,KAAK,eAAe;AACjD,kBAAIpsC,IAAS6rC,EAAa,KAAK,OAAO,KAAK,eAAe;AAC1D,0BAAK,WAAW,KAAK,OAAO,KAAK,eAAe,GACzC7rC;AAAA,YACX,GAEEksC,EAAM,UAAU,MAAM,WAAe;AACnC,qBAAOlB,EAAM,KAAK,OAAQ,EAAC,MAAM;AAAA,YACrC,GAESkB;AAAA,UACT;AAEA,UAAAv9C,EAAO,UAAUu9C,GACjBv9C,EAAO,QAAQ,QAAQm8C;AAAA,QAEhB;AAAA;AAAA;AAAA,QAEA,SAASn8C,GAAQsf,GAAS;AASjC,mBADI0+B,IAAiB,IAAI,MAAM,GAAG,GACzB9nD,IAAI,GAAGA,IAAI,KAAKA;AACvB,YAAA8nD,EAAe9nD,CAAC,KAAKA,IAAI,KAAO,MAAM,MAAMA,EAAE,SAAS,EAAE;AAG3D,UAAA8J,EAAO,QAAQ,QAAQ,SAAUi+C,GAAa;AAG5C,qBAFIC,IAAW,IAAI,WAAWD,CAAW,GACrCr+C,IAAM,IAAI,MAAMq+C,EAAY,UAAU,GACjC35C,IAAK,GAAGA,IAAK1E,EAAI,QAAQ0E;AAChC,cAAA1E,EAAI0E,CAAE,IAAI05C,EAAeE,EAAS55C,CAAE,CAAC;AAEvC,mBAAO1E,EAAI,KAAK,EAAE;AAAA,UACpB,GAMAI,EAAO,QAAQ,eAAe,SAAU7H,GAAG;AAKzC,gBAAIG,IAAI;AAGR,gBAAIH,KAAK;AAAO,qBAAO;AAGvB,gBAAIA,IAAI;AACN,mBAAKG,IAAI,GAAGA,IAAIH,GAAGG,IAAIA,KAAK;AAAG;AAAA;AAE/B,mBAAKA,IAAI,UAAUA,IAAIH,GAAGG,KAAK;AAAU;AAE3C,mBAAOA;AAAA,UACT,GAMA0H,EAAO,QAAQ,yBAAyB,SAAUoO,GAAM;AACtD,gBAAI+vC,IAAoB,uBAAuB/vC,KAAQA,aAAgBA,EAAK,mBACxEgwC,IAA0B,6BAA6BhwC,KAAQA,aAAgBA,EAAK,yBACpFiwC,IAA2B,8BAA8BjwC,KAAQA,aAAgBA,EAAK;AAW1F,mBAAO+vC,KAAqB,CAACC,KAA2B,CAACC;AAAA,UAC3D;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAASr+C,GAAQsf,GAASs8B,GAAqB;AAItD,UAAA57C,EAAO,UAAU,WAAY;AAC3B,gBAAIu9C,IAAQ3B,EAAoB,CAAC,GAE7B0C,IAAW,SAAUC,GAAQzhD,GAAM0hD,GAAI;AACzC,kBAAI;AACF,uBAAOA,EAAG,MAAMD,EAAO,OAAOzhD,CAAI,CAAC;AAAA,cACpC,SAAQ7G,GAAG;AACV,uBAAOuoD,EAAGvoD,CAAC;AAAA,cACZ;AAAA,YACL,GAEMwoD,IAAW,SAAUF,GAAQG,GAAWC,GAAW5H,GAAMyH,GAAI;AAC/D,kBAAII,IAAS,IAAI,KAAK;AACtB,cAAAA,EAAO,YAAY,WAAqB;AACtC,oBAAIA,EAAO;AACT,yBAAOJ,EAAGI,EAAO,KAAK;AAExB,oBAAIpE,IAASoE,EAAO;AACpB,gBAAAF,KAAaE,EAAO,OAAO;AAC3B,oBAAI;AACF,kBAAAL,EAAO,OAAO/D,CAAM;AAAA,gBACrB,SAAQvkD,GAAG;AACV,kBAAAuoD,EAAGvoD,CAAC;AACJ;AAAA,gBACD;AACD,gBAAIyoD,IAAY3H,EAAK,OACnB0H,EAASF,GAAQG,GAAWC,GAAW5H,GAAMyH,CAAE,IAE/CA,EAAG,MAAMD,EAAO,IAAK,CAAA;AAAA,cAE7B,GACIK,EAAO,kBAAkB7H,EAAK,MAAM2H,GAAWA,IAAYC,CAAS,CAAC;AAAA,YACzE,GAEME,IAAyB;AAE7B,wBAAK,YAAY,SAAU95C,GAAO;AAChC,kBAAK85C,GAIL;AAAA,oBAAI/hD,IAAOiI,EAAM,KAAK,MAClBgyC,IAAOhyC,EAAM,KAAK,MAClBktB,IAAKltB,EAAM,KAAK;AACpB,oBAAI,SAAOktB,IAAO,QACd,GAAC8kB,KAAQ,CAACj6C,IACd;AAAA,sBAAI6hD,IAAY55C,EAAM,KAAK,aAAa,IAAI,OAAO,MAC/Cw5C,IAAS,IAAIhB,EAAMoB,CAAS;AAChC,kBAAAJ,EAAO,WAAU;AACjB,sBAAIO,IAAO,SAAUl3C,GAAKm3C,GAAM;AAC9B,oBAAKn3C,IAGH,KAAK,YAAY,EAAE,IAAIqqB,GAAI,OAAOrqB,EAAI,KAAI,CAAE,IAF5C,KAAK,YAAY,EAAE,IAAIqqB,GAAI,MAAM8sB,EAAI,CAAE;AAAA,kBAI/C;AACI,kBAAIjiD,KAAMwhD,EAASC,GAAQzhD,GAAMgiD,CAAI,GACjC/H,KAAM0H,EAASF,GAAQ,GAAGI,GAAW5H,GAAM+H,CAAI;AAAA;AAAA;AAAA,YACvD,GAES,WAAY;AACjB,cAAAD,IAAyB;AAAA,YAC7B;AAAA,UACA;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAAS7+C,GAAQsf,GAASs8B,GAAqB;AAItD,cAAIoD,IAAOpD,EAAoB,CAAC,GAC5B2B,IAAQ3B,EAAoB,CAAC,GAC7BqD,IAAarD,EAAoB,CAAC,GAClCsD,IAAYtD,EAAoB,CAAC,GAEjCQ,IAAWR,EAAoB,CAAC,GAChCuD,IAAyB/C,EAAS,wBAElCgD,IAA6B,OAAO,OAAS,OAAeD,EAAuB,IAAI;AAE3F,UAAA5B,EAAM,yBAAyB6B,IAA6BF,EAAW,IAAG,WAAY;AAAA,UAAA,GAEtF3B,EAAM,eAAe,WAAY;AAC/B,gBAAI8B,IAASL;AAAA;AAAA,cAAyB;AAAA,eAClCM,IAAYD,EAAO;AACvB,mBAAAA,EAAO,YAAY,WAAY;AAC7B,kBAAI,gBAAgBA,EAAO,SAAS,GACpCC,EAAU,KAAKD,CAAM;AAAA,YACzB,GACSA;AAAA,UACT,GAEA9B,EAAM,aAAa0B,GAEnBj/C,EAAO,UAAUu9C;AAAA,QAEV;AAAA;AAAA;AAAA,QAEA,SAASv9C,GAAQsf,GAASs8B,GAAqB;AAEtD,mBAAS2D,EAAsB7D,GAAS;AAE9B,gBAAIC,IAAmB,CAAA;AAGvB,qBAASC,EAAoBC,GAAU;AAGrC,kBAAGF,EAAiBE,CAAQ;AAC1B,uBAAOF,EAAiBE,CAAQ,EAAE;AAGpC,kBAAI77C,IAAS27C,EAAiBE,CAAQ,IAAI;AAAA;AAAA,gBACxC,GAAGA;AAAA;AAAA,gBACH,GAAG;AAAA;AAAA,gBACH,SAAS,CAAE;AAAA;AAAA,cACzB;AAGY,qBAAAH,EAAQG,CAAQ,EAAE,KAAK77C,EAAO,SAASA,GAAQA,EAAO,SAAS47C,CAAmB,GAGlF57C,EAAO,IAAI,IAGJA,EAAO;AAAA,YACf;AAGD,YAAA47C,EAAoB,IAAIF,GAGxBE,EAAoB,IAAID,GAGxBC,EAAoB,IAAI,SAAS5rD,GAAO;AAAE,qBAAOA;AAAA,YAAM,GAGvD4rD,EAAoB,IAAI,SAASt8B,GAAS5sB,GAAMopD,GAAQ;AACtD,cAAIF,EAAoB,EAAEt8B,GAAS5sB,CAAI,KACrC,OAAO,eAAe4sB,GAAS5sB,GAAM;AAAA;AAAA,gBACnC,cAAc;AAAA;AAAA,gBACd,YAAY;AAAA;AAAA,gBACZ,KAAKopD;AAAA;AAAA,cACrB,CAAe;AAAA,YAEf,GAGUF,EAAoB,IAAI,SAASt8B,GAAS;AACxC,qBAAO,eAAeA,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,YACxE,GAGUs8B,EAAoB,IAAI,SAAS57C,GAAQ;AACvC,kBAAI87C,IAAS97C,KAAUA,EAAO;AAAA;AAAA,gBAC5B,WAAsB;AAAE,yBAAOA,EAAO;AAAA,gBAAa;AAAA;AAAA;AAAA,gBACnD,WAA4B;AAAE,yBAAOA;AAAA;;AACvC,qBAAA47C,EAAoB,EAAEE,GAAQ,KAAKA,CAAM,GAClCA;AAAA,YACnB,GAGUF,EAAoB,IAAI,SAAS5qD,GAAQ+qD,GAAU;AAAE,qBAAO,OAAO,UAAU,eAAe,KAAK/qD,GAAQ+qD,CAAQ;AAAA,YAAE,GAGnHH,EAAoB,IAAI,KAGxBA,EAAoB,KAAK,SAASh0C,GAAK;AAAE,4BAAQ,MAAMA,CAAG,GAASA;AAAA;AAE3E,gBAAIxQ,IAAIwkD,EAAoBA,EAAoB,IAAI,YAAY;AAChE,mBAAOxkD,EAAE,WAAWA;AAAA,UACrB;AAED,cAAIooD,IAAmB,0BACnBC,IAAmB,4BAA+BD,IAAmB;AAGzE,mBAASE,EAAanX,GAAK;AACzB,oBAAQA,IAAM,IAAI,QAAQ,wBAAwB,MAAM;AAAA,UACzD;AAED,mBAASoX,EAAuBC,GAAS5/C,GAAQ6/C,GAAW;AAC1D,gBAAIC,IAAS,CAAE;AACf,YAAAA,EAAOD,CAAS,IAAI,CAAE;AAEtB,gBAAIE,IAAW//C,EAAO,SAAU,GAC5BggD,IAAmBD,EAAS,MAAM,qCAAqC;AAC3E,gBAAI,CAACC;AAAkB,qBAAOF;AAM9B,qBALIG,IAAqBD,EAAiB,CAAC,GAGvCE,IAAK,IAAI,OAAO,gBAAgBR,EAAYO,CAAkB,IAAIR,GAAkB,GAAG,GACvFjtD,GACIA,IAAQ0tD,EAAG,KAAKH,CAAQ;AAC9B,cAAIvtD,EAAM,CAAC,MAAM,mBACjBstD,EAAOD,CAAS,EAAE,KAAKrtD,EAAM,CAAC,CAAC;AAKjC,iBADA0tD,IAAK,IAAI,OAAO,QAAQR,EAAYO,CAAkB,IAAI,2BAA2BT,IAAmB,cAAcC,GAAkB,GAAG,GACnIjtD,IAAQ0tD,EAAG,KAAKH,CAAQ;AAC9B,cAAKH,EAAQptD,EAAM,CAAC,CAAC,MACnBstD,EAAOD,CAAS,EAAE,KAAKrtD,EAAM,CAAC,CAAC,GAC/BotD,EAAQptD,EAAM,CAAC,CAAC,IAAIopD,EAAoBppD,EAAM,CAAC,CAAC,EAAE,IAEpDstD,EAAOttD,EAAM,CAAC,CAAC,IAAIstD,EAAOttD,EAAM,CAAC,CAAC,KAAK,CAAE,GACzCstD,EAAOttD,EAAM,CAAC,CAAC,EAAE,KAAKA,EAAM,CAAC,CAAC;AAGhC,mBAAOstD;AAAA,UACR;AAED,mBAASK,EAAmBC,GAAQ;AAClC,gBAAIhqB,IAAO,OAAO,KAAKgqB,CAAM;AAC7B,mBAAOhqB,EAAK,OAAO,SAAUiqB,GAAWhuD,GAAK;AAC3C,qBAAOguD,KAAaD,EAAO/tD,CAAG,EAAE,SAAS;AAAA,YAC1C,GAAE,EAAK;AAAA,UACT;AAED,mBAASiuD,EAAoBV,GAAS/D,GAAU;AAW9C,qBAVI0E,IAAe;AAAA,cACjB,MAAM,CAAC1E,CAAQ;AAAA,YAChB,GACG2E,IAAkB;AAAA,cACpB,MAAM,CAAE;AAAA,YACT,GACGC,IAAc;AAAA,cAChB,MAAM,CAAE;AAAA,YACT,GAEMN,EAAkBI,CAAY;AAEnC,uBADIH,IAAS,OAAO,KAAKG,CAAY,GAC5BrqD,IAAI,GAAGA,IAAIkqD,EAAO,QAAQlqD,KAAK;AACtC,oBAAI2pD,IAAYO,EAAOlqD,CAAC,GACpBwqD,IAAQH,EAAaV,CAAS,GAC9Bc,IAAgBD,EAAM,IAAK;AAE/B,oBADAD,EAAYZ,CAAS,IAAIY,EAAYZ,CAAS,KAAK,CAAE,GACjD,EAAAY,EAAYZ,CAAS,EAAEc,CAAa,KAAK,CAACf,EAAQC,CAAS,EAAEc,CAAa,IAC9E;AAAA,kBAAAF,EAAYZ,CAAS,EAAEc,CAAa,IAAI,IACxCH,EAAgBX,CAAS,IAAIW,EAAgBX,CAAS,KAAK,CAAE,GAC7DW,EAAgBX,CAAS,EAAE,KAAKc,CAAa;AAG7C,2BAFIC,IAAajB,EAAsBC,GAASA,EAAQC,CAAS,EAAEc,CAAa,GAAGd,CAAS,GACxFgB,IAAiB,OAAO,KAAKD,CAAU,GAClChqD,IAAI,GAAGA,IAAIiqD,EAAe,QAAQjqD;AACzC,oBAAA2pD,EAAaM,EAAejqD,CAAC,CAAC,IAAI2pD,EAAaM,EAAejqD,CAAC,CAAC,KAAK,CAAE,GACvE2pD,EAAaM,EAAejqD,CAAC,CAAC,IAAI2pD,EAAaM,EAAejqD,CAAC,CAAC,EAAE,OAAOgqD,EAAWC,EAAejqD,CAAC,CAAC,CAAC;AAAA;AAAA,cAEzG;AAGH,mBAAO4pD;AAAA,UACR;AAED,UAAAxgD,EAAO,UAAU,SAAU67C,GAAUjmD,GAAS;AAC5C,YAAAA,IAAUA,KAAW,CAAE;AACvB,gBAAIgqD,IAAU;AAAA,cACZ,MAAMhE,EAAoB;AAAA,YAC3B,GAEG4E,IAAkB5qD,EAAQ,MAAM,EAAE,MAAM,OAAO,KAAKgqD,CAAO,EAAG,IAAGU,EAAmBV,GAAS/D,CAAQ,GAErGjgB,IAAM;AAEV,mBAAO,KAAK4kB,CAAe,EAAE,OAAO,SAAUnmD,GAAG;AAAE,qBAAOA,MAAM;AAAA,YAAQ,CAAA,EAAE,QAAQ,SAAU2F,GAAQ;AAElG,uBADI8gD,IAAc,GACXN,EAAgBxgD,CAAM,EAAE8gD,CAAW;AACxC,gBAAAA;AAEF,cAAAN,EAAgBxgD,CAAM,EAAE,KAAK8gD,CAAW,GACxClB,EAAQ5/C,CAAM,EAAE8gD,CAAW,IAAI,8FAC/BllB,IAAMA,IAAM,SAAS57B,IAAS,SAASu/C,EAAqB,WAAW,QAAQ,gBAAgB,KAAK,UAAUuB,CAAW,CAAC,IAAI,QAAQN,EAAgBxgD,CAAM,EAAE,IAAI,SAAUiyB,GAAI;AAAE,uBAAO,KAAK,KAAK,UAAUA,CAAE,IAAI,OAAO2tB,EAAQ5/C,CAAM,EAAEiyB,CAAE,EAAE,SAAQ;AAAA,cAAI,CAAA,EAAE,KAAK,GAAG,IAAI;AAAA;AAAA,YAC5Q,CAAG,GAED2J,IAAMA,IAAM,MAAM2jB,EAAqB,SAAQ,EAAG,QAAQ,gBAAgB,KAAK,UAAU1D,CAAQ,CAAC,IAAI,QAAQ2E,EAAgB,KAAK,IAAI,SAAUvuB,GAAI;AAAE,qBAAO,KAAK,KAAK,UAAUA,CAAE,IAAI,OAAO2tB,EAAQ,KAAK3tB,CAAE,EAAE,SAAU;AAAA,YAAA,CAAE,EAAE,KAAK,GAAG,IAAI;AAE1O,gBAAI8uB,IAAO,IAAI,OAAO,KAAK,CAACnlB,CAAG,GAAG,EAAE,MAAM,mBAAmB;AAC7D,gBAAIhmC,EAAQ;AAAQ,qBAAOmrD;AAE3B,gBAAIC,IAAM,OAAO,OAAO,OAAO,aAAa,OAAO,UAAU,OAAO,OAEhEC,IAAYD,EAAI,gBAAgBD,CAAI,GACpC1B,IAAS,IAAI,OAAO,OAAO4B,CAAS;AACxC,mBAAA5B,EAAO,YAAY4B,GAEZ5B;AAAA,UACR;AAAA,QAGM;AAAA;AAAA;AAAA,QAEA,SAASr/C,GAAQsf,GAAS;AAQjC,UAAAtf,EAAO,UAAU,SAAmBkhD,GAAYC,GAAaC,GAAU;AAEnE,gBAAIC,IAAQ,IAAIH,EAAW,WAAWE,CAAQ;AAC9C,qBAASE,EAASC,GAAOC,GAAO;AAE5B,cAAAD,IAAQA,IAAQ,GAChBC,IAAQA,IAAQ;AAChB,kBAAIC,IAAQ,GAAGC,IAAQ,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,KAAS;AAMvK,mBALAX,IAASN,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCK,IAASR,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCO,IAASV,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCS,IAASZ,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCW,IAASd,EAAMG,IAAQ,OAAO,CAAC,IAAI,GAC9BC,IAAQ,IAAIA,IAAQ,MAAMF,IAAQ,IAAIE,IAAQA,IAAQ,KAAK,GAAG;AAM/D,qBALAG,IAASD,GACTG,IAASD,GACTG,IAASD,GACTG,IAASD,GACTG,IAASD,GACJT,IAAQ,IAAIA,IAAQ,KAAK,IAAIA,IAAQA,IAAQ,IAAI;AAClD,kBAAAY,KAASjB,EAAMI,IAAQC,KAAS,CAAC,IAAI,GACrCW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAAS,CAACF,IAASI,KAAU,OAAOK,KAASH,IAAS,KAAK,aAAa,KAAK,GACjIA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAME,IAAQG,KAAS,CAAC,IAAIY;AAEhC,qBAAKZ,IAAQH,IAAQ,KAAK,IAAIG,IAAQ,MAAMH,IAAQ,KAAK,IAAIG,IAAQA,IAAQ,IAAI;AAC7E,kBAAAY,MAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAAS,CAACF,IAASI,KAAU,OAAOK,KAASH,IAAS,KAAK,aAAa,KAAK,GACjIA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,qBAAKZ,IAAQH,IAAQ,KAAK,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC9E,kBAAAY,MAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASE,KAAU,OAAOK,KAASH,IAAS,KAAK,aAAa,KAAK,GACvHA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,qBAAKZ,IAAQH,IAAQ,MAAM,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC/E,kBAAAY,MAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASF,IAASI,IAASF,IAASE,KAAU,OAAOK,KAASH,IAAS,KAAK,aAAa,KAAK,GAClJA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,qBAAKZ,IAAQH,IAAQ,MAAM,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC/E,kBAAAY,MAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASE,KAAU,OAAOK,KAASH,IAAS,KAAK,YAAY,KAAK,GACtHA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,gBAAAX,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS;AAAA,cAC9B;AACD,cAAAf,EAAMG,IAAQ,OAAO,CAAC,IAAIG,GAC1BN,EAAMG,IAAQ,OAAO,CAAC,IAAIK,GAC1BR,EAAMG,IAAQ,OAAO,CAAC,IAAIO,GAC1BV,EAAMG,IAAQ,OAAO,CAAC,IAAIS,GAC1BZ,EAAMG,IAAQ,OAAO,CAAC,IAAIW;AAAA,YAC7B;AACD,mBAAO,EAAE,MAAMb;UACnB;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAASthD,GAAQsf,GAAS;AAEjC,cAAI7W,IAAQ,MAIRm2C,IAAS;AACb,UAAI,OAAO,OAAS,OAAe,OAAO,KAAK,iBAAmB,QAChEA,IAAS,IAAI,KAAK;AAKpB,cAAI2D,IAAU,SAAUha,GAAKia,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACrD,gBAAIzhC,IAAI,QACJ2mD,IAAKllB,IAAM,GACX+qB,KAAMjG,IAAMI,KAAM,GAClBjmD,IAAI6lD,IAAMiG;AACd,oBAAQ7F,GAAE;AAAA,cACR,KAAK;AACH,gBAAA2F,EAAG7qB,CAAG,IAAI4Q,EAAI,WAAWuD,IAAQ,CAAC;AAAA,cACpC,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAItU,EAAI,WAAWuD,IAAQ,CAAC;AAAA,cACxD,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAItU,EAAI,WAAWuD,IAAQ,CAAC;AAAA,cACxD,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAItU,EAAI,WAAWuD,CAAK;AAAA,YACrD;AACD,gBAAI,EAAA2Q,IAAMiG,KAAM,IAAI7F,KAGpB;AAAA,mBAAK3mD,IAAI,IAAI2mD,GAAI3mD,IAAIU,GAAGV,IAAIA,IAAI,IAAI;AAClC,gBAAAusD,EAAI9qB,IAAMzhC,KAAK,CAAC,IAAIqyC,EAAI,WAAWuD,IAAQ51C,CAAC,KAAK,KAAKqyC,EAAI,WAAWuD,IAAQ51C,IAAI,CAAC,KAAK,KAAKqyC,EAAI,WAAWuD,IAAQ51C,IAAI,CAAC,KAAK,IAAIqyC,EAAI,WAAWuD,IAAQ51C,IAAI,CAAC;AAE/J,sBAAQwsD,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAF,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAI2xC,EAAI,WAAWuD,IAAQl1C,IAAI,CAAC;AAAA,gBACpD,KAAK;AACH,kBAAA4rD,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAI2xC,EAAI,WAAWuD,IAAQl1C,IAAI,CAAC;AAAA,gBACpD,KAAK;AACH,kBAAA4rD,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAI2xC,EAAI,WAAWuD,IAAQl1C,CAAC;AAAA,cACjD;AAAA;AAAA,UACH,GAII+rD,IAAU,SAAU5V,GAAKyV,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACrD,gBAAIzhC,IAAI,QACJ2mD,IAAKllB,IAAM,GACX+qB,KAAMjG,IAAMI,KAAM,GAClBjmD,IAAI6lD,IAAMiG;AACd,oBAAQ7F,GAAE;AAAA,cACR,KAAK;AACH,gBAAA2F,EAAG7qB,CAAG,IAAIoV,EAAIjB,IAAQ,CAAC;AAAA,cACzB,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAIjB,IAAQ,CAAC;AAAA,cAC7C,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAIjB,IAAQ,CAAC;AAAA,cAC7C,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAIjB,CAAK;AAAA,YAC1C;AACD,gBAAI,EAAA2Q,IAAMiG,KAAM,IAAI7F,KAGpB;AAAA,mBAAK3mD,IAAI,IAAI2mD,GAAI3mD,IAAIU,GAAGV,IAAIA,IAAI,IAAI;AAClC,gBAAAusD,EAAI9qB,IAAMzhC,KAAK,IAAI,CAAC,IAAI62C,EAAIjB,IAAQ51C,CAAC,KAAK,KAAK62C,EAAIjB,IAAQ51C,IAAI,CAAC,KAAK,KAAK62C,EAAIjB,IAAQ51C,IAAI,CAAC,KAAK,IAAI62C,EAAIjB,IAAQ51C,IAAI,CAAC;AAEvH,sBAAQwsD,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAF,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAIm2C,EAAIjB,IAAQl1C,IAAI,CAAC;AAAA,gBACzC,KAAK;AACH,kBAAA4rD,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAIm2C,EAAIjB,IAAQl1C,IAAI,CAAC;AAAA,gBACzC,KAAK;AACH,kBAAA4rD,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAIm2C,EAAIjB,IAAQl1C,CAAC;AAAA,cACtC;AAAA;AAAA,UACH,GAEIgsD,IAAW,SAAU7B,GAAMyB,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACvD,gBAAIzhC,IAAI,QACJ2mD,IAAKllB,IAAM,GACX+qB,KAAMjG,IAAMI,KAAM,GAClBjmD,IAAI6lD,IAAMiG,GACV3V,IAAM,IAAI,WAAW6R,EAAO,kBAAkBmC,EAAK,MAAMjV,GAAOA,IAAQ2Q,CAAG,CAAC,CAAC;AACjF,oBAAQI,GAAE;AAAA,cACR,KAAK;AACH,gBAAA2F,EAAG7qB,CAAG,IAAIoV,EAAI,CAAC;AAAA,cACjB,KAAK;AACH,gBAAAyV,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAI,CAAC;AAAA,cACrC,KAAK;AACH,gBAAAyV,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAI,CAAC;AAAA,cACrC,KAAK;AACH,gBAAAyV,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAI,CAAC;AAAA,YACtC;AACD,gBAAI,EAAA0P,IAAMiG,KAAM,IAAI7F,KAGpB;AAAA,mBAAK3mD,IAAI,IAAI2mD,GAAI3mD,IAAIU,GAAGV,IAAIA,IAAI,IAAI;AAClC,gBAAAusD,EAAI9qB,IAAMzhC,KAAK,IAAI,CAAC,IAAI62C,EAAI72C,CAAC,KAAK,KAAK62C,EAAI72C,IAAI,CAAC,KAAK,KAAK62C,EAAI72C,IAAI,CAAC,KAAK,IAAI62C,EAAI72C,IAAI,CAAC;AAEvF,sBAAQwsD,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAF,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAIm2C,EAAIn2C,IAAI,CAAC;AAAA,gBACjC,KAAK;AACH,kBAAA4rD,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAIm2C,EAAIn2C,IAAI,CAAC;AAAA,gBACjC,KAAK;AACH,kBAAA4rD,EAAG7qB,IAAM/gC,IAAI,IAAI,CAAC,IAAIm2C,EAAIn2C,CAAC;AAAA,cAC9B;AAAA;AAAA,UACH;AAEA,UAAAoJ,EAAO,UAAU,SAAUlD,GAAM0lD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACzD,gBAAI,OAAO76B,KAAS;AAClB,qBAAOylD,EAAQzlD,GAAM0lD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAM/C,gBAJI76B,aAAgB,SAIhB2L,KAASA,EAAM,UAAUA,EAAM,OAAO,SAAS3L,CAAI;AACrD,qBAAO6lD,EAAQ7lD,GAAM0lD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAE/C,gBAAI76B,aAAgB;AAClB,qBAAO6lD,EAAQ,IAAI,WAAW7lD,CAAI,GAAG0lD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAE/D,gBAAI76B,EAAK,kBAAkB;AACzB,qBAAO6lD,EAAQ,IAAI,WAAW7lD,EAAK,QAAQA,EAAK,YAAYA,EAAK,UAAU,GAAG0lD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAExG,gBAAI76B,aAAgB;AAClB,qBAAO8lD,EAAS9lD,GAAM0lD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAEhD,kBAAM,IAAI,MAAM,wBAAwB;AAAA,UAC1C;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAAS33B,GAAQsf,GAASs8B,GAAqB;AAEtD,cAAIiH,IAAe,2BAAY;AAAE,qBAASC,EAAiBt1C,GAAQle,GAAO;AAAE,uBAAS4G,IAAI,GAAGA,IAAI5G,EAAM,QAAQ4G,KAAK;AAAE,oBAAI6sD,IAAazzD,EAAM4G,CAAC;AAAG,gBAAA6sD,EAAW,aAAaA,EAAW,cAAc,IAAOA,EAAW,eAAe,IAAU,WAAWA,MAAYA,EAAW,WAAW,KAAM,OAAO,eAAev1C,GAAQu1C,EAAW,KAAKA,CAAU;AAAA,cAAE;AAAA,YAAI;AAAC,mBAAO,SAAU7G,GAAa8G,GAAYC,GAAa;AAAE,qBAAID,KAAYF,EAAiB5G,EAAY,WAAW8G,CAAU,GAAOC,KAAaH,EAAiB5G,GAAa+G,CAAW,GAAU/G;AAAA,YAAc;AAAA,UAAG,EAAA;AAEjjB,mBAASF,EAAgBC,GAAUC,GAAa;AAAE,gBAAI,EAAED,aAAoBC;AAAgB,oBAAM,IAAI,UAAU,mCAAmC;AAAA,UAAM;AAIzJ,cAAIqB,IAAQ3B,EAAoB,CAAC,GAE7BQ,IAAWR,EAAoB,CAAC,GAChCS,IAAQD,EAAS,OAEjB8G,IAAO,WAAY;AACrB,qBAASA,IAAO;AACd,cAAAlH,EAAgB,MAAMkH,CAAI,GAE1B,KAAK,SAAS,IAAI3F,KAClB,KAAK,OAAO;YACb;AAED,mBAAA2F,EAAK,UAAU,SAAS,SAAgBpmD,GAAM;AAC5C,0BAAK,OAAO,OAAOA,CAAI,GAChB;AAAA,YACX,GAEEomD,EAAK,UAAU,SAAS,SAAgBC,GAAU;AAChD,kBAAIC,IAAS,KAAK,OAAO,OAAM,EAAG;AAClC,kBAAI,CAACD;AACH,uBAAOC;AAET,kBAAID,MAAa;AACf,uBAAO9G,EAAM+G,CAAM;AAErB,oBAAM,IAAI,MAAM,6BAA6B;AAAA,YACjD,GAEEP,EAAaK,GAAM,CAAC;AAAA,cAClB,KAAK;AAAA,cACL,KAAK,WAAY;AACf,uBAAO,KAAK,OAAO;cACpB;AAAA,cACD,KAAK,SAAUhrB,GAAO;AACpB,qBAAK,OAAO,SAASA,CAAK;AAAA,cAC3B;AAAA,YACF,CAAA,CAAC,GAEKgrB;AAAA,UACT;AAEA,UAAAljD,EAAO,UAAU,WAAY;AAC3B,mBAAO,IAAIkjD,EAAI;AAAA,UACjB;AAAA,QAEO;AAAA;AAAA,MACP,CAAU;AAAA;AAAA,EACV,CAAC;;;mCCv5BKG,KAAkB,GAClBC,KAAuB,KACvBC,KAAuB,KACvBC,KAAuB,GAEvBC,KAAa,OAAOC,GAA4BpoD,IAAiB,SAAS;AACxE,QAAAA;AACR,GAEMqoD,KAAe,OAAOD,GAA4B7I,MAAgB;AAChE,QAAA,EAAE,WAAA9qB,MAAc3C,MAChB,EAAE,sBAAAiuB,MAAyB/tB;AACjC,SAAO,MAAM8tB,GAAgBrrB,GAAW2zB,GAAW7I,GAAKQ,CAAoB;AAC9E,GAEMuI,KAA+B,CAACtoD,MAAuB;AAC3D,QAAM,EAAE,GAAA9L,EAAM,IAAA0L,GAAK,UAAUA;AACzB,MAAA,CAACI,KAAS,CAACA,EAAM,YAAY,CAACA,EAAM,SAAS;AAE/C,WAAO9L,EAAE,2CAA2C;AAEhD,QAAAsN,IAAOxB,EAAM,SAAS,MACtBuoD,IAA0B,CAAA;AACrB,aAAA,CAACxxD,GAAK2K,CAAM,KAAK,OAAO,QAAQF,EAAK,MAAM;AACpD,YAAQzK,GAAK;AAAA,MACX,KAAK;AACW,QAAAwxD,EAAA,KAAKr0D,EAAE,mCAAmC,CAAC;AACzD;AAAA,MACF,KAAK;AACW,QAAAq0D,EAAA,KAAKr0D,EAAE,qCAAqC,CAAC;AAC3D;AAAA,MACF,KAAK;AACW,QAAAq0D,EAAA,KAAKr0D,EAAE,uCAAuC,CAAC;AAC7D;AAAA,MACF;AAEgB,QAAAq0D,EAAA,KAAKr0D,EAAE,0CAA0C,IAAI,OAAO6C,IAAM,QAAQ2K,EAAO,KAAK,GAAG,CAAC;AAAA,IAC5G;AAEK,SAAA6mD,EAAc,SAAS,IAAIA,EAAc,KAAKnmD,EAAa,IAAIlO,EAAE,2CAA2C;AACrH,GAEMs0D,KAAW,OAAOhvC,GAAgB2lC,GAAc1D,MAC7C,IAAI,QAAQ,CAAC9sB,GAAS8D,MAAW;AACtC,QAAMg2B,IAAUhN,EAAK,MAAMjiC,GAAQA,IAAS2lC,CAAI,GAC1CmE,IAAS,IAAI;AACZ,EAAAA,EAAA,SAAS,SAAU3oD,GAAG;;AAC3B,MAAItC,IAAAsC,EAAE,WAAF,gBAAAtC,EAAU,gBAAe,WAAW,QACtCs2B,EAAQ,EAAE,MAAMh0B,EAAE,OAAO,QAAkB,QAAA6e,GAAgB;AAAA,EAC7D,GAEK8pC,EAAA,UAAU,SAAU3oD,GAAG;AAC5B,IAAA83B,EAAO93B,CAAC;AAAA,EAAA,GAEV2oD,EAAO,kBAAkBmF,CAAO;AAAA,CACjC,GAGGC,KAAQ,CAAC9nB,MACN,IAAI,QAAQ,CAACjS,MAAY,WAAWA,GAASiS,CAAE,CAAC;AAGzC,SAAA+nB,GAAUP,GAA4BQ,IAAsB,QAAW;AAC/E,QAAA,EAAE,WAAAn0B,MAAc3C,MAChB+2B,IAAW5uD,EAAI,CAAC,GAEhB6uD,IAAW7uD,EAAI,CAAC;AAEtB,MAAI8uD,IAAoB,CAAA,GACpBC,IAAgB,GAChBC,IAAe,GACfC,IAAa;AACX,QAAA3J,IAAM4J,GAAM,cACZ,EAAE,iBAAAxK,GAAiB,eAAAJ,EAAc,IAAIF,GAAsB,GAE3D+K,IAAsB,MACnB,KAAK,IAAQ,IAAA;AAItB,WAASC,EAAiBC,GAAe;AACvC,UAAMC,IAAeH;AACrB,QAAIJ,MAAkB,GAAG;AACP,MAAAA,IAAAO;AAEhB;AAAA,IACF;AAEA,UAAMC,IAAWN,IAAa,IAAII,EAAc,SAASJ,IAAaI,EAAc;AACpF,IAAAJ,IAAaI,EAAc,UAAUA,EAAc,SAAS,IAAIA,EAAc,QACnEP,EAAA,KAAKS,KAAYD,IAAeP,EAAc,GAEzCA,IAAAO;AAAA,EAClB;AAEM,QAAAE,IAAc,OAAOC,GAAiBlwC,MACnC,IAAI,QAAQ,CAACmV,GAAS8D,MAAW;AAClC,QAAA,CAAC21B,EAAU,QAAQ;AACd,MAAA31B;AACP;AAAA,IACF;AACA,IAAAotB;AAAA,MACEprB;AAAA,MACA2zB;AAAA,MACAA,EAAU;AAAA,MACVsB;AAAA;AAAA,MACAA,EAAU;AAAA,MACVlwC;AAAA,MACA6vC;AAAA,IAAA,EAEC,KAAK,CAACtzC,MAAW;AAChB,MAAA4Y,EAAQ5Y,CAAM;AAAA,IAAA,CACf,EACA,MAAM,CAAC4zC,MAAc;AACpB,MAAAl3B,EAAOk3B,CAAS;AAAA,IAAA,CACjB;AAAA,EAAA,CACJ,GAGGC,IAAwB,OAAOpwC,MAAkC;AACrD,IAAAmlC,EAAAyJ,EAAU,SAAS,KAAK;AACxC,QAAIzF,IAAgD,MAAM6F,GAAShvC,GAAQ+kC,EAAc,OAAO6J,EAAU,IAAK,GAC3GsB,IAAY,IAAI,KAAK,CAAC/G,EAAY,IAAI,GAAGyF,EAAU,KAAM,IAAI;AAEjE,IAAAA,EAAU,oBAAoB5uC;AAC9B,UAAMqwC,IAAchpD,GAAM;AAChB,IAAAunD,EAAA,yBAAyByB,EAAY;AAE/C,QAAIC,IAAY7B,IACZ8B,IAAU;AACX,OAAA;AACD,MAAAA;AACI,UAAA;AACI,qBAAAN,EAAYC,GAAWlwC,CAAM,GAC/B+lC,EAAA,OAAOoD,EAAY,IAAI,GAEpB+G;AAAA,eACA1pD,IAAO;AAEV,YAAAiB,GAAoCjB,EAAc;AAC1C,iBAAA+pD,IAAAhC,IACAK,EAAA,MAAM,UAAUE,GAA6BtoD,EAAK,GACrD,QAAQ,OAAOA,EAAK;AAG7B,QAAI2+C,EAAgByJ,EAAU,SAAS,KAAK,MAC1CzF,IAAc,MAAM6F,GAAShvC,GAAQ+kC,EAAc,OAAO6J,EAAU,IAAK,GAC7DsB,IAAA,IAAI,KAAK,CAAC/G,EAAY,IAAI,GAAGyF,EAAU,KAAM,IAAI,IAG/D,MAAMM,GAAMoB,CAAS,GACrBC,MAAYhC,KAAkB,IAAK+B,IAAY,IAAMA,KAAa5B;AAAA,MACpE;AAAA,IAAA,SACO6B,IAAUhC;AACZ,WAAA,QAAQ,OAAO,4CAA4C;AAAA,EAAA;AAGpE,WAASiC,IAAa;AACpB,aAASC,IAAgB;AAEnB,UADSlB,IAAAA,EAAW,MAAM,GAAG,GAC7BA,EAAW,SAAS,GAAG;AACzB,cAAMmB,IAAW,KAAK,KAAKnB,EAAW,OAAO,CAAC7b,GAAK/zB,MAAY+zB,IAAM/zB,CAAO,IAAI4vC,EAAW,MAAM,GAC3FoB,IAAiB,KAAK,KAAKtB,EAAS,UAAU,MAAMC,EAAS,SAAS,IAAI;AAEhF,QAAAF,EAAeE,EAAS,OAAOoB,GAAU,KAAK,KAAKC,IAAiBD,CAAQ,CAAC;AAAA,MAC/E;AAEA,MAAIjB,MAAiB,KACnB,WAAW,WAAY;AACP,QAAAgB;SACbjC,EAAoB;AAAA,IAE3B;AAEc,IAAAiC;EAChB;AAyCO,SAAA;AAAA,IACL,YAxCiB,YACV,IAAI,QAAQ,CAACt7B,GAAS8D,MAAW;AACtC,UAAI,CAAC21B,EAAU,QAAQA,EAAU,KAAK,OAAO,GAAG;AAC9C,QAAAD,GAAoB;AACpB;AAAA,MACF;AACS,MAAAU,EAAA,QAAQT,EAAU,KAAK,MAChCA,EAAU,SAAS5K,GAAsB,WACzCoC,GAAenrB,GAAW2zB,CAAS,EAChC,KAAK,CAAC9jD,MAAQ;AACb,QAAA8jD,EAAU,UAAU9jD,EAAI,OACxB8jD,EAAU,SAAS9jD,EAAI,IACvBqqB,EAAQy5B,CAAS;AAAA,MAAA,CAClB,EACA,MAAM,CAAC97C,MAAQ;AACd,QAAAmmB,EAAOnmB,CAAG;AAAA,MAAA,CACX;AAAA,IAAA,CACJ;AAAA,IAwBD,QArBa,YAAY;;AACzB,MAAIs8C,KACSoB;AAGP,YAAAI,KAAW/xD,IAAA+vD,EAAU,SAAV,gBAAA/vD,EAAgB;AACjC,UAAI5D,EAAY21D,CAAQ;AAAG,eAAO,QAAQ;AAE1C,UAAIxvD,IAAI;AACR,aAAOA,IAAIwvD,KAAU;AACb,cAAAC,IAAgB,MAAMT,EAAsBhvD,CAAC;AACnD,QAAAA,KAAKyvD,EAAc,MACVvB,EAAA,QAASluD,IAAIwvD,IAAY;AAAA,MACpC;AAEe,aAAAnB,IAAA,KAAK,IAAQ,IAAA,KACrB,MAAMZ,GAAaD,GAAW7I,EAAI,OAAO,KAAK,CAAC;AAAA,IAAA;AAAA,EAKtD;AAEJ;AAEa,MAAA+K,KAAa,CAACC,MAAyC;AAElE,EAAAA,EAAkB,OAAO,yBAAyB;AACpD,GC/OaC,KAA4D,OAAO,kCAAkC;AAE3G,SAASC,KAA8B;AAC5C,SAAOC,GAA6BF,EAA2B;AACjE;AAEO,MAAMG,KAAsB;AAAA,EACjC,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,cAAc;AAAA,EACd,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,yBAAyB;AAAA,EACzB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,aAAa;AACf,GChBM,EAAE,GAAAz2D,GAAM,IAAA0L,GAAK,UAAUA,IAEvBgrD,KAA8B3wD,EAAI,EAAK;AAEtC,SAAS4wD,KAAuB;AAC/B,QAAA,EAAE,cAAAC,MAAiB94B,MAEnB+4B,IAAUD,EAAa,WAAWA,EAAa,aAAa,SAAS,GAErE,EAAE,MAAA/2C,GAAM,IAAAi3C,EAAA,IAAOC,GAAaH,EAAa,cAAc;AAAA,IAC3D,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EAAA,CACD;AA2BM,SAAA;AAAA,IACL,gBA1BqB,MAAM;AAG3B,UAFQ,QAAA,IAAI,kBAAkBC,CAAO,GACrCH,GAA4B,QAAQ,IAChC,CAACG;AAAS;AACd,YAAMG,IAAWT;AAEjB,MADK12C,KACAi3C,EAAG,UACLA,EAAA,MAAM,SAAS,SAA2BvhD,GAAc;AACjD,gBAAA,IAAI,mCAAmCA,CAAK;AAAA,MAAA,GAEnDuhD,EAAA,MAAM,UAAU,SAA2BvhD,GAAc;AACpD,cAAA,EAAE,aAAA1G,MAAgBV;AACxB,mBAAW,MAAM;AACH,UAAAU,EAAA7O,GAAE,2CAA2C,GAAG,EAAE;AAAA,WAC7D,GAAI,GACC,QAAA,IAAI,oCAAoCuV,CAAK;AAAA,MAAA,GAEpDuhD,EAAA,MAAM,YAAY,SAA2BvhD,GAAqB;AACnE,cAAMtJ,IAAU,KAAK,MAAMsJ,EAAM,IAAc,GACzCjI,IAAOrB,EAAQ,KAAK,SAAS,KAAK,MAAMA,EAAQ,IAAI,IAAI;AACtD,gBAAA,IAAIA,EAAQ,WAAWqB,CAAI,GACnC0pD,EAAS,KAAK,EAAE,MAAM/qD,EAAQ,WAAW,MAAAqB,GAAM;AAAA,MAAA;AAAA,IACjD;AAAA,IAKA,6BAAAopD;AAAA,EAAA;AAEJ;AAEO,SAASO,KAAsB;AACpC,QAAMD,IAAWT;AAMV,SAAA;AAAA,IACL,4BALiC,CAAC5iD,MAC3BqjD,EAAS,GAAGrjD,CAAQ;AAAA,EAI3B;AAEJ;ACnEO,SAASujD,KAAsB;AAqB7B,SAAA;AAAA,IACL,gBArBqB,CAACC,GAAuCC,MAA0B;AACvF,iBAAW,CAACv0D,GAAKrC,CAAK,KAAK,OAAO,QAAQ22D,CAAW;AAC/C,QAAA/1D,GAAcZ,CAAK,KACrB42D,EAAS,IAAIv0D,CAAG;AAAA,IAEpB;AAAA,IAiBA,oBAdyB,CAACs0D,MAA0C;AACpE,YAAME,IAA0B,CAAA;AAChC,iBAAW72D,KAAS,OAAO,OAAO22D,CAAW;AAC3C,QAAIt2D,GAAQL,CAAK,KAAKA,EAAM,SAAS,KAC7BA,EAAA,QAAQ,CAACiiC,MAAO;AACpB,UAAA40B,EAAU,KAAK50B,CAAE;AAAA,QAAA,CAClB;AAGE,aAAA40B;AAAA,IAAA;AAAA,EAKP;AAEJ;ACbO,SAASC,GAKdC,GACAC,GACAC,GACAC,IAAS,MACT;AACA,QAAMC,IAAoC5xD,EAAQ,oBAAA,IAAK,CAAA,GACjD6xD,IAAU7xD,EAAQ,oBAAA,IAAK,CAAA,GAEvBq0B,IAAM,IAAIlhB,MAA6B;AACrC,UAAA2+C,wBAAoB;AAC1B,aAASnxD,IAAI,GAAGA,IAAIwS,EAAK,QAAQxS,KAAK;AAC9B,YAAAoxD,IAAM5+C,EAAKxS,CAAC;AAClB,UAAI,EAAAhG,GAAOo3D,CAAG,KAAKv3D,EAAYu3D,CAAG,IAC9B;AAAA,YAAAj3D,GAAQi3D,CAAG,GAAG;AAChB,mBAAS1wD,IAAI,GAAGA,IAAI0wD,EAAI,QAAQ1wD,KAAK;AAC7B,kBAAA9C,IAAOwzD,EAAI1wD,CAAC;AAClB,YAAI1G,GAAO4D,CAAI,KAAK/D,EAAY+D,CAAI,KAC/BqzD,EAAM,MAAM,IAAIrzD,CAAI,KAAGuzD,EAAM,IAAIvzD,CAAI;AAAA,UAC5C;AACA;AAAA,QACF;AACA,QAAKqzD,EAAM,MAAM,IAAIG,CAAG,KAAGD,EAAM,IAAIC,CAAG;AAAA;AAAA,IAC1C;AACM,IAAAD,EAAA,QAAQ,CAACp1B,MAAO;AACpB,MAAAk1B,EAAM,MAAM,IAAIl1B,GAAI,EAAE,GAAG+0B,EAAe/0B,CAAE,GAAQ,SAAS,GAAS,CAAA,GAC5Dm1B,EAAA,MAAM,IAAIn1B,CAAE;AAAA,IAAA,CACrB;AAAA,EAAA,GAGGs1B,IAAY,CAACzqD,MAAY;AACzB,IAAAA,EAAKoqD,CAAM,KACbC,EAAM,MAAM,IAAIrqD,EAAKoqD,CAAM,GAAQ,EAAE,GAAGH,EAAiBjqD,CAAI,GAAQ,SAAS,GAAQ,CAAA;AAAA,EACxF,GAGI+sB,IAAmB,CAAC/sB,MAAY;AAChC,IAAAA,EAAKoqD,CAAM,KACbC,EAAM,MAAM,IAAIrqD,EAAKoqD,CAAM,GAAQ,EAAE,GAAGpqD,GAAW,SAAS,GAAQ,CAAA;AAAA,EACtE,GAGI0qD,IAAY,CAAC1qD,MAAc;AAC/B,aAAS5G,IAAI,GAAGA,IAAI4G,EAAK,QAAQ5G,KAAK;AACpC,MAAAixD,EAAM,MAAM,IAAIrqD,EAAK5G,CAAC,EAAEgxD,CAAM,GAAQ,EAAE,GAAGH,EAAiBjqD,EAAK5G,CAAC,CAAC,GAAQ,SAAS,IAAQ;AAAA,EAC9F,GAGIuxD,IAAgB,CAACz9B,MAAkB;AACvC,aAAS9zB,IAAI,GAAGA,IAAI8zB,EAAI,QAAQ9zB,KAAK;AACnC,MAAAkxD,EAAQ,MAAM,OAAOp9B,EAAI9zB,CAAC,CAAC;AAAA,EAC7B;AAGF,iBAAewxD,IAAW;AACpB,QAAAN,EAAQ,MAAM,OAAO,GAAG;AAC1B,YAAMp9B,IAAM,MAAM,KAAKo9B,EAAQ,KAAK,GAC9BxnD,IAAM,MAAMqnD,EAAcj9B,CAAG;AACnC,aAAAy9B,EAAcz9B,CAAG,GACjBw9B,EAAU5nD,CAAG,GACNA;AAAA,IACT;AACA,WAAO;EACT;AAEA,QAAM+nD,IAAiBC;AAAA,IACrB,YACS,MAAMF,EAAS;AAAA,IAExB;AAAA,IACA,EAAE,SAAS,IAAK;AAAA,EAAA;AAoCX,SAAA;AAAA,IACL,OAAAP;AAAA,IACA,SAAAC;AAAA,IACA,OAhCY,MACLO,EAAe;AAAA,IAgCtB,gBAzBqB,MACdD,EAAS;AAAA,IAyBhB,KAAA99B;AAAA,IACA,WAAA29B;AAAA,IACA,kBAAA19B;AAAA,IACA,KApBU,CAACoI,MACNA,IACEk1B,EAAM,MAAM,IAAIl1B,CAAE,IADT;AAAA,IAoBhB,KA1BU,CAACA,MAA6B;AACxC,UAAKA;AACE,eAAAk1B,EAAM,MAAM,IAAIl1B,CAAE;AAAA,IAAA;AAAA,IAyBzB,UAjBe,CAACA,MAAsC;AACtD,UAAI,CAACA;AAAW,eAAA;AAChB,YAAMn+B,IAAOqzD,EAAM,MAAM,IAAIl1B,CAAE;AAC/B,aAAKn+B,IACEA,EAAK,UADM;AAAA,IACN;AAAA,EAaZ;AAEJ;ACxHA,MAAM+zD,KAAwB,CAAC79B,GAA0B6E,MAAiC;AAClF,QAAA,EAAE,eAAAZ,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,gBAAAP,GAAgB,UAAAR,MAAaF,MACzFK,IAAQrE,EAAI;AAClB,SAAAiE,EAAcI,CAAK,GACnBF,EAAe,GAAGE,CAAK,GACvBC,EAAc,MAAM,EAAK,GACrBO,IAAaX,EAAS,MAAMlE,EAAI,KAAK,GAAG,CAAC,IACxC0E,EAAe,MAAM,MAAM1E,EAAI,KAAK,GAAG,CAAC,GAEtCiF,EAAW;AACpB,GAEa64B,KAAgB,CAC3Bh6B,GACA9D,GACAwD,GACAC,IAAuB,CAAA,GACvBp6B,GACAwJ,GACAjH,IAA8B,IAC9Bi5B,IAAc,OAEP,IAAI,QAAQ,CAAC5E,GAAS8D,MAAW;AACtC,EAAAD,EACG,EAAA,IAAIP,GAAqBC,GAAaC,CAAS,IAAIo6B,GAAsB79B,GAAK6E,CAAW,GAAGj5B,CAAO,EACnG,KAAK,CAACgK,MAAQ;;AACb,WAAK+tB,GAAkB/tB,EAAI,MAAM,KAG7BjM,IAAAiM,EAAI,SAAJ,QAAAjM,EAAU,OACLs2B,EAAQrqB,EAAI,KAAK,IAAI,IAE1BA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnB8D,EAAO,IAAIxyB,GAAA,CAAgB,IARzBwyB,EAAO,IAAI5wB,GAAyByC,EAAI,MAAM,CAAC;AAAA,EAQtB,CACnC,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCmmB,EAAO,IAAIrxB,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GClDUmgD,KAAe,CAC1Bj6B,GACA98B,IAAoC,CACpC,GAAAw8B,GACAC,IAAuB,CAAA,GACvBp6B,GACAwJ,GACAjH,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACq0B,GAAS8D,MAAW;AACtC,EAAAD,EACG,EAAA,KAAKP,GAAqBC,GAAaC,CAAS,GAAG,KAAK,UAAUz8B,CAAM,GAAG4E,CAAO,EAClF,KAAK,CAACgK,MACA+tB,GAAkB/tB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnB8D,EAAO,IAAIxyB,GAAA,CAAgB,IARzBwyB,EAAO,IAAI5wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCmmB,EAAO,IAAIrxB,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GC5CG8nB,KAAY,mBACZs4B,KAAiBt4B,KAAY,4BACtBG,KAAS,WAETo4B,KAAwB,CAACn6B,GAA6BuD,GAAqBrH,MACtF89B;AAAA,EACEh6B;AAAA,EACA9D;AAAA,EACAg+B,KAAiB;AAAA,EACjB,EAAE,aAAA32B,EAAY;AAAA,EACdrB;AAAA,EACAH;AAAAA,EACA,CAAC;AAAA,EACD;AACF,GAEWq4B,KAAmB,CAC9Bp6B,GACAuD,GACAnuB,GACAH,MACGosB,GAA2BrB,GAAQk6B,IAAgB,EAAE,aAAA32B,EAAY,GAAGnuB,GAAYH,GAAWitB,IAAiBH,EAAM,GAE1Gs4B,KAAgB,CAACr6B,GAA6BhxB,MACzDirD,GAAyBj6B,GAAQhxB,GAAM4yB,IAAW,CAAA,GAAIM,IAAiBH,EAAM,GCzBzEk3B,KAAmB,CAACqB,OAA4C;AAAA,EACpE,IAAIA,EAAQ;AAAA,EACZ,MAAMA,EAAQ;AAChB,IAEMpB,KAAiB,CAAC/0B,OACf,EAAE,IAAAA,GAAQ,MAAM,OAGnB,EAAEk1B,OAAAA,IAAOC,SAAAA,IAASz9B,OAAAA,IAAOC,KAAAA,IAAK29B,WAAAA,IAAW19B,kBAAAA,IAAkBw+B,KAAAA,IAAKC,KAAAA,IAAKC,UAAAA,GAAa,IAAAzB,GAItFC,IAAkBC,IAAgB,CAACh9B,MAAQ;AACrC,QAAA,EAAE,aAAA7I,MAAgB2P;AACpB,MAAA5gC,GAAOixB,EAAY,kBAAkB;AACjC,UAAA,IAAI,MAAM,iCAAiC;AAE7C,QAAA,EAAE,WAAA4O,MAAc3C;AACtB,SAAO66B,GAAsBl4B,GAAW5O,EAAY,oBAAoB6I,CAAG;AAC7E,CAAC,GAEYw+B,KAAuB,OAC3B;AAAA,EACL,2BAA2BjB;AAAAA,EAC3B,kCAAkC19B;AAAAA,EAClC,qBAAqBD;AAAAA,EACrB,qBAAqBD;AAAAA,EACrB,uBAAuBy9B;AAAAA,EACvB,gBAAgBD;AAAAA,EAChB,kBAAkBkB;AAAAA,EAClB,kBAAkBC;AAAAA,EAClB,uBAAuBC;AAAA,IC/BrB74B,KAAY,kBACZs4B,KAAiBt4B,KAAY,4BACtBG,KAAS,UAET44B,KAAuB,CAAC36B,GAA6BuD,GAAqBrH,MACrF89B;AAAA,EACEh6B;AAAA,EACA9D;AAAA,EACAg+B,KAAiB;AAAA,EACjB;AAAA,IACE,aAAA32B;AAAA,EACF;AAAA,EACArB;AAAA,EACAH;AAAAA,EACA,CAAC;AAAA,EACD;AACF,GAEW64B,KAAkB,CAC7B56B,GACAuD,GACAnuB,GACAH,MAEAosB;AAAA,EACErB;AAAA,EACAk6B;AAAA,EACA;AAAA,IACE,aAAA32B;AAAA,EACF;AAAA,EACAnuB;AAAA,EACAH;AAAA,EACAitB;AAAA,EACAH;AACF,GAEW84B,KAAe,CAAC76B,GAA6BhxB,MACxDirD,GAAwBj6B,GAAQhxB,GAAM4yB,IAAW,CAAA,GAAIM,IAAiBH,EAAM,GCtCxEk3B,KAAmB,CAAC6B,OAAyC;AAAA,EACjE,IAAIA,EAAO;AAAA,EACX,MAAMA,EAAO;AAAA,EACb,YAAYA,EAAO;AACrB,IAEM5B,KAAiB,CAAC/0B,OACf,EAAE,IAAAA,GAAQ,MAAM,IAAI,YAAY,GAAG,IAGtC,EAAE,OAAAk1B,IAAO,SAAAC,IAASz9B,OAAAA,IAAOC,KAAAA,IAAK,WAAA29B,IAAW,kBAAA19B,IAAkB,KAAAw+B,IAAK,KAAAC,IAAK,UAAAC,GAAa,IAAAzB,GAItFC,IAAkBC,IAAgB,CAACh9B,MAAQ;AACrC,QAAA,EAAE,aAAA7I,MAAgB2P;AACpB,MAAA5gC,GAAOixB,EAAY,kBAAkB;AACjC,UAAA,IAAI,MAAM,iCAAiC;AAE7C,QAAA,EAAE,WAAA4O,MAAc3C;AACtB,SAAOq7B,GAAqB14B,GAAW5O,EAAY,oBAAoB6I,CAAG;AAC5E,CAAC,GAEY6+B,KAAsB,OAC1B;AAAA,EACL,0BAA0BtB;AAAA,EAC1B,iCAAiC19B;AAAA,EACjC,oBAAoBD;AAAAA,EACpB,oBAAoBD;AAAAA,EACpB,sBAAsBy9B;AAAA,EACtB,eAAeD;AAAA,EACf,iBAAiBkB;AAAA,EACjB,iBAAiBC;AAAA,EACjB,sBAAsBC;AAAA,IAIbO,KAA2C,OAC/C;AAAA,EAAA,OACLn/B;AAAAA,EAAA,KACAC;AAAAA,EACA,kBAAAC;AAAA,ICvBEk/B,KAA6B,GAC7BC,KAAmB,UAEZvN,KAAuB5wB,GAAY,2BAA2B,MAAM;AAC/E,QAAM,EAAE,qBAAAo+B,GAAqB,qBAAAC,EAAoB,IAAIV,GAAqB,GACpE,EAAE,oBAAAW,GAAoB,oBAAAC,EAAmB,IAAIP,GAAoB,GAEjEzI,IAAS7qD,EAA0C,oBAAA,IAAK,CAAA,GAExD,EAAE,eAAA8zD,MAAkB/P,MAEpB,EAAE,WAAAvpB,MAAc3C,MAChB,EAAE,4BAAAk8B,MAA+B7C;AACvC,EAAA6C,EAA2B,CAACvkD,MAAU;AACpC,YAAQA,EAAM,MAAM;AAAA,MAClB,KAAKkhD,GAAoB;AACJ,QAAAsD,EAAAxkD,EAAM,KAAK,KAAK;AACnC;AAAA,MACF,KAAKkhD,GAAoB;AACvB,QAAAuD,EAAgBzkD,EAAM,KAAK,OAAOA,EAAM,KAAK,UAAU;AACvD;AAAA,MACF,KAAKkhD,GAAoB;AACJ,QAAAwD,EAAA1kD,EAAM,KAAK,OAAOA,EAAM,KAAK,iBAAiBA,EAAM,KAAK,SAAS;AACrF;AAAA,MACF,KAAKkhD,GAAoB;AACI,QAAAyD,EAAA3kD,EAAM,KAAK,KAAK;AAC3C;AAAA,IACJ;AAAA,EAAA,CACD;AAED,WAAS4kD,EAASC,GAA0B;AAC1C,WAAIxJ,EAAO,MAAM,IAAIwJ,CAAQ,IACpBxJ,EAAO,MAAM,IAAIwJ,CAAQ,IAE3B;AAAA,EACT;AAEA,WAASC,EAAcD,GAA0B;;AAC/C,WAAIxJ,EAAO,MAAM,IAAIwJ,CAAQ,MACpBj2D,IAAAysD,EAAO,MAAM,IAAIwJ,CAAQ,MAAzB,gBAAAj2D,EAA4B,UAAS,KAEvC;EACT;AAEe,iBAAAm2D,EAAWF,GAA0BG,GAAyBzS,GAAe;AACpF,UAAA,EAAE,oBAAA3mB,MAAuBG;AAC/B,qBAAiBimB,KAAQO,GAAO;AAC9B,YAAM99B,KAAOigC,GAAuB3C,GAAeC,CAAI,GAAGpmB,EAAmB,KAAK;AAC9E,UAAA,CAACnX,MAAQA,OAAS8Q,GAAa;AAAO;AAC1C,YAAMo5B,KAAY2F;AAAA,QAChB,UAAUtS,EAAK;AAAA,QACf8B,GAAoB;AAAA,QACpBC,GAAsB;AAAA,QACtBt/B;AAAA,QACAwvC;AAAA,QACAe;AAAA,MAAA;AAEF,MAAArG,GAAU,OAAO3M,GACjB2M,GAAU,eAAe3M,EAAK,MAC9BiT,EAAYJ,CAAQ,GACpBK,EAAaL,GAAUlG,EAAS,GAChCwG,EAAuBN,CAAQ,GAC/BO,EAAcP,CAAQ;AAAA,IACxB;AAAA,EACF;AAES,WAAAK,EAAaL,GAA0B91D,GAAuB;AACrE,UAAM4sD,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,IAAKlJ,KACCA,EAAA,MAAM,KAAK5sD,CAAI;AAAA,EACvB;AAEA,WAASk2D,EAAYJ,GAA0B;AAC7C,IAAKxJ,EAAO,MAAM,IAAIwJ,CAAQ,KACrBxJ,EAAA,MAAM,IAAIwJ,GAAU;AAAA,MACzB,OAAO,CAAC;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,aAAa,EAAE,iBAAiB,oBAAI,IAAe,GAAA,gBAAoB,oBAAA,MAAc;AAAA,IAAA,CACtF;AAAA,EAEL;AAEA,WAASM,EAAuBN,GAA0B;AACxD,UAAMlJ,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,IAAKlJ,MACCA,EAAA,aAAaA,EAAM,MAAM,QACzBA,EAAA,iBACJ0J,EAAsBR,GAAU9Q,GAAsB,QAAQ,EAAE,SAChEsR,EAAsBR,GAAU9Q,GAAsB,MAAM,EAAE;AAAA,EAClE;AAES,WAAAsR,EAAsBR,GAA0BrQ,GAA+B;AACtF,UAAMmH,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,WAAKlJ,IACEA,EAAM,MAAM,OAAO,CAAC5sD,MAASA,EAAK,WAAWylD,CAAM,IADvC;EAErB;AAEA,WAAS4Q,EAAcP,GAA0B;AAC/C,UAAMS,IAAeD,EAAsBR,GAAU9Q,GAAsB,OAAO;AAMlF,QALI,EAAAuR,EAAa,WAAW,KAILD,EAAsBR,GAAU9Q,GAAsB,SAAS,EAAE,WACjEiQ;AAIvB,eAAS7yD,IAAI,GAAGA,IAAI6yD,IAA4B7yD;AAC9C,QAAIm0D,EAAan0D,CAAC,KAAwBo0D,EAAAD,EAAan0D,CAAC,GAAG0zD,CAAQ;AAAA,EAEvE;AAEe,iBAAAU,EAAqBx2D,GAAuB81D,GAA0B;AAC7E,UAAA,EAAE,QAAAW,GAAQ,YAAAC,MAAevG,GAAUnwD,GAAM,CAACswD,GAAkBpa,IAAeygB,OAAqB;AACrF,MAAAC,EAAA52D,GAAMswD,GAAUpa,IAAOygB,EAAQ;AAAA,IAAA,CAC/C;AACG,QAAA;AACF,YAAMD,EAAW,GACjB,MAAMD,EAAO,GACbJ,EAAcP,CAAQ;AAAA,YACZ;AACV,MAAA91D,EAAK,MAAM,WAAW,IACtBA,EAAK,SAASglD,GAAsB,QACpCoR,EAAuBN,CAAQ,GAC/BO,EAAcP,CAAQ;AAAA,IACxB;AAAA,EACF;AAEA,WAASc,EAAe52D,GAAuBswD,GAAkBpa,GAAeygB,GAAkB;AAChG,IAAA32D,EAAK,SAAS,kBAAkBswD,GAChCtwD,EAAK,SAAS,gBAAgB22D,GAC9B32D,EAAK,SAAS,QAAQk2C;AAAA,EACxB;AAEA,iBAAeuf,EAAmB78B,GAAgB;AAC5C,QAAA;AACF,YAAMT,IAAQ,MAAM+F,GAAWjC,GAAWrD,CAAO;AACjD,UAAI,CAACT;AAAO;AACZ,MAAAm0B,EAAO,MAAM,QAAQ,CAACM,GAAOkJ,MAAa;AAClC,QAAAlJ,EAAA,MAAM,QAAQ,CAAC5sD,MAAS;;AAC5B,UAAIA,EAAK,YAAYm4B,EAAM,MAAMA,EAAM,aACrC,aAAan4B,EAAK,yBAAyB,GAC3CA,EAAK,SAASglD,GAAsB,UAC/BhlD,EAAA,cAAcm4B,EAAM,WAAW,cAChCt4B,KAAAs4B,EAAM,SAAS,UAAf,QAAAt4B,GAAsB,iBACnBG,EAAA,eAAem4B,EAAM,SAAS,MAAM,eAE3Ck+B,EAAcP,CAAQ;AAAA,QACxB,CACD,GACDM,EAAuBN,CAAQ;AAAA,MAAA,CAChC;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAEA,iBAAeH,EACb/8B,GACAi+B,IAAiC,MACjC1/B,IAAiC,MACjC;AACA,UAAM,EAAE,gBAAA2/B,GAAgB,oBAAAC,EAAmB,IAAInE,GAAoB;AACnE,QAAI,CAACiE,KAAmB,CAAC1/B,KAAaA,MAAcX,GAAa;AAAO;AACxE,QAAIwgC,KAAsC;AACtC,QAAA;AACS,MAAAA,KAAA,MAAM54B,GAAmBnC,GAAW46B,CAAe;AAAA,YACpD;AACJ,YAAA,IAAI,MAAM,aAAa;AAAA,IAC/B;AACA,IAAAvK,EAAO,MAAM,QAAQ,CAACM,IAAOkJ,OAAa;AAClC,MAAAlJ,GAAA,MAAM,QAAQ,CAAC5sD,OAAS;;AAC5B,QAAI5D,GAAO46D,EAAQ,KACfh3D,GAAK,YAAY44B,MACnB,aAAa54B,GAAK,yBAAyB,GAC3CA,GAAK,cAAc,IACnBA,GAAK,SAASglD,GAAsB,UACpChlD,GAAK,SAAS62D,GACd72D,GAAK,mBAAmBg3D,GAAS,IAC5Bh3D,GAAA,cAAcg3D,GAAS,WAAW,cACnCj3D,MAAAF,KAAAm3D,GAAS,aAAT,gBAAAn3D,GAAmB,UAAnB,QAAAE,GAA0B,iBACvBC,GAAA,eAAeg3D,GAAS,SAAS,MAAM,eAE9Ch3D,GAAK,WAAWg3D,GAAS,UACzBh3D,GAAK,UAAUg3D,GAAS,SACnBh3D,GAAA,aAAag3D,GAAS,SAAS,YACpCF,EAAeE,GAAS,SAAS,mBAAmBpK,GAAM,YAAY,cAAc,GACpFkK,EAAeE,GAAS,SAAS,oBAAoBpK,GAAM,YAAY,eAAe,GACtF5sD,GAAK,kBAAkB+2D,EAAmBC,GAAU,SAAS,iBAAiB,GAC9E7B,EAAoBn1D,GAAK,QAAQ,GACjCq1D,EAAmBr1D,GAAK,OAAO,GAC/Bq1D,EAAmBr1D,GAAK,eAAe,GACvCA,GAAK,UAAUg3D,GAAS,IACxBh3D,GAAK,kBAAkB,IACvBq2D,EAAcP,EAAQ;AAAA,MACxB,CACD,GACDM,EAAuBN,EAAQ,GACZR,KACCF;IAAA,CACrB;AAAA,EACH;AAEe,iBAAAM,EAAgB98B,GAAgBq+B,GAAiC;AAC1E,QAAA;AACF,YAAM9+B,IAAQ,MAAM+F,GAAWjC,GAAWrD,CAAO;AACjD,MAAA0zB,EAAO,MAAM,QAAQ,CAACM,GAAOkJ,MAAa;AAClC,QAAAlJ,EAAA,MAAM,QAAQ,CAAC5sD,OAAS;AACxB,UAAAA,GAAK,YAAYm4B,EAAM,OACzB,aAAan4B,GAAK,yBAAyB,GAC3CA,GAAK,MAAM,WAAW,IACtBA,GAAK,SAASglD,GAAsB,QACpChlD,GAAK,MAAM,sBAAsBi3D,GACjCj3D,GAAK,kBAAkB,IACvBq2D,EAAcP,CAAQ;AAAA,QACxB,CACD,GACDM,EAAuBN,CAAQ;AAAA,MAAA,CAChC;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAEA,iBAAeF,EAA2Bh9B,GAAgB;AACxD,UAAM,EAAE,gBAAAk+B,GAAgB,oBAAAC,EAAmB,IAAInE,GAAoB;AAC/D,QAAA;AACF,YAAMz6B,IAAQ,MAAM+F,GAAWjC,GAAWrD,CAAO;AACjD,MAAA0zB,EAAO,MAAM,QAAQ,CAACM,GAAOkJ,OAAa;AAClC,QAAAlJ,EAAA,MAAM,QAAQ,CAAC5sD,OAAS;AAC5B,UAAIA,GAAK,YAAYm4B,EAAM,MAAMn4B,GAAK,SACpC,aAAaA,GAAK,yBAAyB,GAC3CA,GAAK,WAAWm4B,EAAM,UACtBn4B,GAAK,UAAUm4B,EAAM,SAChBn4B,GAAA,aAAam4B,EAAM,SAAS,YACjC2+B,EAAe3+B,EAAM,SAAS,mBAAmBy0B,EAAM,YAAY,cAAc,GACjFkK,EAAe3+B,EAAM,SAAS,oBAAoBy0B,EAAM,YAAY,eAAe,GACnF5sD,GAAK,kBAAkB+2D,EAAmB5+B,EAAM,SAAS,iBAAiB,GAC1Eg9B,EAAoBn1D,GAAK,QAAQ,GACjCq1D,EAAmBr1D,GAAK,OAAO,GAC/Bq1D,EAAmBr1D,GAAK,eAAe,GACvCA,GAAK,kBAAkB;AAAA,QACzB,CACD,GACDo2D,EAAuBN,EAAQ,GACZR,KACCF;MAAA,CACrB;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAES,WAAAjZ,EAAe2Z,GAA0Bj4D,GAAe;AAC/D,UAAM+uD,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,IAAI,CAAClJ,KAAS,CAACA,EAAM,MAAM/uD,CAAK,MAC1B+uD,EAAA,MAAM,OAAO/uD,GAAO,CAAC,GAC3Bu4D,EAAuBN,CAAQ;AAAA,EACjC;AAEe,iBAAAoB,EAAepB,GAA0BlG,GAA4B/xD,GAAe;AACjG,UAAM+uD,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,IAAI,CAAClJ,KAASA,EAAM,MAAM,WAAW,MACrCgD,EAAU,SAAS5K,GAAsB,MACrC4K,EAAU,0BACZkC,GAAWlC,EAAU,sBAAsB,GAE7CzT,EAAc2Z,GAAUj4D,CAAK,GAC7Bw4D,EAAcP,CAAQ;AAAA,EACxB;AAEA,iBAAeqB,EAAiBh/B,GAA2B;AACzD,UAAM,EAAE,gBAAA2+B,GAAgB,oBAAAC,EAAmB,IAAInE,GAAoB;AAC/D,QAAA;AACF,YAAMoE,IAAW,MAAM94B,GAAWjC,GAAW9D,EAAM,EAAE;AACrD,MAAAm0B,EAAO,MAAM,QAAQ,CAACM,GAAOkJ,OAAa;AAClC,QAAAlJ,EAAA,MAAM,QAAQ,CAAC5sD,OAAS;AAC5B,UAAIA,GAAK,YAAYg3D,EAAS,MAAMh3D,GAAK,SACvC,aAAaA,GAAK,yBAAyB,GAC3CA,GAAK,WAAWg3D,EAAS,UACzBh3D,GAAK,UAAUg3D,EAAS,SACnBh3D,GAAA,aAAag3D,EAAS,SAAS,YACpCF,EAAeE,EAAS,SAAS,mBAAmBpK,EAAM,YAAY,cAAc,GACpFkK,EAAeE,EAAS,SAAS,oBAAoBpK,EAAM,YAAY,eAAe,GACtF5sD,GAAK,kBAAkB+2D,EAAmBC,EAAS,SAAS,iBAAiB,GAC7E7B,EAAoBn1D,GAAK,QAAQ,GACjCq1D,EAAmBr1D,GAAK,OAAO,GAC/Bq1D,EAAmBr1D,GAAK,eAAe;AAAA,QACzC,CACD,GACDo2D,EAAuBN,EAAQ,GACZR,KACCF;MAAA,CACrB;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAEA,WAASgC,GAAoBtB,GAA0B;AACrD,UAAMlJ,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,WAAKlJ,IACEA,EAAM,aADM;AAAA,EAErB;AAEA,WAASyK,GAAwBvB,GAA0B;AACzD,UAAMlJ,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,WAAKlJ,IACEA,EAAM,iBADM;AAAA,EAErB;AAEA,WAAS0K,EAAYxB,GAA0B;AAC7C,UAAMlJ,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,QAAI,CAAClJ,KAASA,EAAM,MAAM,WAAW;AAAG;AACxC,UAAM2K,IAAejB,EAAsBR,GAAU9Q,GAAsB,SAAS;AAC9E,IAAA4H,EAAA,MAAM,QAAQ,CAAC5sD,MAAS;AAC5B,MAAAA,EAAK,SAASglD,GAAsB;AAAA,IAAA,CACrC,GACGuS,EAAa,SAAS,KACXA,EAAA,QAAQ,CAACv3D,MAAS;AAC7B,MAAIA,EAAK,0BACP8xD,GAAW9xD,EAAK,sBAAsB;AAAA,IACxC,CACD,GAEHw3D,EAAW1B,CAAQ,GACnB2B,EAAqB3B,CAAQ;AAAA,EAC/B;AAEA,WAAS2B,EAAsB3B,GAA0B;AACvD,IAAAI,EAAYJ,CAAQ;AACpB,UAAMlJ,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,IAAKlJ,KACCA,EAAA;AAAA,EACR;AAEA,WAAS8K,EAAsB5B,GAA0B;AACvD,UAAMlJ,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,WAAKlJ,IACEA,EAAM,eADM;AAAA,EAErB;AAEA,WAAS4K,EAAW1B,GAA0B;AAE5C,IADcxJ,EAAO,MAAM,IAAIwJ,CAAQ,KAEhCxJ,EAAA,MAAM,IAAIwJ,GAAU;AAAA,MACzB,OAAO,CAAC;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc4B,EAAqB5B,CAAQ,IAAI;AAAA,MAC/C,aAAa,EAAE,iBAAiB,oBAAI,IAAe,GAAA,gBAAoB,oBAAA,MAAc;AAAA,IAAA,CACtF;AAAA,EACH;AAEA,WAAS6B,EAAmB7B,GAA0B;AAClD,UAAM8B,IAA6B,CAAA,GAC/BhL,IAAQN,EAAO,MAAM,IAAIwJ,CAAQ;AACvC,QAAI,CAAClJ;AAAc,aAAAgL;AACf,QAAAhL,EAAM,MAAM,SAAS;AACvB,eAASxqD,IAAI,GAAGA,IAAIwqD,EAAM,MAAM,QAAQxqD;AACtC,QAAIw1D,EAAM,SAAShL,EAAM,MAAMxqD,CAAC,EAAE,SAAS,KAG3Cw1D,EAAM,KAAKhL,EAAM,MAAMxqD,CAAC,EAAE,SAAS;AAGhC,WAAAw1D;AAAA,EACT;AAEO,SAAA;AAAA,IACL,UAAA/B;AAAA,IACA,eAAAE;AAAA,IACA,YAAAC;AAAA,IACA,oBAAAP;AAAA,IACA,oBAAAE;AAAA,IACA,iBAAAD;AAAA,IACA,eAAAvZ;AAAA,IACA,gBAAA+a;AAAA,IACA,oBAAAE;AAAA,IACA,wBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,oBAAAK;AAAA,IACA,kBAAAR;AAAA,EAAA;AAEJ,CAAC,gCCzXKU,KAAwB;;;;;;;;;;;;;AA1B9B,UAAMr8D,IAAQC,GAqBR4D,IAAOC,GAOPw4D,IAAWr2D,EAAkC,MAAS,GAEtDs2D,IAAoBt2D,EAAIjG,EAAM,gBAAgB,CAAC,GAC/Cw8D,IAAmBv2D,EAAI,EAAK,GAE5Bw2D,IAAa,MAAM;;AACnB,MAAAD,EAAiB,UAAU,OAG/BA,EAAiB,QAAQ,KACzBn4D,IAAAi4D,EAAS,UAAT,QAAAj4D,EAAgB,SAChB,WAAW,MAAM;AACf,QAAAm4D,EAAiB,QAAQ;AAAA,SACxBH,EAAqB;AAAA,IAAA,GAIpB,EAAE,sBAAAtU,EAAqB,IAAIL,GAAsB1nD,EAAM,QAAQA,EAAM,QAAQ,GAE7E08D,IAAe,CAAC1U,MAAkB;AACtC,UAAI,CAAChoD,EAAM,YAAYgoD,EAAM,SAAS,GAAG;AACvC,cAAM2U,IAAU5U,EAAqB,CAACC,EAAM,CAAC,CAAC,CAAC;AAC/C,QAAAnkD,EAAK,cAAc84D,CAAO;AAC1B;AAAA,MACF;AACM,YAAAA,IAAU5U,EAAqBC,CAAK;AAC1C,MAAAnkD,EAAK,cAAc84D,CAAO;AAAA,IAAA,GAGtBC,IAAiB,CAAC5U,MAAkB;AACxC,MAAA0U,EAAa1U,CAAK;AAAA,IAAA,GAGd6U,IAAoB,CAACC,MAAmB;;AAC5C,YAAMrnD,IAAQqnD;AACd,MAAAj5D,EAAK,UAAU4R,CAAK,GACpBinD,EAAa,MAAM,OAAKr4D,IAAAoR,EAAM,WAAN,gBAAApR,EAAc,UAAS,CAAE,CAAA,CAAC;AAAA,IAAA,GAG9C04D,IAAsB,MAAM;AAC5B,UAAA,CAAA97D,GAAUjB,EAAM,uBAAuB,GAGvC;AAAA,YAAAS,EAAYT,EAAM,uBAAuB,GAAG;AACnC,UAAAy8D;AACX;AAAA,QACF;AACA,QAAAz8D,EAAM,wBAAwB;AAAA;AAAA,IAAA;AAGhC,WAAAsF;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,KAAY9E,EAAY0D,CAAQ,MAGjDo4D,EAAkB,QAAQp4D;AAAA,MAC5B;AAAA,IAAA,GAGW8yB,EAAA;AAAA,MACX,UAAUwlC;AAAA,IAAA,CACX;;;;;;;;;;;;;;;;;;;;;;;ICjGYO,KAA2E,OAAO;AAAA,EAC7F;AACF,GCYaC,KAAe,CAC1Bz+B,GACA98B,IAAoC,CACpC,GAAAw8B,GACAC,IAAuB,CAAA,GACvBp6B,GACAwJ,GACAjH,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACq0B,GAAS8D,MAAW;AACtC,EAAAD,EACG,EAAA,IAAIP,GAAqBC,GAAaC,CAAS,GAAG,KAAK,UAAUz8B,CAAM,GAAG4E,CAAO,EACjF,KAAK,CAACgK,MACA+tB,GAAkB/tB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnB8D,EAAO,IAAIxyB,GAAA,CAAgB,IARzBwyB,EAAO,IAAI5wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCmmB,EAAO,IAAIrxB,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GCpCU4kD,KAAe,CAC1B1+B,GACAN,GACAC,IAAuB,CAAC,GACxBp6B,GACAwJ,GACAjH,IAA8B,OAEvB,IAAI,QAAQ,CAACq0B,GAAS8D,MAAW;AAC/B,EAAAD,EAAA,EACJ,OAAOP,GAAqBC,GAAaC,CAAS,GAAG73B,CAAO,EAC5D,KAAK,CAACgK,MACA+tB,GAAkB/tB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnB8D,EAAO,IAAIxyB,GAAA,CAAgB,IARzBwyB,EAAO,IAAI5wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCmmB,EAAO,IAAIrxB,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GC1CG8nB,KAAY,iBACLG,KAAS,SACT48B,KAAa,OAEpB56B,KAAsB,IAEf66B,KAAsB,CAAC5+B,GAA6B9D,MAC/D89B,GAA4Bh6B,GAAQ9D,GAAK0F,IAAW,CAAA,GAAI+8B,IAAY58B,EAAM,GAE/D88B,KAAa,CAAC7+B,GAA6BmE,MACtDpE,GAAwBC,GAAQ4B,KAAY,QAAQ,EAAE,IAAAuC,EAAA,GAAMw6B,IAAY58B,EAAM,GAEnE+8B,KAAc,CAAC9+B,GAA6BhxB,MACvDirD,GAAiDj6B,GAAQhxB,GAAM4yB,IAAW,CAAA,GAAI+8B,IAAY58B,EAAM,GAErFg9B,KAAc,CAAC/+B,GAA6BmE,GAAen1B,MACtEyvD,GAAiDz+B,GAAQhxB,GAAM4yB,KAAY,QAAQ,EAAE,IAAAuC,EAAG,GAAGw6B,IAAY58B,EAAM,GAElGi9B,KAAc,CAACh/B,GAA6BmE,MACvDu6B,GAAyB1+B,GAAQ4B,KAAY,QAAQ,EAAE,IAAAuC,EAAA,GAAMw6B,IAAY58B,EAAM,GAEpEk9B,KAAmB,CAACj/B,GAA6B/wB,MACrD,IAAI,QAAsB,CAACktB,GAAS8D,MAAW;AACpD,EAAAi/B,GAAqBl/B,GAAQ/wB,CAAK,EAC/B,KAAK,CAAC00B,MAAc;AACf,QAAA10B,EAAM,WAAW;AACZ,aAAAktB,EAAQ,CAAA,CAAE;AACnB,QAAWwH,EAAU,WAAW;AAC9B,aAAO1D,EAAO0D,CAAS;AAEvB,QAAAA,EAAU,MAAM,CAAC7xB,MACRA,EAAI,WAAWlE,EACvB,GACD;AACA,YAAMuxD,IAAuBx7B,EAAU,QAAQ,CAAYgB,MAAAA,EAAS,KAAK,MAAM;AAC/E,aAAOxI,EAAQgjC,CAAM;AAAA,IAAA;AAErB,aAAOl/B,EAAO0D,CAAS;AAAA,EACzB,CACD,EACA,MAAM,CAAC7pB,MAECmmB,EAAOnmB,CAAG,CAClB;AAAA,CACJ;AAGH,eAAeolD,GAAqBl/B,GAA6B/wB,GAAiC;AAChG,QAAM41B,IAAa,KAAK,KAAK51B,EAAM,SAAS80B,EAAmB,GACzDJ,IAA6B,CAAA;AACnC,MAAI10B,EAAM,WAAW;AAAU,WAAA,QAAQ,QAAQ,CAAA,CAAE;AAEjD,WAAS7G,IAAI,GAAGA,IAAIy8B,GAAYz8B,KAAK;AACnC,UAAM4e,IAAS5e,IAAI27B,IAEbq7B,IAAU,EAAE,QADFnwD,EAAM,MAAM+X,GAAQA,IAAS+c,EAAmB,KAE1DjyB,IAAM,MAAMkuB,EAAO,EAAE,IAAI4B,IAAW,KAAK,UAAUw9B,CAAO,CAAC;AACjE,IAAAz7B,EAAU,KAAK7xB,CAAG;AAAA,EACpB;AACO,SAAA6xB;AACT;;;;;;;;;;;;;;;;;;AC1DA,UAAMniC,IAAQC,GAwBR,EAAE,mBAAAmQ,MAAsB/B,MAGxBw6C,IAAeE,GAA2B/oD,EAAM,UAAU,GAC1D,EAAE,aAAA69D,EAAgB,IAAAhV,GAClB,EAAE,0BAAAiV,EAAA,IAA6B9U,GAAgBH,CAAY,GAE3DkV,IAAW93D,EAAgD,IAAI,GAE/D,EAAE,OAAAgjD,GAAO,YAAAz1B,EAAW,IAAIlf,GAAOtU,CAAK,GAEpCg+D,IAAc/3D,EAAI,EAAE,GAEpB,EAAE,GAAA/F,MAAMC;AAEd,WAAAmF;AAAA,MACE,CAAC2jD,GAAOz1B,CAAU;AAAA,MAClB,OAAO,CAACyqC,GAAUC,CAAU,MAAM;AAGhC,YAFAH,EAAS,QAAQ,MACjBC,EAAY,QAAQr5B,IAChBs5B,GAAU;AACH,UAAAF,EAAA,QAAQt8D,GAAUw8D,CAAQ,GAC/BF,EAAS,UACCC,EAAA,QAAQF,EAAyBC,EAAS,KAAK;AAE7D;AAAA,QACF;AACA,YAAIG,GAAY;AACV,cAAA;AACF,YAAAH,EAAS,QAAQ,MAAMV,GAAWQ,GAAaK,CAAU;AAAA,mBAClDlyD,GAAO;AACd,YAAAoE,EAAkBpE,CAAK;AAAA,UACzB;AACA,UAAI+xD,EAAS,UACCC,EAAA,QAAQF,EAAyBC,EAAS,KAAK;AAAA,QAE/D;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrEPI,KAAgB5iC,GAAY,oBAAoB,MAAM;AAC3D,QAAAoiC,IAAS13D,EAAmC,CAAA,CAAE,GAC9Cm4D,IAAcn4D,EAAmC,IAAI,GACrDo4D,IAAcp4D,EAAI,CAAC;AAEzB,WAASq4D,EAAe9wD,GAAqC;AAC3D,IAAI5M,GAAO4M,CAAI,MAAG4wD,EAAY,QAAQ,OAC1BA,EAAA,QAAQ38D,GAAU+L,CAAI;AAAA,EACpC;AAEA,WAAS+wD,EAAU/wD,GAAqC;AACtD,IAAAmwD,EAAO,QAAQnwD;AAAA,EACjB;AAEA,WAASgxD,EAAUhxD,GAAqC;AAC/C,IAAAmwD,EAAA,MAAM,KAAK,GAAGnwD,CAAI;AAAA,EAC3B;AAEA,WAASixD,EAA2BC,GAAqB;AACnD,IAAAA,IAAcL,EAAY,UAC5BA,EAAY,QAAQK;AAAA,EAExB;AAEA,WAASC,EAAmBt8D,GAAe;AAClC,IAAAs7D,EAAA,MAAM,OAAOt7D,GAAO,CAAC;AAAA,EAC9B;AAEA,WAASs7B,IAAQ;AACf,IAAAggC,EAAO,QAAQ,IACfS,EAAY,QAAQ;AAAA,EACtB;AAEO,SAAA;AAAA,IACL,QAAAT;AAAA,IACA,aAAAS;AAAA,IACA,aAAAC;AAAA,IACA,WAAAE;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAF;AAAA,IACA,4BAAAG;AAAA,IACA,oBAAAE;AAAA,IACA,OAAAhhC;AAAA,EAAA;AAEJ,CAAC,GC1CYihC,KAAyC,OAAO,IAAI,6CAA6C,GAEjGC,KAAsC,OAAO,IAAI,oCAAoC,GAErFC,KAAyC,OAAO,IAAI,6CAA6C,GAEjGC,KAAwC,OAAO,IAAI,4CAA4C,GAEtG,EAAA,UAAEpZ,IAAUljD,WAAAA,OAAc0jD;AAEhB,SAAA6Y,GACd/V,GACAgW,IAAmC,QACnC;AACM,QAAAjsC,IAAQ3yB,EAAS,OAAO;AAAA,IAC5B,OAAO;AAAA,MACL,OAAO;AAAA,QACL,QAAQ;AAAA,UAAA,UACNslD;AAAAA,UACA,WAAWljD,GAAU,GAAG;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACA,EAAA;AAGK,SAAA;AAAA,IACL,IAHSwwB,GAAaD,GAAO,EAAE,OAAAi2B,KAAS,EAAE,QAAQgW,EAAA,CAAiB;AAAA,EAGnE;AAEJ;;;;;;;;;;;;;;;;ACZA,UAAMp7D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MACR++D,IAAaf,MACb,EAAE,aAAAC,EAAA,IAAgBt6B,GAAYo7B,CAAU,GAExC,EAAE,IAAA3sC,EAAO,IAAAysC,GAAmBZ,GAAaS,EAAmC,GAE5E,EAAE,qBAAA5vD,MAAwBZ,MAE1BgC,IAAY,MAAM;AAElB,UADJkiB,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,QAAAtjB;AACpB;AAAA,MACF;AACA,MAAApL,EAAK,WAAW;AAAA,IAAA,GAGZs7D,IAAsB,CAACh7D,MAAsB;AAC7C,MAAAA,KACJN,EAAK,SAAS;AAAA,IAAA,GAGVu7D,IAAc,MAAM;AACpB,MAAAx+D,GAAOw9D,EAAY,KAAK,KAC5Bv6D,EAAK,aAAau6D,EAAY,MAAM,IAAI,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjDnC,IAAAiB,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,MAAM,OACNA,EAAA,UAAU,QAHAA,IAAAA,MAAA,CAAA,CAAA;AAMC,MAAAC,KAAsB/jC,GAAY,0BAA0B,MAAM;AACvE,QAAAoB,IAAQ12B,EAA+B,IAAI,GAC3Cs5D,IAAkBt5D,EAAa,CAAA,CAAE,GACjC8wB,IAAS9wB,EAAI,EAAK,GAClBivB,IAAUjvB,EAAI,EAAK,GACnBu5D,IAAqBv5D,EAAI,EAAK,GAC9Bw5D,IAAYx5D;AAAA,IAAgC;AAAA;AAAA,KAC5Cy5D,IAAoBz5D,EAAI,EAAK;AAEnC,WAAS05D,EAASnyD,GAAiC;AACjD,IAAAmvB,EAAM,QAAQnvB;AAAA,EAChB;AAEA,WAASmwB,IAAQ;AACf,IAAAhB,EAAM,QAAQ;AAAA,EAChB;AAEO,SAAA;AAAA,IACL,oBAAA6iC;AAAA,IACA,iBAAAD;AAAA,IACA,OAAA5iC;AAAA,IACA,SAAAzH;AAAA,IACA,QAAA6B;AAAA,IACA,WAAA0oC;AAAA,IACA,mBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAhiC;AAAA,EAAA;AAEJ,CAAC;;;;ACpCD,UAAM95B,IAAOC,GAIP,EAAE,cAAA4zB,MAAiBC,MAEnBX,IAAc,MAAM;AACxB,MAAAnzB,EAAK,aAAa;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICRd+7D,KAAoB,IACpBC,KAAkB,MAClBC,KAAiB;AAEhB,SAASC,KAAmB;AAC3B,QAAA,EAAE,MAAM5/D,MAER6/D,IAAgB,CAAC7kD,GAAiB8kD,MAA2B;AAC3D,UAAAC,IAASD,IAAQ,uBAAuB;AAC9C,WAAI9kD,IAAU2kD,KACL,EAAEI,IAAS,iBAAiB,EAAE,OAAO,KAAK,MAAM/kD,IAAU2kD,EAAc,EAAA,CAAG,IAEhF3kD,IAAU0kD,KACL,EAAEK,IAAS,kBAAkB,EAAE,OAAO,KAAK,MAAM/kD,IAAU0kD,EAAe,EAAA,CAAG,IAElF1kD,IAAUykD,KACL,EAAEM,IAAS,oBAAoB,EAAE,OAAO,KAAK,MAAM/kD,IAAUykD,EAAiB,EAAA,CAAG,IAEnF,EAAEM,IAAS,oBAAoB,EAAE,OAAO/kD,GAAS;AAAA,EAAA;AAWnD,SAAA;AAAA,IACL,oBATyB,CAACA,MACnB6kD,EAAc7kD,GAAS,EAAI;AAAA,IASlC,mBANwB,CAACA,MAClB6kD,EAAc7kD,GAAS,EAAK;AAAA,EAKnC;AAEJ;ACnCA,MAAeglD,KAAA,0pCCAAC,KAAA,uyBCAAC,KAAA,mkDCAAC,KAAA,+lDCAAC,KAAA,ujCCAAC,KAAA,4mECAAC,KAAA,gvCCAAC,KAAA,yqECSFC,KAAoB;AAAA,EAC/B;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQJ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQJ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQG;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQF;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQC;AAAA,EACV;AACF,GACaO,KAAaJ,IACbK,KAAWH,IACXI,KAAWL,IACXM,KAAgB;;;;;;;;AC/B7B,UAAM/gE,IAAQC,GAWR,EAAE,GAAAC,MAAMC,MAER6gE,IAAkB,CAACC,GAAiBC,MAAqB;AAC7D,UAAI,EAAAlhE,EAAM,oBAAoB,UAAU,KAAKA,EAAM,oBAAoB,WAAW,IAGlF;AAAA,YAAIA,EAAM,oBAAoB,QAAQ+gE,MAAiB/gE,EAAM,oBAAoB,SAAS+gE,IAAe;AACvG,UAAAE,EAAM,KAAKH,EAAQ,GACZI,EAAA,KAAKhhE,EAAE,qCAAqC,CAAC;AACpD;AAAA,QACF;AACI,YAAAF,EAAM,cAAcg7B,GAAa;AACrC,mBAASp0B,IAAI,GAAGA,IAAI+5D,GAAkB,QAAQ/5D;AAC5C,gBACE5G,EAAM,oBAAoB,UAAU2gE,GAAkB/5D,CAAC,EAAE,SACzD5G,EAAM,oBAAoB,WAAW2gE,GAAkB/5D,CAAC,EAAE,QAC1D;AACA,cAAAq6D,EAAM,KAAKN,GAAkB/5D,CAAC,EAAE,MAAM,GACtCs6D,EAAO,KAAKhhE,EAAEygE,GAAkB/5D,CAAC,EAAE,MAAM,CAAC;AAC1C;AAAA,YACF;AAAA;AAAA;AAAA,IACF,GAGIu6D,IAAqB,CAACF,GAAiBC,MAAqB;;AAC1D,YAAA,EAAE,cAAA9/B,MAAiBI;AACzB,eAAS56B,IAAI,GAAGA,IAAI5G,EAAM,oBAAoB,sBAAsB,QAAQ4G,KAAK;AACzE,cAAAw6D,KACJ/8D,IAAA+8B,EAAa,MAAM,qBAAqBphC,EAAM,oBAAoB,sBAAsB4G,CAAC,CAAC,MAA1F,gBAAAvC,EAA6F;AAC/F,QAAI+8D,EAAS,SAAS,KAAK,CAACH,EAAM,SAASG,CAAQ,MACjDH,EAAM,KAAKG,CAAQ,GACZF,EAAA,KAAK9/B,EAAa,MAAM,qBAAqBphC,EAAM,oBAAoB,sBAAsB4G,CAAC,CAAC,EAAE,KAAK;AAAA,MAEjH;AAAA,IAAA,GAGI4G,IAAOnN,EAAS,MAAM;AAC1B,YAAM4gE,IAAkB,CAAA,GAClBC,IAAmB,CAAA;AAEzB,aAAIlhE,EAAM,oBAAoB,UAAU,SAAS,MAC/CihE,EAAM,KAAKL,EAAU,GACdM,EAAA,KAAKhhE,EAAE,uCAAuC,CAAC,IAEpDF,EAAM,oBAAoB,YAC5BihE,EAAM,KAAKJ,EAAQ,GACZK,EAAA,KAAKhhE,EAAE,qCAAqC,CAAC,IAEtD8gE,EAAgBC,GAAOC,CAAM,GAC7BC,EAAmBF,GAAOC,CAAM,GAEzB,EAAE,OAAAD,GAAO,QAAAC;IAAO,CACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnED,UAAMlhE,IAAQC,GAoDR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERkhE,IAAS,MAAM;AACnB,MAAAx9D,EAAK,MAAM;AAAA,IAAA,GAEP+gC,IAAU,MAAM;AACpB,MAAA/gC,EAAK,OAAO;AAAA,IAAA,GAGR8R,IAAOtV,EAAS,MAAM;AACtB,UAAAL,EAAM,gBAAgB+6B,GAAe;AAAiB,eAAA;AAC1D,cAAQ/6B,EAAM,WAAW;AAAA,QACvB,KAAKg7B,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,aAAa;AAAA,QACtE,KAAKC,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOh7B,EAAM,gBAAgB+6B,GAAe,WAAW,cAAc;AAAA,QACvE;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEKumC,IAAsBjhE,EAAS,MAAM;AACzC,UAAI,CAACL,EAAM;AAA0B,eAAA;AACrC,YAAMU,IAAQ,KAAK,KAAKV,EAAM,iBAAiB;AACxC,aAAAU,IAAQ,MAAM,SAASA,IAAQ;AAAA,IAAA,CACvC,GAEK6gE,IAA0BlhE,EAAS,MAChC,CAAC06B,GAAe,UAAUA,GAAe,KAAK,EAAE,SAAS/6B,EAAM,WAAW,IAAI,SAASA,EAAM,eACrG,GAEKwhE,IAAYnhE,EAAS,MAClBL,EAAM,gBAAgB+6B,GAAe,WAAW,YAAY,SACpE,GAEK8J,IAAcxkC,EAAS,MACpBI,EAAYT,EAAM,GAAG,IAAI8kC,KAAkB9kC,EAAM,GACzD,GAEK+kC,IAAmB1kC,EAAS,MAC5BL,EAAM,WAAiB,KAClB,EAAAA,EAAM,cAAcg7B,GAAa,SAASh7B,EAAM,IAE1D,GAEK,EAAE,oBAAAyhE,MAAuB1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9GxB,SAAS2B,KAAyB;AACjC,QAAA,EAAE,MAAMvhE,MAERwhE,IAA6B17D,EAA8C;AAAA,IAC/E;AAAA,MACE,OAAOyjD,GAAoB;AAAA,MAC3B,OAAO,EAAE,gDAAgD;AAAA,IAC3D;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,mDAAmD;AAAA,IAC9D;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,2DAA2D;AAAA,IACtE;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,2DAA2D;AAAA,IACtE;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,0DAA0D;AAAA,IACrE;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,uDAAuD;AAAA,IAClE;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,4BAAAiY;AAAA,IACA,8BANmC,CAACjhE,MAC7BihE,EAA2B,MAAM,KAAK,CAACn9D,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAK3E;AAEJ;;;;;;;ACrCA,UAAMV,IAAQC,GAOR,EAAE,8BAAA2hE,MAAiCF,MACnCG,IAAexhE,EAAS,MACrBuhE,EAA6B5hE,EAAM,MAAM,CACjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChBR2hE,KAAa77D,EAAI,EAAK;AAErB,SAAS87D,KAAiC;AAC/C,QAAMC,IAAU,MAAM;AACpB,IAAAF,GAAW,QAAQ;AAAA,EAAA,GAGfG,IAAY,MAAM;AACtB,IAAAH,GAAW,QAAQ;AAAA,EAAA;AAGd,SAAA;AAAA,IACL,aAAa3wC,GAAS2wC,EAAU;AAAA,IAChC,SAAAE;AAAA,IACA,WAAAC;AAAA,EAAA;AAEJ;;;;ACfM,UAAA,EAAE,aAAAC,MAAgBH;;;;;;;;;;;;;;;;;;;ACIxB,UAAM/hE,IAAQC,GAUR4D,IAAOC,GAKP,EAAE,kCAAAw9B,MAAqCE,MAEvC2gC,IAAW9hE,EAAS,MACjBihC,EAAiC,MAAMthC,EAAM,SAAS,CAC9D,GAEK,EAAE,oBAAAqhC,MAAuBG,MAEzB4gC,IAAc/hE,EAAS,MACpBghC,EAAmB,MAAMrhC,EAAM,SAAS,EAAE,0BAClD;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BD,UAAMA,IAAQC,GAaR2sB,IAAQvsB,EAAS,MACd,qBAAqBL,EAAM,QAAQA,EAAM,QAAQ,aAAa,YAAYA,EAAM,KAAK,eAC1FA,EAAM,MACR,KACD;;;;;;;;;;;;;;;;;;;;;ACPK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJd,UAAMH,IAAQC,GAoBR,EAAE,iBAAAoiE,MAAoB9I,MACtBrN,IAAoBC,MAEpBr2B,IAASC,GAAqD,MAAS,GACvEC,IAASD,GAAoB,EAAK,GAElCvxB,IAAOnE,EAAS,MACbgiE,EAAgBriE,EAAM,EAAE,CAChC,GAEKsiE,IAAiBjiE,EAAS,MAAM;AACpC,UAAI,CAACL,EAAM;AAAgB;AAC3B,YAAMoxD,IAAQlF,EAAkB,SAASlsD,EAAM,OAAO;AAClD,UAAA,GAACoxD,KAAS,CAACt7B,EAAO,UAClBs7B,EAAM,YAAY,eAAe,IAAIt7B,EAAO,MAAM,IAAI;AAAU,eAAA;AAAA,IAC7D,CACR,GAEKI,IAAe71B,EAAS,MAAM;;AAC9B,aAAAL,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC81B,EAAO,QACFA,EAAO,MAAM,UAAQzxB,IAAAyxB,EAAO,MAAM,eAAb,gBAAAzxB,EAAyB,UAAS,IAAI,KAAKyxB,EAAO,MAAM,UAAU,MAAM,MAE/F;AAAA,IAAA,CACR;AAED,WAAAxwB;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI6xB,EAAO,SACPv1B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD2xB,EAAO,QAAQ3xB,GACf6xB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDpB,UAAMh2B,IAAQC,GASR4D,IAAOC,GAIPy+D,IAAa,MAAM;AAClB,MAAA1+D,EAAA,aAAa7D,EAAM,EAAE;AAAA,IAAA,GAGtB,EAAE,iBAAAqiE,MAAoB9I,MAEtBzjC,IAASC,GAAqD,MAAS,GACvEC,IAASD,GAAoB,EAAK,GAElCvxB,IAAOnE,EAAS,MACbgiE,EAAgBriE,EAAM,EAAE,CAChC,GAEKk2B,IAAe71B,EAAS,MAAM;;AAClC,aAAIy1B,EAAO,QACFA,EAAO,MAAM,UAAQzxB,IAAAyxB,EAAO,MAAM,eAAb,gBAAAzxB,EAAyB,UAAS,IAAI,KAAKyxB,EAAO,MAAM,UAAU,MAAM,MAE/F;AAAA,IAAA,CACR;AAED,WAAAxwB;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI6xB,EAAO,SACPv1B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD2xB,EAAO,QAAQ3xB,GACf6xB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;ICxCPwsC,KAAyB,MAAM;AACpC,QAAA,EAAE,WAAA/hC,MAAc3C,MAChB,EAAE,aAAAjM,MAAgB2P,MAElBihC,IAAe,CAACnJ,OAAyC;AAAA,IAC7D,IAAIA,EAAO;AAAA,IACX,MAAMA,EAAO;AAAA,IACb,YAAYA,EAAO;AAAA,EAAA,IAGfoJ,IAAmB,CAACpJ,OAAkD;AAAA,IAC1E,OAAOA,EAAO,QAAQA,EAAO,aAAa,KAAKA,EAAO,UAAU,MAAM;AAAA,IACtE,OAAOA,EAAO;AAAA,EAAA,IAGVqJ,IAAoB,CAACC,MAClBA,EAAQ,IAAI,CAACtJ,MAAsBoJ,EAAiBpJ,CAAM,CAAC,GAG9DuJ,IAAgB,CAACD,MACdA,EAAQ,IAAI,CAACtJ,MAAsBmJ,EAAanJ,CAAM,CAAC;AAwBzD,SAAA;AAAA,IACL,kBAAAoJ;AAAA,IACA,YAvBiB,OAAO9uD,GAAwBH,MAAyB;AACrE,UAAA7S,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAE5C,aAAA8wC,EAAkB,MAAMvJ,GAAgB34B,GAAW5O,EAAY,oBAAoBje,GAAYH,CAAS,CAAC;AAAA,IAAA;AAAA,IAoBhH,iBAVsB,OAAOinB,MAAkB;AAC3C,UAAA95B,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAEnD,aAAO8wC,EAAkB,MAAMxJ,GAAqB14B,GAAW5O,EAAY,oBAAoB6I,CAAG,CAAC;AAAA,IAAA;AAAA,IAOnG,mBAlBwB,OAAO9mB,GAAwBH,MAAyB;AAC5E,UAAA7S,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAE5C,aAAAgxC,EAAc,MAAMzJ,GAAgB34B,GAAW5O,EAAY,oBAAoBje,GAAYH,CAAS,CAAC;AAAA,IAAA;AAAA,EAc5G;AAEJ,GCvDMynB,KAAahoB,GAAiBwtB,IAAiB,QAAQ;AAEtD,SAASoiC,KAAkB;AAChC,SAAOxvC,GAAS;AAAA,IACd,UAAU;AAAA,MACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,MACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,IAChC;AAAA,EAAA,CACD;AACH;ACXY,IAAA6nC,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,WAAW,YACXA,EAAA,WAAW,YACXA,EAAA,SAAS,UACTA,EAAA,UAAU,QALAA,IAAAA,MAAA,CAAA,CAAA;AAQL,SAASC,KAAgB;AACxB,QAAA,EAAE,MAAM7iE,MAER8iE,IAAoBh9D,EAAqC;AAAA,IAC7D;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,wCAAwC;AAAA,IACnD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,4CAA4C;AAAA,IACvD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,4CAA4C;AAAA,IACvD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,0CAA0C;AAAA,IACrD;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,mBAAAg9D;AAAA,IACA,qBAN0B,CAACviE,MACpBuiE,EAAkB,MAAM,KAAK,CAACz+D,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKlE;AAEJ;ACnCA,MAAM,EAAA,UAAEilD,IAAUN,WAAAA,OAAcc;AAEhB,SAAA+c,GAAoB5J,GAAwB2F,IAAmC,QAAW;AAClG,QAAAjsC,IAAQ3yB,EAAS,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,MAAM;AAAA,QAAA,UACJslD;AAAAA,QACA,WAAWN,GAAU,CAAC;AAAA,MACxB;AAAA,MACA,YAAY;AAAA,QACV,WAAWA,GAAU,CAAC;AAAA,MACxB;AAAA,IACF;AAAA,EACA,EAAA;AAGK,SAAA;AAAA,IACL,IAHSpyB,GAAaD,GAAO,EAAE,QAAAsmC,KAAU,EAAE,QAAQ2F,EAAA,CAAiB;AAAA,EAGpE;AAEJ;ACpBO,SAASkE,KAAmB;AAoB1B,SAAA;AAAA,IACL,eApBoB,CAACphC,GAAqBqhC,OACnC;AAAA,MACL,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,WAAWrhC;AAAA,MACX,OAAO;AAAA,QACL,UAAUqhC,KAAY;AAAA,MACxB;AAAA,MACA,MAAML,GAAW;AAAA,MACjB,WAAWxxD,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAegvB;AAAAA,MACf,SAASG;AAAA,IAAA;AAAA,EAKX;AAEJ;;;;;;;;;;;;;;;ACRA,UAAM1gC,IAAQC,GAsBR4D,IAAOC,GAIP,EAAE,WAAA28B,MAAc3C,MAChB,EAAE,aAAAjM,MAAgB2P;AACpB,QAAA5gC,GAAOixB,EAAY,kBAAkB;AACjC,YAAA,IAAI,MAAM,iCAAiC;AAG7C,UAAA,EAAE,eAAAkoC,MAAkBoJ,MACpB7J,IAASrzD,EAAe8zD,EAAcloC,EAAY,kBAAkB,CAAC,GACrEkF,IAAS9wB,EAAI,EAAK,GAClB8J,IAAgB9J,EAAI,EAAK,GAEzByP,IAAU,MAAM;AAChB,UAAA9U,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAEnD,MAAAynC,EAAO,QAAQS,EAAcloC,EAAY,oBAAoB,EAAI,GAC1DynC,EAAA,MAAM,OAAOt5D,EAAM,cAC1B+2B,EAAO,QAAQ;AAAA,IAAA,GAGXvwB,IAAW,MAAM;AACrB,MAAAuwB,EAAO,QAAQ;AAAA,IAAA,GAIX,EAAE,IAAAxE,EAAG,IAAI2wC,GAAoB5J,GAAQt5D,EAAM,eAAe,GAC1D,EAAE,GAAAE,MAAMC,MACR,EAAE,qBAAA8O,GAAqB,eAAAC,GAAe,mBAAAkB,MAAsB/B,GAAU,GAEtEgC,IAAY,YAAY;AAC5B,UAAI,CAAAN,EAAc;AACd,YAAA;AAGE,cAFJA,EAAc,QAAQ,IACtBwiB,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,YAAAtjB,KACpBc,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,gBAAMO,IAAM,MAAM+oD,GAAa54B,GAAW64B,EAAO,KAAK;AACtD,UAAAz1D,EAAK,aAAayM,CAAG,GACrBpB,EAAc,SAAS,GACvB6nB,EAAO,QAAQ,IACX,CAACt2B,EAAY6P,EAAI,EAAE,KAAMtQ,EAAM;AAAA,iBAG5BgM,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAA+D,EAAc,QAAQ;AAAA,QACxB;AAAA,IAAA,GAGI,EAAE,mBAAAkzD,MAAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChF9B,UAAMhjE,IAAQC,GAyBR4D,IAAOC,GAIPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACzC;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAERwE,IAAmBtE,EAAS,MAAM,CAAC,CAACL,EAAM,QAAQ,GAElD,EAAE,YAAAwwB,MAAe21B,MAEjBnzB,IAAQ;AAAA,MACZ,oBAAoB;AAAA;AAAA,QAElB,UAAUxC,EAAW7rB,EAAiB,KAAK;AAAA,MAC7C;AAAA,IAAA,GAII4tB,IAAKU,GAAaD,GAAO,EAAE,oBAAAnuB,KAAsB,EAAE,QAAQ7E,EAAM,gBAAA,CAAiB,GAElF,EAAE,mBAAAqjE,MAAsBb,MAExB5uC,IAAckvC,MAEdQ,IAAY,OAAO3gC,MAAiC;AACxD,MAAKA,MACA99B,EAAmB,MAAM,SAAS89B,CAAE,MACpB99B,EAAA,QAAQ,CAAC,GAAGA,EAAmB,OAAW89B,CAAG;AAAA,IAClE,GAGI4gC,IAAmBt9D,EAAI,EAAE,GAEzBu9D,IAAe,CAACr/D,MAAqB;AACzC,MAAIA,EAAS,SAAS,MAAGo/D,EAAiB,QAAQp/D;AAAA,IAAA,GAG9C,EAAE,0BAAAs/D,MAA6BlK,MAE/BmK,IAAc,CAACpK,MAAsB;AAErC,UADJmK,EAAyBnK,CAAM,GAC3Bv4D,GAAQ8D,EAAmB,KAAK,GAAG;AACrC,QAAAA,EAAmB,QAAQ,CAAC,GAAGA,EAAmB,OAAOy0D,EAAO,EAAE;AAClE;AAAA,MACF;AACA,MAAAz0D,EAAmB,QAAQy0D,EAAO;AAAA,IAAA,GAG9BqK,IAAqB,CAACn/D,MACtBzD,GAAQ8D,EAAmB,KAAK,IAC3BA,EAAmB,MAAM,SAASL,CAAI,IACpCK,EAAmB,QACrBA,EAAmB,UAAUL,IAE/B;AAGT,WAAAgM,GAAU,MAAM;AAAA,IAAA,CAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICxGYozD,KAA0B,MAAM;AACrC,QAAA,EAAE,WAAAnjC,MAAc3C,MAChB,EAAE,aAAAjM,MAAgB2P,MAElBkhC,IAAmB,CAAC5J,OAAoD;AAAA,IAC5E,OAAOA,EAAQ;AAAA,IACf,OAAOA,EAAQ;AAAA,EAAA,IAGX2J,IAAe,CAAC3J,OAA4C;AAAA,IAChE,IAAIA,EAAQ;AAAA,IACZ,MAAMA,EAAQ;AAAA,EAAA,IAGV6J,IAAoB,CAACkB,MAClBA,EAAS,IAAI,CAAC/K,MAAwB4J,EAAiB5J,CAAO,CAAC,GAGlE+J,IAAgB,CAACgB,MACdA,EAAS,IAAI,CAAC/K,MAAwB2J,EAAa3J,CAAO,CAAC;AAwB7D,SAAA;AAAA,IACL,kBAAA4J;AAAA,IACA,YAvBiB,OAAO9uD,GAAwBH,MAAyB;AACrE,UAAA7S,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAE5C,aAAA8wC,EAAkB,MAAM/J,GAAiBn4B,GAAW5O,EAAY,oBAAoBje,GAAYH,CAAS,CAAC;AAAA,IAAA;AAAA,IAoBjH,iBAVsB,OAAOinB,MAAkB;AAC3C,UAAA95B,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAEnD,aAAO8wC,EAAkB,MAAMhK,GAAsBl4B,GAAW5O,EAAY,oBAAoB6I,CAAG,CAAC;AAAA,IAAA;AAAA,IAOpG,mBAlBwB,OAAO9mB,GAAwBH,MAAyB;AAC5E,UAAA7S,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAE5C,aAAAgxC,EAAc,MAAMjK,GAAiBn4B,GAAW5O,EAAY,oBAAoBje,GAAYH,CAAS,CAAC;AAAA,IAAA;AAAA,EAc7G;AAEJ,GCrDMynB,KAAahoB,GAAiBwtB,IAAiBH,EAAM;AAE5CjN,GAAS;AAAA,EACtB,UAAU;AAAA,IACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,EACjC;AAAA,EACA,IAAI;AAAA,IACF,GAAGA,GAAW,EAAE,MAAM,MAAM;AAAA,EAC9B;AAAA,EACA,MAAM;AAAA,IACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,EAChC;AAAA,EACA,UAAU;AAAA,IACR,GAAGA,GAAW,EAAE,MAAM,YAAY;AAAA,EACpC;AACF,CAAC;AAMM,SAAS4oC,KAAmB;AACjC,SAAOxwC,GAAS;AAAA,IACd,UAAU;AAAA,MACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,MACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,IAChC;AAAA,EAAA,CACD;AACH;;;;;;;;;;;;;AC1BA,UAAMl7B,IAAQC,GAoBR,EAAE,kBAAA8jE,MAAqB7K,MACvBhN,IAAoBC,MAEpBr2B,IAASC,GAAsD,MAAS,GACxEC,IAASD,GAAoB,EAAK,GAElCvxB,IAAOnE,EAAS,MACb0jE,EAAiB/jE,EAAM,EAAE,CACjC,GAEKsiE,IAAiBjiE,EAAS,MAAM;AACpC,UAAI,CAACL,EAAM;AAAgB;AAC3B,YAAMoxD,IAAQlF,EAAkB,SAASlsD,EAAM,OAAO;AAClD,UAAA,GAACoxD,KAAS,CAACt7B,EAAO,UAClBs7B,EAAM,YAAY,gBAAgB,IAAIt7B,EAAO,MAAM,IAAI;AAAU,eAAA;AAAA,IAC9D,CACR,GAEKI,IAAe71B,EAAS,MACxBL,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC81B,EAAO,QACFA,EAAO,MAAM,OAEf,EACR;AAED,WAAAxwB;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI6xB,EAAO,SACPv1B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD2xB,EAAO,QAAQ3xB,GACf6xB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1Db,SAASguC,KAAoB;AAkB3B,SAAA;AAAA,IACL,eAlBoB,CAACjiC,GAAqBqhC,OACnC;AAAA,MACL,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,WAAWrhC;AAAA,MACX,OAAO;AAAA,QACL,UAAUqhC,KAAY;AAAA,MACxB;AAAA,MACA,WAAW7xD,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAegvB;AAAAA,MACf,SAASG;AAAA,IAAA;AAAA,EAKX;AAEJ;ACnBA,MAAM,EAAA,UAAEilB,IAAUN,WAAAA,OAAcc;AAEhB,SAAA8d,GAAqBnL,GAA0BmG,IAAmC,QAAW;AACrG,QAAAjsC,IAAQ3yB,EAAS,OAAO;AAAA,IAC5B,SAAS;AAAA,MACP,MAAM;AAAA,QAAA,UACJslD;AAAAA,QACA,WAAWN,GAAU,CAAC;AAAA,MACxB;AAAA,IACF;AAAA,EACA,EAAA;AAGK,SAAA;AAAA,IACL,IAHSpyB,GAAaD,GAAO,EAAE,SAAA8lC,KAAW,EAAE,QAAQmG,EAAA,CAAiB;AAAA,EAGrE;AAEJ;;;;;;;;;;;;;;;ACJA,UAAMj/D,IAAQC,GAsBR4D,IAAOC,GAIP,EAAE,WAAA28B,MAAc3C,MAChB,EAAE,aAAAjM,MAAgB2P;AACpB,QAAA5gC,GAAOixB,EAAY,kBAAkB;AACjC,YAAA,IAAI,MAAM,iCAAiC;AAG7C,UAAA,EAAE,eAAAkoC,MAAkBiK,MACpBlL,IAAU7yD,EAAgB8zD,EAAcloC,EAAY,kBAAkB,CAAC,GACvEkF,IAAS9wB,EAAI,EAAK,GAClB8J,IAAgB9J,EAAI,EAAK,GAEzByP,IAAU,MAAM;AAChB,UAAA9U,GAAOixB,EAAY,kBAAkB;AACjC,cAAA,IAAI,MAAM,iCAAiC;AAEnD,MAAAinC,EAAQ,QAAQiB,EAAcloC,EAAY,oBAAoB,EAAI,GAC1DinC,EAAA,MAAM,OAAO94D,EAAM,cAC3B+2B,EAAO,QAAQ;AAAA,IAAA,GAGXvwB,IAAW,MAAM;AACrB,MAAAuwB,EAAO,QAAQ;AAAA,IAAA,GAIX,EAAE,IAAAxE,EAAG,IAAI0xC,GAAqBnL,GAAS94D,EAAM,eAAe,GAC5D,EAAE,GAAAE,MAAMC,MACR,EAAE,qBAAA8O,GAAqB,eAAAC,GAAe,mBAAAkB,MAAsB/B,GAAU,GAEtEgC,IAAY,YAAY;AAC5B,UAAI,CAAAN,EAAc;AACd,YAAA;AAGE,cAFJA,EAAc,QAAQ,IACtBwiB,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,YAAAtjB,KACpBc,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,gBAAMO,IAAM,MAAMuoD,GAAcp4B,GAAWq4B,EAAQ,KAAK;AACxD,UAAAj1D,EAAK,aAAayM,CAAG,GACrBpB,EAAc,SAAS,GACvB6nB,EAAO,QAAQ,IACX,CAACt2B,EAAY6P,EAAI,EAAE,KAAMtQ,EAAM;AAAA,iBAG5BgM,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAA+D,EAAc,QAAQ;AAAA,QACxB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/EF,UAAM/P,IAAQC,GAuBR4D,IAAOC,GAIPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACzC;AAAA,IAAA,CACD,GAEKQ,IAAmBtE,EAAS,MAAM,CAAC,CAACL,EAAM,QAAQ,GAElD,EAAE,YAAAwwB,MAAe21B,MAEjBnzB,IAAQ;AAAA,MACZ,oBAAoB;AAAA,QAClB,UAAUxC,EAAW7rB,CAAgB;AAAA,MACvC;AAAA,IAAA,GAII4tB,IAAKU,GAAaD,GAAO,EAAE,oBAAAnuB,KAAsB,EAAE,QAAQ7E,EAAM,gBAAA,CAAiB,GAElF,EAAE,mBAAAqjE,MAAsBO,MAExBhwC,IAAckwC,MAEdI,IAAoBj+D,EAAI,EAAE,GAE1Bu9D,IAAe,CAACr/D,MAAqB;AACzC,MAAIA,EAAS,SAAS,MAAG+/D,EAAkB,QAAQ//D;AAAA,IAAA,GAG/C,EAAE,2BAAAggE,MAA8BjL,MAEhCwK,IAAc,CAAC5K,MAAwB;AAEvC,UADJqL,EAA0BrL,CAAO,GAC7B/3D,GAAQ8D,EAAmB,KAAK,GAAG;AACrC,QAAAA,EAAmB,QAAQ,CAAC,GAAGA,EAAmB,OAAOi0D,EAAQ,EAAE;AACnE;AAAA,MACF;AACA,MAAAj0D,EAAmB,QAAQi0D,EAAQ;AAAA,IAAA,GAG/B6K,IAAqB,CAACn/D,MACtBzD,GAAQ8D,EAAmB,KAAK,IAC3BA,EAAmB,MAAM,SAASL,CAAI,IACpCK,EAAmB,QACrBA,EAAmB,UAAUL,IAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1EH,UAAA,EAAE,GAAAtE,MAAMC,MAERikE,IAASn+D,EAAI,CAAC,YAAY,MAAM,CAAC,GAEjCo+D,IAAmB/E,MACnB,EAAE,OAAA3iC,GAAO,iBAAA4iC,GAAiB,oBAAAC,EAAmB,IAAI17B,GAAYugC,CAAgB,GAE7E1oC,IAAYt7B,EAAS,MAAM;;AAC/B,eAAOgE,IAAAs4B,EAAM,UAAN,gBAAAt4B,EAAa,WAAW,cAAa22B,GAAa;AAAA,IAAA,CAC1D,GAEKspC,IAAcjkE,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GAEKupC,IAAgBlkE,EAA2B,MACxCs8B,EAAM,SAASA,EAAM,MAAM,WAAYA,EAAM,MAAM,WAAyB,IACpF,GAEK,EAAE,oBAAA0E,MAAuBG,MAEzBgjC,IAAsB,MAAM;AAChC,MAAAhF,EAAmB,QAAQ;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbvB,UAAA,EAAE,GAAAt/D,MAAMC,MAERkkE,IAAmB/E,MACnB,EAAE,OAAA3iC,GAAO,mBAAA+iC,EAAkB,IAAI57B,GAAYugC,CAAgB,GAC3DI,IAAmBtY,MAEnBuY,IAAoBz+D,EAAI,EAAK,GAE7B,EAAE,eAAAiJ,GAAe,qBAAAD,GAAqB,mBAAAmB,MAAsB/B,GAAU,GAEtEkkB,IAAKU,GAAa,CAAC,GAAG,CAAI,GAAA,EAAE,QAAQ2rC,GAAA,CAAwC,GAE5E,EAAE,WAAAn+B,MAAc3C,MAEhB6mC,IAAS,YAAY;AACrB,UAAA,CAAA/jE,GAAO+7B,EAAM,KAAK,GAGlB;AAAA,YAFJ+nC,EAAkB,QAAQ,IAC1BnyC,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,UAAAtjB,KACpBy1D,EAAkB,QAAQ;AAC1B;AAAA,QACF;AACI,YAAA;AACI,gBAAAhhC,GAAoBjD,GAAW9D,EAAM,KAAK,GAC5C+iC,EAAkB,SAAS,CAAC9+D,GAAO+7B,EAAM,KAAK,KAC1C,MAAA8nC,EAAiB,iBAAiB9nC,EAAM,KAAK,GAErDztB,EAAc,SAAS;AAAA,iBAChBlD,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAA04D,EAAkB,QAAQ;AAAA,QAC5B;AAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;IChDWE,KAAmBrpC,GAAY,oBAAoB;AAAA,EAC9D,OAAO,OAAc;AAAA,IACnB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,kBAAkB,KAAK,IAAI;AAAA,IAC3B,sBAAsB,KAAK,IAAI;AAAA,EAAA;AAAA,EAEjC,SAAS;AAAA,IACP,aAAaksB,GAA6B;AACxC,WAAK,YAAYA;AAAA,IACnB;AAAA,IACA,OAAOod,GAA8B;AACnC,WAAK,MAAMA;AAAA,IACb;AAAA,IACA,aAAa;AACX,WAAK,SAAS;AAAA,IAChB;AAAA,IACA,aAAa;AACX,WAAK,SAAS;AAAA,IAChB;AAAA,IACA,yBAAyB;AAClB,WAAA,uBAAuB,KAAK;IACnC;AAAA,IACA,qBAAqB;AACd,WAAA,mBAAmB,KAAK;IAC/B;AAAA,IACA,QAAQ;AACN,WAAK,YAAY,MACjB,KAAK,SAAS,IACd,KAAK,MAAM,MACN,KAAA,mBAAmB,KAAK,OACxB,KAAA,uBAAuB,KAAK;IACnC;AAAA,EACF;AACF,CAAC;;;;;;;;;;;ACvCD,UAAM7kE,IAAQC,GASR4D,IAAOC,GAIP,EAAE,eAAAoL,GAAe,mBAAAkB,EAAkB,IAAI/B,GAAU,GAEjD6mB,IAAUjvB,EAAI,EAAK,GAEnB,EAAE,WAAAw6B,MAAc3C,MAEhBgnC,IAAS,OAAOrZ,MAAoB;AACpC,UAAA;AACF,QAAAv2B,EAAQ,QAAQ,IAChB,MAAMs2B,GAAY/qB,GAAWzgC,EAAM,SAASyrD,CAAK,GACjDv8C,EAAc,SAAS,GACvBrL,EAAK,aAAa;AAAA,eACX8C,GAAG;AACV,QAAAyJ,EAAkBzJ,CAAC;AAAA,MAAA,UACnB;AACA,QAAAuuB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,GAEI,EAAE,GAAAh1B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvBRigC,KAAY,eACZ2kC,KAAsB,yBACfxkC,KAAS,SAETykC,KAAW,CAACxmC,GAA6BmE,MACpDpE,GAA8BC,GAAQ4B,KAAY,QAAQ,EAAE,IAAAuC,EAAA,GAAM,WAAWpC,EAAM,GAExE0kC,KAAY,CAACzmC,GAA6BmE,GAAWn1B,MAChEyvD,GAA+Bz+B,GAAQhxB,GAAM4yB,KAAY,QAAQ,EAAE,IAAAuC,EAAG,GAAG,WAAWpC,EAAM,GAE/E2kC,KAAoB,CAC/B1mC,GACAysB,GACAr3C,GACAH,MACGosB,GAAoBrB,GAAQumC,IAAqB,EAAE,IAAI9Z,EAAQ,GAAGr3C,GAAYH,GAAW,WAAW8sB,EAAM;;;;;;;;;;;;ACXzG,UAAA,EAAE,GAAArgC,MAAMC,MAERglE,IAAgBP,MAChBP,IAAmB/E,MAEnB1rD,IAAawf,MAEb,EAAE,WAAAqN,MAAc3C,MAEhBsnC,IAAW,YAAY;AAC3B,UAAID,EAAc,WAAW;AAC3B,QAAAA,EAAc,WAAW;AACnB,cAAA70D,IAAM,MAAM40D,GAAkBzkC,GAAW0kC,EAAc,UAAU,IAAIvxD,GAAY,CAAA,CAAE;AACzF,YAAItD,EAAI,SAAS,KAAKA,EAAI,CAAC,EAAE,IAAI;AAC/B,gBAAMu0D,IAAM,MAAMG,GAASvkC,GAAWnwB,EAAI,CAAC,EAAE,EAAE;AAC/C,UAAA60D,EAAc,OAAON,CAAG,GACxBM,EAAc,WAAW;AACzB;AAAA,QACF;AACA,QAAAA,EAAc,OAAO,IAAI,GACzBA,EAAc,WAAW;AACzB;AAAA,MACF;AACA,MAAAA,EAAc,OAAO,IAAI,GACzBA,EAAc,WAAW;AAAA,IAAA,GAGrBE,IAAc,YAAY;AAC9B,YAAMD,EAAS,GACfD,EAAc,uBAAuB,GACrCA,EAAc,mBAAmB;AAAA,IAAA;AAcnC,WAAA30D,GAAU,YAAY;AACpB,MAAA20D,EAAc,MAAM,GACpBA,EAAc,WAAW,GAEvBd,EAAiB,SACjBA,EAAiB,MAAM,YACvBza,GAAqBya,EAAiB,MAAM,QAAQ,MAEpDc,EAAc,aAAa1jE,GAAU4iE,EAAiB,MAAM,QAAQ,CAAC,GACrE,MAAMe,EAAS,IAEjBD,EAAc,WAAW;AAAA,IAAA,CAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxED,UAAM,EAAE,SAAAnD,GAAS,WAAAC,EAAU,IAAIF,GAA+B;AAE9D,WAAAvxD,GAAU,YAAY;AACpB,YAAMif,GAAS,GACPuyC;IAAA,CACT,GAEDtoC,GAAgB,MAAM;AACV,MAAAuoC;IAAA,CACX;;;;;;;;;;;;;;;;;;;;;;;ACsBK,UAAA,EAAE,GAAA/hE,MAAMC,MAERkkE,IAAmB/E,MACnB,EAAE,WAAAG,EAAA,IAAc37B,GAAYugC,CAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IClC5CiB,KAAY,GAELC,KAAe,SAC1BC,GACAC,GACAC,GACAC,GACA;AACM,QAAAC,IAAYJ,EAAQ,gBACpBK,IAAQD,EAAU,gBAAgBD;AAEjC,SAAA;AAAA,IACL,GAAGF,EAAiB,SAASI;AAAA,IAC7B,GAAGJ,EAAiB,SAASI;AAAA,IAC7B,OAAOJ,EAAiB,kBAAkBG,EAAU;AAAA,IACpD,QAAQH,EAAiB,mBAAmBG,EAAU;AAAA,IACtD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAEZ,GAEaE,KAAe,SAC1BN,GACAC,GACAC,GACAC,GACA;AACM,QAAAC,IAAYJ,EAAQ,gBACpBh4D,IAAOg4D,EAAQ,WACfK,IAAQD,EAAU,gBAAgBD;AAExC,MAAII,IAAShkE,IAAayL,EAAK,IAAIq4D,GAAO,QAAQP,EAAS,CAAC;AAC5D,EAAIS,IAAS,MAAYA,IAAA;AAEzB,MAAIC,IAASjkE,IAAayL,EAAK,IAAIq4D,GAAO,QAAQP,EAAS,CAAC;AAC5D,EAAIU,IAAS,MAAYA,IAAA;AAErB,MAAAC,IAAkB/jE,IAAesL,EAAK,QAAQo4D,EAAU,cAAc,QAAQN,EAAS,CAAC;AACtF,QAAAY,IAAgBD,IAAkBP,IAAqBK;AAC7D,EAAIG,IAAgBR,MACAO,IAAAA,KAAoBC,IAAgBR,KAAsB,MAAOA;AAGjF,MAAAS,IAAmBjkE,IAAesL,EAAK,SAASo4D,EAAU,eAAe,QAAQN,EAAS,CAAC;AACzF,QAAAc,IAAiBD,IAAmBR,IAAsBK;AAChE,SAAII,IAAiBT,MACAQ,IAAAA,KAAqBC,IAAiBT,KAAuB,MAAOA,IAGzFF,EAAiB,SAASM,GAC1BN,EAAiB,SAASO,GAC1BP,EAAiB,kBAAkBQ,GACnCR,EAAiB,mBAAmBU,GAE7BV;AACT;AC5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,SAAS7+B,GAAQjgC,GAAGiK,GAAG;AACrB,MAAI1Q,IAAI,OAAO,KAAKyG,CAAC;AACrB,MAAI,OAAO,uBAAuB;AAChC,QAAID,IAAI,OAAO,sBAAsBC,CAAC;AACtC,IAAAiK,MAAMlK,IAAIA,EAAE,OAAO,SAAU,GAAG;AAC9B,aAAO,OAAO,yBAAyBC,GAAG,CAAC,EAAE;AAAA,IACnD,CAAK,IAAIzG,EAAE,KAAK,MAAMA,GAAGwG,CAAC;AAAA,EACvB;AACD,SAAOxG;AACT;AACA,SAAS+mC,GAAetgC,GAAG;AACzB,WAASiK,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AACzC,QAAI1Q,IAAY,UAAU0Q,CAAC,KAAnB,OAAuB,UAAUA,CAAC,IAAI;AAC9C,IAAAA,IAAI,IAAIg2B,GAAQ,OAAO1mC,CAAC,GAAG,EAAE,EAAE,QAAQ,SAAU0Q,GAAG;AAClD,MAAAs2B,GAAgBvgC,GAAGiK,GAAG1Q,EAAE0Q,CAAC,CAAC;AAAA,IAChC,CAAK,IAAI,OAAO,4BAA4B,OAAO,iBAAiBjK,GAAG,OAAO,0BAA0BzG,CAAC,CAAC,IAAI0mC,GAAQ,OAAO1mC,CAAC,CAAC,EAAE,QAAQ,SAAU0Q,GAAG;AAChJ,aAAO,eAAejK,GAAGiK,GAAG,OAAO,yBAAyB1Q,GAAG0Q,CAAC,CAAC;AAAA,IACvE,CAAK;AAAA,EACF;AACD,SAAOjK;AACT;AACA,SAASwgC,GAAQzgC,GAAG;AAClB;AAEA,SAAOygC,KAAwB,OAAO,UAArB,cAA2C,OAAO,OAAO,YAA1B,WAAqC,SAAUzgC,GAAG;AAChG,WAAO,OAAOA;AAAA,EACf,IAAG,SAAUA,GAAG;AACf,WAAOA,KAAmB,OAAO,UAArB,cAA+BA,EAAE,gBAAgB,UAAUA,MAAM,OAAO,YAAY,WAAW,OAAOA;AAAA,EACtH,GAAKygC,GAAQzgC,CAAC;AACd;AACA,SAASgmD,GAAgBC,GAAUC,GAAa;AAC9C,MAAI,EAAED,aAAoBC;AACxB,UAAM,IAAI,UAAU,mCAAmC;AAE3D;AACA,SAASyZ,GAAkBnoD,GAAQle,GAAO;AACxC,WAAS4G,IAAI,GAAGA,IAAI5G,EAAM,QAAQ4G,KAAK;AACrC,QAAI6sD,IAAazzD,EAAM4G,CAAC;AACxB,IAAA6sD,EAAW,aAAaA,EAAW,cAAc,IACjDA,EAAW,eAAe,IACtB,WAAWA,MAAYA,EAAW,WAAW,KACjD,OAAO,eAAev1C,GAAQooD,GAAe7S,EAAW,GAAG,GAAGA,CAAU;AAAA,EACzE;AACH;AACA,SAASF,GAAa3G,GAAa8G,GAAYC,GAAa;AAC1D,SAAID,KAAY2S,GAAkBzZ,EAAY,WAAW8G,CAAU,GAC/DC,KAAa0S,GAAkBzZ,GAAa+G,CAAW,GAC3D,OAAO,eAAe/G,GAAa,aAAa;AAAA,IAC9C,UAAU;AAAA,EACd,CAAG,GACMA;AACT;AACA,SAAS1lB,GAAgBtwB,GAAK7T,GAAKrC,GAAO;AACxC,SAAAqC,IAAMujE,GAAevjE,CAAG,GACpBA,KAAO6T,IACT,OAAO,eAAeA,GAAK7T,GAAK;AAAA,IAC9B,OAAOrC;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EAChB,CAAK,IAEDkW,EAAI7T,CAAG,IAAIrC,GAENkW;AACT;AACA,SAAS2vD,GAAmBrqD,GAAK;AAC/B,SAAOsqD,GAAmBtqD,CAAG,KAAKuqD,GAAiBvqD,CAAG,KAAKwqD,GAA4BxqD,CAAG,KAAKyqD;AACjG;AACA,SAASH,GAAmBtqD,GAAK;AAC/B,MAAI,MAAM,QAAQA,CAAG;AAAG,WAAO0qD,GAAkB1qD,CAAG;AACtD;AACA,SAASuqD,GAAiBI,GAAM;AAC9B,MAAI,OAAO,SAAW,OAAeA,EAAK,OAAO,QAAQ,KAAK,QAAQA,EAAK,YAAY,KAAK;AAAM,WAAO,MAAM,KAAKA,CAAI;AAC1H;AACA,SAASH,GAA4BhgE,GAAGogE,GAAQ;AAC9C,MAAKpgE,GACL;AAAA,QAAI,OAAOA,KAAM;AAAU,aAAOkgE,GAAkBlgE,GAAGogE,CAAM;AAC7D,QAAI//D,IAAI,OAAO,UAAU,SAAS,KAAKL,CAAC,EAAE,MAAM,GAAG,EAAE;AAErD,QADIK,MAAM,YAAYL,EAAE,gBAAaK,IAAIL,EAAE,YAAY,OACnDK,MAAM,SAASA,MAAM;AAAO,aAAO,MAAM,KAAKL,CAAC;AACnD,QAAIK,MAAM,eAAe,2CAA2C,KAAKA,CAAC;AAAG,aAAO6/D,GAAkBlgE,GAAGogE,CAAM;AAAA;AACjH;AACA,SAASF,GAAkB1qD,GAAKixC,GAAK;AACnC,GAAIA,KAAO,QAAQA,IAAMjxC,EAAI,YAAQixC,IAAMjxC,EAAI;AAC/C,WAAStV,IAAI,GAAGmgE,IAAO,IAAI,MAAM5Z,CAAG,GAAGvmD,IAAIumD,GAAKvmD;AAAK,IAAAmgE,EAAKngE,CAAC,IAAIsV,EAAItV,CAAC;AACpE,SAAOmgE;AACT;AACA,SAASJ,KAAqB;AAC5B,QAAM,IAAI,UAAU;AAAA,mFAAsI;AAC5J;AACA,SAASK,GAAarjD,GAAOsjD,GAAM;AACjC,MAAI,OAAOtjD,KAAU,YAAYA,MAAU;AAAM,WAAOA;AACxD,MAAIujD,IAAOvjD,EAAM,OAAO,WAAW;AACnC,MAAIujD,MAAS,QAAW;AACtB,QAAI52D,IAAM42D,EAAK,KAAKvjD,GAAOsjD,KAAQ,SAAS;AAC5C,QAAI,OAAO32D,KAAQ;AAAU,aAAOA;AACpC,UAAM,IAAI,UAAU,8CAA8C;AAAA,EACnE;AACD,UAAQ22D,MAAS,WAAW,SAAS,QAAQtjD,CAAK;AACpD;AACA,SAAS2iD,GAAetO,GAAK;AAC3B,MAAIj1D,IAAMikE,GAAahP,GAAK,QAAQ;AACpC,SAAO,OAAOj1D,KAAQ,WAAWA,IAAM,OAAOA,CAAG;AACnD;AAEA,IAAIokE,KAAa,OAAO,SAAW,OAAe,OAAO,OAAO,WAAa,KACzEC,KAASD,KAAa,SAAS,IAC/BE,KAAkBF,MAAcC,GAAO,SAAS,kBAAkB,kBAAkBA,GAAO,SAAS,kBAAkB,IACtHE,KAAoBH,KAAa,kBAAkBC,KAAS,IAC5DG,KAAY,WAGZC,KAAa,OACbC,KAAc,QACdC,KAAc,QACdC,KAAc,QACdC,KAAc,KACdC,KAAc,KACdC,KAAe,KACfC,KAAe,KACfC,KAAoB,MACpBC,KAAoB,MACpBC,KAAoB,MACpBC,KAAoB,MAGpBC,KAAa,GAAG,OAAOb,IAAW,OAAO,GACzCc,KAAiB,GAAG,OAAOd,IAAW,WAAW,GACjDe,KAAe,GAAG,OAAOf,IAAW,SAAS,GAC7CgB,KAAa,GAAG,OAAOhB,IAAW,OAAO,GACzCiB,KAAkB,GAAG,OAAOjB,IAAW,YAAY,GACnDkB,KAAc,GAAG,OAAOlB,IAAW,QAAQ,GAC3CmB,KAAa,GAAG,OAAOnB,IAAW,OAAO,GAGzCoB,KAAc,GAAG,OAAOpB,IAAW,QAAQ,GAC3CqB,KAAe,GAAG,OAAOrB,IAAW,SAAS,GAG7CsB,KAAiB,QACjBC,KAAiB,QACjBC,KAAiB,QAGjBC,KAAa,QACbC,KAAiB,WACjBC,KAAkB,YAClBC,KAAmB,aACnBC,KAAiB,YACjBC,KAAoBhC,KAAkB,eAAe,aACrDiC,KAAmBjC,KAAkB,cAAc,aACnDkC,KAAkBlC,KAAkB,yBAAyB,WAC7DmC,KAAqBlC,KAAoB,gBAAgB+B,IACzDI,KAAqBnC,KAAoB,gBAAgBgC,IACzDI,KAAmBpC,KAAoB,4BAA4BiC,IACnEI,KAAc,SACdC,KAAe,UACfC,KAAc,SACdC,KAAa,QAGbC,KAAiB,cAGjBC,KAAiB,4CACjBC,KAAkB,UAClBC,KAAuB,6BACvBC,KAAkB,iBAIlBC,KAAsB,KACtBC,KAAuB,KAEvBC,KAAW;AAAA;AAAA,EAEb,UAAU;AAAA;AAAA;AAAA,EAIV,UAAUzB;AAAA;AAAA;AAAA,EAIV,oBAAoB;AAAA;AAAA,EAEpB,aAAa;AAAA;AAAA,EAEb,MAAM;AAAA;AAAA,EAEN,SAAS;AAAA;AAAA,EAET,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,kBAAkB;AAAA;AAAA,EAElB,kBAAkB;AAAA;AAAA,EAElB,OAAO;AAAA;AAAA,EAEP,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,WAAW;AAAA;AAAA,EAEX,YAAY;AAAA;AAAA,EAEZ,UAAU;AAAA;AAAA,EAEV,cAAc;AAAA;AAAA,EAEd,SAAS;AAAA;AAAA,EAET,WAAW;AAAA;AAAA,EAEX,UAAU;AAAA;AAAA,EAEV,UAAU;AAAA;AAAA,EAEV,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,gBAAgB;AAAA;AAAA,EAEhB,gBAAgB;AAAA;AAAA,EAEhB,kBAAkB;AAAA;AAAA,EAElB,0BAA0B;AAAA;AAAA,EAE1B,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,mBAAmBuB;AAAA,EACnB,oBAAoBC;AAAA;AAAA,EAEpB,OAAO;AAAA,EACP,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR,GAEIE,KAAW,qrCAKXC,KAAQ,OAAO,SAASpD,GAAO;AAOnC,SAASvmE,GAASH,GAAO;AACvB,SAAO,OAAOA,KAAU,YAAY,CAAC8pE,GAAM9pE,CAAK;AAClD;AAOA,IAAI+pE,KAAmB,SAA0B/pE,GAAO;AACtD,SAAOA,IAAQ,KAAKA,IAAQ;AAC9B;AAOA,SAASD,GAAYC,GAAO;AAC1B,SAAO,OAAOA,IAAU;AAC1B;AAOA,SAASW,GAASX,GAAO;AACvB,SAAOymC,GAAQzmC,CAAK,MAAM,YAAYA,MAAU;AAClD;AACA,IAAIgqE,KAAiB,OAAO,UAAU;AAOtC,SAASC,GAAcjqE,GAAO;AAC5B,MAAI,CAACW,GAASX,CAAK;AACjB,WAAO;AAET,MAAI;AACF,QAAIkqE,IAAelqE,EAAM,aACrBmqE,IAAYD,EAAa;AAC7B,WAAOA,KAAgBC,KAAaH,GAAe,KAAKG,GAAW,eAAe;AAAA,EACnF,QAAe;AACd,WAAO;AAAA,EACR;AACH;AAOA,SAAS7pE,GAAWN,GAAO;AACzB,SAAO,OAAOA,KAAU;AAC1B;AACA,IAAIoqE,KAAQ,MAAM,UAAU;AAO5B,SAASC,GAAQrqE,GAAO;AACtB,SAAO,MAAM,OAAO,MAAM,KAAKA,CAAK,IAAIoqE,GAAM,KAAKpqE,CAAK;AAC1D;AAQA,SAASsqE,GAAQx9D,GAAMqG,GAAU;AAC/B,SAAIrG,KAAQxM,GAAW6S,CAAQ,MACzB,MAAM,QAAQrG,CAAI,KAAK3M,GAAS2M,EAAK,MAAM,IAC7Cu9D,GAAQv9D,CAAI,EAAE,QAAQ,SAAU9M,GAAOqC,GAAK;AAC1C,IAAA8Q,EAAS,KAAKrG,GAAM9M,GAAOqC,GAAKyK,CAAI;AAAA,EAC5C,CAAO,IACQnM,GAASmM,CAAI,KACtB,OAAO,KAAKA,CAAI,EAAE,QAAQ,SAAUzK,GAAK;AACvC,IAAA8Q,EAAS,KAAKrG,GAAMA,EAAKzK,CAAG,GAAGA,GAAKyK,CAAI;AAAA,EAChD,CAAO,IAGEA;AACT;AAQA,IAAIy9D,KAAS,OAAO,UAAU,SAAgB/sD,GAAQ;AACpD,WAASo7B,IAAO,UAAU,QAAQlgC,IAAO,IAAI,MAAMkgC,IAAO,IAAIA,IAAO,IAAI,CAAC,GAAGC,IAAO,GAAGA,IAAOD,GAAMC;AAClG,IAAAngC,EAAKmgC,IAAO,CAAC,IAAI,UAAUA,CAAI;AAEjC,SAAIl4C,GAAS6c,CAAM,KAAK9E,EAAK,SAAS,KACpCA,EAAK,QAAQ,SAAU4+C,GAAK;AAC1B,IAAI32D,GAAS22D,CAAG,KACd,OAAO,KAAKA,CAAG,EAAE,QAAQ,SAAUj1D,GAAK;AACtC,MAAAmb,EAAOnb,CAAG,IAAIi1D,EAAIj1D,CAAG;AAAA,IAC/B,CAAS;AAAA,EAET,CAAK,GAEImb;AACT,GACIgtD,KAAkB;AAStB,SAASC,GAAuBzqE,GAAO;AACrC,MAAI0qE,IAAQ,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAChF,SAAOF,GAAgB,KAAKxqE,CAAK,IAAI,KAAK,MAAMA,IAAQ0qE,CAAK,IAAIA,IAAQ1qE;AAC3E;AACA,IAAI2qE,KAAgB;AAOpB,SAASC,GAAS1sD,GAAS2sD,GAAQ;AACjC,MAAI3+C,IAAQhO,EAAQ;AACpB,EAAAosD,GAAQO,GAAQ,SAAU7qE,GAAO+rD,GAAU;AACzC,IAAI4e,GAAc,KAAK5e,CAAQ,KAAK5rD,GAASH,CAAK,MAChDA,IAAQ,GAAG,OAAOA,GAAO,IAAI,IAE/BksB,EAAM6/B,CAAQ,IAAI/rD;AAAA,EACtB,CAAG;AACH;AAQA,SAAS8qE,GAAS5sD,GAASle,GAAO;AAChC,SAAOke,EAAQ,YAAYA,EAAQ,UAAU,SAASle,CAAK,IAAIke,EAAQ,UAAU,QAAQle,CAAK,IAAI;AACpG;AAOA,SAAS+qE,GAAS7sD,GAASle,GAAO;AAChC,MAAKA,GAGL;AAAA,QAAIG,GAAS+d,EAAQ,MAAM,GAAG;AAC5B,MAAAosD,GAAQpsD,GAAS,SAAUrF,GAAM;AAC/B,QAAAkyD,GAASlyD,GAAM7Y,CAAK;AAAA,MAC1B,CAAK;AACD;AAAA,IACD;AACD,QAAIke,EAAQ,WAAW;AACrB,MAAAA,EAAQ,UAAU,IAAIle,CAAK;AAC3B;AAAA,IACD;AACD,QAAI8Y,IAAYoF,EAAQ,UAAU,KAAI;AACtC,IAAKpF,IAEMA,EAAU,QAAQ9Y,CAAK,IAAI,MACpCke,EAAQ,YAAY,GAAG,OAAOpF,GAAW,GAAG,EAAE,OAAO9Y,CAAK,KAF1Dke,EAAQ,YAAYle;AAAA;AAIxB;AAOA,SAASgrE,GAAY9sD,GAASle,GAAO;AACnC,MAAKA,GAGL;AAAA,QAAIG,GAAS+d,EAAQ,MAAM,GAAG;AAC5B,MAAAosD,GAAQpsD,GAAS,SAAUrF,GAAM;AAC/B,QAAAmyD,GAAYnyD,GAAM7Y,CAAK;AAAA,MAC7B,CAAK;AACD;AAAA,IACD;AACD,QAAIke,EAAQ,WAAW;AACrB,MAAAA,EAAQ,UAAU,OAAOle,CAAK;AAC9B;AAAA,IACD;AACD,IAAIke,EAAQ,UAAU,QAAQle,CAAK,KAAK,MACtCke,EAAQ,YAAYA,EAAQ,UAAU,QAAQle,GAAO,EAAE;AAAA;AAE3D;AAQA,SAAS4Y,GAAYsF,GAASle,GAAOirE,GAAO;AAC1C,MAAKjrE,GAGL;AAAA,QAAIG,GAAS+d,EAAQ,MAAM,GAAG;AAC5B,MAAAosD,GAAQpsD,GAAS,SAAUrF,GAAM;AAC/B,QAAAD,GAAYC,GAAM7Y,GAAOirE,CAAK;AAAA,MACpC,CAAK;AACD;AAAA,IACD;AAGD,IAAIA,IACFF,GAAS7sD,GAASle,CAAK,IAEvBgrE,GAAY9sD,GAASle,CAAK;AAAA;AAE9B;AACA,IAAIkrE,KAAoB;AAOxB,SAASC,GAAYnrE,GAAO;AAC1B,SAAOA,EAAM,QAAQkrE,IAAmB,OAAO,EAAE,YAAW;AAC9D;AAQA,SAASE,GAAQltD,GAASxb,GAAM;AAC9B,SAAI/B,GAASud,EAAQxb,CAAI,CAAC,IACjBwb,EAAQxb,CAAI,IAEjBwb,EAAQ,UACHA,EAAQ,QAAQxb,CAAI,IAEtBwb,EAAQ,aAAa,QAAQ,OAAOitD,GAAYzoE,CAAI,CAAC,CAAC;AAC/D;AAQA,SAAS2oE,GAAQntD,GAASxb,GAAMoK,GAAM;AACpC,EAAInM,GAASmM,CAAI,IACfoR,EAAQxb,CAAI,IAAIoK,IACPoR,EAAQ,UACjBA,EAAQ,QAAQxb,CAAI,IAAIoK,IAExBoR,EAAQ,aAAa,QAAQ,OAAOitD,GAAYzoE,CAAI,CAAC,GAAGoK,CAAI;AAEhE;AAOA,SAASw+D,GAAWptD,GAASxb,GAAM;AACjC,MAAI/B,GAASud,EAAQxb,CAAI,CAAC;AACxB,QAAI;AACF,aAAOwb,EAAQxb,CAAI;AAAA,IACpB,QAAe;AACd,MAAAwb,EAAQxb,CAAI,IAAI;AAAA,IACjB;AAAA,WACQwb,EAAQ;AAEjB,QAAI;AACF,aAAOA,EAAQ,QAAQxb,CAAI;AAAA,IAC5B,QAAe;AACd,MAAAwb,EAAQ,QAAQxb,CAAI,IAAI;AAAA,IACzB;AAAA;AAED,IAAAwb,EAAQ,gBAAgB,QAAQ,OAAOitD,GAAYzoE,CAAI,CAAC,CAAC;AAE7D;AACA,IAAI6oE,KAAgB,SAChBC,KAAgB,WAAY;AAC9B,MAAIC,IAAY;AAChB,MAAIhF,IAAY;AACd,QAAIiF,IAAO,IACPC,IAAW,WAAoB;AAAA,OAC/B/lE,IAAU,OAAO,eAAe,CAAA,GAAI,QAAQ;AAAA,MAC9C,KAAK,WAAe;AAClB,eAAA6lE,IAAY,IACLC;AAAA,MACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,KAAK,SAAa1rE,GAAO;AACvB,QAAA0rE,IAAO1rE;AAAA,MACR;AAAA,IACP,CAAK;AACD,IAAA0mE,GAAO,iBAAiB,QAAQiF,GAAU/lE,CAAO,GACjD8gE,GAAO,oBAAoB,QAAQiF,GAAU/lE,CAAO;AAAA,EACrD;AACD,SAAO6lE;AACT;AASA,SAASG,GAAe1tD,GAASsL,GAAMmiD,GAAU;AAC/C,MAAI/lE,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC9E+b,IAAUgqD;AACd,EAAAniD,EAAK,KAAI,EAAG,MAAM+hD,EAAa,EAAE,QAAQ,SAAUx2D,GAAO;AACxD,QAAI,CAACy2D,IAAe;AAClB,UAAIK,IAAY3tD,EAAQ;AACxB,MAAI2tD,KAAaA,EAAU92D,CAAK,KAAK82D,EAAU92D,CAAK,EAAE42D,CAAQ,MAC5DhqD,IAAUkqD,EAAU92D,CAAK,EAAE42D,CAAQ,GACnC,OAAOE,EAAU92D,CAAK,EAAE42D,CAAQ,GAC5B,OAAO,KAAKE,EAAU92D,CAAK,CAAC,EAAE,WAAW,KAC3C,OAAO82D,EAAU92D,CAAK,GAEpB,OAAO,KAAK82D,CAAS,EAAE,WAAW,KACpC,OAAO3tD,EAAQ;AAAA,IAGpB;AACD,IAAAA,EAAQ,oBAAoBnJ,GAAO4M,GAAS/b,CAAO;AAAA,EACvD,CAAG;AACH;AASA,SAASkmE,GAAY5tD,GAASsL,GAAMmiD,GAAU;AAC5C,MAAI/lE,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC9EmmE,IAAWJ;AACf,EAAAniD,EAAK,KAAI,EAAG,MAAM+hD,EAAa,EAAE,QAAQ,SAAUx2D,GAAO;AACxD,QAAInP,EAAQ,QAAQ,CAAC4lE,IAAe;AAClC,UAAIQ,IAAqB9tD,EAAQ,WAC/B2tD,IAAYG,MAAuB,SAAS,CAAA,IAAKA;AACnD,MAAAD,IAAW,WAAmB;AAC5B,eAAOF,EAAU92D,CAAK,EAAE42D,CAAQ,GAChCztD,EAAQ,oBAAoBnJ,GAAOg3D,GAAUnmE,CAAO;AACpD,iBAASqmE,IAAQ,UAAU,QAAQvzD,IAAO,IAAI,MAAMuzD,CAAK,GAAGC,IAAQ,GAAGA,IAAQD,GAAOC;AACpF,UAAAxzD,EAAKwzD,CAAK,IAAI,UAAUA,CAAK;AAE/B,QAAAP,EAAS,MAAMztD,GAASxF,CAAI;AAAA,MACpC,GACWmzD,EAAU92D,CAAK,MAClB82D,EAAU92D,CAAK,IAAI,KAEjB82D,EAAU92D,CAAK,EAAE42D,CAAQ,KAC3BztD,EAAQ,oBAAoBnJ,GAAO82D,EAAU92D,CAAK,EAAE42D,CAAQ,GAAG/lE,CAAO,GAExEimE,EAAU92D,CAAK,EAAE42D,CAAQ,IAAII,GAC7B7tD,EAAQ,YAAY2tD;AAAA,IACrB;AACD,IAAA3tD,EAAQ,iBAAiBnJ,GAAOg3D,GAAUnmE,CAAO;AAAA,EACrD,CAAG;AACH;AASA,SAASwoC,GAAclwB,GAASsL,GAAM1c,GAAM;AAC1C,MAAIiI;AAGJ,SAAIzU,GAAW,KAAK,KAAKA,GAAW,WAAW,IAC7CyU,IAAQ,IAAI,YAAYyU,GAAM;AAAA,IAC5B,QAAQ1c;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,EAClB,CAAK,KAEDiI,IAAQ,SAAS,YAAY,aAAa,GAC1CA,EAAM,gBAAgByU,GAAM,IAAM,IAAM1c,CAAI,IAEvCoR,EAAQ,cAAcnJ,CAAK;AACpC;AAOA,SAASo3D,GAAUjuD,GAAS;AAC1B,MAAIkuD,IAAMluD,EAAQ;AAClB,SAAO;AAAA,IACL,MAAMkuD,EAAI,QAAQ,OAAO,cAAc,SAAS,gBAAgB;AAAA,IAChE,KAAKA,EAAI,OAAO,OAAO,cAAc,SAAS,gBAAgB;AAAA,EAClE;AACA;AACA,IAAIC,KAAW3F,GAAO,UAClB4F,KAAiB;AAOrB,SAASC,GAAiB/mB,GAAK;AAC7B,MAAIgnB,IAAQhnB,EAAI,MAAM8mB,EAAc;AACpC,SAAOE,MAAU,SAASA,EAAM,CAAC,MAAMH,GAAS,YAAYG,EAAM,CAAC,MAAMH,GAAS,YAAYG,EAAM,CAAC,MAAMH,GAAS;AACtH;AAOA,SAASI,GAAajnB,GAAK;AACzB,MAAIr8B,IAAY,aAAa,QAAO,oBAAI,KAAM,GAAC,QAAO,CAAE;AACxD,SAAOq8B,KAAOA,EAAI,QAAQ,GAAG,MAAM,KAAK,MAAM,OAAOr8B;AACvD;AAOA,SAASujD,GAAcr+B,GAAM;AAC3B,MAAI+1B,IAAS/1B,EAAK,QAChB3E,IAAS2E,EAAK,QACd1E,IAAS0E,EAAK,QACdd,IAAac,EAAK,YAClBb,IAAaa,EAAK,YAChBrhC,IAAS,CAAA;AACb,EAAI7M,GAASotC,CAAU,KAAKA,MAAe,KACzCvgC,EAAO,KAAK,cAAc,OAAOugC,GAAY,KAAK,CAAC,GAEjDptC,GAASqtC,CAAU,KAAKA,MAAe,KACzCxgC,EAAO,KAAK,cAAc,OAAOwgC,GAAY,KAAK,CAAC,GAIjDrtC,GAASikE,CAAM,KAAKA,MAAW,KACjCp3D,EAAO,KAAK,UAAU,OAAOo3D,GAAQ,MAAM,CAAC,GAE1CjkE,GAASupC,CAAM,KAAKA,MAAW,KACjC18B,EAAO,KAAK,UAAU,OAAO08B,GAAQ,GAAG,CAAC,GAEvCvpC,GAASwpC,CAAM,KAAKA,MAAW,KACjC38B,EAAO,KAAK,UAAU,OAAO28B,GAAQ,GAAG,CAAC;AAE3C,MAAInB,IAAYx7B,EAAO,SAASA,EAAO,KAAK,GAAG,IAAI;AACnD,SAAO;AAAA,IACL,iBAAiBw7B;AAAA,IACjB,aAAaA;AAAA,IACb,WAAWA;AAAA,EACf;AACA;AAOA,SAASmkC,GAAgBC,GAAU;AACjC,MAAIC,IAAYtmC,GAAe,CAAE,GAAEqmC,CAAQ,GACvCE,IAAW;AACf,SAAAxC,GAAQsC,GAAU,SAAUG,GAASC,GAAW;AAC9C,WAAOH,EAAUG,CAAS,GAC1B1C,GAAQuC,GAAW,SAAUI,GAAU;AACrC,UAAIC,IAAK,KAAK,IAAIH,EAAQ,SAASE,EAAS,MAAM,GAC9CE,IAAK,KAAK,IAAIJ,EAAQ,SAASE,EAAS,MAAM,GAC9CG,IAAK,KAAK,IAAIL,EAAQ,OAAOE,EAAS,IAAI,GAC1CI,IAAK,KAAK,IAAIN,EAAQ,OAAOE,EAAS,IAAI,GAC1CK,IAAK,KAAK,KAAKJ,IAAKA,IAAKC,IAAKA,CAAE,GAChCI,IAAK,KAAK,KAAKH,IAAKA,IAAKC,IAAKA,CAAE,GAChClI,KAASoI,IAAKD,KAAMA;AACxB,MAAI,KAAK,IAAInI,CAAK,IAAI,KAAK,IAAI2H,CAAQ,MACrCA,IAAW3H;AAAA,IAEnB,CAAK;AAAA,EACL,CAAG,GACM2H;AACT;AAQA,SAASU,GAAWh0B,GAAOi0B,GAAS;AAClC,MAAIC,IAAQl0B,EAAM,OAChBm0B,IAAQn0B,EAAM,OACZo0B,IAAM;AAAA,IACR,MAAMF;AAAA,IACN,MAAMC;AAAA,EACV;AACE,SAAOF,IAAUG,IAAMrnC,GAAe;AAAA,IACpC,QAAQmnC;AAAA,IACR,QAAQC;AAAA,EACT,GAAEC,CAAG;AACR;AAOA,SAASC,GAAkBjB,GAAU;AACnC,MAAIc,IAAQ,GACRC,IAAQ,GACR75C,IAAQ;AACZ,SAAAw2C,GAAQsC,GAAU,SAAUvxB,GAAO;AACjC,QAAIyyB,IAASzyB,EAAM,QACjB0yB,IAAS1yB,EAAM;AACjB,IAAAqyB,KAASI,GACTH,KAASI,GACTj6C,KAAS;AAAA,EACb,CAAG,GACD45C,KAAS55C,GACT65C,KAAS75C,GACF;AAAA,IACL,OAAO45C;AAAA,IACP,OAAOC;AAAA,EACX;AACA;AAQA,SAASK,GAAiBzyB,GAAO;AAC/B,MAAI0yB,IAAc1yB,EAAM,aACtBjS,IAASiS,EAAM,QACfhS,IAAQgS,EAAM,OACZ/xB,IAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,WAC3E0kD,IAAenE,GAAiBxgC,CAAK,GACrC4kC,IAAgBpE,GAAiBzgC,CAAM;AAC3C,MAAI4kC,KAAgBC,GAAe;AACjC,QAAIC,IAAgB9kC,IAAS2kC;AAC7B,IAAIzkD,MAAS,aAAa4kD,IAAgB7kC,KAAS/f,MAAS,WAAW4kD,IAAgB7kC,IACrFD,IAASC,IAAQ0kC,IAEjB1kC,IAAQD,IAAS2kC;AAAA,EAEpB;AAAM,IAAIC,IACT5kC,IAASC,IAAQ0kC,IACRE,MACT5kC,IAAQD,IAAS2kC;AAEnB,SAAO;AAAA,IACL,OAAO1kC;AAAA,IACP,QAAQD;AAAA,EACZ;AACA;AAOA,SAAS+kC,GAAgBC,GAAO;AAC9B,MAAI/kC,IAAQ+kC,EAAM,OAChBhlC,IAASglC,EAAM,QACfC,IAASD,EAAM;AAEjB,MADAC,IAAS,KAAK,IAAIA,CAAM,IAAI,KACxBA,MAAW;AACb,WAAO;AAAA,MACL,OAAOjlC;AAAA,MACP,QAAQC;AAAA,IACd;AAEE,MAAIilC,IAAMD,IAAS,KAAK,KAAK,KAAK,KAC9BE,IAAS,KAAK,IAAID,CAAG,GACrBE,IAAS,KAAK,IAAIF,CAAG,GACrBG,IAAWplC,IAAQmlC,IAASplC,IAASmlC,GACrCG,IAAYrlC,IAAQklC,IAASnlC,IAASolC;AAC1C,SAAOH,IAAS,KAAK;AAAA,IACnB,OAAOK;AAAA,IACP,QAAQD;AAAA,EACZ,IAAM;AAAA,IACF,OAAOA;AAAA,IACP,QAAQC;AAAA,EACZ;AACA;AAUA,SAASC,GAAgBtmB,GAAOumB,GAAOC,GAAOC,GAAO;AACnD,MAAIC,IAAmBH,EAAM,aAC3BI,IAAoBJ,EAAM,cAC1BK,IAAqBL,EAAM,eAC3BM,IAAeN,EAAM,QACrB1K,IAASgL,MAAiB,SAAS,IAAIA,GACvCC,IAAeP,EAAM,QACrBplC,IAAS2lC,MAAiB,SAAS,IAAIA,GACvCC,IAAeR,EAAM,QACrBnlC,IAAS2lC,MAAiB,SAAS,IAAIA,GACrCrB,IAAcc,EAAM,aACtBQ,IAAeR,EAAM,cACrBS,IAAgBT,EAAM,eACpBU,IAAkBT,EAAM,WAC1BU,IAAYD,MAAoB,SAAS,gBAAgBA,GACzDE,IAAwBX,EAAM,uBAC9BY,IAAwBD,MAA0B,SAAS,KAAOA,GAClEE,IAAwBb,EAAM,uBAC9Bc,IAAwBD,MAA0B,SAAS,QAAQA,GACnEE,IAAiBf,EAAM,UACvBgB,IAAWD,MAAmB,SAAS,QAAWA,GAClDE,IAAkBjB,EAAM,WACxBkB,KAAYD,MAAoB,SAAS,QAAWA,GACpDE,KAAiBnB,EAAM,UACvBoB,IAAWD,OAAmB,SAAS,IAAIA,IAC3CE,IAAkBrB,EAAM,WACxBsB,IAAYD,MAAoB,SAAS,IAAIA,GAC3CE,IAAS,SAAS,cAAc,QAAQ,GACxCC,IAAUD,EAAO,WAAW,IAAI,GAChCrpB,IAAW8mB,GAAiB;AAAA,IAC9B,aAAaC;AAAA,IACb,OAAO+B;AAAA,IACP,QAAQE;AAAA,EACZ,CAAG,GACGO,IAAWzC,GAAiB;AAAA,IAC9B,aAAaC;AAAA,IACb,OAAOmC;AAAA,IACP,QAAQE;AAAA,EACT,GAAE,OAAO,GACN/mC,IAAQ,KAAK,IAAI2d,EAAS,OAAO,KAAK,IAAIupB,EAAS,OAAOlB,CAAY,CAAC,GACvEjmC,IAAS,KAAK,IAAI4d,EAAS,QAAQ,KAAK,IAAIupB,EAAS,QAAQjB,CAAa,CAAC,GAI3EkB,IAAe1C,GAAiB;AAAA,IAClC,aAAaiB;AAAA,IACb,OAAOe;AAAA,IACP,QAAQE;AAAA,EACZ,CAAG,GACGS,KAAe3C,GAAiB;AAAA,IAClC,aAAaiB;AAAA,IACb,OAAOmB;AAAA,IACP,QAAQE;AAAA,EACT,GAAE,OAAO,GACNM,KAAY,KAAK,IAAIF,EAAa,OAAO,KAAK,IAAIC,GAAa,OAAOzB,CAAiB,CAAC,GACxF2B,KAAa,KAAK,IAAIH,EAAa,QAAQ,KAAK,IAAIC,GAAa,QAAQxB,CAAkB,CAAC,GAC5FjtE,KAAS,CAAC,CAAC0uE,KAAY,GAAG,CAACC,KAAa,GAAGD,IAAWC,EAAU;AACpE,SAAAN,EAAO,QAAQ9F,GAAuBlhC,CAAK,GAC3CgnC,EAAO,SAAS9F,GAAuBnhC,CAAM,GAC7CknC,EAAQ,YAAYd,GACpBc,EAAQ,SAAS,GAAG,GAAGjnC,GAAOD,CAAM,GACpCknC,EAAQ,KAAI,GACZA,EAAQ,UAAUjnC,IAAQ,GAAGD,IAAS,CAAC,GACvCknC,EAAQ,OAAOpM,IAAS,KAAK,KAAK,GAAG,GACrCoM,EAAQ,MAAM9mC,GAAQC,CAAM,GAC5B6mC,EAAQ,wBAAwBZ,GAChCY,EAAQ,wBAAwBV,GAChCU,EAAQ,UAAU,MAAMA,GAAS,CAACjoB,CAAK,EAAE,OAAOsd,GAAmB3jE,GAAO,IAAI,SAAU4uE,IAAO;AAC7F,WAAO,KAAK,MAAMrG,GAAuBqG,EAAK,CAAC;AAAA,EACnD,CAAG,CAAC,CAAC,CAAC,GACJN,EAAQ,QAAO,GACRD;AACT;AACA,IAAIQ,KAAe,OAAO;AAS1B,SAASC,GAAsBC,GAAUn1B,GAAO3jC,GAAQ;AACtD,MAAIogC,IAAM;AACV,EAAApgC,KAAU2jC;AACV,WAAS51C,IAAI41C,GAAO51C,IAAIiS,GAAQjS,KAAK;AACnC,IAAAqyC,KAAOw4B,GAAaE,EAAS,SAAS/qE,CAAC,CAAC;AAE1C,SAAOqyC;AACT;AACA,IAAI24B,KAAuB;AAO3B,SAASC,GAAqBC,GAAS;AACrC,MAAIC,IAASD,EAAQ,QAAQF,IAAsB,EAAE,GACjDI,IAAS,KAAKD,CAAM,GACpBpjB,IAAc,IAAI,YAAYqjB,EAAO,MAAM,GAC3CC,IAAQ,IAAI,WAAWtjB,CAAW;AACtC,SAAAqc,GAAQiH,GAAO,SAAUvxE,GAAOkG,GAAG;AACjC,IAAAqrE,EAAMrrE,CAAC,IAAIorE,EAAO,WAAWprE,CAAC;AAAA,EAClC,CAAG,GACM+nD;AACT;AAQA,SAASujB,GAAqBvjB,GAAavE,GAAU;AAMnD,WALI+nB,IAAS,CAAA,GAGTjoB,IAAY,MACZ+nB,IAAQ,IAAI,WAAWtjB,CAAW,GAC/BsjB,EAAM,SAAS;AAGpB,IAAAE,EAAO,KAAKV,GAAa,MAAM,MAAM1G,GAAQkH,EAAM,SAAS,GAAG/nB,CAAS,CAAC,CAAC,CAAC,GAC3E+nB,IAAQA,EAAM,SAAS/nB,CAAS;AAElC,SAAO,QAAQ,OAAOE,GAAU,UAAU,EAAE,OAAO,KAAK+nB,EAAO,KAAK,EAAE,CAAC,CAAC;AAC1E;AAOA,SAASC,GAAuBzjB,GAAa;AAC3C,MAAIgjB,IAAW,IAAI,SAAShjB,CAAW,GACnC0jB;AAGJ,MAAI;AACF,QAAIC,GACAC,GACAC;AAGJ,QAAIb,EAAS,SAAS,CAAC,MAAM,OAAQA,EAAS,SAAS,CAAC,MAAM;AAG5D,eAFI94D,IAAS84D,EAAS,YAClBnsD,IAAS,GACNA,IAAS,IAAI3M,KAAQ;AAC1B,YAAI84D,EAAS,SAASnsD,CAAM,MAAM,OAAQmsD,EAAS,SAASnsD,IAAS,CAAC,MAAM,KAAM;AAChF,UAAA+sD,IAAY/sD;AACZ;AAAA,QACD;AACD,QAAAA,KAAU;AAAA,MACX;AAEH,QAAI+sD,GAAW;AACb,UAAIE,IAAaF,IAAY,GACzBG,IAAaH,IAAY;AAC7B,UAAIb,GAAsBC,GAAUc,GAAY,CAAC,MAAM,QAAQ;AAC7D,YAAIE,IAAahB,EAAS,UAAUe,CAAU;AAE9C,YADAJ,IAAeK,MAAe,QAC1BL,KAAgBK,MAAe,UAC7BhB,EAAS,UAAUe,IAAa,GAAGJ,CAAY,MAAM,IAAQ;AAC/D,cAAIM,IAAiBjB,EAAS,UAAUe,IAAa,GAAGJ,CAAY;AACpE,UAAIM,KAAkB,MACpBJ,IAAWE,IAAaE;AAAA,QAE3B;AAAA,MAEJ;AAAA,IACF;AACD,QAAIJ,GAAU;AACZ,UAAIK,IAAUlB,EAAS,UAAUa,GAAUF,CAAY,GACnDQ,GACAlsE;AACJ,WAAKA,IAAI,GAAGA,IAAIisE,GAASjsE,KAAK;AAE5B,YADAksE,IAAUN,IAAW5rE,IAAI,KAAK,GAC1B+qE,EAAS,UAAUmB,GAASR,CAAY,MAAM,KAA0B;AAE1E,UAAAQ,KAAW,GAGXT,IAAcV,EAAS,UAAUmB,GAASR,CAAY,GAGtDX,EAAS,UAAUmB,GAAS,GAAGR,CAAY;AAC3C;AAAA,QACD;AAAA,IAEJ;AAAA,EACF,QAAe;AACd,IAAAD,IAAc;AAAA,EACf;AACD,SAAOA;AACT;AAOA,SAASU,GAAiBV,GAAa;AACrC,MAAIvN,IAAS,GACT16B,IAAS,GACTC,IAAS;AACb,UAAQgoC,GAAW;AAAA,IAEjB,KAAK;AACH,MAAAjoC,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAA06B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAz6B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAy6B,IAAS,IACTz6B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAy6B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAA,IAAS,IACT16B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAA06B,IAAS;AACT;AAAA,EACH;AACD,SAAO;AAAA,IACL,QAAQA;AAAA,IACR,QAAQ16B;AAAA,IACR,QAAQC;AAAA,EACZ;AACA;AAEA,IAAI2oC,KAAS;AAAA,EACX,QAAQ,WAAkB;AACxB,SAAK,cAAa,GAClB,KAAK,WAAU,GACf,KAAK,YAAW,GAChB,KAAK,aAAY,GACb,KAAK,WACP,KAAK,cAAa;AAAA,EAErB;AAAA,EACD,eAAe,WAAyB;AACtC,QAAIp0D,IAAU,KAAK,SACjBtY,IAAU,KAAK,SACfqgB,IAAY,KAAK,WACjB6+C,IAAU,KAAK,SACbsL,IAAW,OAAOxqE,EAAQ,iBAAiB,GAC3C0qE,IAAY,OAAO1qE,EAAQ,kBAAkB;AACjD,IAAAmlE,GAASjG,GAAS8C,EAAY,GAC9BoD,GAAY9sD,GAAS0pD,EAAY;AACjC,QAAI2K,IAAgB;AAAA,MAClB,OAAO,KAAK,IAAItsD,EAAU,aAAamqD,KAAY,IAAIA,IAAW1G,EAAmB;AAAA,MACrF,QAAQ,KAAK,IAAIzjD,EAAU,cAAcqqD,KAAa,IAAIA,IAAY3G,EAAoB;AAAA,IAChG;AACI,SAAK,gBAAgB4I,GACrB3H,GAAS9F,GAAS;AAAA,MAChB,OAAOyN,EAAc;AAAA,MACrB,QAAQA,EAAc;AAAA,IAC5B,CAAK,GACDxH,GAAS7sD,GAAS0pD,EAAY,GAC9BoD,GAAYlG,GAAS8C,EAAY;AAAA,EAClC;AAAA;AAAA,EAED,YAAY,WAAsB;AAChC,QAAI2K,IAAgB,KAAK,eACvBrN,IAAY,KAAK,WACfsN,IAAW,KAAK,QAAQ,UACxBC,IAAU,KAAK,IAAIvN,EAAU,MAAM,IAAI,QAAQ,IAC/CqK,IAAekD,IAAUvN,EAAU,gBAAgBA,EAAU,cAC7DsK,IAAgBiD,IAAUvN,EAAU,eAAeA,EAAU,eAC7D+I,IAAcsB,IAAeC,GAC7BkD,IAAcH,EAAc,OAC5BI,IAAeJ,EAAc;AACjC,IAAIA,EAAc,SAAStE,IAAcsE,EAAc,QACjDC,MAAa,IACfE,IAAcH,EAAc,SAAStE,IAErC0E,IAAeJ,EAAc,QAAQtE,IAE9BuE,MAAa,IACtBG,IAAeJ,EAAc,QAAQtE,IAErCyE,IAAcH,EAAc,SAAStE;AAEvC,QAAI2E,IAAa;AAAA,MACf,aAAa3E;AAAA,MACb,cAAcsB;AAAA,MACd,eAAeC;AAAA,MACf,OAAOkD;AAAA,MACP,QAAQC;AAAA,IACd;AACI,SAAK,aAAaC,GAClB,KAAK,UAAUJ,MAAa,KAAKA,MAAa,GAC9C,KAAK,YAAY,IAAM,EAAI,GAC3BI,EAAW,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAOA,EAAW,QAAQ,GAAGA,EAAW,QAAQ,GAChGA,EAAW,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,QAAQA,EAAW,SAAS,GAAGA,EAAW,SAAS,GACpGA,EAAW,QAAQL,EAAc,QAAQK,EAAW,SAAS,GAC7DA,EAAW,OAAOL,EAAc,SAASK,EAAW,UAAU,GAC9DA,EAAW,UAAUA,EAAW,MAChCA,EAAW,SAASA,EAAW,KAC/B,KAAK,oBAAoBrI,GAAO,CAAE,GAAEqI,CAAU;AAAA,EAC/C;AAAA,EACD,aAAa,SAAqBC,GAAaC,GAAiB;AAC9D,QAAIltE,IAAU,KAAK,SACjB2sE,IAAgB,KAAK,eACrBK,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBP,IAAW5sE,EAAQ,UACnBqoE,IAAc2E,EAAW,aACzBI,IAAU,KAAK,WAAWD;AAC9B,QAAIF,GAAa;AACf,UAAII,IAAiB,OAAOrtE,EAAQ,cAAc,KAAK,GACnDstE,IAAkB,OAAOttE,EAAQ,eAAe,KAAK;AACzD,MAAI4sE,IAAW,KACbS,IAAiB,KAAK,IAAIA,GAAgBV,EAAc,KAAK,GAC7DW,IAAkB,KAAK,IAAIA,GAAiBX,EAAc,MAAM,GAC5DC,MAAa,MACXU,IAAkBjF,IAAcgF,IAClCA,IAAiBC,IAAkBjF,IAEnCiF,IAAkBD,IAAiBhF,MAG9BuE,IAAW,MAChBS,IACFA,IAAiB,KAAK,IAAIA,GAAgBD,IAAUD,EAAY,QAAQ,CAAC,IAChEG,IACTA,IAAkB,KAAK,IAAIA,GAAiBF,IAAUD,EAAY,SAAS,CAAC,IACnEC,MACTC,IAAiBF,EAAY,OAC7BG,IAAkBH,EAAY,QAC1BG,IAAkBjF,IAAcgF,IAClCA,IAAiBC,IAAkBjF,IAEnCiF,IAAkBD,IAAiBhF;AAIzC,UAAIkF,IAAoBnF,GAAiB;AAAA,QACvC,aAAaC;AAAA,QACb,OAAOgF;AAAA,QACP,QAAQC;AAAA,MAChB,CAAO;AACD,MAAAD,IAAiBE,EAAkB,OACnCD,IAAkBC,EAAkB,QACpCP,EAAW,WAAWK,GACtBL,EAAW,YAAYM,GACvBN,EAAW,WAAW,OACtBA,EAAW,YAAY;AAAA,IACxB;AACD,QAAIE;AACF,UAAIN,KAAYQ,IAAU,IAAI,IAAI;AAChC,YAAII,IAAgBb,EAAc,QAAQK,EAAW,OACjDS,IAAed,EAAc,SAASK,EAAW;AACrD,QAAAA,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GAC5CT,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GACxCL,KAAW,KAAK,YAClBJ,EAAW,UAAU,KAAK,IAAIG,EAAY,MAAMA,EAAY,QAAQA,EAAY,QAAQH,EAAW,MAAM,GACzGA,EAAW,SAAS,KAAK,IAAIG,EAAY,KAAKA,EAAY,OAAOA,EAAY,SAASH,EAAW,OAAO,GACxGA,EAAW,UAAUG,EAAY,MACjCH,EAAW,SAASG,EAAY,KAC5BP,MAAa,MACXI,EAAW,SAASL,EAAc,UACpCK,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,IAE5CR,EAAW,UAAUL,EAAc,WACrCK,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GAC5CT,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY;AAAA,MAI1D;AACQ,QAAAT,EAAW,UAAU,CAACA,EAAW,OACjCA,EAAW,SAAS,CAACA,EAAW,QAChCA,EAAW,UAAUL,EAAc,OACnCK,EAAW,SAASL,EAAc;AAAA,EAGvC;AAAA,EACD,cAAc,SAAsB38B,GAAS09B,GAAa;AACxD,QAAIV,IAAa,KAAK,YACpB1N,IAAY,KAAK;AACnB,QAAIoO,GAAa;AACf,UAAIC,IAAmBlF,GAAgB;AAAA,QACnC,OAAOnJ,EAAU,eAAe,KAAK,IAAIA,EAAU,UAAU,CAAC;AAAA,QAC9D,QAAQA,EAAU,gBAAgB,KAAK,IAAIA,EAAU,UAAU,CAAC;AAAA,QAChE,QAAQA,EAAU,UAAU;AAAA,MACtC,CAAS,GACDqK,IAAegE,EAAiB,OAChC/D,IAAgB+D,EAAiB,QAC/BhqC,IAAQqpC,EAAW,SAASrD,IAAeqD,EAAW,eACtDtpC,IAASspC,EAAW,UAAUpD,IAAgBoD,EAAW;AAC7D,MAAAA,EAAW,SAASrpC,IAAQqpC,EAAW,SAAS,GAChDA,EAAW,QAAQtpC,IAASspC,EAAW,UAAU,GACjDA,EAAW,QAAQrpC,GACnBqpC,EAAW,SAAStpC,GACpBspC,EAAW,cAAcrD,IAAeC,GACxCoD,EAAW,eAAerD,GAC1BqD,EAAW,gBAAgBpD,GAC3B,KAAK,YAAY,IAAM,EAAK;AAAA,IAC7B;AACD,KAAIoD,EAAW,QAAQA,EAAW,YAAYA,EAAW,QAAQA,EAAW,cAC1EA,EAAW,OAAOA,EAAW,WAE3BA,EAAW,SAASA,EAAW,aAAaA,EAAW,SAASA,EAAW,eAC7EA,EAAW,MAAMA,EAAW,SAE9BA,EAAW,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAOA,EAAW,QAAQ,GAAGA,EAAW,QAAQ,GAChGA,EAAW,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,QAAQA,EAAW,SAAS,GAAGA,EAAW,SAAS,GACpG,KAAK,YAAY,IAAO,EAAI,GAC5BA,EAAW,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAW,MAAMA,EAAW,OAAO,GAAGA,EAAW,OAAO,GAC5FA,EAAW,MAAM,KAAK,IAAI,KAAK,IAAIA,EAAW,KAAKA,EAAW,MAAM,GAAGA,EAAW,MAAM,GACxFA,EAAW,UAAUA,EAAW,MAChCA,EAAW,SAASA,EAAW,KAC/BhI,GAAS,KAAK,QAAQL,GAAO;AAAA,MAC3B,OAAOqI,EAAW;AAAA,MAClB,QAAQA,EAAW;AAAA,IACpB,GAAElG,GAAc;AAAA,MACf,YAAYkG,EAAW;AAAA,MACvB,YAAYA,EAAW;AAAA,IACxB,CAAA,CAAC,CAAC,GACH,KAAK,YAAYh9B,CAAO,GACpB,KAAK,WAAW,KAAK,WACvB,KAAK,aAAa,IAAM,EAAI;AAAA,EAE/B;AAAA,EACD,aAAa,SAAqBA,GAAS;AACzC,QAAIg9B,IAAa,KAAK,YACpB1N,IAAY,KAAK,WACf37B,IAAQ27B,EAAU,gBAAgB0N,EAAW,QAAQA,EAAW,eAChEtpC,IAAS47B,EAAU,iBAAiB0N,EAAW,SAASA,EAAW;AACvE,IAAArI,GAAOrF,GAAW;AAAA,MAChB,OAAO37B;AAAA,MACP,QAAQD;AAAA,MACR,OAAOspC,EAAW,QAAQrpC,KAAS;AAAA,MACnC,MAAMqpC,EAAW,SAAStpC,KAAU;AAAA,IAC1C,CAAK,GACDshC,GAAS,KAAK,OAAOL,GAAO;AAAA,MAC1B,OAAOrF,EAAU;AAAA,MACjB,QAAQA,EAAU;AAAA,IACxB,GAAOwH,GAAcnC,GAAO;AAAA,MACtB,YAAYrF,EAAU;AAAA,MACtB,YAAYA,EAAU;AAAA,IAC5B,GAAOA,CAAS,CAAC,CAAC,CAAC,GACXtvB,KACF,KAAK,OAAM;AAAA,EAEd;AAAA,EACD,aAAa,WAAuB;AAClC,QAAIhwC,IAAU,KAAK,SACjBgtE,IAAa,KAAK,YAChB3E,IAAcroE,EAAQ,eAAeA,EAAQ,oBAC7C4tE,IAAe,OAAO5tE,EAAQ,YAAY,KAAK,KAC/CmtE,IAAc;AAAA,MAChB,OAAOH,EAAW;AAAA,MAClB,QAAQA,EAAW;AAAA,IACzB;AACI,IAAI3E,MACE2E,EAAW,SAAS3E,IAAc2E,EAAW,QAC/CG,EAAY,SAASA,EAAY,QAAQ9E,IAEzC8E,EAAY,QAAQA,EAAY,SAAS9E,IAG7C,KAAK,cAAc8E,GACnB,KAAK,aAAa,IAAM,EAAI,GAG5BA,EAAY,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAOA,EAAY,QAAQ,GAAGA,EAAY,QAAQ,GACpGA,EAAY,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,QAAQA,EAAY,SAAS,GAAGA,EAAY,SAAS,GAGxGA,EAAY,QAAQ,KAAK,IAAIA,EAAY,UAAUA,EAAY,QAAQS,CAAY,GACnFT,EAAY,SAAS,KAAK,IAAIA,EAAY,WAAWA,EAAY,SAASS,CAAY,GACtFT,EAAY,OAAOH,EAAW,QAAQA,EAAW,QAAQG,EAAY,SAAS,GAC9EA,EAAY,MAAMH,EAAW,OAAOA,EAAW,SAASG,EAAY,UAAU,GAC9EA,EAAY,UAAUA,EAAY,MAClCA,EAAY,SAASA,EAAY,KACjC,KAAK,qBAAqBxI,GAAO,CAAE,GAAEwI,CAAW;AAAA,EACjD;AAAA,EACD,cAAc,SAAsBF,GAAaC,GAAiB;AAChE,QAAIltE,IAAU,KAAK,SACjB2sE,IAAgB,KAAK,eACrBK,IAAa,KAAK,YAClBG,IAAc,KAAK,aACnBU,IAAU,KAAK,SACbxF,IAAcroE,EAAQ;AAC1B,QAAIitE,GAAa;AACf,UAAIa,IAAkB,OAAO9tE,EAAQ,eAAe,KAAK,GACrD+tE,IAAmB,OAAO/tE,EAAQ,gBAAgB,KAAK,GACvDguE,IAAkBH,IAAU,KAAK,IAAIlB,EAAc,OAAOK,EAAW,OAAOA,EAAW,QAAQA,EAAW,MAAML,EAAc,QAAQK,EAAW,IAAI,IAAIL,EAAc,OACvKsB,IAAmBJ,IAAU,KAAK,IAAIlB,EAAc,QAAQK,EAAW,QAAQA,EAAW,SAASA,EAAW,KAAKL,EAAc,SAASK,EAAW,GAAG,IAAIL,EAAc;AAG9K,MAAAmB,IAAkB,KAAK,IAAIA,GAAiBnB,EAAc,KAAK,GAC/DoB,IAAmB,KAAK,IAAIA,GAAkBpB,EAAc,MAAM,GAC9DtE,MACEyF,KAAmBC,IACjBA,IAAmB1F,IAAcyF,IACnCC,IAAmBD,IAAkBzF,IAErCyF,IAAkBC,IAAmB1F,IAE9ByF,IACTC,IAAmBD,IAAkBzF,IAC5B0F,MACTD,IAAkBC,IAAmB1F,IAEnC4F,IAAmB5F,IAAc2F,IACnCC,IAAmBD,IAAkB3F,IAErC2F,IAAkBC,IAAmB5F,IAKzC8E,EAAY,WAAW,KAAK,IAAIW,GAAiBE,CAAe,GAChEb,EAAY,YAAY,KAAK,IAAIY,GAAkBE,CAAgB,GACnEd,EAAY,WAAWa,GACvBb,EAAY,YAAYc;AAAA,IACzB;AACD,IAAIf,MACEW,KACFV,EAAY,UAAU,KAAK,IAAI,GAAGH,EAAW,IAAI,GACjDG,EAAY,SAAS,KAAK,IAAI,GAAGH,EAAW,GAAG,GAC/CG,EAAY,UAAU,KAAK,IAAIR,EAAc,OAAOK,EAAW,OAAOA,EAAW,KAAK,IAAIG,EAAY,OACtGA,EAAY,SAAS,KAAK,IAAIR,EAAc,QAAQK,EAAW,MAAMA,EAAW,MAAM,IAAIG,EAAY,WAEtGA,EAAY,UAAU,GACtBA,EAAY,SAAS,GACrBA,EAAY,UAAUR,EAAc,QAAQQ,EAAY,OACxDA,EAAY,SAASR,EAAc,SAASQ,EAAY;AAAA,EAG7D;AAAA,EACD,eAAe,WAAyB;AACtC,QAAIntE,IAAU,KAAK,SACjB2sE,IAAgB,KAAK,eACrBQ,IAAc,KAAK;AACrB,KAAIA,EAAY,QAAQA,EAAY,YAAYA,EAAY,QAAQA,EAAY,cAC9EA,EAAY,OAAOA,EAAY,WAE7BA,EAAY,SAASA,EAAY,aAAaA,EAAY,SAASA,EAAY,eACjFA,EAAY,MAAMA,EAAY,SAEhCA,EAAY,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAOA,EAAY,QAAQ,GAAGA,EAAY,QAAQ,GACpGA,EAAY,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,QAAQA,EAAY,SAAS,GAAGA,EAAY,SAAS,GACxG,KAAK,aAAa,IAAO,EAAI,GAC7BA,EAAY,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAY,MAAMA,EAAY,OAAO,GAAGA,EAAY,OAAO,GAChGA,EAAY,MAAM,KAAK,IAAI,KAAK,IAAIA,EAAY,KAAKA,EAAY,MAAM,GAAGA,EAAY,MAAM,GAC5FA,EAAY,UAAUA,EAAY,MAClCA,EAAY,SAASA,EAAY,KAC7BntE,EAAQ,WAAWA,EAAQ,kBAE7BylE,GAAQ,KAAK,MAAMpD,IAAa8K,EAAY,SAASR,EAAc,SAASQ,EAAY,UAAUR,EAAc,SAASvL,KAAcF,EAAU,GAEnJ8D,GAAS,KAAK,SAASL,GAAO;AAAA,MAC5B,OAAOwI,EAAY;AAAA,MACnB,QAAQA,EAAY;AAAA,IACrB,GAAErG,GAAc;AAAA,MACf,YAAYqG,EAAY;AAAA,MACxB,YAAYA,EAAY;AAAA,IACzB,CAAA,CAAC,CAAC,GACC,KAAK,WAAW,KAAK,WACvB,KAAK,YAAY,IAAM,EAAI,GAExB,KAAK,YACR,KAAK,OAAM;AAAA,EAEd;AAAA,EACD,QAAQ,WAAkB;AACxB,SAAK,QAAO,GACZ3kC,GAAc,KAAK,SAASk6B,IAAY,KAAK,QAAO,CAAE;AAAA,EACvD;AACH,GAEIwL,KAAU;AAAA,EACZ,aAAa,WAAuB;AAClC,QAAI51D,IAAU,KAAK,SACjB61D,IAAc,KAAK,aACjBD,IAAU,KAAK,QAAQ,SACvBtuB,IAAMuuB,IAAc,KAAK,iBAAiB,KAAK,KAC/CC,IAAM91D,EAAQ,OAAO,wBACrBqqC,IAAQ,SAAS,cAAc,KAAK;AAQxC,QAPIwrB,MACFxrB,EAAM,cAAcwrB,IAEtBxrB,EAAM,MAAM/C,GACZ+C,EAAM,MAAMyrB,GACZ,KAAK,QAAQ,YAAYzrB,CAAK,GAC9B,KAAK,eAAeA,GAChB,EAACurB,GAGL;AAAA,UAAIG,IAAWH;AACf,MAAI,OAAOA,KAAY,WACrBG,IAAW/1D,EAAQ,cAAc,iBAAiB41D,CAAO,IAChDA,EAAQ,kBACjBG,IAAW,CAACH,CAAO,IAErB,KAAK,WAAWG,GAChB3J,GAAQ2J,GAAU,SAAUpyD,GAAI;AAC9B,YAAIqyD,IAAM,SAAS,cAAc,KAAK;AAGtC,QAAA7I,GAAQxpD,GAAIqmD,IAAc;AAAA,UACxB,OAAOrmD,EAAG;AAAA,UACV,QAAQA,EAAG;AAAA,UACX,MAAMA,EAAG;AAAA,QACjB,CAAO,GACGkyD,MACFG,EAAI,cAAcH,IAEpBG,EAAI,MAAM1uB,GACV0uB,EAAI,MAAMF,GAQVE,EAAI,MAAM,UAAU,2KACpBryD,EAAG,YAAY,IACfA,EAAG,YAAYqyD,CAAG;AAAA,MACxB,CAAK;AAAA;AAAA,EACF;AAAA,EACD,cAAc,WAAwB;AACpC,IAAA5J,GAAQ,KAAK,UAAU,SAAUpsD,GAAS;AACxC,UAAIpR,IAAOs+D,GAAQltD,GAASgqD,EAAY;AACxC,MAAA0C,GAAS1sD,GAAS;AAAA,QAChB,OAAOpR,EAAK;AAAA,QACZ,QAAQA,EAAK;AAAA,MACrB,CAAO,GACDoR,EAAQ,YAAYpR,EAAK,MACzBw+D,GAAWptD,GAASgqD,EAAY;AAAA,IACtC,CAAK;AAAA,EACF;AAAA,EACD,SAAS,WAAmB;AAC1B,QAAIhD,IAAY,KAAK,WACnB0N,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBoB,IAAepB,EAAY,OAC7BqB,IAAgBrB,EAAY,QAC1BxpC,IAAQ27B,EAAU,OACpB57B,IAAS47B,EAAU,QACjBj6C,IAAO8nD,EAAY,OAAOH,EAAW,OAAO1N,EAAU,MACtDl6C,IAAM+nD,EAAY,MAAMH,EAAW,MAAM1N,EAAU;AACvD,IAAI,CAAC,KAAK,WAAW,KAAK,aAG1B0F,GAAS,KAAK,cAAcL,GAAO;AAAA,MACjC,OAAOhhC;AAAA,MACP,QAAQD;AAAA,IACd,GAAOojC,GAAcnC,GAAO;AAAA,MACtB,YAAY,CAACt/C;AAAA,MACb,YAAY,CAACD;AAAA,IACnB,GAAOk6C,CAAS,CAAC,CAAC,CAAC,GACfoF,GAAQ,KAAK,UAAU,SAAUpsD,GAAS;AACxC,UAAIpR,IAAOs+D,GAAQltD,GAASgqD,EAAY,GACpCmM,IAAgBvnE,EAAK,OACrBwnE,IAAiBxnE,EAAK,QACtB6hE,IAAW0F,GACXzF,IAAY0F,GACZnP,IAAQ;AACZ,MAAIgP,MACFhP,IAAQkP,IAAgBF,GACxBvF,IAAYwF,IAAgBjP,IAE1BiP,KAAiBxF,IAAY0F,MAC/BnP,IAAQmP,IAAiBF,GACzBzF,IAAWwF,IAAehP,GAC1ByJ,IAAY0F,IAEd1J,GAAS1sD,GAAS;AAAA,QAChB,OAAOywD;AAAA,QACP,QAAQC;AAAA,MAChB,CAAO,GACDhE,GAAS1sD,EAAQ,qBAAqB,KAAK,EAAE,CAAC,GAAGqsD,GAAO;AAAA,QACtD,OAAOhhC,IAAQ47B;AAAA,QACf,QAAQ77B,IAAS67B;AAAA,MACzB,GAASuH,GAAcnC,GAAO;AAAA,QACtB,YAAY,CAACt/C,IAAOk6C;AAAA,QACpB,YAAY,CAACn6C,IAAMm6C;AAAA,MAC3B,GAASD,CAAS,CAAC,CAAC,CAAC;AAAA,IACrB,CAAK;AAAA,EACF;AACH,GAEIqP,KAAS;AAAA,EACX,MAAM,WAAgB;AACpB,QAAIr2D,IAAU,KAAK,SACjBtY,IAAU,KAAK,SACfk/D,IAAU,KAAK;AACjB,IAAIxkE,GAAWsF,EAAQ,SAAS,KAC9BkmE,GAAY5tD,GAASuqD,IAAkB7iE,EAAQ,SAAS,GAEtDtF,GAAWsF,EAAQ,QAAQ,KAC7BkmE,GAAY5tD,GAASsqD,IAAiB5iE,EAAQ,QAAQ,GAEpDtF,GAAWsF,EAAQ,OAAO,KAC5BkmE,GAAY5tD,GAASqqD,IAAgB3iE,EAAQ,OAAO,GAElDtF,GAAWsF,EAAQ,IAAI,KACzBkmE,GAAY5tD,GAASoqD,IAAY1iE,EAAQ,IAAI,GAE3CtF,GAAWsF,EAAQ,IAAI,KACzBkmE,GAAY5tD,GAASkrD,IAAYxjE,EAAQ,IAAI,GAE/CkmE,GAAYhH,GAASgE,IAAoB,KAAK,cAAc,KAAK,UAAU,KAAK,IAAI,CAAC,GACjFljE,EAAQ,YAAYA,EAAQ,eAC9BkmE,GAAYhH,GAASqE,IAAa,KAAK,UAAU,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,MACtE,SAAS;AAAA,MACT,SAAS;AAAA,IACjB,CAAO,GAECvjE,EAAQ,4BACVkmE,GAAYhH,GAAS4D,IAAgB,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,GAEjFoD,GAAY5tD,EAAQ,eAAe6qD,IAAoB,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,GACjG+C,GAAY5tD,EAAQ,eAAe8qD,IAAkB,KAAK,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC,GACzFpjE,EAAQ,cACVkmE,GAAY,QAAQ5C,IAAc,KAAK,WAAW,KAAK,OAAO,KAAK,IAAI,CAAC;AAAA,EAE3E;AAAA,EACD,QAAQ,WAAkB;AACxB,QAAIhrD,IAAU,KAAK,SACjBtY,IAAU,KAAK,SACfk/D,IAAU,KAAK;AACjB,IAAIxkE,GAAWsF,EAAQ,SAAS,KAC9BgmE,GAAe1tD,GAASuqD,IAAkB7iE,EAAQ,SAAS,GAEzDtF,GAAWsF,EAAQ,QAAQ,KAC7BgmE,GAAe1tD,GAASsqD,IAAiB5iE,EAAQ,QAAQ,GAEvDtF,GAAWsF,EAAQ,OAAO,KAC5BgmE,GAAe1tD,GAASqqD,IAAgB3iE,EAAQ,OAAO,GAErDtF,GAAWsF,EAAQ,IAAI,KACzBgmE,GAAe1tD,GAASoqD,IAAY1iE,EAAQ,IAAI,GAE9CtF,GAAWsF,EAAQ,IAAI,KACzBgmE,GAAe1tD,GAASkrD,IAAYxjE,EAAQ,IAAI,GAElDgmE,GAAe9G,GAASgE,IAAoB,KAAK,WAAW,GACxDljE,EAAQ,YAAYA,EAAQ,eAC9BgmE,GAAe9G,GAASqE,IAAa,KAAK,SAAS;AAAA,MACjD,SAAS;AAAA,MACT,SAAS;AAAA,IACjB,CAAO,GAECvjE,EAAQ,4BACVgmE,GAAe9G,GAAS4D,IAAgB,KAAK,UAAU,GAEzDkD,GAAe1tD,EAAQ,eAAe6qD,IAAoB,KAAK,UAAU,GACzE6C,GAAe1tD,EAAQ,eAAe8qD,IAAkB,KAAK,SAAS,GAClEpjE,EAAQ,cACVgmE,GAAe,QAAQ1C,IAAc,KAAK,QAAQ;AAAA,EAErD;AACH,GAEIsL,KAAW;AAAA,EACb,QAAQ,WAAkB;AACxB,QAAI,MAAK,UAGT;AAAA,UAAI5uE,IAAU,KAAK,SACjBqgB,IAAY,KAAK,WACjBssD,IAAgB,KAAK,eACnBkC,IAASxuD,EAAU,cAAcssD,EAAc,OAC/CmC,IAASzuD,EAAU,eAAessD,EAAc,QAChDpN,IAAQ,KAAK,IAAIsP,IAAS,CAAC,IAAI,KAAK,IAAIC,IAAS,CAAC,IAAID,IAASC;AAGnE,UAAIvP,MAAU,GAAG;AACf,YAAIyN,GACAG;AACJ,QAAIntE,EAAQ,YACVgtE,IAAa,KAAK,iBAClBG,IAAc,KAAK,mBAErB,KAAK,OAAM,GACPntE,EAAQ,YACV,KAAK,cAAc0kE,GAAQsI,GAAY,SAAUvsE,GAAGH,GAAG;AACrD,UAAA0sE,EAAW1sE,CAAC,IAAIG,IAAI8+D;AAAA,QACrB,CAAA,CAAC,GACF,KAAK,eAAemF,GAAQyI,GAAa,SAAU1sE,GAAGH,GAAG;AACvD,UAAA6sE,EAAY7sE,CAAC,IAAIG,IAAI8+D;AAAA,QACtB,CAAA,CAAC;AAAA,MAEL;AAAA;AAAA,EACF;AAAA,EACD,UAAU,WAAoB;AAC5B,IAAI,KAAK,YAAY,KAAK,QAAQ,aAAakD,MAG/C,KAAK,YAAYyC,GAAS,KAAK,SAASpD,EAAU,IAAIU,KAAiBD,EAAc;AAAA,EACtF;AAAA,EACD,OAAO,SAAepzD,GAAO;AAC3B,QAAI0D,IAAQ,MACR0sD,IAAQ,OAAO,KAAK,QAAQ,cAAc,KAAK,KAC/CpiD,IAAQ;AACZ,IAAI,KAAK,aAGThO,EAAM,eAAc,GAGhB,MAAK,aAGT,KAAK,WAAW,IAChB,WAAW,WAAY;AACrB,MAAA0D,EAAM,WAAW;AAAA,IAClB,GAAE,EAAE,GACD1D,EAAM,SACRgO,IAAQhO,EAAM,SAAS,IAAI,IAAI,KACtBA,EAAM,aACfgO,IAAQ,CAAChO,EAAM,aAAa,MACnBA,EAAM,WACfgO,IAAQhO,EAAM,SAAS,IAAI,IAAI,KAEjC,KAAK,KAAK,CAACgO,IAAQoiD,GAAOpwD,CAAK;AAAA,EAChC;AAAA,EACD,WAAW,SAAmBA,GAAO;AACnC,QAAI4/D,IAAU5/D,EAAM,SAClB6/D,IAAS7/D,EAAM;AACjB,QAAI,OAAK,aAGLA,EAAM,SAAS,eAAeA,EAAM,SAAS,iBAAiBA,EAAM,gBAAgB;AAAA,KAExF5U,GAASw0E,CAAO,KAAKA,MAAY,KAAKx0E,GAASy0E,CAAM,KAAKA,MAAW,KAGlE7/D,EAAM,WAGT;AAAA,UAAInP,IAAU,KAAK,SACjBgnE,IAAW,KAAK,UACdiI;AAeJ,MAdI9/D,EAAM,iBAERu1D,GAAQv1D,EAAM,gBAAgB,SAAUi/B,GAAO;AAC7C,QAAA44B,EAAS54B,EAAM,UAAU,IAAIw5B,GAAWx5B,CAAK;AAAA,MACrD,CAAO,IAGD44B,EAAS73D,EAAM,aAAa,CAAC,IAAIy4D,GAAWz4D,CAAK,GAE/C,OAAO,KAAK63D,CAAQ,EAAE,SAAS,KAAKhnE,EAAQ,YAAYA,EAAQ,cAClEivE,IAAS5N,KAET4N,IAASzJ,GAAQr2D,EAAM,QAAQkzD,EAAW,GAEvCqB,GAAe,KAAKuL,CAAM,KAG3BzmC,GAAc,KAAK,SAASq6B,IAAkB;AAAA,QAChD,eAAe1zD;AAAA,QACf,QAAQ8/D;AAAA,MACT,CAAA,MAAM,OAKP9/D,EAAM,eAAc,GACpB,KAAK,SAAS8/D,GACd,KAAK,WAAW,IACZA,MAAW9N,OACb,KAAK,WAAW,IAChBgE,GAAS,KAAK,SAAShD,EAAW;AAAA;AAAA,EAErC;AAAA,EACD,UAAU,SAAkBhzD,GAAO;AACjC,QAAI8/D,IAAS,KAAK;AAClB,QAAI,OAAK,YAAY,CAACA,IAGtB;AAAA,UAAIjI,IAAW,KAAK;AAEpB,MADA73D,EAAM,eAAc,GAChBq5B,GAAc,KAAK,SAASo6B,IAAiB;AAAA,QAC/C,eAAezzD;AAAA,QACf,QAAQ8/D;AAAA,MACT,CAAA,MAAM,OAGH9/D,EAAM,iBACRu1D,GAAQv1D,EAAM,gBAAgB,SAAUi/B,GAAO;AAE7C,QAAAu2B,GAAOqC,EAAS54B,EAAM,UAAU,KAAK,CAAE,GAAEw5B,GAAWx5B,GAAO,EAAI,CAAC;AAAA,MACxE,CAAO,IAEDu2B,GAAOqC,EAAS73D,EAAM,aAAa,CAAC,KAAK,CAAE,GAAEy4D,GAAWz4D,GAAO,EAAI,CAAC,GAEtE,KAAK,OAAOA,CAAK;AAAA;AAAA,EAClB;AAAA,EACD,SAAS,SAAiBA,GAAO;AAC/B,QAAI,MAAK,UAGT;AAAA,UAAI8/D,IAAS,KAAK,QAChBjI,IAAW,KAAK;AAQlB,MAPI73D,EAAM,iBACRu1D,GAAQv1D,EAAM,gBAAgB,SAAUi/B,GAAO;AAC7C,eAAO44B,EAAS54B,EAAM,UAAU;AAAA,MACxC,CAAO,IAED,OAAO44B,EAAS73D,EAAM,aAAa,CAAC,GAEjC8/D,MAGL9/D,EAAM,eAAc,GACf,OAAO,KAAK63D,CAAQ,EAAE,WACzB,KAAK,SAAS,KAEZ,KAAK,aACP,KAAK,WAAW,IAChBh0D,GAAY,KAAK,SAASmvD,IAAa,KAAK,WAAW,KAAK,QAAQ,KAAK,IAE3E35B,GAAc,KAAK,SAASm6B,IAAgB;AAAA,QAC1C,eAAexzD;AAAA,QACf,QAAQ8/D;AAAA,MACd,CAAK;AAAA;AAAA,EACF;AACH,GAEIC,KAAS;AAAA,EACX,QAAQ,SAAgB//D,GAAO;AAC7B,QAAInP,IAAU,KAAK,SACjBgtE,IAAa,KAAK,YAClBL,IAAgB,KAAK,eACrBQ,IAAc,KAAK,aACnBnG,IAAW,KAAK,UACdiI,IAAS,KAAK,QACd5G,IAAcroE,EAAQ,aACtBqlB,IAAO8nD,EAAY,MACrB/nD,IAAM+nD,EAAY,KAClBxpC,IAAQwpC,EAAY,OACpBzpC,IAASypC,EAAY,QACnB3nD,IAAQH,IAAOse,GACfF,IAASre,IAAMse,GACfyrC,IAAU,GACVC,IAAS,GACThF,IAAWuC,EAAc,OACzBrC,IAAYqC,EAAc,QAC1B0C,IAAa,IACbnwD;AAGJ,IAAI,CAACmpD,KAAel5D,EAAM,aACxBk5D,IAAc1kC,KAASD,IAASC,IAAQD,IAAS,IAE/C,KAAK,YACPyrC,IAAUhC,EAAY,SACtBiC,IAASjC,EAAY,QACrB/C,IAAW+E,IAAU,KAAK,IAAIxC,EAAc,OAAOK,EAAW,OAAOA,EAAW,OAAOA,EAAW,KAAK,GACvG1C,IAAY8E,IAAS,KAAK,IAAIzC,EAAc,QAAQK,EAAW,QAAQA,EAAW,MAAMA,EAAW,MAAM;AAE3G,QAAI7F,IAAUH,EAAS,OAAO,KAAKA,CAAQ,EAAE,CAAC,CAAC,GAC3CpgD,IAAQ;AAAA,MACV,GAAGugD,EAAQ,OAAOA,EAAQ;AAAA,MAC1B,GAAGA,EAAQ,OAAOA,EAAQ;AAAA,IAChC,GACQxrE,IAAQ,SAAe2zE,IAAM;AAC/B,cAAQA,IAAI;AAAA,QACV,KAAKhO;AACH,UAAI97C,IAAQoB,EAAM,IAAIwjD,MACpBxjD,EAAM,IAAIwjD,IAAW5kD;AAEvB;AAAA,QACF,KAAK+7C;AACH,UAAIl8C,IAAOuB,EAAM,IAAIuoD,MACnBvoD,EAAM,IAAIuoD,IAAU9pD;AAEtB;AAAA,QACF,KAAKo8C;AACH,UAAIr8C,IAAMwB,EAAM,IAAIwoD,MAClBxoD,EAAM,IAAIwoD,IAAShqD;AAErB;AAAA,QACF,KAAKo8C;AACH,UAAI/9B,IAAS7c,EAAM,IAAI0jD,MACrB1jD,EAAM,IAAI0jD,IAAY7mC;AAExB;AAAA,MACH;AAAA,IACP;AACI,YAAQwrC,GAAM;AAAA,MAEZ,KAAK/N;AACH,QAAA77C,KAAQuB,EAAM,GACdxB,KAAOwB,EAAM;AACb;AAAA,MAGF,KAAK06C;AACH,YAAI16C,EAAM,KAAK,MAAMpB,KAAS4kD,KAAY/B,MAAgBjjD,KAAOgqD,KAAU3rC,KAAU6mC,KAAa;AAChG,UAAA+E,IAAa;AACb;AAAA,QACD;AACD,QAAA1zE,EAAM2lE,EAAW,GACjB39B,KAAS/c,EAAM,GACX+c,IAAQ,MACVsrC,IAAS1N,IACT59B,IAAQ,CAACA,GACTte,KAAQse,IAEN0kC,MACF3kC,IAASC,IAAQ0kC,GACjBjjD,MAAQ+nD,EAAY,SAASzpC,KAAU;AAEzC;AAAA,MACF,KAAK+9B;AACH,YAAI76C,EAAM,KAAK,MAAMxB,KAAOgqD,KAAU/G,MAAgBhjD,KAAQ8pD,KAAW3pD,KAAS4kD,KAAY;AAC5F,UAAAiF,IAAa;AACb;AAAA,QACD;AACD,QAAA1zE,EAAM8lE,EAAY,GAClB/9B,KAAU9c,EAAM,GAChBxB,KAAOwB,EAAM,GACT8c,IAAS,MACXurC,IAASzN,IACT99B,IAAS,CAACA,GACVte,KAAOse,IAEL2kC,MACF1kC,IAAQD,IAAS2kC,GACjBhjD,MAAS8nD,EAAY,QAAQxpC,KAAS;AAExC;AAAA,MACF,KAAK49B;AACH,YAAI36C,EAAM,KAAK,MAAMvB,KAAQ8pD,KAAW9G,MAAgBjjD,KAAOgqD,KAAU3rC,KAAU6mC,KAAa;AAC9F,UAAA+E,IAAa;AACb;AAAA,QACD;AACD,QAAA1zE,EAAM4lE,EAAW,GACjB59B,KAAS/c,EAAM,GACfvB,KAAQuB,EAAM,GACV+c,IAAQ,MACVsrC,IAAS3N,IACT39B,IAAQ,CAACA,GACTte,KAAQse,IAEN0kC,MACF3kC,IAASC,IAAQ0kC,GACjBjjD,MAAQ+nD,EAAY,SAASzpC,KAAU;AAEzC;AAAA,MACF,KAAK89B;AACH,YAAI56C,EAAM,KAAK,MAAM6c,KAAU6mC,KAAajC,MAAgBhjD,KAAQ8pD,KAAW3pD,KAAS4kD,KAAY;AAClG,UAAAiF,IAAa;AACb;AAAA,QACD;AACD,QAAA1zE,EAAM6lE,EAAY,GAClB99B,KAAU9c,EAAM,GACZ8c,IAAS,MACXurC,IAASxN,IACT/9B,IAAS,CAACA,GACVte,KAAOse,IAEL2kC,MACF1kC,IAAQD,IAAS2kC,GACjBhjD,MAAS8nD,EAAY,QAAQxpC,KAAS;AAExC;AAAA,MACF,KAAK+9B;AACH,YAAI2G,GAAa;AACf,cAAIzhD,EAAM,KAAK,MAAMxB,KAAOgqD,KAAU5pD,KAAS4kD,IAAW;AACxD,YAAAiF,IAAa;AACb;AAAA,UACD;AACD,UAAA1zE,EAAM8lE,EAAY,GAClB/9B,KAAU9c,EAAM,GAChBxB,KAAOwB,EAAM,GACb+c,IAAQD,IAAS2kC;AAAA,QAC3B;AACU,UAAA1sE,EAAM8lE,EAAY,GAClB9lE,EAAM2lE,EAAW,GACb16C,EAAM,KAAK,IACTpB,IAAQ4kD,IACVzmC,KAAS/c,EAAM,IACNA,EAAM,KAAK,KAAKxB,KAAOgqD,MAChCC,IAAa,MAGf1rC,KAAS/c,EAAM,GAEbA,EAAM,KAAK,IACTxB,IAAMgqD,MACR1rC,KAAU9c,EAAM,GAChBxB,KAAOwB,EAAM,MAGf8c,KAAU9c,EAAM,GAChBxB,KAAOwB,EAAM;AAGjB,QAAI+c,IAAQ,KAAKD,IAAS,KACxBurC,IAASpN,IACTn+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTve,KAAOse,GACPre,KAAQse,KACCA,IAAQ,KACjBsrC,IAAStN,IACTh+B,IAAQ,CAACA,GACTte,KAAQse,KACCD,IAAS,MAClBurC,IAASrN,IACTl+B,IAAS,CAACA,GACVte,KAAOse;AAET;AAAA,MACF,KAAKi+B;AACH,YAAI0G,GAAa;AACf,cAAIzhD,EAAM,KAAK,MAAMxB,KAAOgqD,KAAU/pD,KAAQ8pD,IAAU;AACtD,YAAAE,IAAa;AACb;AAAA,UACD;AACD,UAAA1zE,EAAM8lE,EAAY,GAClB/9B,KAAU9c,EAAM,GAChBxB,KAAOwB,EAAM,GACb+c,IAAQD,IAAS2kC,GACjBhjD,KAAQ8nD,EAAY,QAAQxpC;AAAA,QACtC;AACU,UAAAhoC,EAAM8lE,EAAY,GAClB9lE,EAAM4lE,EAAW,GACb36C,EAAM,KAAK,IACTvB,IAAO8pD,KACTxrC,KAAS/c,EAAM,GACfvB,KAAQuB,EAAM,KACLA,EAAM,KAAK,KAAKxB,KAAOgqD,MAChCC,IAAa,OAGf1rC,KAAS/c,EAAM,GACfvB,KAAQuB,EAAM,IAEZA,EAAM,KAAK,IACTxB,IAAMgqD,MACR1rC,KAAU9c,EAAM,GAChBxB,KAAOwB,EAAM,MAGf8c,KAAU9c,EAAM,GAChBxB,KAAOwB,EAAM;AAGjB,QAAI+c,IAAQ,KAAKD,IAAS,KACxBurC,IAASrN,IACTl+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTve,KAAOse,GACPre,KAAQse,KACCA,IAAQ,KACjBsrC,IAASvN,IACT/9B,IAAQ,CAACA,GACTte,KAAQse,KACCD,IAAS,MAClBurC,IAASpN,IACTn+B,IAAS,CAACA,GACVte,KAAOse;AAET;AAAA,MACF,KAAKm+B;AACH,YAAIwG,GAAa;AACf,cAAIzhD,EAAM,KAAK,MAAMvB,KAAQ8pD,KAAW1rC,KAAU6mC,IAAY;AAC5D,YAAA+E,IAAa;AACb;AAAA,UACD;AACD,UAAA1zE,EAAM4lE,EAAW,GACjB59B,KAAS/c,EAAM,GACfvB,KAAQuB,EAAM,GACd8c,IAASC,IAAQ0kC;AAAA,QAC3B;AACU,UAAA1sE,EAAM6lE,EAAY,GAClB7lE,EAAM4lE,EAAW,GACb36C,EAAM,KAAK,IACTvB,IAAO8pD,KACTxrC,KAAS/c,EAAM,GACfvB,KAAQuB,EAAM,KACLA,EAAM,KAAK,KAAK6c,KAAU6mC,MACnC+E,IAAa,OAGf1rC,KAAS/c,EAAM,GACfvB,KAAQuB,EAAM,IAEZA,EAAM,KAAK,IACT6c,IAAS6mC,MACX5mC,KAAU9c,EAAM,KAGlB8c,KAAU9c,EAAM;AAGpB,QAAI+c,IAAQ,KAAKD,IAAS,KACxBurC,IAASvN,IACTh+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTve,KAAOse,GACPre,KAAQse,KACCA,IAAQ,KACjBsrC,IAASrN,IACTj+B,IAAQ,CAACA,GACTte,KAAQse,KACCD,IAAS,MAClBurC,IAAStN,IACTj+B,IAAS,CAACA,GACVte,KAAOse;AAET;AAAA,MACF,KAAKk+B;AACH,YAAIyG,GAAa;AACf,cAAIzhD,EAAM,KAAK,MAAMpB,KAAS4kD,KAAY3mC,KAAU6mC,IAAY;AAC9D,YAAA+E,IAAa;AACb;AAAA,UACD;AACD,UAAA1zE,EAAM2lE,EAAW,GACjB39B,KAAS/c,EAAM,GACf8c,IAASC,IAAQ0kC;AAAA,QAC3B;AACU,UAAA1sE,EAAM6lE,EAAY,GAClB7lE,EAAM2lE,EAAW,GACb16C,EAAM,KAAK,IACTpB,IAAQ4kD,IACVzmC,KAAS/c,EAAM,IACNA,EAAM,KAAK,KAAK6c,KAAU6mC,MACnC+E,IAAa,MAGf1rC,KAAS/c,EAAM,GAEbA,EAAM,KAAK,IACT6c,IAAS6mC,MACX5mC,KAAU9c,EAAM,KAGlB8c,KAAU9c,EAAM;AAGpB,QAAI+c,IAAQ,KAAKD,IAAS,KACxBurC,IAAStN,IACTj+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTve,KAAOse,GACPre,KAAQse,KACCA,IAAQ,KACjBsrC,IAASpN,IACTl+B,IAAQ,CAACA,GACTte,KAAQse,KACCD,IAAS,MAClBurC,IAASvN,IACTh+B,IAAS,CAACA,GACVte,KAAOse;AAET;AAAA,MAGF,KAAK09B;AACH,aAAK,KAAKx6C,EAAM,GAAGA,EAAM,CAAC,GAC1ByoD,IAAa;AACb;AAAA,MAGF,KAAKhO;AACH,aAAK,KAAK0F,GAAgBC,CAAQ,GAAG73D,CAAK,GAC1CkgE,IAAa;AACb;AAAA,MAGF,KAAKlO;AACH,YAAI,CAACv6C,EAAM,KAAK,CAACA,EAAM,GAAG;AACxB,UAAAyoD,IAAa;AACb;AAAA,QACD;AACD,QAAAnwD,IAASqnD,GAAU,KAAK,OAAO,GAC/BlhD,IAAO8hD,EAAQ,SAASjoD,EAAO,MAC/BkG,IAAM+hD,EAAQ,SAASjoD,EAAO,KAC9BykB,IAAQwpC,EAAY,UACpBzpC,IAASypC,EAAY,WACjBvmD,EAAM,IAAI,IACZqoD,IAASroD,EAAM,IAAI,IAAIg7C,KAAoBF,KAClC96C,EAAM,IAAI,MACnBvB,KAAQse,GACRsrC,IAASroD,EAAM,IAAI,IAAIi7C,KAAoBF,KAEzC/6C,EAAM,IAAI,MACZxB,KAAOse,IAIJ,KAAK,YACR0hC,GAAY,KAAK,SAASpD,EAAY,GACtC,KAAK,UAAU,IACX,KAAK,WACP,KAAK,aAAa,IAAM,EAAI;AAGhC;AAAA,IACH;AACD,IAAIqN,MACFlC,EAAY,QAAQxpC,GACpBwpC,EAAY,SAASzpC,GACrBypC,EAAY,OAAO9nD,GACnB8nD,EAAY,MAAM/nD,GAClB,KAAK,SAAS6pD,GACd,KAAK,cAAa,IAIpBvK,GAAQsC,GAAU,SAAUtkE,GAAG;AAC7B,MAAAA,EAAE,SAASA,EAAE,MACbA,EAAE,SAASA,EAAE;AAAA,IACnB,CAAK;AAAA,EACF;AACH,GAEI6sE,KAAU;AAAA;AAAA,EAEZ,MAAM,WAAgB;AACpB,WAAI,KAAK,SAAS,CAAC,KAAK,WAAW,CAAC,KAAK,aACvC,KAAK,UAAU,IACf,KAAK,aAAa,IAAM,EAAI,GACxB,KAAK,QAAQ,SACfpK,GAAS,KAAK,SAAShD,EAAW,GAEpCiD,GAAY,KAAK,SAASpD,EAAY,GACtC,KAAK,eAAe,KAAK,kBAAkB,IAEtC;AAAA,EACR;AAAA;AAAA,EAED,OAAO,WAAiB;AACtB,WAAI,KAAK,SAAS,CAAC,KAAK,aACtB,KAAK,YAAY2C,GAAO,CAAE,GAAE,KAAK,gBAAgB,GACjD,KAAK,aAAaA,GAAO,CAAE,GAAE,KAAK,iBAAiB,GACnD,KAAK,cAAcA,GAAO,CAAE,GAAE,KAAK,kBAAkB,GACrD,KAAK,aAAY,GACb,KAAK,WACP,KAAK,cAAa,IAGf;AAAA,EACR;AAAA;AAAA,EAED,OAAO,WAAiB;AACtB,WAAI,KAAK,WAAW,CAAC,KAAK,aACxBA,GAAO,KAAK,aAAa;AAAA,MACvB,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IAChB,CAAO,GACD,KAAK,UAAU,IACf,KAAK,cAAa,GAClB,KAAK,YAAY,IAAM,EAAI,GAG3B,KAAK,aAAY,GACjBS,GAAY,KAAK,SAASjD,EAAW,GACrCgD,GAAS,KAAK,SAASnD,EAAY,IAE9B;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,SAAiBpiB,GAAK;AAC7B,QAAI4vB,IAAc,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACtF,WAAI,CAAC,KAAK,YAAY5vB,MAChB,KAAK,UACP,KAAK,QAAQ,MAAMA,IAEjB4vB,KACF,KAAK,MAAM5vB,GACX,KAAK,MAAM,MAAMA,GACb,KAAK,UACP,KAAK,aAAa,MAAMA,GACxB8kB,GAAQ,KAAK,UAAU,SAAUpsD,GAAS;AACxC,MAAAA,EAAQ,qBAAqB,KAAK,EAAE,CAAC,EAAE,MAAMsnC;AAAA,IACzD,CAAW,OAGC,KAAK,UACP,KAAK,WAAW,KAElB,KAAK,QAAQ,OAAO,MACpB,KAAK,SAAQ,GACb,KAAK,KAAKA,CAAG,KAGV;AAAA,EACR;AAAA;AAAA,EAED,QAAQ,WAAkB;AACxB,WAAI,KAAK,SAAS,KAAK,aACrB,KAAK,WAAW,IAChBwlB,GAAY,KAAK,SAASrD,EAAc,IAEnC;AAAA,EACR;AAAA;AAAA,EAED,SAAS,WAAmB;AAC1B,WAAI,KAAK,SAAS,CAAC,KAAK,aACtB,KAAK,WAAW,IAChBoD,GAAS,KAAK,SAASpD,EAAc,IAEhC;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,SAAS,WAAmB;AAC1B,QAAIzpD,IAAU,KAAK;AACnB,WAAKA,EAAQ2oD,EAAS,KAGtB3oD,EAAQ2oD,EAAS,IAAI,QACjB,KAAK,SAAS,KAAK,aACrB3oD,EAAQ,MAAM,KAAK,cAErB,KAAK,SAAQ,GACN,QAPE;AAAA,EAQV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,MAAM,SAAcm3D,GAAS;AAC3B,QAAIC,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAID,GAC9EE,IAAmB,KAAK,YAC1BtqD,IAAOsqD,EAAiB,MACxBvqD,IAAMuqD,EAAiB;AACzB,WAAO,KAAK,OAAOx1E,GAAYs1E,CAAO,IAAIA,IAAUpqD,IAAO,OAAOoqD,CAAO,GAAGt1E,GAAYu1E,CAAO,IAAIA,IAAUtqD,IAAM,OAAOsqD,CAAO,CAAC;AAAA,EACnI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,QAAQ,SAAgB50E,GAAG;AACzB,QAAIoI,IAAI,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIpI,GACxEkyE,IAAa,KAAK,YAClBh9B,IAAU;AACd,WAAAl1C,IAAI,OAAOA,CAAC,GACZoI,IAAI,OAAOA,CAAC,GACR,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,YAC3C3I,GAASO,CAAC,MACZkyE,EAAW,OAAOlyE,GAClBk1C,IAAU,KAERz1C,GAAS2I,CAAC,MACZ8pE,EAAW,MAAM9pE,GACjB8sC,IAAU,KAERA,KACF,KAAK,aAAa,EAAI,IAGnB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,MAAM,SAAcuvB,GAAOqQ,GAAgB;AACzC,QAAI5C,IAAa,KAAK;AACtB,WAAAzN,IAAQ,OAAOA,CAAK,GAChBA,IAAQ,IACVA,IAAQ,KAAK,IAAIA,KAEjBA,IAAQ,IAAIA,GAEP,KAAK,OAAOyN,EAAW,QAAQzN,IAAQyN,EAAW,cAAc,MAAM4C,CAAc;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,QAAQ,SAAgBrQ,GAAOsQ,GAAOD,GAAgB;AACpD,QAAI5vE,IAAU,KAAK,SACjBgtE,IAAa,KAAK,YAChBrpC,IAAQqpC,EAAW,OACrBtpC,IAASspC,EAAW,QACpBrD,IAAeqD,EAAW,cAC1BpD,IAAgBoD,EAAW;AAE7B,QADAzN,IAAQ,OAAOA,CAAK,GAChBA,KAAS,KAAK,KAAK,SAAS,CAAC,KAAK,YAAYv/D,EAAQ,UAAU;AAClE,UAAI+oE,IAAWY,IAAepK,GAC1ByJ,IAAYY,IAAgBrK;AAChC,UAAI/2B,GAAc,KAAK,SAASg7B,IAAY;AAAA,QAC1C,OAAOjE;AAAA,QACP,UAAU57B,IAAQgmC;AAAA,QAClB,eAAeiG;AAAA,MAChB,CAAA,MAAM;AACL,eAAO;AAET,UAAIA,GAAgB;AAClB,YAAI5I,IAAW,KAAK,UAChB9nD,IAASqnD,GAAU,KAAK,OAAO,GAC/BuJ,IAAS9I,KAAY,OAAO,KAAKA,CAAQ,EAAE,SAASiB,GAAkBjB,CAAQ,IAAI;AAAA,UACpF,OAAO4I,EAAe;AAAA,UACtB,OAAOA,EAAe;AAAA,QAChC;AAGQ,QAAA5C,EAAW,SAASjE,IAAWplC,OAAWmsC,EAAO,QAAQ5wD,EAAO,OAAO8tD,EAAW,QAAQrpC,IAC1FqpC,EAAW,QAAQhE,IAAYtlC,OAAYosC,EAAO,QAAQ5wD,EAAO,MAAM8tD,EAAW,OAAOtpC;AAAA,MAC1F;AAAM,QAAI2gC,GAAcwL,CAAK,KAAKt1E,GAASs1E,EAAM,CAAC,KAAKt1E,GAASs1E,EAAM,CAAC,KACtE7C,EAAW,SAASjE,IAAWplC,OAAWksC,EAAM,IAAI7C,EAAW,QAAQrpC,IACvEqpC,EAAW,QAAQhE,IAAYtlC,OAAYmsC,EAAM,IAAI7C,EAAW,OAAOtpC,OAGvEspC,EAAW,SAASjE,IAAWplC,KAAS,GACxCqpC,EAAW,QAAQhE,IAAYtlC,KAAU;AAE3C,MAAAspC,EAAW,QAAQjE,GACnBiE,EAAW,SAAShE,GACpB,KAAK,aAAa,EAAI;AAAA,IACvB;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,QAAQ,SAAgBL,GAAQ;AAC9B,WAAO,KAAK,UAAU,KAAK,UAAU,UAAU,KAAK,OAAOA,CAAM,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,UAAU,SAAkBA,GAAQ;AAClC,WAAAA,IAAS,OAAOA,CAAM,GAClBpuE,GAASouE,CAAM,KAAK,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,cACnE,KAAK,UAAU,SAASA,IAAS,KACjC,KAAK,aAAa,IAAM,EAAI,IAEvB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,QAAQ,SAAgBoH,GAAS;AAC/B,QAAIhsC,IAAS,KAAK,UAAU;AAC5B,WAAO,KAAK,MAAMgsC,GAASx1E,GAASwpC,CAAM,IAAIA,IAAS,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,QAAQ,SAAgBisC,GAAS;AAC/B,QAAIlsC,IAAS,KAAK,UAAU;AAC5B,WAAO,KAAK,MAAMvpC,GAASupC,CAAM,IAAIA,IAAS,GAAGksC,CAAO;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,OAAO,SAAelsC,GAAQ;AAC5B,QAAIC,IAAS,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAID,GAC7Ew7B,IAAY,KAAK,WACjBoO,IAAc;AAClB,WAAA5pC,IAAS,OAAOA,CAAM,GACtBC,IAAS,OAAOA,CAAM,GAClB,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,aAC3CxpC,GAASupC,CAAM,MACjBw7B,EAAU,SAASx7B,GACnB4pC,IAAc,KAEZnzE,GAASwpC,CAAM,MACjBu7B,EAAU,SAASv7B,GACnB2pC,IAAc,KAEZA,KACF,KAAK,aAAa,IAAM,EAAI,IAGzB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS,WAAmB;AAC1B,QAAIuC,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,IAC9EjwE,IAAU,KAAK,SACjBs/D,IAAY,KAAK,WACjB0N,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBjmE;AACJ,QAAI,KAAK,SAAS,KAAK,SAAS;AAC9B,MAAAA,IAAO;AAAA,QACL,GAAGimE,EAAY,OAAOH,EAAW;AAAA,QACjC,GAAGG,EAAY,MAAMH,EAAW;AAAA,QAChC,OAAOG,EAAY;AAAA,QACnB,QAAQA,EAAY;AAAA,MAC5B;AACM,UAAI5N,IAAQD,EAAU,QAAQA,EAAU;AAIxC,UAHAoF,GAAQx9D,GAAM,SAAUzG,GAAGH,GAAG;AAC5B,QAAA4G,EAAK5G,CAAC,IAAIG,IAAI8+D;AAAA,MACtB,CAAO,GACG0Q,GAAS;AAGX,YAAIxsC,IAAS,KAAK,MAAMv8B,EAAK,IAAIA,EAAK,MAAM,GACxCse,IAAQ,KAAK,MAAMte,EAAK,IAAIA,EAAK,KAAK;AAC1C,QAAAA,EAAK,IAAI,KAAK,MAAMA,EAAK,CAAC,GAC1BA,EAAK,IAAI,KAAK,MAAMA,EAAK,CAAC,GAC1BA,EAAK,QAAQse,IAAQte,EAAK,GAC1BA,EAAK,SAASu8B,IAASv8B,EAAK;AAAA,MAC7B;AAAA,IACP;AACM,MAAAA,IAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO;AAAA,QACP,QAAQ;AAAA,MAChB;AAEI,WAAIlH,EAAQ,cACVkH,EAAK,SAASo4D,EAAU,UAAU,IAEhCt/D,EAAQ,aACVkH,EAAK,SAASo4D,EAAU,UAAU,GAClCp4D,EAAK,SAASo4D,EAAU,UAAU,IAE7Bp4D;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS,SAAiBA,GAAM;AAC9B,QAAIlH,IAAU,KAAK,SACjBs/D,IAAY,KAAK,WACjB0N,IAAa,KAAK,YAChBG,IAAc,CAAA;AAClB,QAAI,KAAK,SAAS,CAAC,KAAK,YAAY9I,GAAcn9D,CAAI,GAAG;AACvD,UAAIwmE,IAAc;AAClB,MAAI1tE,EAAQ,aACNzF,GAAS2M,EAAK,MAAM,KAAKA,EAAK,WAAWo4D,EAAU,WACrDA,EAAU,SAASp4D,EAAK,QACxBwmE,IAAc,KAGd1tE,EAAQ,aACNzF,GAAS2M,EAAK,MAAM,KAAKA,EAAK,WAAWo4D,EAAU,WACrDA,EAAU,SAASp4D,EAAK,QACxBwmE,IAAc,KAEZnzE,GAAS2M,EAAK,MAAM,KAAKA,EAAK,WAAWo4D,EAAU,WACrDA,EAAU,SAASp4D,EAAK,QACxBwmE,IAAc,MAGdA,KACF,KAAK,aAAa,IAAM,EAAI;AAE9B,UAAInO,IAAQD,EAAU,QAAQA,EAAU;AACxC,MAAI/kE,GAAS2M,EAAK,CAAC,MACjBimE,EAAY,OAAOjmE,EAAK,IAAIq4D,IAAQyN,EAAW,OAE7CzyE,GAAS2M,EAAK,CAAC,MACjBimE,EAAY,MAAMjmE,EAAK,IAAIq4D,IAAQyN,EAAW,MAE5CzyE,GAAS2M,EAAK,KAAK,MACrBimE,EAAY,QAAQjmE,EAAK,QAAQq4D,IAE/BhlE,GAAS2M,EAAK,MAAM,MACtBimE,EAAY,SAASjmE,EAAK,SAASq4D,IAErC,KAAK,eAAe4N,CAAW;AAAA,IAChC;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,kBAAkB,WAA4B;AAC5C,WAAO,KAAK,QAAQxI,GAAO,CAAE,GAAE,KAAK,aAAa,IAAI;EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,cAAc,WAAwB;AACpC,WAAO,KAAK,QAAQA,GAAO,CAAE,GAAE,KAAK,SAAS,IAAI;EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,eAAe,WAAyB;AACtC,QAAIqI,IAAa,KAAK,YAClB9lE,IAAO,CAAA;AACX,WAAI,KAAK,SACPw9D,GAAQ,CAAC,QAAQ,OAAO,SAAS,UAAU,gBAAgB,eAAe,GAAG,SAAUjkE,GAAG;AACxF,MAAAyG,EAAKzG,CAAC,IAAIusE,EAAWvsE,CAAC;AAAA,IAC9B,CAAO,GAEIyG;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,eAAe,SAAuBA,GAAM;AAC1C,QAAI8lE,IAAa,KAAK,YAClB3E,IAAc2E,EAAW;AAC7B,WAAI,KAAK,SAAS,CAAC,KAAK,YAAY3I,GAAcn9D,CAAI,MAChD3M,GAAS2M,EAAK,IAAI,MACpB8lE,EAAW,OAAO9lE,EAAK,OAErB3M,GAAS2M,EAAK,GAAG,MACnB8lE,EAAW,MAAM9lE,EAAK,MAEpB3M,GAAS2M,EAAK,KAAK,KACrB8lE,EAAW,QAAQ9lE,EAAK,OACxB8lE,EAAW,SAAS9lE,EAAK,QAAQmhE,KACxB9tE,GAAS2M,EAAK,MAAM,MAC7B8lE,EAAW,SAAS9lE,EAAK,QACzB8lE,EAAW,QAAQ9lE,EAAK,SAASmhE,IAEnC,KAAK,aAAa,EAAI,IAEjB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,gBAAgB,WAA0B;AACxC,QAAI8E,IAAc,KAAK,aACnBjmE;AACJ,WAAI,KAAK,SAAS,KAAK,YACrBA,IAAO;AAAA,MACL,MAAMimE,EAAY;AAAA,MAClB,KAAKA,EAAY;AAAA,MACjB,OAAOA,EAAY;AAAA,MACnB,QAAQA,EAAY;AAAA,IAC5B,IAEWjmE,KAAQ,CAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,gBAAgB,SAAwBA,GAAM;AAC5C,QAAIimE,IAAc,KAAK,aACnB9E,IAAc,KAAK,QAAQ,aAC3B6H,GACAC;AACJ,WAAI,KAAK,SAAS,KAAK,WAAW,CAAC,KAAK,YAAY9L,GAAcn9D,CAAI,MAChE3M,GAAS2M,EAAK,IAAI,MACpBimE,EAAY,OAAOjmE,EAAK,OAEtB3M,GAAS2M,EAAK,GAAG,MACnBimE,EAAY,MAAMjmE,EAAK,MAErB3M,GAAS2M,EAAK,KAAK,KAAKA,EAAK,UAAUimE,EAAY,UACrD+C,IAAe,IACf/C,EAAY,QAAQjmE,EAAK,QAEvB3M,GAAS2M,EAAK,MAAM,KAAKA,EAAK,WAAWimE,EAAY,WACvDgD,IAAgB,IAChBhD,EAAY,SAASjmE,EAAK,SAExBmhE,MACE6H,IACF/C,EAAY,SAASA,EAAY,QAAQ9E,IAChC8H,MACThD,EAAY,QAAQA,EAAY,SAAS9E,KAG7C,KAAK,cAAa,IAEb;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,kBAAkB,WAA4B;AAC5C,QAAIroE,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAClF,QAAI,CAAC,KAAK,SAAS,CAAC,OAAO;AACzB,aAAO;AAET,QAAIgtE,IAAa,KAAK,YAClBl1D,IAASmxD,GAAgB,KAAK,OAAO,KAAK,WAAW+D,GAAYhtE,CAAO;AAG5E,QAAI,CAAC,KAAK;AACR,aAAO8X;AAET,QAAIs4D,IAAgB,KAAK,QAAQpwE,EAAQ,OAAO,GAC9CqwE,IAAWD,EAAc,GACzBE,IAAWF,EAAc,GACzBG,IAAeH,EAAc,OAC7BI,IAAgBJ,EAAc,QAC5B7Q,IAAQznD,EAAO,QAAQ,KAAK,MAAMk1D,EAAW,YAAY;AAC7D,IAAIzN,MAAU,MACZ8Q,KAAY9Q,GACZ+Q,KAAY/Q,GACZgR,KAAgBhR,GAChBiR,KAAiBjR;AAEnB,QAAI8I,IAAckI,IAAeC,GAC7BlvB,IAAW8mB,GAAiB;AAAA,MAC9B,aAAaC;AAAA,MACb,OAAOroE,EAAQ,YAAY;AAAA,MAC3B,QAAQA,EAAQ,aAAa;AAAA,IACnC,CAAK,GACG6qE,IAAWzC,GAAiB;AAAA,MAC9B,aAAaC;AAAA,MACb,OAAOroE,EAAQ,YAAY;AAAA,MAC3B,QAAQA,EAAQ,aAAa;AAAA,IAC9B,GAAE,OAAO,GACNutE,IAAoBnF,GAAiB;AAAA,MACrC,aAAaC;AAAA,MACb,OAAOroE,EAAQ,UAAUu/D,MAAU,IAAIznD,EAAO,QAAQy4D;AAAA,MACtD,QAAQvwE,EAAQ,WAAWu/D,MAAU,IAAIznD,EAAO,SAAS04D;AAAA,IACjE,CAAO,GACD7sC,IAAQ4pC,EAAkB,OAC1B7pC,IAAS6pC,EAAkB;AAC7B,IAAA5pC,IAAQ,KAAK,IAAI2d,EAAS,OAAO,KAAK,IAAIupB,EAAS,OAAOlnC,CAAK,CAAC,GAChED,IAAS,KAAK,IAAI4d,EAAS,QAAQ,KAAK,IAAIupB,EAAS,QAAQnnC,CAAM,CAAC;AACpE,QAAIinC,IAAS,SAAS,cAAc,QAAQ,GACxCC,IAAUD,EAAO,WAAW,IAAI;AACpC,IAAAA,EAAO,QAAQ9F,GAAuBlhC,CAAK,GAC3CgnC,EAAO,SAAS9F,GAAuBnhC,CAAM,GAC7CknC,EAAQ,YAAY5qE,EAAQ,aAAa,eACzC4qE,EAAQ,SAAS,GAAG,GAAGjnC,GAAOD,CAAM;AACpC,QAAI+sC,IAAwBzwE,EAAQ,uBAClCgqE,IAAwByG,MAA0B,SAAS,KAAOA,GAClEvG,IAAwBlqE,EAAQ;AAClC,IAAA4qE,EAAQ,wBAAwBZ,GAC5BE,MACFU,EAAQ,wBAAwBV;AAIlC,QAAIwG,IAAc54D,EAAO,OACrB64D,IAAe74D,EAAO,QAGtB84D,IAAOP,GACPQ,IAAOP,GACPQ,IACAC,IAGAC,GACAC,GACAC,GACAC;AACJ,IAAIP,KAAQ,CAACL,KAAgBK,IAAOF,KAClCE,IAAO,GACPE,KAAW,GACXE,IAAO,GACPE,IAAW,KACFN,KAAQ,KACjBI,IAAO,CAACJ,GACRA,IAAO,GACPE,KAAW,KAAK,IAAIJ,GAAaH,IAAeK,CAAI,GACpDM,IAAWJ,MACFF,KAAQF,MACjBM,IAAO,GACPF,KAAW,KAAK,IAAIP,GAAcG,IAAcE,CAAI,GACpDM,IAAWJ,KAETA,MAAY,KAAKD,KAAQ,CAACL,KAAiBK,IAAOF,KACpDE,IAAO,GACPE,KAAY,GACZE,IAAO,GACPE,IAAY,KACHN,KAAQ,KACjBI,IAAO,CAACJ,GACRA,IAAO,GACPE,KAAY,KAAK,IAAIJ,GAAcH,IAAgBK,CAAI,GACvDM,IAAYJ,MACHF,KAAQF,MACjBM,IAAO,GACPF,KAAY,KAAK,IAAIP,GAAeG,IAAeE,CAAI,GACvDM,IAAYJ;AAEd,QAAIz0E,IAAS,CAACs0E,GAAMC,GAAMC,IAAUC,EAAS;AAG7C,QAAIG,IAAW,KAAKC,IAAY,GAAG;AACjC,UAAIC,IAAQztC,IAAQ4sC;AACpB,MAAAj0E,EAAO,KAAK00E,IAAOI,GAAOH,IAAOG,GAAOF,IAAWE,GAAOD,IAAYC,CAAK;AAAA,IAC5E;AAID,WAAAxG,EAAQ,UAAU,MAAMA,GAAS,CAAC9yD,CAAM,EAAE,OAAOmoD,GAAmB3jE,EAAO,IAAI,SAAU4uE,GAAO;AAC9F,aAAO,KAAK,MAAMrG,GAAuBqG,CAAK,CAAC;AAAA,IACrD,CAAK,CAAC,CAAC,CAAC,GACGP;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,gBAAgB,SAAwBtC,GAAa;AACnD,QAAIroE,IAAU,KAAK;AACnB,WAAI,CAAC,KAAK,YAAY,CAAC7F,GAAYkuE,CAAW,MAE5CroE,EAAQ,cAAc,KAAK,IAAI,GAAGqoE,CAAW,KAAK,KAC9C,KAAK,UACP,KAAK,YAAW,GACZ,KAAK,WACP,KAAK,cAAa,KAIjB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,aAAa,SAAqBgJ,GAAM;AACtC,QAAIrxE,IAAU,KAAK,SACjBsxE,IAAU,KAAK,SACfC,IAAO,KAAK;AACd,QAAI,KAAK,SAAS,CAAC,KAAK,UAAU;AAChC,UAAIC,IAAYH,MAAS9O,IACrBkP,IAAUzxE,EAAQ,WAAWqxE,MAAS7O;AAC1C,MAAA6O,IAAOG,KAAaC,IAAUJ,IAAO5O,IACrCziE,EAAQ,WAAWqxE,GACnB5L,GAAQ6L,GAASjP,IAAagP,CAAI,GAClCr+D,GAAYs+D,GAASxP,IAAY0P,CAAS,GAC1Cx+D,GAAYs+D,GAASlP,IAAYqP,CAAO,GACnCzxE,EAAQ,mBAEXylE,GAAQ8L,GAAMlP,IAAagP,CAAI,GAC/Br+D,GAAYu+D,GAAMzP,IAAY0P,CAAS,GACvCx+D,GAAYu+D,GAAMnP,IAAYqP,CAAO;AAAA,IAExC;AACD,WAAO;AAAA,EACR;AACH,GAEIC,KAAiB5Q,GAAO,SACxB6Q,KAAuB,2BAAY;AAMrC,WAASA,EAAQr5D,GAAS;AACxB,QAAItY,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAElF,QADAomD,GAAgB,MAAMurB,CAAO,GACzB,CAACr5D,KAAW,CAACurD,GAAgB,KAAKvrD,EAAQ,OAAO;AACnD,YAAM,IAAI,MAAM,0EAA0E;AAE5F,SAAK,UAAUA,GACf,KAAK,UAAUqsD,GAAO,CAAE,GAAEX,IAAUK,GAAcrkE,CAAO,KAAKA,CAAO,GACrE,KAAK,UAAU,IACf,KAAK,WAAW,IAChB,KAAK,WAAW,IAChB,KAAK,QAAQ,IACb,KAAK,YAAY,IACjB,KAAK,WAAW,IAChB,KAAK,QAAQ,IACb,KAAK,SAAS,IACd,KAAK,KAAI;AAAA,EACV;AACD,SAAAitD,GAAa0kB,GAAS,CAAC;AAAA,IACrB,KAAK;AAAA,IACL,OAAO,WAAgB;AACrB,UAAIr5D,IAAU,KAAK,SACfyqB,IAAUzqB,EAAQ,QAAQ,YAAW,GACrCsnC;AACJ,UAAI,CAAAtnC,EAAQ2oD,EAAS,GAIrB;AAAA,YADA3oD,EAAQ2oD,EAAS,IAAI,MACjBl+B,MAAY,OAAO;AAQrB,cAPA,KAAK,QAAQ,IAGb6c,IAAMtnC,EAAQ,aAAa,KAAK,KAAK,IACrC,KAAK,cAAcsnC,GAGf,CAACA;AACH;AAIF,UAAAA,IAAMtnC,EAAQ;AAAA,QACf;AAAM,UAAIyqB,MAAY,YAAY,OAAO,sBACxC6c,IAAMtnC,EAAQ;AAEhB,aAAK,KAAKsnC,CAAG;AAAA;AAAA,IACd;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAcA,GAAK;AACxB,UAAI/sC,IAAQ;AACZ,UAAK+sC,GAGL;AAAA,aAAK,MAAMA,GACX,KAAK,YAAY;AACjB,YAAItnC,IAAU,KAAK,SACjBtY,IAAU,KAAK;AAMjB,YALI,CAACA,EAAQ,aAAa,CAACA,EAAQ,aACjCA,EAAQ,mBAAmB,KAIzB,CAACA,EAAQ,oBAAoB,CAAC,OAAO,aAAa;AACpD,eAAK,MAAK;AACV;AAAA,QACD;AAGD,YAAI2jE,GAAgB,KAAK/jB,CAAG,GAAG;AAE7B,UAAIgkB,GAAqB,KAAKhkB,CAAG,IAC/B,KAAK,KAAK2rB,GAAqB3rB,CAAG,CAAC,IAInC,KAAK,MAAK;AAEZ;AAAA,QACD;AAID,YAAIgyB,IAAM,IAAI,kBACVnrC,IAAQ,KAAK,MAAM,KAAK,IAAI;AAChC,aAAK,YAAY,IACjB,KAAK,MAAMmrC,GAMXA,EAAI,UAAUnrC,GACdmrC,EAAI,UAAUnrC,GACdmrC,EAAI,YAAYnrC,GAChBmrC,EAAI,aAAa,WAAY;AAE3B,UAAIA,EAAI,kBAAkB,cAAc,MAAMnO,MAC5CmO,EAAI,MAAK;AAAA,QAEnB,GACMA,EAAI,SAAS,WAAY;AACvB,UAAA/+D,EAAM,KAAK++D,EAAI,QAAQ;AAAA,QAC/B,GACMA,EAAI,YAAY,WAAY;AAC1B,UAAA/+D,EAAM,YAAY,IAClBA,EAAM,MAAM;AAAA,QACpB,GAGU7S,EAAQ,oBAAoB2mE,GAAiB/mB,CAAG,KAAKtnC,EAAQ,gBAC/DsnC,IAAMinB,GAAajnB,CAAG,IAIxBgyB,EAAI,KAAK,OAAOhyB,GAAK,EAAI,GACzBgyB,EAAI,eAAe,eACnBA,EAAI,kBAAkBt5D,EAAQ,gBAAgB,mBAC9Cs5D,EAAI,KAAI;AAAA;AAAA,IACT;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAcvpB,GAAa;AAChC,UAAIroD,IAAU,KAAK,SACjBs/D,IAAY,KAAK,WAIfyM,IAAcD,GAAuBzjB,CAAW,GAChDmW,IAAS,GACT16B,IAAS,GACTC,IAAS;AACb,UAAIgoC,IAAc,GAAG;AAEnB,aAAK,MAAMH,GAAqBvjB,GAAaob,EAAc;AAC3D,YAAIoO,IAAoBpF,GAAiBV,CAAW;AACpD,QAAAvN,IAASqT,EAAkB,QAC3B/tC,IAAS+tC,EAAkB,QAC3B9tC,IAAS8tC,EAAkB;AAAA,MAC5B;AACD,MAAI7xE,EAAQ,cACVs/D,EAAU,SAASd,IAEjBx+D,EAAQ,aACVs/D,EAAU,SAASx7B,GACnBw7B,EAAU,SAASv7B,IAErB,KAAK,MAAK;AAAA,IACX;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAIzrB,IAAU,KAAK,SACjBsnC,IAAM,KAAK,KACTuuB,IAAc71D,EAAQ,aACtBw5D,IAAiBlyB;AACrB,MAAI,KAAK,QAAQ,oBAAoB+mB,GAAiB/mB,CAAG,MAClDuuB,MACHA,IAAc,cAIhB2D,IAAiBjL,GAAajnB,CAAG,IAEnC,KAAK,cAAcuuB,GACnB,KAAK,iBAAiB2D;AACtB,UAAInvB,IAAQ,SAAS,cAAc,KAAK;AACxC,MAAIwrB,MACFxrB,EAAM,cAAcwrB,IAEtBxrB,EAAM,MAAMmvB,KAAkBlyB,GAC9B+C,EAAM,MAAMrqC,EAAQ,OAAO,qBAC3B,KAAK,QAAQqqC,GACbA,EAAM,SAAS,KAAK,MAAM,KAAK,IAAI,GACnCA,EAAM,UAAU,KAAK,KAAK,KAAK,IAAI,GACnCwiB,GAASxiB,GAAOsf,EAAU,GAC1B3pD,EAAQ,WAAW,aAAaqqC,GAAOrqC,EAAQ,WAAW;AAAA,IAC3D;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAIy5D,IAAS,MACTpvB,IAAQ,KAAK;AACjB,MAAAA,EAAM,SAAS,MACfA,EAAM,UAAU,MAChB,KAAK,SAAS;AAId,UAAIqvB,IAAclR,GAAO,aAAa,sCAAsC,KAAKA,GAAO,UAAU,SAAS,GACvG5X,IAAO,SAAcygB,GAAcC,GAAe;AACpD,QAAAjF,GAAOoN,EAAO,WAAW;AAAA,UACvB,cAAcpI;AAAA,UACd,eAAeC;AAAA,UACf,aAAaD,IAAeC;AAAA,QACtC,CAAS,GACDmI,EAAO,mBAAmBpN,GAAO,CAAE,GAAEoN,EAAO,SAAS,GACrDA,EAAO,SAAS,IAChBA,EAAO,QAAQ,IACfA,EAAO,MAAK;AAAA,MACpB;AAGM,UAAIpvB,EAAM,gBAAgB,CAACqvB,GAAa;AACtC,QAAA9oB,EAAKvG,EAAM,cAAcA,EAAM,aAAa;AAC5C;AAAA,MACD;AACD,UAAIsvB,IAAc,SAAS,cAAc,KAAK,GAC1CC,IAAO,SAAS,QAAQ,SAAS;AACrC,WAAK,cAAcD,GACnBA,EAAY,SAAS,WAAY;AAC/B,QAAA/oB,EAAK+oB,EAAY,OAAOA,EAAY,MAAM,GACrCD,KACHE,EAAK,YAAYD,CAAW;AAAA,MAEtC,GACMA,EAAY,MAAMtvB,EAAM,KAInBqvB,MACHC,EAAY,MAAM,UAAU,wJAC5BC,EAAK,YAAYD,CAAW;AAAA,IAE/B;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAgB;AACrB,UAAItvB,IAAQ,KAAK;AACjB,MAAAA,EAAM,SAAS,MACfA,EAAM,UAAU,MAChBA,EAAM,WAAW,YAAYA,CAAK,GAClC,KAAK,QAAQ;AAAA,IACd;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAI,GAAC,KAAK,SAAS,KAAK,QAGxB;AAAA,YAAIrqC,IAAU,KAAK,SACjBtY,IAAU,KAAK,SACf2iD,IAAQ,KAAK,OAGXtiC,IAAY/H,EAAQ,YACpBjc,IAAW,SAAS,cAAc,KAAK;AAC3C,QAAAA,EAAS,YAAY4nE;AACrB,YAAI/E,IAAU7iE,EAAS,cAAc,IAAI,OAAO4kE,IAAW,YAAY,CAAC,GACpE0J,IAASzL,EAAQ,cAAc,IAAI,OAAO+B,IAAW,SAAS,CAAC,GAC/DqQ,IAAUpS,EAAQ,cAAc,IAAI,OAAO+B,IAAW,WAAW,CAAC,GAClEkR,IAAUjT,EAAQ,cAAc,IAAI,OAAO+B,IAAW,WAAW,CAAC,GAClEsQ,IAAOY,EAAQ,cAAc,IAAI,OAAOlR,IAAW,OAAO,CAAC;AAC/D,aAAK,YAAY5gD,GACjB,KAAK,UAAU6+C,GACf,KAAK,SAASyL,GACd,KAAK,UAAU2G,GACf,KAAK,UAAUa,GACf,KAAK,UAAUjT,EAAQ,cAAc,IAAI,OAAO+B,IAAW,WAAW,CAAC,GACvE,KAAK,OAAOsQ,GACZ5G,EAAO,YAAYhoB,CAAK,GAGxBwiB,GAAS7sD,GAAS0pD,EAAY,GAG9B3hD,EAAU,aAAa6+C,GAAS5mD,EAAQ,WAAW,GAGnD8sD,GAAYziB,GAAOsf,EAAU,GAC7B,KAAK,YAAW,GAChB,KAAK,KAAI,GACTjiE,EAAQ,qBAAqB,KAAK,IAAI,GAAGA,EAAQ,kBAAkB,KAAK,KACxEA,EAAQ,cAAc,KAAK,IAAI,GAAGA,EAAQ,WAAW,KAAK,KAC1DA,EAAQ,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAMA,EAAQ,QAAQ,CAAC,CAAC,KAAK,GAC7EmlE,GAASgN,GAASnQ,EAAY,GACzBhiE,EAAQ,UACXmlE,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,SAAS,CAAC,GAAGe,EAAY,GAEnFhiE,EAAQ,UACXmlE,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,SAAS,CAAC,GAAGe,EAAY,GAEpFhiE,EAAQ,cACVmlE,GAASjG,GAAS,GAAG,OAAO+B,IAAW,KAAK,CAAC,GAE1CjhE,EAAQ,aACXmlE,GAASoM,GAAMrP,EAAe,GAE5BliE,EAAQ,mBACVmlE,GAASoM,GAAMnP,EAAU,GACzBqD,GAAQ8L,GAAMlP,IAAanB,EAAU,IAElClhE,EAAQ,qBACXmlE,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,OAAO,CAAC,GAAGe,EAAY,GACpFmD,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,QAAQ,CAAC,GAAGe,EAAY,IAEvF,KAAK,OAAM,GACX,KAAK,QAAQ,IACb,KAAK,YAAYhiE,EAAQ,QAAQ,GAC7BA,EAAQ,YACV,KAAK,KAAI,GAEX,KAAK,QAAQA,EAAQ,IAAI,GACrBtF,GAAWsF,EAAQ,KAAK,KAC1BkmE,GAAY5tD,GAAS+qD,IAAarjE,EAAQ,OAAO;AAAA,UAC/C,MAAM;AAAA,QAChB,CAAS,GAEHwoC,GAAclwB,GAAS+qD,EAAW;AAAA;AAAA,IACnC;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAmB;AACxB,UAAK,KAAK,OAGV;AAAA,aAAK,QAAQ,IACb,KAAK,OAAM,GACX,KAAK,aAAY;AACjB,YAAI+O,IAAa,KAAK,QAAQ;AAC9B,QAAIA,KACFA,EAAW,YAAY,KAAK,OAAO,GAErChN,GAAY,KAAK,SAASpD,EAAY;AAAA;AAAA,IACvC;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAoB;AACzB,MAAI,KAAK,SACP,KAAK,QAAO,GACZ,KAAK,QAAQ,IACb,KAAK,UAAU,MACN,KAAK,UACd,KAAK,YAAY,SAAS,MAC1B,KAAK,SAAS,IACd,KAAK,QAAQ,MACJ,KAAK,aACd,KAAK,IAAI,UAAU,MACnB,KAAK,IAAI,WACA,KAAK,SACd,KAAK,KAAI;AAAA,IAEZ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF,CAAA,GAAG,CAAC;AAAA,IACH,KAAK;AAAA,IACL,OAAO,WAAsB;AAC3B,oBAAO,UAAU0P,IACVC;AAAA,IACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAML,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAqB3xE,GAAS;AACnC,MAAA2kE,GAAOX,IAAUK,GAAcrkE,CAAO,KAAKA,CAAO;AAAA,IACnD;AAAA,EACF,CAAA,CAAC,GACK2xE;AACT;AACAhN,GAAOgN,GAAQ,WAAWjF,IAAQwB,IAASS,IAAQC,IAAUM,IAAQK,EAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzrG5E,UAAM71E,IAAQC,GAgGR04E,IAAkB1yE,EAAyC,IAAI,GAC/D2yE,IAAQ3yE,EAAiD,IAAI,GAC7DivB,IAAUjvB,EAAI,EAAI,GAElB4yE,IAAS,MAAM;;AACnB,OAAAx0E,IAAAs0E,EAAgB,UAAhB,QAAAt0E,EAAuB;AAAA,IAAO,GAG1By0E,IAAU,MAAM;;AACpB,OAAAz0E,IAAAs0E,EAAgB,UAAhB,QAAAt0E,EAAuB;AAAA,IAAQ,GAG3Bsb,IAAU,MAAM;;AACpB,OAAAtb,IAAAs0E,EAAgB,UAAhB,QAAAt0E,EAAuB;AAAA,IAAQ;AAepB,WAAA4yB,EAAA;AAAA,MACX,QAAA4hD;AAAA,MACA,SAAAC;AAAA,MACA,SAAAn5D;AAAA,MACA,cAhBmB,MAAM;;AAClB,gBAAAtb,IAAAs0E,EAAgB,UAAhB,gBAAAt0E,EAAuB;AAAA,MAAa;AAAA,MAgB3C,SAbc,MAAM;;AACb,gBAAAA,IAAAs0E,EAAgB,UAAhB,gBAAAt0E,EAAuB;AAAA,MAAQ;AAAA,MAatC,SAVc,CAACmJ,MAAiC;;AACzC,gBAAAnJ,IAAAs0E,EAAgB,UAAhB,gBAAAt0E,EAAuB,QAAQmJ;AAAA,MAAI;AAAA,IAS1C,CACD,GAEDgD,GAAU,MAAM;AAEd,YAAM,EAAE,gBAAAuoE,GAAgB,KAAAzsC,GAAK,KAAAooC,GAAK,UAAAsE,GAAU,GAAGxrE,EAAS,IAAAxN,GAClDi5E,IAAezrE,GACflH,IAA+B,CAAA;AACrC,iBAAWvD,KAAOyK;AACZ,QAAA,OAAO,UAAU,eAAe,KAAKyrE,GAAcl2E,CAAG,KAAKk2E,EAAal2E,CAAG,MAAM,WAC3EuD,EAAAvD,CAAG,IAAIk2E,EAAal2E,CAAG;AAGnC,MAAA0sB,GAAS,MAAM;AACb,QAAK7uB,GAAOg4E,EAAM,KAAK,MACrBD,EAAgB,QAAQ,IAAIV,GAAQW,EAAM,OAActyE,CAAO,GAC/D4uB,EAAQ,QAAQ;AAAA,MAClB,CACD;AAAA,IAAA,CACF,GAEDgkD,GAAY,MAAM;AACR,MAAAv5D;IAAA,CACT;;;;;;;;;;;;;;;;;;;;ICpJKw5D,KAAyB,KAAK;;;AAFpC,UAAM,EAAE,eAAAjqE,GAAe,mBAAAkB,EAAkB,IAAI/B,GAAU,GAGjD+qE,IAAwB,EAAE,UAAU,UAAU,WAAW,sBAAsB,GAE/EjU,IAAgBP,MAEhB,EAAE,WAAAnkC,MAAc3C,MAEhB0nC,IAAUv/D,EAAS,IAAI,GAEvBozE,IAAWh5E,EAAS,MAAM;;AAC9B,aAAI8kE,EAAc,eAAa9gE,IAAA8gE,EAAc,UAAU,UAAxB,QAAA9gE,EAA+B,gBACrD8gE,EAAc,UAAU,MAAM,aAAa,MAE7C;AAAA,IAAA,CACR,GAEKmU,IAAgB,MAAM;AAC1B,MAAI9T,EAAQ,SACVA,EAAQ,MAAM;IAChB,GAGI+T,IAAiB,MAAM;AAC3B,MAAI/T,EAAQ,SACVA,EAAQ,MAAM;IAChB,GAGIgU,IAAwB,MAAM;AAClC,UAAIhU,EAAQ,SAASL,EAAc,OAAOA,EAAc,WAAW;AACnD,QAAAmU;AACd,cAAM9rE,IAAO+3D;AAAA,UACXC,EAAQ;AAAA,UACRL,EAAc;AAAA,UACdA,EAAc,UAAU,gBAAgB;AAAA,UACxCA,EAAc,UAAU,gBAAgB;AAAA,QAAA;AAElC,QAAAK,EAAA,MAAM,QAAQh4D,CAAI,GACX+rE;MACjB;AAAA,IAAA,GAGIE,IAAU,YAAY;AAC1B,UAAIjU,EAAQ,SAASL,EAAc,OAAOA,EAAc,WAAW;AACjE,cAAMN,IAAMiB;AAAA,UACVN,EAAQ;AAAA,UACRL,EAAc;AAAA,UACdA,EAAc,UAAU,gBAAgB;AAAA,UACxCA,EAAc,UAAU,gBAAgB;AAAA,QAAA;AAEtC,YAAA;AACF,UAAAA,EAAc,WAAW,GACzB,MAAMF,GAAUxkC,GAAWokC,EAAI,IAAIA,CAAG,GACtC31D,EAAc,SAAS,GACvB,WAAW,MAAM;AACf,YAAAi2D,EAAc,uBAAuB;AAAA,aACpC,GAAI;AAAA,iBACAn5D,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAAm5D,EAAc,WAAW;AAAA,QAC3B;AAAA,MACF;AAAA,IAAA,GAGIuU,IAAe,MAAM;AACH,MAAAF,KACRF;IAAA,GAGVK,IAAa,MAAM;AACf,MAAAF;IAAA,GAGJG,IAAcv5E,EAAS,MAAM;;AAC7B,aAAA,GAAA8kE,EAAc,eAAa9gE,IAAA8gE,EAAc,UAAU,UAAxB,QAAA9gE,EAA+B,iBAAgB,CAAC8gE,EAAc;AAAA,IAGtF,CACR;AAED,WAAA+T,GAAY,MAAM;AAChB,MAAI1T,EAAQ,UACVA,EAAQ,MAAM,WACdA,EAAQ,QAAQ;AAAA,IAClB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFK,UAAA,EAAE,GAAAtlE,MAAMC,MAER,EAAE,cAAAu3B,MAAiBC,MAEnB0sC,IAAmB/E,MACnB,EAAE,OAAA3iC,GAAO,QAAA5F,GAAQ,WAAA0oC,GAAW,SAAAvqC,MAAY4O,GAAYugC,CAAgB,GAEpErtC,IAAc,MAAM;AACxB,MAAAqtC,EAAiB,SAAS,IAAI,GAC9BttC,EAAO,QAAQ;AAAA,IAAA,GAGX8iD,IAAU5zE,EAAI,EAAI,GAElB4/B,IAAgB,MAAM;AAClB,MAAAg0C,EAAA,QAAQ,CAACA,EAAQ;AAAA,IAAA,GAGrBC,IAAc,MAAM;AAAA,IAAA,GAIpBn+C,IAAYt7B,EAAS,MAAM;;AAC/B,eAAOgE,IAAAs4B,EAAM,UAAN,gBAAAt4B,EAAa,WAAW,cAAa22B,GAAa;AAAA,IAAA,CAC1D,GAEKwJ,IAAcnkC,EAAS,MACtBs8B,EAAM,QACJA,EAAM,MAAM,WAAW,cADL5B,GAAe,OAEzC,GAEKupC,IAAcjkE,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GACK++C,IAAc15E,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GACKg/C,IAAc35E,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GACKi/C,IAAiB55E,EAAS,MACvBs7B,EAAU,UAAUX,GAAa,QACzC,GAEKyJ,IAAkBpkC,EAAS,MAAM;;AACjC,cAAAgE,IAAAs4B,EAAM,UAAN,QAAAt4B,EAAa,YAAYs4B,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,eAC7E;AAAA,QACL,KAAKA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,QAC7C,OAAOA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,QAC/C,QAAQA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,QAChD,SACEitB,GAAqBjtB,EAAM,MAAM,QAAQ,KACzCA,EAAM,MAAM,SAAS,mBACrBA,EAAM,MAAM,SAAS,gBAAgB,oBACjCA,EAAM,MAAM,SAAS,gBAAgB,oBACrC;AAAA,MAAA,IAGH;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,IACX,CACD,GACKu9C,IAAe75E,EAAS,MACvBs8B,EAAM,QACJA,EAAM,MAAM,MAAM,eADA,EAE1B,GAEK4nC,IAAgBlkE,EAAS,MAAM;;AAC5B,eAAAgE,IAAAs4B,EAAM,UAAN,gBAAAt4B,EAAa,aAAY;AAAA,IAAA,CACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICtFK81E,KAAoBl0E,EAAI,EAAK,GAC7Bm0E,KAAqBn0E,EAAI,EAAK;AAE7B,SAASo0E,KAAwB;AAK/B,SAAA;AAAA,IACL,0BAL+B,MAAM;AAClB,MAAAD,GAAA,QAAQ,CAACA,GAAmB;AAAA,IAAA;AAAA,IAK/C,mBAAAD;AAAA,IACA,oBAAAC;AAAA,EAAA;AAEJ;;;;;;;ACKA,UAAMp6E,IAAQC,GAOR,EAAE,GAAAC,MAAMC,MAERikE,IAASn+D,EAAI,CAAC,YAAY,MAAM,CAAC,GAEjCo+D,IAAmB/E,MACnB,EAAE,OAAA3iC,GAAO,iBAAA4iC,GAAiB,oBAAAC,EAAmB,IAAI17B,GAAYugC,CAAgB,GAE7EnY,IAAoBC,MAEpB1+C,IAAQpN,EAAS,MACd6rD,EAAkB,cAAclsD,EAAM,QAAQ,CACtD,GAEKwE,IAAOnE,EAAiC,MACrCoN,EAAM,MAAM,CAAC,KAAK,IAC1B,GAEKkuB,IAAYt7B,EAAS,MAClB26B,GAAa,KACrB,GAEKspC,IAAcjkE,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GAEKupC,IAAgBlkE,EAA2B,MACxCs8B,EAAM,SAASA,EAAM,MAAM,WAAYA,EAAM,MAAM,WAAyB,IACpF,GAEK,EAAE,oBAAA0E,MAAuBG,MAEzBgjC,IAAsB,MAAM;AAChC,MAAAhF,EAAmB,QAAQ;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvC7B,UAAM37D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERoyB,IAAKU,GAAa,CAAC,GAAG,CAAI,GAAA,EAAE,QAAQ2rC,GAAA,CAAwC,GAE5E,EAAE,qBAAA3vD,MAAwBZ,MAE1Bs2D,IAAS,YAAY;AAErB,UADJpyC,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,QAAAtjB;AACpB;AAAA,MACF;AACA,MAAApL,EAAK,QAAQ;AAAA,IAAA,GAGTy2E,IAAiB,YAAY;AAE7B,UADJ/nD,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,QAAAtjB;AACpB;AAAA,MACF;AACA,MAAApL,EAAK,gBAAgB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVvB,UAAMA,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERkkE,IAAmB/E,MACnB,EAAE,WAAAG,EAAA,IAAc37B,GAAYugC,CAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtClD,UAAMrkE,IAAQC,GAaR4D,IAAOC,GAIPizB,IAAS9wB,EAAI,EAAK,GAElByP,IAAU,CAACD,MAAiB;AAE5B,UADJD,GAAeC,CAAK,GAChB,CAACzV,EAAM,aAAa;AACtB,QAAA6D,EAAK,SAAS;AACd;AAAA,MACF;AACA,MAAAkzB,EAAO,QAAQ;AAAA,IAAA,GAEX1mB,IAAY,MAAM;AACtB,MAAAxM,EAAK,SAAS,GACdkzB,EAAO,QAAQ;AAAA,IAAA,GAGXvwB,IAAW,MAAM;AACrB,MAAAuwB,EAAO,QAAQ;AAAA,IAAA,GAGX,EAAE,GAAA72B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6ECORo6E,KAAqB,KAAK;;;;;;;;;;;;AApBhC,UAAMv6E,IAAQC,GAcR4D,IAAOC,GAIP,EAAE,mBAAAsM,GAAmB,eAAAlB,EAAc,IAAIb,GAAU,GAIjD,EAAE,GAAAnO,MAAMC,MAER,EAAE,cAAAu3B,MAAiBC,MAEnB0sC,IAAmB/E,MACnB,EAAE,WAAAG,GAAW,SAAAvqC,GAAS,OAAOslD,MAAgB12C,GAAYugC,CAAgB,GACzEoW,IAAex0E,EAAI,EAAK,GAExBimD,IAAoBC,MACpB,EAAE,mBAAAguB,MAAsBE,MAExB5sE,IAAQpN,EAAS,MACd6rD,EAAkB,cAAclsD,EAAM,QAAQ,CACtD,GAEKwE,IAAOnE,EAAiC,MACrCoN,EAAM,MAAM,CAAC,KAAK,IAC1B,GAEKkvB,IAAQt8B,EAAoC,MAC5C,CAACmE,EAAK,SAAS,CAACA,EAAK,MAAM,UAAgB,OAC3Ck2E,EAAO,SAASF,EAAY,QAAcA,EAAY,QACnD;AAAA,MACL,IAAIh2E,EAAK,MAAM;AAAA,MACf,OAAO;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,WAAWA,EAAK,MAAM;AAAA,QACtB,aAAaA,EAAK,MAAM;AAAA,MAC1B;AAAA,MACA,OAAO;AAAA,QACL,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,MACA,SAASA,EAAK,MAAM;AAAA,MACpB,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,MACX,UAAU;AAAA,QACR,mBAAmB,CAAC;AAAA,QACpB,oBAAoB,CAAC;AAAA,QACrB,YAAY,CAAC;AAAA,MACf;AAAA,MACA,sBAAsB;AAAA,MACtB,qBAAqB;AAAA,QACnB,uBAAuB,CAAC;AAAA,QACxB,WAAW,CAAC;AAAA,QACZ,SAAS;AAAA,QACT,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,MACf,SAAS;AAAA,MACT,WAAW+M,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,WAAW;AAAA,MACX,YAAY;AAAA,IAAA,CAEf,GAEKsoE,IAAU5zE,EAAI,EAAI,GAElB4/B,IAAgB,MAAM;AAClB,MAAAg0C,EAAA,QAAQ,CAACA,EAAQ;AAAA,IAAA,GAGrBC,IAAc,MAAM;AAAA,IAAA,GAIpBn+C,IAAYt7B,EAAS,MAAM;;AAC/B,eAAOgE,KAAAs4B,EAAM,UAAN,gBAAAt4B,GAAa,WAAW,cAAa22B,GAAa;AAAA,IAAA,CAC1D,GAEKwJ,IAAcnkC,EAAS,MACtBs8B,EAAM,QACJA,EAAM,MAAM,WAAW,cADL5B,GAAe,OAEzC,GAEKupC,IAAcjkE,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GACK++C,IAAc15E,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GACKg/C,KAAc35E,EAAS,MACpBs7B,EAAU,UAAUX,GAAa,KACzC,GACKi/C,KAAiB55E,EAAS,MACvBs7B,EAAU,UAAUX,GAAa,QACzC,GAEKyJ,IAAkBpkC,EAAS,MAAM;;AACjC,cAAAgE,KAAAG,EAAK,UAAL,QAAAH,GAAY,eACP;AAAA,QACL,KAAKG,EAAK,MAAM,aAAa;AAAA,QAC7B,OAAOA,EAAK,MAAM,aAAa,kBAAkB;AAAA,QACjD,QAAQA,EAAK,MAAM,aAAa,mBAAmB;AAAA,QACnD,SACEolD,IAAqBrlD,KAAAo4B,EAAM,UAAN,gBAAAp4B,GAAa,QAAQ,OAC1C2I,KAAAyvB,EAAM,UAAN,QAAAzvB,GAAa,SAAS,sBACtByH,KAAAgoB,EAAM,UAAN,QAAAhoB,GAAa,SAAS,gBAAgB,qBAClCgoB,EAAM,MAAM,SAAS,gBAAgB,oBACrC;AAAA,MAAA,IAGH;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,IACX,CACD,GAEK4nC,IAAgBlkE,EAAS,MAAM;;AAC5B,eAAAgE,KAAAs4B,EAAM,UAAN,gBAAAt4B,GAAa,aAAY;AAAA,IAAA,CACjC,GAEKs2E,IAAat6E,EAAS,MAExB,CAACO,GAAO4D,EAAK,KAAK,KAAK,CAACglD,GAAsB,YAAYA,GAAsB,OAAO,EAAE,SAAShlD,EAAK,MAAM,MAAM,CAEtH,GACKo2E,IAAUv6E,EAAS,MAChB,CAACO,GAAO4D,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWglD,GAAsB,OAC3E,GACKkxB,IAASr6E,EAAS,MACf,CAACO,GAAO4D,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWglD,GAAsB,QAC3E,GACKqxB,IAAWx6E,EAAS,MACjB,CAACL,EAAM,wBAAwB06E,EAAO,KAC9C,GACKI,IAAYz6E,EAAS,MAClB,CAACO,GAAO4D,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWglD,GAAsB,SAC3E,GACKuxB,IAAiB16E,EAAS,MAAM;;AAC7B,cAAAgE,KAAAG,EAAK,UAAL,gBAAAH,GAAY,SAAS;AAAA,IAAA,CAC7B,GAEK,EAAE,WAAAo8B,MAAc3C,MAEhBk9C,IAAgB,YAAY;AACd,MAAA9uB,EAAA,WAAWlsD,EAAM,QAAQ,GAC3CqkE,EAAiB,SAAS,IAAI,GAC9B8V,EAAkB,QAAQ;AAAA,IAAA,GAGtBc,KAAkB56E,EAAS,MACxB6rD,EAAkB,mBAAmBlsD,EAAM,QAAQ,CAC3D,GAEKk7E,KAAsB76E,EAAS,MAC5B6rD,EAAkB,uBAAuBlsD,EAAM,QAAQ,CAC/D,GAEKm7E,KAAc96E,EAAS,MACpB46E,GAAgB,QAAQC,GAAoB,KACpD,GAEKvW,KAAS,YAAY;AACrB,UAAAl3D,EAAM,MAAM,WAAW;AAQvB,YAAA;AACI,gBAAAq1B,GAAyBrC,GAAWhzB,EAAM,KAAK,GACrDyB,EAAc,SAAS;AAAA,iBAChBlD,IAAO;AACd,UAAAoE,EAAkBpE,EAAK;AAAA,QAAA,UACvB;AAAA,QAEF;AAAA,IAAA,GAGIsuE,KAAiB,YAAY;;AAC7B,UAAA7sE,EAAM,MAAM,WAAW;AAAG;AAQ9B,UAAI2tE,KAAc,IACdh9D,KAAS;AACT,UAAA;AACF,cAAMi9D,KAAoB,MAAMv4C,GAAyBrC,GAAWhzB,EAAM,KAAK;AAC3E,YAAA,CAAC4tE,GAAkB,CAAC;AAChB,gBAAA,IAAI,MAAM,qCAAqC;AAEvD,QAAAnsE,EAAc,SAAS,GACnBpO,IAASuD,KAAAg3E,GAAkB,CAAC,EAAE,eAArB,gBAAAh3E,GAAiC,WAAW,MACvD+2E,KAAcC,GAAkB,CAAC,EAAE,WAAW,YAAY,SAExDA,GAAkB,CAAC,EAAE,QAAQ,SAAS,MAE/Bj9D,MADU,MAAM+6C,GAAqB14B,GAAWzgC,EAAM,WAAWq7E,GAAkB,CAAC,EAAE,OAAO,GAClF,IAAI,CAAC/hB,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI,IAE5Dz1D;AAAA,UACE;AAAA,UACA4J,EAAM,MAAM,IAAI,CAACjJ,QACR;AAAA,YACL,OAAO;AAAA,cACL,aAAA42E;AAAA,cACA,QAAAh9D;AAAA,YACF;AAAA,YACA,KAAK;AAAA,cACH,OAAO5Z,GAAK,UAAU;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,UAAU;AAAA,UAAA,EAEb;AAAA,QAAA,GAGH,MAAMw2E,EAAc;AAAA,eACbhvE,IAAO;AACd,QAAAoE,EAAkBpE,EAAK;AAAA,MAAA,UACvB;AAAA,MAEF;AAAA,IAAA;AAGF,WAAA1G;AAAA,MACEo1E;AAAA,MACA,OAAOv2E,OAAa;;AAClB,YAAI,GAACA,MAAY,GAACE,KAAAG,EAAK,UAAL,QAAAH,GAAY;AAC1B,cAAA;AACF,kBAAMiM,KAAM,MAAMoyB,GAAWjC,GAAWj8B,EAAK,MAAM,OAAO;AAC1D,YAAA6/D,EAAiB,SAAS/zD,EAAG,GAC7BmqE,EAAa,QAAQ;AAAA,mBACd9zE,IAAG;AACV,YAAAyJ,EAAkBzJ,EAAC;AAAA,UACrB;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpB6J,GAAU,MAAM;AACd,MAAAivD,EAAU,QAAQJ,GAA2B;AAAA,IAAA,CAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxQD,UAAMr/D,IAAQC,GA+BR4D,IAAOC,GAIPw3E,IAA6Bt3E;AAAA,MACjCg5D;AAAA,MACA;AAAA,IAAA;AAGE,QAAAv8D,EAAY66E,CAA0B;AAClC,YAAA,IAAI,MAAM,mFAAmF;AAG/F,UAAA,EAAE,GAAAp7E,MAAMC,MAER,EAAE,mBAAAiQ,MAAsB/B,MAGxBw6C,IAAeE,GAA2B/oD,EAAM,UAAU,GAC1D,EAAE,aAAA69D,EAAgB,IAAAhV,GAClB,EAAE,0BAAAiV,EAAA,IAA6B9U,GAAgBH,CAAY,GAC3DqD,IAAoBC,MACpB+S,IAAaf,MACb,EAAE,mBAAAgc,MAAsBE,MAExBtc,IAAW93D,EAAuB,IAAI,GACtCs1E,IAAkBt1E,EAAI,EAAK,GAC3Bu1E,IAAoBv1E,EAAI,EAAK,GAC7Bw1E,IAAiBx1E,EAAI,EAAK,GAC1By1E,IAAuBz1E,EAAI,EAAK,GAChC01E,IAAwB11E,EAAI,EAAK,GAEjC21E,IAAev7E,EAAS,MACrBO,GAAOZ,EAAM,UAAU,CAC/B,GAIKg+D,IAAc/3D,EAAI,EAAE,GAEpB41E,IAAcx7E,EAAS,MACpB6rD,EAAkB,SAASlsD,EAAM,QAAQ,CACjD,GAEK87E,IAA6Bz7E,EAAS,MACnC,EACR,GAEK07E,IAAc17E,EAAS,MACpB,CAACO,GAAOm9D,EAAS,KAAK,CAC9B,GAEKie,IAAiB,MAAM;AAC3B,MAAA9c,EAAW,eAAet9D,GAAMm8D,EAAS,KAAK,CAAC,GAC/C0d,EAAe,QAAQ;AAAA,IAAA,GAGnBQ,KAAgB,MAAM;AAC1B,MAAAT,EAAkB,QAAQ;AAAA,IAAA,GAGtB9yB,KAAS,CAACV,OAAkB;AAChC,MAAAkE,EAAkB,WAAWlsD,EAAM,UAAUA,EAAM,WAAWgoD,EAAK,GACnEmyB,EAAkB,QAAQ;AAAA,IAAA,GAEtB+B,IAAc,CAACl0B,OAAkB;AACrC,MAAAkE,EAAkB,WAAWlsD,EAAM,UAAUA,EAAM,WAAWgoD,EAAK,GACnEmyB,EAAkB,QAAQ;AAAA,IAAA,GAGtB,EAAE,aAAA9wB,GAAa,cAAAC,EAAA,IAAiBH;AAAA,MACpCnuB,GAAa;AAAA,MACbsgD,EAA2B;AAAA,IAAA,GAGvBa,IAAS,OAAOle,IAAkCC,IAA+Bke,KAAQ,OAAU;AAEvG,UADApe,EAAY,QAAQr5B,IACfs5B,MAAYr9D,GAAOm9D,EAAS,KAAK,KAAOE,MAAYme,IAAQ;AACtD,QAAAre,EAAA,QAAQt8D,GAAUw8D,EAAQ,GAC/BF,EAAS,UACXC,EAAY,QAAQF,EAAyBl8D,GAAMm8D,EAAS,KAAK,CAAC;AAEpE;AAAA,MACF;AACA,UAAIG,IAAY;AACV,YAAA;AACF,UAAAH,EAAS,QAAQ,MAAMV,GAAWQ,GAAaK,EAAU;AAAA,iBAClDlyD,IAAO;AACd,UAAAoE,EAAkBpE,EAAK;AAAA,QACzB;AACA,QAAKpL,GAAOm9D,EAAS,KAAK,MACxBC,EAAY,QAAQF,EAAyBl8D,GAAMm8D,EAAS,KAAK,CAAC;AAEpE;AAAA,MACF;AAAA,IAAA,GAGIpgC,IAAQ,MAAM;AAClB,MAAAqgC,EAAY,QAAQr5B,IACpBo5B,EAAS,QAAQ,MACjBl6D,EAAK,qBAAqB,IAAI;AAAA,IAAA;AAGhC,IAAAyB;AAAA,MACE,CAAC,MAAMtF,EAAM,OAAO,MAAMA,EAAM,UAAU;AAAA,MAC1C,OAAO,CAACi+D,IAAUC,EAAU,MAAM;AAC1B,cAAAie,EAAOle,IAAUC,EAAU;AAAA,MACnC;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;AAGd,UAAAme,IAAuB,OAAO7uE,OAAgC;;AAClE,MAAAmuE,EAAsB,QAAQ,IAC9Bzc,EAAW,eAAe,IAAI,GAC9Buc,EAAe,QAAQ;AACvB,UAAIL,KAAc,IACdh9D,KAAS;AACT,UAAA5Q,GAAK,SAAS,SAAS;AACrB,YAAA,CAACA,GAAK,MAAM,CAAC,KAAK,CAACA,GAAK,MAAM,CAAC,EAAE;AAAU;AAC3C,YAAA;AACI,gBAAAguD,KAAW,MAAM94B,GAAWjC,GAAWjzB,GAAK,MAAM,CAAC,EAAE,EAAE;AAC7D,UAAI1M,IAASuD,KAAAm3D,GAAS,SAAS,eAAlB,gBAAAn3D,GAA8B,WAAW,MACpD+2E,KAAc5f,GAAS,SAAS,WAAW,YAAY,KAAK,IAE1DA,GAAS,QAAQ,SAAS,MAEnBp9C,MADU,MAAM+6C,GAAqB14B,GAAWzgC,EAAM,WAAWw7D,GAAS,OAAO,GACtE,IAAI,CAAClC,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI;AAAA,iBAErD3yD,IAAG;AACV,UAAAyJ,EAAkBzJ,EAAC;AAAA,QACrB;AACA,cAAMsiD,KAAgC;AAAA,UACpC,OAAO;AAAA,YACL,aAAAmyB;AAAA,YACA,QAAAh9D;AAAA,UACF;AAAA,UACA,KAAK;AAAA,YACH,OAAO5Q,GAAK,MAAM,CAAC,EAAE,SAAS;AAAA,YAC9B,gBAAgB;AAAA,UAClB;AAAA,UACA,UAAU;AAAA,QAAA;AAEZ,QAAK5M,GAAOZ,EAAM,UAAU,MAC1BipD,GAAM,KAAKjpD,EAAM,aAEnBk/D,EAAW,eAAejW,EAAK,GAC/B0yB,EAAsB,QAAQ;AAAA,MAChC;AAAA,IAAA,GAGItX,IAAmB/E,MACnB,EAAE,SAASgd,GAAc,QAAQC,MAAgBz4C,GAAYugC,CAAgB,GAC7E,EAAE,WAAA5jC,MAAc3C,MAEhBshC,KAAc,OAAOv8B,OAAuB;AAChD,MAAAy5C,EAAa,QAAQ,IACrBC,EAAY,QAAQ;AAChB,UAAA;AACF,cAAM5/C,KAAQ,MAAMiG,GAAmBnC,GAAWoC,EAAW;AAC7D,QAAAwhC,EAAiB,SAAS1nC,EAAK;AAAA,eACxBh2B,IAAG;AACV,QAAAyJ,EAAkBzJ,EAAC;AAAA,MAAA,UACnB;AACA,QAAA21E,EAAa,QAAQ;AAAA,MACvB;AAAA,IAAA,GAGIE,KAAwB,MAAM;AAClC,MAAAtd,EAAW,eAAe,IAAI,GAC9Buc,EAAe,QAAQ;AAAA,IAAA,GAGnBgB,KAA0B,YAAY;AACtC,UAAA,CAAA77E,GAAOs+D,EAAW,WAAW,GACjC;AAAA,QAAAwc,EAAqB,QAAQ;AACzB,YAAA;AACF,gBAAMprE,KAAM4uD,EAAW,YAAY,KAC/B,MAAM3B,GAAYM,GAAaqB,EAAW,YAAY,IAAIA,EAAW,WAAW,IAChF,MAAM5B,GAAYO,GAAaqB,EAAW,WAAW;AACzD,UAAAuc,EAAe,QAAQ,IAClB53E,EAAA,qBAAqByM,GAAI,EAAE,GAChC4uD,EAAW,eAAe,IAAI,GACvBid,EAAA7rE,IAAKA,GAAI,IAAI,EAAI;AAAA,iBACjB3J,IAAG;AACV,UAAAyJ,EAAkBzJ,EAAC;AAAA,QAAA,UACnB;AACA,UAAA+0E,EAAqB,QAAQ;AAAA,QAC/B;AAAA;AAAA,IAAA,GAGIgB,KAAgB,YAAY;AAC5B,UAAA,CAAA97E,GAAOZ,EAAM,UAAU,GAC3B;AAAA,YAAIA,EAAM,uBAAuB;AAC3B,cAAA;AACI,kBAAAw9D,GAAYK,GAAa79D,EAAM,UAAU,GACzC29B;mBACCh3B,IAAG;AACV,YAAAyJ,EAAkBzJ,EAAC;AAAA,UACrB;AACA;AAAA,QACF;AACM,QAAAg3B;;IAAA,GAGFg/C,KAAuB,CAAClvE,OAAoC;AAC5D,MAACA,GAAM,CAAC,MAEP7M,GAAOZ,EAAM,UAAU,MACpByN,GAAA,CAAC,EAAE,KAAKzN,EAAM,aAEXk/D,EAAA,eAAezxD,GAAM,CAAC,CAAC,GAClCguE,EAAe,QAAQ;AAAA,IAAA,GAGnBmB,KAAuB32E,EAA4C,IAAI,GAEvE42E,KAAkB,MAAM;;AACxB,UAAA,CAAC78E,EAAM,eAAe;AACxB,QAAAu7E,EAAgB,QAAQ;AACxB;AAAA,MACF;AACA,OAAAl3E,KAAAu4E,GAAqB,UAArB,QAAAv4E,GAA4B;AAAA,IAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnRvC,UAAMrE,IAAQC,GA+BR4D,IAAOC,GAIPmmD,IAAShkD,EAAmC,SAAS,GAGrD,EAAE,WAAAw6B,EAAc,IAAA3C,GAA6B99B,EAAM,UAAU,GAC7D;AAAA,MACJ,aAAA6xB;AAAA,MACA,wBAAAiQ;AAAA,MACA,oBAAAT;AAAA,MACA,kBAAAO;AAAA,MACA,sCAAAK;AAAA,IAAA,IACET,GAAkBf,CAAS;AAE/B,WAAAjwB,GAAU,YAAY;AACpB,YAAM0xB,IAA2B,CAAA;AAC7B,MAACrQ,EAAY,gBACNqQ,EAAA,KAAKN,GAAkB,GAE9B/P,EAAY,uBAAuB7xB,EAAM,cAC3CkiC,EAAS,KAAKJ,EAAuB9hC,EAAM,SAAS,CAAC,GACrDkiC,EAAS,KAAKD,EAAqCjiC,EAAM,SAAS,CAAC;AAEjE,UAAA;AACI,cAAA,QAAQ,IAAIkiC,CAAQ;AAAA,cAChB;AACV,QAAA+nB,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAAA,CAC9C,GAEDrlD,GAAQo4D,IAA4B37B,CAAkB;;;;;;;;;;;;;;;;;AC3DtD,UAAMrhC,IAAQC,GAQR4D,IAAOC,GAKPo7D,IAAaf,MACb,EAAE,GAAAj+D,MAAMC,MAER8oD,IAAQ5oD,EAAS,MAAM6+D,EAAW,OAAOl/D,EAAM,KAAK,CAAC,GAErD,EAAE,IAAAuyB,EAAO,IAAAysC,GAAmB/V,GAAO4V,EAAmC,GAEtEO,IAAc,MAAM;AACxB,MAAIx+D,GAAOqoD,EAAM,KAAK,KAAKxoD,EAAYwoD,EAAM,KAAK,KAClDplD,EAAK,aAAaolD,EAAM,MAAM,IAAI,KAAK;AAAA,IAAA,GAGnC6zB,IAAa,MAAM;AAClB,MAAAj5E,EAAA,cAAc7D,EAAM,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wGCE1Bu6E,KAAqB,KAAK;;;;;;;;;;;;;AAxBhC,UAAMv6E,IAAQC,GAeR4D,IAAOC,GAWPi5E,IAAa18E,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAY,GAAGmE,GAAU;AAAA,MAChE;AAAA,IAAA,CACD,GAEK0/D,IAAWxjE,EAAS;AAAA,MACxB,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,mBAAmB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACvC;AAAA,IAAA,CACD,GAEKy+D,IAAUviE,EAAS;AAAA,MACvB,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,kBAAkB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACtC;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAERw6E,IAAat6E,EAAS,MACnB,CAACmpD,GAAsB,YAAYA,GAAsB,OAAO,EAAE,SAASxpD,EAAM,KAAK,MAAM,CACpG,GACK46E,IAAUv6E,EAAS,MAChBL,EAAM,KAAK,WAAWwpD,GAAsB,OACpD,GACKgG,IAAOnvD,EAAS,MACb,CAACL,EAAM,wBAAwBA,EAAM,KAAK,WAAWwpD,GAAsB,QACnF,GACKsxB,IAAYz6E,EAAS,MAClBL,EAAM,KAAK,WAAWwpD,GAAsB,SACpD,GACKuxB,IAAiB16E,EAAS,MACvBL,EAAM,KAAK,SAAS,eAC5B,GAEKg9E,IAAW38E,EAAS,MACjBL,EAAM,KAAK,eAAeA,EAAM,KAAK,aAAa,MAAM,MAChE,GACK27B,IAAYt7B,EAAS,MAClBL,EAAM,KAAK,SACnB,GACKiqD,IAAS5pD,EAAS,MACjBL,EAAM,OACJA,EAAM,KAAK,cADM+6B,GAAe,OAExC,GAEK,EAAE,oBAAAsG,MAAuBG,MAEzBy7C,IAAa,MAAM;AAClB,MAAAp5E,EAAA,cAAc,EAAE,OAAO7D,EAAM,OAAO,MAAMA,EAAM,MAAM,UAAUA,EAAM,SAAU,CAAA;AAAA,IAAA,GAGjFk9E,IAAa78E,EAAS,MACnB,CAACmpD,GAAsB,SAASA,GAAsB,SAASA,GAAsB,SAAS,EAAE;AAAA,MACrGxpD,EAAM,KAAK;AAAA,IAAA,CAEd,GAEKm9E,IAAa,YAAY;AACzB,MAAAv8E,GAAOZ,EAAM,KAAK,OAAO,KACxB6D,EAAA,cAAc7D,EAAM,KAAK,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5GvC,UAAMA,IAAQC,GAQR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAERkmD,IAAmB,CAAC74C,MAA2C;AACnE,YAAMk5C,IAAU,CAAA;AACR,MAAAA,EAAAl5C,EAAK,QAAQ,IAAIA,EAAK,OAC9B3J,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAY,GAAG0mD,GAAS;AAAA,IAAA,GAGzD02B,IAAiB,CAACC,GAAyB38E,MAAe;AAC9D,MAAAmD,EAAK,kBAAkB,EAAE,WAAW7D,EAAM,WAAW,iBAAAq9E,GAAiB,OAAA38E,GAAO;AAAA,IAAA,GAEzE48E,IAAe,CAACD,GAAyB38E,MAAe;AAC5D,MAAAmD,EAAK,gBAAgB,EAAE,WAAW7D,EAAM,WAAW,iBAAAq9E,GAAiB,OAAA38E,GAAO;AAAA,IAAA,GAGvE,EAAE,kCAAA4gC,MAAqCE,MAEvC2gC,IAAW9hE,EAAS,MACjBihC,EAAiC,MAAMthC,EAAM,SAAS,CAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCM,SAASu9E,GAA6BjjB,GAA0B;AACrE,QAAMpO,IAAoBC;AAwCnB,SAAA;AAAA,IACL,6BAvCkC,CAClC3+C,GACAgwE,IAAe,OACZ;AACG,YAAA/vE,IAAQy+C,EAAkB,cAAcoO,CAAQ;AACtD,eAAS1zD,IAAI,GAAGA,IAAI6G,EAAM,QAAQ7G,KAAK;AAC/B,cAAApC,IAAOiJ,EAAM7G,CAAC;AAChB,QAAApC,EAAK,cAAcgJ,EAAK,cAE1BgwE,KACA/8E,EAAY+D,EAAK,WAAWgJ,EAAK,eAAe,CAAC,KACjDhJ,EAAK,WAAWgJ,EAAK,eAAe,MAAM,QAE1ChJ,EAAK,WAAWgJ,EAAK,eAAe,IAAIA,EAAK;AAAA,MAEjD;AAAA,IAAA;AAAA,IAyBA,sBAtB2B,CAAC9M,GAAY88E,IAAe,OAAU;AAC3D,YAAA/vE,IAAQy+C,EAAkB,cAAcoO,CAAQ;AACtD,eAAS1zD,IAAI,GAAGA,IAAI6G,EAAM,QAAQ7G,KAAK;AAC/B,cAAApC,IAAOiJ,EAAM7G,CAAC;AAChB,SAAA42E,KAAgB/8E,EAAY+D,EAAK,QAAQ,KAAKA,EAAK,SAAS,WAAW,OACzEA,EAAK,WAAW9D;AAAA,MAEpB;AAAA,IAAA;AAAA,IAgBA,qBAb0B,CAACA,GAAY88E,IAAe,OAAU;AAC1D,YAAA/vE,IAAQy+C,EAAkB,cAAcoO,CAAQ;AACtD,eAAS1zD,IAAI,GAAGA,IAAI6G,EAAM,QAAQ7G,KAAK;AAC/B,cAAApC,IAAOiJ,EAAM7G,CAAC;AAChB,SAAA42E,KAAgB/8E,EAAY+D,EAAK,OAAO,KAAKA,EAAK,QAAQ,WAAW,OACvEA,EAAK,UAAU9D;AAAA,MAEnB;AAAA,IAAA;AAAA,EAMA;AAEJ;;;;;;;ACxCA,UAAMV,IAAQC,GAORw9E,IAAqBx3E,EAAI,EAAE,OAAO,CAAA,GAAI,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,UAAU,CAAA,EAAI,CAAA,GAC1Ey3E,IAAyBz3E,EAAI,CAAA,CAAE,GAC/B03E,IAAwB13E,EAAI,CAAA,CAAE,GAE9B,EAAE,GAAA/F,MAAMC,MAERikE,IAASn+D,EAAmB,CAAC,SAAS,CAAC,GAEvCimD,IAAoBC,MAGpB,EAAE,6BAAAyxB,GAA6B,qBAAAC,GAAqB,sBAAAC,EAAyB,IAAAP;AAAA,MACjFv9E,EAAM;AAAA,IAAA,GAGFo9E,IAAiB,CAAC5vE,MAA2E;AACjG,MAAAowE,EAA4BpwE,CAAI;AAAA,IAAA,GAE5B8vE,IAAe,CAAC9vE,MAA2E;AAC/F,MAAAowE,EAA4BpwE,GAAM,EAAI;AAAA,IAAA,GAElCuwE,IAAoB,MAAM;AAC9B,MAAAD,EAAqBJ,EAAuB,KAAK;AAAA,IAAA,GAE7CM,IAAkB,MAAM;AACP,MAAAF,EAAAJ,EAAuB,OAAO,EAAI;AAAA,IAAA,GAEnDO,IAAmB,MAAM;AAC7B,MAAAJ,EAAoBF,EAAsB,KAAK;AAAA,IAAA,GAE3CO,IAAiB,MAAM;AACP,MAAAL,EAAAF,EAAsB,OAAO,EAAI;AAAA,IAAA,GAEjDQ,IAAU,CAACX,IAAe,OAAU;AAC7B,iBAAA,CAACH,GAAiB38E,CAAK,KAAK,OAAO,QAAQ+8E,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAW5iD,GAAa;AAAA,YACxB,iBAAAqiD;AAAA,YACA,OAAA38E;AAAA,UACF;AAAA,UACA88E;AAAA,QAAA;AAGO,iBAAA,CAACH,GAAiB38E,CAAK,KAAK,OAAO,QAAQ+8E,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAW5iD,GAAa;AAAA,YACxB,iBAAAqiD;AAAA,YACA,OAAA38E;AAAA,UACF;AAAA,UACA88E;AAAA,QAAA;AAGO,iBAAA,CAACH,GAAiB38E,CAAK,KAAK,OAAO,QAAQ+8E,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAW5iD,GAAa;AAAA,YACxB,iBAAAqiD;AAAA,YACA,OAAA38E;AAAA,UACF;AAAA,UACA88E;AAAA,QAAA;AAGO,iBAAA,CAACH,GAAiB38E,CAAK,KAAK,OAAO,QAAQ+8E,EAAmB,MAAM,QAAQ;AACrF,QAAAG;AAAA,UACE;AAAA,YACE,WAAW5iD,GAAa;AAAA,YACxB,iBAAAqiD;AAAA,YACA,OAAA38E;AAAA,UACF;AAAA,UACA88E;AAAA,QAAA;AAGJ,UAAIA,GAAc;AACD,QAAAU,KACCF;AAChB;AAAA,MACF;AACiB,MAAAC,KACCF;IAAA,GAEdK,IAAY,MAAM;AACtB,MAAAX,EAAmB,QAAQ,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,OAAO,CAAA,GAAI,UAAU,CAAG,EAAA,GAC3EE,EAAsB,QAAQ,IAC9BD,EAAuB,QAAQ;IAAC,GAG5BW,IAAah+E,EAAS,MACnB6rD,EAAkB,mBAAmBlsD,EAAM,QAAQ,CAC3D;AAED,WAAAwQ,GAAU,MAAM;AACV,MAAA6tE,EAAW,MAAM,CAAC,KACpBja,EAAO,MAAM,KAAKia,EAAW,MAAM,CAAC,CAAC;AAAA,IACvC,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxGD,UAAMr+E,IAAQC,GAWR4D,IAAOC,GAIPooD,IAAoBC,MAEpB5iB,IAAOlpC,EAAS,MACb6rD,EAAkB,cAAclsD,EAAM,QAAQ,CACtD,GAEKi9E,IAAa,CAACzvE,MAA6E;AAC/F,MAAA0+C,EAAkB,eAAe1+C,EAAK,UAAUA,EAAK,MAAMA,EAAK,KAAK;AAAA,IAAA,GAGjEsvE,IAAa,CAACz6E,MAAkB;AAClB,MAAA6pD,EAAA,cAAclsD,EAAM,UAAUqC,CAAK;AAAA,IAAA,GAGjD,EAAE,qBAAAs3D,GAAqB,qBAAAC,EAAoB,IAAIV,GAAqB,GACpE,EAAE,oBAAAW,GAAoB,oBAAAC,EAAmB,IAAIP,GAAoB;AAEvE,WAAA/oD,GAAU,MAAM;AACT,MAAA+4B,EAAA,MAAM,QAAQ,CAAC/kC,MAAS;AAC3B,QAAAm1D,EAAoBn1D,EAAK,QAAQ,GACjCq1D,EAAmBr1D,EAAK,OAAO;AAAA,MAAA,CAChC,GACmBo1D,KACDE;IAAA,CACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBD,UAAM95D,IAAQC,GAWR4D,IAAOC,GAMP,EAAE,mBAAAq2E,GAAmB,oBAAAC,GAAoB,0BAAAkE,MAA6BjE,GAAqB,GAE3Fnb,IAAaf,MACb,EAAE,aAAAE,EAAA,IAAgBv6B,GAAYo7B,CAAU,GACxChT,IAAoBC,MACpB8uB,IAAkB56E,EAAS,MACxB6rD,EAAkB,mBAAmBlsD,EAAM,QAAQ,CAC3D,GAEKyN,IAAQpN,EAAS,MACd6rD,EAAkB,cAAclsD,EAAM,QAAQ,CACtD,GAEKk7E,IAAsB76E,EAAS,MAC5B6rD,EAAkB,uBAAuBlsD,EAAM,QAAQ,CAC/D,GAEKm7E,IAAc96E,EAAS,MACpB46E,EAAgB,QAAQC,EAAoB,KACpD,GAEKqD,IAAal+E,EAAS,MACnB46E,EAAgB,UAAUC,EAAoB,KACtD,GAEK,EAAE,GAAAh7E,MAAMC,MACR,EAAE,cAAAu3B,MAAiBC,MACnBpF,IAAKU,MACL,EAAE,eAAA/jB,GAAe,qBAAAD,GAAqB,mBAAAmB,MAAsB/B,GAAU,GACtE,EAAE,WAAAoyB,MAAc3C,MAEhB4mC,IAAoBz+D,EAAI,EAAK,GAC7Bu4E,IAA4Bv4E,EAAI,EAAK,GAErC+0E,IAAgB,YAAY;AACd,MAAA9uB,EAAA,WAAWlsD,EAAM,QAAQ,GAC3Cm6E,EAAkB,QAAQ;AAAA,IAAA,GAGtBxV,KAAS,YAAY;AACnB,YAAA8Z,IAAW78E,GAAM6L,EAAM,KAAK;AAClC,UAAIgxE,EAAS,WAAW,GAGpB;AAAA,YAFJ/Z,EAAkB,QAAQ,IAC1BnyC,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,UAAAtjB,KACpBy1D,EAAkB,QAAQ;AAC1B;AAAA,QACF;AACI,YAAA;AACI,gBAAA5hC,GAAyBrC,GAAWg+C,CAAQ,GAClDvvE,EAAc,SAAS;AAAA,iBAChBlD,GAAO;AACd,kBAAQ,MAAMA,CAAK,GACnBoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAA04D,EAAkB,QAAQ;AAAA,QAC5B;AAAA;AAAA,IAAA,GAGIga,KAAc,OAAOC,GAA+B57C,MAAuC;AACzF,YAAA67C,wBAAuB,OACvBC,wBAAuB,OACvBC,yBAAiB;AACnB,UAAA;AACQ,QAAA/7C,EAAA,QAAQ,CAACg8C,OAAa;;AACb,UAAAH,EAAA,IAAIG,GAAS,IAAI;AAAA,YAChC,aAAaj+E,IAASuD,KAAA06E,GAAS,eAAT,gBAAA16E,GAAqB,WAAW,IAAI06E,GAAS,WAAW,YAAY,KAAA,IAAS;AAAA,YACnG,WAAWA,GAAS;AAAA,UAAA,CACrB;AAAA,QAAA,CACF,GACgBH,EAAA,QAAQ,CAACI,OAAc;AAC5B,UAAAA,GAAA,UAAU,QAAQ,CAACC,OAAa;AACxC,YAAAJ,EAAiB,IAAII,EAAQ;AAAA,UAAA,CAC9B;AAAA,QAAA,CACF,GACGJ,EAAiB,OAAO,MACP,MAAM1lB,GAAqB14B,GAAWzgC,EAAM,WAAW,CAAC,GAAG6+E,CAAgB,CAAC,GACpF,QAAQ,CAACvlB,OAAW;AAC7B,UAAAwlB,GAAW,IAAIxlB,GAAO,IAAIA,GAAO,IAAI;AAAA,QAAA,CACtC;AAAA,eAEI3yD,IAAG;AACV,QAAAyJ,EAAkBzJ,EAAC;AAAA,MACrB;AAMO,aAJuBg4E,EAAW;AAAA,QACvC,CAACvqB,OAAc,CAACxzD,GAAOwzD,GAAU,OAAO,KAAK,CAACxzD,GAAOwzD,GAAU,MAAM;AAAA,MAAA,EAG1C,IAAI,CAACA,OAAc;;AAClC,QAAAiK,EAAA;AACZ,cAAM+c,MAAc/2E,KAAAu6E,EAAiB,IAAIxqB,GAAU,OAAQ,MAAvC,gBAAA/vD,GAA0C,aACxD66E,KAAwB,CAAA;AAC9B,gBAAA36E,KAAAq6E,EAAiB,IAAIxqB,GAAU,OAAQ,MAAvC,QAAA7vD,GAA0C,UAAU,QAAQ,CAAC06E,OAAa;AAClE,gBAAA77E,KAAO07E,GAAW,IAAIG,EAAQ;AAChC,UAAA,CAACx+E,EAAY2C,EAAI,KAAKA,GAAK,KAAK,EAAE,SAAS,KAC7C87E,GAAY,KAAK97E,EAAI;AAAA,QACvB,IAEK;AAAA,UACL,KAAKg7C,GAAe;AAAA,UACpB,OAAO;AAAA,YACL,aAAag9B,MAAe;AAAA,YAC5B,QAAQ8D,GAAY,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA,KAAK;AAAA,YACH,OAAO9qB,GAAU;AAAA,YACjB,gBAAgB;AAAA,UAClB;AAAA,UACA,UAAUiK,EAAY;AAAA,QAAA;AAAA,MACxB,CACD;AAAA,IAAA,GAGGic,IAAiB,YAAY;AAC3B,YAAAmE,IAAW78E,GAAM6L,EAAM,KAAK;AAClC,UAAIgxE,EAAS,WAAW,GAGpB;AAAA,YAFJD,EAA0B,QAAQ,IAClCjsD,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,UAAAtjB,KACpBuvE,EAA0B,QAAQ;AAClC;AAAA,QACF;AACI,YAAA;AACF,gBAAMluE,IAAM,MAAMwyB,GAAyBrC,GAAWg+C,CAAQ,GACxDU,IAAS,MAAMT,GAAYD,GAAUnuE,CAAG;AAC9C,UAAAzM,EAAK,WAAWs7E,CAAM;AAAA,iBACfnzE,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAAwyE,EAA0B,QAAQ;AAAA,QACpC;AAAA;AAAA,IAAA,GAGIna,IAAmB/E,MACnB,EAAE,SAAApqC,GAAS,QAAA6B,GAAQ,mBAAA2oC,EAAkB,IAAI57B,GAAYugC,CAAgB,GAErE8Y,IAAa,OAAOx6C,MAAc;AAClC,UAAA;AACF,QAAA0hC,EAAiB,SAAS,IAAI,GAC9BnvC,EAAQ,QAAQ,IAChB6B,EAAO,QAAQ,IACf2oC,EAAkB,QAAQ,IAC1B2E,EAAiB,SAAS,MAAM3hC,GAAWjC,GAAWkC,CAAE,CAAC;AAAA,eAClDh8B,GAAG;AACV,QAAAyJ,EAAkBzJ,CAAC;AAAA,MAAA,UACnB;AACA,QAAAuuB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9JF,UAAMl1B,IAAQC,GA8BR4D,IAAOC,GAIP03E,IAAoBv1E,EAAI,EAAK,GAE7Bq1E,IAA6Bt3E;AAAA,MACjCg5D;AAAA,MACA;AAAA,IAAA;AAGE,QAAAv8D,EAAY66E,CAA0B;AAClC,YAAA,IAAI,MAAM,mFAAmF;AAI/F,UAAAzyB,IAAeE,GAA2B/oD,EAAM,UAAU,GAC1D,EAAE,aAAA69D,EAAgB,IAAAhV,GAClB,EAAE,mBAAAz4C,GAAmB,qBAAAnB,EAAoB,IAAIZ,GAAU,GACvD+wE,IAAwBn5E,EAA8B,IAAI,GAE1D,EAAE,aAAAojD,GAAa,cAAAC,EAAA,IAAiBH;AAAA,MACpCnuB,GAAa;AAAA,MACbsgD,EAA2B;AAAA,IAAA,GAGvB,EAAE,GAAAp7E,MAAMC,MAERk/E,IAAgBp5E,EAAI,EAAK,GAEzBi5D,IAAaf,MACb,EAAE,QAAAR,GAAQ,aAAAU,EAAY,IAAIv6B,GAAYo7B,CAAU,GAEhDogB,IAAoB,YAAY;AAChC,UAAA;AACF,QAAAD,EAAc,QAAQ;AACtB,cAAME,KAAY,MAAMniB,GAAoBS,GAAa79D,EAAM,UAAU;AAC9D,QAAAk/D,EAAA;AAAA,UACTqgB,GAAU,IAAI,CAACC,QACFtgB,EAAA,2BAA2BsgB,GAAS,QAAQ,GAChD;AAAA,YACL,KAAKphC,GAAe;AAAA,YACpB,GAAGohC;AAAA,UAAA,EAEN;AAAA,QAAA,GAEH37E,EAAK,qBAAqB85D,EAAO,MAAM,IAAI,CAAC1U,OAAUA,GAAM,EAAE,EAAE,OAAO,CAACtmB,OAAOA,OAAO,MAAS,CAAgB;AAAA,eACxGh8B,IAAG;AACV,QAAAyJ,EAAkBzJ,EAAC;AAAA,MAAA,UACnB;AACA,QAAA04E,EAAc,QAAQ;AAAA,MACxB;AAAA,IAAA,GAGInzB,IAAoBC,MAEpB0vB,IAAcx7E,EAAS,MACpB6rD,EAAkB,SAASlsD,EAAM,QAAQ,CACjD,GAEK,EAAE,mBAAAm6E,MAAsBE,MAExB6B,IAAc,CAACl0B,OAAkB;AACrC,MAAAkE,EAAkB,WAAWlsD,EAAM,UAAUA,EAAM,WAAWgoD,EAAK,GACnEmyB,EAAkB,QAAQ;AAAA,IAAA,GAGtBzxB,IAAS,CAACV,OAAkB;AAChC,MAAAkE,EAAkB,WAAWlsD,EAAM,UAAUA,EAAM,WAAWgoD,EAAK,GACnEmyB,EAAkB,QAAQ;AAAA,IAAA,GAGtBsF,KAAwB,OAAOhyE,OAAoC;AACvE,YAAMitB,KAAMjtB,GAAM,IAAI,CAACjJ,OAASA,GAAK,EAAE,GACjCo6E,yBAAuB,OACvBC,yBAAuB,OACvBC,yBAAiB;AACnB,UAAA;AAEW,SADQ,MAAMv7C,GAAoB9C,GAAW/F,IAAK16B,EAAM,SAAS,GACjE,QAAQ,CAACw6E,OAAgB;;AACnB,UAAAoE,GAAA,IAAIpE,GAAY,IAAI;AAAA,YACnC,aAAa15E,IAASuD,KAAAm2E,GAAY,SAAS,eAArB,gBAAAn2E,GAAiC,WAAW,IAC9Dm2E,GAAY,SAAS,WAAW,YAAY,KAC5C,IAAA;AAAA,YACJ,WAAWA,GAAY;AAAA,UAAA,CACxB;AAAA,QAAA,CACF,GACgBoE,GAAA,QAAQ,CAACI,OAAc;AAC5B,UAAAA,GAAA,UAAU,QAAQ,CAACC,OAAa;AACxC,YAAAJ,GAAiB,IAAII,EAAQ;AAAA,UAAA,CAC9B;AAAA,QAAA,CACF,GACGJ,GAAiB,OAAO,MACP,MAAM1lB,GAAqB14B,GAAWzgC,EAAM,WAAW,CAAC,GAAG6+E,EAAgB,CAAC,GACpF,QAAQ,CAACvlB,OAAW;AAC7B,UAAAwlB,GAAW,IAAIxlB,GAAO,IAAIA,GAAO,IAAI;AAAA,QAAA,CACtC;AAAA,eAEI3yD,IAAG;AACV,QAAAyJ,EAAkBzJ,EAAC;AAAA,MACrB;AAEO,aAAA8G,GAAM,IAAI,CAACkvB,OAAU;;AACd,QAAA0hC,EAAA;AACZ,cAAM+c,MAAc/2E,KAAAu6E,GAAiB,IAAIjiD,GAAM,EAAE,MAA7B,gBAAAt4B,GAAgC,aAC9C66E,KAAwB,CAAA;AAC9B,gBAAA36E,KAAAq6E,GAAiB,IAAIjiD,GAAM,EAAE,MAA7B,QAAAp4B,GAAgC,UAAU,QAAQ,CAAC06E,OAAa;AACxD,gBAAA77E,KAAO07E,GAAW,IAAIG,EAAQ;AAChC,UAAA,CAACx+E,EAAY2C,EAAI,KAAKA,GAAK,KAAK,EAAE,SAAS,KAC7C87E,GAAY,KAAK97E,EAAI;AAAA,QACvB,IAEK;AAAA,UACL,KAAKg7C,GAAe;AAAA,UACpB,OAAO;AAAA,YACL,aAAag9B,MAAe;AAAA,YAC5B,QAAQ8D,GAAY,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA,KAAK;AAAA,YACH,OAAOviD,GAAM,SAAU;AAAA,YACvB,gBAAgB;AAAA,UAClB;AAAA,UACA,UAAU0hC,EAAY;AAAA,QAAA;AAAA,MACxB,CACD;AAAA,IAAA,GAGGge,KAAuB,OAAO7uE,OAAgC;AAC9D,UAAAA,GAAK,SAAS,SAAS;AACrB,YAAAA,GAAK,MAAM,WAAW;AAAG;AAC7B,cAAMC,KAAQ,MAAMgyE,GAAsBjyE,GAAK,MAAM,OAAO,CAACmvB,OAAU,CAAC/7B,GAAO+7B,GAAM,QAAQ,CAAC,CAAC;AAC/F,QAAAuiC,EAAW,UAAUzxD,EAAK;AAAA,MAC5B;AAAA,IAAA,GAGI42D,IAAmB/E,MACnB,EAAE,SAASgd,GAAc,QAAQC,MAAgBz4C,GAAYugC,CAAgB,GAC7E,EAAE,WAAA5jC,MAAc3C,MAEhBshC,IAAc,OAAOv8B,OAAuB;AAChD,MAAAy5C,EAAa,QAAQ,IACrBC,EAAY,QAAQ;AAChB,UAAA;AACF,cAAM5/C,KAAQ,MAAMiG,GAAmBnC,GAAWoC,EAAW;AAC7D,QAAAwhC,EAAiB,SAAS1nC,EAAK;AAAA,eACxBh2B,IAAG;AACV,QAAAyJ,EAAkBzJ,EAAC;AAAA,MAAA,UACnB;AACA,QAAA21E,EAAa,QAAQ;AAAA,MACvB;AAAA,IAAA,GAGIK,IAAuB,CAAClvE,OAAoC;AAChE,MAAIA,GAAM,WAAW,MACVyxD,EAAA;AAAA,QACTzxD,GAAM,IAAI,CAACjJ,QACG65D,EAAA,SACL;AAAA,UACL,KAAKjgB,GAAe;AAAA,UACpB,GAAG55C;AAAA,UACH,UAAU65D,EAAY;AAAA,QAAA,EAEzB;AAAA,MAAA,GAEH8b,EAAkB,QAAQ,IACRjuB,EAAA,WAAWlsD,EAAM,QAAQ;AAAA,IAAA,GAGvCi8E,IAAgB,MAAM;AAC1B,MAAAT,EAAkB,QAAQ;AAAA,IAAA,GAGtBjpD,IAAKU,GAAa,CAAC,GAAG,CAAI,GAAA,EAAE,QAAQ4rC,GAAA,CAAqC,GAEzE6gB,IAAa,YAAY;AAEzB,UADJntD,EAAG,MAAM,UACLA,EAAG,MAAM;AACS,eAAAtjB,KACb;AAEL,UAAA;AACF,cAAM0wE,KAAW,MAAMliB,GAAiBI,GAAaj8D,GAAM+7D,EAAO,KAAK,CAAC,GAClEjjC,KAAmB,CAAA,GACnBjtB,KAAQkyE,GAAS,IAAI,CAACC,QACtBllD,GAAA,KAAKklD,GAAQ,EAAE,GACZ;AAAA,UACL,KAAKxhC,GAAe;AAAA,UACpB,GAAGwhC;AAAA,QAAA,EAEN;AACD,eAAA1gB,EAAW,UAAUzxD,EAAK,GAC1B5J,EAAK,qBAAqB62B,EAAG,GACtB;AAAA,cACG;AACH,eAAA;AAAA,MACT;AAAA,IAAA,GAGIoiD,IAAa,OAAOz6E,OAAkB;AACpC,YAAA4mD,KAAQ0U,EAAO,MAAMt7D,EAAK;AAChC,UAAK4mD,IACD;AAAA,YAAAxoD,EAAYwoD,GAAM,EAAE,GAAG;AACzB,UAAAiW,EAAW,mBAAmB78D,EAAK;AACnC;AAAA,QACF;AACA,YAAIrC,EAAM,uBAAuB;AAC3B,cAAA;AACI,kBAAAw9D,GAAYK,GAAa5U,GAAM,EAAE,GACvCiW,EAAW,mBAAmB78D,EAAK;AAAA,mBAC5BsE,IAAG;AACV,YAAAyJ,EAAkBzJ,EAAC;AAAA,UACrB;AACA;AAAA,QACF;AACA,QAAAu4D,EAAW,mBAAmB78D,EAAK;AAAA;AAAA,IAAA,GAG/B48C,KAAWh5C,EAAwB,IAAI,GACvCi5C,KAAaj5C,EAAYm4C,GAAA,CAAgB,GACzCe,KAAmBl5C,EAA8B,IAAI,GACrDm5C,KAAgBn5C,EAAI,CAAC,GAErBg7C,KAAe5gD,EAAS,MACrBI,EAAYT,EAAM,kBAAkB,IAAI4gD,KAAwB1B,GAAW,QAAQl/C,EAAM,kBACjG,GAEKu/C,KAA0B,MAAM;AACtB,MAAAH,GAAA,SACd3vB,GAAS,MAAM;AACA,QAAAyxB;MAAA,CACd;AAAA,IAAA,GAGG2+B,KAAqB,MAAM;AAC/B,UAAIC,KAAM;AACH,MAAAniB,EAAA,MAAM,QAAQ,CAAC1U,OAAU;AAC9B,QAAA62B,MACA72B,GAAM,WAAW62B;AAAA,MAAA,CAClB,GACD5gB,EAAW,cAAc4gB;AAAA,IAAA,GAErBC,KAAqB,CAAC/rC,IAAcD,OAAe;AACvD,UAAIA,MAAM,KAAKA,KAAK4pB,EAAO,MAAM,QAAQ;AACvC,cAAM/+C,KAAU++C,EAAO,MAAM,OAAO3pB,IAAM,CAAC,EAAE,CAAC;AAC9C,QAAA2pB,EAAO,MAAM,OAAO5pB,IAAI,GAAGn1B,EAAO,GACfihE,MACKtgC;MAC1B;AAAA,IAAA,GAGI2B,KAAe,MAAM;AAEzB,UADIlhD,EAAM,oBACN,CAACi/C,GAAS;AAAO;AACrB,YAAMkC,KAAiBlC,GAAS,MAAM,cAA2B,MAAML,EAAW;AAClF,MAAKuC,OACLhC,GAAiB,QAAQhD,GAAYgF,IAAgB,CAAA,GAAI;AAAA,QACvD,QAAQ,MAAM3C;AAAA,QACd,YAAYC;AAAA,QACZ,WAAWC;AAAA,QACX,aAAaC;AAAA,QACb,OAAO,OAAOlpC,OAAyB;AACrC,UAAIhV,EAAYgV,GAAM,QAAQ,KAAKhV,EAAYgV,GAAM,QAAQ,KAC1CsqE,GAAAtqE,GAAM,UAAUA,GAAM,QAAQ;AAAA,QACnD;AAAA,MAAA,CACD;AAAA,IAAA;AAGH,WAAAga,GAAS,MAAM;AACb,MAAAwvB,GAAS,QAAQ,SAAS,cAAc,MAAMgC,GAAa,KAAK,GACnDC;IAAA,CACd,GAEYjqB,EAAA;AAAA,MACX,YAAAyoD;AAAA,IAAA,CACD,GAEDlvE,GAAU,MAAM;AACI,MAAA8uE;IAAA,CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChVD,UAAMt/E,IAAQC,GA2BR4D,IAAOC,GAIPmmD,IAAShkD,EAAmC,SAAS,GAGrD,EAAE,WAAAw6B,EAAc,IAAA3C,GAA6B99B,EAAM,UAAU,GAC7D;AAAA,MACJ,aAAA6xB;AAAA,MACA,wBAAAiQ;AAAA,MACA,oBAAAT;AAAA,MACA,kBAAAO;AAAA,MACA,sCAAAK;AAAA,IAAA,IACET,GAAkBf,CAAS;AAE/B,IAAAjwB,GAAU,YAAY;AACpB,YAAM0xB,IAA2B,CAAA;AAC7B,MAACrQ,EAAY,gBACNqQ,EAAA,KAAKN,GAAkB,GAE9B/P,EAAY,uBAAuB7xB,EAAM,cAC3CkiC,EAAS,KAAKJ,EAAuB9hC,EAAM,SAAS,CAAC,GACrDkiC,EAAS,KAAKD,EAAqCjiC,EAAM,SAAS,CAAC;AAEjE,UAAA;AACI,cAAA,QAAQ,IAAIkiC,CAAQ;AAAA,cAChB;AACV,QAAA+nB,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAAA,CAC9C;AAEK,UAAA+1B,IAAiB/5E,EAA0D,IAAI,GAE/Ey5E,IAAa,YACZM,EAAe,QACb,MAAMA,EAAe,MAAM,eADA;AAIpC,WAAAp7E,GAAQo4D,IAA4B37B,CAAkB,GAEzCpK,EAAA;AAAA,MACX,YAAAyoD;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtED,UAAM1/E,IAAQC,GAyBR,EAAE,QAAA09D,GAAQ,YAAAnqC,EAAW,IAAIlf,GAAOtU,CAAK,GAErCigF,IAAYh6E,EAAkB,CAAA,CAAE,GAEhC,EAAE,mBAAAmK,MAAsB/B,MAGxBw6C,IAAeE,GAA2B/oD,EAAM,UAAU,GAC1D,EAAE,aAAA69D,EAAgB,IAAAhV;AAExB,WAAAvjD;AAAA,MACE,CAACq4D,GAAQnqC,CAAU;AAAA,MACnB,OAAO,CAAC0sD,GAAWC,CAAW,MAAM;AAE9B,YADJF,EAAU,QAAQ,IACdC,KAAaA,EAAU,SAAS,GAAG;AAC3B,UAAAD,EAAA,QAAQx+E,GAAUy+E,CAAS;AACrC;AAAA,QACF;AACI,YAAAC,KAAeA,EAAY,SAAS;AAClC,cAAA;AACF,YAAAF,EAAU,QAAQ,MAAM7iB,GAAoBS,GAAasiB,CAAW;AAAA,mBAC7Dn0E,GAAO;AACd,YAAAoE,EAAkBpE,CAAK;AAAA,UACzB;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;ICvDPo0E,KAA+B,CAAC,aAAa,YAAY,GA4BhEC,KAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AACT;AAEO,SAASC,GACd/vE,GACAgwE,GACAx8E,IAA6B,QAC7BE,IAA8B,QAC9Bu8E,IAA0B,IAC1BC,IAA2C,QAC3CC,IAA8B,QAC9B;AACA,QAAMC,IAAYD,KAAc90E,IAC1B,EAAE,GAAA1L,EAAM,IAAAygF,EAAU,UAAUA,GAC5B/sE,IAAyBwf;AAC/B,MAAIqtD;AACF,eAAW33C,KAAQ,OAAO,KAAKl1B,CAAU;AACvC,MAAIk1B,KAAQ23C,MAEC7sE,EAAAk1B,CAAI,IAAI23C,EAAiB33C,CAAI;AAK9C,QAAM83C,IAAarwE,EAAO,IAAI,CAAC/L,MAAS;AACtC,UAAMoS,IAAM,EAAE,GAAGypE,IAAe,GAAG77E,EAAK;AACxC,WAAK/D,EAAYmW,EAAI,KAAK,MAEfnW,EAAYmW,EAAI,KAAK,KAAKwpE,GAA6B,SAASxpE,EAAI,GAAG,IAChFA,EAAI,QAAQ1W,EAAE,2BAA2B0W,EAAI,GAAG,IACvCnW,EAAYmW,EAAI,KAAK,KAAK7S,KAAUE,IAC7C2S,EAAI,QAAQ1W,EAAE6D,IAAS,MAAME,IAAU,YAAY2S,EAAI,GAAG,IAE1DA,EAAI,QAAQ,KAEPA;AAAA,EAAA,CACR,GAEKiqE,IAAiBxgF,EAAS,MAAM;AACpC,UAAMygF,IAAe,CAAA;AACV,WAAAF,EAAA,QAAQ,CAACG,MAAW;AAC7B,MAAKR,EAAc,MAAM,SAASQ,EAAO,GAAG,KAC1CD,EAAQ,KAAKC,CAAM;AAAA,IACrB,CACD,GACIP,KAAwBM,EAAA,KAAK,EAAE,KAAK,WAAW,UAAU,IAAO,OAAO,IAAM,GAC3EA;AAAA,EAAA,CACR;AAWM,SAAA;AAAA,IACL,YAAAF;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAN;AAAA,IACA,cAbmB,CAACltD,MAAgB;AACpC,UAAIA,GAAQ;AACV,QAAAzf,EAAW,SAASyf,EAAO,KAC3Bzf,EAAW,aAAayf,EAAO,UAAU;AACzC;AAAA,MACF;AACA,MAAAzf,EAAW,SAAS;AAAA,IAAA;AAAA,IAQpB,YAAAA;AAAA,EAAA;AAEJ;AC/FO,SAASotE,GACdC,GACAC,GACAn9E,GACAE,GACAo2B,GACA9mB,GACA;AACM,QAAA6wC,IAA8Bn+C,EAAI,EAAK,GACvCwH,IAA2BxH,EAAI,CAAA,CAAE,GACjCk7E,IAA8Bl7E,EAAI,CAAA,CAAE,GACpCivB,IAAUjvB,EAAI,EAAK,GAEnB,EAAE,aAAA2P,GAAa,cAAAqwB,EAAa,IAAI5yB,GAAiB,GACjD,EAAE,mBAAAjD,MAAsB/B,MAExB,EAAE,gBAAAwyE,GAAgB,YAAAjtE,GAAY,cAAAwtE,GAAc,YAAAR,GAAY,eAAAL,MAAkBD;AAAA,IAC9EW;AAAA,IACAC;AAAA,IACAn9E;AAAA,IACAE;AAAA,EAAA,GAGI+L,IAAS,MAAM;AACR,IAAAqxE,KACHC;EAAA,GAGJC,IAAe,CAACl0D,MAAoC;AACxD,IAAA+zD,EAAa/zD,EAAO,MAAM,GAClBi0D;EAAA,GAGJE,IAAkB,YAAY;AAClC,IAAAtsD,EAAQ,QAAQ,IACLthB,EAAA;AACP,QAAA;AACF,MAAAnG,EAAM,MAAM,KAAK,GAAI,MAAM4sB,EAAMzmB,GAAYL,CAAM,CAAE;AAAA,aAC9C5M,GAAG;AACV,MAAAyJ,EAAkBzJ,CAAC;AAAA,IAAA,UACnB;AACA,MAAAuuB,EAAQ,QAAQ;AAAA,IAClB;AAAA,EAAA,GAGImsD,IAAa,MAAM;AACvB,IAAA5zE,EAAM,QAAQ,IACd0zE,EAAS,QAAQ;EAAC,GAGdG,IAAU,YAAY;AAC1B,IAAApsD,EAAQ,QAAQ;AACZ,QAAA;AACF,MAAAznB,EAAM,QAAQ,MAAM4sB,EAAMzmB,GAAYL,CAAM;AAAA,aACrC5M,GAAG;AACV,MAAAyJ,EAAkBzJ,CAAC;AAAA,IAAA,UACnB;AACA,MAAAuuB,EAAQ,QAAQ;AAAA,IAClB;AAAA,EAAA;AAeK,SAAA;AAAA,IACL,OAAAznB;AAAA,IACA,UAAA0zE;AAAA,IACA,YAAAvtE;AAAA,IACA,gBAAAitE;AAAA,IACA,eAAAN;AAAA,IACA,YAAAK;AAAA,IACA,eAAAx8B;AAAA,IACA,SAAAlvB;AAAA,IACA,YArBiB,CAACzf,MAAiB;AACnC,YAAM2M,KAAc3M,EAAM;AAC1B,UAAI,CAAC2M;AAAa;AAClB,YAAM2oB,KAAS3oB,GAAY;AAC3B,UAAI,CAAC2oB,MAAU,CAACA,GAAO,UAAU,SAAS,kBAAkB;AAAG;AAC/D,YAAM02C,IAAU12C,GAAO;AACvB,UAAI,CAAC02C,KAAW,CAACA,EAAQ,UAAU,SAAS,kBAAkB;AAAG;AAC3D,YAAA99D,IAAQ89D,EAAQ,cAAc,OAAO;AAC3C,MAAK99D,KACLA,EAAM,MAAM;AAAA,IAAA;AAAA,IAaZ,iBAAA69D;AAAA,IACA,QAAAxxE;AAAA,IACA,cAAAuxE;AAAA,IACA,SAAAD;AAAA,IACA,aAAa,MAAM1rE,EAAYrC,GAAQK,GAAY0tE,CAAO;AAAA,IAC1D,cAAc,MAAMr7C,EAAa1yB,GAAQK,GAAY0tE,CAAO;AAAA,EAAA;AAEhE;AC9Ea,MAAAI,KAAwC,CAACzzD,GAAaC,OAC1D;AAAA,EACL,eAAe;AAAA,EACf,aAAa,MAAM,CAAC;AAAA,EACpB,QAAQ,CAAC,EAAE,OAAAzgB,GAAO,OAAA/M,GAAO,UAAAygF,QAAe;;AAClC,QAAAlzD,MAAQC,KAAOD,MAAQ;AAClB,aAAA,IAAI,IAAIvtB,IAAQ,EAAC2D,IAAAoJ,EAAM,CAAC,MAAP,gBAAApJ,EAAU,KAAK,IAAI,CAAA,CAAE;AAE/C,eAAWG,KAAQiJ,GAAO;AACpB,UAAA0zE,EAAS,QAAQjzD,KAAOxtB;AAAO;AAC1B,MAAAA,IAAgBygF,EAAA,IAAI38E,EAAK,KAAK,IACzB28E,EAAA,OAAO38E,EAAK,KAAK;AAAA,IACjC;AACO,WAAA28E;AAAA,EACT;AAAA,EACA,WAAW,CAAC,EAAE,UAAAA,EAAA,MAAeA;AAAA,ICnCpBQ,KAAmB,CAACjhF,MACxBA,IAAQ,IAAI;ACGd,SAASkhF,GAAmB79E,IAAS,IAAI89E,IAAe,QAAQ;AACrE,MAAIC,IAAU/9E,GACVg+E,IAAgBF;AA+Bb,SAAA;AAAA,IACL,gBA/BqB,CAAC99E,GAAiB89E,OACnC/gF,GAASiD,CAAM,MAAaA,IAAAA,IAC5BjD,GAAS+gF,CAAY,MAAmBA,IAAAA,IAErC;AAAA,MACL,IAAI;AAAA,MACJ,WAAWtwE,GAAY;AAAA,MACvB,WAAW;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,MACT,YAAYA,GAAY;AAAA,MACxB,YAAY;AAAA,MACZ,kBAAkB,CAAC;AAAA,MACnB,aAAa,CAAC;AAAA,MACd,qBAAqB,CAAC;AAAA,MACtB,OAAO,CAAC;AAAA,MACR,SAAAuwE;AAAA,MACA,eAAAC;AAAA,IAAA;AAAA,EAKF;AAEJ;ACtCO,SAASC,KAA6B;AAcpC,SAAA;AAAA,IACL,wBAd6B,OACtB;AAAA,MACL,QAAQ,CAAC;AAAA,MACT,eAAe,CAAC;AAAA,MAChB,OAAO,CAAC;AAAA,MACR,aAAa;AAAA,QACX,SAAS,CAAC;AAAA,QACV,UAAU,CAAC;AAAA,QACX,OAAO,CAAC;AAAA,MACV;AAAA,IAAA;AAAA,EAKF;AAEJ;AChBO,SAASC,KAA4B;AAgBnC,SAAA;AAAA,IACL,uBAhB4B,OACrB;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa,CAAC;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW1wE,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,eAAe;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EAKX;AAEJ;ACJO,MAAM2wE,KAAgB,CAC3B1jD,GACA2jD,GACAjkD,IAAc,IACdC,IAAuB,IACvBz8B,IAAmB,MACnBqC,GACAwJ,GACAjH,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACq0B,GAAS8D,MAAW;AAChC,QAAA2jD,IAAkC,EAAE,QAAAD;AAC1C,EAAIjkD,MAAgB,OACNkkD,EAAA,MAAMnkD,GAAqBC,GAAaC,CAAS,IAE1Dv9B,GAAOc,CAAM,MACJ0gF,EAAA,OAAO,KAAK,UAAU1gF,CAAM,IAEnC88B,EAAA,EACJ,QAAQ,EAAE,GAAGl4B,GAAS,GAAG87E,GAAa,EACtC,KAAK,CAAC9xE,MACA+tB,GAAkB/tB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnB8D,EAAO,IAAIxyB,GAAA,CAAgB,IARzBwyB,EAAO,IAAI5wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BmmB,EAAO,IAAI1xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCmmB,EAAO,IAAIrxB,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CmmB,EAAO,IAAIvwB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDmmB,EAAO,IAAIxyB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GCtCGonB,KAAuB,CAAC9rB,GAAwBH,IAAmC,WAAsB;AAC7G,QAAM,EAAE,eAAAkrB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,iBAAAC,EAAA,IAAoBlB;AACtF,SAAAC,EAAc/qB,EAAW,WAAW,GACrBirB,EAAAjrB,EAAW,MAAMA,EAAW,WAAW,GACxCorB,EAAAprB,EAAW,QAAQA,EAAW,UAAU,GAClDjT,GAAU8S,CAAS,KAAGmsB,EAAgBnsB,CAAS,GAC5CksB,EAAW;AACpB,GAEM0iD,KAAwC,CAC5CC,GACAxjD,GACAyjD,GACAC,GACA/uE,IAAmC,WACxB;AACX,QAAM,EAAE,eAAAkrB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,iBAAAC,EAAA,IAAoBlB;AACtF,SAAAC,EAAc2jD,CAAW,GACzBzjD,EAAeC,GAAMwjD,CAAW,GAChCtjD,EAAcujD,GAAYC,CAAS,GAC/B7hF,GAAU8S,CAAS,KAAGmsB,EAAgBnsB,CAAS,GAC5CksB,EAAW;AACpB,GAOa8iD,KAAoB,OAC/BjkD,GACAN,GACAC,IAAuB,CAAA,GACvB9K,IAAS,MACTqvD,IAAW,IACXjvE,IAAmC,QACnCkvE,IAAY,KACZ5+E,GACAwJ,GACAq1E,IAAe,IACft8E,IAA8B,OACf;AACf,QAAMw5B,IAAan/B,GAAU8S,KAAA,gBAAAA,EAAW,QAAQ,KAAKmvE,IAAgB,YAAY,IAC3EhvE,IAAawf,GAAcC,CAAM;AACvC,EAAAzf,EAAW,cAAc+uE,GACzB/uE,EAAW,SAASyf,GACpBzf,EAAW,aAAa8uE;AACxB,QAAMG,IAAU5kD,GAAqBC,GAAaC,CAAS,IAAI2B,GACzDgjD,IAAU,CAAA;AAEZ,MAAA;AACI,UAAAxyE,IAAM,MAAMkuB,EAAS,EAAA,IAAIqkD,IAAUnjD,GAAqB9rB,GAAYH,CAAS,GAAGnN,CAAO;AAC7F,QAAI,CAAC+3B,GAAkB/tB,EAAI,MAAM;AAC/B,aAAO,QAAQ,OAAO,IAAIzC,GAAyByC,EAAI,MAAM,CAAC;AAEhE,QAAIA,EAAI,MAAM;AACZ,YAAMyvB,IAAUzvB,EAAI;AAGhB,UADIwyE,EAAA,KAAK,GAAG/iD,EAAQ,IAAI,GACxBN,GAA0BM,CAAO;AAEnC,YADWnsB,EAAA,cAActD,EAAI,KAAK,aAC9BsD,EAAW;AACb,iBAAOA,EAAW,eAAa;AAClB,YAAAA,EAAA;AAEX,kBAAMmvE,KADmB,MAAMvkD,EAAS,EAAA,IAAIqkD,IAAUnjD,GAAqB9rB,GAAYH,CAAS,GAAGnN,CAAO,GACpE;AAE9B,YAAAw8E,EAAA,KAAK,GAAGC,EAAa,IAAI,GACjCnvE,EAAW,cAAcmvE,EAAa;AAAA,UACxC;AAAA,iBAEOvjD,GAAkBO,CAAO,GAAG;AAEjC,YADJnsB,EAAW,aAAamsB,EAAQ,YAC5BnsB,EAAW,cAAcA,EAAW;AAC/B,iBAAA,QAAQ,QAAQkvE,CAAY;AAErC,cAAM5gD,IAA2B,CAAA,GAC3B8gD,IAAW,KAAK,KAAKpvE,EAAW,aAAaA,EAAW,WAAW;AACzE,iBAAShN,IAAI,GAAGA,IAAIo8E,GAAUp8E;AACnB,UAAAs7B,EAAA;AAAA,YACP1D,EAAS,EAAA;AAAA,cACPqkD,IACER;AAAA,gBACEzuE,EAAW;AAAA,gBACXhN;AAAA,gBACAgN,EAAW;AAAA,gBACXA,EAAW;AAAA,gBACXH;AAAA,cACF;AAAA,cACFnN;AAAA,YACF;AAAA,UAAA;AAIS,SADQ,MAAM,QAAQ,IAAI47B,CAAQ,GAClC,QAAQ,CAAC+gD,MAAiB;AAErC,UAAAH,EAAQ,KAAK,GAAGG,EAAa,KAAK,IAAI;AAAA,QAAA,CACvC;AAAA,MACH;AACW,aAAArvE,EAAA,mBAAmBtD,EAAI,KAAK,KAAK,QACrC,QAAQ,QAAQwyE,CAAY;AAAA,IACrC;AACI,WAAAxyE,EAAI,WAAWhE,KACV,QAAQ,QAAQ,CAAA,CAAO,IAGzBw2E;AAAA,WACAxqE,GAAU;AACb,WAAA1L,GAA8B0L,CAAG,IAC5B,QAAQ,OAAO,IAAIvL,GAAsBuL,CAAG,CAAC,IAElDrL,GAAoCqL,CAAG,IAClC,QAAQ,OAAO,IAAIlL,GAAuBkL,GAAKvU,GAAQwJ,GAAQ+K,CAAG,CAAC,IAExEtK,GAA4CsK,CAAG,IAC1C,QAAQ,OAAO,IAAIpK,GAA+BoK,GAAKA,CAAG,CAAC,IAE7D,QAAQ,OAAO,IAAIrM,GAAeqM,CAAG,CAAC;AAAA,EAC/C;AACF;AC1IO,SAAS4qE,KAAY;AACnB,SAAA;AAAA,IACL,kBAAAn3E;AAAA,IACA,yBAAAe;AAAA,IACA,0BAAAK;AAAA,IACA,4BAAAS;AAAA,EAAA;AAEJ;ACFA,MAAMwyB,KAAY,eACLG,KAAS;AAEN,SAAA4iD,GAA6C3kD,GAA6Bz6B,GAAgB;AAgBjG,SAAA;AAAA,IACL,cAhBmB,CAAC6P,GAAwBH,MAC5CosB,GAAwBrB,GAAQ4B,IAAW,CAAA,GAAIxsB,GAAYH,GAAW1P,GAAQw8B,EAAM;AAAA,IAgBpF,UAde,CAACoC,MAAepE,GAAqBC,GAAQ4B,KAAY,QAAQ,EAAE,IAAAuC,EAAA,GAAM5+B,GAAQw8B,EAAM;AAAA,IAetG,WAbgB,CAAC/yB,MAAkB;AAC7B,YAAA0c,IAAO3nB,GAAkBiL,EAAK,aAAa,EAC9C,MAAM,CAAC,EACP,QAAQ,UAAU,QAAQ;AAEtB,aAAAirD,GAAsBj6B,GAAQhxB,GAAM4yB,KAAY,UAAU,EAAE,MAAAlW,EAAQ,GAAAnmB,GAAQw8B,EAAM;AAAA,IAAA;AAAA,IASzF,WANgB,CAACoC,MAAeu6B,GAAsB1+B,GAAQ4B,KAAY,QAAQ,EAAE,IAAAuC,EAAA,GAAM5+B,GAAQw8B,EAAM;AAAA,EAMxG;AAEJ;AC/BO,MAAM6iD,KAAgC;AAI7B,SAAAC,GACdC,IAAqC,IACrC;AACM,QAAA,EAAE,GAAApjF,MAAMC,MAERojF,IAAqBt9E,EAA4B;AAAA,IAEnD;AAAA,MACE,OAAO;AAAA,MACP,OAAO/F,EAAE,0CAA0C;AAAA,IACrD;AAAA,IAEF,GAAGojF;AAAA,EAAA,CACJ;AAMM,SAAA;AAAA,IACL,oBAAAC;AAAA,IACA,sBAN2B,CAAC7iF,MACrB6iF,EAAmB,MAAM,KAAK,CAAC/+E,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKnE;AAEJ;ACiCA,MAAe8iF,KAAA;AAAA,EACb,QAAuCC,GAAUn9E,GAAiC;AAC5E,IAAAm9E,EAAA,QAAQhgF,IAAmB6C,EAAQ,WAAW,GAC9Cm9E,EAAA,QAAQ//E,IAAyB4C,EAAQ,iBAAiB,GAC9Dm9E,EAAI,QAAQ9/E,IAA0B2C,EAAQ,UAAU,SAAS,GACjEm9E,EAAI,QAAQ7/E,IAAuB0C,EAAQ,UAAU,OAAO,GACxDm9E,EAAA,UAAU,OAAOC,EAAG,GACxBD,EAAI,IAAIE,IAAc,EAAE,eAAe,gBAAiB,CAAA,GACxD76B,GAA4BxiD,EAAQ,KAAK,GACzCu3B,GAA8Bv3B,EAAQ,OAAO;AAAA,EAC/C;AACF,GC3Eas9E,KAAkB,CAAIp7D,GAAiB9nB,MAAa;AACzD,QAAA2B,IAAQmmB,EAAM,QAAQ9nB,CAAK;AACjC,MAAI2B,MAAU,IAAI;AAChB,IAAAmmB,EAAM,KAAK9nB,CAAK;AAChB;AAAA,EACF;AACM,EAAA8nB,EAAA,OAAOnmB,GAAO,CAAC;AACvB,GAEawhF,KAAgB,CAACn2E,GAAgC0Z,IAAY,SAAS1Z,EAAO,KAAK0Z,CAAS,GAE3F08D,KAAgB,IAAO1qE,MAAgB,MAAM,KAAK,GAAGA,CAAI,GAIzD2qE,KAAe,CAAIpgE,GAAuBsH,IAAW,OACzDtH,EAAM,OAAO,CAACxZ,GAAQgb,MACvB,MAAM,QAAQA,CAAO,IAAU4+D,GAAa5+D,GAAS8F,CAAG,KAC5DA,EAAI,KAAK9F,CAAO,GACT8F,IACN,CAAE,CAAA,GAGM+4D,KAAyB,CAAIC,GAAaC,MAAyB;AAC1E,MAAAD,EAAO,WAAWC,EAAO;AACpB,WAAA;AAIT,QAAMC,IAAeF,EAAO,MAAM,EAAE,KAAK,GACnCG,IAAeF,EAAO,MAAM,EAAE,KAAK;AAGzC,WAASt9E,IAAI,GAAGA,IAAIu9E,EAAa,QAAQv9E;AACvC,QAAIu9E,EAAav9E,CAAC,MAAMw9E,EAAax9E,CAAC;AAC7B,aAAA;AAIJ,SAAA;AACT,GCtCay9E,KAAmC,CAAC3/E,MAAiB;AAChE,UAAQ,aAAa,QAAQ,OAAO,IAAIA,CAAI;AAC9C,GAEa4/E,KAAmC,CAACp0E,GAAgB6jC,MAAyB;AAClF,QAAAwwC,IAAWr0E,EAAO,QAAQ6jC,CAAE;AAClC,EAAAswC,GAAiCE,EAAS,IAAI;AAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCSel0D,KAAA;AAAA,EACb,QAAQ;AAAA,IAAA,OACNm0D;AAAAA,IAAA,QACAlP;AAAAA,IAAA,OACAthE;AAAAA,IAAA,QACAjQ;AAAAA,IAAA,UACA0gF;AAAAA,IAAA,KACAC;AAAAA,IAAA,KACAC;AAAAA,IAAA,YACA5sE;AAAAA,IAAA,iBACA6sE;AAAAA,IAAA,aACAC;AAAAA,IAAA,eACAC;AAAAA,IAAA,MACAr3C;AAAAA,IAAA,UACAe;AAAAA,EACF;AAAA,EACA,UAAUu2C;AAAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAAA,IACL;AAAA,IACA,uBAAuB;AAAA,MACrB,GAAGC;AAAAA,IACL;AAAA,IACA,cAAc;AAAA,MACZ,GAAGC;AAAAA,IACL;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC5BeC,KAAA;AAAA,EACb,QAAQ;AAAA,IAAA,OACNX;AAAAA,IAAA,QACAlP;AAAAA,IAAA,OACAthE;AAAAA,IAAA,QACAjQ;AAAAA,IAAA,UACA0gF;AAAAA,IAAA,KACAC;AAAAA,IAAA,KACAC;AAAAA,IAAA,YACA5sE;AAAAA,IAAA,iBACA6sE;AAAAA,IAAA,aACAC;AAAAA,IAAA,eACAC;AAAAA,IAAA,MACAr3C;AAAAA,IAAA,UACAe;AAAAA,EACF;AAAA,EACA,UAAUu2C;AAAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAAA,IACL;AAAA,IACA,uBAAuB;AAAA,MACrB,GAAGC;AAAAA,IACL;AAAA,IACA,cAAc;AAAA,MACZ,GAAGC;AAAAA,IACL;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC3Be/0D,KAAA;AAAA,EACb,QAAQ;AAAA,IACN,OAAAq0D;AAAA,IAAA,QACAlP;AAAAA,IAAA,OACAthE;AAAAA,IAAA,QACAjQ;AAAAA,IACA,UAAA0gF;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,YAAA5sE;AAAA,IACA,iBAAA6sE;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,MAAAr3C;AAAA,IACA,UAAAe;AAAA,IACA,UAAA42C;AAAA,EACF;AAAA,EACA,UAAUL;AAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAA,IACL;AAAA,IACA,uBAAuB;AAAA,MACrB,GAAGC;AAAA,IACL;AAAA,IACA,cAAc;AAAA,MACZ,GAAGC;AAAA,IACL;AAAA,EACF;AACF,GC9CaG,KAAyB,OAwH7B;AAAA,EACL,eAXoB,OACb;AAAA,IACL,aAAaC;AAAAA,IACb,eAAeA;AAAAA,IACf,cAAcA;AAAAA,IACd,UAAUA;AAAAA,IACV,aAAaC;AAAAA,EAAA;AAAA,EAMf,gBA5EqB,OACd;AAAA,IACL,QAAQ,CAAC;AAAA,IACT,YAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,kBAAkB;AAAA,MAClB,YAAY;AAAA,IACd;AAAA,IACA,mBAAmB;AAAA,MACjB,OAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EAAA;AAAA,EAiBF,aA1HkB,OACX;AAAA,IACL,cAAc;AAAA,IACd,YAAY;AAAA,MACV,QAAQ,CAAC;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,cAAc;AAAA,UACd,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,QACA,WAAW,CAAC;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,QACA,WAAW,CAAC;AAAA,MACd;AAAA,IACF;AAAA,EAAA;AAiFF;AC7HJ,eAAsBC,KAAkB;AAGtC,GAFsB,MAAM,OAAO,6BAAe,oBAEpC,KAAK;AAAA,IACjB,QAAQ;AAAA,MACN,UAAU,CAAC,6CAA6C;AAAA,IAC1D;AAAA;AAAA,EAAA,CAED;AACH;ACJO,SAASC,KAAsB;AAC9B,QAAAC,IAAa,CAAC7D,GAA+B99E,OAC1C;AAAA,IACL,IAAI;AAAA,IACJ,QAAQyxB,GAAU;AAAA,IAClB,QAAQ;AAAA,IACR,8BAA8B;AAAA,IAC9B,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,WAAWjkB,GAAY;AAAA,IACvB,YAAYA,GAAY;AAAA,IACxB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAeswE;AAAA,IACf,SAAS99E;AAAA,EAAA;AAcN,SAAA;AAAA,IACL,YAAA2hF;AAAA,IACA,sBAZ2B,CAAC3hF,OACrB;AAAA,MACL,GAAG2hF,EAAW,qBAAqB3hF,CAAM;AAAA,MAEvC,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,EAMF;AAEJ;AC3BA,MAAMkmD,KAAShkD,EAAmB,IAAI;AAE/B,SAAS0/E,GAAe5xC,GAA6B;AACtD,EAAAA,EAAG,MAAM,eACXkW,GAAO,QAAQlW,EAAG,MAAM,WAAW,SAAS;AAG9C,QAAM6xC,IAAqB,MAAMhlF,GAAOqpD,GAAO,KAAK,GAC9C47B,IAAuB,MAAM57B,GAAO,UAAU,WAC9C67B,IAAkC,MAAM77B,GAAO,UAAU,6BACzD87B,IAA+B,MAAM97B,GAAO,UAAU,0BACtD+7B,IAAuB,MAAM/7B,GAAO,UAAU;AAE7C,SAAA;AAAA,IACL,QAAQ94B,GAAS84B,EAAM;AAAA,IACvB,oBAAA27B;AAAA,IACA,sBAAAC;AAAA,IACA,iCAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA;AAEJ;","x_google_ignoreList":[13,24,25,47,48,49,50,51,52,53,54,55,56,57,58,59,60,146,147,148,149,150,151,152,191,260]}
|