@hartl-services/medusa-base 2.10.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/.medusa/server/src/admin/index.js +44 -40
  2. package/.medusa/server/src/admin/index.mjs +44 -40
  3. package/.medusa/server/src/api/admin/tax-compliance/customer-addresses/[address_id]/tax-identification/route.js +15 -0
  4. package/.medusa/server/src/api/check-customer-address-tax-identification.js +93 -0
  5. package/.medusa/server/src/api/customer-address-identification-response.js +14 -0
  6. package/.medusa/server/src/api/middlewares.js +55 -1
  7. package/.medusa/server/src/api/store/carts/[id]/tax-identification/route.js +179 -0
  8. package/.medusa/server/src/api/store/customers/me/addresses/[address_id]/tax-identification/route.js +12 -0
  9. package/.medusa/server/src/api/store/customers/me/tax-identifications/route.js +14 -0
  10. package/.medusa/server/src/api/store/tax-identification-policy/route.js +21 -0
  11. package/.medusa/server/src/api/tax-identification-message.js +9 -0
  12. package/.medusa/server/src/api/to-response-amount.js +19 -0
  13. package/.medusa/server/src/email/application/deliver-ephemeral-auth-mail.js +2 -4
  14. package/.medusa/server/src/email/application/handle-password-reset-event.js +75 -27
  15. package/.medusa/server/src/email/rendering/default-templates.js +2 -1
  16. package/.medusa/server/src/email/rendering/render-email.js +2 -1
  17. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +5 -1
  18. package/.medusa/server/src/email/templates/blocks/dynamic-blocks.js +5 -2
  19. package/.medusa/server/src/email/templates/defaults/documents.js +8 -1
  20. package/.medusa/server/src/email/templates/defaults/subjects.js +3 -1
  21. package/.medusa/server/src/email/templates/defaults/texts.js +4 -2
  22. package/.medusa/server/src/email/templates/render.js +2 -1
  23. package/.medusa/server/src/email/templates/sample-data.js +5 -1
  24. package/.medusa/server/src/email/types/email-kinds.js +3 -1
  25. package/.medusa/server/src/email/types/template-data.js +8 -1
  26. package/.medusa/server/src/jobs/tax-compliance-state-sync.js +26 -0
  27. package/.medusa/server/src/modules/email/migrations/Migration20261013120000.js +20 -0
  28. package/.medusa/server/src/modules/tax-compliance/domain/validation-policy.js +48 -0
  29. package/.medusa/server/src/modules/tax-compliance/index.js +15 -0
  30. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814120459.js +18 -0
  31. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814121724.js +14 -0
  32. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814153410.js +14 -0
  33. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260929091620.js +27 -0
  34. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20261011090147.js +16 -0
  35. package/.medusa/server/src/modules/tax-compliance/models/tax-compliance-state.js +29 -0
  36. package/.medusa/server/src/modules/tax-compliance/models/tax-compliance-validation.js +74 -0
  37. package/.medusa/server/src/modules/tax-compliance/runtime-settings.js +43 -0
  38. package/.medusa/server/src/modules/tax-compliance/service.js +693 -0
  39. package/.medusa/server/src/providers/tax-compliance/index.js +11 -0
  40. package/.medusa/server/src/providers/tax-compliance/service.js +179 -0
  41. package/.medusa/server/src/public/constants.js +4 -2
  42. package/.medusa/server/src/public/index.js +6 -2
  43. package/.medusa/server/src/public/tax-compliance.js +22 -0
  44. package/.medusa/server/src/shared/lib/index.js +2 -1
  45. package/.medusa/server/src/shared/lib/optional-registration.js +34 -0
  46. package/.medusa/server/src/shop-config/build-food-shop-config.js +12 -9
  47. package/.medusa/server/src/subscribers/tax-compliance-plugin-features-updated.js +25 -0
  48. package/.medusa/server/src/tax-compliance/complete-cart-hooks.js +26 -0
  49. package/.medusa/server/src/tax-compliance/integrations/finanzonline/client.js +222 -0
  50. package/.medusa/server/src/tax-compliance/integrations/finanzonline/validator.js +50 -0
  51. package/.medusa/server/src/tax-compliance/integrations/registry.js +26 -0
  52. package/.medusa/server/src/tax-compliance/integrations/validator.js +19 -0
  53. package/.medusa/server/src/tax-compliance/lib/order-tax-context.js +100 -0
  54. package/.medusa/server/src/tax-compliance/lib/tax-compliance-state.js +59 -0
  55. package/.medusa/server/src/tax-compliance/lib/tax-runtime-settings.js +79 -0
  56. package/.medusa/server/src/tax-compliance/plugin-features.js +73 -0
  57. package/.medusa/server/src/tax-compliance/resolve-services.js +7 -0
  58. package/.medusa/server/src/tax-compliance/types/tax-compliance.js +6 -0
  59. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +25 -30
  60. package/.medusa/server/src/workflows/documents/issue-packing-list.js +3 -14
  61. package/.medusa/server/src/workflows/hooks/cart-tax-context.js +78 -0
  62. package/.medusa/server/src/workflows/hooks/order-tax-context.js +7 -0
  63. package/.medusa/server/src/workflows/hooks/shipping-tax-apportionment.js +145 -0
  64. package/.medusa/server/src/workflows/tax-compliance/apportion-order-shipping-tax.js +72 -0
  65. package/.medusa/server/src/workflows/tax-compliance/domain/requires-frozen-tax-evidence.js +27 -0
  66. package/.medusa/server/src/workflows/tax-compliance/freeze-order-evidence.js +125 -0
  67. package/.medusa/server/src/workflows/tax-compliance/submit-customer-address-tax-identification.js +18 -0
  68. package/.medusa/server/src/workflows/tax-compliance/submit-tax-identification.js +18 -0
  69. package/README.md +369 -27
  70. package/dist/email/types/email-kinds.d.ts +3 -2
  71. package/dist/email/types/email-kinds.js +2 -0
  72. package/dist/email/types/shop-configuration.d.ts +8 -0
  73. package/dist/email/types/template-data.d.ts +6 -1
  74. package/dist/email/types/template-data.js +7 -0
  75. package/dist/public/constants.d.ts +2 -0
  76. package/dist/public/constants.js +3 -1
  77. package/dist/public/index.d.ts +2 -1
  78. package/dist/public/index.js +5 -1
  79. package/dist/public/tax-compliance.d.ts +30 -0
  80. package/dist/public/tax-compliance.js +21 -0
  81. package/dist/shared/lib/index.d.ts +1 -0
  82. package/dist/shared/lib/index.js +1 -0
  83. package/dist/shared/lib/optional-registration.d.ts +18 -0
  84. package/dist/shared/lib/optional-registration.js +33 -0
  85. package/dist/shop-config/build-food-shop-config.d.ts +2 -2
  86. package/dist/shop-config/build-food-shop-config.js +11 -8
  87. package/package.json +5 -4
