@codee-sh/medusa-plugin-automations 1.0.2 → 1.0.4

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 (52) hide show
  1. package/.medusa/server/src/admin/_chunks/{__admin-extensions__-rqdPN7M1 → __admin-extensions__-BD2AvjDH} +76 -66
  2. package/.medusa/server/src/admin/_chunks/{__admin-extensions__-DIB2k6nJ → __admin-extensions__-BxUQA9oD} +76 -66
  3. package/.medusa/server/src/admin/_chunks/{base-config-DbRWuXsL → base-config-ON0ZG0Je} +2 -3
  4. package/.medusa/server/src/admin/_chunks/{base-config-ro-vFPBg → base-config-XI6iR6Jp} +2 -3
  5. package/.medusa/server/src/admin/index.js +1 -1
  6. package/.medusa/server/src/admin/index.mjs +1 -1
  7. package/.medusa/server/src/api/admin/mpn/automations/available-actions/route.js +4 -2
  8. package/.medusa/server/src/api/admin/mpn/automations/rules/route.js +1 -1
  9. package/.medusa/server/src/api/middlewares.js +1 -2
  10. package/.medusa/server/src/hooks/api/automations-actions/automations-actions.js +1 -3
  11. package/.medusa/server/src/hooks/api/automations-rules/automations-rules.js +1 -3
  12. package/.medusa/server/src/hooks/api/available-actions/actions.js +5 -2
  13. package/.medusa/server/src/hooks/api/available-events/events.js +1 -1
  14. package/.medusa/server/src/modules/mpn-automation/actions-handlers/base-action-handler.js +43 -2
  15. package/.medusa/server/src/modules/mpn-automation/actions-handlers/email-action-handler.js +3 -15
  16. package/.medusa/server/src/modules/mpn-automation/actions-handlers/slack-action-handler.js +3 -29
  17. package/.medusa/server/src/modules/mpn-automation/services/service.js +221 -30
  18. package/.medusa/server/src/modules/mpn-automation/types/modules/index.js +76 -0
  19. package/.medusa/server/src/modules/mpn-automation/types/modules/inventory/index.js +18 -0
  20. package/.medusa/server/src/modules/mpn-automation/types/modules/inventory/inventory.js +56 -0
  21. package/.medusa/server/src/modules/mpn-automation/types/types.js +2 -136
  22. package/.medusa/server/src/providers/slack/service.js +6 -58
  23. package/.medusa/server/src/subscribers/inventory-level-updated.js +2 -1
  24. package/.medusa/server/src/subscribers/inventory-reservation-item-updated.js +3 -3
  25. package/.medusa/server/src/subscribers/mpn.automation.action.email.executed.js +6 -5
  26. package/.medusa/server/src/subscribers/mpn.automation.action.slack.executed.js +12 -8
  27. package/.medusa/server/src/subscribers/order-placed.js +9 -106
  28. package/.medusa/server/src/templates/slack/index.js +40 -0
  29. package/.medusa/server/src/templates/slack/inventory-level/index.js +18 -0
  30. package/.medusa/server/src/templates/slack/inventory-level/inventory-level.js +95 -0
  31. package/.medusa/server/src/templates/slack/inventory-level/translations/en.json +18 -0
  32. package/.medusa/server/src/templates/slack/inventory-level/translations/index.js +15 -0
  33. package/.medusa/server/src/templates/slack/inventory-level/translations/pl.json +18 -0
  34. package/.medusa/server/src/templates/slack/types.js +7 -0
  35. package/.medusa/server/src/utils/i18n/i18n.js +127 -0
  36. package/.medusa/server/src/utils/i18n/index.js +18 -0
  37. package/.medusa/server/src/utils/index.js +2 -1
  38. package/.medusa/server/src/utils/validate-rules.js +1 -1
  39. package/.medusa/server/src/workflows/inventory/steps/get-inventory-level-by-id.js +23 -6
  40. package/.medusa/server/src/workflows/mpn-automation/index.js +3 -2
  41. package/.medusa/server/src/workflows/mpn-automation/run-automation.js +2 -1
  42. package/.medusa/server/src/workflows/mpn-automation/{send-email-action.js → run-email-action.js} +8 -7
  43. package/.medusa/server/src/workflows/mpn-automation/run-slack-action.js +67 -0
  44. package/.medusa/server/src/workflows/mpn-automation/steps/edit-automation-actions.js +16 -5
  45. package/.medusa/server/src/workflows/mpn-automation/steps/retrieve-automation-triggers-by-event.js +1 -1
  46. package/.medusa/server/src/workflows/mpn-automation/steps/run-automation-actions.js +3 -2
  47. package/.medusa/server/src/workflows/notifications/send-email.js +2 -1
  48. package/.medusa/server/src/workflows/notifications/send-slack.js +2 -1
  49. package/.medusa/server/src/workflows/notifications/steps/send-email.js +3 -2
  50. package/.medusa/server/src/workflows/notifications/steps/send-slack.js +19 -5
  51. package/package.json +2 -3
  52. package/.medusa/server/src/workflows/mpn-automation/send-slack-action.js +0 -69
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sendSlackStep = exports.sendSlackStepId = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
+ const slack_1 = require("../../../templates/slack");
6
7
  exports.sendSlackStepId = "send-slack";
