From e3dfd5f9602dde5aa0e2b695ef84c2e8eb8949d8 Mon Sep 17 00:00:00 2001 From: Chaim Date: Mon, 6 Apr 2026 05:03:21 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20LegalAssistance=20extension=20v1.0.0=20?= =?UTF-8?q?=E2=80=94=20Direct=20Access=20Report?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DirectAccessReport entity (48 fields, status lifecycle, Case relationship) - Case fields: cLegalAidType, cAppointmentDate, cAidType, cUrgencyLevel, cFilingDeadline - Auto-tasks hook: creates 3 tasks when case set to Direct Access - DOCX template with 72 placeholders (converted from original form) - Shira plugin: generate_initial_report tool with structured conversation flow - AfterInstall/AfterUninstall scripts for plugin deployment - Hebrew + English translations Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 3 + field_mapping.md | 153 ++++++++++ .../Hooks/Case/CreateDirectAccessTasks.php | 76 +++++ .../i18n/en_US/DirectAccessReport.json | 80 ++++++ .../Resources/i18n/he_IL/Case.json | 20 ++ .../i18n/he_IL/DirectAccessReport.json | 80 ++++++ .../metadata/app/smartAssistant.json | 8 + .../clientDefs/DirectAccessReport.json | 36 +++ .../Resources/metadata/entityDefs/Case.json | 43 +++ .../entityDefs/DirectAccessReport.json | 269 ++++++++++++++++++ .../layouts/DirectAccessReport/detail.json | 81 ++++++ .../DirectAccessReport/detailSmall.json | 11 + .../layouts/DirectAccessReport/list.json | 10 + .../metadata/scopes/DirectAccessReport.json | 15 + .../LegalAssistance/Resources/module.json | 7 + .../Services/DirectAccessReportService.php | 214 ++++++++++++++ .../Tools/GenerateInitialReport.php | 33 +++ manifest.json | 13 + plugins/legal-assistance/prompts.json | 3 + plugins/legal-assistance/tools.json | 152 ++++++++++ scripts/AfterInstall.php | 138 +++++++++ scripts/AfterUninstall.php | 51 ++++ templates/direct-access-report.docx | Bin 0 -> 32001 bytes טופס דיווח ראשוני.docx | Bin 0 -> 38446 bytes 24 files changed, 1496 insertions(+) create mode 100644 .gitignore create mode 100644 field_mapping.md create mode 100644 files/custom/Espo/Modules/LegalAssistance/Hooks/Case/CreateDirectAccessTasks.php create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/i18n/en_US/DirectAccessReport.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/Case.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/DirectAccessReport.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/app/smartAssistant.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/clientDefs/DirectAccessReport.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/Case.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/DirectAccessReport.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detail.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detailSmall.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/list.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/metadata/scopes/DirectAccessReport.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Resources/module.json create mode 100644 files/custom/Espo/Modules/LegalAssistance/Services/DirectAccessReportService.php create mode 100644 files/custom/Espo/Modules/LegalAssistance/SmartAssistant/Tools/GenerateInitialReport.php create mode 100644 manifest.json create mode 100644 plugins/legal-assistance/prompts.json create mode 100644 plugins/legal-assistance/tools.json create mode 100644 scripts/AfterInstall.php create mode 100644 scripts/AfterUninstall.php create mode 100644 templates/direct-access-report.docx create mode 100644 טופס דיווח ראשוני.docx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d6b4c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.bak +*.tmp +/legal-docx-v3-fixed/ diff --git a/field_mapping.md b/field_mapping.md new file mode 100644 index 0000000..d5483d7 --- /dev/null +++ b/field_mapping.md @@ -0,0 +1,153 @@ +# מיפוי שדות — טופס דיווח ראשוני (ביטוח לאומי / סיוע משפטי) +## Entity: Case + Contact + +--- + +## חלק א' — כותרת ופרטי תיק + +| # | שדה בטופס | שם שדה מוצע (EspoCRM) | סוג שדה | Placeholder | סטטוס | +|---|-----------|----------------------|---------|-------------|-------| +| 1 | מספר תיק סיוע | legalAidNumber | varchar | `${legalAidNumber}` | ✅ קיים | +| 2 | שם פרטי לקוח | — (Contact) | — | `${contact.firstName}` | ✅ קיים | +| 3 | שם משפחה לקוח | — (Contact) | — | `${contact.lastName}` | ✅ קיים | +| 4 | דחיפות הליך | urgencyLevel | enum | `${urgencyLevel}` | 🆕 להוסיף | +| | | | אפשרויות: רגיל / דחוף / בהול | | | +| 5 | מועד אחרון להגשה | filingDeadline | date | `${filingDeadline}` | 🆕 להוסיף | +| 6 | מועד קבלת המינוי | appointmentDate | date | `${appointmentDate}` | 🆕 להוסיף | + +--- + +## חלק ב' — מהות הסיוע + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 7 | מהות הסיוע | aidType | enum | `${aidType}` | 🆕 להוסיף | +| | | | אפשרויות: הגשת ערעור / יעוץ והדרכה / סיוע נוסף ביטוח לאומי / סיוע נוסף תחום אחר / אי מתן סיוע | | | +| 8 | דחיפות הליך נוסף | additionalUrgency | enum | `${additionalUrgency}` | 🆕 להוסיף | +| | | | אפשרויות: רגיל / דחוף / בהול | | | +| 9 | מועדים להליך נוסף | additionalDeadline | varchar | `${additionalDeadline}` | 🆕 להוסיף | + +--- + +## חלק ג' — קשר עם הלקוח + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 10 | תאריך יצירת קשר ראשוני | firstContactDate | date | `${firstContactDate}` | 🆕 להוסיף | +| 11 | סיבת עיכוב (אם לא תוך 48 שעות) | contactDelayReason | text | `${contactDelayReason}` | 🆕 להוסיף | +| 12 | תאריך פגישה עם הלקוח | meetingDate | date | `${meetingDate}` | 🆕 להוסיף | +| 13 | סיבת עיכוב פגישה | meetingDelayReason | text | `${meetingDelayReason}` | 🆕 להוסיף | +| 14 | נוכחים בפגישה | meetingAttendees | text | `${meetingAttendees}` | 🆕 להוסיף | +| 15 | מצב קשר עם הלקוח | contactStatus | enum | `${contactStatus}` | 🆕 להוסיף | +| | | | אפשרויות: תקין / לא תקין | | | +| 16 | פירוט מצב קשר (אם לא תקין) | contactStatusDetail | text | `${contactStatusDetail}` | 🆕 להוסיף | + +--- + +## חלק ד' — החלטה על מתן סיוע (פרטי ההליך) + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 17 | מספר הליך | proceedingNumber | varchar | `${proceedingNumber}` | 🆕 להוסיף | +| 18 | בית הדין | courtName | enum | `${courtName}` | 🆕 להוסיף | +| | | | אפשרויות: בית הדין האזורי לעבודה ירושלים / תל אביב / חיפה / באר שבע / נצרת / בית הדין הארצי לעבודה | | | +| 19 | עניין ההליך | proceedingSubject | enum | `${proceedingSubject}` | 🆕 להוסיף | +| | | | אפשרויות: נכות כללית / נכות מעבודה / נכות איבה / ניידות / אי כושר / שירותים מיוחדים / סיעוד / גמלת הבטחת הכנסה / דמי אבטלה / אחר | | | +| 20 | תמצית התביעה/הערעור | claimSummary | text | `${claimSummary}` | 🆕 להוסיף | +| 21 | טענות ההגנה | defenseClaims | text | `${defenseClaims}` | 🆕 להוסיף | + +--- + +## חלק ה' — בחינת סיכוי משפטי (נכות כללית/מעבודה/איבה/ניידות) + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 22 | הוועדה התייחסה לכל המסמכים? | q1DocsReviewed | bool | `${q1DocsReviewed}` | 🆕 להוסיף | +| 23 | פירוט מסמכים | q1DocsDetail | text | `${q1DocsDetail}` | 🆕 להוסיף | +| 24 | ההחלטה מנומקת? | q2Reasoned | bool | `${q2Reasoned}` | 🆕 להוסיף | +| 25 | פירוט הנמקה חסרה | q2ReasonDetail | text | `${q2ReasonDetail}` | 🆕 להוסיף | +| 26 | הרכב תואם ליקויים? | q3PanelMatch | bool | `${q3PanelMatch}` | 🆕 להוסיף | +| 27 | הרכב הוועדה / הרכב חסר | q4PanelComposition | text | `${q4PanelComposition}` | 🆕 להוסיף | +| 28 | התייחסו לכל התלונות? | q5ComplaintsAddressed | bool | `${q5ComplaintsAddressed}` | 🆕 להוסיף | +| 29 | פירוט תלונות חסרות | q6ComplaintsDetail | text | `${q6ComplaintsDetail}` | 🆕 להוסיף | +| 30 | בדיקה קלינית נערכה? | q7ClinicalExam | bool | `${q7ClinicalExam}` | 🆕 להוסיף | +| 31 | פער בדיקה קלינית vs מסמכים | q8ClinicalGap | text | `${q8ClinicalGap}` | 🆕 להוסיף | + +--- + +## חלק ו' — בחינת סיכוי משפטי (אי כושר) + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 32 | בחינת הלכת מוהרה (גיל, רקע, השכלה)? | q9MoharaApplied | bool | `${q9MoharaApplied}` | 🆕 להוסיף | +| 33 | נתונים חסרים (מוהרה) | q9MoharaDetail | text | `${q9MoharaDetail}` | 🆕 להוסיף | +| 34 | פער פקיד שיקום vs ועדה? | q10RehabGap | bool | `${q10RehabGap}` | 🆕 להוסיף | +| 35 | פירוט הפער | q10RehabDetail | text | `${q10RehabDetail}` | 🆕 להוסיף | + +--- + +## חלק ז' — בחינת סיכוי משפטי (שירותים מיוחדים/סיעוד) + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 36 | פער ניקוד vs מצב ומסמכים? | q11ScoreGap | bool | `${q11ScoreGap}` | 🆕 להוסיף | +| 37 | פירוט פער הניקוד | q11ScoreDetail | text | `${q11ScoreDetail}` | 🆕 להוסיף | +| 38 | התייחסות להיבטים ייחודיים? | q12UniqueAspects | bool | `${q12UniqueAspects}` | 🆕 להוסיף | +| 39 | פירוט היבטים ייחודיים | q12UniqueDetail | text | `${q12UniqueDetail}` | 🆕 להוסיף | + +--- + +## חלק ח' — המלצה/הודעה + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 40 | סוג ההמלצה | recommendationType | enum | `${recommendationType}` | 🆕 להוסיף | +| | | | אפשרויות: ייעוץ והדרכה חלף ייצוג / ויתור הלקוח / החלפת ייצוג / לא נוצר קשר / לא התקיימה פגישה / עדיין לא ניתן להחליט / נדרשים מסמכים נוספים / המלצה לסירוב | | | +| 41 | פירוט ההמלצה | recommendationDetail | text | `${recommendationDetail}` | 🆕 להוסיף | + +--- + +## חלק ט' — מיצוי זכויות + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 42 | צורך בסיוע נוסף | additionalAidNeeded | enum | `${additionalAidNeeded}` | 🆕 להוסיף | +| | | | אפשרויות: לא נחוץ / נחוץ בתחום ביטוח לאומי / נחוץ בתחום אחר | | | +| 43 | פירוט סיוע נוסף (ביטוח לאומי) | additionalAidNIDetail | text | `${additionalAidNIDetail}` | 🆕 להוסיף | +| 44 | פירוט סיוע נוסף (תחום אחר) | additionalAidOtherDetail | text | `${additionalAidOtherDetail}` | 🆕 להוסיף | +| 45 | דחיפות הסיוע הנוסף | additionalAidUrgency | enum | `${additionalAidUrgency}` | 🆕 להוסיף | +| | | | אפשרויות: רגיל / דחוף / בהול | | | +| 46 | מועדים (סיוע נוסף) | additionalAidDeadlines | varchar | `${additionalAidDeadlines}` | 🆕 להוסיף | +| 47 | בתחום התמחות + מעוניין לייצג? | willingToRepresent | bool | `${willingToRepresent}` | 🆕 להוסיף | + +--- + +## חלק י' — הערות + +| # | שדה בטופס | שם שדה מוצע | סוג שדה | Placeholder | סטטוס | +|---|-----------|------------|---------|-------------|-------| +| 48 | הערות כלליות | notes | text | `${notes}` | 🆕 להוסיף | + +--- + +## שדות מיוחדים (אוטומטיים) + +| Placeholder | תיאור | מקור | +|-------------|--------|------| +| `${today}` | תאריך היום | אוטומטי | +| `${currentUser}` | שם המשתמש (עורך הדין) | אוטומטי | + +--- + +## סיכום + +- **שדות קיימים:** 3 (מספר תיק סיוע, שם פרטי, שם משפחה) +- **שדות חדשים להוספה:** 45 +- **סה"כ שדות בטופס:** 48 + +### סוגי שדות להוספה: +- **enum:** 9 שדות (דחיפות, מהות, בית דין, עניין, מצב קשר, המלצה, סיוע נוסף...) +- **bool:** 11 שדות (שאלות כן/לא של בחינת סיכוי משפטי) +- **date:** 4 שדות (מועדים שונים) +- **text:** 17 שדות (פירוטים ותיאורים) +- **varchar:** 4 שדות (מספרים ומועדים קצרים) diff --git a/files/custom/Espo/Modules/LegalAssistance/Hooks/Case/CreateDirectAccessTasks.php b/files/custom/Espo/Modules/LegalAssistance/Hooks/Case/CreateDirectAccessTasks.php new file mode 100644 index 0000000..b35dc5e --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Hooks/Case/CreateDirectAccessTasks.php @@ -0,0 +1,76 @@ +isAttributeChanged('cLegalAidType')) { + return; + } + + $newValue = $entity->get('cLegalAidType'); + $oldValue = $entity->getFetched('cLegalAidType'); + + if ($newValue !== 'DirectAccess' || $oldValue === 'DirectAccess') { + return; + } + + $this->log->info("LegalAssistance: Creating direct access tasks for case {$entity->getId()}"); + + $assignedUserId = $entity->get('assignedUserId'); + $now = new \DateTime('now', new \DateTimeZone('Asia/Jerusalem')); + + $tasks = [ + [ + 'name' => 'שיחת טלפון ראשונה עם הלקוח', + 'dateEnd' => (clone $now)->modify('+2 days')->format('Y-m-d'), + 'priority' => 'High', + 'description' => 'יש ליצור קשר ראשוני עם הלקוח תוך 48 שעות ממועד קבלת המינוי.', + ], + [ + 'name' => 'פגישה עם הלקוח', + 'dateEnd' => (clone $now)->modify('+7 days')->format('Y-m-d'), + 'priority' => 'Normal', + 'description' => 'לקבוע ולקיים פגישה ראשונה עם הלקוח. לתעד נוכחים ותוכן הפגישה.', + ], + [ + 'name' => 'שליחת דוח גישה ישירה', + 'dateEnd' => (clone $now)->modify('+14 days')->format('Y-m-d'), + 'priority' => 'High', + 'description' => 'למלא ולשלוח דוח דיווח ראשוני לסיוע המשפטי. ניתן לבקש משירה: "תיצרי דוח גישה ישירה".', + ], + ]; + + foreach ($tasks as $taskData) { + $task = $this->entityManager->getNewEntity('Task'); + $task->set([ + 'name' => $taskData['name'], + 'status' => 'Not Started', + 'priority' => $taskData['priority'], + 'dateEnd' => $taskData['dateEnd'], + 'description' => $taskData['description'], + 'parentType' => 'Case', + 'parentId' => $entity->getId(), + 'assignedUserId' => $assignedUserId, + ]); + $this->entityManager->saveEntity($task, ['skipHooks' => false]); + } + + $this->log->info("LegalAssistance: Created 3 direct access tasks for case {$entity->getId()}"); + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/en_US/DirectAccessReport.json b/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/en_US/DirectAccessReport.json new file mode 100644 index 0000000..a47002b --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/en_US/DirectAccessReport.json @@ -0,0 +1,80 @@ +{ + "scopeName": "Direct Access Report", + "scopeNamesPlural": "Direct Access Reports", + "labels": { + "Create DirectAccessReport": "Create Direct Access Report" + }, + "fields": { + "name": "Report Name", + "number": "Number", + "status": "Status", + "case": "Case", + "aidType": "Aid Type", + "urgencyLevel": "Urgency Level", + "appointmentDate": "Appointment Date", + "filingDeadline": "Filing Deadline", + "additionalUrgency": "Additional Urgency", + "additionalDeadline": "Additional Deadline", + "firstContactDate": "First Contact Date", + "contactDelayReason": "Contact Delay Reason", + "meetingDate": "Meeting Date", + "meetingDelayReason": "Meeting Delay Reason", + "meetingAttendees": "Meeting Attendees", + "contactStatus": "Contact Status", + "contactStatusDetail": "Contact Status Detail", + "proceedingNumber": "Proceeding Number", + "courtName": "Court Name", + "proceedingSubject": "Proceeding Subject", + "claimSummary": "Claim Summary", + "defenseClaims": "Defense Claims", + "q1DocsReviewed": "Committee Reviewed All Documents?", + "q1DocsDetail": "Documents Detail", + "q2Reasoned": "Decision Reasoned?", + "q2ReasonDetail": "Missing Reasoning Detail", + "q3PanelMatch": "Panel Matches Impairments?", + "q4PanelComposition": "Panel Composition", + "q5ComplaintsAddressed": "All Complaints Addressed?", + "q6ComplaintsDetail": "Missing Complaints Detail", + "q7ClinicalExam": "Clinical Exam Performed?", + "q8ClinicalGap": "Clinical vs Documents Gap", + "q9MoharaApplied": "Mohara Doctrine Applied?", + "q9MoharaDetail": "Missing Mohara Data", + "q10RehabGap": "Rehab Officer vs Committee Gap?", + "q10RehabDetail": "Gap Detail", + "q11ScoreGap": "Score vs Condition Gap?", + "q11ScoreDetail": "Score Gap Detail", + "q12UniqueAspects": "Unique Aspects Addressed?", + "q12UniqueDetail": "Unique Aspects Detail", + "recommendationType": "Recommendation Type", + "recommendationDetail": "Recommendation Detail", + "additionalAidNeeded": "Additional Aid Needed", + "additionalAidNIDetail": "Additional NI Aid Detail", + "additionalAidOtherDetail": "Additional Other Aid Detail", + "additionalAidUrgency": "Additional Aid Urgency", + "additionalAidDeadlines": "Additional Aid Deadlines", + "willingToRepresent": "Willing to Represent?", + "notes": "General Notes", + "assignedUser": "Assigned User", + "teams": "Teams", + "createdAt": "Created At", + "modifiedAt": "Modified At", + "createdBy": "Created By", + "modifiedBy": "Modified By" + }, + "options": { + "status": { + "Draft": "Draft", + "Submitted": "Submitted", + "Approved": "Approved", + "Rejected": "Rejected" + } + }, + "links": { + "case": "Case" + }, + "presetFilters": { + "draft": "Draft", + "submitted": "Submitted", + "approved": "Approved" + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/Case.json b/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/Case.json new file mode 100644 index 0000000..7ca0db9 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/Case.json @@ -0,0 +1,20 @@ +{ + "fields": { + "cLegalAidType": "סוג מינוי סיוע משפטי", + "cAppointmentDate": "מועד קבלת המינוי", + "cAidType": "מהות הסיוע", + "cUrgencyLevel": "דחיפות", + "cFilingDeadline": "מועד אחרון להגשה" + }, + "options": { + "cLegalAidType": { + "": "", + "DirectAccess": "גישה ישירה", + "Regular": "מינוי רגיל", + "Duty": "תורנות" + } + }, + "links": { + "directAccessReports": "דוחות גישה ישירה" + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/DirectAccessReport.json b/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/DirectAccessReport.json new file mode 100644 index 0000000..a9ee447 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/i18n/he_IL/DirectAccessReport.json @@ -0,0 +1,80 @@ +{ + "scopeName": "דוח גישה ישירה", + "scopeNamesPlural": "דוחות גישה ישירה", + "labels": { + "Create DirectAccessReport": "צור דוח גישה ישירה" + }, + "fields": { + "name": "שם הדוח", + "number": "מספר", + "status": "סטטוס", + "case": "תיק", + "aidType": "מהות הסיוע", + "urgencyLevel": "דחיפות הליך", + "appointmentDate": "מועד קבלת המינוי", + "filingDeadline": "מועד אחרון להגשה", + "additionalUrgency": "דחיפות הליך נוסף", + "additionalDeadline": "מועדים להליך נוסף", + "firstContactDate": "תאריך יצירת קשר ראשוני", + "contactDelayReason": "סיבת עיכוב (אם לא תוך 48 שעות)", + "meetingDate": "תאריך פגישה עם הלקוח", + "meetingDelayReason": "סיבת עיכוב פגישה", + "meetingAttendees": "נוכחים בפגישה", + "contactStatus": "מצב קשר עם הלקוח", + "contactStatusDetail": "פירוט מצב קשר", + "proceedingNumber": "מספר הליך", + "courtName": "בית הדין", + "proceedingSubject": "עניין ההליך", + "claimSummary": "תמצית התביעה/הערעור", + "defenseClaims": "טענות ההגנה", + "q1DocsReviewed": "הוועדה התייחסה לכל המסמכים?", + "q1DocsDetail": "פירוט מסמכים", + "q2Reasoned": "ההחלטה מנומקת?", + "q2ReasonDetail": "פירוט הנמקה חסרה", + "q3PanelMatch": "הרכב תואם ליקויים?", + "q4PanelComposition": "הרכב הוועדה / הרכב חסר", + "q5ComplaintsAddressed": "התייחסו לכל התלונות?", + "q6ComplaintsDetail": "פירוט תלונות חסרות", + "q7ClinicalExam": "בדיקה קלינית נערכה?", + "q8ClinicalGap": "פער בדיקה קלינית vs מסמכים", + "q9MoharaApplied": "בחינת הלכת מוהרה (גיל, רקע, השכלה)?", + "q9MoharaDetail": "נתונים חסרים (מוהרה)", + "q10RehabGap": "פער פקיד שיקום vs ועדה?", + "q10RehabDetail": "פירוט הפער", + "q11ScoreGap": "פער ניקוד vs מצב ומסמכים?", + "q11ScoreDetail": "פירוט פער הניקוד", + "q12UniqueAspects": "התייחסות להיבטים ייחודיים?", + "q12UniqueDetail": "פירוט היבטים ייחודיים", + "recommendationType": "סוג ההמלצה", + "recommendationDetail": "פירוט ההמלצה", + "additionalAidNeeded": "צורך בסיוע נוסף", + "additionalAidNIDetail": "פירוט סיוע נוסף (ביטוח לאומי)", + "additionalAidOtherDetail": "פירוט סיוע נוסף (תחום אחר)", + "additionalAidUrgency": "דחיפות הסיוע הנוסף", + "additionalAidDeadlines": "מועדים (סיוע נוסף)", + "willingToRepresent": "בתחום התמחות + מעוניין לייצג?", + "notes": "הערות כלליות", + "assignedUser": "אחראי", + "teams": "צוותים", + "createdAt": "נוצר ב", + "modifiedAt": "עודכן ב", + "createdBy": "נוצר על ידי", + "modifiedBy": "עודכן על ידי" + }, + "options": { + "status": { + "Draft": "טיוטה", + "Submitted": "נשלח", + "Approved": "אושר", + "Rejected": "נדחה" + } + }, + "links": { + "case": "תיק" + }, + "presetFilters": { + "draft": "טיוטות", + "submitted": "נשלחו", + "approved": "אושרו" + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/app/smartAssistant.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/app/smartAssistant.json new file mode 100644 index 0000000..cbc64b7 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/app/smartAssistant.json @@ -0,0 +1,8 @@ +{ + "tools": { + "generate_initial_report": { + "handler": "Espo\\Modules\\LegalAssistance\\SmartAssistant\\Tools\\GenerateInitialReport", + "requiresCase": true + } + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/clientDefs/DirectAccessReport.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/clientDefs/DirectAccessReport.json new file mode 100644 index 0000000..17d36ad --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/clientDefs/DirectAccessReport.json @@ -0,0 +1,36 @@ +{ + "controller": "controllers/record", + "boolFilterList": ["onlyMy"], + "iconClass": "fas fa-file-alt", + "color": "#6C3483", + "kanbanViewMode": true, + "statusField": "status", + "filterList": [ + { + "name": "draft", + "style": "default" + }, + { + "name": "submitted", + "style": "warning" + }, + { + "name": "approved", + "style": "success" + } + ], + "menu": { + "list": { + "buttons": [] + }, + "detail": { + "buttons": [] + } + }, + "relationshipPanels": { + "case": { + "select": true, + "create": false + } + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/Case.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/Case.json new file mode 100644 index 0000000..f4f18b5 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/Case.json @@ -0,0 +1,43 @@ +{ + "fields": { + "cLegalAidType": { + "type": "enum", + "options": ["", "DirectAccess", "Regular", "Duty"], + "audited": true, + "displayAsLabel": true, + "style": { + "DirectAccess": "primary", + "Regular": "default", + "Duty": "info" + } + }, + "cAppointmentDate": { + "type": "date" + }, + "cAidType": { + "type": "enum", + "options": ["", "הגשת ערעור", "יעוץ והדרכה", "סיוע נוסף ביטוח לאומי", "סיוע נוסף תחום א��ר", "אי מתן סיוע"] + }, + "cUrgencyLevel": { + "type": "enum", + "options": ["", "רגיל", "דחוף", "��הול"], + "displayAsLabel": true, + "style": { + "רגיל": "default", + "דחוף": "warning", + "בהול": "danger" + } + }, + "cFilingDeadline": { + "type": "date" + } + }, + "links": { + "directAccessReports": { + "type": "hasMany", + "entity": "DirectAccessReport", + "foreign": "case", + "layoutRelationshipsDisabled": false + } + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/DirectAccessReport.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/DirectAccessReport.json new file mode 100644 index 0000000..be9620d --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/entityDefs/DirectAccessReport.json @@ -0,0 +1,269 @@ +{ + "fields": { + "name": { + "type": "varchar", + "required": true, + "pattern": "$noBadCharacters" + }, + "number": { + "type": "autoincrement", + "index": true + }, + "status": { + "type": "enum", + "options": ["Draft", "Submitted", "Approved", "Rejected"], + "default": "Draft", + "audited": true, + "displayAsLabel": true, + "style": { + "Draft": "default", + "Submitted": "warning", + "Approved": "success", + "Rejected": "danger" + } + }, + "case": { + "type": "link", + "required": true + }, + + "aidType": { + "type": "enum", + "options": ["", "הגשת ערעור", "יעוץ והדרכה", "סיוע נוסף ביטוח לאומי", "סיוע נוסף תחום אחר", "אי מתן סיוע"], + "audited": true + }, + "urgencyLevel": { + "type": "enum", + "options": ["", "רגיל", "דחוף", "בהול"], + "default": "רגיל", + "displayAsLabel": true, + "style": { + "רגיל": "default", + "דחוף": "warning", + "בהול": "danger" + } + }, + "appointmentDate": { + "type": "date" + }, + "filingDeadline": { + "type": "date" + }, + "additionalUrgency": { + "type": "enum", + "options": ["", "רגיל", "דחוף", "בהול"] + }, + "additionalDeadline": { + "type": "varchar", + "maxLength": 150 + }, + + "firstContactDate": { + "type": "date" + }, + "contactDelayReason": { + "type": "text" + }, + "meetingDate": { + "type": "date" + }, + "meetingDelayReason": { + "type": "text" + }, + "meetingAttendees": { + "type": "text" + }, + "contactStatus": { + "type": "enum", + "options": ["", "תקין", "לא תקין"] + }, + "contactStatusDetail": { + "type": "text" + }, + + "proceedingNumber": { + "type": "varchar", + "maxLength": 50 + }, + "courtName": { + "type": "enum", + "options": ["", "בית הדין האזורי לעבודה ירושלים", "בית הדין האזורי לעבודה תל אביב", "בית הדין האזורי לעבודה חיפה", "בית הדין האזורי לעבודה באר שבע", "בית הדין האזורי לעבודה נצרת", "בית הדין הארצי לעבודה"] + }, + "proceedingSubject": { + "type": "enum", + "options": ["", "נכות כללית", "נכות מעבודה", "נכות איבה", "ניידות", "אי כושר", "שירותים מיוחדים", "סיעוד", "גמלת הבטחת הכנסה", "דמי אבטלה", "אחר"] + }, + "claimSummary": { + "type": "text" + }, + "defenseClaims": { + "type": "text" + }, + + "q1DocsReviewed": { + "type": "bool", + "default": false + }, + "q1DocsDetail": { + "type": "text" + }, + "q2Reasoned": { + "type": "bool", + "default": false + }, + "q2ReasonDetail": { + "type": "text" + }, + "q3PanelMatch": { + "type": "bool", + "default": false + }, + "q4PanelComposition": { + "type": "text" + }, + "q5ComplaintsAddressed": { + "type": "bool", + "default": false + }, + "q6ComplaintsDetail": { + "type": "text" + }, + "q7ClinicalExam": { + "type": "bool", + "default": false + }, + "q8ClinicalGap": { + "type": "text" + }, + + "q9MoharaApplied": { + "type": "bool", + "default": false + }, + "q9MoharaDetail": { + "type": "text" + }, + "q10RehabGap": { + "type": "bool", + "default": false + }, + "q10RehabDetail": { + "type": "text" + }, + + "q11ScoreGap": { + "type": "bool", + "default": false + }, + "q11ScoreDetail": { + "type": "text" + }, + "q12UniqueAspects": { + "type": "bool", + "default": false + }, + "q12UniqueDetail": { + "type": "text" + }, + + "recommendationType": { + "type": "enum", + "options": ["", "ייעוץ והדרכה חלף ייצוג", "ויתור הלקוח", "החלפת ייצוג", "לא נוצר קשר", "לא התקיימה פגישה", "עדיין לא ניתן להחליט", "נדרשים מסמכים נוספים", "המלצה לסירוב"] + }, + "recommendationDetail": { + "type": "text" + }, + + "additionalAidNeeded": { + "type": "enum", + "options": ["", "לא נחוץ", "נחוץ בתחום ביטוח לאומי", "נחוץ בתחום אחר"] + }, + "additionalAidNIDetail": { + "type": "text" + }, + "additionalAidOtherDetail": { + "type": "text" + }, + "additionalAidUrgency": { + "type": "enum", + "options": ["", "רגיל", "דחוף", "בהול"] + }, + "additionalAidDeadlines": { + "type": "varchar", + "maxLength": 150 + }, + "willingToRepresent": { + "type": "bool", + "default": false + }, + + "notes": { + "type": "text" + }, + + "createdAt": { + "type": "datetime", + "readOnly": true + }, + "modifiedAt": { + "type": "datetime", + "readOnly": true + }, + "createdBy": { + "type": "link", + "readOnly": true, + "view": "views/fields/user" + }, + "modifiedBy": { + "type": "link", + "readOnly": true, + "view": "views/fields/user" + }, + "assignedUser": { + "type": "link", + "view": "views/fields/assigned-user" + }, + "teams": { + "type": "linkMultiple", + "view": "views/fields/teams" + } + }, + "links": { + "case": { + "type": "belongsTo", + "entity": "Case", + "foreign": "directAccessReports" + }, + "createdBy": { + "type": "belongsTo", + "entity": "User" + }, + "modifiedBy": { + "type": "belongsTo", + "entity": "User" + }, + "assignedUser": { + "type": "belongsTo", + "entity": "User" + }, + "teams": { + "type": "hasMany", + "entity": "Team", + "relationName": "entityTeam", + "layoutRelationshipsDisabled": true + } + }, + "collection": { + "orderBy": "createdAt", + "order": "desc", + "textFilterFields": ["name", "number"] + }, + "indexes": { + "status": { + "columns": ["status", "deleted"] + }, + "createdAt": { + "columns": ["createdAt"] + } + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detail.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detail.json new file mode 100644 index 0000000..02d31e9 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detail.json @@ -0,0 +1,81 @@ +[ + { + "label": "כותרת ופרטי תיק", + "rows": [ + [{"name": "name"}, {"name": "number"}], + [{"name": "case"}, {"name": "status"}], + [{"name": "assignedUser"}, {"name": "teams"}] + ] + }, + { + "label": "מהות הסיוע", + "rows": [ + [{"name": "aidType"}, {"name": "urgencyLevel"}], + [{"name": "appointmentDate"}, {"name": "filingDeadline"}], + [{"name": "additionalUrgency"}, {"name": "additionalDeadline"}] + ] + }, + { + "label": "קשר עם הלקוח", + "rows": [ + [{"name": "firstContactDate"}, {"name": "contactDelayReason"}], + [{"name": "meetingDate"}, {"name": "meetingDelayReason"}], + [{"name": "meetingAttendees"}, {"name": "contactStatus"}], + [{"name": "contactStatusDetail"}, false] + ] + }, + { + "label": "פרטי ההליך", + "rows": [ + [{"name": "proceedingNumber"}, {"name": "courtName"}], + [{"name": "proceedingSubject"}, false], + [{"name": "claimSummary", "fullWidth": true}], + [{"name": "defenseClaims", "fullWidth": true}] + ] + }, + { + "label": "בחינת סיכוי משפטי — נכות", + "rows": [ + [{"name": "q1DocsReviewed"}, {"name": "q1DocsDetail"}], + [{"name": "q2Reasoned"}, {"name": "q2ReasonDetail"}], + [{"name": "q3PanelMatch"}, {"name": "q4PanelComposition"}], + [{"name": "q5ComplaintsAddressed"}, {"name": "q6ComplaintsDetail"}], + [{"name": "q7ClinicalExam"}, {"name": "q8ClinicalGap"}] + ] + }, + { + "label": "בחינת סיכוי משפטי — אי כושר", + "rows": [ + [{"name": "q9MoharaApplied"}, {"name": "q9MoharaDetail"}], + [{"name": "q10RehabGap"}, {"name": "q10RehabDetail"}] + ] + }, + { + "label": "בחינת סיכוי משפטי — שירותים מיוחדים/סיעוד", + "rows": [ + [{"name": "q11ScoreGap"}, {"name": "q11ScoreDetail"}], + [{"name": "q12UniqueAspects"}, {"name": "q12UniqueDetail"}] + ] + }, + { + "label": "המלצה", + "rows": [ + [{"name": "recommendationType"}, false], + [{"name": "recommendationDetail", "fullWidth": true}] + ] + }, + { + "label": "מיצוי זכויות", + "rows": [ + [{"name": "additionalAidNeeded"}, {"name": "additionalAidUrgency"}], + [{"name": "additionalAidNIDetail"}, {"name": "additionalAidOtherDetail"}], + [{"name": "additionalAidDeadlines"}, {"name": "willingToRepresent"}] + ] + }, + { + "label": "הערות", + "rows": [ + [{"name": "notes", "fullWidth": true}] + ] + } +] diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detailSmall.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detailSmall.json new file mode 100644 index 0000000..54bac65 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/detailSmall.json @@ -0,0 +1,11 @@ +[ + { + "rows": [ + [{"name": "name"}], + [{"name": "case"}], + [{"name": "status"}], + [{"name": "aidType"}], + [{"name": "recommendationType"}] + ] + } +] diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/list.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/list.json new file mode 100644 index 0000000..1eca2c1 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/layouts/DirectAccessReport/list.json @@ -0,0 +1,10 @@ +[ + {"name": "number", "width": 8}, + {"name": "name", "link": true}, + {"name": "case", "width": 20}, + {"name": "status", "width": 12}, + {"name": "aidType", "width": 15}, + {"name": "recommendationType", "width": 15}, + {"name": "createdAt", "width": 15}, + {"name": "assignedUser", "width": 15} +] diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/scopes/DirectAccessReport.json b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/scopes/DirectAccessReport.json new file mode 100644 index 0000000..8906acf --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/metadata/scopes/DirectAccessReport.json @@ -0,0 +1,15 @@ +{ + "entity": true, + "object": true, + "stream": true, + "tab": false, + "acl": true, + "aclPortal": false, + "disabled": false, + "module": "LegalAssistance", + "isCustom": false, + "notifications": true, + "calendar": false, + "activity": false, + "kanbanStatusIgnoreList": ["Approved", "Rejected"] +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Resources/module.json b/files/custom/Espo/Modules/LegalAssistance/Resources/module.json new file mode 100644 index 0000000..bcb3650 --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Resources/module.json @@ -0,0 +1,7 @@ +{ + "order": 25, + "version": "1.0.0", + "requires": { + "espocrm": ">=8.0.0" + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/Services/DirectAccessReportService.php b/files/custom/Espo/Modules/LegalAssistance/Services/DirectAccessReportService.php new file mode 100644 index 0000000..543f10b --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/Services/DirectAccessReportService.php @@ -0,0 +1,214 @@ +entityManager->getEntityById('Case', $caseId); + if (!$case) { + throw new Error("Case {$caseId} not found."); + } + + $contact = null; + $contactId = $case->get('contactId'); + if ($contactId) { + $contact = $this->entityManager->getEntityById('Contact', $contactId); + } + + // Build report name + $contactName = $contact + ? ($contact->get('firstName') . ' ' . $contact->get('lastName')) + : 'ללא איש קשר'; + $reportName = "דוח גישה ישיר�� — {$contactName}"; + + // Extract legal analysis from nested object + $legalAnalysis = $params['legalAnalysis'] ?? []; + if (is_string($legalAnalysis)) { + $legalAnalysis = json_decode($legalAnalysis, true) ?? []; + } + + // Create DirectAccessReport entity + $report = $this->entityManager->getNewEntity('DirectAccessReport'); + $report->set([ + 'name' => $reportName, + 'status' => 'Draft', + 'caseId' => $caseId, + 'assignedUserId' => $userId, + + // Section ב' �� מהות הסיוע + 'aidType' => $params['aidType'] ?? null, + 'urgencyLevel' => $params['urgencyLevel'] ?? null, + 'appointmentDate' => $this->normalizeDate($params['appointmentDate'] ?? null), + 'filingDeadline' => $this->normalizeDate($params['filingDeadline'] ?? null), + 'additionalUrgency' => $params['additionalUrgency'] ?? null, + 'additionalDeadline' => $params['additionalDeadline'] ?? null, + + // Section ג' — קשר עם הלקוח + 'firstContactDate' => $this->normalizeDate($params['firstContactDate'] ?? null), + 'contactDelayReason' => $params['contactDelayReason'] ?? null, + 'meetingDate' => $this->normalizeDate($params['meetingDate'] ?? null), + 'meetingDelayReason' => $params['meetingDelayReason'] ?? null, + 'meetingAttendees' => $params['meetingAttendees'] ?? null, + 'contactStatus' => $params['contactStatus'] ?? null, + 'contactStatusDetail' => $params['contactStatusDetail'] ?? null, + + // Section ד' — פרטי ההליך + 'proceedingNumber' => $params['proceedingNumber'] ?? $case->get('cCourtCaseNumber'), + 'courtName' => $params['courtName'] ?? null, + 'proceedingSubject' => $params['proceedingSubject'] ?? null, + 'claimSummary' => $params['claimSummary'] ?? null, + 'defenseClaims' => $params['defenseClaims'] ?? null, + + // Section ה'-ז' — בחינת סיכוי משפטי + 'q1DocsReviewed' => $legalAnalysis['q1DocsReviewed'] ?? false, + 'q1DocsDetail' => $legalAnalysis['q1DocsDetail'] ?? null, + 'q2Reasoned' => $legalAnalysis['q2Reasoned'] ?? false, + 'q2ReasonDetail' => $legalAnalysis['q2ReasonDetail'] ?? null, + 'q3PanelMatch' => $legalAnalysis['q3PanelMatch'] ?? false, + 'q4PanelComposition' => $legalAnalysis['q4PanelComposition'] ?? null, + 'q5ComplaintsAddressed' => $legalAnalysis['q5ComplaintsAddressed'] ?? false, + 'q6ComplaintsDetail' => $legalAnalysis['q6ComplaintsDetail'] ?? null, + 'q7ClinicalExam' => $legalAnalysis['q7ClinicalExam'] ?? false, + 'q8ClinicalGap' => $legalAnalysis['q8ClinicalGap'] ?? null, + 'q9MoharaApplied' => $legalAnalysis['q9MoharaApplied'] ?? false, + 'q9MoharaDetail' => $legalAnalysis['q9MoharaDetail'] ?? null, + 'q10RehabGap' => $legalAnalysis['q10RehabGap'] ?? false, + 'q10RehabDetail' => $legalAnalysis['q10RehabDetail'] ?? null, + 'q11ScoreGap' => $legalAnalysis['q11ScoreGap'] ?? false, + 'q11ScoreDetail' => $legalAnalysis['q11ScoreDetail'] ?? null, + 'q12UniqueAspects' => $legalAnalysis['q12UniqueAspects'] ?? false, + 'q12UniqueDetail' => $legalAnalysis['q12UniqueDetail'] ?? null, + + // Section ח' — המלצה + 'recommendationType' => $params['recommendationType'] ?? null, + 'recommendationDetail' => $params['recommendationDetail'] ?? null, + + // Section ט' — מיצוי זכויות + 'additionalAidNeeded' => $params['additionalAidNeeded'] ?? null, + 'additionalAidNIDetail' => $params['additionalAidNIDetail'] ?? null, + 'additionalAidOtherDetail' => $params['additionalAidOtherDetail'] ?? null, + 'additionalAidUrgency' => $params['additionalAidUrgency'] ?? null, + 'additionalAidDeadlines' => $params['additionalAidDeadlines'] ?? null, + 'willingToRepresent' => $params['willingToRepresent'] ?? false, + + // Section י' — הערות + 'notes' => $params['notes'] ?? null, + ]); + + $this->entityManager->saveEntity($report); + + $this->log->info("LegalAssistance: Created DirectAccessReport {$report->getId()} for case {$caseId}"); + + // Also update Case fields if provided + $caseUpdated = false; + if (!empty($params['appointmentDate']) && !$case->get('cAppointmentDate')) { + $case->set('cAppointmentDate', $this->normalizeDate($params['appointmentDate'])); + $caseUpdated = true; + } + if (!empty($params['aidType']) && !$case->get('cAidType')) { + $case->set('cAidType', $params['aidType']); + $caseUpdated = true; + } + if (!empty($params['urgencyLevel']) && !$case->get('cUrgencyLevel')) { + $case->set('cUrgencyLevel', $params['urgencyLevel']); + $caseUpdated = true; + } + if (!empty($params['filingDeadline']) && !$case->get('cFilingDeadline')) { + $case->set('cFilingDeadline', $this->normalizeDate($params['filingDeadline'])); + $caseUpdated = true; + } + if ($caseUpdated) { + $this->entityManager->saveEntity($case, ['skipHooks' => true]); + } + + // Generate DOCX using template + $docxResult = $this->generateDocx($report, $case, $contact, $userId); + + $msg = "✅ דוח גישה ישירה נוצר בהצלחה: \"{$reportName}\""; + if (!empty($docxResult['fileName'])) { + $msg .= "\n📄 מסמך DOCX נוצר: {$docxResult['fileName']}"; + } + + return [ + 'success' => true, + 'message' => $msg, + 'entityType' => 'DirectAccessReport', + 'entityId' => $report->getId(), + ]; + } + + private function generateDocx($report, $case, $contact, string $userId): array + { + // Try to use LocalDocumentTemplateService if available + try { + $templateServiceClass = 'Espo\\Modules\\LocalDocuments\\Services\\LocalDocumentTemplateService'; + if (!class_exists($templateServiceClass)) { + $templateServiceClass = 'Espo\\Modules\\NetworkStorageIntegration\\Services\\DocumentTemplateService'; + } + + if (!class_exists($templateServiceClass)) { + $this->log->warning("LegalAssistance: No template service available for DOCX generation"); + return ['success' => false, 'error' => 'No template service']; + } + + // Find the template + $template = $this->entityManager + ->getRDBRepository('DocumentTemplate') + ->where(['name' => 'דוח גישה ישירה']) + ->findOne(); + + if (!$template) { + $this->log->warning("LegalAssistance: Template 'דוח גישה ישירה' not found"); + return ['success' => false, 'error' => 'Template not found']; + } + + $templateService = $this->injectableFactory->create($templateServiceClass); + + $result = $templateService->createFromTemplate( + $template->getId(), + 'Case', + $case->getId(), + $report->get('name') + ); + + return $result; + } catch (\Throwable $e) { + $this->log->error("LegalAssistance: DOCX generation failed: " . $e->getMessage()); + return ['success' => false, 'error' => $e->getMessage()]; + } + } + + private function normalizeDate(?string $value): ?string + { + if (!$value) return null; + + // Handle DD/MM/YYYY format + if (preg_match('/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/', $value, $m)) { + return "{$m[3]}-{$m[2]}-{$m[1]}"; + } + + // Handle YYYY-MM-DD format (already correct) + if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) { + return $value; + } + + return $value; + } +} diff --git a/files/custom/Espo/Modules/LegalAssistance/SmartAssistant/Tools/GenerateInitialReport.php b/files/custom/Espo/Modules/LegalAssistance/SmartAssistant/Tools/GenerateInitialReport.php new file mode 100644 index 0000000..7b97e7c --- /dev/null +++ b/files/custom/Espo/Modules/LegalAssistance/SmartAssistant/Tools/GenerateInitialReport.php @@ -0,0 +1,33 @@ +log->info("LegalAssistance: Generating initial report for case {$caseId}"); + + $service = $this->injectableFactory->create(DirectAccessReportService::class); + + $result = $service->generateReport($caseId, $userId, $params); + + return $result; + } +} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..c7510b1 --- /dev/null +++ b/manifest.json @@ -0,0 +1,13 @@ +{ + "name": "LegalAssistance", + "version": "1.0.0", + "acceptableVersions": [">=8.0.0"], + "php": [">=8.1"], + "releaseDate": "2026-04-06", + "author": "Marcus-Law", + "description": "סיוע משפטי — דוח גישה ישירה, משימות אוטומטיות, אינטגרציה עם שירה", + "scripts": { + "afterInstall": "scripts/AfterInstall.php", + "afterUninstall": "scripts/AfterUninstall.php" + } +} diff --git a/plugins/legal-assistance/prompts.json b/plugins/legal-assistance/prompts.json new file mode 100644 index 0000000..b00abb7 --- /dev/null +++ b/plugins/legal-assistance/prompts.json @@ -0,0 +1,3 @@ +{ + "casePromptAppend": "=== DIRECT ACCESS REPORT (דוח גישה ישירה) ===\nWhen the user asks to create a direct access report (\"דוח גישה ישירה\", \"דיווח ראשוני\", \"דוח דיווח ראשוני\"), follow this structured conversation flow:\n\nIMPORTANT: Do NOT call generate_initial_report until you have collected ALL required information through conversation.\n\nStep 1 — AUTO-FILL from context:\n- Pull from case: מספר תיק סיוע (cLegalAidNumber), בית הדין (cCourt), מספר הליך (cCourtCaseNumber)\n- Pull from contact: שם פרטי, שם משפחה\n- Tell the user what you already have and what's missing\n\nStep 2 — ASK about the appointment:\n- מתי קיבלת את המינוי? (appointmentDate)\n- מה מהות הסיוע? (הגשת ערעור / יעוץ / סיוע נוסף / אי מתן סיוע)\n- מה דחיפות ההליך? (רגיל / דחוף / בהול)\n- מועד אחרון להגשה?\n\nStep 3 — ASK about client contact:\n- מתי יצרת קשר ראשוני עם הלקוח?\n- If > 48 hours from appointment: מה סיבת העיכוב?\n- מתי נפגשתם? מי נכח בפגישה?\n- If > 10 days from appointment: מה סיבת העיכוב?\n- הקשר עם הלקוח תקין? (if not, ask for details)\n\nStep 4 — ASK about the proceeding:\n- עניין ההליך? (נכות כללית/מעבודה/איבה/ניידות/אי כושר/שירותים מיוחדים/סיעוד/etc.)\n- תמצית התביעה/הערעור?\n- טענות ההגנה (אם הוגשו)?\n\nStep 5 — ASK legal evaluation questions (BASED ON SUBJECT TYPE):\n\nIf נכות כללית/מעבודה/איבה/ניידות:\n- הוועדה התייחסה לכל המסמכים הרפואיים? פרט\n- ההחלטה מנומקת? ניתן להתחקות אחר הלך הרוח? פרט חוסרים\n- הרכב הוועדה תואם ליקויים? הרכב חסר?\n- התייחסו לכל תלונות הלקוח? פרט חוסרים\n- בדיקה קלינית נערכה? פער בין בדיקה למסמכים?\n\nIf אי כושר (in addition):\n- בחינת הלכת מוהרה (גיל, רקע תעסוקתי, השכלה)? נתונים חסרים?\n- פער בין פקיד שיקום לוועדה?\n\nIf שירותים מיוחדים/סיעוד:\n- פער ניקוד vs מצב ומסמכים?\n- התייחסות להיבטים ייחודיים (נפילות, מצב קוגנטיבי, השגחה)?\n\nStep 6 — ASK for recommendation:\n- מה ההמלצה? (ייעוץ חלף ייצוג / ויתור / החלפת ייצוג / לא נוצר קשר / לא התקיימה פגישה / עוד לא ניתן להחליט / נדרשים מסמכים / המלצה לסירוב)\n- Generate detailed justification based on the answers\n\nStep 7 — ASK about additional rights:\n- הלקוח צריך סיוע נוסף? (לא / בביטוח לאומי / תחום אחר)\n- If yes: פרטים, דחיפות, מועדים\n- הסיוע בתחום התמחותך? מעוניין לייצג?\n- הערות נוספות?\n\nStep 8 — GENERATE:\n- Summarize all collected data to the user\n- Ask for confirmation\n- Call generate_initial_report with ALL collected data\n\nNOTES:\n- Ask questions in natural conversation style, not as a form\n- Group related questions together (2-3 per message)\n- Use the case context to pre-fill what you can\n- For the legal analysis, formulate the answers based on the lawyer's explanations\n- The recommendationDetail should be a well-written legal justification\n" +} diff --git a/plugins/legal-assistance/tools.json b/plugins/legal-assistance/tools.json new file mode 100644 index 0000000..cdf0a6c --- /dev/null +++ b/plugins/legal-assistance/tools.json @@ -0,0 +1,152 @@ +{ + "tools": { + "generate_initial_report": { + "description": "Generate Direct Access initial report (דוח דיווח ראשוני — גישה ישירה). Call ONLY after collecting ALL required data through conversation with the lawyer. This tool creates a DirectAccessReport entity and generates a DOCX document.", + "parameters": { + "type": "object", + "properties": { + "aidType": { + "type": "string", + "enum": ["הגשת ערעור", "יעוץ והדרכה", "סיוע נוסף ביטוח לאומי", "סיוע נוסף תחום אחר", "אי מתן סיוע"], + "description": "מהות הסיוע" + }, + "urgencyLevel": { + "type": "string", + "enum": ["רגיל", "דחוף", "בהול"], + "description": "דחיפות ההליך" + }, + "filingDeadline": { + "type": "string", + "description": "מועד אחרון להגשה (YYYY-MM-DD)" + }, + "appointmentDate": { + "type": "string", + "description": "מועד קבלת המינוי (YYYY-MM-DD)" + }, + "additionalUrgency": { + "type": "string", + "enum": ["רגיל", "דחוף", "בהול"], + "description": "דחיפות הליך נוסף (if applicable)" + }, + "additionalDeadline": { + "type": "string", + "description": "מועדים להליך נוסף" + }, + "firstContactDate": { + "type": "string", + "description": "תאריך יצירת קשר ראשוני (YYYY-MM-DD)" + }, + "contactDelayReason": { + "type": "string", + "description": "סיבת עיכוב ביצירת קשר (if > 48 hours)" + }, + "meetingDate": { + "type": "string", + "description": "תאריך פגישה עם הלקוח (YYYY-MM-DD)" + }, + "meetingDelayReason": { + "type": "string", + "description": "סיבת עיכוב בפגישה (if > 10 days)" + }, + "meetingAttendees": { + "type": "string", + "description": "נוכחים בפגישה (פרט לפונה)" + }, + "contactStatus": { + "type": "string", + "enum": ["תקין", "לא תקין"], + "description": "מצב הקשר עם הלקוח" + }, + "contactStatusDetail": { + "type": "string", + "description": "פירוט מצב קשר (if לא תקין)" + }, + "proceedingNumber": { + "type": "string", + "description": "מספר ההליך בבית הדין" + }, + "courtName": { + "type": "string", + "description": "בית הדין" + }, + "proceedingSubject": { + "type": "string", + "enum": ["נכות כללית", "נכות מעבודה", "נכות איבה", "ניידות", "אי כושר", "שירותים מיוחדים", "סיעוד", "גמלת הבטחת הכנסה", "דמי אבטלה", "אחר"], + "description": "עניין ההליך" + }, + "claimSummary": { + "type": "string", + "description": "תמצית התביעה/הערעור" + }, + "defenseClaims": { + "type": "string", + "description": "טענות ההגנה (אם הוגשו)" + }, + "legalAnalysis": { + "type": "object", + "description": "ניתוח הסיכוי המשפטי — מלא רק שדות רלוונטיים לסוג התביעה", + "properties": { + "q1DocsReviewed": { "type": "boolean" }, + "q1DocsDetail": { "type": "string" }, + "q2Reasoned": { "type": "boolean" }, + "q2ReasonDetail": { "type": "string" }, + "q3PanelMatch": { "type": "boolean" }, + "q4PanelComposition": { "type": "string" }, + "q5ComplaintsAddressed": { "type": "boolean" }, + "q6ComplaintsDetail": { "type": "string" }, + "q7ClinicalExam": { "type": "boolean" }, + "q8ClinicalGap": { "type": "string" }, + "q9MoharaApplied": { "type": "boolean" }, + "q9MoharaDetail": { "type": "string" }, + "q10RehabGap": { "type": "boolean" }, + "q10RehabDetail": { "type": "string" }, + "q11ScoreGap": { "type": "boolean" }, + "q11ScoreDetail": { "type": "string" }, + "q12UniqueAspects": { "type": "boolean" }, + "q12UniqueDetail": { "type": "string" } + } + }, + "recommendationType": { + "type": "string", + "enum": ["ייעוץ והדרכה חלף ייצוג", "ויתור הלקוח", "החלפת ייצוג", "לא נוצר קשר", "לא התקיימה פגישה", "עדיין לא ניתן להחליט", "נדרשים מסמכים נוספים", "המלצה לסירוב"], + "description": "סוג ההמלצה/ההודעה" + }, + "recommendationDetail": { + "type": "string", + "description": "פירוט מנומק של ההמלצה" + }, + "additionalAidNeeded": { + "type": "string", + "enum": ["לא נחוץ", "נחוץ בתחום ביטוח לאומי", "נחוץ בתחום אחר"], + "description": "צורך בסיוע נוסף" + }, + "additionalAidNIDetail": { + "type": "string", + "description": "פירוט סיוע נוסף בתחום ביטוח לאומי" + }, + "additionalAidOtherDetail": { + "type": "string", + "description": "פירוט סיוע נוסף בתחום אחר" + }, + "additionalAidUrgency": { + "type": "string", + "enum": ["רגיל", "דחוף", "בהול"] + }, + "additionalAidDeadlines": { + "type": "string", + "description": "מועדים לסיוע נוסף" + }, + "willingToRepresent": { + "type": "boolean", + "description": "הסיוע הנוסף בתחום התמחותי ומעוניין לייצג?" + }, + "notes": { + "type": "string", + "description": "הערות כלליות" + } + }, + "required": ["aidType", "proceedingSubject", "recommendationType"] + } + } + } +} diff --git a/scripts/AfterInstall.php b/scripts/AfterInstall.php new file mode 100644 index 0000000..4a028de --- /dev/null +++ b/scripts/AfterInstall.php @@ -0,0 +1,138 @@ +getByClass(EntityManager::class); + /** @var Log $log */ + $log = $container->getByClass(Log::class); + + $log->info('LegalAssistance: Running AfterInstall...'); + + // 1. Deploy ai-gateway plugin files + $this->deployPluginFiles($log); + + // 2. Create DocumentTemplate + $this->createDocumentTemplate($entityManager, $log); + + // 3. Clear cache + try { + $dataManager = $container->getByClass(DataManager::class); + $dataManager->clearCache(); + $log->info('LegalAssistance: Cache cleared.'); + } catch (\Throwable $e) { + $log->warning('LegalAssistance: Cache clear failed: ' . $e->getMessage()); + } + + $log->info('LegalAssistance: AfterInstall completed.'); + } + + private function deployPluginFiles(Log $log): void + { + // Source: extension's plugins/ directory (relative to EspoCRM root after install) + $sourceDir = 'custom/Espo/Modules/LegalAssistance/../../../../../../plugins/legal-assistance'; + + // Try common ai-gateway locations + $gatewayPaths = [ + '/home/chaim/ai-gateway/plugins/legal-assistance', + '/opt/ai-gateway/plugins/legal-assistance', + ]; + + // Find actual source files within the extension package + $extPluginDir = __DIR__ . '/../plugins/legal-assistance'; + + if (!is_dir($extPluginDir)) { + $log->warning("LegalAssistance: Plugin source directory not found at {$extPluginDir}"); + return; + } + + foreach ($gatewayPaths as $targetDir) { + $parentDir = dirname($targetDir); + if (!is_dir($parentDir)) { + continue; + } + + if (!is_dir($targetDir)) { + mkdir($targetDir, 0755, true); + } + + $files = ['tools.json', 'prompts.json']; + foreach ($files as $file) { + $src = $extPluginDir . '/' . $file; + $dst = $targetDir . '/' . $file; + if (file_exists($src)) { + copy($src, $dst); + $log->info("LegalAssistance: Deployed {$file} to {$targetDir}"); + } + } + + $log->info("LegalAssistance: Plugin files deployed to {$targetDir}"); + return; + } + + $log->warning('LegalAssistance: Could not find ai-gateway plugins directory. Deploy manually.'); + } + + private function createDocumentTemplate(EntityManager $entityManager, Log $log): void + { + // Check if template already exists + $existing = $entityManager + ->getRDBRepository('DocumentTemplate') + ->where(['name' => 'דוח גישה ישירה']) + ->findOne(); + + if ($existing) { + $log->info('LegalAssistance: DocumentTemplate already exists, skipping.'); + return; + } + + // Find the template DOCX file + $templateFile = __DIR__ . '/../templates/direct-access-report.docx'; + if (!file_exists($templateFile)) { + $log->warning("LegalAssistance: Template file not found at {$templateFile}"); + return; + } + + // Create attachment for the template file + $contents = file_get_contents($templateFile); + + $attachment = $entityManager->getNewEntity('Attachment'); + $attachment->set([ + 'name' => 'direct-access-report.docx', + 'type' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'role' => 'Attachment', + 'size' => strlen($contents), + ]); + $entityManager->saveEntity($attachment); + + // Write file to storage + $filePath = 'data/upload/' . $attachment->getId(); + file_put_contents($filePath, $contents); + + // Create DocumentTemplate entity + $template = $entityManager->getNewEntity('DocumentTemplate'); + $template->set([ + 'name' => 'דוח גישה ישירה', + 'entityType' => 'Case', + 'fileId' => $attachment->getId(), + ]); + $entityManager->saveEntity($template); + + $log->info("LegalAssistance: DocumentTemplate created: {$template->getId()}"); + } +} diff --git a/scripts/AfterUninstall.php b/scripts/AfterUninstall.php new file mode 100644 index 0000000..a21aea9 --- /dev/null +++ b/scripts/AfterUninstall.php @@ -0,0 +1,51 @@ +getByClass(Log::class); + + $log->info('LegalAssistance: Running AfterUninstall...'); + + // Remove ai-gateway plugin files + $gatewayPaths = [ + '/home/chaim/ai-gateway/plugins/legal-assistance', + '/opt/ai-gateway/plugins/legal-assistance', + ]; + + foreach ($gatewayPaths as $dir) { + if (is_dir($dir)) { + $files = glob($dir . '/*'); + foreach ($files as $file) { + if (is_file($file)) { + unlink($file); + } + } + rmdir($dir); + $log->info("LegalAssistance: Removed plugin files from {$dir}"); + } + } + + // Clear cache + try { + $dataManager = $container->getByClass(DataManager::class); + $dataManager->clearCache(); + } catch (\Throwable $e) { + $log->warning('LegalAssistance: Cache clear failed: ' . $e->getMessage()); + } + + $log->info('LegalAssistance: AfterUninstall completed.'); + } +} diff --git a/templates/direct-access-report.docx b/templates/direct-access-report.docx new file mode 100644 index 0000000000000000000000000000000000000000..6b9728f4c55de013cad9693914e7da2e059d2b16 GIT binary patch literal 32001 zcmbTdW0WXOvNqbbZSJ;h+qP}nwr$(m?e5*SZQHi)e&>91=FH!_V#QOHk%(NW%E-u) zmjVVs0RRAi_{)R3{$L_kV-PeEl6QUm-5 zp*Mj)gqJFrHF(0s72tfalwY)CY7~lDhnC}{2r@EWd|cCw8QHxY zSiJ&+NnZtVj(rjWRtlJX6~jN~RBnWg#mCde!QeyEfg_vtzPI(670$#W$m zJfUO_@QB=Fl?gdSyt7CdDZk1|3F6+rj4Fc2ZWoI*gBN!LQP$pw z8lEYGBj>Pc!Vm7p((<%DrNXkQvT(99!@;u&4kg1l@0AqsV-_Np zJ>y3KYK_c2_snczBF@})qE$PPfh=qR-Q?a#`o$1py^jgq={!*3fq!zDF) z%^GQY?hJdxSF7K}h0gZ3pr%;r_Pe+I%?r{v>UQIs5#}Et`Ty!jb0Ae`e%QaA=nnt@ z|F>Q2hoSZ$ZO`QJe#HAc5r;Sm>k(-KfH~zb19P3DUg;c8}8m$)MrSX>K#FZ05 zdK5EQeGKkjRy`tcwVG;;9@>e?JqSIrU_syltYE_Mo;ic)Q3M}h8P{(w(g$x-t@yw@ z?MDjK#_o(5Jlq)U+|DIr{aHzUofm2Fc(B>*1_dMDnDbQRVwtMg`>Px- zv6O%Zb@yo$k{!-g3`{4GT8!@+We?j#aaG$s2p$x6d3k#vO$Lwu5LJ|OQQF6XakZZ` z{$z7w$gYL-A(w#4b;TKJmzp8uB|8yrCAaS|HXN#0 z**oK#6FD{A{Dv>JT7IjM^p)5|y~k0cGsu9&FipL$X_u98Cc7hciYxPHIkr^KN-XRz zH`O&475!zgzwaYG&#}U%6`P!v+pzi92N;Xt#~6d5#~8nZk1>h^k1>+{k1@bFGmS7t z%wrAGiP$5YWs2%qSII)>wx_rF#8w?%|i0HXL5a zthm|qEICdjO%3L?OrR-}b_6wb`K^l0><$x9st@9raS~;2yY#h(ScTC5VH>tcRTk(Yf~vCMdvJaTn1E z-TIl+k)x+jI|+^MW{F+(Bz{RiE%}>TG)@W=L4djRZi*vSYhY;jwjnt9>6sv$Xq0m7X;Hzk7sQ&6W2n-G%S}GEkNK7s<0EO;Qu+I;ISdQ_6Ib=$vaERBd|R zG4%SkrIExBVhdug6ylIEqxmpW^zO=<<8!omMXQC$PpFOhmq~M0ig=b90i@=c)C;f- z7H_BCop_1~zGsrI^(7sdtzysDta*d4GFqRrTZ~ju5anX_7FQ@#Mbv?#=eY+l>X*t1@ce9*=@u z9uh9ze7%wY{n+8JGsJ{NMy23DW4NWRo7XSx#?hhz9Z~L{QPMr(K`OLrZ%UhrF88u~ z_&!VV2Veb!(O77Oi1SPkRW56cvIqS34ZfxBRJgH(0yc}nIKJ}|+n=Uxt+wxpU>fZo zlEB!~OuWWBsoAx^p=sN_a!#-FCU&%8rSfI&%Ij3_^Y3T6Z>Zcyli%V#oZzYajPQRM zU6K#BKfQ4zQ*6~>s_2?-FMf_YP{=X!B~0AixNnxeQrsLv1%o-75)4Ze%l}*LbW#6{ zZlR*@U9T!>AUqX-1!IYwIOjWJ`hHPg`9ON0d^jUiA%+RI2+J(#1Wu27ktp3ZvVyQ; zSQ}P?Z7vuRUX{^sjtB8RWX2Ao4{$!)6?06)^(6%6A*zicwdstzK->C+y^^5k#Hq2= zgnHZ+5eL!a4;{%|L-SN{5sei%9DLkMrVgFQY)|x`$Bc=z`4@NNQzffz?`FeV|1jCk zJnD7?wu!-ZO;xdvi}bZV-HAs19mb8G0n)sg;hM4x?gTIsp}i@TCJDC#2KwAX#n1q5zOY!NL*hujWZ*A@WLvMkfd=dD4bmXY#N>Aul1>9cAora~EgySJKf>^OxR zjvpNzo`%lOvENR|pS&rM>@qypzDg_Yn(QGAZde>i*JQOVjnQjyISVnEa~wD6h&jmd zm~#}!m{STAe+$dbnhc+o7?0*RqhcrCZAAS&VnStZmsCSAM5^_q4*EBF8n7vdW;sFt znq^!{AZ7p(C4DOrWpRE86ry>7;NKW~z))n$-y@Ky>l+ZLiq^qU6#patn}bsLf0Aj| zUd0@%3WlKkmL~+FQ4Z&ac3D>{pT#3nHn$^I7H>fOzvcaJKJo$}C#nKLsDCN{rzp?W z{~wt+FDR7FI%u%^V`>GLrGLhq2+wlCBXLUP2bb%3;fvE;flD zBWBpjuH0Uo-J``;YEfPUPn}8uc&{uWV=JULLcO<;P&^h|5_DTZs-`Wpo@=xME$r7* zottSVq7)aML83S2rKjAD>Fp+#S)5MyTX1xkg7Iu8CRv0|cU!!*nYf)B54)^^oLL(6W%6dcBc{#EmRSUo{KIDaxUCIf^X&3D&2STxs z>I*_atjoP*M@6H3{)#yl5lql6+uHsUMc7BV2w;S78QuuTBD@xYr95^jF9gK881E0u z@=HAgOaJn(qUD0n@)r4vBJ$@Y#VMRth$_r|(!)$bT8W)1B_u{0!B2kdd!6+A4Ucy1C$p|k zKuZ&QTgw-9j4i%jIqyD&-l;r*-L9R9X?%b!0O$C*R7hO2b@k(#dnk2Rl-t@R*jm|@ zOMZ3tYM~}}*YkM?pQMT=tTVY)C9dq__}L?9ka3lAYf4eFU`ZNJdp4QfosU7;@@bO^hA=(!rMSPjn+N zrXsIZ^w^?*?lYNA9}%a|V2#>0O^=-2D!Q)GW>T3-fY`TT<6>Cd+vSHyy;!)mHphQu z`L1h1h>a}|oJr5|T`$uwMYrdHi+(xanKtxLEvB)}evE=0!OOMZ^ccR?9gTk~<etPL?^ymv>j8}{S@G=Y7SsBwG3rzE>Sr^&EH)X2++B2iycrEF-VWid9PRvzT` zU7q;_=X%&{`RFX)$S)M47i`Im2t-zRiC#C8Xi`&Iv8Di4O1*>7d27G3sJoqlipetD0oe6iVNF?WjF`iQk!`{-#3v~t)hUkWMuAwySG!^_cu zK<~$X`gZw}E7_d6=rQs0Rn_9F@nc91N<~^$;(uGn_!g^XwElr1S*_dZxvzU2^8@&A zW6M;@*Pb630HEftrG@lwW6Sif<*aOAXl?S3y|tCPW4lg|GJHdJgLC4EHD5_% zd_Lsa(6Zhv0n>msl3_{rhxS7(uj-J}vpKyKbR z9`uK7weqr)4(4#MfyXFQ;(3%2Er#m5vb1*SP@07+f@7+Ih!}H$ z)ju7kw5sgGjN8h;p3s)GCuq{|!b7^FB*sDUNHit*T=Ma8>iY@Yra%2Z4g6K0rX3WZ z^tYuL7MSWNh>^4tIbH`bWv~2U%CwQ>;xhJ%Z}^jBpjq{i-`|5C6K>i}^)ZYHBQ)WI zJ=~))Wzee1>pPwWMO85B_L->5HGF&}<|F>lrx35Yg(3(t!vK-Rx%-@Gi>>DzYaj|7 z>pm~h5XHEFWQv=+TvnuA1go0yi0&**<&bmSYpA83kvGmqky3Y8cJr&~?pEwKSFcJ_ zw)T5r36wCTs5=Wf)>lapfQCN`L=#Y&@y~2`Stc&x50hK)!pQYgkK?5;1Fi*e1;veNmY1A#dl@dS2 zMSQzrJ3}e+)L0TGa4(g(g(jQ*_E}ZLvRhyPcQ0+-u*45d1wRN$>v=g3(y;_*#q)VB zf^)5o{>1Tk@@^Y$s68?Z7-duN`{8$2;s33V3Gs-8uubJjl3@>IOWVsNv%sEsgIP|V zJgke`Fg1;Bo4Eer_{t&6rbz;_|)j3q40FRI~8lN)N$`Ic_6D$6lIqy=+sPv5y2( zK8e(2{|o`vXyLkElB@8ob;pRYT{Zt1H%|q3cxU(D^X=PEH1QOuDW;v-xH#o|N5VHa0So0;)!Rpc601=B)p>;v2CJHWM4FV3{F zfkQ;cB)4&@VwiL=Yp71F<XJNS(TwP&o<6JX{ujR42Z5 zWvp`9=n3rTzd}3h6DL2uO98Q?wxg8j)LV~Wzc3fmviyTGEg~dz=iAgr>w|yGMAro<~T}}vYcFvSnk4jx?ckQBT|>C z=v4NaWs|DtXyF5Buk4pD&CcTIONEbb6_Q?|DJIBe+hW?;NAz2xeQIGT%vRq?8M$n> z1_3qF-W)RCw$=|&cTCg~es|2ubL37(+6u#$T%pF%u`W8?6(|yRO9cN?Iv_@A05vj zri&^8UzZ1EG}@qjJfL)@z0xeMJ}2J+bo`;t0A^1<^BBOHsY5I z$|k$%TC5ma`DnmY(65Ow!OL5Wvw>`({GoOb0qNTqKmi^`5X?2$f&?m%Ev$&)w>E_F znvYlz!jcfhLeK>4Dk8h)?3wutMqB*(6n2v<{Q32-H$znjXUr&s3TKeN#YI3=Jb`Q! z5~?0S){BXh{v`^$cmm-R5P?z-tdXJ2yeDj!R!Bhfg{3qkp=1nX04b$J<;W%wemkU8 z{=DJ)adM&Mtho4q|LTb-d(ilC&RItjarVCA)Df4sK9DlHH$E1-qrB@beu;W%O#3RT zveoph*T`4|ZJZ?jzN;H{=Q4HBqE$e@nZNw`n0MyO_@b-ZqlSCF|KnDmF?_*_N{b17 zvJPQ0BDl3YYGPEdh+sj5cHUw`iw%8}$=V}Gy=X(G!-zJ`62BfB(jn6@F)Ubt`g}1Y zI1q}fV6`ekfekxS3Cq=6W*mI#63XTK6E5490ERIcd`qHy=c`g$uxuYkvI+ zFnVX~lm^bfNSe8U^M6ET;QYy?nOZmi6f(?iz5u~VRxtkZB(m!SdOYDO91+ye0b_%I zpvbh+(N1ZBpMLr0g3KlXcp~x30f}RbDr1BL)I(xZFxiibB@vF`YT%ZZ4YQ#Bn_88b zQ_906f*|`3b<4{!|4r^mFo%*bgRDc|)!b3yBgDVHmo~V(T)?&;wl${s z|4opDFMjP00j)^V8BnO<)wxHj|?3OgXbG0&CS>CxmCC2xPHsTt{rkF zg+fIQV7tN5{bB7&;Sq{iS^DO?#N=$E?p*Zup@0N-?_{@rADx@ma8wZr6m zon7s<#pG;?=)BP|JD*#?L{-z-WClTri!4ge0%$ls5-d{@B8|K=WoXW`SP;hfC@<#Z zHY z2ZHA4c0yAmm@;@#4@c<6Mbi{6aMm&*RHAQFL30FkGmi?9Cs|!LCKQ7LYaJ7mv}_kr zLZig39vm(O-7_v6@24x?cC-iIUQHU zC=Ve_{X%7`bTeZv0stu}S^_&o@(^-040)1#U_NMsunL-dJ!7G?IC)6AxUV016uCO4 z;%s5KV`xLMb^&#{zKOEH9uOK@012cDc@&j8raA_r!WW?i48MkP-}!7KfMGPEQXwTY zjXI{*BqIYeMFMIyb&I}>y@I&3e?oPwZ&v>MLQ~qW@6D?7&C4yW^8J^@oMUm9=*&SR z7G97<&l{{^8(y~VVYwgR|K1~g9(7fd{q^KY{k2Q}@$dc10pw<4sAS^o{CAV|FE3Ee zoRn=pJp$OSPsw)QeJ;B&XhC>yY2~8J1~7(KqIxq=!U(hdN9L{hFVKiV%u4>=Kx+y9-7!ePijh1&FetH$H4ir<|Bm)9T1^g`*E7J@k8spcm`p?jp@@ zy9e>;fYwNJN>-d5mS4o0aRP3Ds0by#**spdSbj#wbZ+rXlmrI2O^cHyg#nUx9=zTh zAK=ubfJ3k0L;(;01*G( zuulJ{Rj<^y>^4{t{P6341ZEHD#qe8j)XX&pWxGo2(`p?X(z@h{Y!LUtL=_!24Sqgi z6U{kfRDaPxUG~wjy7YAJ;Eo}Cl&#p^a6DXx&nrhV@o_@>#DxnQQnH$Tmo0hI-|^VQ z_l8RdOn>6eeQ&Vw{XBYRSsKEWTfmbC%X&B*rwuDxAe?q>P2(u9WFb z=%}d@AoK`@Ed8`_2yWjNMs26hvbo z>u1IT7Qq-K2%)to!NvYjWd)EDb9`x**mO94Y*BcPKC><9_li0RHiM-kfi7gRMlhr0 zr}P{t5)<~?A=~ZDG86(mR#=UOBbL(@Mc^aCKtKF8!AXiG2AB}Si_{xt+J2Dt?tQT7 z!$B~&wtpi^U9GXww@DBnnLi>V_Rx?Y%e5W(V41(<&{zX*b8V?w$tQOpG zJV=2du{z9;c-LbB+JcAn; zQm>@jI|pi}YXzEXr*FbsH=p&b!>_UHDrTs4A>!A8k$0~fT+$Gh-hc~=FOL0 zt`Gi-K0r%Um-^@_4c;TMRNo-imX!@}X%VX>UP-tZbvfj8#BGn& z{=u*9Mdj{8Z^pYm?}C@aBA?DL17-}QP|l7d@TOUvMoSUqzf(ilPA<$bl3p%1H4V9+ z933CB$8xh*APRvhA8Uj{mA{)Rrk7+a3p=`*pUlrtnYC&MnrmtKBDdNwu15$L`ufa& z(vg(5Hf}DQp?mZ>;gN*X@jVk4)T$#VrP69OGaVVl37k1KbELif(8Pv{mI406Mf9ct zAgVsGI%T%z;2|4bte55+)o4O?60IUpk*uT&Fi7)DXX?;J28AR4O(-RfUwPP~apD$l z+tT#P;AL6rz!nx;uDq4UUqIPP_|~sZ=p5k6l?o zZgT(HgYS$9wsE1aQe&;AbCvv3X@gRPXwh^cR8#)um`je?v?Tw7FTfIz-cE&S&im0? zDcF1=2OL`YjbQ|a_qes-A<9CK6GmcS#iS`xKvA0|GUJZ08E;Y6yzug1FS6))i^nLN zL)Z{3TC4hlKNOe3>@`?7wQD1AcR>=Y*V^cqXg9S(V{uwcj#!hQ*$z_ z2mTd9)ppNO{jBe6W(YhCHq0Lp>Srt}a$~cW0}ns0oVHGt0SU!E5z}JF)jC+Tn9D5> z6TaQ(j;tFM44J~c`j8}^?BBOL17o+0v86?Q?%upO(TNMj_PjAkeI||^d@`g-bIzXM zaxc0abc1%^p#ND#ok>Hr1){3vo^SvF0R@3tnfQ<{y-7QNF6z)Q0t;@B1x@#_5*X!q&b$_gyr?!PUtz34;Y&I;i zXg|*`t6OAFPP(tvTspT{wvJVsmYiSIG&0dtKTUOuEsjF2m^)&1T0MDIYh0mQ0XA%1 zMW^ULrG>6cw;H^jTRsqYeV4YkZI@{_QMz&p?pj@~LM&HSaxa~&M>Z`r;?(qo7NNm< ze?oFYzH8X9Pl5fKb@vZoTN|XhPZ>YQIdRfxIve76J8yA%mRWEgBo6K(^D%&CVO&A+ zU24*3IVs=$Zcnjr?uMI2sF-Q03gM#X2&dLrUo>es2ORj7)IXE2mB9V1+dgPk>zYqY zFYch41ZxV5;5g3OXdbyi`%&rBJI+rgpUDz3PM$R>+ovci9D4W$rwka;xdbu<@a&_Fn zw@EJ7+TAoocfQ}R*nM7*QbnX6wh3`Y)yxSf>>#{&Z>Pu4UWBpDWoD4DX(Bob&KwC1 zA7+BXX)>w%s=M_-@62pEU8T&u-Awv; z&EV#2+Wz^CRnXM(<-~u-T(_&*k|jIiW7^Y;acfv(^4>E{rqbEGaveMk4t`65`>~O^ zW)bcCCG3mHuL0W)`*|O;V4Yvbb&Jd@xE+E>vV60D=n!#26!#E~;gW3x%KJFGt5J*0 zVNt+gCZc1&t`eT%v?-qRdC?>Bg}+w|9<=3-Ije8iiU{M>ZIS`kQEJ<2O_ol}+*qS( zey=)GBS#}H!t_h_KuXllPvF^C!An3+gCbMDDZnoije#`BK7hTRHXxFQPCf0pqfP;YB)Viz z)v2HQEj1yH0YK?#&pA!l;Jj>%bljIAV?B`(GZ4^bw+BIP`%mc6s(BpLgd3y%3KoLg zg7~ufh!OGls8|4+;8F%xfqJ_h#)ge8Is*+G=7@w}c-X1g$J5uBb0?_>lsWITNIUW` za}2KsX}jth&h)Mc%Rg>KR!f8-nz$>Dfk8hn?nhJz(!yOsGW!7GiDY}IEE^W;vhY8R zoeN44rJr|DsUkjs1!l&wn@FBln{0M#wN|Z8JF#MHFI(}4S+ExyfiFMF58q1}66uW2 z{XG&wWIizkPR_hB1xd0tr@y4g!vYeGTomdsBf!Q1VzcdPZnf`Wcv=R*R)npj8>qVQ zur>rQtX(P_7CX{Oi+&QD8AKVGbAcsU*3~IdttQGu!f)5qA(UO@2&DXuo+xg**@TDl zscx=DsU_cF@Fc&jAgfK@?<$7Iyy~x%$~9oR)JER|JMJUyWB+vN9U5rG_ISq|U4pdy z0Jivv{C-!ui7Q5@SduV(KA$>1NP)E)X({jFD`0)z&~k-lf&$%_JbXGBUvZ+NLc>Wi~3;pp*_d<;4E2mkGa#1c|n(=>Qsh|w)8S!=m`UV{>3<7eabkww6^iW zlNE2~HInQGPyp$$)GDrbBUJw9@jasDQbNSx*kGtyRPPfC9kxrMX%g%+drt8HjbdUR zl}=G~MMdCP>ds+@WVk8kQMj1F>g_OvJgck4LLZXOBAc}yP# z2h#o{RbH1o+zI3eG&TEquPcsfXg&RWkEG4N(o>=w0*{{*h=ug ziDy0Ao;aDSX>Bz)YLQW^#N5T=aUBJ5RrtG05Udm$N5we+WDzhVFtCC7c8n{Bonz3U z&3#_M_+dkfTgzp%$qNlBHqByK_D=dUEbu3vqU}}}8GMI@a57MQ<(C3=>HQg0xkGz` zDFxY@HFKuz!gYGhl&q6!?!W+2;M#8`949YR=xL7J(+Tngx)75Gx9vOup8mUEIug;yp4(3q#}pHVKd60#4#lR<;nHHk-;)`PUeTehw3D}oN5s){8CZUXRL}T|YqKW{biNwSd>I|Iy zg8Th3X5s0(s3}R9#9o6SXND!y<^f6~GUcdI5wfG_nRntSljWVY-Rj2JUa92N*u)T> zScrn<#=>}Brike9m#YA-k!j?sK`+9lxcrnpF`(+yi(!Xrj-2RoF+>Si8itJY1_vO4 z=b#`eNMj#{13f{()FF%@1r4lt#0X3!E8xw3FxM+ChZ7LhD8M9 zQ$GPOZhX#l;l7iYsy{cm2;}~ZD&8|4Tx`!E=gF!%HA_jQ`42XDvYaY2LvhnBD~w>4SBv6- zb5MChvE)|@I!5Z&LzE$%ViLsSVQM46(z{EK52rz~OQTx!hAcuKjy~8ZWj)U@4dwuC zjCE9@Y>15B!G@~ZrL4}vcXkUNgWo`j1j&VXmt{dopSvl`M?-P8WF;Zc7phVnVo=uE zmw5T7B_o82=RQ^J8N@;oR#(qM8t}&$MXMjXB9r|ZcE?hsT`sI_*W<#@zc0*(DO)nu zsTALo=EH6;@sT+Ju>17}NtycWgRp5Y<5pLuQM+bs@}LALtAncTc9^tJ5s6Q1kmHN;WFp_Sg?(6=?T>DOsZBBSI0qwl5vd^U zogOzwX#i3LX(S8MD`^euKi(3i4grWGYw|-o=lmH)6@n;#Qq$l)?9LKgKz@?*ub-GHT)(;qQ^Wk_a9Q zig4wTd0g|UO{N0EE%V^X5Z7-#$ydlA9w{zt_4kw*II({J$Gv4G69x1~1K!2mP4SYZ zm40e7koV6ksvV$tK@KF_bIZ5I(iVu(gv&Q5RxB4W9VxZ#`jS9ZAQ)vMh%$YX22k>} zeYm3{xy+n+KCkyUVQt5(-cSR&FGX~)7@BXxjFeB3y2j{9Zvm%ze@cp|zgp`}k?oBN&=e_g$DFcN9yAT_l)Zoz0G*P~>JF8?001j+%*AVZy1TYrJ@^uc?ecMt1O1tKuxf;gZrNbKG*&lI$r7!3Qd&#B=C6iDfil?dk*_ z9td3SAOe?gSC+^3y#a9c^AsG;A<-7^fCWS!>=|8rH>4$b?=VtZh?5t9?~61M_Q4^d z+Cl}J$SP<-8H3+#*13+O{V=nokw-gWbWv*Oy>gN_a&U6^urpSLYQzu6n4f!fSI{^b z?*4Q>4=x->)BEukdeNpUUNhAvG8Z8%S;cz$O+@B6OFZ68OaS2SG9PB7VAh88;6@3+ zIe*ge^t(<&-7);cPDpbZvUO{cYWSirGFdjR|>JvGWKM)_C8n?1rncbdhYX(tdxfEU+KQ#ho;F#zW1 z^G&0o+Itxje+K1axZb>$4j@{n#F$Y_c#%U-EEg3jng+A$>|u1|$53uP3hi%MB`r)X zKP*F#4U^?Dlfu`A+V!0Vx%T(B%qXHQdj5jTJ8)Tu8~#*koE2Sp4C10va_8k*MPGa4-%O#UPEK;)0Ul*f~u=ulga^J-cQ1ls^bPms8`DI#)RvDTou zlV$7EDk;Dq`kI;Pp1L5c(hUg(RC^OcdXelcEb|!NiFcrggZ}HguLmjUV8v}#9f`Ry zlA62`4PCxTdv??)Q|Zce<$90PDPvcm7*=Mn*m6Q*3LLKt2KvvjcSsHNAnCq zd+KQwL8>{5jWUZM5VHae^7f7r7OZ%<%2|+>xrQJ{&Z3&h;-&z4+*u2=eHSrftiMZFP6e4Asok0mO450Vs5em z^S#>%$g@KPrCmg*XuQyD{Z)Ih%~y04;;QnN%pB7#>odBkXB@&56^{T`Njf$3nsqhw zt7|$yl*0gp2OdNQxdhxYd|iaEF%kyp-!fsF-E#%)Znv4>x|peZ?6ENu_3E_lDM0<7 z!Dsae0NApM9kCzPTU`t9mjHR|cyOzM(loz=bS1 zMg#L6{%7EAlIsw2VM&S4gt;fc`z#kmOID=cB~h$-3%F*%)7`a8mNspr2Viv>NiI1C z3!_7e)6x!di(g*{j(j&(=XeytKL9D_U%|g}sn~PHQ(l8rKY*E8)7+^)ULxS{X;>Io z2F2Y(2T3RO;O+OGcOsNo?nmJ7rt`_M?#IjKefi5?5QqNgh{%pJ6Gf7X7Xlu7nENb6 zkgr$<{q>DjJV|Hr&k?#2NoWv7l+JdT4vJ{dril~z+1>Q}p4=TUVi91c?6}*|i7w(d zM8dP5eW&kY-cfczvXW$XIre*KHDsR1<;-8TWID0rG$_K#{!zBU+1}(waU$Y=x+`s* zEiHN-=c=cMrnXSs1;|kcbM)v2iV?x&Ux2nj-0U3^+f7O&dQ6Jakzc)zgVJHa z>T}(6X!ILR5K-+LG`t-@6p2Y}>@i40ED4D@qXAT9yc2MO3W!|2*%i{`1@|JC>*5$- z1ejQj=p#^rEi1+iI2H}{h}1o@PDD;Sh;7_sbA$rkcN~I)t(O}GpFLV+&TI7w5WbdB z1j>e&^^peQHTDg&hu2_doWnO{AVVgXiZP&XMHt&dH=lf4s2UfqFW^GYD!C&l>(YLp zs+wrQFt@(~+8^7r$d*er_wQ$A7gm*u3)FR+WI$eUT`aLH*8Y$O(vDZ)!_!AMBh%q1 zV(3)H#c&*X1jp2!^_(7oh$<#xuK7tL;>c0q*F;q)Q4r3@>t_A?AnGNJW*cvn(bARc z#yPVz${EJG8@pVMDnBr%rC=%5G(sM@3@ zyDGm}$9aWa@vB@Qp1OV?g31d!goWVnIp3I2!mT57Exy>}ZjUcl>F~zrvAm4bDjj)k zX*~)oj%~Lo7wp8D!E`_rri_#QB8@iVnFu}q<76c)no)VfTeb5tf)x(AI-6TSil&H8 zJW6TmudI~csXec#Kza~Ytk`!%s+GA5nWa(I>$yAp)3^QBym?!eJhjzj0v;tJ z^YP%o7^>jfYbMUnjDeR&T;LeDbf2el-)+IR-nIf6lfPM zqd@CjgV2$wC=v3M)X3!&Fk_Xy5>Q#LZtK_(W3fv%eHZhFj8bCD_tmwFj#%pm&a!5Q z^9Km%RM~lZjb7$IAyov`2f*)~i7EI9VL)qW42)98nlPw?;$B;i)`41q1-%IDvefE{ zUI~RYlmJ0>L+xf#Bl7szk%8pk6-xPQ#Xj(M?BTA~er}<^=_z;T#A&)F!??{eDmz+CFH)+L7*?&FHdFkXzLd zTIn!^Qvx0A*++kvnWzq4tXz&ysIE{CUPuX)DWSD^CmPt@b7v}9e?s`nG@_!yW| z47jCmwo@dKCzAYCIpzrqdWT%Bn9({c`wRkH?2))l*#Xa`ZBsjvIJ9~3{7B|R5oTZl zYiegzXHHn(K3|nezK@M6?Y^M3ts-YnnPfRKi(GuGJ!;~p%qu5U#g4UfK~&LmPnbb5 zDKkl}t<<5KCgA3hC%!W?%*Wo4z_c9<5FE!Hd#*=HS!?9de(Vujq$+& zH1B{QdxAj0BHOc3@;)^-fevGBYTLt4wS;&u7y?z*NmWcGW8;ZUREk+#g@~QK7FB_&dBH;6#<+ z)~=H4y<|fo2JM8y{g1ZYSy10qmJjQag9^W|R5Ga!q6*?`2d(e0^@(DAczf3kfY@8E zL?-UR6wXp95|z(>_>D;fB=AbaO-Kn6@&`Zc0zO!6WG5}phf@0YZF?b}V9 z9KW(==Nj0iM1j?Qv1w(QI<=_ExvL8*<$3Jy-}4PikR5S*U?t9@U*FbbktwXvs>Jn^ zZ*mSsOSErGH45qGdlTdDW-%|JfaDseck9!nXtk`9rM;V$yirFVU@Hs@{kpK zYWgXsKLjr#v-f_OO}%bV;Z=Ek$7dJuzM1fiu)xdSvFB{dDUF1gYN#el)g36ohQ(pR zKECV}C~_G%BnYbTMl4EKQVY}MyyBgx(a+a;?cBd2uG~cc-adL9BT+plQ2MsL29l3x zHzc>89>$2Gn~^^ihQq|CI7(^`t1BCZc|}y$-<7HgAzHE&s0UnA+eS!d)sz)A5v8Un zEG}w_G6~N~VjEcqS+M%LBPrP%i5^8OZL4b}3YY3DEOfcN+gd@w^wJYvoVMYFkOyd+ z4@y-EI*D#)Z~f=Q%&4zb#Z$)Vyq=Cx4sYNPX;VH`#8Xl`R8A_VS_;fQ_D>*%jGjER zW_li(t3o`RN)w>eV}{A)r=zK>R!07^B^2;}7r=w)(T{)>rx?jE#QMnUAvEvts3D2z zXz37T5gl|DUf0%R%4`~^IiTyk6c6e1D`LN4P3v0D?FERHo$N|7$75UrnLU~#D{r&h zp0roch%iyKvz@&-j@6eO)u}Ih84eHh+7s~y%+Eh zHq2hstGlbbQCpBv8>G7rjGhtD5aI@Shr1R9cnF4`VU~M%yae@ICqq!&T|j>0D7~jw zM67VN+he1~kB0#K(%9|Y@tx{?xjouK)mnS2o7t%mfvx$tw%t=y-%pP92LLrpzYp^8 z?}0eZ09?+8&?;kqFDHCR&wO;TCCLx?&($dB&VWk(W07_Y+cZhlR+Vc50DOwqTWezv zS^|kVH8C^<Y3TU27G9eV}vP8RfB&L(u9W?G?Q^X8p&im5{j9n;hGn5 zTm;c##IIp4c#C6<8|R0tS1u{qx$d0|8p`b zO{T`cNx>*-$IIUv)zL4hxVF7f0ul(_=%Yltuc;otj_YuhB*zACV^CqB@LObsU*;g@ zyl^2kyd}0l^zH=LW{Y{faUJa~m5MT1m%sxuvzUULyi;;pF>!?uPG@4EBYeE6jbk2E z#O&a)NQ*^mj~fAMq$!bF%oqk%d-BC;l0ZQ=Z9^el>JfxRc7G9Diz4d8Tz0;_%{l38 zNu_yBqiIsKYOTR@EqXd~)TvrkVQfVD*@U2+b2d1#GMCoQe(hba4$d(hX&$^?TC?fP zo9lkb?V8}&vHqOP8f?*c6De|vj}SZ71mYw&QLE5saSl&Z0#%F>qFQdQjw!n+zJD~S z(XFpHmD}6It!Z-`)(3oSZvN?#p5xW;IhHx0f!kjZu8x*8-f(=cFRF_u!sMoW-;G4g z-kjBg%J0(x-wb2OR+##6CAFoaoyaw|34p}apo)Bgp>4znlnOni5B?oa- ze~V3LK^~VE?KdXGv^?fnj7w%i6Z{;_+j9Mdc}>v?f5xlDLd{KKF(s$E-eJhy%0JG# zo?fr#b$JJkAHVRuTaKz#;|!0OQ{`P0XzAoSY0CJ^s(n+*3JQiP@tK zBR6t`9^i(xv2?$MP(=WttZ=>YD5$T-x#ribO0zPK!$W!brLcO!h%ccx_OL$^9y!Sh z&M-X_>jDM$wpLfq;yzUrHGZn4%{%-)I_o}!-*ApZvP+wvCCfSYI%Jj zbko%&6++Kgr5l+&U7iq7)p|be_opWgpg370Ot3Pd>_s&)l$RKR#t{g(XR&f z!!8j@ZufOkZw8R?j$c+j=zpBKyH<@qgw%&y9gx!CSCm!WRD#CJ@O`lWn)KKV(|~M%uJ*K`NYj=+;qf z)Wf(LG*}@MGn74wZ4Ug&Ec!Y=%KBiQ7}x+2M{ofJDqGY)Vs={kNmimyejwETg3w$w z#ir|kj+4+(hJSeRc&PVK{-GP4ZnGk2)O)A5C=ZEfDn z>fT$?`h-whgjHF8Cu5+rK%1sV{Gf_qVW@}i?L%s&H?(Tsg!6)tx!6mpm0VeM5?(PuW-Ge&> zcZWdG0KtN5?j&pPleO6U-0#=-?>0|C&!*nDt439KjT&>*C^uS{pIhnIt{FQq%{toZ zD(BlW_0hV6E0zh3UsH}ZEiVq~CHb+YuJ&*FAsw&GJ}nvzVm!?w=rH8xFW%|0Pvs07 zp91kz7#~ZR#7mutw~D&W&wp|EilaBu-)m#2z-p6Bpe6zQRIo%3Ob_I01dy z_aJiSai7?VqBOTXE}2#M>N7fRS2KKETP|J4q)?jc%t$BgtL)rt=Q3A_y`zAn0KS{B zlosj2Xo)@_J*XPeVZqN(_VL5eaYE}&2hbIZo2VcwkBnPH^79(F94R0=o9Zw%meZUo z`Z$+Il09}bkPcbH(NEHCbzM>|J@`}yk4Ca7uINNMAr6BGo8@AnRg$bGK(rm1-IXHe zBW%G=aFcC~MtT^nmL;|TZj38QJh^gISDiv;uBB$ue(bV%o#e{k^9XHCMV(c1FoT&TdbdnOG&T9+91rJ%O|8*><5eO)jIOO|Gh@d9gXsG2&m-sUhBM$h0A=hD!e-p|3?9YAACMWEviZ2 zt>1m*bNf8j<3SUA#TPA0OiKM$qA%UXTinPD{^ut47k;$ToV06xeInJpK%>wDe+;$5 zdVSlr$92;>p1H>aDur=`M-SS=^JvGC)(7ATl$C3$jjyH->FiX%QI19@8qyVb(}Ny^ zO)b*AOiylzJ44R+?hw~1v)t7gz4a5GPLk2>8e=TGuSs@2E)PV3jD8ZqwHe8Ii20{J zh)UPmXw}WQ5?3_Yp}DqS<69N=db0ra*kb+K9{FCQ{_G$L#IB!m-|O{8_zP$J=zf)t z!%~z$nsysiFqf=!=9lr%rIb6W^cq#v;Zc}p&H>a9rOy+-A0vh7xoS$oQ<;x7#QbDS ztB<$}rbRx7mJsI;Jr;(g6ql>Nc6Cx+(~c`BLbe@wXA<31Flulg5RbX7o2O}3sZ5*d zCBg9)k3u3zf~)DO{@ZL)a+WqebJ+=``j4J_vQ?2*+NJld6O4#gBkV;hOrKi$9}R|9 zZoE{f*;@ze9xV}6#posw?*o@^e6;Py_cx3SEj?DV2>aO;Z7f?DMF%WaZ%X1mSI<&v zY%<<{-cd~S&^ME=?=wt8r(-qZ%!g(e<#(iqG&FtWxpLtRpTKDYc(WZ7IGK|0YB0&nxpAi0gHVWNqc16I_0|JQ z6V@zpC27?ExipLghq)3Ci@7p^N?kY#N`K{izR@$QK|r-UqmX#<7muXB6P9+!|9{;p z3{^--bhj=bjOq{5tx%4EJ7bQ)J*QBA0w`hp`v!k6DJ*8{1lpf+2p`rpi!5C;x|4d% z*IlFEgJ0ifWZV^a(p>j*&h8i2sXmtPUz2jEUrFq@oypG>3U98EjUOn^@+Qx%XbIo+ z>`fe>67r#U3>Y5duv`nxE=Z$h$TW!TDJ@RMS!?D}L?c#QG?JHcEy-V5YUWzTAd;_X zB<~>?bU6h?1W!wkq+FyR8y_Zde%j0-SYzsA=1EA^407=c{%JcRuUfkOu&R;8A@^{0 zUJwGPC(wk<%L3HX+LpUb9LXVR@aqFF?qC&r7v)gGOc>ttR6oA^26LUa8;Ca|%`$r) zxGaZ)$VxE^$J#TB%=&%|36$VjWg~KP1|X;8C*;N-1JrZgr`+ZY6fc32YtDdXs%bH! zAj@pZ8@z)+d^?7ZUd4<+Cs5KUwzZ|i14=*hg#_WDe+hmuVMMDO#vC`y@(Z1C&Gsr&#uQycxrvh$UC*c$>>yC5X%=a@ z&8md3-E~cYJL0^B9Ag4>W}>&}D3yu&X@TxCSfgC?0PfNwXZ$d!MTl;m?lK5;1rMP? zt%(H(SYuVfKWnh2pjzDDQc(F^weyyOukzuJQvNwuhe@x6p8_Y&j6ZPc=m1A zwQ0R)O!sr%$LGAi$sGfK-|jgtJ}9pl07U**#;50u+AlI9{<{=^W#k5gl6yeSj`593 ziGIEAZ$}E(#-;yd*As0`Lbg2gN}Fe&23qj_OCYLw$1>~vW{2nj;+&I z7l_q})m~fpZvrnF)Rbl4jUflK@@pyIFKd-l{Ic?zD!V(XJ`C6WUaIbLF@_Yh&Z28F z$KDbabaGp`yc}4B>Eh+gTqK9?M&DrU@w>jEcVv%Yn(5cPK{cgTp=e|vLqTT0E z%A}GQIoCT)ZoPNi!z$al)ND{G>v&d+V+0+0Kb{irC*+z9-LAs9y=$ zvEaQEq2YAHSKrE%e|aD^4=ZK$c;m6+ZZ%5K4gx&iYmZ#A3{Tod;?XWV`LuFuu0K5- z>8?MW9Zd{3b$Z_KHFb7%dRIL?!1LS}S$kVLWv-xX-r2h~!p?cmn0~H2UYworT+5GG zUfuTExTyr9%5BXKOyRJmU`Cc4zvjB;ohTA%a(J)Rdo|m|Dt&+^tBnsV-8+uLD?g|- zzG*qQZ!tj$c5O7dCD{EU&pI&;<7lycT-;rHoECADW_=K~iz^KuG6XR)H`nFV{H>%V zc$JVu=a;n){*DV)dS+bA%9RQ|9&Hs-szCQsUc0mytc4(Eim?LZqRj-sGJ{u|rHMIEc9B1(bhnr<{G?(f z*uC=|W&wX|zPb~2co!v^8p!_bxulhrz@S}}L4yoejKV0KK1EOMYZ*#_tuYs{+UhH7 zdsl9f zu(YsbY4uwK)0$sJD7P=(_v#5hhTpP5PpwSXVt+SV#%73jftnyFdubWo%QwP}wgf8b zvE4{v!je~)!1ro665u%+rH!8$&eZ8opwxUbF9<~fl$7J9LP#&99&-m1`$+r5R%M`ODmWLO$v7e?Z2dy z-31wP;w_9t^#cs5OIs@ul@o?pvxERSd4V3=hm+W!XLAzdvDuFeLFJLMR5sQss;*=D z_&vz%F6yuZFF`vA>P+;xOQt(p4qI-f&o-5ThjUM|rUfW8RqBJjDF=0cCQ`+mX#JQi z&v#D*^0FubM-|PD$M#kze~Ek!VcoIR9ufoZePqw-?IcGU9?!lhP;3kUtUi{YM82b6 z2}Xlorjv4(hL*%M#eD4gMo=p3F>N-gr|hhZFC>8&IqAb>u!xlt@V(T;&R=-Nr+^Iv zHONjX6qdAekTaen)Mz>3o;_t**iyQ-`TF}A!1`WJ-7x2K7Xb|&DpIiz^1S@5!NtWh?TYlB4hm0eNuGuA{x$=!Dt$C{W%qiQ)w^f^izo7qVfB1V? z1N{H6Km5P=2LCUZaMgkI#$(tJG$fFC!b9L zz9D4vXtl}=@bjzq>E~zESo| zWa)#`dQi`9V(P0{hoN~~XvBM0pNQaA5sBo^C>uw`&-8=^6)r^MBGk~ZA%xGslkzS% zPeIjT`arWD&r`=$NdV)pW_LrqWGxk!S4&WZCOSYAXTTr|w?PSknEWW2)w?U77|;P; z2ICNc+SNHa7;n76K)uzgFf zGq#ES&sQHDNhD1GNcuf+U|@Lv(E@*8?bo2989l>=;w84pFXGC#c7deifZ8hW^ub*q z|2q$N&5YWi6pNF_a23BHrIjC6g~lXb|0nC+^s`ZyjHVMWanvJRoXR;SB5lO2kPEViB$q^bbh)!}x1ep+AXZwDl9fzI3 zRm!&ih=3&?hVn)=b8G)?Zu|+&#TwC+V$QAUch$!)CdsG~#Hge8S6fU`3v^%h91R&q`Hw{sePs3j$siPEO9G$r870rP(y(G zh;tVX^9jy}YVQ_)-rc=?F$`7HaQV|vYSpOZDX{ky%PLLS`Pov&S+1TB5=V`N|52YH zvB#$qoSd6N-gw;~)xYF%t5%G{E$?jdD&~G3t0kr!c9!Lz{K{V+zhP2D$6Bv%q@4Sf zKIHIZJ1ufBiIh5_v(|z8gtTuFhu)<1x#^H5AklnMoDHi<2e4V^O0baN{jjxfmhx_|$SifQ1FW&v2S{6Li`ljo49C z8Gu_<`Q5^%)9PMK-~c$mmS38NHSCmUOnXyV|JKC7R_rY6i*@bV=l%gAeD;*}m{mfI zh80mtd}wt!Yc!*HSvJI4Gs<+RrSkYOe~V)yawJ3)E#8gpp6MZYx&S_a+rqbK5&ii+ z0{l0;!{zwjR1qmYcONQ$t8c;szlt7w&-@EP&AT7qysl;|jF2aD7?d?}`0Ld_pIs!d zhfzOxFt8xg|Mu*@SYu{|KZNOt9OM1wLgyo0QxZ)CZ?UEnll6OwTd=fTa{bS~`Pd|1 z_@#X$nBpPD!O6ZDd4+Vwuf!Gi*YeWAnn|ZM>V+yfXIAoE&uW*3RZQ@CbEhNe$f+F8 z^grzTx{)Hkj=y!Wb>QOnayw1eRYgU5eK=<7#gaz98(#!%5`WpfH{tbEH}RE#NDlk( z($p~tdrP%$$b(t0`1bB}%CT32r2mRY{-aBgFiJhN;Uj)b7yzRg%O`#r-O%3 zF31|IEH5WX@>8cqCDzuE+t`9k-tFPk-3FS~LnGnx6!0PlpWO#QkQJelKD1(v;AoA) z-KYNhBKb6ac4o^_-rzT)b-;jD-%|DO39oWzZKPn%X3z zqf_mu4>pY)Y0_g;NXBOu8*@M}mn9vo2J03tm#L?pgUaDU^=rnrb{rXPYtjqp+AGTV z$Mk6@1S6d0y>mvxJoLMV@iRM#&MCYYk;tEZ2dRg_- zk9C)=*xJ9}4x%Pn=#RbLEEP?sU+vhfq-0h(y$mE48AG&FmfEX>m~;kPb(v;T`vK@7 zAF%P@ZNbl&N$Ld#Z&ljJMq6$0lryt~&5Nby#k=QxC#>o%JThhG!mW_AB9%Q}pmK+D zW^3)9`gvmu@eRAIzifwfd4FrND=4IppyAGc&tMzUku0LT1 zQ4O~fn$gt5`ggDm19@>ij7eBUHaw&tnea1HW=@^*@voNck0V!A50`8G>VtXv4z*k> zgj%veR1^8~0k)RD#FT`pwzE~Fxqo2?UxOg?+G8jr z0|F06 z*B-jl*k-^Gkh$HbnaBJ*V(hZ$sPpwoRg*W4Md#9!`+e3c&9lR!_17NT=|{v(-s?|* z#iy>$Td(`ItBJjjp9NfO*sXM)hUmI>pR9g*3Z9*MPCpihDb`{*Huk?pf;SNx)+3PYgjvTtBwLFfce?`7)RA<9y$96zwl7}bp&dAZuS5V2} zU!b@z3E-^q@LWz^Oz+Di5~&Sf2}U7UYzaO<4mFj-VMI0yYd7jY z*|t3J9{#-VzRKFW9G8=I<)MZcE=EmxU7^JSi8?8s1%wplRUle`Pvjs9r{y(?VKnz; zf~=fn#{SU-o=;Dc&NkYq>$=r{ad*6S+c{Wv0+CI)9flcce3dy12bcbyddnaIj#MSf zF$<#@pu$#ns=(I3>McB|ZdmW@&#FIJI-^wsb$*W@Kcxg6i_lC#y@V1sT}ZaBMvHbK zk<2r1DY7R5hXZAV3rRv5K?^S+rGR(TGHVRKd##%6n=9d4#x07QF$7sTK#Tq^km_n! zS7UJM11=qPauq?1Ip(W3Fxav3{Xky5WL9bTU4D){B$e1JTxc)F8$%0rmBFsKk)S(Jx{sNRY4S(-LO9oD9*YjN|#uIzpCYd?jGG$%&WayTE zPfv7tbX-^hlQh~;HI<*F@u*M#$3c3yEWo z_-;3Hp3h`&OnZ+xq4lXG>p8^(wTIgg&$BXq?gVIm!DM|OK_xK9=)y*Dm#vt{G{T3e z$)tj?2w>oFs_Nagc86iIB8-$}tt3n3$W%x=KOkJIL-;HfqD7TdG85v9_);3ZNrJ|+FqpY_$`zo(Rl(*B zW7Nu2$CXQ{mx%TicEE{>VbVztr>T2)Vz&I&Sag(uQH9!8@z&4MXbxvdX-kOR()IP> ztR*2C+Jp_2!Ewur%4jyNu|NA(yU<7>CP74|MZGOqA|_EVAx0(w7nN&GVg32VRuJ{0HFK_+)TfCr zK!{387zdTJ<3c?7M{0e<>%bC0c!8K73{t4%6!`f`k|p#D48P@U%&mJmWSi9Fh8%CPPutxdcC-ZkK?Ki5O6pbPy z1Z1_Wa_ZnwEEn{6g>v*)&AFN>)c12%-6?7L#s$!`X9>XE%dZ8|54-!};Hjk7% zJY(q1k-`k9aEyU`kyu~YqTMA5;_MkO%&3ViXA_N3ht%hdZPjC>-v`KB(i5aR9@xdz zBc9)vN#Sz3m|7=P;w3~E*DI*(ZnV*~s7_dHAWZF2SBRri7}1`FWxQadt*?z{ms-_;zRd%B*j#FMkec7RIyw7$ zWKn`2lT}xDe5H&T3lGaUXh6l?{INNT>@4znI4*&VZ z85%}A)fdJJAs)!5eB{5tG?%ZPRd}d9hM{#KWLrS;#u$a9><#t74+{y|B>JMP=clqo zi5!So_svJ)jhP(vLCPCZqEY%{K3?G|g^$5T;x{k~V0a9Vm0P>r|L5KQuhZ_ z*LAg%d>GRNLd&`a0`-zA@nDO~RH?7bX3#$O!4imm3j@DOCW55K7461ToK{oX|2c$Y znc^Kmf5NTpEnI$$zVALLvS-)n)z0UAeoTzycJ(5(j{juC&N^teT>%aTM*bhOZe2TL z3wwsY>+kf>S1RIUq#zj)p7$fk**yl5l#_Rzip=<(ahXMD2_@2F5rl_?&2x& zigE=LE<06Up!_%#*O3+Z?!3$&FU}XmjHM`Mpf^v;gnD5Xdl^UiFz7cSuSQq;CO)sZ zOZ8FrVJz;<@>F5#>r_>@+@YorF|Yb1>_6u=XgJh>XUmW#NJ60K8Gl7}`b#i>H%k0V zFk_Msj2MB}ekTA(EiSWG6e`*9`mn(9_eHHfT1?JfHWaC{3aNJ(xtLU+ZHg`fe{y|A zg@nh{5`U8spMFnHxoxzV5a=AYY8DiGGTuupJyN9m8) znDUhjNsTwueKb4?^C_?*o-CPT-tI$gEqBxg`L<|?W0Xr0ML^Dj zUk;)sVOE@c!MN-fEiXVlo~l?wkKFUu8EkKLZz4HAn6L1(C06n@-+>5?)NH85G+%CM z=}4b=R9o4-F7`N-Lg0Hbx%^|S(E$J1GZWBP8ZIMTqX2`OqWglQej|Wv2+5$b!SS2WdAOpSZC~25T zrn(&F%;cSnd8&+2(VXdCz5RuG5z}u;``gc%9RFV~>9rPiE-bE90yC*FvQ`Wn!e%sY zy1jRfa#UkLG;zgh-;8bn>Lj+o*yrCOh|fT!H z3q4uDs;wgx9qz%uEBYyK8~>kOoO~0dHTX3c7#0Z_80NpbxPz&&r7^?r-;BSb!)VBW zVr=1bATN5OI5=PGOEvm)1wPDG$}GQ;;Jy$asqafcgNl(6svq%rwN~8=_oJ~F zP~HVszG%!(ArM}1kD9m5Fjcsm?--0Eh0sTO*~UQJuInLlf6y=kV?G$eB(j-grOoJw zIKYRS%VE0jjC`LMRLO|6Nzz3YMCS>f>ScL9BUkB1N7MrY6yp1+nOzW^L8%$k?ZJq+ zh#A+Vwu+C6_liD<1rUUh0n?7kW-;Rs36rh1V1NSK;QapWw(t=^vBY{J@w)m3+dfI= zCWYwcHcT{>fSW*b2|uqp+rPvK!A6SxoPTYx14s*&Qnht=yN*aCv9orHb zibVCx8kntog8Spvf;a!8(EZ^8u@3+3`$!YfhqA0rkIQ>vYlR7Njdecv%ZH_rla9Od zB1*W=V%^y={357E%a$&=NAco3*#@sTva#bi5MEJBy4ZFJATZ%VwG0Zwdb)!HWXx^@xKXqxr1_P-pF{G^$L&nGqCY7nz|pA$QdPkH*82 z-OWhtUY9623B8+I?d{ol*Ja|^ z>X~`fCvu2LVo06J?La!!4ka?C*y4#TM~W-KiB}fG?Gr;aabA`%+M9M(&E#mt69 z0$0!5lSmelL9(QF^Qy1lxFh&Yr<&C|rm;BTo2ATzQU!1{PGU+I$ZW}Gv9~3CZWvT~ zd6};jOiu(tx?ypIiq{^c11VuY#CPC^mD)j+TG*q1sY#18{33!3C8r$d0?kNegsdkZ zdGkY71#SYe4>j93%{qD~W*@Ow{JnCUfj4cUf=FGya{T9BQXBdTcaoSMYJ6tLHd#}T zDFSpRv6D9t476|I?wc*`VE{_dqa*^$QKhSJu}XAt1&Z`Z)I0C(rs>!8%2}jQ!`7#H zAK6J-sraJYEC9f_fsWv;_7%Vwd*9oUG78;1xoJuR3kuQ3 z35zWs16ogaI)RFeEEE%BT<#I*Go}PBEd_&47pqgsZM`&Ynv7sV89e`Rp#%fgk-?tX z-)4Gx<1k;r5UqiIaQ>ky3^GG&|5gG6D_%kglk8ybJhpmNrpA<7jisEu1^}mnnjZhU zR@kYC&6uo5Cg1{aJ|j&PbU(SLXl$=)y?SJvlxV3(^Ql37C1r&iEpRbj0>gj_gL~-U zB8YI^qV&;<#%va!c=c?+ZLX_^XIfT-O@%OL23kUjI5b*+lSwkbjsm#Ijhz<2^c9LW zqvxllVkPQk3=l_@^ddZ}>ntwDcwsC$;={~?xP?*q9ZJ;uo=bA(k(|%$%DHX#pEfK6 z6a??y5PUL)$e8v7Em51T7zGOV-Sh+qi@^KRF660KQgtMb?7or}0<7?d6}ZDqRACdq zZQHw*MH>|VV1v0!Uo>2&uUEj7Y7BQXOTDwvbn{hK9vl9ERrj&iT+n)7njR$ns~uK52sav@e(wXT3hEM<^>@a(T|=xFa?ZK-By!C>ZKY$g)0jJbuiT%p_1ms?aZhiucj|c1z(v$U+Z*2oFC<4D``)~Jw`$)O1gFz~v z?;K{UV9ko^>UMCGKGJHQkczh($NR&<`jR179k0Ijw0m`1co z@6E^10kzA>l+0KiKU5Fn2yq(01iRNK&ku(X{7MEBd( z3w_*ypVO@kRI_K5kmw&Z{7Wf+ZusBz{H>8kPSk|;0uWwrJZ^mLHnq-Jl^;eelA?0p zmPBg76O)iO98m+Bt#|Ae(l~s77y9e|Lu-4Ws5WC=k!f}bP#%X6kx%xu*Zm_9BCLO) zn;v7Tix9VQZBNX-uU``O><4;Tt_T|-Jm0!vX$*%}H35(`BF?EsW%$XV_Sk}QR@bq8 z{^ zaF(E9G$o|bR~CT_Pmer{i{RS(`eGx~Gx3vd_8IRTHxjf@@sgAg!`flzZ*_V#@7r9! z5(C=`7+vOVHWAWyuRcBwzm=dG_77Lb44c4v9eWd!GS-E@LoIT(Qv`2DN;NTSNLH8k z$yRycI>n1QJC$*69w@Hq4qeJC+7U$9GLGv7_mRIQnVBvoy60=HcAwHg{AZ>}Ak`%; zo&|t`JR{bi91icaZR)@+ud}E>G>{fH2R4-9-s7Vdn#R*!*e)(V+X;z!z3w+_{0wcu z^A{5X-G^&V43IRCK@$VenjJ9EY~c43&!BH(^Q^IEDy~`005CelHVJ9htE}c73F8l8 z9fi;hfCV2{$eD&D%wrcn9Vs7v0`EpCg+y}(=)9}ym8cC$uobn7J;^xVx#8yDrEC(F zRoQ4`a+A)}$wHe9l}OZy*cSyko`;|j=gS&fu|(|S@$jNfWSyllV`<56z!pw=Nhgym z8V-2W1_<2|1+l(o+JeKKbb$X@D@|?#j7tZ1(7S(pBJp1V;|g?`XoNM3KXbu+VmAZE zNoI9MEMT3(5((?u;|e5X4a?l(t~2C6sC&I5M)6``&wtQ(>iL4K;MF%F>?(IK@mk{A z`lPao(_Ha%5i)hK6bviZp`rH=C2Tn%IxOLURERt0=h+qMRd^TsTwAkf=1vPHuju|DrO zwDt(s+c-0&N3tDjZ)Sm`RV)v9ZJXo&5cnK`6eQk|ihx}k&=qJ}OpQVpUUxn1=eF;8Iw`Z2UTspGr75=??VX#OiuL9XQr`=_f{hz~!0-@Hb zG3Y(=4b+RC0}KC84>Gj2`@M-wBxsK12fzqiPyWFl(;-YnF@V}-M9(*7G^Ew|qr$vu zSwd&DVWS>-qpj@n|E`3-lEuup2dosFG%aC1ieV3@cjCFqp_q`eE%s#m9%h@*~!!dvDa zeOiVw!U-{JmG9#z4tX;Uhiwk`-e)%1R*%9QJs>*GPWd_~&$c9XPDg@0xg7JKs+zXF zj>>g~hcY7+PS^H3N&+Xk5tyd$&~eS8{WLG7L}tr`xJ5=*$4WxwD!z47w`9)Z4K+Lh z{)zj zFZN}93I4ka-t*2v|32z{*+6>@{RaQT5AP-ZGK%;g{4mHP z@V~_rf64GNT=pM^w;I`$-WO5+CCmS{IbJ$;{UHicd`a}e&Ff{EUV13~p@LC>Ia zN$^s2{X+n-{X4;bQ)FLqy;KMPaJ{qphjRE5_)=^71LU&*+X(nC9qJ|e<%szQ?cw-0 b^uNbXc_}E6T@hqi1pTalBKV^?KY#i^pmZeA literal 0 HcmV?d00001 diff --git a/טופס דיווח ראשוני.docx b/טופס דיווח ראשוני.docx new file mode 100644 index 0000000000000000000000000000000000000000..422a15cb2969c6b7a21d750bfc60584ac811eec1 GIT binary patch literal 38446 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%0A9T^4`;fIWpjM7j8 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 literal 0 HcmV?d00001