@@ -3533,6 +3533,7 @@ const KINDS = [
3533
3533
  "order.return_received",
3534
3534
  "order.refunded",
3535
3535
  "auth.password_reset",
3536
+ "auth.admin_password_reset",
3536
3537
  "auth.verification",
3537
3538
  "auth.login_code",
3538
3539
  "affiliate.consignment_report_due",
@@ -3549,6 +3550,7 @@ const KIND_LABELS = {
3549
3550
  "order.return_received": "Retoureneingang",
3550
3551
  "order.refunded": "Rückerstattung",
3551
3552
  "auth.password_reset": "Passwort zurücksetzen",
3553
+ "auth.admin_password_reset": "Admin-Passwort zurücksetzen",
3552
3554
  "auth.verification": "Konto bestätigen",
3553
3555
  "auth.login_code": "Anmeldecode",
3554
3556
  "affiliate.consignment_report_due": "Affiliate-Meldung",
@@ -3657,6 +3659,7 @@ const EMAIL_TEMPLATE_GROUPS = {
3657
3659
  };
3658
3660
  const ACCOUNT_KINDS = [
3659
3661
  "auth.password_reset",
3662
+ "auth.admin_password_reset",
3660
3663
  "auth.verification",
3661
3664
  "auth.login_code",
3662
3665
  "user.invite"
@@ -3786,7 +3789,7 @@ const ATTEMPT_STATUS_BADGES = {
3786
3789
  failed: { label: ATTEMPT_STATUS_LABELS.failed, color: "red" },
3787
3790
  unknown: { label: ATTEMPT_STATUS_LABELS.unknown, color: "red" }
3788
3791
  };
3789
- const canResend = (message) => message.kind !== "auth.password_reset" && message.kind !== "auth.verification" && message.kind !== "auth.login_code" && (message.status === "sent" || message.status === "unknown" || message.status === "failed");
3792
+ const canResend = (message) => message.kind !== "auth.password_reset" && message.kind !== "auth.admin_password_reset" && message.kind !== "auth.verification" && message.kind !== "auth.login_code" && (message.status === "sent" || message.status === "unknown" || message.status === "failed");
3790
3793
  const formatResource = (message) => message.resource_id ? `${message.resource_type} · ${message.resource_id}` : message.resource_type;
3791
3794
  const emailLogDetailFields = (message) => [
3792
3795
  { label: "Art", value: KIND_LABELS[message.kind], mono: false },
@@ -4411,33 +4414,6 @@ const handle$7 = {
4411
4414
  breadcrumb: () => texts.breadcrumbs.emailAttachments
4412
4415
  };
4413
4416
  const EmailAttachmentsRoute = () => /* @__PURE__ */ jsxRuntime.jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsxRuntime.jsx(EmailAttachmentsPage, {}) });
4414
- const EmailDeliveryPage = () => {
4415
- const query = usePluginFeature("email");
4416
- const plugin2 = query.data?.plugin;
4417
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-3", children: [
4418
- /* @__PURE__ */ jsxRuntime.jsx(
4419
- AdminPageHeader,
4420
- {
4421
- badges: plugin2 && /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: plugin2.configured ? "green" : "orange", children: plugin2.configured ? texts.chips.configured : texts.chips.notConfigured }),
4422
- description: "SMTP oder Microsoft 365.",
4423
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.PaperPlane, {}),
4424
- title: texts.breadcrumbs.emailDelivery
4425
- }
4426
- ),
4427
- plugin2 ? /* @__PURE__ */ jsxRuntime.jsx(PluginSettingsForm, { plugin: plugin2 }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "p-0", children: /* @__PURE__ */ jsxRuntime.jsx(
4428
- QueryState,
4429
- {
4430
- error: query.error,
4431
- errorText: texts.states.error,
4432
- isLoading: query.isPending,
4433
- loadingText: texts.states.loading
4434
- }
4435
- ) })
4436
- ] });
4437
- };
4438
- const handle$6 = {
4439
- breadcrumb: () => texts.breadcrumbs.emailDelivery
4440
- };
4441
4417
  const LOG_PAGE_SIZE = 20;
4442
4418
  const LOG_MAX_OFFSET = 1e4;
4443
4419
  const LOG_MAX_RESOURCE_ID_LENGTH = 255;
@@ -4665,11 +4641,11 @@ const EmailLogPage = () => {
4665
4641
  ] })
4666
4642
  ] });
4667
4643
  };
4668
- const handle$5 = {
4644
+ const handle$6 = {
4669
4645
  breadcrumb: () => "Protokoll"
4670
4646
  };
4671
4647
  const EmailLogRoute = () => /* @__PURE__ */ jsxRuntime.jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsxRuntime.jsx(EmailLogPage, {}) });
4672
- const handle$4 = {
4648
+ const handle$5 = {
4673
4649
  breadcrumb: () => EMAIL_TEMPLATE_GROUPS.order.label
4674
4650
  };
4675
4651
  const EmailOrderMailsRoute = () => /* @__PURE__ */ jsxRuntime.jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsxRuntime.jsx(EmailTemplateGroupPage, { group: "order" }) });
@@ -4677,7 +4653,7 @@ const PluginDetailPage = () => {
4677
4653
  const { plugin_key: pluginKey = "" } = reactRouterDom.useParams();
4678
4654
  return /* @__PURE__ */ jsxRuntime.jsx(PluginPageShell, { pluginKey, variant: "header", children: /* @__PURE__ */ jsxRuntime.jsx(PluginFeatureSections, { pluginKey }) });
4679
4655
  };
4680
- const handle$3 = {
4656
+ const handle$4 = {
4681
4657
  breadcrumb: (match) => /* @__PURE__ */ jsxRuntime.jsx(PluginLabelCrumb, { pluginKey: match.params.plugin_key ?? "" })
4682
4658
  };
4683
4659
  const STATUS_BADGES = {
@@ -5045,13 +5021,40 @@ const EmailAttachmentCrumb = ({
5045
5021
  }).data?.attachments.find((attachment) => attachment.id === attachmentId)?.name;
5046
5022
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: name ?? "Anhang" });
5047
5023
  };
5048
- const handle$2 = {
5024
+ const handle$3 = {
5049
5025
  breadcrumb: (match) => /* @__PURE__ */ jsxRuntime.jsx(EmailAttachmentCrumb, { attachmentId: match.params.id ?? "" })
5050
5026
  };
5051
5027
  const EmailAttachmentRoute = () => {
5052
5028
  const { id } = reactRouterDom.useParams();
5053
5029
  return /* @__PURE__ */ jsxRuntime.jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsxRuntime.jsx(EmailAttachmentDetailPage, { attachmentId: id ?? "" }) });