7
8
  /**
8
9
  * Universal step that sends a slack notification.
@@ -28,7 +29,7 @@ exports.sendSlackStepId = "send-slack";
28
29
  * ```
29
30
  */
30
31
  exports.sendSlackStep = (0, workflows_sdk_1.createStep)(exports.sendSlackStepId, async (input, { container }) => {
31
- const { settings, context, eventName } = input;
32
+ const { settings, context, contextType, eventName } = input;
32
33
  // Validate required config
33
34
  if (!settings.template) {
34
35
  return new workflows_sdk_1.StepResponse({
@@ -41,11 +42,20 @@ exports.sendSlackStep = (0, workflows_sdk_1.createStep)(exports.sendSlackStepId,
41
42
  const template = settings.template;
42
43
  const to = settings.to || "slack-channel";
43
44
  const locale = settings.locale || "pl";
44
- const customSubject = settings.subject;
45
45
  const resourceId = settings.resourceId || "unknown";
46
- const resourceType = settings.resourceType || "email.notification";
46
+ const resourceType = settings.resourceType || "slack.notification";
47
47
  const channel = settings.channel || "slack";
48
48
  const triggerType = settings.triggerType || "system";
49
+ const backendUrl = settings.backendUrl || "";
50
+ const { text, blocks } = (0, slack_1.renderSlackTemplate)({
51
+ templateName: template,
52
+ context: context,
53
+ contextType: contextType,
54
+ options: {
55
+ locale: locale,
56
+ backendUrl: backendUrl,
57
+ },
58
+ });
49
59
  // Send notification
50
60
  const notificationResult = await notificationModuleService.createNotifications({
51
61
  to: to,
@@ -53,10 +63,14 @@ exports.sendSlackStep = (0, workflows_sdk_1.createStep)(exports.sendSlackStepId,
53
63
  template: template,
54
64
  trigger_type: triggerType,
55
65
  resource_id: resourceId,
56
- resource_type: eventName,
66
+ resource_type: resourceType,
57
67
  data: {
58
68
  ...context,
59
69
  },
70
+ content: {
71
+ text: text,
72
+ blocks,
73
+ },
60
74
  });
61
75
  return new workflows_sdk_1.StepResponse({
62
76
  success: true,
@@ -71,4 +85,4 @@ exports.sendSlackStep = (0, workflows_sdk_1.createStep)(exports.sendSlackStepId,
71
85
  });
72
86
  }
73
87
  });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvbm90aWZpY2F0aW9ucy9zdGVwcy9zZW5kLXNsYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcwQztBQUMxQyxxREFBbUQ7QUF1QnRDLFFBQUEsZUFBZSxHQUFHLFlBQVksQ0FBQTtBQUUzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNVLFFBQUEsYUFBYSxHQUFHLElBQUEsMEJBQVUsRUFDckMsdUJBQWUsRUFDZixLQUFLLEVBQ0gsS0FBeUIsRUFDekIsRUFBRSxTQUFTLEVBQUUsRUFDK0IsRUFBRTtJQUM5QyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFOUMsMkJBQTJCO0lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsT0FBTyxJQUFJLDRCQUFZLENBQUM7WUFDdEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxLQUFLLEVBQUUsZ0NBQWdDO1NBQ3hDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLHlCQUF5QixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ2pELGVBQU8sQ0FBQyxZQUFZLENBQ3JCLENBQUE7UUFFRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFBO1FBQ2xDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksZUFBZSxDQUFBO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFBO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUE7UUFDdEMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUE7UUFDbkQsTUFBTSxZQUFZLEdBQ2hCLFFBQVEsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUE7UUFDL0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUE7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUE7UUFFcEQsb0JBQW9CO1FBQ3BCLE1BQU0sa0JBQWtCLEdBQ3RCLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQ2pEO1lBQ0UsRUFBRSxFQUFFLEVBQUU7WUFDTixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsUUFBUTtZQUNsQixZQUFZLEVBQUUsV0FBVztZQUN6QixXQUFXLEVBQUUsVUFBVTtZQUN2QixhQUFhLEVBQUUsU0FBUztZQUN4QixJQUFJLEVBQUU7Z0JBQ0osR0FBRyxPQUFPO2FBQ1g7U0FDRixDQUNGLENBQUE7UUFFSCxPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixPQUFPLEVBQUUsSUFBSTtZQUNiLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxFQUFFO1NBQ3ZDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDN0MsT0FBTyxJQUFJLDRCQUFZLENBQUM7WUFDdEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSx3QkFBd0I7U0FDbEQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FDRixDQUFBIn0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvbm90aWZpY2F0aW9ucy9zdGVwcy9zZW5kLXNsYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcwQztBQUMxQyxxREFBbUQ7QUFDbkQsb0RBQThEO0FBK0JqRCxRQUFBLGVBQWUsR0FBRyxZQUFZLENBQUE7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDVSxRQUFBLGFBQWEsR0FBRyxJQUFBLDBCQUFVLEVBQ3JDLHVCQUFlLEVBQ2YsS0FBSyxFQUNILEtBQXlCLEVBQ3pCLEVBQUUsU0FBUyxFQUFFLEVBQytCLEVBQUU7SUFDOUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUUzRCwyQkFBMkI7SUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSxnQ0FBZ0M7U0FDeEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0seUJBQXlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDakQsZUFBTyxDQUFDLFlBQVksQ0FDckIsQ0FBQTtRQUVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUE7UUFDbEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxlQUFlLENBQUE7UUFDekMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUE7UUFDdEMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUE7UUFDbkQsTUFBTSxZQUFZLEdBQ2hCLFFBQVEsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUE7UUFDL0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUE7UUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUE7UUFDcEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUE7UUFFNUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLDJCQUFtQixFQUFDO1lBQzNDLFlBQVksRUFBRSxRQUFRO1lBQ3RCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLE9BQU8sRUFBRTtnQkFDVCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxVQUFVLEVBQUUsVUFBVTthQUNyQjtTQUNGLENBQUMsQ0FBQTtRQUVGLG9CQUFvQjtRQUNwQixNQUFNLGtCQUFrQixHQUN0QixNQUFNLHlCQUF5QixDQUFDLG1CQUFtQixDQUNqRDtZQUNFLEVBQUUsRUFBRSxFQUFFO1lBQ04sT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsWUFBWSxFQUFFLFdBQVc7WUFDekIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsYUFBYSxFQUFFLFlBQVk7WUFDM0IsSUFBSSxFQUFFO2dCQUNKLEdBQUcsT0FBTzthQUNYO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU07YUFDcUI7U0FDOUIsQ0FDRixDQUFBO1FBRUgsT0FBTyxJQUFJLDRCQUFZLENBQUM7WUFDdEIsT0FBTyxFQUFFLElBQUk7WUFDYixjQUFjLEVBQUUsa0JBQWtCLEVBQUUsRUFBRTtTQUN2QyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzdDLE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksd0JBQXdCO1NBQ2xELENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDLENBQ0YsQ0FBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codee-sh/medusa-plugin-automations",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Medusa plugin for automations.",
5
5
  "author": "Codee (https://codee.dev)",
6
6
  "license": "MIT",
@@ -69,6 +69,5 @@
69
69
  },
70
70
  "engines": {
71
71
  "node": ">=20"
72
- },
73
- "packageManager": "yarn@3.2.3+sha512.f26f951f67de0c6a33ee381e5ff364709c87e70eb5e65c694e4facde3512f1fa80b8679e6ba31ce7d340fbb46f08dd683af9457e240f25a204be7427940d767e"
72
+ }
74
73
  }
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendSlackActionWorkflow = exports.sendSlackActionWorkflowId = void 0;
4
- const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
- const send_slack_1 = require("../notifications/send-slack");
6
- exports.sendSlackActionWorkflowId = "send-slack-action";
7
- /**
8
- * Workflow wrapper for automation system that sends an email notification.
9
- *
10
- * This is a convenience wrapper around the universal sendEmailWorkflow,
11
- * specifically designed for use with automation actions.
12
- *
13
- * It extracts configuration from action.config and context, then calls
14
- * the universal sendEmailWorkflow.
15
- *
16
- * Configuration is stored in action.config:
17
- * - templateName: Required - Name of the email template
18
- * - to: Required - Recipient email address
19
- * - locale: Optional - Locale for translations (default: "pl")
20
- * - customTemplate: Optional - Path to custom template function
21
- * - subject: Optional - Custom subject (otherwise uses template default)
22
- * - template: Optional - Template identifier for notification (defaults to templateName)
23
- *
24
- * @example
25
- * ```typescript
26
- * const { result } = await sendEmailActionWorkflow(container).run({
27
- * input: {
28
- * action: {
29
- * id: "action_123",
30
- * action_type: "email",
31
- * config: {
32
- * templateName: "inventory-level",
33
- * to: "admin@example.com",
34
- * locale: "pl"
35
- * }
36
- * },
37
- * context: {
38
- * inventory_level: {
39
- * id: "il_123",
40
- * stocked_quantity: 5
41
- * }
42
- * }
43
- * }
44
- * })
45
- * ```
46
- */
47
- exports.sendSlackActionWorkflow = (0, workflows_sdk_1.createWorkflow)(exports.sendSlackActionWorkflowId, (input) => {
48
- // Transform automation action format for sendEmailWorkflow
49
- const settings = (0, workflows_sdk_1.transform)({ action: input.action, eventName: input.eventName }, (data) => {
50
- const actionConfig = data?.action?.config || {};
51
- const eventName = data?.eventName;
52
- return {
53
- template: actionConfig?.template,
54
- resourceId: data?.action?.id,
55
- resourceType: eventName,
56
- channel: actionConfig?.channel,
57
- triggerType: "mpn",
58
- };
59
- });
60
- const result = send_slack_1.sendSlackWorkflow.runAsStep({
61
- input: {
62
- settings: settings,
63
- context: input.context,
64
- eventName: input.eventName,
65
- },
66
- });
67
- return new workflows_sdk_1.WorkflowResponse(result);
68
- });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay1hY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL21wbi1hdXRvbWF0aW9uL3NlbmQtc2xhY2stYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUswQztBQUMxQyw0REFBK0Q7QUFlbEQsUUFBQSx5QkFBeUIsR0FBRyxtQkFBbUIsQ0FBQTtBQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxJQUFBLDhCQUFjLEVBQ25ELGlDQUF5QixFQUN6QixDQUFDLEtBQWlELEVBQUUsRUFBRTtJQUNwRCwyREFBMkQ7SUFDM0QsTUFBTSxRQUFRLEdBQUcsSUFBQSx5QkFBUyxFQUN4QixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQ3BELENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDUCxNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLFNBQVMsQ0FBQTtRQUVqQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUIsWUFBWSxFQUFFLFNBQVM7WUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPO1lBQzlCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUE7SUFDSCxDQUFDLENBQ0YsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUFHLDhCQUFpQixDQUFDLFNBQVMsQ0FBQztRQUN6QyxLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsUUFBUTtZQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzNCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLGdDQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ3JDLENBQUMsQ0FDRixDQUFBIn0=