5054
5030
  };
5031
+ const EmailDeliveryPage = () => {
5032
+ const query = usePluginFeature("email");
5033
+ const plugin2 = query.data?.plugin;
5034
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-3", children: [
5035
+ /* @__PURE__ */ jsxRuntime.jsx(
5036
+ AdminPageHeader,
5037
+ {
5038
+ badges: plugin2 && /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: plugin2.configured ? "green" : "orange", children: plugin2.configured ? texts.chips.configured : texts.chips.notConfigured }),
5039
+ description: "SMTP oder Microsoft 365.",
5040
+ icon: /* @__PURE__ */ jsxRuntime.jsx(icons.PaperPlane, {}),
5041
+ title: texts.breadcrumbs.emailDelivery
5042
+ }
5043
+ ),
5044
+ plugin2 ? /* @__PURE__ */ jsxRuntime.jsx(PluginSettingsForm, { plugin: plugin2 }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "p-0", children: /* @__PURE__ */ jsxRuntime.jsx(
5045
+ QueryState,
5046
+ {
5047
+ error: query.error,
5048
+ errorText: texts.states.error,
5049
+ isLoading: query.isPending,
5050
+ loadingText: texts.states.loading
5051
+ }
5052
+ ) })
5053
+ ] });
5054
+ };
5055
+ const handle$2 = {
5056
+ breadcrumb: () => texts.breadcrumbs.emailDelivery
5057
+ };
5055
5058
  const isNotFound = (error) => typeof error === "object" && error !== null && error.status === 404;
5056
5059
  const useResend = (message) => {
5057
5060
  const queryClient = reactQuery.useQueryClient();
@@ -5293,6 +5296,7 @@ const DATA_SOURCE_LABELS = {
5293
5296
  "order.return_received": "der Bestellung",
5294
5297
  "order.refunded": "der Bestellung",
5295
5298
  "auth.password_reset": "des Kontos",
5299
+ "auth.admin_password_reset": "des Kontos",
5296
5300
  "auth.verification": "des Kontos",
5297
5301
  "auth.login_code": "des Anmeldecodes",
5298
5302
  "user.invite": "des Kontos",
@@ -6759,29 +6763,29 @@ const routeModule = {
6759
6763
  path: "/settings/hartl-services/email/attachments",
6760
6764
  handle: handle$7
6761
6765
  },
6762
- {
6763
- Component: EmailDeliveryPage,
6764
- path: "/settings/hartl-services/email/delivery",
6765
- handle: handle$6
6766
- },
6767
6766
  {
6768
6767
  Component: EmailLogRoute,
6769
6768
  path: "/settings/hartl-services/email/log",
6770
- handle: handle$5
6769
+ handle: handle$6
6771
6770
  },
6772
6771
  {
6773
6772
  Component: EmailOrderMailsRoute,
6774
6773
  path: "/settings/hartl-services/email/order",
6775
- handle: handle$4
6774
+ handle: handle$5
6776
6775
  },
6777
6776
  {
6778
6777
  Component: PluginDetailPage,
6779
6778
  path: "/settings/hartl-services/plugin/:plugin_key",
6780
- handle: handle$3
6779
+ handle: handle$4
6781
6780
  },
6782
6781
  {
6783
6782
  Component: EmailAttachmentRoute,
6784
6783
  path: "/settings/hartl-services/email/attachments/:id",
6784
+ handle: handle$3
6785
+ },
6786
+ {
6787
+ Component: EmailDeliveryPage,
6788
+ path: "/settings/hartl-services/email/delivery",
6785
6789
  handle: handle$2
6786
6790
  },
6787
6791
  {
@@ -3527,6 +3527,7 @@ const KINDS = [
3527
3527
  "order.return_received",
3528
3528
  "order.refunded",
3529
3529
  "auth.password_reset",
3530
+ "auth.admin_password_reset",
3530
3531
  "auth.verification",
3531
3532
  "auth.login_code",
3532
3533
  "affiliate.consignment_report_due",
@@ -3543,6 +3544,7 @@ const KIND_LABELS = {
3543
3544
  "order.return_received": "Retoureneingang",
3544
3545
  "order.refunded": "Rückerstattung",
3545
3546
  "auth.password_reset": "Passwort zurücksetzen",
3547
+ "auth.admin_password_reset": "Admin-Passwort zurücksetzen",
3546
3548
  "auth.verification": "Konto bestätigen",
3547
3549
  "auth.login_code": "Anmeldecode",
3548
3550
  "affiliate.consignment_report_due": "Affiliate-Meldung",
@@ -3651,6 +3653,7 @@ const EMAIL_TEMPLATE_GROUPS = {
3651
3653
  };
3652
3654
  const ACCOUNT_KINDS = [
3653
3655
  "auth.password_reset",
3656
+ "auth.admin_password_reset",
3654
3657
  "auth.verification",
3655
3658
  "auth.login_code",
3656
3659
  "user.invite"
@@ -3780,7 +3783,7 @@ const ATTEMPT_STATUS_BADGES = {
3780
3783
  failed: { label: ATTEMPT_STATUS_LABELS.failed, color: "red" },
3781
3784
  unknown: { label: ATTEMPT_STATUS_LABELS.unknown, color: "red" }
3782
3785
  };
3783
- const canResend = (message) => message.kind !== "auth.password_reset" && message.kind !== "auth.verification" && message.kind !== "auth.login_code" && (message.status === "sent" || message.status === "unknown" || message.status === "failed");
3786
+ const canResend = (message) => message.kind !== "auth.password_reset" && message.kind !== "auth.admin_password_reset" && message.kind !== "auth.verification" && message.kind !== "auth.login_code" && (message.status === "sent" || message.status === "unknown" || message.status === "failed");
3784
3787
  const formatResource = (message) => message.resource_id ? `${message.resource_type} · ${message.resource_id}` : message.resource_type;
3785
3788
  const emailLogDetailFields = (message) => [
3786
3789
  { label: "Art", value: KIND_LABELS[message.kind], mono: false },
@@ -4405,33 +4408,6 @@ const handle$7 = {
4405
4408
  breadcrumb: () => texts.breadcrumbs.emailAttachments
4406
4409
  };
4407
4410
  const EmailAttachmentsRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailAttachmentsPage, {}) });
4408
- const EmailDeliveryPage = () => {
4409
- const query = usePluginFeature("email");
4410
- const plugin2 = query.data?.plugin;
4411
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-3", children: [
4412
- /* @__PURE__ */ jsx(
4413
- AdminPageHeader,
4414
- {
4415
- badges: plugin2 && /* @__PURE__ */ jsx(StatusBadge, { color: plugin2.configured ? "green" : "orange", children: plugin2.configured ? texts.chips.configured : texts.chips.notConfigured }),
4416
- description: "SMTP oder Microsoft 365.",
4417
- icon: /* @__PURE__ */ jsx(PaperPlane, {}),
4418
- title: texts.breadcrumbs.emailDelivery
4419
- }
4420
- ),
4421
- plugin2 ? /* @__PURE__ */ jsx(PluginSettingsForm, { plugin: plugin2 }) : /* @__PURE__ */ jsx(Container, { className: "p-0", children: /* @__PURE__ */ jsx(
4422
- QueryState,
4423
- {
4424
- error: query.error,
4425
- errorText: texts.states.error,
4426
- isLoading: query.isPending,
4427
- loadingText: texts.states.loading
4428
- }
4429
- ) })
4430
- ] });
4431
- };
4432
- const handle$6 = {
4433
- breadcrumb: () => texts.breadcrumbs.emailDelivery
4434
- };
4435
4411
  const LOG_PAGE_SIZE = 20;
4436
4412
  const LOG_MAX_OFFSET = 1e4;
4437
4413
  const LOG_MAX_RESOURCE_ID_LENGTH = 255;
@@ -4659,11 +4635,11 @@ const EmailLogPage = () => {
4659
4635
  ] })
4660
4636
  ] });
4661
4637
  };
4662
- const handle$5 = {
4638
+ const handle$6 = {
4663
4639
  breadcrumb: () => "Protokoll"
4664
4640
  };
4665
4641
  const EmailLogRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailLogPage, {}) });
4666
- const handle$4 = {
4642
+ const handle$5 = {
4667
4643
  breadcrumb: () => EMAIL_TEMPLATE_GROUPS.order.label
4668
4644
  };
4669
4645
  const EmailOrderMailsRoute = () => /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailTemplateGroupPage, { group: "order" }) });
@@ -4671,7 +4647,7 @@ const PluginDetailPage = () => {
4671
4647
  const { plugin_key: pluginKey = "" } = useParams();
4672
4648
  return /* @__PURE__ */ jsx(PluginPageShell, { pluginKey, variant: "header", children: /* @__PURE__ */ jsx(PluginFeatureSections, { pluginKey }) });
4673
4649
  };
4674
- const handle$3 = {
4650
+ const handle$4 = {
4675
4651
  breadcrumb: (match) => /* @__PURE__ */ jsx(PluginLabelCrumb, { pluginKey: match.params.plugin_key ?? "" })
4676
4652
  };
4677
4653
  const STATUS_BADGES = {
@@ -5039,13 +5015,40 @@ const EmailAttachmentCrumb = ({
5039
5015
  }).data?.attachments.find((attachment) => attachment.id === attachmentId)?.name;
5040
5016
  return /* @__PURE__ */ jsx(Fragment, { children: name ?? "Anhang" });
5041
5017
  };
5042
- const handle$2 = {
5018
+ const handle$3 = {
5043
5019
  breadcrumb: (match) => /* @__PURE__ */ jsx(EmailAttachmentCrumb, { attachmentId: match.params.id ?? "" })
5044
5020
  };
5045
5021
  const EmailAttachmentRoute = () => {
5046
5022
  const { id } = useParams();
5047
5023
  return /* @__PURE__ */ jsx(PluginFeatureRoute, { pluginKey: "email", children: /* @__PURE__ */ jsx(EmailAttachmentDetailPage, { attachmentId: id ?? "" }) });
5048
5024
  };
5025
+ const EmailDeliveryPage = () => {
5026
+ const query = usePluginFeature("email");
5027
+ const plugin2 = query.data?.plugin;
5028
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-3", children: [
5029
+ /* @__PURE__ */ jsx(
5030
+ AdminPageHeader,
5031
+ {
5032
+ badges: plugin2 && /* @__PURE__ */ jsx(StatusBadge, { color: plugin2.configured ? "green" : "orange", children: plugin2.configured ? texts.chips.configured : texts.chips.notConfigured }),
5033
+ description: "SMTP oder Microsoft 365.",
5034
+ icon: /* @__PURE__ */ jsx(PaperPlane, {}),
5035
+ title: texts.breadcrumbs.emailDelivery
5036
+ }
5037
+ ),
5038
+ plugin2 ? /* @__PURE__ */ jsx(PluginSettingsForm, { plugin: plugin2 }) : /* @__PURE__ */ jsx(Container, { className: "p-0", children: /* @__PURE__ */ jsx(
5039
+ QueryState,
5040
+ {
5041
+ error: query.error,
5042
+ errorText: texts.states.error,
5043
+ isLoading: query.isPending,
5044
+ loadingText: texts.states.loading
5045
+ }
5046
+ ) })
5047
+ ] });
5048
+ };
5049
+ const handle$2 = {
5050
+ breadcrumb: () => texts.breadcrumbs.emailDelivery
5051
+ };
5049
5052
  const isNotFound = (error) => typeof error === "object" && error !== null && error.status === 404;
5050
5053
  const useResend = (message) => {
5051
5054
  const queryClient = useQueryClient();
@@ -5287,6 +5290,7 @@ const DATA_SOURCE_LABELS = {
5287
5290
  "order.return_received": "der Bestellung",
5288
5291
  "order.refunded": "der Bestellung",
5289
5292
  "auth.password_reset": "des Kontos",
5293
+ "auth.admin_password_reset": "des Kontos",
5290
5294
  "auth.verification": "des Kontos",
5291
5295
  "auth.login_code": "des Anmeldecodes",
5292
5296
  "user.invite": "des Kontos",
@@ -6753,29 +6757,29 @@ const routeModule = {
6753
6757
  path: "/settings/hartl-services/email/attachments",
6754
6758
  handle: handle$7
6755
6759
  },
6756
- {
6757
- Component: EmailDeliveryPage,
6758
- path: "/settings/hartl-services/email/delivery",
6759
- handle: handle$6
6760
- },
6761
6760
  {
6762
6761
  Component: EmailLogRoute,
6763
6762
  path: "/settings/hartl-services/email/log",
6764
- handle: handle$5
6763
+ handle: handle$6
6765
6764
  },
6766
6765
  {
6767
6766
  Component: EmailOrderMailsRoute,
6768
6767
  path: "/settings/hartl-services/email/order",
6769
- handle: handle$4
6768
+ handle: handle$5
6770
6769
  },
6771
6770
  {
6772
6771
  Component: PluginDetailPage,
6773
6772
  path: "/settings/hartl-services/plugin/:plugin_key",
6774
- handle: handle$3
6773
+ handle: handle$4
6775
6774
  },
6776
6775
  {
6777
6776
  Component: EmailAttachmentRoute,
6778
6777
  path: "/settings/hartl-services/email/attachments/:id",
6778
+ handle: handle$3
6779
+ },
6780
+ {
6781
+ Component: EmailDeliveryPage,
6782
+ path: "/settings/hartl-services/email/delivery",
6779
6783
  handle: handle$2
6780
6784
  },
6781
6785
  {
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const check_customer_address_tax_identification_1 = require("../../../../../check-customer-address-tax-identification");
5
+ /**
6
+ * Checks the UID of any customer's saved address again, e.g. when the check
7
+ * was unavailable while the customer applied as a partner.
8
+ */
9
+ const POST = async (req, res) => {
10
+ res
11
+ .status(200)
12
+ .json(await (0, check_customer_address_tax_identification_1.checkCustomerAddressTaxIdentification)(req.scope, req.params.address_id));
13
+ };
14
+ exports.POST = POST;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3RheC1jb21wbGlhbmNlL2N1c3RvbWVyLWFkZHJlc3Nlcy9bYWRkcmVzc19pZF0vdGF4LWlkZW50aWZpY2F0aW9uL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLHdIQUFnSDtBQUVoSDs7O0dBR0c7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStCLEVBQy9CLEdBQW1FLEVBQ3BELEVBQUU7SUFDakIsR0FBRztTQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDWCxJQUFJLENBQ0gsTUFBTSxJQUFBLGlGQUFxQyxFQUN6QyxHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUN0QixDQUNGLENBQUE7QUFDTCxDQUFDLENBQUE7QUFaWSxRQUFBLElBQUksUUFZaEIifQ==
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkCustomerAddressTaxIdentification = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const tax_compliance_1 = require("@hartl-services/medusa-food-supplements-contracts/paths/tax-compliance");
6
+ const tax_compliance_2 = require("@hartl-services/medusa-food-supplements-contracts/schemas/tax-compliance");
7
+ const tax_runtime_settings_1 = require("../tax-compliance/lib/tax-runtime-settings");
8
+ const submit_customer_address_tax_identification_1 = require("../workflows/tax-compliance/submit-customer-address-tax-identification");
9
+ const customer_address_identification_response_1 = require("./customer-address-identification-response");
10
+ const tax_identification_message_1 = require("./tax-identification-message");
11
+ const invalid = (message) => new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
12
+ /**
13
+ * Checks the UID of a saved customer address. Company, UID (address
14
+ * metadata) and address come from the stored address, not from the request,
15
+ * so the evidence always describes the address as it is. With `customerId`
16
+ * only that customer's address is found (Store route); without it any
17
+ * customer's (Admin route), and the evidence belongs to the address's
18
+ * customer.
19
+ */
20
+ const checkCustomerAddressTaxIdentification = async (scope, addressId, customerId) => {
21
+ const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
22
+ const { data } = await query.graph({
23
+ entity: "customer_address",
24
+ fields: [
25
+ "id",
26
+ "customer_id",
27
+ "company",
28
+ "address_1",
29
+ "address_2",
30
+ "city",
31
+ "country_code",
32
+ "postal_code",
33
+ "metadata",
34
+ ],
35
+ filters: customerId
36
+ ? { id: addressId, customer_id: customerId }
37
+ : { id: addressId },
38
+ });
39
+ const address = data[0];
40
+ if (!address) {
41
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Address with id '${addressId}' not found.`);
42
+ }
43
+ const company = tax_compliance_2.SubmitTaxIdentificationSchema.shape.company_name.unwrap().safeParse(address.company ?? "");
44
+ if (!company.success) {
45
+ throw invalid("The address has no company.");
46
+ }
47
+ const vatNumber = tax_compliance_2.SubmitTaxIdentificationSchema.shape.vat_number.unwrap().safeParse(address.metadata?.[tax_compliance_1.TAX_IDENTIFICATION_METADATA_KEY] ?? "");
48
+ if (!vatNumber.success) {
49
+ throw invalid("The address has no valid VAT number.");
50
+ }
51
+ if (!address.address_1?.trim() ||
52
+ !address.city?.trim() ||
53
+ !address.country_code?.trim() ||
54
+ !address.postal_code?.trim()) {
55
+ throw invalid("The address is incomplete.");
56
+ }
57
+ const merchant = await (0, tax_runtime_settings_1.resolveMerchantProfile)(scope, {
58
+ failSafe: true,
59
+ subject: "address tax identification",
60
+ });
61
+ if (!merchant) {
62
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Tax compliance merchant configuration is unavailable.");
63
+ }
64
+ const { result: evidence } = await (0, submit_customer_address_tax_identification_1.submitCustomerAddressTaxIdentificationWorkflow)(scope).run({
65
+ input: {
66
+ customer_address_id: address.id,
67
+ customer_id: address.customer_id,
68
+ company_name: company.data,
69
+ customer_vat_number: vatNumber.data,
70
+ billing_address: {
71
+ address1: address.address_1,
72
+ address2: address.address_2,
73
+ city: address.city,
74
+ countryCode: address.country_code,
75
+ postalCode: address.postal_code,
76
+ },
77
+ merchant_country_code: merchant.countryCode,
78
+ merchant_vat_number: merchant.vatNumber,
79
+ },
80
+ });
81
+ return {
82
+ identification: (0, customer_address_identification_response_1.toCustomerAddressTaxIdentificationWire)({
83
+ customer_address_id: address.id,
84
+ status: evidence.status,
85
+ customer_vat_number: evidence.customer_vat_number,
86
+ company_name: evidence.company_name,
87
+ validated_at: evidence.validated_at,
88
+ }),
89
+ message: (0, tax_identification_message_1.taxIdentificationMessageFor)(evidence.status),
90
+ };
91
+ };
92
+ exports.checkCustomerAddressTaxIdentification = checkCustomerAddressTaxIdentification;
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stY3VzdG9tZXItYWRkcmVzcy10YXgtaWRlbnRpZmljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL2NoZWNrLWN1c3RvbWVyLWFkZHJlc3MtdGF4LWlkZW50aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUdrQztBQUVsQywyR0FBd0g7QUFDeEgsNkdBQXdIO0FBR3hILHFGQUFtRjtBQUNuRix1SUFBdUk7QUFDdkkseUdBQW1HO0FBQ25HLDZFQUEwRTtBQWMxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQWUsRUFBZSxFQUFFLENBQy9DLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFFMUQ7Ozs7Ozs7R0FPRztBQUNJLE1BQU0scUNBQXFDLEdBQUcsS0FBSyxFQUN4RCxLQUFzQixFQUN0QixTQUFpQixFQUNqQixVQUFtQixFQUNzQyxFQUFFO0lBQzNELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqQyxNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixhQUFhO1lBQ2IsU0FBUztZQUNULFdBQVc7WUFDWCxXQUFXO1lBQ1gsTUFBTTtZQUNOLGNBQWM7WUFDZCxhQUFhO1lBQ2IsVUFBVTtTQUNYO1FBQ0QsT0FBTyxFQUFFLFVBQVU7WUFDakIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO1lBQzVDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUU7S0FDdEIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxD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
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toCustomerAddressTaxIdentificationWire = void 0;
4
+ /** Only the public result: no provider facts, evidence IDs or merchant data. */
5
+ const toCustomerAddressTaxIdentificationWire = (source) => ({
6
+ customer_address_id: source.customer_address_id,
7
+ status: source.status,
8
+ verified: source.status === "eligible" || source.status === "ineligible",
9
+ vat_number: source.customer_vat_number,
10
+ company_name: source.company_name,
11
+ validated_at: new Date(source.validated_at).toISOString(),
12
+ });
13
+ exports.toCustomerAddressTaxIdentificationWire = toCustomerAddressTaxIdentificationWire;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItYWRkcmVzcy1pZGVudGlmaWNhdGlvbi1yZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvY3VzdG9tZXItYWRkcmVzcy1pZGVudGlmaWNhdGlvbi1yZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFZQSxnRkFBZ0Y7QUFDekUsTUFBTSxzQ0FBc0MsR0FBRyxDQUNwRCxNQUE0QixFQUNVLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7SUFDL0MsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0lBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFlBQVk7SUFDeEUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7SUFDdEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO0lBQ2pDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFO0NBQzFELENBQUMsQ0FBQTtBQVRXLFFBQUEsc0NBQXNDLDBDQVNqRCJ9
@@ -7,9 +7,12 @@ const email_1 = require("@hartl-services/medusa-food-supplements-contracts/schem
7
7
  const customer_auth_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-auth");
8
8
  const customer_verification_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-verification");
9
9
  const files_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/files");
10
+ const tax_compliance_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/tax-compliance");
11
+ const tax_compliance_2 = require("@hartl-services/medusa-food-supplements-contracts/paths/tax-compliance");
10
12
  const plugin_features_2 = require("../customer-auth/plugin-features");
11
13
  const plugin_features_3 = require("../documents/plugin-features");
12
14
  const plugin_features_4 = require("../email/plugin-features");
15
+ const plugin_features_5 = require("../tax-compliance/plugin-features");
13
16
  const customer_verification_request_throttle_1 = require("./customer-verification-request-throttle");
14
17
  const answer_code_provider_route_not_found_1 = require("./answer-code-provider-route-not-found");
15
18
  const answer_actor_type_casing_not_found_1 = require("./answer-actor-type-casing-not-found");
@@ -24,6 +27,11 @@ const public_1 = require("../public");
24
27
  */
25
28
  const documentsGate = (0, public_1.pluginFeatureGate)(plugin_features_3.documentsPluginFeatures);
26
29
  const customerAuthGate = (0, public_1.pluginFeatureGate)(plugin_features_2.customerAuthPluginFeatures);
30
+ // Steuer-Compliance: exact gates with the route's methods, so they touch no
31
+ // other cart or customer route. Tax hooks and complete-cart hooks never read
32
+ // a toggle; they read the stored mirror (tax-compliance/lib/tax-compliance-state.ts).
33
+ const requireB2b = (0, public_1.requirePluginFeature)(plugin_features_5.taxCompliancePluginFeatures, tax_compliance_2.TAX_COMPLIANCE_FEATURES.b2b);
34
+ const requireVatValidation = (0, public_1.requirePluginFeature)(plugin_features_5.taxCompliancePluginFeatures, tax_compliance_2.TAX_COMPLIANCE_FEATURES.vatValidation);
27
35
  // Authentication: Medusa authenticates every /admin route (actor "user";
28
36
  // bearer, session or secret API key) before plugin middlewares run
29
37
  // (framework 2.19.0 http/router.js), so no second `authenticate` here.
@@ -383,6 +391,52 @@ exports.default = (0, http_1.defineMiddlewares)({
383
391
  }),
384
392
  ],
385
393
  },
394
+ // --- Steuer-Compliance ----------------------------------------------
395
+ // The gate runs before the body validation below.
396
+ {
397
+ matcher: "/store/carts/:id/tax-identification",
398
+ methods: ["POST"],
399
+ middlewares: [requireB2b],
400
+ },
401
+ {
402
+ matcher: "/store/carts/:id/tax-identification",
403
+ methods: ["POST"],
404
+ middlewares: [(0, http_1.validateAndTransformBody)(tax_compliance_1.SubmitTaxIdentificationSchema)],
405
+ },
406
+ {
407
+ matcher: "/store/tax-identification-policy",
408
+ methods: ["GET"],
409
+ middlewares: [(0, public_1.requirePluginFeature)(plugin_features_5.taxCompliancePluginFeatures)],
410
+ },
411
+ // Saved customer addresses: UID-check gate first (404 while off, also for
412
+ // guests), then the customer login. Company, UID and address come from
413
+ // the stored address, so there is no body to validate.
414
+ {
415
+ matcher: "/store/customers/me/addresses/:address_id/tax-identification",
416
+ methods: ["POST"],
417
+ middlewares: [
418
+ requireVatValidation,
419
+ (0, http_1.authenticate)("customer", ["session", "bearer"]),
420
+ ],
421
+ },
422
+ {
423
+ matcher: "/store/customers/me/tax-identifications",
424
+ methods: ["GET"],
425
+ middlewares: [
426
+ requireVatValidation,
427
+ (0, http_1.authenticate)("customer", ["session", "bearer"]),
428
+ ],
429
+ },
430
+ // Admin re-check of any customer's saved address: gate first, then the
431
+ // admin login.
432
+ {
433
+ matcher: "/admin/tax-compliance/customer-addresses/:address_id/tax-identification",
434
+ methods: ["POST"],
435
+ middlewares: [
436
+ requireVatValidation,
437
+ (0, http_1.authenticate)("user", ["session", "bearer"]),
438
+ ],
439
+ },
386
440
  ],
387
441
  });
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBS2lDO0FBQ2pDLCtHQUtrRjtBQUNsRixtR0FHNEU7QUFDNUUsMkZBWXdFO0FBQ3hFLDJHQUdnRjtBQUNoRiwySEFBa0k7QUFDbEksMkZBQXVIO0FBRXZILHNFQUE2RTtBQUM3RSxrRUFBc0U7QUFDdEUsOERBQThEO0FBQzlELHFHQUE4RjtBQUM5RixpR0FBd0Y7QUFDeEYsNkZBQW9GO0FBQ3BGLDJGQUFzRjtBQUN0RixpRkFHdUM7QUFDdkMsdURBQXlEO0FBQ3pELDJGQUFtRjtBQUNuRixzQ0FBbUU7QUFFbkU7OztHQUdHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBaUIsRUFBQyx5Q0FBdUIsQ0FBQyxDQUFBO0FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBaUIsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFBO0FBRXRFLHlFQUF5RTtBQUN6RSxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFLDJFQUEyRTtBQUMzRSwwRUFBMEU7QUFDMUUsdUNBQXVDO0FBQ3ZDLGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsd0JBQXdCO1lBQ2pDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDRDQUEwQixDQUFDLENBQUM7U0FDcEU7UUFDRDtZQUNFLE9BQU8sRUFBRSw2Q0FBNkM7WUFDdEQsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsNENBQTBCLENBQUMsQ0FBQztTQUNwRTtRQUNEO1lBQ0UsT0FBTyxFQUFFLHdEQUF3RDtZQUNqRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENB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
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBS2lDO0FBQ2pDLCtHQUtrRjtBQUNsRixtR0FHNEU7QUFDNUUsMkZBWXdFO0FBQ3hFLDJHQUdnRjtBQUNoRiwySEFBa0k7QUFDbEksMkZBQXVIO0FBQ3ZILDZHQUF3SDtBQUN4SCwyR0FBZ0g7QUFFaEgsc0VBQTZFO0FBQzdFLGtFQUFzRTtBQUN0RSw4REFBOEQ7QUFDOUQsdUVBQStFO0FBQy9FLHFHQUE4RjtBQUM5RixpR0FBd0Y7QUFDeEYsNkZBQW9GO0FBQ3BGLDJGQUFzRjtBQUN0RixpRkFHdUM7QUFDdkMsdURBQXlEO0FBQ3pELDJGQUFtRjtBQUNuRixzQ0FBbUU7QUFFbkU7OztHQUdHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBaUIsRUFBQyx5Q0FBdUIsQ0FBQyxDQUFBO0FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBaUIsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFBO0FBQ3RFLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0Usc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSxHQUFHLElBQUEsNkJBQW9CLEVBQ3JDLDZDQUEyQixFQUMzQix3Q0FBdUIsQ0FBQyxHQUFHLENBQzVCLENBQUE7QUFDRCxNQUFNLG9CQUFvQixHQUFHLElBQUEsNkJBQW9CLEVBQy9DLDZDQUEyQixFQUMzQix3Q0FBdUIsQ0FBQyxhQUFhLENBQ3RDLENBQUE7QUFFRCx5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLHVFQUF1RTtBQUN2RSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHVDQUF1QztBQUN2QyxrQkFBZSxJQUFBLHdCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOO1lBQ0UsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsNkNBQTZDO1lBQ3RELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDRDQUEwQixDQUFDLENBQUM7U0FDcEU7UUFDRDtZQUNFLE9BQU8sRUFBRSx3REFBd0Q7WUFDakUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsdUNBQXFCLENBQUMsQ0FBQztTQUMvRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLDZEQUE2RDtZQUN0RSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLElBQUEsZ0NBQXlCLEVBQUMsaURBQStCLEVBQUU7b0JBQ3pELE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUM7YUFDSDtTQUNGO1FBQ0QsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLG1EQUFtRDtRQUNuRCxrRUFBa0U7UUFDbEUsNkRBQTZEO1FBQzdEO1lBQ0UsT0FBTyxFQUFFLGNBQWM7WUFDdkIsV0FBVyxFQUFFLENBQUMsSUFBQSw2QkFBb0IsRUFBQyxxQ0FBbUIsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSxnQ0FBeUIsRUFBQyx5Q0FBaUMsRUFBRTtvQkFDM0QsTUFBTSxFQUFFLElBQUk7aUJBQ2IsQ0FBQzthQUNIO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLG1DQUFtQztZQUM1QyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNYLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLElBQUEsK0JBQXdCLEVBQUMscUNBQTZCLENBQUM7YUFDeEQ7U0FDRjtRQUNEO1lBQ0UsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSwrQkFBd0IsRUFBQyxnREFBd0MsQ0FBQzthQUNuRTtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSwrQkFBd0IsRUFBQyxnREFBd0MsQ0FBQzthQUNuRTtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUseUNBQXlDO1lBQ2xELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSwrQkFBd0IsRUFBQyw2Q0FBcUMsQ0FBQzthQUNoRTtTQUNGO1FBQ0Q7WUFDRSxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSx1Q0FBdUM7WUFDaEQsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFBLCtCQUF3QixFQUFDLCtDQUF1QyxDQUFDO2FBQ2xFO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSw0REFBNEQ7WUFDckUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7WUFDMUIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSw4QkFBOEI7WUFDdkMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFBLCtCQUF3QixFQUFDLG9DQUE0QixDQUFDO2FBQ3ZEO1NBQ0Y7UUFDRDtZQUNFLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7WUFDaEMsT0FBTyxFQUFFLHNDQUFzQztZQUMvQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNYLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLElBQUEsK0JBQXdCLEVBQUMsdUNBQStCLENBQUM7YUFDMUQ7U0FDRjtRQUNEO1lBQ0UsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtZQUNoQyxPQUFPLEVBQUUsd0NBQXdDO1lBQ2pELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSwrQkFBd0IsRUFBQyx3Q0FBZ0MsQ0FBQzthQUMzRDtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsMkNBQTJDO1lBQ3BELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSxnQ0FBeUIsRUFDdkIsb0RBQTRDLEVBQzVDLEVBQUUsQ0FDSDthQUNGO1NBQ0Y7UUFDRCx1RUFBdUU7UUFDdkUsNERBQTREO1FBQzVEO1lBQ0UsT0FBTyxFQUFFLDRDQUE0QztZQUNyRCxXQUFXLEVBQUUsQ0FBQyxJQUFBLDZCQUFvQixFQUFDLHFDQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsNENBQTRDO1lBQ3JELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSwrQkFBd0IsRUFBQywrQ0FBdUMsQ0FBQzthQUNsRTtTQUNGO1FBQ0QsK0RBQStEO1FBQy9ELHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsMkRBQTJEO1FBQzNEO1lBQ0UsT0FBTyxFQUFFLDhCQUE4QjtZQUN2QyxXQUFXLEVBQUU7Z0JBQ1gsSUFBQSw2QkFBb0IsRUFDbEIscUNBQW1CLEVBQ25CLGVBQWUsRUFDZix1QkFBdUIsQ0FDeEI7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUscUNBQXFDO1lBQzlDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHdEQUFnQyxDQUFDLENBQUM7U0FDMUU7UUFDRCxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLHdFQUF3RTtRQUN4RSx3RUFBd0U7UUFDeEUsaURBQWlEO1FBQ2pEO1lBQ0UsT0FBTyxFQUFFLDRCQUE0QjtZQUNyQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNYLElBQUEsbUJBQVksRUFBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDckUsNEVBQW1DO2FBQ3BDO1NBQ0Y7UUFDRCx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsbURBQW1EO1FBQ25ELGdCQUFnQixDQUFDLGlDQUFpQyxFQUFFLHNDQUFzQixDQUFDLFFBQVEsQ0FBQztRQUNwRjtZQUNFLE9BQU8sRUFBRSxpQ0FBaUM7WUFDMUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsc0NBQXNCLENBQUMsQ0FBQztTQUNoRTtRQUNELHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsZ0JBQWdCLENBQ2Qsc0NBQXNDLEVBQ3RDLHNDQUFzQixDQUFDLGFBQWEsQ0FDckM7UUFDRCx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLHdFQUF3RTtRQUN4RSxxREFBcUQ7UUFDckQ7WUFDRSxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDOUMsaUJBQWlCLEVBQUUsSUFBSTtpQkFDeEIsQ0FBQztnQkFDRixpRUFBNkI7YUFDOUI7U0FDRjtRQUNELHlFQUF5RTtRQUN6RSx1RUFBdUU7UUFDdkUsbUVBQW1FO1FBQ25FLG9FQUFvRTtRQUNwRTtZQUNFLE9BQU8sRUFBRSxrQ0FBa0M7WUFDM0MsV0FBVyxFQUFFLENBQUMsa0VBQTZCLENBQUM7U0FDN0M7UUFDRCxvRUFBb0U7UUFDcEUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSxvRUFBb0U7UUFDcEUscUVBQXFFO1FBQ3JFLDBFQUEwRTtRQUMxRSxvRUFBb0U7UUFDcEUsMkVBQTJFO1FBQzNFLDRCQUE0QjtRQUM1Qix1RUFBdUU7UUFDdkUsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSw2Q0FBNkM7UUFDN0Msa0VBQWtFO1FBQ2xFLGlEQUFpRDtRQUNqRCx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLDBDQUEwQztRQUMxQztZQUNFLE9BQU8sRUFBRSwwQ0FBMEM7WUFDbkQsV0FBVyxFQUFFO2dCQUNYLHNFQUErQjtnQkFDL0IsMkVBQTRDO2dCQUM1QyxtRUFBb0M7Z0JBQ3BDLHVDQUFxQjthQUN0QjtTQUNGO1FBQ0QsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSw4REFBOEQ7UUFDOUQ7WUFDRSxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDeEIsV0FBVyxFQUFFLENBQUMsb0VBQWdDLENBQUM7U0FDaEQ7UUFDRCx1RUFBdUU7UUFDdkUsa0VBQWtFO1FBQ2xFLG1FQUFtRTtRQUNuRSxxRUFBcUU7UUFDckUsRUFBRTtRQUNGLGdCQUFnQjtRQUNoQixhQUFhLENBQUMsa0JBQWtCLENBQUM7UUFDakMsYUFBYSxDQUFDLDZCQUE2QixDQUFDO1FBQzVDLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQztRQUNoRCx1QkFBdUI7UUFDdkIsYUFBYSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQztRQUM3QyxhQUFhLENBQUMsNkJBQTZCLEVBQUUsVUFBVSxDQUFDO1FBQ3hELGFBQWE7UUFDYixhQUFhLENBQUMsaUNBQWlDLEVBQUUsZUFBZSxDQUFDO1FBQ2pFO1lBQ0UsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQy9EO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUUsQ0FBQyxJQUFBLG1CQUFZLEVBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRDtZQUNFLE9BQU8sRUFBRSwrQkFBK0I7WUFDeEMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMvRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLDZCQUE2QjtZQUN0QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1lBQ3hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLG1EQUFtRDtZQUM1RCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsd0NBQXdDO1lBQ2pELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSwrQkFBd0IsRUFBQyxrREFBc0MsQ0FBQzthQUNqRTtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUscURBQXFEO1lBQzlELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBQSwrQkFBd0IsRUFBQyxrREFBc0MsQ0FBQzthQUNqRTtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsaUNBQWlDO1lBQzFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUUsQ0FBQyxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFDRDtZQUNFLE9BQU8sRUFBRSwwREFBMEQ7WUFDbkUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLHVEQUF1RDtZQUNoRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNYLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLElBQUEsK0JBQXdCLEVBQUMsZ0RBQW9DLENBQUM7YUFDL0Q7U0FDRjtRQUNELHVFQUF1RTtRQUN2RTtZQUNFLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLGdDQUF5QixFQUFDLDZDQUFxQyxFQUFFO29CQUMvRCxNQUFNLEVBQUUsS0FBSztpQkFDZCxDQUFDO2FBQ0g7U0FDRjtRQUNEO1lBQ0UsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLElBQUEsZ0NBQXlCLEVBQUMsNkNBQXFDLEVBQUU7b0JBQy9ELE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUM7YUFDSDtTQUNGO1FBQ0QsdUVBQXVFO1FBQ3ZFLGtEQUFrRDtRQUNsRDtZQUNFLE9BQU8sRUFBRSxxQ0FBcUM7WUFDOUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQztTQUMxQjtRQUNEO1lBQ0UsT0FBTyxFQUFFLHFDQUFxQztZQUM5QyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyw4Q0FBNkIsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQixXQUFXLEVBQUUsQ0FBQyxJQUFBLDZCQUFvQixFQUFDLDZDQUEyQixDQUFDLENBQUM7U0FDakU7UUFDRCwwRUFBMEU7UUFDMUUsdUVBQXVFO1FBQ3ZFLHVEQUF1RDtRQUN2RDtZQUNFLE9BQU8sRUFBRSw4REFBOEQ7WUFDdkUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxvQkFBb0I7Z0JBQ3BCLElBQUEsbUJBQVksRUFBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDaEQ7U0FDRjtRQUNEO1lBQ0UsT0FBTyxFQUFFLHlDQUF5QztZQUNsRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLG9CQUFvQjtnQkFDcEIsSUFBQSxtQkFBWSxFQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNoRDtTQUNGO1FBQ0QsdUVBQXVFO1FBQ3ZFLGVBQWU7UUFDZjtZQUNFLE9BQU8sRUFBRSx5RUFBeUU7WUFDbEYsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRTtnQkFDWCxvQkFBb0I7Z0JBQ3BCLElBQUEsbUJBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDNUM7U0FDRjtLQUNGO0NBQ0YsQ0FBQyxDQUFBIn0=