From 40fd118a755f663383bf02dabf53ad11473a516a Mon Sep 17 00:00:00 2001 From: edwh Date: Thu, 16 Apr 2026 16:37:05 +0100 Subject: [PATCH 1/5] Add living specifications design doc Design for a system that embeds user story annotations in PHP code, extracts them into a browsable VitePress site with feature and persona navigation, and links through to test coverage. Co-Authored-By: Claude Opus 4.6 --- .../specs/2026-04-16-living-specs-design.md | 423 ++++++++++++++++++ 1 file changed, 423 insertions(+) create mode 100644 docs/superpowers/specs/2026-04-16-living-specs-design.md diff --git a/docs/superpowers/specs/2026-04-16-living-specs-design.md b/docs/superpowers/specs/2026-04-16-living-specs-design.md new file mode 100644 index 0000000000..4bc49f395f --- /dev/null +++ b/docs/superpowers/specs/2026-04-16-living-specs-design.md @@ -0,0 +1,423 @@ +# Living Specifications: Browsable Feature & Persona Documentation + +## Problem + +Restarters.net has extensive functionality across events, groups, devices, users, and networks, with multiple personas (Host, Admin, Restarter, NetworkCoordinator). There is no single place where a human can understand what the system does, organised by feature area or by persona. Test suites verify behaviour but don't communicate it at a readable level. User stories exist in Jira but aren't connected to the code. CLAUDE.md describes conventions, not capabilities. + +## Solution + +Embed structured annotations in PHP code that declare what each method enables and for whom. Extract these into a manifest. Use Claude to generate human-readable narrative summaries per feature area. Build a browsable static site with dual navigation (by feature, by persona) and deploy to GitHub Pages. + +## Design Decisions + +- **Source of truth:** PHP 8 attributes in the code, not external files or Jira +- **Maintenance model:** Claude updates annotations automatically during development +- **Narrative layer:** AI-generated markdown files, committed to the repo, human-editable +- **Browsable output:** VitePress static site on GitHub Pages, built via GitHub Actions +- **Jira integration:** None. This is a standalone documentation system +- **Validation:** CI warnings for drift, with option to tighten to hard-fail later +- **Test linking:** Tests reference user stories via `@story:ClassName::method` annotations; coverage shown on the site + +## 1. PHP Attributes + +Three attribute classes in `app/Attributes/`: + +### Feature + +Marks a class as belonging to a feature area. + +```php +#[Attribute(Attribute::TARGET_CLASS)] +class Feature +{ + public function __construct( + public string $name, + public string $description = '', + ) {} +} +``` + +Usage: + +```php +#[Feature('Events', description: 'Community repair event management')] +class PartyController extends Controller { ... } +``` + +### UserStory + +Marks a method with what it enables and for which persona. + +```php +#[Attribute(Attribute::TARGET_METHOD)] +class UserStory +{ + public function __construct( + public string $story, + public string $persona, + public string $feature = '', + ) {} +} +``` + +Usage: + +```php +#[UserStory( + 'As a Host, I can create a new repair event for my group', + persona: 'Host', + feature: 'Events' +)] +public function create(Request $request) { ... } +``` + +The `feature` parameter is optional — if omitted, the feature is inherited from the class-level `#[Feature]` attribute. + +### NoStory + +Explicitly marks a method as intentionally unannotated. + +```php +#[Attribute(Attribute::TARGET_METHOD)] +class NoStory +{ + public function __construct( + public string $reason = '', + ) {} +} +``` + +Usage: + +```php +#[NoStory(reason: 'Internal middleware hook')] +public function middleware() { ... } +``` + +## 2. Extraction Pipeline + +An artisan command `php artisan specs:extract` that: + +1. Scans all PHP files under `app/` using `nikic/php-parser` to find `#[Feature]` and `#[UserStory]` attributes +2. Builds a structured manifest +3. Scans test files under `tests/` and `resources/js/` for `@story:` references and matches them to stories +4. Writes `docs/specs/manifest.json` + +### Manifest Format + +```json +{ + "generatedAt": "2026-04-16T12:00:00Z", + "features": { + "Events": { + "description": "Community repair event management", + "sources": ["app/Http/Controllers/PartyController.php"], + "stories": [ + { + "story": "As a Host, I can create a new repair event for my group", + "persona": "Host", + "method": "PartyController::create", + "file": "app/Http/Controllers/PartyController.php", + "tests": [ + { + "file": "tests/Feature/EventTest.php", + "test": "test_host_can_create_event" + }, + { + "file": "tests/playwright/events.spec.ts", + "test": "Host can create event" + } + ] + } + ], + "storyCount": 16, + "personas": ["Host", "Admin", "Restarter"] + } + }, + "personas": { + "Host": { + "features": ["Events", "Groups"], + "storyCount": 24 + }, + "Admin": { + "features": ["Events", "Groups", "Users", "Networks"], + "storyCount": 31 + } + }, + "coverage": { + "annotatedMethods": 87, + "noStoryMethods": 12, + "unannotatedMethods": 23 + } +} +``` + +The manifest is deterministic (same code always produces the same output) and committed to the repo. The site build only needs Node.js, not PHP. + +### Static parsing, not reflection + +The command uses `nikic/php-parser` for static analysis rather than PHP reflection. This means it does not need to boot the Laravel application, load the database, or resolve dependencies. It is fast and safe to run in CI. + +## 3. AI-Generated Narratives + +Narrative summary files at `docs/specs/narratives/{feature}.md`. These are the "how Events work" layer that makes the documentation readable. + +### Format + +```markdown + +# Events + +Community repair events are the core activity of Restarters. Groups +organise events where volunteers repair broken items brought in by +the public. + +## What Hosts can do + +Hosts manage the full lifecycle of events for their groups -- creating +events with a date, time and location, editing details, inviting +volunteers, and recording the devices brought for repair. + +## What Admins can do + +Admins have oversight across all events -- they can moderate, delete, +or reassign events across any group. + +## What Restarters can do + +Restarters can browse upcoming events, RSVP to attend, and log the +devices they've repaired. +``` + +### Maintenance rules + +- Claude generates these during development, committed alongside code changes +- Organised by feature, with persona subsections +- Human-written prose is preserved -- Claude adds/removes persona sections and updates story counts but does not rewrite paragraphs a human has edited +- The `specs:hash` comment tracks the story count for staleness detection + +## 4. Static Site + +A VitePress site in `specs-site/` that consumes `manifest.json` and narrative markdown files. + +### Navigation + +Two switchable views: + +**Feature view** (default): + +``` +Events + Overview (narrative) + Host stories (8) + Admin stories (3) + Restarter stories (5) +Groups + Overview (narrative) + Host stories (12) + NetworkCoordinator stories (6) +``` + +**Persona view** (toggle): + +``` +Host + Events (8 stories) + Groups (12 stories) + Devices (4 stories) +Admin + Events (3 stories) + Groups (5 stories) + Users (7 stories) +``` + +### Story display + +Each user story entry shows: +- The story text +- The method it's attached to (e.g., `PartyController::create`) +- A link to the source file on GitHub +- Test coverage indicator: **Covered** (at least one test), **Multi-layer** (PHPUnit + Playwright), or **Uncovered** + +Feature and persona overview pages show aggregate coverage (e.g., "Events: 14/16 stories covered (87%)"). + +### Build process + +A prebuild script reads `manifest.json` and narratives, generates VitePress-compatible markdown pages for each feature and persona view, then VitePress builds the HTML. + +### File structure + +``` +specs-site/ + .vitepress/ + config.ts + theme/ + index.md + features/ + personas/ + package.json +``` + +## 5. Deployment + +### Quick preview (development / demos) + +For showing the site to someone quickly during development: + +```bash +cd specs-site +npm run build +npx surge dist/ my-restarters-specs.surge.sh +``` + +Surge gives a public URL instantly with no setup. Use this for feature branch previews and demos. + +### Production (GitHub Pages) + +A workflow at `.github/workflows/specs-site.yml`: + +1. Triggers on push to `develop` +2. Checks out the repo +3. Installs Node.js dependencies for `specs-site/` +4. Runs the prebuild script (generates pages from manifest + narratives) +5. Builds VitePress +6. Deploys to GitHub Pages + +No PHP needed in CI -- the manifest is already committed. + +## 6. CI Validation + +A separate CI step (can be in the same workflow or the existing test workflow): + +### Manifest drift detection + +Runs `php artisan specs:extract` and compares output against committed `manifest.json`. Fails if they differ. + +### Orphan detection (warnings) + +- Public methods on `#[Feature]` classes that have neither `#[UserStory]` nor `#[NoStory]` -- warns "PartyController::update has no story" +- Narrative files referencing personas or story counts that don't match the manifest + +### Narrative staleness (warnings) + +Compares the `specs:hash` comment in each narrative file against the current manifest. If story count has changed, warns "Events narrative may be stale (was 16 stories, now 18)." + +### PR comment + +When annotations change, the action posts a PR comment: "This PR modifies 3 user stories in Events. [View changes →]" + +### Test coverage warnings + +Stories with no `@story:` reference in any test file generate a warning: "UserStory PartyController::create has no test coverage." Not a hard failure -- some stories may be tested indirectly. + +### Future tightening + +The orphan detection can be promoted from warning to hard-fail for controller classes specifically. This is a configuration flag in the extraction command, not a code change. + +## 7. Test Coverage Linking + +Tests reference user stories via a `@story:` annotation pointing to the annotated method. + +### PHPUnit + +```php +/** + * @story PartyController::create + */ +public function test_host_can_create_event(): void +{ + // ... +} +``` + +### Playwright + +```js +test('Host can create event @story:PartyController::create', async ({ page }) => { + // ... +}); +``` + +### Jest + +```js +test('Host can create event @story:PartyController::create', () => { + // ... +}); +``` + +### How it works + +The `specs:extract` command scans test files for `@story:ClassName::method` patterns and matches them to user stories in the manifest. Each story gains a `tests` array listing the test file and test name. + +The browsable site shows coverage at every level: +- Per story: covered / uncovered / multi-layer indicator +- Per feature: "Events: 14/16 stories covered (87%)" +- Per persona: "Host: 20/24 stories covered (83%)" + +## 8. CLAUDE.md Integration + +Add to the project CLAUDE.md: + +```markdown +## Living Specifications + +When modifying PHP controller or service methods: +- Maintain `#[UserStory]` and `#[Feature]` attributes (in `app/Attributes/`) +- Add `#[UserStory]` to new public methods that represent user-facing functionality +- Add `#[NoStory]` to methods that intentionally have no user story +- Update the story text if you change what a method does +- When adding or modifying tests, include `@story:ClassName::method` references +- Run `php artisan specs:extract` after annotation changes and commit the updated manifest +- Update the narrative in `docs/specs/narratives/` if feature coverage has changed +- Preserve human-written prose in narratives -- update structure and counts, not wording +``` + +## 9. File Structure Summary + +``` +app/ + Attributes/ + Feature.php + UserStory.php + NoStory.php + Console/Commands/ + SpecsExtract.php + +docs/ + specs/ + manifest.json + narratives/ + events.md + groups.md + devices.md + users.md + networks.md + +specs-site/ + .vitepress/ + config.ts + theme/ + index.md + features/ + personas/ + package.json + +.github/ + workflows/ + specs-site.yml +``` + +## Personas (known) + +From the existing codebase: +- **Admin** -- full platform oversight +- **Host** -- manages events and groups +- **Restarter** -- attends events, logs repairs +- **NetworkCoordinator** -- regional oversight across groups in a network + +Additional personas will emerge naturally from the annotations. + +## Open Questions + +None -- all design decisions have been made. Ready for implementation planning. From 62e8ee3341b4c2cbf0656b82b14245e63112e11a Mon Sep 17 00:00:00 2001 From: edwh Date: Thu, 16 Apr 2026 17:08:00 +0100 Subject: [PATCH 2/5] Add living specifications system with PHP attributes and VitePress site Introduces a code-first living documentation system that embeds user stories directly in controller code via PHP 8 attributes (#[Feature], #[UserStory], #[NoStory]), extracts them into a JSON manifest, generates AI-written narrative summaries, and builds a browsable VitePress static site with dual navigation by feature and by persona. - 3 PHP attribute classes in app/Attributes/ - specs:extract artisan command using nikic/php-parser AST analysis - 168 user stories across 8 features and 6 personas annotated on 29 controllers - JSON manifest at docs/specs/manifest.json - 8 narrative markdown files in docs/specs/narratives/ - VitePress site in specs-site/ with prebuild page generation - GitHub Actions workflow for GitHub Pages deployment - Removes historical features/ directory (content folded into annotations) Co-Authored-By: Claude Opus 4.6 --- .github/workflows/specs-site.yml | 52 + CLAUDE.md | 12 + app/Attributes/Feature.php | 14 + app/Attributes/NoStory.php | 13 + app/Attributes/UserStory.php | 15 + app/Console/Commands/SpecsExtract.php | 443 ++++++ app/Http/Controllers/API/AlertController.php | 6 + app/Http/Controllers/API/DeviceController.php | 8 + .../Controllers/API/DiscourseController.php | 4 + app/Http/Controllers/API/EventController.php | 14 + app/Http/Controllers/API/GroupController.php | 25 + app/Http/Controllers/API/ItemController.php | 4 + .../Controllers/API/NetworkController.php | 12 + app/Http/Controllers/API/UserController.php | 6 + .../Controllers/API/UserGroupsController.php | 5 + app/Http/Controllers/AdminController.php | 7 + app/Http/Controllers/ApiController.php | 15 + .../Auth/ForgotPasswordController.php | 2 + app/Http/Controllers/Auth/LoginController.php | 5 + .../Auth/ResetPasswordController.php | 2 + app/Http/Controllers/BrandsController.php | 8 + .../Controllers/CalendarEventsController.php | 10 + app/Http/Controllers/CategoryController.php | 6 + app/Http/Controllers/DashboardController.php | 5 + app/Http/Controllers/DeviceController.php | 6 + app/Http/Controllers/ExportController.php | 8 + app/Http/Controllers/GroupController.php | 20 + app/Http/Controllers/GroupTagsController.php | 8 + app/Http/Controllers/HomeController.php | 4 + .../InformationAlertCookieController.php | 4 + app/Http/Controllers/LocaleController.php | 4 + app/Http/Controllers/NetworkController.php | 9 + app/Http/Controllers/OutboundController.php | 5 + app/Http/Controllers/PartyController.php | 28 + app/Http/Controllers/RoleController.php | 5 + app/Http/Controllers/SkillsController.php | 8 + app/Http/Controllers/UserController.php | 30 + docs/specs/manifest.json | 1390 +++++++++++++++++ docs/specs/narratives/administration.md | 19 + docs/specs/narratives/dashboard.md | 12 + docs/specs/narratives/devices.md | 20 + docs/specs/narratives/events.md | 28 + docs/specs/narratives/groups.md | 28 + docs/specs/narratives/networks.md | 20 + docs/specs/narratives/platform.md | 24 + docs/specs/narratives/users.md | 16 + features/01-Overview/1-Vision.feature | 15 - features/01-Overview/2-Goals.feature | 5 - features/01-Overview/3- Capabilities.feature | 31 - features/01-Overview/4-Glossary.feature | 110 -- features/01-Overview/5-Personas.feature | 4 - .../01-Features_Onboarding.feature | 28 - .../02-Register/01-SelectSkills.feature | 21 - .../02-Register/02-AboutRegister.feature | 31 - .../02-Register/03-EmailPreferences.feature | 16 - .../02-Register/04-DataConsent.feature | 16 - .../05-CompleteRegistration.feature | 18 - .../Registering-a-new-account.feature | 14 - .../03-SignIn.feature | 24 - .../04-ForgotPassword.feature | 29 - .../05-ResetPassword.feature | 21 - .../SSO/Login-to-Discourse.feature | 10 - .../SSO/Login-to-Wiki.feature | 14 - features/03-Dashboard/Dashboard.feature | 62 - .../DashboardFirstVisit_host.feature | 42 - .../DashboardFirstVisit_restarter.feature | 42 - features/03-Dashboard/Dashboard_host.feature | 44 - .../03-Dashboard/Dashboard_restarter.feature | 41 - features/03-Dashboard/Onboarding.feature | 24 - .../Volunteers_engagement.feature | 19 - features/04-Events/Create/AddAnEvent.feature | 62 - features/04-Events/Delete/DeleteEvent.feature | 98 -- .../Delete/DeleteFromWordPress.feature | 16 - .../Editing/AmendNumberOfVolunteers.feature | 45 - features/04-Events/Editing/EditEvent.feature | 48 - .../Editing/EventPermissions.feature | 20 - .../InvitationNotifications.feature | 31 - .../Invitations/InviteVolunteers.feature | 28 - .../invitation-email-not-on-platform.jpg | Bin 869607 -> 0 bytes features/04-Events/InvitedRestarters.feature | 14 - .../04-Events/Listings/ListUpcoming.feature | 17 - .../04-Events/Listings/ViewMyEvents.feature | 34 - .../ManageActivePastEvent_restarter.feature | 40 - .../04-Events/ManageActivePastEvents.feature | 48 - .../OnlineEvents/CreatingOnlineEvents.feature | 18 - .../FilteringOnlineEvents.feature | 4 - .../OnlineEvents/ViewingOnlineEvents.feature | 10 - features/04-Events/RecordVolunteer.feature | 28 - features/04-Events/RestartersAttended.feature | 15 - features/04-Events/Stats/EventsFilter.feature | 18 - features/04-Events/Stats/ShareStats.feature | 16 - .../04-Events/Stats/SocialMediaStats.feature | 23 - .../04-Events/UpcomingEvent_restarter.feature | 22 - .../FindAndFollowGroups/FollowGroup.feature | 0 .../GroupDescription.feature | 17 - .../ViewAllGroups(admin).feature | 39 - .../FindAndFollowGroups/ViewAllGroups.feature | 27 - .../ViewGroup_admin.feature | 41 - .../ViewGroup_host.feature | 37 - .../ViewGroup_restarter.feature | 41 - .../FindAndFollowGroups/YourGroups.feature | 32 - .../05-Groups/ManageGroup/AddAGroup.feature | 38 - .../ManageGroup/AllMembersofGroup.feature | 14 - .../05-Groups/ManageGroup/BecomeAHost.feature | 17 - .../05-Groups/ManageGroup/EditGroup.feature | 40 - .../ManageGroup/InviteUsertoGroup.feature | 20 - .../InviteVolunteers_ToGroup_ByLink.feature | 5 - .../PromoteGroupMemberToHost.feature | 53 - .../RemoveVolunteerFromGroup.feature | 36 - .../05-Groups/ManageGroup/StatsEmbed.feature | 17 - features/06-Fixometer/AddData.feature | 15 - features/06-Fixometer/EditDevice.feature | 22 - features/06-Fixometer/FilterItems.feature | 12 - features/06-Fixometer/ViewAllItems.feature | 22 - .../06-Fixometer/ViewGlobalImpact.feature | 28 - features/06-Fixometer/our-global-impact.png | Bin 36885 -> 0 bytes .../07-Reporting/BreakdownbyCountry.feature | 17 - features/07-Reporting/Impact Analysis.feature | 36 - features/07-Reporting/TimeVolunteered.feature | 21 - features/08-Admin/Brands/AddBrand.feature | 10 - features/08-Admin/Brands/EditBrand.feature | 10 - .../08-Admin/Brands/ViewAllBrands.feature | 17 - .../08-Admin/Categories/EditCategory.feature | 16 - .../Categories/ViewAllCategories.feature | 8 - .../08-Admin/GroupTags/AddNewGroupTag.feature | 12 - .../08-Admin/GroupTags/EditGroupTag.feature | 17 - .../GroupTags/ViewAllGroupTags.feature | 12 - features/08-Admin/Roles/EditRole.feature | 14 - features/08-Admin/Roles/ViewAllRoles.feature | 8 - features/08-Admin/Skills/AddNewSkill.feature | 17 - features/08-Admin/Skills/EditSkill.feature | 22 - .../08-Admin/Skills/ViewAllSkills.feature | 18 - features/08-Admin/Users/AddNewUser.feature | 29 - features/08-Admin/Users/DeleteUser.feature | 13 - features/08-Admin/Users/EditUser.feature | 39 - features/08-Admin/Users/EditUser_Acc.feature | 21 - .../08-Admin/Users/EditUser_Emailpref.feature | 19 - .../Users/RepairDirectoryAccess.feature | 31 - features/08-Admin/Users/ViewAllUsers.feature | 44 - features/08-Admin/Users/ViewProfile.feature | 15 - .../Emails.feature | 84 - .../NewGroupCreatedNearby.feature | 11 - .../Notifications.feature | 47 - .../images/email__new-group-near-you.png | Bin 41173 -> 0 bytes features/11-Navigation/AdminMenu.feature | 50 - features/11-Navigation/HostMenu.feature | 45 - features/11-Navigation/RestarterMenu.feature | 43 - features/12-Wordpress-Push/NewGroups.feature | 19 - .../Upcoming Parties.feature | 30 - features/13-Wiki/EditingWikiPage.feature | 14 - features/API/EventsApi.feature | 34 - features/API/GroupsApi.feature | 27 - features/API/NetworksApi.feature | 8 - .../Networks/AssociateGroupToNetwork.feature | 21 - ...ortedUsersToNetworkDiscussionGroup.feature | 34 - .../AddUsersToNetworkDiscussion.feature | 23 - features/Users/EditLanguageSetting.feature | 5 - features/Users/EditProfile.feature | 10 - features/Users/SyncLanguageSettings.feature | 5 - specs-site/.gitignore | 7 + specs-site/.vitepress/config.mts | 53 + specs-site/generate-pages.mjs | 242 +++ specs-site/package.json | 13 + 163 files changed, 2704 insertions(+), 2885 deletions(-) create mode 100644 .github/workflows/specs-site.yml create mode 100644 app/Attributes/Feature.php create mode 100644 app/Attributes/NoStory.php create mode 100644 app/Attributes/UserStory.php create mode 100644 app/Console/Commands/SpecsExtract.php create mode 100644 docs/specs/manifest.json create mode 100644 docs/specs/narratives/administration.md create mode 100644 docs/specs/narratives/dashboard.md create mode 100644 docs/specs/narratives/devices.md create mode 100644 docs/specs/narratives/events.md create mode 100644 docs/specs/narratives/groups.md create mode 100644 docs/specs/narratives/networks.md create mode 100644 docs/specs/narratives/platform.md create mode 100644 docs/specs/narratives/users.md delete mode 100644 features/01-Overview/1-Vision.feature delete mode 100644 features/01-Overview/2-Goals.feature delete mode 100644 features/01-Overview/3- Capabilities.feature delete mode 100644 features/01-Overview/4-Glossary.feature delete mode 100644 features/01-Overview/5-Personas.feature delete mode 100644 features/02-Login_Register_Onboarding/01-Features_Onboarding.feature delete mode 100644 features/02-Login_Register_Onboarding/02-Register/01-SelectSkills.feature delete mode 100644 features/02-Login_Register_Onboarding/02-Register/02-AboutRegister.feature delete mode 100644 features/02-Login_Register_Onboarding/02-Register/03-EmailPreferences.feature delete mode 100644 features/02-Login_Register_Onboarding/02-Register/04-DataConsent.feature delete mode 100644 features/02-Login_Register_Onboarding/02-Register/05-CompleteRegistration.feature delete mode 100644 features/02-Login_Register_Onboarding/02-Register/Registering-a-new-account.feature delete mode 100644 features/02-Login_Register_Onboarding/03-SignIn.feature delete mode 100644 features/02-Login_Register_Onboarding/04-ForgotPassword.feature delete mode 100644 features/02-Login_Register_Onboarding/05-ResetPassword.feature delete mode 100644 features/02-Login_Register_Onboarding/SSO/Login-to-Discourse.feature delete mode 100644 features/02-Login_Register_Onboarding/SSO/Login-to-Wiki.feature delete mode 100644 features/03-Dashboard/Dashboard.feature delete mode 100644 features/03-Dashboard/DashboardFirstVisit_host.feature delete mode 100644 features/03-Dashboard/DashboardFirstVisit_restarter.feature delete mode 100644 features/03-Dashboard/Dashboard_host.feature delete mode 100644 features/03-Dashboard/Dashboard_restarter.feature delete mode 100644 features/03-Dashboard/Onboarding.feature delete mode 100644 features/03-Dashboard/Volunteers_engagement.feature delete mode 100644 features/04-Events/Create/AddAnEvent.feature delete mode 100644 features/04-Events/Delete/DeleteEvent.feature delete mode 100644 features/04-Events/Delete/DeleteFromWordPress.feature delete mode 100644 features/04-Events/Editing/AmendNumberOfVolunteers.feature delete mode 100644 features/04-Events/Editing/EditEvent.feature delete mode 100644 features/04-Events/Editing/EventPermissions.feature delete mode 100644 features/04-Events/Invitations/InvitationNotifications.feature delete mode 100644 features/04-Events/Invitations/InviteVolunteers.feature delete mode 100644 features/04-Events/Invitations/images/invitation-email-not-on-platform.jpg delete mode 100644 features/04-Events/InvitedRestarters.feature delete mode 100644 features/04-Events/Listings/ListUpcoming.feature delete mode 100644 features/04-Events/Listings/ViewMyEvents.feature delete mode 100644 features/04-Events/ManageActivePastEvent_restarter.feature delete mode 100644 features/04-Events/ManageActivePastEvents.feature delete mode 100644 features/04-Events/OnlineEvents/CreatingOnlineEvents.feature delete mode 100644 features/04-Events/OnlineEvents/FilteringOnlineEvents.feature delete mode 100644 features/04-Events/OnlineEvents/ViewingOnlineEvents.feature delete mode 100644 features/04-Events/RecordVolunteer.feature delete mode 100644 features/04-Events/RestartersAttended.feature delete mode 100644 features/04-Events/Stats/EventsFilter.feature delete mode 100644 features/04-Events/Stats/ShareStats.feature delete mode 100644 features/04-Events/Stats/SocialMediaStats.feature delete mode 100644 features/04-Events/UpcomingEvent_restarter.feature delete mode 100644 features/05-Groups/FindAndFollowGroups/FollowGroup.feature delete mode 100644 features/05-Groups/FindAndFollowGroups/GroupDescription.feature delete mode 100644 features/05-Groups/FindAndFollowGroups/ViewAllGroups(admin).feature delete mode 100644 features/05-Groups/FindAndFollowGroups/ViewAllGroups.feature delete mode 100644 features/05-Groups/FindAndFollowGroups/ViewGroup_admin.feature delete mode 100644 features/05-Groups/FindAndFollowGroups/ViewGroup_host.feature delete mode 100644 features/05-Groups/FindAndFollowGroups/ViewGroup_restarter.feature delete mode 100644 features/05-Groups/FindAndFollowGroups/YourGroups.feature delete mode 100644 features/05-Groups/ManageGroup/AddAGroup.feature delete mode 100644 features/05-Groups/ManageGroup/AllMembersofGroup.feature delete mode 100644 features/05-Groups/ManageGroup/BecomeAHost.feature delete mode 100644 features/05-Groups/ManageGroup/EditGroup.feature delete mode 100644 features/05-Groups/ManageGroup/InviteUsertoGroup.feature delete mode 100644 features/05-Groups/ManageGroup/InviteVolunteers_ToGroup_ByLink.feature delete mode 100644 features/05-Groups/ManageGroup/PromoteGroupMemberToHost.feature delete mode 100644 features/05-Groups/ManageGroup/RemoveVolunteerFromGroup.feature delete mode 100644 features/05-Groups/ManageGroup/StatsEmbed.feature delete mode 100644 features/06-Fixometer/AddData.feature delete mode 100644 features/06-Fixometer/EditDevice.feature delete mode 100644 features/06-Fixometer/FilterItems.feature delete mode 100644 features/06-Fixometer/ViewAllItems.feature delete mode 100644 features/06-Fixometer/ViewGlobalImpact.feature delete mode 100644 features/06-Fixometer/our-global-impact.png delete mode 100644 features/07-Reporting/BreakdownbyCountry.feature delete mode 100644 features/07-Reporting/Impact Analysis.feature delete mode 100644 features/07-Reporting/TimeVolunteered.feature delete mode 100644 features/08-Admin/Brands/AddBrand.feature delete mode 100644 features/08-Admin/Brands/EditBrand.feature delete mode 100644 features/08-Admin/Brands/ViewAllBrands.feature delete mode 100644 features/08-Admin/Categories/EditCategory.feature delete mode 100644 features/08-Admin/Categories/ViewAllCategories.feature delete mode 100644 features/08-Admin/GroupTags/AddNewGroupTag.feature delete mode 100644 features/08-Admin/GroupTags/EditGroupTag.feature delete mode 100644 features/08-Admin/GroupTags/ViewAllGroupTags.feature delete mode 100644 features/08-Admin/Roles/EditRole.feature delete mode 100644 features/08-Admin/Roles/ViewAllRoles.feature delete mode 100644 features/08-Admin/Skills/AddNewSkill.feature delete mode 100644 features/08-Admin/Skills/EditSkill.feature delete mode 100644 features/08-Admin/Skills/ViewAllSkills.feature delete mode 100644 features/08-Admin/Users/AddNewUser.feature delete mode 100644 features/08-Admin/Users/DeleteUser.feature delete mode 100644 features/08-Admin/Users/EditUser.feature delete mode 100644 features/08-Admin/Users/EditUser_Acc.feature delete mode 100644 features/08-Admin/Users/EditUser_Emailpref.feature delete mode 100644 features/08-Admin/Users/RepairDirectoryAccess.feature delete mode 100644 features/08-Admin/Users/ViewAllUsers.feature delete mode 100644 features/08-Admin/Users/ViewProfile.feature delete mode 100644 features/09-Notifications-and-emails/Emails.feature delete mode 100644 features/09-Notifications-and-emails/NewGroupCreatedNearby.feature delete mode 100644 features/09-Notifications-and-emails/Notifications.feature delete mode 100644 features/09-Notifications-and-emails/images/email__new-group-near-you.png delete mode 100644 features/11-Navigation/AdminMenu.feature delete mode 100644 features/11-Navigation/HostMenu.feature delete mode 100644 features/11-Navigation/RestarterMenu.feature delete mode 100644 features/12-Wordpress-Push/NewGroups.feature delete mode 100644 features/12-Wordpress-Push/Upcoming Parties.feature delete mode 100644 features/13-Wiki/EditingWikiPage.feature delete mode 100644 features/API/EventsApi.feature delete mode 100644 features/API/GroupsApi.feature delete mode 100644 features/API/NetworksApi.feature delete mode 100644 features/Networks/AssociateGroupToNetwork.feature delete mode 100644 features/Networks/BulkImport/AddImportedUsersToNetworkDiscussionGroup.feature delete mode 100644 features/Networks/MessageUsers/AddUsersToNetworkDiscussion.feature delete mode 100644 features/Users/EditLanguageSetting.feature delete mode 100644 features/Users/EditProfile.feature delete mode 100644 features/Users/SyncLanguageSettings.feature create mode 100644 specs-site/.gitignore create mode 100644 specs-site/.vitepress/config.mts create mode 100644 specs-site/generate-pages.mjs create mode 100644 specs-site/package.json diff --git a/.github/workflows/specs-site.yml b/.github/workflows/specs-site.yml new file mode 100644 index 0000000000..95d469fd53 --- /dev/null +++ b/.github/workflows/specs-site.yml @@ -0,0 +1,52 @@ +name: Deploy Specs Site + +on: + push: + branches: [develop] + paths: + - 'docs/specs/**' + - 'specs-site/**' + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + working-directory: specs-site + run: npm ci + + - name: Build site + working-directory: specs-site + run: npm run build + + - uses: actions/upload-pages-artifact@v3 + with: + path: specs-site/.vitepress/dist + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/CLAUDE.md b/CLAUDE.md index 6d24af4689..ac7283fe6f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -146,5 +146,17 @@ npm test - Event-driven architecture with model observers - Only translate fr and fr-BE +## Living Specifications + +When modifying PHP controller or service methods: +- Maintain `#[UserStory]` and `#[Feature]` attributes (in `app/Attributes/`) +- Add `#[UserStory]` to new public methods that represent user-facing functionality +- Add `#[NoStory]` to methods that intentionally have no user story +- Update the story text if you change what a method does +- When adding or modifying tests, include `@story:ClassName::method` references +- Run `php artisan specs:extract` after annotation changes and commit the updated manifest +- Update the narrative in `docs/specs/narratives/` if feature coverage has changed +- Preserve human-written prose in narratives -- update structure and counts, not wording + ## Development Warnings - Don't try to test changes when you're running on Windows. \ No newline at end of file diff --git a/app/Attributes/Feature.php b/app/Attributes/Feature.php new file mode 100644 index 0000000000..cc782aaa55 --- /dev/null +++ b/app/Attributes/Feature.php @@ -0,0 +1,14 @@ +info('Scanning for specifications...'); + + $features = []; + $this->scanPhpFiles($features); + $this->scanTestFiles($features); + + $personas = $this->buildPersonaIndex($features); + $coverage = $this->buildCoverageStats($features); + + $manifest = [ + 'generatedAt' => gmdate('Y-m-d\TH:i:s\Z'), + 'features' => $features, + 'personas' => $personas, + 'coverage' => $coverage, + ]; + + $outputPath = base_path('docs/specs/manifest.json'); + + if ($this->option('check')) { + return $this->checkManifest($manifest, $outputPath); + } + + if (! is_dir(dirname($outputPath))) { + mkdir(dirname($outputPath), 0755, true); + } + + // Write without generatedAt for deterministic output, then re-add for the file + $stableManifest = $manifest; + unset($stableManifest['generatedAt']); + $stableManifest = ['generatedAt' => $manifest['generatedAt']] + $stableManifest; + + file_put_contents($outputPath, json_encode($manifest, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"); + + $storyCount = array_sum(array_map(fn ($f) => $f['storyCount'], $features)); + $featureCount = count($features); + $personaCount = count($personas); + + $this->info("Extracted {$storyCount} stories across {$featureCount} features and {$personaCount} personas."); + $this->info("Manifest written to docs/specs/manifest.json"); + + $this->reportWarnings($features); + + return Command::SUCCESS; + } + + private function scanPhpFiles(array &$features): void + { + $parser = (new ParserFactory)->createForNewestSupportedVersion(); + $appPath = base_path('app'); + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($appPath, RecursiveDirectoryIterator::SKIP_DOTS) + ); + + foreach ($iterator as $file) { + if ($file->getExtension() !== 'php') { + continue; + } + + $code = file_get_contents($file->getPathname()); + $relativePath = str_replace(base_path() . '/', '', $file->getPathname()); + + try { + $ast = $parser->parse($code); + } catch (\Exception $e) { + $this->warn("Failed to parse {$relativePath}: {$e->getMessage()}"); + continue; + } + + if ($ast === null) { + continue; + } + + $this->extractFromAst($ast, $relativePath, $features); + } + + // Sort features alphabetically + ksort($features); + foreach ($features as &$feature) { + usort($feature['stories'], fn ($a, $b) => strcmp($a['persona'], $b['persona']) ?: strcmp($a['method'], $b['method'])); + sort($feature['personas']); + } + } + + private function extractFromAst(array $ast, string $filePath, array &$features): void + { + $traverser = new NodeTraverser(); + $visitor = new class extends NodeVisitorAbstract { + public ?string $namespace = null; + public ?string $className = null; + public ?array $classFeature = null; + public array $methods = []; + + public function enterNode(Node $node) + { + if ($node instanceof Node\Stmt\Namespace_) { + $this->namespace = $node->name ? $node->name->toString() : null; + } + + if ($node instanceof Node\Stmt\Class_) { + $this->className = $node->name ? $node->name->toString() : null; + $this->classFeature = $this->findFeatureAttribute($node); + } + + if ($node instanceof Node\Stmt\ClassMethod) { + $stories = $this->findUserStoryAttributes($node); + $noStory = $this->findNoStoryAttribute($node); + $isPublic = $node->isPublic(); + + $this->methods[] = [ + 'name' => $node->name->toString(), + 'stories' => $stories, + 'noStory' => $noStory, + 'isPublic' => $isPublic, + ]; + } + + return null; + } + + private function findFeatureAttribute(Node\Stmt\Class_ $node): ?array + { + foreach ($node->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attr) { + $name = $attr->name->toString(); + if ($name === 'Feature' || str_ends_with($name, '\\Feature')) { + $args = $this->parseAttributeArgs($attr); + return [ + 'name' => $args[0] ?? $args['name'] ?? '', + 'description' => $args['description'] ?? $args[1] ?? '', + ]; + } + } + } + return null; + } + + private function findUserStoryAttributes(Node\Stmt\ClassMethod $node): array + { + $stories = []; + foreach ($node->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attr) { + $name = $attr->name->toString(); + if ($name === 'UserStory' || str_ends_with($name, '\\UserStory')) { + $args = $this->parseAttributeArgs($attr); + $stories[] = [ + 'story' => $args[0] ?? $args['story'] ?? '', + 'persona' => $args['persona'] ?? $args[1] ?? '', + 'feature' => $args['feature'] ?? '', + ]; + } + } + } + return $stories; + } + + private function findNoStoryAttribute(Node\Stmt\ClassMethod $node): ?string + { + foreach ($node->attrGroups as $attrGroup) { + foreach ($attrGroup->attrs as $attr) { + $name = $attr->name->toString(); + if ($name === 'NoStory' || str_ends_with($name, '\\NoStory')) { + $args = $this->parseAttributeArgs($attr); + return $args['reason'] ?? $args[0] ?? ''; + } + } + } + return null; + } + + private function parseAttributeArgs(Node\Attribute $attr): array + { + $args = []; + $positional = 0; + foreach ($attr->args as $arg) { + $value = $this->resolveValue($arg->value); + if ($arg->name) { + $args[$arg->name->toString()] = $value; + } else { + $args[$positional++] = $value; + } + } + return $args; + } + + private function resolveValue(Node\Expr $expr): mixed + { + if ($expr instanceof Node\Scalar\String_) { + return $expr->value; + } + if ($expr instanceof Node\Scalar\LNumber) { + return $expr->value; + } + if ($expr instanceof Node\Expr\ConstFetch) { + $name = $expr->name->toString(); + return match (strtolower($name)) { + 'true' => true, + 'false' => false, + 'null' => null, + default => $name, + }; + } + return '(complex expression)'; + } + }; + + $traverser->addVisitor($visitor); + $traverser->traverse($ast); + + if ($visitor->className === null) { + return; + } + + $classFeature = $visitor->classFeature; + $shortClass = $visitor->className; + + foreach ($visitor->methods as $method) { + foreach ($method['stories'] as $story) { + $featureName = $story['feature'] ?: ($classFeature ? $classFeature['name'] : 'Uncategorised'); + $featureDesc = $classFeature ? $classFeature['description'] : ''; + + if (! isset($features[$featureName])) { + $features[$featureName] = [ + 'description' => $featureDesc, + 'sources' => [], + 'stories' => [], + 'storyCount' => 0, + 'personas' => [], + ]; + } + + if ($featureDesc && ! $features[$featureName]['description']) { + $features[$featureName]['description'] = $featureDesc; + } + + if (! in_array($filePath, $features[$featureName]['sources'])) { + $features[$featureName]['sources'][] = $filePath; + } + + $features[$featureName]['stories'][] = [ + 'story' => $story['story'], + 'persona' => $story['persona'], + 'method' => "{$shortClass}::{$method['name']}", + 'file' => $filePath, + 'tests' => [], + ]; + + if (! in_array($story['persona'], $features[$featureName]['personas'])) { + $features[$featureName]['personas'][] = $story['persona']; + } + + $features[$featureName]['storyCount'] = count($features[$featureName]['stories']); + } + } + } + + private function scanTestFiles(array &$features): void + { + $storyIndex = []; + foreach ($features as $featureName => &$feature) { + foreach ($feature['stories'] as $idx => &$story) { + $storyIndex[$story['method']] = [ + 'feature' => $featureName, + 'index' => $idx, + ]; + } + } + + $testDirs = [ + base_path('tests'), + ]; + + foreach ($testDirs as $dir) { + if (! is_dir($dir)) { + continue; + } + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS) + ); + + foreach ($iterator as $file) { + $ext = $file->getExtension(); + if (! in_array($ext, ['php', 'js', 'ts'])) { + continue; + } + + $content = file_get_contents($file->getPathname()); + $relativePath = str_replace(base_path() . '/', '', $file->getPathname()); + + preg_match_all('/@story:(\w+::\w+)/', $content, $matches, PREG_SET_ORDER); + + foreach ($matches as $match) { + $methodRef = $match[1]; + if (isset($storyIndex[$methodRef])) { + $ref = $storyIndex[$methodRef]; + $testName = $this->extractTestName($content, $match[0], $ext); + + $features[$ref['feature']]['stories'][$ref['index']]['tests'][] = [ + 'file' => $relativePath, + 'test' => $testName, + ]; + } + } + } + } + } + + private function extractTestName(string $content, string $storyRef, string $ext): string + { + $lines = explode("\n", $content); + foreach ($lines as $line) { + if (str_contains($line, $storyRef)) { + if ($ext === 'php') { + if (preg_match('/function\s+(\w+)/', $line, $m)) { + return $m[1]; + } + // Check previous lines for function declaration + $lineIdx = array_search($line, $lines); + for ($i = $lineIdx; $i >= max(0, $lineIdx - 5); $i--) { + if (preg_match('/function\s+(\w+)/', $lines[$i], $m)) { + return $m[1]; + } + } + } else { + if (preg_match("/(?:test|it)\s*\(\s*['\"](.+?)['\"]/", $line, $m)) { + return $m[1]; + } + } + } + } + return '(unknown test)'; + } + + private function buildPersonaIndex(array $features): array + { + $personas = []; + foreach ($features as $featureName => $feature) { + foreach ($feature['stories'] as $story) { + $persona = $story['persona']; + if (! isset($personas[$persona])) { + $personas[$persona] = [ + 'features' => [], + 'storyCount' => 0, + ]; + } + if (! in_array($featureName, $personas[$persona]['features'])) { + $personas[$persona]['features'][] = $featureName; + } + $personas[$persona]['storyCount']++; + } + } + + ksort($personas); + foreach ($personas as &$persona) { + sort($persona['features']); + } + + return $personas; + } + + private function buildCoverageStats(array $features): array + { + $annotated = 0; + $withTests = 0; + + foreach ($features as $feature) { + foreach ($feature['stories'] as $story) { + $annotated++; + if (! empty($story['tests'])) { + $withTests++; + } + } + } + + return [ + 'annotatedStories' => $annotated, + 'storiesWithTests' => $withTests, + ]; + } + + private function reportWarnings(array $features): void + { + $uncovered = []; + foreach ($features as $featureName => $feature) { + foreach ($feature['stories'] as $story) { + if (empty($story['tests'])) { + $uncovered[] = "{$story['method']} ({$featureName})"; + } + } + } + + if ($uncovered) { + $this->warn('Stories without test coverage:'); + foreach ($uncovered as $method) { + $this->line(" - {$method}"); + } + } + } + + private function checkManifest(array $manifest, string $outputPath): int + { + if (! file_exists($outputPath)) { + $this->error('No manifest found at docs/specs/manifest.json. Run specs:extract to generate it.'); + return Command::FAILURE; + } + + $existing = json_decode(file_get_contents($outputPath), true); + + // Compare without generatedAt timestamp + $compareNew = $manifest; + $compareExisting = $existing; + unset($compareNew['generatedAt'], $compareExisting['generatedAt']); + + if ($compareNew === $compareExisting) { + $this->info('Manifest is up to date.'); + return Command::SUCCESS; + } + + $this->error('Manifest is out of date. Run php artisan specs:extract to update it.'); + return Command::FAILURE; + } +} diff --git a/app/Http/Controllers/API/AlertController.php b/app/Http/Controllers/API/AlertController.php index 26bda7d946..b532b78b7a 100644 --- a/app/Http/Controllers/API/AlertController.php +++ b/app/Http/Controllers/API/AlertController.php @@ -12,7 +12,10 @@ use Illuminate\Http\Request; use Notification; use Illuminate\Validation\ValidationException; +use App\Attributes\Feature; +use App\Attributes\UserStory; +#[Feature('Administration', description: 'Platform administration and configuration')] class AlertController extends Controller { /** @@ -38,6 +41,7 @@ class AlertController extends Controller * ), * ) */ + #[UserStory('As a Guest, I can view active platform alerts', persona: 'Guest')] public function listAlertsv2(Request $request) { // Alerts don't change often, so we can cache them. if (\Cache::has('alerts')) { @@ -115,6 +119,7 @@ public function listAlertsv2(Request $request) { * ) * ) */ + #[UserStory('As an Admin, I can create a platform-wide alert', persona: 'Admin')] public function addAlertv2(Request $request) { $user = $this->getUser(); @@ -201,6 +206,7 @@ public function addAlertv2(Request $request) * ) * ) */ + #[UserStory('As an Admin, I can update a platform alert', persona: 'Admin')] public function updateAlertv2(Request $request, $id) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/DeviceController.php b/app/Http/Controllers/API/DeviceController.php index 674899da57..9da14c67ae 100644 --- a/app/Http/Controllers/API/DeviceController.php +++ b/app/Http/Controllers/API/DeviceController.php @@ -19,7 +19,10 @@ use Carbon\Carbon; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\DB; +use App\Attributes\Feature; +use App\Attributes\UserStory; +#[Feature('Devices', description: 'Repair device tracking and impact measurement')] class DeviceController extends Controller { /** * @OA\Get( @@ -55,6 +58,8 @@ class DeviceController extends Controller { * ) */ + #[UserStory('As a Guest, I can view device details via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve device repair data via the API', persona: 'ThirdParty')] public function getDevicev2(Request $request, $iddevices) { $device = Device::findOrFail($iddevices); @@ -155,6 +160,7 @@ public function getDevicev2(Request $request, $iddevices) * ) * ) */ + #[UserStory('As a Restarter, I can log a device repair at an event I attended', persona: 'Restarter')] public function createDevicev2(Request $request) { $user = $this->getUser(); @@ -344,6 +350,7 @@ public function createDevicev2(Request $request) * ) * ) */ + #[UserStory('As a Restarter, I can update a device repair record at an event I attended', persona: 'Restarter')] public function updateDevicev2(Request $request, $iddevices) { $user = $this->getUser(); @@ -440,6 +447,7 @@ public function updateDevicev2(Request $request, $iddevices) * ) */ + #[UserStory('As a Host, I can delete a device record from my event', persona: 'Host')] public function deleteDevicev2(Request $request, $iddevices) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/DiscourseController.php b/app/Http/Controllers/API/DiscourseController.php index d8dee88ab2..01e003a23a 100644 --- a/app/Http/Controllers/API/DiscourseController.php +++ b/app/Http/Controllers/API/DiscourseController.php @@ -8,7 +8,10 @@ use Auth; use Illuminate\Http\Request; use Cache; +use App\Attributes\Feature; +use App\Attributes\UserStory; +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class DiscourseController extends Controller { /** @@ -18,6 +21,7 @@ class DiscourseController extends Controller * @param string $tag * @return \Illuminate\Http\Response */ + #[UserStory('As a Guest, I can view recent community discussion topics', persona: 'Guest')] public function discussionTopics(Request $request, DiscourseService $discourseService, $tag = NULL) { $topics = []; diff --git a/app/Http/Controllers/API/EventController.php b/app/Http/Controllers/API/EventController.php index 38859a52d4..74b98f42ef 100644 --- a/app/Http/Controllers/API/EventController.php +++ b/app/Http/Controllers/API/EventController.php @@ -21,9 +21,14 @@ use Illuminate\Http\Request; use Carbon\Carbon; use Illuminate\Support\Facades\Log; +use App\Attributes\Feature; +use App\Attributes\UserStory; +use App\Attributes\NoStory; +#[Feature('Events', description: 'Community repair event management')] class EventController extends Controller { + #[UserStory('As a NetworkCoordinator, I can list events across my networks', persona: 'NetworkCoordinator')] public function getEventsByUsersNetworks(Request $request, $date_from = null, $date_to = null, $timezone = 'UTC') { $authenticatedUser = Auth::user(); @@ -145,6 +150,7 @@ public function getEventsByUsersNetworks(Request $request, $date_from = null, $d return $collection; } + #[UserStory('As a Host, I can add a volunteer to my event', persona: 'Host')] public function addVolunteer(Request $request, $idevents) { $request->validate([ @@ -236,6 +242,8 @@ public function addVolunteer(Request $request, $idevents) } + #[UserStory('As a Guest, I can view confirmed volunteers for an event', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve volunteer data for an event via the API', persona: 'ThirdParty')] public function listVolunteers(Request $request, $idevents) { $party = Party::findOrFail($idevents); @@ -287,6 +295,8 @@ public function listVolunteers(Request $request, $idevents) * ) */ + #[UserStory('As a Guest, I can view event details via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve event details to display on my platform', persona: 'ThirdParty')] public function getEventv2(Request $request, $idevents) { $party = Party::findOrFail($idevents); @@ -343,6 +353,8 @@ private function getUser() * ), * ) */ + #[UserStory('As a NetworkCoordinator, I can view events pending moderation in my networks', persona: 'NetworkCoordinator')] + #[UserStory('As an Admin, I can view all events pending moderation', persona: 'Admin')] public function moderateEventsv2(Request $request) { // Get the user that the API has been authenticated as. @@ -455,6 +467,7 @@ public function moderateEventsv2(Request $request) * ) * ) */ + #[UserStory('As a Host, I can create an event via the API', persona: 'Host')] public function createEventv2(Request $request) { $user = $this->getUser(); @@ -624,6 +637,7 @@ public function createEventv2(Request $request) * ) * ) */ + #[UserStory('As a Host, I can update my event via the API', persona: 'Host')] public function updateEventv2(Request $request, $idEvents) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/GroupController.php b/app/Http/Controllers/API/GroupController.php index 25076f9334..4988611691 100644 --- a/app/Http/Controllers/API/GroupController.php +++ b/app/Http/Controllers/API/GroupController.php @@ -27,7 +27,11 @@ use Illuminate\Http\Request; use Notification; use Illuminate\Validation\ValidationException; +use App\Attributes\Feature; +use App\Attributes\UserStory; +use App\Attributes\NoStory; +#[Feature('Groups', description: 'Community repair group management and membership')] class GroupController extends Controller { /** @@ -38,6 +42,7 @@ class GroupController extends Controller * * Only Administrators can access this API call. */ + #[UserStory('As an Admin, I can list group audit changes for Zapier integration', persona: 'Admin')] public static function getGroupChanges(Request $request) { $authenticatedUser = Auth::user(); @@ -60,6 +65,7 @@ public static function getGroupChanges(Request $request) return response()->json($groupChanges); } + #[UserStory('As a NetworkCoordinator, I can list all groups in my networks via the API', persona: 'NetworkCoordinator')] public static function getGroupsByUsersNetworks(Request $request) { $authenticatedUser = Auth::user(); @@ -180,6 +186,7 @@ public static function getGroupsByUsersNetworks(Request $request) /** * Get all of the audits related to groups from the audits table. */ + #[NoStory(reason: 'Internal audit helper for Zapier')] public static function getGroupAudits($dateFrom = null) { $query = \OwenIt\Auditing\Models\Audit::where('auditable_type', \App\Group::class); @@ -198,6 +205,7 @@ public static function getGroupAudits($dateFrom = null) * Map from the group and audit information as recorded by the audits library, * into the format needed for Zapier. */ + #[NoStory(reason: 'Internal Zapier formatting helper')] public static function mapDetailsAndAuditToChange($group, $groupAudit) { $group->makeHidden(['updated_at', 'wordpress_post_id', 'ShareableLink', 'shareable_code']); @@ -213,6 +221,7 @@ public static function mapDetailsAndAuditToChange($group, $groupAudit) return $groupChange; } + #[UserStory('As a Restarter, I can list all groups via the API', persona: 'Restarter')] public static function getGroupList() { $groups = Group::orderBy('created_at', 'desc'); @@ -260,6 +269,8 @@ public static function getGroupList() * ) */ + #[UserStory('As a Guest, I can get a list of group names via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve group names to display on my own platform', persona: 'ThirdParty')] public static function listNamesv2(Request $request) { $request->validate([ 'includeArchived' => ['string', 'in:true,false'], @@ -311,6 +322,8 @@ public static function listNamesv2(Request $request) { * ), * ) */ + #[UserStory('As a Guest, I can get a list of group tags via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve group tags to categorise groups on my platform', persona: 'ThirdParty')] public static function listTagsv2(Request $request) { return [ 'data' => TagCollection::make(GroupTags::all()) @@ -350,6 +363,8 @@ public static function listTagsv2(Request $request) { * ), * ) */ + #[UserStory('As a Guest, I can view group details via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve group details to display on my platform', persona: 'ThirdParty')] public static function getGroupv2(Request $request, $idgroups) { $group = Group::findOrFail($idgroups); return \App\Http\Resources\Group::make($group); @@ -413,6 +428,8 @@ public static function getGroupv2(Request $request, $idgroups) { * ) */ + #[UserStory('As a Guest, I can list events for a group via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve events for a group to display on my platform', persona: 'ThirdParty')] public static function getEventsForGroupv2(Request $request, $idgroups) { $group = Group::findOrFail($idgroups); @@ -472,6 +489,8 @@ public static function getEventsForGroupv2(Request $request, $idgroups) { * ) */ + #[UserStory('As a Guest, I can view a group\'s volunteers via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve volunteer data for a group via the API', persona: 'ThirdParty')] public static function getVolunteersForGroupv2($idgroups) { $group = Group::findOrFail($idgroups); $volunteers = $group->allConfirmedVolunteers()->get(); @@ -514,6 +533,7 @@ public static function getVolunteersForGroupv2($idgroups) { * ) */ + #[UserStory('As a Host, I can remove a volunteer from my group', persona: 'Host')] public function deleteVolunteerForGroupv2(Request $request, $id, $iduser) { $user = $this->getUser(); @@ -569,6 +589,7 @@ public function deleteVolunteerForGroupv2(Request $request, $id, $iduser) * ) */ + #[UserStory('As a Host, I can change a volunteer\'s role in my group', persona: 'Host')] public function patchVolunteerForGroupv2(Request $request, $id, $iduser) { $user = $this->getUser(); @@ -644,6 +665,8 @@ private function getUser() { * ), * ) */ + #[UserStory('As a NetworkCoordinator, I can view groups pending moderation in my networks', persona: 'NetworkCoordinator')] + #[UserStory('As an Admin, I can view all groups pending moderation', persona: 'Admin')] public function moderateGroupsv2(Request $request) { $user = $this->getUser(); $ret = \App\Http\Resources\GroupCollection::make(Group::unapprovedVisibleTo($user->id)); @@ -726,6 +749,7 @@ public function moderateGroupsv2(Request $request) { * ) * ) */ + #[UserStory('As a Restarter, I can create a new group via the API', persona: 'Restarter')] public function createGroupv2(Request $request) { $user = $this->getUser(); $user->convertToHost(); @@ -874,6 +898,7 @@ public function createGroupv2(Request $request) { * ) * ) */ + #[UserStory('As a Host, I can update my group via the API', persona: 'Host')] public function updateGroupv2(Request $request, $idGroup) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/ItemController.php b/app/Http/Controllers/API/ItemController.php index a75ab527ba..7e84dfef93 100644 --- a/app/Http/Controllers/API/ItemController.php +++ b/app/Http/Controllers/API/ItemController.php @@ -12,7 +12,10 @@ use Illuminate\Http\Request; use Notification; use Illuminate\Validation\ValidationException; +use App\Attributes\Feature; +use App\Attributes\UserStory; +#[Feature('Devices', description: 'Repair device tracking and impact measurement')] class ItemController extends Controller { /** @@ -38,6 +41,7 @@ class ItemController extends Controller * ), * ) */ + #[UserStory('As a Guest, I can view suggested item types for device records', persona: 'Guest')] public static function listItemsv2(Request $request) { // Item types don't change often, so we can cache them. // Allow cache refresh for testing purposes or when running under Playwright diff --git a/app/Http/Controllers/API/NetworkController.php b/app/Http/Controllers/API/NetworkController.php index d70a0b6b18..eac9f15cce 100644 --- a/app/Http/Controllers/API/NetworkController.php +++ b/app/Http/Controllers/API/NetworkController.php @@ -10,9 +10,13 @@ use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use App\Attributes\Feature; +use App\Attributes\UserStory; +#[Feature('Networks', description: 'Regional network management and coordination')] class NetworkController extends Controller { + #[UserStory('As a NetworkCoordinator, I can view my network\'s statistics via the API', persona: 'NetworkCoordinator')] public function stats(Network $network) { if (! Auth::user()->can('view', $network)) { @@ -51,6 +55,8 @@ public function stats(Network $network) * ) */ + #[UserStory('As a Guest, I can list all networks via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve all networks to display on my platform', persona: 'ThirdParty')] public function getNetworksv2() { $networks = Network::all(); @@ -91,6 +97,8 @@ public function getNetworksv2() * ) */ + #[UserStory('As a Guest, I can view network details via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve network details via the API', persona: 'ThirdParty')] public function getNetworkv2($id) { $network = Network::findOrFail($id); @@ -189,6 +197,8 @@ public function getNetworkv2($id) * ) */ + #[UserStory('As a Guest, I can list groups for a network via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve groups for a network to display on my platform', persona: 'ThirdParty')] public function getNetworkGroupsv2(Request $request, $id) { $network = Network::findOrFail($id); @@ -312,6 +322,8 @@ public function getNetworkGroupsv2(Request $request, $id) * ) */ + #[UserStory('As a Guest, I can list events for a network via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve events for a network to display on my platform', persona: 'ThirdParty')] public function getNetworkEventsv2(Request $request, $id) { Network::findOrFail($id); diff --git a/app/Http/Controllers/API/UserController.php b/app/Http/Controllers/API/UserController.php index e27f32361c..f391763f62 100644 --- a/app/Http/Controllers/API/UserController.php +++ b/app/Http/Controllers/API/UserController.php @@ -7,7 +7,11 @@ use Auth; use Illuminate\Http\Request; use Cache; +use App\Attributes\Feature; +use App\Attributes\UserStory; +use App\Attributes\NoStory; +#[Feature('Users', description: 'User accounts, profiles, and authentication')] class UserController extends Controller { /** @@ -18,6 +22,7 @@ class UserController extends Controller * * Only Administrators can access this API call. */ + #[UserStory('As an Admin, I can list user audit changes for Zapier integration', persona: 'Admin')] public static function changes(Request $request) { $authenticatedUser = Auth::user(); @@ -96,6 +101,7 @@ protected static function mapUserAndAuditToUserChange($user, $audit) * @param int $id * @return \Illuminate\Http\Response */ + #[NoStory(reason: 'Internal notification count endpoint')] public function notifications(Request $request, $id) { $user = User::findOrFail($id); diff --git a/app/Http/Controllers/API/UserGroupsController.php b/app/Http/Controllers/API/UserGroupsController.php index b6194192dd..5ac24198ef 100644 --- a/app/Http/Controllers/API/UserGroupsController.php +++ b/app/Http/Controllers/API/UserGroupsController.php @@ -10,7 +10,10 @@ use App\UserGroups; use Auth; use Illuminate\Http\Request; +use App\Attributes\Feature; +use App\Attributes\UserStory; +#[Feature('Groups', description: 'Community repair group management and membership')] class UserGroupsController extends Controller { /** @@ -20,6 +23,7 @@ class UserGroupsController extends Controller * * Only Administrators allowed to access this endpoint. */ + #[UserStory('As an Admin, I can list group membership changes for Zapier integration', persona: 'Admin')] public static function changes(Request $request) { $authenticatedUser = Auth::user(); @@ -96,6 +100,7 @@ protected static function mapDetailsAndAuditToChange($userGroupAssociation, $aud * @param int $id * @return \Illuminate\Http\Response */ + #[UserStory('As a Restarter, I can leave a group I belong to', persona: 'Restarter')] public function leave(Request $request, $id) { $authenticatedUser = Auth::user(); diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 9b581c099b..cb42f28d36 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -2,14 +2,19 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\NoStory; +use App\Attributes\UserStory; use App\Device; use App\Party; /** * Embedded at https://therestartproject.org/impact */ +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class AdminController extends Controller { + #[UserStory('As a Guest, I can view the platform\'s global repair impact statistics', persona: 'Guest')] public static function stats($section = 1, $paragraph_only = false) { if ($section == 1) { @@ -23,6 +28,7 @@ public static function stats($section = 1, $paragraph_only = false) return view('admin.stats', $stats); } + #[NoStory(reason: 'Internal stats aggregation helper')] public static function getStats1() { $Device = new Device; @@ -95,6 +101,7 @@ public static function getStats1() ]; } + #[NoStory(reason: 'Internal stats aggregation helper')] public static function getStats2() { $stats = \App\Helpers\LcaStats::getWasteStats(); diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 277105e504..e4a362045e 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -9,6 +9,9 @@ use Auth; use DB; use Illuminate\Http\Request; +use App\Attributes\Feature; +use App\Attributes\UserStory; +use App\Attributes\NoStory; /** * @OA\Info( @@ -41,11 +44,14 @@ * name="api_token", * ) */ +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class ApiController extends Controller { /** * Embedded at https://therestartproject.org */ + #[UserStory('As a Guest, I can view aggregate platform impact statistics', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve aggregate platform impact data for embedding', persona: 'ThirdParty')] public static function homepage_data() { $result = []; @@ -98,6 +104,8 @@ public static function homepage_data() ->json($result, 200); } + #[UserStory('As a Guest, I can view repair statistics for a specific event', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve event repair statistics for embedding', persona: 'ThirdParty')] public static function partyStats($partyId) { $event = Party::where('idevents', $partyId)->first(); @@ -128,6 +136,8 @@ public static function partyStats($partyId) return response()->json($result, 200); } + #[UserStory('As a Guest, I can view repair statistics for a specific group', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can retrieve group repair statistics for embedding', persona: 'ThirdParty')] public static function groupStats($groupId) { $group = Group::where('idgroups', $groupId)->first(); @@ -159,6 +169,7 @@ public static function groupStats($groupId) return response()->json($result, 200); } + #[UserStory('As a Restarter, I can retrieve my own profile information via the API', persona: 'Restarter')] public static function getUserInfo() { $user = Auth::user(); @@ -168,6 +179,7 @@ public static function getUserInfo() return response()->json($user->toArray()); } + #[UserStory('As an Admin, I can retrieve a list of all users via the API', persona: 'Admin')] public static function getUserList() { $authenticatedUser = Auth::user(); @@ -188,6 +200,8 @@ public static function getUserList() * @param Request $request * @return Response */ + #[UserStory('As a Guest, I can search and filter device records via the API', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can search and retrieve device records via the API', persona: 'ThirdParty')] public static function getDevices(Request $request, $page, $size) { $powered = $request->input('powered'); @@ -275,6 +289,7 @@ public static function getDevices(Request $request, $page, $size) ]); } + #[NoStory(reason: 'Timezone list helper endpoint')] public function timezones() { $zones = \DateTimeZone::listIdentifiers(\DateTimeZone::ALL_WITH_BC); $ret = []; diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index 465c39ccf9..e63dcb20b7 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -2,9 +2,11 @@ namespace App\Http\Controllers\Auth; +use App\Attributes\Feature; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; +#[Feature('Users', description: 'User accounts, profiles, and authentication')] class ForgotPasswordController extends Controller { /* diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 05f53fe768..931e8b8d1f 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers\Auth; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Device; use App\Helpers\Fixometer; use App\Http\Controllers\Controller; @@ -13,6 +15,7 @@ use Illuminate\Validation\ValidationException; use Msurguy\Honeypot\Honeypot; +#[Feature('Users', description: 'User accounts, profiles, and authentication')] class LoginController extends Controller { /* @@ -53,6 +56,7 @@ public function __construct() * * @throws \Illuminate\Validation\ValidationException */ + #[UserStory('As a Guest, I can log in to the platform', persona: 'Guest')] public function login(Request $request) { $this->validateLogin($request); @@ -107,6 +111,7 @@ protected function validateLogin(Request $request) * * @return \Illuminate\Http\Response */ + #[UserStory('As a Guest, I can view the login page', persona: 'Guest')] public function showLoginForm() { $stats = Fixometer::loginRegisterStats(); diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index e70d96ae6c..95e4e0a26b 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -2,9 +2,11 @@ namespace App\Http\Controllers\Auth; +use App\Attributes\Feature; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\ResetsPasswords; +#[Feature('Users', description: 'User accounts, profiles, and authentication')] class ResetPasswordController extends Controller { /* diff --git a/app/Http/Controllers/BrandsController.php b/app/Http/Controllers/BrandsController.php index 52fb24807f..28a464102a 100644 --- a/app/Http/Controllers/BrandsController.php +++ b/app/Http/Controllers/BrandsController.php @@ -2,14 +2,18 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Brands; use App\Helpers\Fixometer; use Auth; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; +#[Feature('Administration', description: 'Platform administration and configuration')] class BrandsController extends Controller { + #[UserStory('As an Admin, I can view all device brands', persona: 'Admin')] public function index() { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -24,6 +28,7 @@ public function index() ]); } + #[UserStory('As an Admin, I can create a new device brand', persona: 'Admin')] public function postCreateBrand(Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -37,6 +42,7 @@ public function postCreateBrand(Request $request) return Redirect::to('brands/edit/'.$brand->id)->with('success', __('brands.create_success')); } + #[UserStory('As an Admin, I can access the form to edit a device brand', persona: 'Admin')] public function getEditBrand($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -51,6 +57,7 @@ public function getEditBrand($id) ]); } + #[UserStory('As an Admin, I can update a device brand', persona: 'Admin')] public function postEditBrand($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -64,6 +71,7 @@ public function postEditBrand($id, Request $request) return Redirect::back()->with('success', __('brands.update_success')); } + #[UserStory('As an Admin, I can delete a device brand', persona: 'Admin')] public function getDeleteBrand($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { diff --git a/app/Http/Controllers/CalendarEventsController.php b/app/Http/Controllers/CalendarEventsController.php index 8bad356db3..4d4b7293f6 100644 --- a/app/Http/Controllers/CalendarEventsController.php +++ b/app/Http/Controllers/CalendarEventsController.php @@ -2,6 +2,9 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\NoStory; +use App\Attributes\UserStory; use App\Group; use App\Party; use App\User; @@ -10,6 +13,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Str; +#[Feature('Events', description: 'Community repair event management')] class CalendarEventsController extends Controller { public $ical_format; @@ -19,6 +23,7 @@ public function __construct() $this->ical_format = 'Ymd\THis'; } + #[UserStory('As a Restarter, I can subscribe to my events as an iCal feed', persona: 'Restarter')] public function allEventsByUser(Request $request, $calendar_hash) { if (empty($calendar_hash)) { @@ -53,6 +58,7 @@ public function allEventsByUser(Request $request, $calendar_hash) $this->exportCalendar($events); } + #[UserStory('As a Guest, I can subscribe to a group\'s events as an iCal feed', persona: 'Guest')] public function allEventsByGroup(Request $request, Group $group) { $events = Party::join('groups', 'groups.idgroups', '=', 'events.group') @@ -72,6 +78,7 @@ public function allEventsByGroup(Request $request, Group $group) $this->exportCalendar($events); } + #[UserStory('As a Guest, I can subscribe to a network\'s events as an iCal feed', persona: 'Guest')] public function allEventsByNetwork(Request $request, Network $network) { $events = Party::join('groups', 'groups.idgroups', '=', 'events.group') @@ -92,6 +99,7 @@ public function allEventsByNetwork(Request $request, Network $network) $this->exportCalendar($events); } + #[UserStory('As a Guest, I can subscribe to events in my area as an iCal feed', persona: 'Guest')] public function allEventsByArea(Request $request, $area) { $events = Party::join('groups', 'groups.idgroups', '=', 'events.group') @@ -110,6 +118,7 @@ public function allEventsByArea(Request $request, $area) $this->exportCalendar($events); } + #[NoStory(reason: 'All-events calendar feed requiring environment secret')] public function allEvents(Request $request, $env_hash) { if ($env_hash != env('CALENDAR_HASH')) { @@ -124,6 +133,7 @@ public function allEvents(Request $request, $env_hash) $this->exportCalendar($events); } + #[NoStory(reason: 'Internal iCal generation helper')] public function exportCalendar($events) { $ical = []; diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php index ee1bde1d20..12704b7c4a 100644 --- a/app/Http/Controllers/CategoryController.php +++ b/app/Http/Controllers/CategoryController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Category; use App\Helpers\Fixometer; use App\User; @@ -9,8 +11,10 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; +#[Feature('Administration', description: 'Platform administration and configuration')] class CategoryController extends Controller { + #[UserStory('As an Admin, I can view all device categories', persona: 'Admin')] public function index() { $Category = new Category; @@ -21,6 +25,7 @@ public function index() ]); } + #[UserStory('As an Admin, I can access the form to edit a device category', persona: 'Admin')] public function getEditCategory($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -39,6 +44,7 @@ public function getEditCategory($id) ]); } + #[UserStory('As an Admin, I can update a device category\'s details and impact factors', persona: 'Admin')] public function postEditCategory($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index bf41ee9e39..1219d9165b 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Group; use App\Party; use App\User; @@ -10,8 +12,10 @@ use DB; use Illuminate\Support\Facades\Log; +#[Feature('Dashboard', description: 'User dashboard with personalised event and group information')] class DashboardController extends Controller { + #[UserStory('As a Restarter, I can view my dashboard with upcoming events, my groups, and nearby groups', persona: 'Restarter')] public function index() { $user = User::getProfile(Auth::id()); @@ -81,6 +85,7 @@ public function index() ); } + #[UserStory('As a Host, I can view the host dashboard', persona: 'Host')] public function getHostDash() { return view('dashboard.host'); diff --git a/app/Http/Controllers/DeviceController.php b/app/Http/Controllers/DeviceController.php index ae8942b466..30809d4664 100644 --- a/app/Http/Controllers/DeviceController.php +++ b/app/Http/Controllers/DeviceController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Brands; use App\Cluster; use App\Device; @@ -24,8 +26,10 @@ use Notification; use View; +#[Feature('Devices', description: 'Repair device tracking and impact measurement')] class DeviceController extends Controller { + #[UserStory('As a Restarter, I can browse all devices and view global repair impact data', persona: 'Restarter')] public function index($search = null) { $user = User::getProfile(Auth::id()); @@ -66,6 +70,7 @@ public function index($search = null) ]); } + #[UserStory('As a Restarter, I can upload photos of devices I\'ve worked on', persona: 'Restarter')] public function imageUpload(Request $request, $id) { try { @@ -105,6 +110,7 @@ public function imageUpload(Request $request, $id) } } + #[UserStory('As a Restarter, I can delete device photos I\'ve uploaded', persona: 'Restarter')] public function deleteImage($device_id, $idxref) { $user = Auth::user(); diff --git a/app/Http/Controllers/ExportController.php b/app/Http/Controllers/ExportController.php index 358ec60db3..2f178db9e0 100644 --- a/app/Http/Controllers/ExportController.php +++ b/app/Http/Controllers/ExportController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Device; use App\EventsUsers; use App\Group; @@ -22,16 +24,20 @@ use Response; use Illuminate\Database\Eloquent\Collection; +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class ExportController extends Controller { + #[UserStory('As a Restarter, I can export device data from an event as CSV', persona: 'Restarter')] public function devicesEvent(Request $request, $idevents = NULL) { return $this->devices($request, $idevents); } + #[UserStory('As a Restarter, I can export device data from a group as CSV', persona: 'Restarter')] public function devicesGroup(Request $request, $idgroups = NULL) { return $this->devices($request, NULL, $idgroups); } + #[UserStory('As a Restarter, I can export all device records as CSV', persona: 'Restarter')] public function devices(Request $request, $idevents = NULL, $idgroups = NULL) { // To not display column if the referring URL is therestartproject.org @@ -147,6 +153,7 @@ public function devices(Request $request, $idevents = NULL, $idgroups = NULL) /** * @return \Illuminate\Http\Response */ + #[UserStory('As a Restarter, I can export a group\'s event summary as CSV', persona: 'Restarter')] public function groupEvents(Request $request, $idgroups) { $group = Group::findOrFail($idgroups); @@ -154,6 +161,7 @@ public function groupEvents(Request $request, $idgroups) return $this->exportEvents($parties); } + #[UserStory('As a NetworkCoordinator, I can export my network\'s event summary as CSV', persona: 'NetworkCoordinator')] public function networkEvents(Request $request, $id) { $network = Network::findOrFail($id); diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index 560def735e..976d41f302 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -36,7 +36,11 @@ use Notification; use Spatie\ValidationRules\Rules\Delimited; use Carbon\Carbon; +use App\Attributes\Feature; +use App\Attributes\UserStory; +use App\Attributes\NoStory; +#[Feature('Groups', description: 'Community repair group management and membership')] class GroupController extends Controller { private function indexVariations($tab, $network) @@ -79,26 +83,31 @@ private function indexVariations($tab, $network) ]); } + #[UserStory('As a Restarter, I can browse all repair groups on the platform', persona: 'Restarter')] public function all() { return $this->indexVariations('all', null); } + #[UserStory('As a Restarter, I can view the groups I belong to', persona: 'Restarter')] public function mine() { return $this->indexVariations('mine', null); } + #[UserStory('As a Restarter, I can discover repair groups near my location', persona: 'Restarter')] public function nearby() { return $this->indexVariations('nearby', null); } + #[UserStory('As a Restarter, I can browse groups within a specific network', persona: 'Restarter')] public function network($id) { return $this->indexVariations('all', $id); } + #[UserStory('As a Restarter, I can create a new repair group and become its Host', persona: 'Restarter')] public function create(Request $request) { $user = User::find(Auth::id()); @@ -111,6 +120,7 @@ public function create(Request $request) return view('group.create'); } + #[UserStory('As a Restarter, I can view a group\'s details, events, and members', persona: 'Restarter')] public function view($groupid) { $user = User::find(Auth::id()); @@ -287,6 +297,7 @@ public function view($groupid) ]); } + #[UserStory('As a Host, I can send email invitations to join my group', persona: 'Host')] public function postSendInvite(Request $request) { $request->validate([ @@ -379,6 +390,7 @@ public function postSendInvite(Request $request) ])); } + #[UserStory('As a Restarter, I can accept a group invitation', persona: 'Restarter')] public function confirmInvite($group_id, $hash) { // Find user/group relationship based on the invitation hash. @@ -411,6 +423,7 @@ public function confirmInvite($group_id, $hash) return redirect('/group/view/'.$user_group->group)->with('success', __('groups.invite_confirmed')); } + #[UserStory('As a Host, I can edit my group\'s details and settings', persona: 'Host')] public function edit(Request $request, $id, Geocoder $geocoder) { $user = Auth::user(); @@ -435,6 +448,7 @@ public function edit(Request $request, $id, Geocoder $geocoder) ]); } + #[UserStory('As an Admin, I can delete a group that has no device records', persona: 'Admin')] public function delete($id) { $group = Group::where('idgroups', $id)->first(); @@ -472,6 +486,7 @@ public function delete($id) } } + #[NoStory(reason: 'Internal data expansion helper')] public static function expandGroups($groups, $your_groupids, $nearby_groupids) { $ret = []; @@ -527,6 +542,7 @@ public static function expandGroups($groups, $your_groupids, $nearby_groupids) return $ret; } + #[UserStory('As a Guest, I can view a group\'s repair impact statistics', persona: 'Guest')] public static function stats($id, $format = 'row') { $group = Group::where('idgroups', $id)->first(); @@ -541,6 +557,7 @@ public static function stats($id, $format = 'row') return view('group.stats', $groupStats); } + #[UserStory('As a Restarter, I can join a repair group', persona: 'Restarter')] public function getJoinGroup($group_id) { $user_id = Auth::id(); @@ -597,6 +614,7 @@ public function getJoinGroup($group_id) } } + #[UserStory('As a Host, I can upload an image for my group', persona: 'Host')] public function imageUpload(Request $request, $id) { try { @@ -615,6 +633,7 @@ public function imageUpload(Request $request, $id) } } + #[UserStory('As a Host, I can remove my group\'s image', persona: 'Host')] public function ajaxDeleteImage($group_id, $id, $path) { $user = Auth::user(); @@ -640,6 +659,7 @@ public function ajaxDeleteImage($group_id, $id, $path) * @param [type] $code * @return [type] */ + #[UserStory('As a Guest, I can join a group using a shareable invite code', persona: 'Guest')] public function confirmCodeInvite(Request $request, $code) { // Variables diff --git a/app/Http/Controllers/GroupTagsController.php b/app/Http/Controllers/GroupTagsController.php index bc52e4446c..ff2afd76d8 100644 --- a/app/Http/Controllers/GroupTagsController.php +++ b/app/Http/Controllers/GroupTagsController.php @@ -2,14 +2,18 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\GroupTags; use App\Helpers\Fixometer; use Auth; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; +#[Feature('Administration', description: 'Platform administration and configuration')] class GroupTagsController extends Controller { + #[UserStory('As an Admin, I can view all group tags', persona: 'Admin')] public function index() { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -24,6 +28,7 @@ public function index() ]); } + #[UserStory('As an Admin, I can create a new group tag', persona: 'Admin')] public function postCreateTag(Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -41,6 +46,7 @@ public function postCreateTag(Request $request) return Redirect::to('tags/edit/'.$group_tag->id)->with('success', __('group-tags.create_success')); } + #[UserStory('As an Admin, I can access the form to edit a group tag', persona: 'Admin')] public function getEditTag($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -55,6 +61,7 @@ public function getEditTag($id) ]); } + #[UserStory('As an Admin, I can update a group tag', persona: 'Admin')] public function postEditTag($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -72,6 +79,7 @@ public function postEditTag($id, Request $request) return Redirect::back()->with('success', __('group-tags.update_success')); } + #[UserStory('As an Admin, I can delete a group tag', persona: 'Admin')] public function getDeleteTag($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index f7c66f3697..e774fe6ab3 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Device; use App\Group; use App\Helpers\Fixometer; @@ -10,8 +12,10 @@ use Auth; use Illuminate\Http\Request; +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class HomeController extends Controller { + #[UserStory('As a Guest, I can view the landing page with platform impact statistics', persona: 'Guest')] public function index(Request $request) { if (Auth::check()) { diff --git a/app/Http/Controllers/InformationAlertCookieController.php b/app/Http/Controllers/InformationAlertCookieController.php index f0528c2fde..50f77ea8ce 100644 --- a/app/Http/Controllers/InformationAlertCookieController.php +++ b/app/Http/Controllers/InformationAlertCookieController.php @@ -2,9 +2,12 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use Cookie; use Illuminate\Http\Request; +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class InformationAlertCookieController extends Controller { protected $minute; @@ -28,6 +31,7 @@ public function __construct() * @param int $id * @return View */ + #[UserStory('As a Guest, I can dismiss an information alert banner', persona: 'Guest')] public function __invoke(Request $request) { if (! $request->has('dismissable_id')) { diff --git a/app/Http/Controllers/LocaleController.php b/app/Http/Controllers/LocaleController.php index f4fdfe47dc..6cf11355e5 100644 --- a/app/Http/Controllers/LocaleController.php +++ b/app/Http/Controllers/LocaleController.php @@ -3,11 +3,15 @@ namespace App\Http\Controllers; use App; +use App\Attributes\Feature; +use App\Attributes\UserStory; use Auth; use LaravelLocalization; +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class LocaleController extends Controller { + #[UserStory('As a Guest, I can switch the application language', persona: 'Guest')] public function setLang($locale) { // Get local from URL and set in the session diff --git a/app/Http/Controllers/NetworkController.php b/app/Http/Controllers/NetworkController.php index a605faa874..000fc1f0da 100644 --- a/app/Http/Controllers/NetworkController.php +++ b/app/Http/Controllers/NetworkController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Group; use App\Network; use Auth; @@ -9,6 +11,7 @@ use Illuminate\Http\Request; use Lang; +#[Feature('Networks', description: 'Regional network management and coordination')] class NetworkController extends Controller { /** @@ -16,6 +19,8 @@ class NetworkController extends Controller * * @return \Illuminate\Http\Response */ + #[UserStory('As a NetworkCoordinator, I can view the networks I coordinate', persona: 'NetworkCoordinator')] + #[UserStory('As an Admin, I can view all networks on the platform', persona: 'Admin')] public function index() { $user = Auth::user(); @@ -46,6 +51,7 @@ public function index() * @param \App\Network $network * @return \Illuminate\Http\Response */ + #[UserStory('As a NetworkCoordinator, I can view my network\'s details and statistics', persona: 'NetworkCoordinator')] public function show(Network $network) { $user = Auth::user(); @@ -70,6 +76,7 @@ public function show(Network $network) * @param \App\Network $network * @return \Illuminate\Http\Response */ + #[UserStory('As a NetworkCoordinator, I can access the form to edit my network', persona: 'NetworkCoordinator')] public function edit(Network $network) { $this->authorize('update', $network); @@ -86,6 +93,7 @@ public function edit(Network $network) * @param \App\Network $network * @return \Illuminate\Http\Response */ + #[UserStory('As a NetworkCoordinator, I can update my network\'s details and logo', persona: 'NetworkCoordinator')] public function update(Request $request, Network $network) { $this->authorize('update', $network); @@ -114,6 +122,7 @@ public function update(Request $request, Network $network) * @param \App\Network $network * @return \Illuminate\Http\Response */ + #[UserStory('As a NetworkCoordinator, I can add groups to my network', persona: 'NetworkCoordinator')] public function associateGroup(Request $request, Network $network) { $this->authorize('associateGroups', $network); diff --git a/app/Http/Controllers/OutboundController.php b/app/Http/Controllers/OutboundController.php index 8645fc51fe..f9c0f5f9d2 100644 --- a/app/Http/Controllers/OutboundController.php +++ b/app/Http/Controllers/OutboundController.php @@ -2,16 +2,21 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Device; use App\Group; use App\Party; use Request; +#[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class OutboundController extends Controller { /** type can be either party or group * id is id of group or party to display. * */ + #[UserStory('As a Guest, I can view embeddable CO2 impact visualisations for events and groups', persona: 'Guest')] + #[UserStory('As a ThirdParty, I can embed CO2 impact widgets for events and groups on my platform', persona: 'ThirdParty')] public static function info($type, $id, $format = 'fixometer', $return = 'view') { diff --git a/app/Http/Controllers/PartyController.php b/app/Http/Controllers/PartyController.php index 9907a31f02..f042e8529f 100644 --- a/app/Http/Controllers/PartyController.php +++ b/app/Http/Controllers/PartyController.php @@ -2,6 +2,9 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\NoStory; +use App\Attributes\UserStory; use App\Audits; use App\Brands; use App\Cluster; @@ -34,6 +37,7 @@ use Spatie\CalendarLinks\Link; use Spatie\ValidationRules\Rules\Delimited; +#[Feature('Events', description: 'Community repair event management')] class PartyController extends Controller { protected $geocoder; @@ -45,6 +49,7 @@ public function __construct(Geocoder $geocoder, DiscourseService $discourseServi $this->discourseService = $discourseService; } + #[NoStory(reason: 'Internal data expansion helper')] public static function expandEvent($event, $group = null, $countries = null, $attending = null, $invited = null, $volunteering = null) { // Use attributesToArray rather than getAttributes so that our custom accessors are invoked. @@ -117,6 +122,7 @@ public static function expandEvent($event, $group = null, $countries = null, $at return $thisone; } + #[UserStory('As a Restarter, I can view upcoming events and events near me', persona: 'Restarter')] public function index($group_id = null) { $events = []; @@ -189,6 +195,8 @@ public function index($group_id = null) ]); } + #[UserStory('As a Host, I can access the form to create a new event for my group', persona: 'Host')] + #[UserStory('As a Host, I can create an online event without a physical location', persona: 'Host')] public function create(Request $request, $group_id = null) { $user = Auth::user(); @@ -216,6 +224,8 @@ public function create(Request $request, $group_id = null) ]); } + #[UserStory('As a Host, I can edit my group\'s event details', persona: 'Host')] + #[UserStory('As a NetworkCoordinator, I can edit events for groups in my network', persona: 'NetworkCoordinator')] public function edit($id, Request $request) { $user = Auth::user(); @@ -267,6 +277,7 @@ public function edit($id, Request $request) ]); } + #[UserStory('As a Host, I can duplicate an existing event to create a new one', persona: 'Host')] public function duplicate($id, Request $request) { $user = Auth::user(); @@ -310,6 +321,7 @@ public function duplicate($id, Request $request) ]); } + #[UserStory('As a Guest, I can view a public event\'s details and repair statistics', persona: 'Guest')] public function view($id) { $File = new FixometerFile; @@ -396,6 +408,7 @@ public function view($id) * @param object can use any Party eloquent query object * @return array either returns an array with the four links or an empty array in the rare instance when dateTime object is not created because the value is not correct */ + #[NoStory(reason: 'Calendar link helper')] public function generateAddToCalendarLinks($event) { try { @@ -414,6 +427,7 @@ public function generateAddToCalendarLinks($event) } } + #[UserStory('As a Restarter, I can RSVP to attend an upcoming event', persona: 'Restarter')] public function getJoinEvent($event_id) { $user_id = Auth::id(); @@ -462,6 +476,7 @@ public function getJoinEvent($event_id) } } + #[NoStory(reason: 'Internal notification helper')] public function notifyHostsOfRsvp($user_event, $event_id) { // Get users who have appropriate role and permission to email @@ -492,6 +507,7 @@ public function notifyHostsOfRsvp($user_event, $event_id) } } + #[UserStory('As a Guest, I can view an event\'s repair impact statistics', persona: 'Guest')] public static function stats($id) { $event = Party::where('idevents', $id)->first(); @@ -513,6 +529,7 @@ public static function stats($id) * * @return Response json formatted array of relevant info on users in the group. */ + #[UserStory('As a Host, I can retrieve group member emails to invite them to an event', persona: 'Host')] public function getGroupEmailsWithNames($event_id) { $group_user_ids = UserGroups::where('group', Party::find($event_id)->group) @@ -536,6 +553,7 @@ public function getGroupEmailsWithNames($event_id) return response()->json($group_users); } + #[UserStory('As a Host, I can update the participant count for my event', persona: 'Host')] public function updateQuantity(Request $request) { $event_id = $request->input('event_id'); @@ -558,6 +576,7 @@ public function updateQuantity(Request $request) return response()->json($return); } + #[UserStory('As a Host, I can update the volunteer count for my event', persona: 'Host')] public function updateVolunteerQuantity(Request $request) { $event_id = $request->input('event_id'); @@ -580,6 +599,7 @@ public function updateVolunteerQuantity(Request $request) return response()->json($return); } + #[UserStory('As a Host, I can remove a volunteer from my event', persona: 'Host')] public function removeVolunteer(Request $request) { // The id that's passed in is that of the events_users table, because the entry may refer to a user without @@ -611,6 +631,7 @@ public function removeVolunteer(Request $request) } } + #[UserStory('As a Host, I can send email invitations for an event', persona: 'Host')] public function postSendInvite(Request $request) { $from_id = Auth::id(); @@ -710,6 +731,7 @@ public function postSendInvite(Request $request) return redirect()->back()->with('warning', __('events.invite_noemails')); } + #[UserStory('As a Restarter, I can accept an event invitation', persona: 'Restarter')] public function confirmInvite($event_id, $hash) { $user_event = EventsUsers::where('status', $hash)->where('event', $event_id)->first(); @@ -729,6 +751,7 @@ public function confirmInvite($event_id, $hash) return redirect('/party/view/'.intval($event_id))->with('warning', __('events.invite_invalid')); } + #[UserStory('As a Restarter, I can cancel my attendance at an event', persona: 'Restarter')] public function cancelInvite($event_id) { // We have to do a loop to avoid the gotcha where bulk delete operations don't invoke observers. @@ -739,6 +762,7 @@ public function cancelInvite($event_id) return redirect('/party/view/'.intval($event_id))->with('success', __('events.invite_cancelled')); } + #[UserStory('As a Restarter, I can upload photos from an event', persona: 'Restarter')] public function imageUpload(Request $request, $id) { try { @@ -769,6 +793,7 @@ public function imageUpload(Request $request, $id) } } + #[UserStory('As a Restarter, I can delete my uploaded event photos', persona: 'Restarter')] public function deleteImage($event_id, $id, $path) { $user = Auth::user(); @@ -790,6 +815,7 @@ public function deleteImage($event_id, $id, $path) * This sends an email to all user except the host logged in an email to ask for contributions * */ + #[UserStory('As a Host, I can request attendees log their repair contributions', persona: 'Host')] public function getContributions($event_id) { $event = Party::find($event_id); @@ -818,6 +844,7 @@ public function getContributions($event_id) * Called via AJAX. * @param id The event id. */ + #[UserStory('As a Host, I can delete an event from my group', persona: 'Host')] public function deleteEvent($id) { $event = Party::findOrFail($id); @@ -860,6 +887,7 @@ public function deleteEvent($id) * @param [type] $code * @return [type] */ + #[UserStory('As a Guest, I can join an event using a shareable invite code', persona: 'Guest')] public function confirmCodeInvite(Request $request, $code) { // Variables diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php index d89aef3eec..d4f7285db4 100644 --- a/app/Http/Controllers/RoleController.php +++ b/app/Http/Controllers/RoleController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Helpers\Fixometer; use App\Providers\RouteServiceProvider; use App\Role; @@ -10,9 +12,11 @@ use Auth; use Illuminate\Http\Request; +#[Feature('Administration', description: 'Platform administration and configuration')] class RoleController extends Controller { //Custom Functions + #[UserStory('As an Admin, I can view all roles and their permissions', persona: 'Admin')] public function index() { $user = User::find(Auth::id()); @@ -33,6 +37,7 @@ public function index() return redirect(RouteServiceProvider::HOME); } + #[UserStory('As an Admin, I can edit the permissions assigned to a role', persona: 'Admin')] public function edit($id, Request $request) { $user = Auth::user(); diff --git a/app/Http/Controllers/SkillsController.php b/app/Http/Controllers/SkillsController.php index b9b63fbb0a..7e4b6c77dc 100644 --- a/app/Http/Controllers/SkillsController.php +++ b/app/Http/Controllers/SkillsController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Attributes\Feature; +use App\Attributes\UserStory; use App\Helpers\Fixometer; use App\Skills; use App\UsersSkills; @@ -9,8 +11,10 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; +#[Feature('Administration', description: 'Platform administration and configuration')] class SkillsController extends Controller { + #[UserStory('As an Admin, I can view all repair skills', persona: 'Admin')] public function index() { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -25,6 +29,7 @@ public function index() ]); } + #[UserStory('As an Admin, I can create a new repair skill', persona: 'Admin')] public function postCreateSkill(Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -39,6 +44,7 @@ public function postCreateSkill(Request $request) return Redirect::to('skills/edit/'.$skill->id)->with('success', __('skills.create_success')); } + #[UserStory('As an Admin, I can access the form to edit a repair skill', persona: 'Admin')] public function getEditSkill($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -53,6 +59,7 @@ public function getEditSkill($id) ]); } + #[UserStory('As an Admin, I can update a repair skill', persona: 'Admin')] public function postEditSkill($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -68,6 +75,7 @@ public function postEditSkill($id, Request $request) return Redirect::back()->with('success', __('skills.update_success')); } + #[UserStory('As an Admin, I can delete a repair skill', persona: 'Admin')] public function getDeleteSkill($id) { diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index d1df28ea95..7162a4cdf7 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers; use App; +use App\Attributes\Feature; +use App\Attributes\NoStory; +use App\Attributes\UserStory; use App\Device; use App\DripEvent; use App\Events\PasswordChanged; @@ -43,6 +46,7 @@ use LaravelLocalization; use Notification; +#[Feature('Users', description: 'User accounts, profiles, and authentication')] class UserController extends Controller { /** @@ -50,6 +54,7 @@ class UserController extends Controller * * @return \Illuminate\Http\Response */ + #[UserStory('As a Restarter, I can view my profile or another user\'s profile', persona: 'Restarter')] public function index($id = null) { if (is_null($id)) { @@ -67,6 +72,7 @@ public function index($id = null) ]); } + #[UserStory('As a Restarter, I can access the form to edit my profile', persona: 'Restarter')] public function getProfileEdit($id = null) { if (is_null($id)) { @@ -122,6 +128,7 @@ public function getProfileEdit($id = null) ]); } + #[UserStory('As a Restarter, I can view my notifications', persona: 'Restarter')] public function getNotifications() { $user = Auth::user(); @@ -133,6 +140,7 @@ public function getNotifications() ]); } + #[UserStory('As a Restarter, I can update my profile information', persona: 'Restarter')] public function postProfileInfoEdit(Request $request, App\Helpers\Geocoder $geocoder) { $rules = [ @@ -189,6 +197,7 @@ public function postProfileInfoEdit(Request $request, App\Helpers\Geocoder $geoc return redirect()->back()->with('message', __('profile.profile_updated')); } + #[UserStory('As a Restarter, I can change my password', persona: 'Restarter')] public function postProfilePasswordEdit(Request $request) { if ($request->input('id') !== null) { @@ -221,6 +230,7 @@ public function postProfilePasswordEdit(Request $request) return redirect()->back()->with('error', __('profile.password_old_mismatch')); } + #[UserStory('As an Admin, I can change a user\'s Repair Directory role', persona: 'Admin')] public function postProfileRepairDirectory(Request $request) { $rules = [ @@ -249,6 +259,7 @@ public function postProfileRepairDirectory(Request $request) return redirect()->back()->with('message', __('profile.profile_updated')); } + #[UserStory('As a Restarter, I can change my preferred language', persona: 'Restarter')] public function storeLanguage(Request $request) { if ($request->input('id') !== null) { @@ -275,6 +286,8 @@ public function storeLanguage(Request $request) return redirect()->back()->with('message', Lang::get('profile.language_updated')); } + #[UserStory('As a Restarter, I can delete my own account', persona: 'Restarter')] + #[UserStory('As an Admin, I can delete a user\'s account', persona: 'Admin')] public function postSoftDeleteUser(Request $request) { if ($request->input('id') !== null) { @@ -302,6 +315,7 @@ public function postSoftDeleteUser(Request $request) } } + #[UserStory('As a Restarter, I can update my notification preferences', persona: 'Restarter')] public function postProfilePreferencesEdit(Request $request) { if ($request->input('id') !== null) { @@ -322,6 +336,7 @@ public function postProfilePreferencesEdit(Request $request) return redirect()->back()->with('message', Lang::get('profile.preferences_updated')); } + #[UserStory('As a Restarter, I can update my repair skills', persona: 'Restarter')] public function postProfileTagsEdit(Request $request) { if ($request->input('id') !== null) { @@ -345,6 +360,7 @@ public function postProfileTagsEdit(Request $request) return redirect()->back()->with('message', Lang::get('profile.skills_updated')); } + #[UserStory('As a Restarter, I can upload a new profile picture', persona: 'Restarter')] public function postProfilePictureEdit(Request $request) { if ($request->input('id') !== null) { @@ -363,6 +379,7 @@ public function postProfilePictureEdit(Request $request) return redirect()->back()->with('error', __('profile.picture_error')); } + #[UserStory('As an Admin, I can edit a user\'s role, groups, and permissions', persona: 'Admin')] public function postAdminEdit(Request $request) { if ($request->input('id') !== null) { @@ -407,6 +424,7 @@ public function postAdminEdit(Request $request) return redirect()->back()->with('message', __('profile.admin_success')); } + #[UserStory('As a Guest, I can request a password recovery email', persona: 'Guest')] public function recover(Request $request) { $User = new User; @@ -461,6 +479,7 @@ public function recover(Request $request) ]); } + #[UserStory('As a Guest, I can reset my password using a recovery code', persona: 'Guest')] public function reset(Request $request) { $User = new User; @@ -523,6 +542,7 @@ public function reset(Request $request) ]); } + #[UserStory('As an Admin, I can view and search all users on the platform', persona: 'Admin')] public function all() { $user = User::find(Auth::id()); @@ -558,6 +578,7 @@ public function all() } } + #[UserStory('As an Admin, I can filter and search the user list', persona: 'Admin')] public function search(Request $request) { $user = User::find(Auth::id()); @@ -629,6 +650,7 @@ public function search(Request $request) } } + #[UserStory('As an Admin, I can create a new user account', persona: 'Admin')] public function create(Request $request) { $user = Auth::user(); @@ -737,6 +759,7 @@ public function create(Request $request) } } + #[UserStory('As an Admin, I can edit any user\'s account details', persona: 'Admin')] public function edit($id, Request $request) { global $fixometer_languages; @@ -849,6 +872,7 @@ public function edit($id, Request $request) } } + #[UserStory('As a Restarter, I can log out of my account', persona: 'Restarter')] public function logout() { Auth::logout(); @@ -856,6 +880,7 @@ public function logout() return redirect('/login'); } + #[UserStory('As a Guest, I can view the registration page', persona: 'Guest')] public function getRegister($hash = null) { if (Auth::check() && Auth::user()->hasUserGivenConsent()) { @@ -878,6 +903,7 @@ public function getRegister($hash = null) ]); } + #[UserStory('As a Guest, I can register a new account', persona: 'Guest')] public function postRegister(Request $request, $hash = null) { $geocoder = new \App\Helpers\Geocoder(); @@ -1044,6 +1070,7 @@ public function postRegister(Request $request, $hash = null) } } + #[UserStory('As a Restarter, I can complete my onboarding process', persona: 'Restarter')] public function getOnboardingComplete() { $user = Auth::user(); @@ -1056,6 +1083,7 @@ public function getOnboardingComplete() return 'true'; } + #[NoStory(reason: 'AJAX email validation helper')] public function postEmail(Request $request) { if (User::where('email', '=', $request->get('email'))->exists()) { @@ -1063,6 +1091,7 @@ public function postEmail(Request $request) } } + #[NoStory(reason: 'MediaWiki thumbnail integration')] public static function getThumbnail(Request $request) { $user = User::where('mediawiki', $request->input('wiki_username'))->first(); @@ -1080,6 +1109,7 @@ public static function getThumbnail(Request $request) return response()->json($thumbnailPath); } + #[NoStory(reason: 'MediaWiki menu integration')] public function getUserMenus(Request $request) { $user = User::where('mediawiki', $request->input('wiki_username'))->first(); diff --git a/docs/specs/manifest.json b/docs/specs/manifest.json new file mode 100644 index 0000000000..0ca66b9e67 --- /dev/null +++ b/docs/specs/manifest.json @@ -0,0 +1,1390 @@ +{ + "generatedAt": "2026-04-16T16:01:27Z", + "features": { + "Administration": { + "description": "Platform administration and configuration", + "sources": [ + "app/Http/Controllers/CategoryController.php", + "app/Http/Controllers/RoleController.php", + "app/Http/Controllers/BrandsController.php", + "app/Http/Controllers/GroupTagsController.php", + "app/Http/Controllers/API/AlertController.php", + "app/Http/Controllers/SkillsController.php" + ], + "stories": [ + { + "story": "As an Admin, I can create a platform-wide alert", + "persona": "Admin", + "method": "AlertController::addAlertv2", + "file": "app/Http/Controllers/API/AlertController.php", + "tests": [] + }, + { + "story": "As an Admin, I can update a platform alert", + "persona": "Admin", + "method": "AlertController::updateAlertv2", + "file": "app/Http/Controllers/API/AlertController.php", + "tests": [] + }, + { + "story": "As an Admin, I can delete a device brand", + "persona": "Admin", + "method": "BrandsController::getDeleteBrand", + "file": "app/Http/Controllers/BrandsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can access the form to edit a device brand", + "persona": "Admin", + "method": "BrandsController::getEditBrand", + "file": "app/Http/Controllers/BrandsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can view all device brands", + "persona": "Admin", + "method": "BrandsController::index", + "file": "app/Http/Controllers/BrandsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can create a new device brand", + "persona": "Admin", + "method": "BrandsController::postCreateBrand", + "file": "app/Http/Controllers/BrandsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can update a device brand", + "persona": "Admin", + "method": "BrandsController::postEditBrand", + "file": "app/Http/Controllers/BrandsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can access the form to edit a device category", + "persona": "Admin", + "method": "CategoryController::getEditCategory", + "file": "app/Http/Controllers/CategoryController.php", + "tests": [] + }, + { + "story": "As an Admin, I can view all device categories", + "persona": "Admin", + "method": "CategoryController::index", + "file": "app/Http/Controllers/CategoryController.php", + "tests": [] + }, + { + "story": "As an Admin, I can update a device category's details and impact factors", + "persona": "Admin", + "method": "CategoryController::postEditCategory", + "file": "app/Http/Controllers/CategoryController.php", + "tests": [] + }, + { + "story": "As an Admin, I can delete a group tag", + "persona": "Admin", + "method": "GroupTagsController::getDeleteTag", + "file": "app/Http/Controllers/GroupTagsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can access the form to edit a group tag", + "persona": "Admin", + "method": "GroupTagsController::getEditTag", + "file": "app/Http/Controllers/GroupTagsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can view all group tags", + "persona": "Admin", + "method": "GroupTagsController::index", + "file": "app/Http/Controllers/GroupTagsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can create a new group tag", + "persona": "Admin", + "method": "GroupTagsController::postCreateTag", + "file": "app/Http/Controllers/GroupTagsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can update a group tag", + "persona": "Admin", + "method": "GroupTagsController::postEditTag", + "file": "app/Http/Controllers/GroupTagsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can edit the permissions assigned to a role", + "persona": "Admin", + "method": "RoleController::edit", + "file": "app/Http/Controllers/RoleController.php", + "tests": [] + }, + { + "story": "As an Admin, I can view all roles and their permissions", + "persona": "Admin", + "method": "RoleController::index", + "file": "app/Http/Controllers/RoleController.php", + "tests": [] + }, + { + "story": "As an Admin, I can delete a repair skill", + "persona": "Admin", + "method": "SkillsController::getDeleteSkill", + "file": "app/Http/Controllers/SkillsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can access the form to edit a repair skill", + "persona": "Admin", + "method": "SkillsController::getEditSkill", + "file": "app/Http/Controllers/SkillsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can view all repair skills", + "persona": "Admin", + "method": "SkillsController::index", + "file": "app/Http/Controllers/SkillsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can create a new repair skill", + "persona": "Admin", + "method": "SkillsController::postCreateSkill", + "file": "app/Http/Controllers/SkillsController.php", + "tests": [] + }, + { + "story": "As an Admin, I can update a repair skill", + "persona": "Admin", + "method": "SkillsController::postEditSkill", + "file": "app/Http/Controllers/SkillsController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view active platform alerts", + "persona": "Guest", + "method": "AlertController::listAlertsv2", + "file": "app/Http/Controllers/API/AlertController.php", + "tests": [] + } + ], + "storyCount": 23, + "personas": [ + "Admin", + "Guest" + ] + }, + "Dashboard": { + "description": "User dashboard with personalised event and group information", + "sources": [ + "app/Http/Controllers/DashboardController.php" + ], + "stories": [ + { + "story": "As a Host, I can view the host dashboard", + "persona": "Host", + "method": "DashboardController::getHostDash", + "file": "app/Http/Controllers/DashboardController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can view my dashboard with upcoming events, my groups, and nearby groups", + "persona": "Restarter", + "method": "DashboardController::index", + "file": "app/Http/Controllers/DashboardController.php", + "tests": [] + } + ], + "storyCount": 2, + "personas": [ + "Host", + "Restarter" + ] + }, + "Devices": { + "description": "Repair device tracking and impact measurement", + "sources": [ + "app/Http/Controllers/API/ItemController.php", + "app/Http/Controllers/API/DeviceController.php", + "app/Http/Controllers/DeviceController.php" + ], + "stories": [ + { + "story": "As a Guest, I can view device details via the API", + "persona": "Guest", + "method": "DeviceController::getDevicev2", + "file": "app/Http/Controllers/API/DeviceController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view suggested item types for device records", + "persona": "Guest", + "method": "ItemController::listItemsv2", + "file": "app/Http/Controllers/API/ItemController.php", + "tests": [] + }, + { + "story": "As a Host, I can delete a device record from my event", + "persona": "Host", + "method": "DeviceController::deleteDevicev2", + "file": "app/Http/Controllers/API/DeviceController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can log a device repair at an event I attended", + "persona": "Restarter", + "method": "DeviceController::createDevicev2", + "file": "app/Http/Controllers/API/DeviceController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can delete device photos I've uploaded", + "persona": "Restarter", + "method": "DeviceController::deleteImage", + "file": "app/Http/Controllers/DeviceController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can upload photos of devices I've worked on", + "persona": "Restarter", + "method": "DeviceController::imageUpload", + "file": "app/Http/Controllers/DeviceController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can browse all devices and view global repair impact data", + "persona": "Restarter", + "method": "DeviceController::index", + "file": "app/Http/Controllers/DeviceController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can update a device repair record at an event I attended", + "persona": "Restarter", + "method": "DeviceController::updateDevicev2", + "file": "app/Http/Controllers/API/DeviceController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve device repair data via the API", + "persona": "ThirdParty", + "method": "DeviceController::getDevicev2", + "file": "app/Http/Controllers/API/DeviceController.php", + "tests": [] + } + ], + "storyCount": 9, + "personas": [ + "Guest", + "Host", + "Restarter", + "ThirdParty" + ] + }, + "Events": { + "description": "Community repair event management", + "sources": [ + "app/Http/Controllers/PartyController.php", + "app/Http/Controllers/API/EventController.php", + "app/Http/Controllers/CalendarEventsController.php" + ], + "stories": [ + { + "story": "As an Admin, I can view all events pending moderation", + "persona": "Admin", + "method": "EventController::moderateEventsv2", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a Guest, I can subscribe to events in my area as an iCal feed", + "persona": "Guest", + "method": "CalendarEventsController::allEventsByArea", + "file": "app/Http/Controllers/CalendarEventsController.php", + "tests": [] + }, + { + "story": "As a Guest, I can subscribe to a group's events as an iCal feed", + "persona": "Guest", + "method": "CalendarEventsController::allEventsByGroup", + "file": "app/Http/Controllers/CalendarEventsController.php", + "tests": [] + }, + { + "story": "As a Guest, I can subscribe to a network's events as an iCal feed", + "persona": "Guest", + "method": "CalendarEventsController::allEventsByNetwork", + "file": "app/Http/Controllers/CalendarEventsController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view event details via the API", + "persona": "Guest", + "method": "EventController::getEventv2", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view confirmed volunteers for an event", + "persona": "Guest", + "method": "EventController::listVolunteers", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a Guest, I can join an event using a shareable invite code", + "persona": "Guest", + "method": "PartyController::confirmCodeInvite", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view an event's repair impact statistics", + "persona": "Guest", + "method": "PartyController::stats", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view a public event's details and repair statistics", + "persona": "Guest", + "method": "PartyController::view", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can add a volunteer to my event", + "persona": "Host", + "method": "EventController::addVolunteer", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a Host, I can create an event via the API", + "persona": "Host", + "method": "EventController::createEventv2", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a Host, I can update my event via the API", + "persona": "Host", + "method": "EventController::updateEventv2", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a Host, I can access the form to create a new event for my group", + "persona": "Host", + "method": "PartyController::create", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can create an online event without a physical location", + "persona": "Host", + "method": "PartyController::create", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can delete an event from my group", + "persona": "Host", + "method": "PartyController::deleteEvent", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can duplicate an existing event to create a new one", + "persona": "Host", + "method": "PartyController::duplicate", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can edit my group's event details", + "persona": "Host", + "method": "PartyController::edit", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can request attendees log their repair contributions", + "persona": "Host", + "method": "PartyController::getContributions", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can retrieve group member emails to invite them to an event", + "persona": "Host", + "method": "PartyController::getGroupEmailsWithNames", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can send email invitations for an event", + "persona": "Host", + "method": "PartyController::postSendInvite", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can remove a volunteer from my event", + "persona": "Host", + "method": "PartyController::removeVolunteer", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can update the participant count for my event", + "persona": "Host", + "method": "PartyController::updateQuantity", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Host, I can update the volunteer count for my event", + "persona": "Host", + "method": "PartyController::updateVolunteerQuantity", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can list events across my networks", + "persona": "NetworkCoordinator", + "method": "EventController::getEventsByUsersNetworks", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can view events pending moderation in my networks", + "persona": "NetworkCoordinator", + "method": "EventController::moderateEventsv2", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can edit events for groups in my network", + "persona": "NetworkCoordinator", + "method": "PartyController::edit", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can subscribe to my events as an iCal feed", + "persona": "Restarter", + "method": "CalendarEventsController::allEventsByUser", + "file": "app/Http/Controllers/CalendarEventsController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can cancel my attendance at an event", + "persona": "Restarter", + "method": "PartyController::cancelInvite", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can accept an event invitation", + "persona": "Restarter", + "method": "PartyController::confirmInvite", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can delete my uploaded event photos", + "persona": "Restarter", + "method": "PartyController::deleteImage", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can RSVP to attend an upcoming event", + "persona": "Restarter", + "method": "PartyController::getJoinEvent", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can upload photos from an event", + "persona": "Restarter", + "method": "PartyController::imageUpload", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can view upcoming events and events near me", + "persona": "Restarter", + "method": "PartyController::index", + "file": "app/Http/Controllers/PartyController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve event details to display on my platform", + "persona": "ThirdParty", + "method": "EventController::getEventv2", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve volunteer data for an event via the API", + "persona": "ThirdParty", + "method": "EventController::listVolunteers", + "file": "app/Http/Controllers/API/EventController.php", + "tests": [] + } + ], + "storyCount": 35, + "personas": [ + "Admin", + "Guest", + "Host", + "NetworkCoordinator", + "Restarter", + "ThirdParty" + ] + }, + "Groups": { + "description": "Community repair group management and membership", + "sources": [ + "app/Http/Controllers/API/UserGroupsController.php", + "app/Http/Controllers/API/GroupController.php", + "app/Http/Controllers/GroupController.php" + ], + "stories": [ + { + "story": "As an Admin, I can delete a group that has no device records", + "persona": "Admin", + "method": "GroupController::delete", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As an Admin, I can list group audit changes for Zapier integration", + "persona": "Admin", + "method": "GroupController::getGroupChanges", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As an Admin, I can view all groups pending moderation", + "persona": "Admin", + "method": "GroupController::moderateGroupsv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As an Admin, I can list group membership changes for Zapier integration", + "persona": "Admin", + "method": "UserGroupsController::changes", + "file": "app/Http/Controllers/API/UserGroupsController.php", + "tests": [] + }, + { + "story": "As a Guest, I can join a group using a shareable invite code", + "persona": "Guest", + "method": "GroupController::confirmCodeInvite", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Guest, I can list events for a group via the API", + "persona": "Guest", + "method": "GroupController::getEventsForGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view group details via the API", + "persona": "Guest", + "method": "GroupController::getGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view a group's volunteers via the API", + "persona": "Guest", + "method": "GroupController::getVolunteersForGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Guest, I can get a list of group names via the API", + "persona": "Guest", + "method": "GroupController::listNamesv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Guest, I can get a list of group tags via the API", + "persona": "Guest", + "method": "GroupController::listTagsv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view a group's repair impact statistics", + "persona": "Guest", + "method": "GroupController::stats", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Host, I can remove my group's image", + "persona": "Host", + "method": "GroupController::ajaxDeleteImage", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Host, I can remove a volunteer from my group", + "persona": "Host", + "method": "GroupController::deleteVolunteerForGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Host, I can edit my group's details and settings", + "persona": "Host", + "method": "GroupController::edit", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Host, I can upload an image for my group", + "persona": "Host", + "method": "GroupController::imageUpload", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Host, I can change a volunteer's role in my group", + "persona": "Host", + "method": "GroupController::patchVolunteerForGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Host, I can send email invitations to join my group", + "persona": "Host", + "method": "GroupController::postSendInvite", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Host, I can update my group via the API", + "persona": "Host", + "method": "GroupController::updateGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can list all groups in my networks via the API", + "persona": "NetworkCoordinator", + "method": "GroupController::getGroupsByUsersNetworks", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can view groups pending moderation in my networks", + "persona": "NetworkCoordinator", + "method": "GroupController::moderateGroupsv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can browse all repair groups on the platform", + "persona": "Restarter", + "method": "GroupController::all", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can accept a group invitation", + "persona": "Restarter", + "method": "GroupController::confirmInvite", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can create a new repair group and become its Host", + "persona": "Restarter", + "method": "GroupController::create", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can create a new group via the API", + "persona": "Restarter", + "method": "GroupController::createGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can list all groups via the API", + "persona": "Restarter", + "method": "GroupController::getGroupList", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can join a repair group", + "persona": "Restarter", + "method": "GroupController::getJoinGroup", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can view the groups I belong to", + "persona": "Restarter", + "method": "GroupController::mine", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can discover repair groups near my location", + "persona": "Restarter", + "method": "GroupController::nearby", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can browse groups within a specific network", + "persona": "Restarter", + "method": "GroupController::network", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can view a group's details, events, and members", + "persona": "Restarter", + "method": "GroupController::view", + "file": "app/Http/Controllers/GroupController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can leave a group I belong to", + "persona": "Restarter", + "method": "UserGroupsController::leave", + "file": "app/Http/Controllers/API/UserGroupsController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve events for a group to display on my platform", + "persona": "ThirdParty", + "method": "GroupController::getEventsForGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve group details to display on my platform", + "persona": "ThirdParty", + "method": "GroupController::getGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve volunteer data for a group via the API", + "persona": "ThirdParty", + "method": "GroupController::getVolunteersForGroupv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve group names to display on my own platform", + "persona": "ThirdParty", + "method": "GroupController::listNamesv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve group tags to categorise groups on my platform", + "persona": "ThirdParty", + "method": "GroupController::listTagsv2", + "file": "app/Http/Controllers/API/GroupController.php", + "tests": [] + } + ], + "storyCount": 36, + "personas": [ + "Admin", + "Guest", + "Host", + "NetworkCoordinator", + "Restarter", + "ThirdParty" + ] + }, + "Networks": { + "description": "Regional network management and coordination", + "sources": [ + "app/Http/Controllers/NetworkController.php", + "app/Http/Controllers/API/NetworkController.php" + ], + "stories": [ + { + "story": "As an Admin, I can view all networks on the platform", + "persona": "Admin", + "method": "NetworkController::index", + "file": "app/Http/Controllers/NetworkController.php", + "tests": [] + }, + { + "story": "As a Guest, I can list events for a network via the API", + "persona": "Guest", + "method": "NetworkController::getNetworkEventsv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a Guest, I can list groups for a network via the API", + "persona": "Guest", + "method": "NetworkController::getNetworkGroupsv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a Guest, I can list all networks via the API", + "persona": "Guest", + "method": "NetworkController::getNetworksv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view network details via the API", + "persona": "Guest", + "method": "NetworkController::getNetworkv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can add groups to my network", + "persona": "NetworkCoordinator", + "method": "NetworkController::associateGroup", + "file": "app/Http/Controllers/NetworkController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can access the form to edit my network", + "persona": "NetworkCoordinator", + "method": "NetworkController::edit", + "file": "app/Http/Controllers/NetworkController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can view the networks I coordinate", + "persona": "NetworkCoordinator", + "method": "NetworkController::index", + "file": "app/Http/Controllers/NetworkController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can view my network's details and statistics", + "persona": "NetworkCoordinator", + "method": "NetworkController::show", + "file": "app/Http/Controllers/NetworkController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can view my network's statistics via the API", + "persona": "NetworkCoordinator", + "method": "NetworkController::stats", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can update my network's details and logo", + "persona": "NetworkCoordinator", + "method": "NetworkController::update", + "file": "app/Http/Controllers/NetworkController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve events for a network to display on my platform", + "persona": "ThirdParty", + "method": "NetworkController::getNetworkEventsv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve groups for a network to display on my platform", + "persona": "ThirdParty", + "method": "NetworkController::getNetworkGroupsv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve all networks to display on my platform", + "persona": "ThirdParty", + "method": "NetworkController::getNetworksv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve network details via the API", + "persona": "ThirdParty", + "method": "NetworkController::getNetworkv2", + "file": "app/Http/Controllers/API/NetworkController.php", + "tests": [] + } + ], + "storyCount": 15, + "personas": [ + "Admin", + "Guest", + "NetworkCoordinator", + "ThirdParty" + ] + }, + "Platform": { + "description": "Platform-wide statistics and public impact data", + "sources": [ + "app/Http/Controllers/OutboundController.php", + "app/Http/Controllers/InformationAlertCookieController.php", + "app/Http/Controllers/ApiController.php", + "app/Http/Controllers/API/DiscourseController.php", + "app/Http/Controllers/HomeController.php", + "app/Http/Controllers/LocaleController.php", + "app/Http/Controllers/ExportController.php", + "app/Http/Controllers/AdminController.php" + ], + "stories": [ + { + "story": "As an Admin, I can retrieve a list of all users via the API", + "persona": "Admin", + "method": "ApiController::getUserList", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view the platform's global repair impact statistics", + "persona": "Guest", + "method": "AdminController::stats", + "file": "app/Http/Controllers/AdminController.php", + "tests": [] + }, + { + "story": "As a Guest, I can search and filter device records via the API", + "persona": "Guest", + "method": "ApiController::getDevices", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view repair statistics for a specific group", + "persona": "Guest", + "method": "ApiController::groupStats", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view aggregate platform impact statistics", + "persona": "Guest", + "method": "ApiController::homepage_data", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view repair statistics for a specific event", + "persona": "Guest", + "method": "ApiController::partyStats", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view recent community discussion topics", + "persona": "Guest", + "method": "DiscourseController::discussionTopics", + "file": "app/Http/Controllers/API/DiscourseController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view the landing page with platform impact statistics", + "persona": "Guest", + "method": "HomeController::index", + "file": "app/Http/Controllers/HomeController.php", + "tests": [] + }, + { + "story": "As a Guest, I can dismiss an information alert banner", + "persona": "Guest", + "method": "InformationAlertCookieController::__invoke", + "file": "app/Http/Controllers/InformationAlertCookieController.php", + "tests": [] + }, + { + "story": "As a Guest, I can switch the application language", + "persona": "Guest", + "method": "LocaleController::setLang", + "file": "app/Http/Controllers/LocaleController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view embeddable CO2 impact visualisations for events and groups", + "persona": "Guest", + "method": "OutboundController::info", + "file": "app/Http/Controllers/OutboundController.php", + "tests": [] + }, + { + "story": "As a NetworkCoordinator, I can export my network's event summary as CSV", + "persona": "NetworkCoordinator", + "method": "ExportController::networkEvents", + "file": "app/Http/Controllers/ExportController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can retrieve my own profile information via the API", + "persona": "Restarter", + "method": "ApiController::getUserInfo", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can export all device records as CSV", + "persona": "Restarter", + "method": "ExportController::devices", + "file": "app/Http/Controllers/ExportController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can export device data from an event as CSV", + "persona": "Restarter", + "method": "ExportController::devicesEvent", + "file": "app/Http/Controllers/ExportController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can export device data from a group as CSV", + "persona": "Restarter", + "method": "ExportController::devicesGroup", + "file": "app/Http/Controllers/ExportController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can export a group's event summary as CSV", + "persona": "Restarter", + "method": "ExportController::groupEvents", + "file": "app/Http/Controllers/ExportController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can search and retrieve device records via the API", + "persona": "ThirdParty", + "method": "ApiController::getDevices", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve group repair statistics for embedding", + "persona": "ThirdParty", + "method": "ApiController::groupStats", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve aggregate platform impact data for embedding", + "persona": "ThirdParty", + "method": "ApiController::homepage_data", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can retrieve event repair statistics for embedding", + "persona": "ThirdParty", + "method": "ApiController::partyStats", + "file": "app/Http/Controllers/ApiController.php", + "tests": [] + }, + { + "story": "As a ThirdParty, I can embed CO2 impact widgets for events and groups on my platform", + "persona": "ThirdParty", + "method": "OutboundController::info", + "file": "app/Http/Controllers/OutboundController.php", + "tests": [] + } + ], + "storyCount": 22, + "personas": [ + "Admin", + "Guest", + "NetworkCoordinator", + "Restarter", + "ThirdParty" + ] + }, + "Users": { + "description": "User accounts, profiles, and authentication", + "sources": [ + "app/Http/Controllers/UserController.php", + "app/Http/Controllers/Auth/LoginController.php", + "app/Http/Controllers/API/UserController.php" + ], + "stories": [ + { + "story": "As an Admin, I can view and search all users on the platform", + "persona": "Admin", + "method": "UserController::all", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As an Admin, I can list user audit changes for Zapier integration", + "persona": "Admin", + "method": "UserController::changes", + "file": "app/Http/Controllers/API/UserController.php", + "tests": [] + }, + { + "story": "As an Admin, I can create a new user account", + "persona": "Admin", + "method": "UserController::create", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As an Admin, I can edit any user's account details", + "persona": "Admin", + "method": "UserController::edit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As an Admin, I can edit a user's role, groups, and permissions", + "persona": "Admin", + "method": "UserController::postAdminEdit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As an Admin, I can change a user's Repair Directory role", + "persona": "Admin", + "method": "UserController::postProfileRepairDirectory", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As an Admin, I can delete a user's account", + "persona": "Admin", + "method": "UserController::postSoftDeleteUser", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As an Admin, I can filter and search the user list", + "persona": "Admin", + "method": "UserController::search", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Guest, I can log in to the platform", + "persona": "Guest", + "method": "LoginController::login", + "file": "app/Http/Controllers/Auth/LoginController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view the login page", + "persona": "Guest", + "method": "LoginController::showLoginForm", + "file": "app/Http/Controllers/Auth/LoginController.php", + "tests": [] + }, + { + "story": "As a Guest, I can view the registration page", + "persona": "Guest", + "method": "UserController::getRegister", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Guest, I can register a new account", + "persona": "Guest", + "method": "UserController::postRegister", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Guest, I can request a password recovery email", + "persona": "Guest", + "method": "UserController::recover", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Guest, I can reset my password using a recovery code", + "persona": "Guest", + "method": "UserController::reset", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can view my notifications", + "persona": "Restarter", + "method": "UserController::getNotifications", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can complete my onboarding process", + "persona": "Restarter", + "method": "UserController::getOnboardingComplete", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can access the form to edit my profile", + "persona": "Restarter", + "method": "UserController::getProfileEdit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can view my profile or another user's profile", + "persona": "Restarter", + "method": "UserController::index", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can log out of my account", + "persona": "Restarter", + "method": "UserController::logout", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can update my profile information", + "persona": "Restarter", + "method": "UserController::postProfileInfoEdit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can change my password", + "persona": "Restarter", + "method": "UserController::postProfilePasswordEdit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can upload a new profile picture", + "persona": "Restarter", + "method": "UserController::postProfilePictureEdit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can update my notification preferences", + "persona": "Restarter", + "method": "UserController::postProfilePreferencesEdit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can update my repair skills", + "persona": "Restarter", + "method": "UserController::postProfileTagsEdit", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can delete my own account", + "persona": "Restarter", + "method": "UserController::postSoftDeleteUser", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + }, + { + "story": "As a Restarter, I can change my preferred language", + "persona": "Restarter", + "method": "UserController::storeLanguage", + "file": "app/Http/Controllers/UserController.php", + "tests": [] + } + ], + "storyCount": 26, + "personas": [ + "Admin", + "Guest", + "Restarter" + ] + } + }, + "personas": { + "Admin": { + "features": [ + "Administration", + "Events", + "Groups", + "Networks", + "Platform", + "Users" + ], + "storyCount": 37 + }, + "Guest": { + "features": [ + "Administration", + "Devices", + "Events", + "Groups", + "Networks", + "Platform", + "Users" + ], + "storyCount": 38 + }, + "Host": { + "features": [ + "Dashboard", + "Devices", + "Events", + "Groups" + ], + "storyCount": 23 + }, + "NetworkCoordinator": { + "features": [ + "Events", + "Groups", + "Networks", + "Platform" + ], + "storyCount": 12 + }, + "Restarter": { + "features": [ + "Dashboard", + "Devices", + "Events", + "Groups", + "Platform", + "Users" + ], + "storyCount": 41 + }, + "ThirdParty": { + "features": [ + "Devices", + "Events", + "Groups", + "Networks", + "Platform" + ], + "storyCount": 17 + } + }, + "coverage": { + "annotatedStories": 168, + "storiesWithTests": 0 + } +} diff --git a/docs/specs/narratives/administration.md b/docs/specs/narratives/administration.md new file mode 100644 index 0000000000..165710ac57 --- /dev/null +++ b/docs/specs/narratives/administration.md @@ -0,0 +1,19 @@ + +# Administration + +Platform administration covers the configuration and management of the system's reference data and settings. This includes device categories (with their environmental impact factors), device brands, repair skills, group tags, user roles and permissions, and platform-wide alerts. + +## What Admins can do + +Admins manage all reference data for the platform: + +- **Categories** -- View, edit, and configure device categories with CO2 footprints and weight factors that drive impact calculations +- **Brands** -- Create, edit, and delete device brands used in repair logging +- **Skills** -- Create, edit, and delete repair skills that volunteers can add to their profiles +- **Group Tags** -- Create, edit, and delete tags used to categorise groups +- **Roles** -- View all roles and edit the permissions assigned to each +- **Alerts** -- Create and update platform-wide alert banners shown to all users + +## What Guests can do + +Guests can view currently active platform alerts. diff --git a/docs/specs/narratives/dashboard.md b/docs/specs/narratives/dashboard.md new file mode 100644 index 0000000000..a0c9613017 --- /dev/null +++ b/docs/specs/narratives/dashboard.md @@ -0,0 +1,12 @@ + +# Dashboard + +The dashboard is the authenticated user's home page, providing a personalised overview of their repair community activity. + +## What Restarters can do + +Restarters see a dashboard with upcoming events they're attending, their groups, nearby groups, and recently created groups in their area. The dashboard also surfaces recent discussion topics from Discourse (Talk). + +## What Hosts can do + +Hosts have access to a dedicated host dashboard view with management-focused information about their groups and events. diff --git a/docs/specs/narratives/devices.md b/docs/specs/narratives/devices.md new file mode 100644 index 0000000000..8c520f7152 --- /dev/null +++ b/docs/specs/narratives/devices.md @@ -0,0 +1,20 @@ + +# Devices + +Devices represent items brought to repair events. Each device record captures what was brought, its category, brand, repair status (fixed, repairable, end-of-life), and the environmental impact prevented. This data powers the platform's impact statistics -- waste diverted and CO2 emissions prevented. + +## What Restarters can do + +Restarters who attended an event can log device repairs, update existing records, upload photos of devices they worked on, and delete their uploaded photos. They can also browse all devices and view global repair impact data on the Fixometer page. + +## What Hosts can do + +Hosts can delete device records from their events and perform any device action that Restarters can for events belonging to their group. + +## What Guests can do + +Guests can view device details and browse suggested item types via the public API. + +## What ThirdParties can do + +External organisations can retrieve device repair data via the public API for analysis or display on their own platforms. diff --git a/docs/specs/narratives/events.md b/docs/specs/narratives/events.md new file mode 100644 index 0000000000..0e9a8a3099 --- /dev/null +++ b/docs/specs/narratives/events.md @@ -0,0 +1,28 @@ + +# Events + +Community repair events are the core activity of Restarters. Groups organise events where volunteers come together to repair broken items brought in by the public. Events can be physical (at a venue) or online. + +## What Hosts can do + +Hosts manage the full lifecycle of events for their groups. They create events with a date, time, and location (or mark them as online), edit details, duplicate past events as templates, and delete events when needed. Hosts invite volunteers by email, manage RSVPs, update participant and volunteer counts, and record walk-in attendees. After an event, Hosts can request that attendees log the devices they repaired. + +## What NetworkCoordinators can do + +NetworkCoordinators have oversight of events across all groups in their network. They can edit events, moderate events pending approval, and list events across their network via the API. + +## What Admins can do + +Admins can moderate all events pending approval across the entire platform and perform any action a Host or NetworkCoordinator can. + +## What Restarters can do + +Restarters browse upcoming events, view events near them, RSVP to attend, accept or cancel invitations, and upload photos from events they attended. They can also subscribe to event calendars via iCal feeds. + +## What Guests can do + +Guests (unauthenticated visitors) can view public event details and repair impact statistics, subscribe to iCal calendar feeds for groups, networks, or geographic areas, and join events using shareable invite codes. + +## What ThirdParties can do + +External organisations can retrieve event details, volunteer data, and event listings for networks and groups via the public API to display on their own platforms. diff --git a/docs/specs/narratives/groups.md b/docs/specs/narratives/groups.md new file mode 100644 index 0000000000..9570c4e7dd --- /dev/null +++ b/docs/specs/narratives/groups.md @@ -0,0 +1,28 @@ + +# Groups + +Repair groups are the organisational unit of Restarters. Each group represents a local community of repair volunteers who come together to run events. Groups have a name, location, description, and can belong to one or more networks. + +## What Hosts can do + +Hosts manage their group's details, settings, and membership. They edit group information, upload images, send email invitations to join, manage volunteer roles (promoting members to Host or demoting them), and remove volunteers. Hosts can also update their group via the API. + +## What NetworkCoordinators can do + +NetworkCoordinators oversee groups within their networks. They can list all groups in their networks, view groups pending moderation, approve groups, and manage group-network associations. They can also remove volunteers and change roles for groups in their network. + +## What Admins can do + +Admins can view all groups pending moderation across the platform, delete groups (only if they have no device records), and list group audit changes for Zapier integration. + +## What Restarters can do + +Restarters can browse all groups, view groups they belong to, discover nearby groups, browse groups within a network, and join or leave groups. Creating a new group automatically promotes a Restarter to Host. Restarters can also accept group invitations and list groups via the API. + +## What Guests can do + +Guests can view group details, repair statistics, volunteer lists, events, and tags via the public API. They can also join groups using shareable invite codes. + +## What ThirdParties can do + +External organisations can retrieve group names, tags, details, events, and volunteer data via the public API to display on their own platforms. diff --git a/docs/specs/narratives/networks.md b/docs/specs/narratives/networks.md new file mode 100644 index 0000000000..619bf98834 --- /dev/null +++ b/docs/specs/narratives/networks.md @@ -0,0 +1,20 @@ + +# Networks + +Networks are regional organisations that groups can belong to. They provide a layer of coordination and oversight above individual groups -- for example, a national repair network might coordinate dozens of local repair groups. + +## What NetworkCoordinators can do + +NetworkCoordinators manage their assigned networks. They can view their networks, see network details and statistics, edit network information and upload logos, and add groups to their network. They can also view network statistics via the API. + +## What Admins can do + +Admins can view all networks on the platform and perform any action a NetworkCoordinator can across all networks. + +## What Guests can do + +Guests can list all networks, view network details, and browse a network's groups and events via the public API. + +## What ThirdParties can do + +External organisations can retrieve network listings, details, groups, and events via the public API to display on their own platforms. diff --git a/docs/specs/narratives/platform.md b/docs/specs/narratives/platform.md new file mode 100644 index 0000000000..015f046433 --- /dev/null +++ b/docs/specs/narratives/platform.md @@ -0,0 +1,24 @@ + +# Platform + +Platform-wide features that serve the public face of Restarters -- the landing page, global impact statistics, data exports, embeddable widgets, and integration points used by external sites. + +## What Guests can do + +Guests can view the landing page with platform impact statistics, switch the application language, dismiss alert banners, view recent community discussion topics from Discourse, and access embeddable CO2 impact visualisations for events and groups. They can also view aggregate statistics, search and filter device records, and view per-event and per-group repair statistics via the API. + +## What Restarters can do + +Restarters can export device data from events, groups, or the entire platform as CSV files. They can also export event summaries for groups and retrieve their profile information via the API. + +## What NetworkCoordinators can do + +NetworkCoordinators can export event summaries for their networks as CSV files. + +## What Admins can do + +Admins can retrieve a list of all users via the API. + +## What ThirdParties can do + +External organisations can retrieve aggregate platform impact data, event and group repair statistics, search device records, and embed CO2 impact widgets on their own platforms. diff --git a/docs/specs/narratives/users.md b/docs/specs/narratives/users.md new file mode 100644 index 0000000000..3fb0a1654f --- /dev/null +++ b/docs/specs/narratives/users.md @@ -0,0 +1,16 @@ + +# Users + +Users are the people who participate in the Restarters community. The platform supports four roles: Admin (full oversight), Host (manages groups and events), Restarter (attends events and logs repairs), and NetworkCoordinator (regional oversight). Users authenticate via a single sign-on system that spans Restarters, Discourse (Talk), and MediaWiki (Wiki). + +## What Guests can do + +Guests can view the registration page, register a new account, log in, request password recovery, and reset their password. + +## What Restarters can do + +Restarters manage their own profile -- updating personal information, changing their password, uploading a profile picture, setting their preferred language, and managing notification preferences and repair skills. They can view other users' profiles, view their notifications, complete onboarding, and delete their own account. They can also log out and retrieve their profile via the API. + +## What Admins can do + +Admins have full user management capabilities. They can view and search all users, create new accounts, edit any user's details (including role, groups, and permissions), change Repair Directory roles, and delete user accounts. Admin changes are tracked for Zapier integration. diff --git a/features/01-Overview/1-Vision.feature b/features/01-Overview/1-Vision.feature deleted file mode 100644 index d11a9cbee6..0000000000 --- a/features/01-Overview/1-Vision.feature +++ /dev/null @@ -1,15 +0,0 @@ -Feature: 1 Vision - -The Fixometer is a data collection and visualisation tool that lets repair -organisations easily and conveniently collect information on repairs, and -visualise the impact of those repairs. - -The Fixometer fits into the Restart Project's vision of changing the world's -relationship with electronics, by providing a platform for the collection of -open repair data. It was the initial phase of our development of the open repair -data standard, which will allow for open repair data to be collected and pooled -together from multiple organisations using different tools. The Fixometer -continues to be developed as the flagship and archetype tool for open repair -data collection. - -For further information, see https://therestartproject.org/fixometer. \ No newline at end of file diff --git a/features/01-Overview/2-Goals.feature b/features/01-Overview/2-Goals.feature deleted file mode 100644 index 57a6640f45..0000000000 --- a/features/01-Overview/2-Goals.feature +++ /dev/null @@ -1,5 +0,0 @@ -Feature: 2 Goals - -* Increase quantity and quality of repair data that is collected electronically. -* Enthuse repair volunteers and activists around the world - diff --git a/features/01-Overview/3- Capabilities.feature b/features/01-Overview/3- Capabilities.feature deleted file mode 100644 index 1b9a269aae..0000000000 --- a/features/01-Overview/3- Capabilities.feature +++ /dev/null @@ -1,31 +0,0 @@ -Feature: 3 Capabitilies - -* Ability to record Restart volunteers within the system - * With corresponding data capture on: - * Name (could be a pseudonym) - * Location - * Email - * Age (within ranges) - * Gender (?) -* Ability for self-registration/onboarding of volunteers -* Profile completion -* Opt-in to the uses of the system -* Ability to record time volunteered by volunteers, by linking Restarters to events -* Ability to report on time volunteered -* Filtered by age and location -* Ability to tag groups for reporting purposes - -* To recognise service - for Hosts and Restarters to see time volunteered -* To have a record of who was in attendance in the case of any liability issues -* To potentially send event reports to Restarters -* To allow Restarters edit access to device data, to improve it -* To allow for invite and private RSVP for scheduled events -* To allow for export of time-related data in a way that would help time-bankers -* To understand and monitor patterns in Restarter participation, based on region, age and other data -* To integrate with our onboarding of volunteers globally – to a communication platform, and to the Wiki -* To reinforce best practice, safety and community values -* To allow for open feedback on a given event – a bit like a graffiti wall for volunteers, that is a safe space -* To allow Restarters opportunity to get credit for device fixes and get a history -* To allow unaffiliated Restarters to sign up - detect areas with numerous volunteers -* Help hosts find restarters in their area -* To allow for photos of devices by Restarters \ No newline at end of file diff --git a/features/01-Overview/4-Glossary.feature b/features/01-Overview/4-Glossary.feature deleted file mode 100644 index 48013ce7fd..0000000000 --- a/features/01-Overview/4-Glossary.feature +++ /dev/null @@ -1,110 +0,0 @@ -Feature: 4 Glossary - -Event (AKA Restart Party) -: Free community electronics repair event. People join us to fix their broken -electronics. At events, Restart Party Hosts log the status of devices, and -afterwards feed into our online database. - -Participant AKA Owner -: A participant is someone who brings a device to an event for repair. -Who comes to events? People who are frustrated with our throwaway culture, -people who cannot afford to buy new, people who are curious to get inside -their black-box gadgets. In our experience, an equal number of men and women -bring gadgets for repair, and participants come from all walks of life. - -Device (AKA item) -: Devices are brought to events in order to be fixed. -What is a device? A wide range of items from laptops through to toasters. -Devices are categorised into device categories. - -Device categories. -: There are 34 device categories. - -Category cluster. -: Devices categories are split into four clusters: computers and home office, -electronic gadgets, home entertainment, kitchen and household items. - -Repairers AKA Restarters. -: We call our volunteer repairers "Restarters". They are talented amateurs, -with various backgrounds and experience. Owners get involved in the repair, -helping troubleshoot, disassemble and sometimes fix their own electronics. - -Calculations -: For each category we maintain data on the average weight; data on how -repaired devices displace new devices (which is where the environmental -benefit comes in); and data on the carbon footprint to manufacture each type -of electrical device. - -Representative products -: A product which we deem to be representative of a particular category. - -Average weight -: We used the Furniture Reuse Network’s 2009 data as a starting point, updated -some figures, and sourced more online, as averages of representative products. - -Displacement rate -: The rate by which we prevent a new manufacture. Our biggest – and most -necessary – assumption is that a fix at a Restart Party displaces a new -manufacture by 50%. That is, that a repaired device will live on for an extra -50% more than its intended life. - -Carbon footprint -: The amount of carbon required to manufacture each type of electrical device. - -Data quality indicators -: Data quality indicators are used in carbon footprinting to ensure that the -accuracy of each datapoint is understood and transparent. - -Repairability -: Many devices leave a Restart Party that seem worthy of more effort. -Some need spare parts that we don’t have at our immediate disposal. -Sometimes device owners go home ready to finish the job themselves – this -occurs in about 4.6% of cases. Others are referred to professional repairers. -These are recorded as “repairable”. - -End-of-life -: A device is labelled "end-of-life" when a Restarter and the owner decide it -is not cost-effective or realistic to repair the device. - -Reuse opportunity -: We encourage owners of end-of-life devices to seek out a reuse opportunity -before taking them to be recycled. This is the most resource-efficient option. -Many devices can be sold or given away for parts. But ultimately, we would like -to see devices recycled so that their materials can be recovered. - -Types of fixes -: There can be software fixes or hardware fixes. -Many of our fixes are software related. Issues related to software contribute -to a feeling of "perceived obsolescence", and motivate an owner of a device to -abandon it, when a simple software fix can address the frustrations of a user -and prolong the lifecycle of a gadget. In fact, often times mobiles, tablets -and laptops can refuse to boot due to software problems. With laptops, -software fixes are just as common as hardware ones. - -Fix frequency -: The total amount of times particular devices are fixed at our events. -Devices that are *brought* frequently may have a high fix frequency. -Laptops, mobiles, and small kitchen items are brought frequently and as a -result have a high fix frequency. - -Fix rates -: Different from the fix frequency, this is the ratio that devices brought to -event ends up being fixed vs not fixed. The fix rate could then be an indicator -of repairability of a particular category (although other factors, such as skill -sets of repairers, also have a factor.) Musical instruments, toys, headphones -and lamps have high fix rates. Flat screens and heating/cooling appliances have -low fix rates (however they are not that frequently brought to events.) -We also have trouble with PC accessories like mice, keyboards, and computer -speakers, kettles, decorative and/or safety lights. - -Spare parts -: 18.8% of repairs require spare parts. In exceptional cases, especially for -screen repairs, participants bring the parts with them and we are able to fix -the device on the spot. Most require follow-up by the device owner. -Spare parts for some devices and categories of devices are found for sale -online. - - - - -NOTE - start making notes on which terminology is likely to be different across clients of the software. \ No newline at end of file diff --git a/features/01-Overview/5-Personas.feature b/features/01-Overview/5-Personas.feature deleted file mode 100644 index 3abdd1857a..0000000000 --- a/features/01-Overview/5-Personas.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Personas - -* Professor Hubert J. Farnsworth is an Admin. -* Fry is a Restart Host with the group Planet Express. \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/01-Features_Onboarding.feature b/features/02-Login_Register_Onboarding/01-Features_Onboarding.feature deleted file mode 100644 index ceeb457760..0000000000 --- a/features/02-Login_Register_Onboarding/01-Features_Onboarding.feature +++ /dev/null @@ -1,28 +0,0 @@ -Feature: Features/Onboarding - As a prospective user - In order to find out about why I should join the Restarters community - I want to see an easy-to-understand overview of the benefits of joining - -Scenario: Unregistered user views onboarding information - Given the user is unregistered - When the user visits the features page - Then the user should be presented with the onboarding text and images - -# Registered users should be able to view the onboarding information if they want to. -Scenario: Registered user views onboarding information - Given the user is registered - When the user visits the features page - Then the user should be presented with the onboarding text and images - -Scenario: Unregistered user starts sign up process - Given the user is unregistered - When the user visits the features page - And clicks the sign up button - Then they will land on select skills page - -Scenario: Registered user starts sign up process - Given the user is registered - When the user visits the features page - And clicks the sign up button - Then they will be shown a message saying 'You are already registered!' - And they will be taken to the dashboard \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/02-Register/01-SelectSkills.feature b/features/02-Login_Register_Onboarding/02-Register/01-SelectSkills.feature deleted file mode 100644 index 073a6331ee..0000000000 --- a/features/02-Login_Register_Onboarding/02-Register/01-SelectSkills.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Selecting skills - As a community organiser - In order to help group hosts organise their events - I want volunteers to list their skills when they join - - As a volunteer - In order to help hosts assign me to tasks during events - I want to list my skills when I register - -Scenario: User selects some skills and clicks next - Given the user is registering and is on the select skills step - When the user selects at least one option from the list of skills - And click on Next step button - Then the user lands on About and Register page - -# Although useful, selecting skills is optional. -Scenario: User selects no skills and clicks next - Given the user is registering and is on the select skills step - When the user does not select any option from the list of skills - And click on Next Step button - Then the user lands on About and Register page \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/02-Register/02-AboutRegister.feature b/features/02-Login_Register_Onboarding/02-Register/02-AboutRegister.feature deleted file mode 100644 index d598745917..0000000000 --- a/features/02-Login_Register_Onboarding/02-Register/02-AboutRegister.feature +++ /dev/null @@ -1,31 +0,0 @@ -Feature: About and Register - As a user - In order to complete the sign up process - I want to be able to fill the fields in tell us about yourself section - - Background: - Given the user accounts have not been created yet - -Scenario: Filling the details correctly -# The fields marked with asterick are mandatory to fill - When a user enters all the data needed as follows - | Your name | Age | Gender | Email Address | Country | Town/City (optional) | Password | Repeat password | - | hubert | hubert! | Admin | hubert@planetexpress.com | Australia | | dfgdf | dfgdf | - | fry | fry! | Host | fry@planetexpress.com | UK | London | !fghg | !fghg | - And clicks on next step button - Then the user is taken to Email alert preference page - -Scenario: Password Validation -# Password validation rules - When a user types the password in confirm password field, it should match with password entered before in the password field - And the password should be equal to or more than six characters - Then the user will be set up with new password and continue to next process. - -Scenario: User wants to go to previous step - When a user wants to go to previous step, click Previous step link - Then the user lands on previous page i.e., select skills page - -Scenario: User can only signup to the application if age>=18 - When a user wants to signup for the application, in the age field there is a restriction of age>=18 - And the user can select the year from the dropdown - Then the user can enter the year if greater than or equal to 18. \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/02-Register/03-EmailPreferences.feature b/features/02-Login_Register_Onboarding/02-Register/03-EmailPreferences.feature deleted file mode 100644 index cd9ae0e272..0000000000 --- a/features/02-Login_Register_Onboarding/02-Register/03-EmailPreferences.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: Email Preferences - As a User - In order to get notified by the Restart Project - I should signup for email alerts and save the preferences - - Background: - Given the user accounts have not been created yet - -Scenario: Check Email preferences - When a user wants to get notified by the Restart Project - And ticking-off the checkbox and click on next step button - Then she should land on Data consent page. - -Scenario: User wants to go to previous step - When a user wants to go to previous step, click Previous step link - Then the user lands on previous page i.e., select skills page \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/02-Register/04-DataConsent.feature b/features/02-Login_Register_Onboarding/02-Register/04-DataConsent.feature deleted file mode 100644 index 05478d5973..0000000000 --- a/features/02-Login_Register_Onboarding/02-Register/04-DataConsent.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: Data Consent - As a User - In order to know how my data is to be used - I should give my acceptance to Restartproject - - Background: - Given the user accounts have not been created yet - -Scenario: Check preferences - When a user gives acceptance to his/her data to be used by the Restartproject - And ticking-off the checkbox and click on Complete my profile button - Then user should land on dashboard page with pop up of onboarding process. - -Scenario: User wants to go to previous step - When a user wants to go to previous step, click Previous step link - Then the user lands on previous page i.e., select skills page \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/02-Register/05-CompleteRegistration.feature b/features/02-Login_Register_Onboarding/02-Register/05-CompleteRegistration.feature deleted file mode 100644 index 469d9d687e..0000000000 --- a/features/02-Login_Register_Onboarding/02-Register/05-CompleteRegistration.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: Complete Registration - As a User - In order to use the community platform and view all the events and other platforms - I should register myself onto the community platform and the system should create an account when I register. - -Background: - Given the following account have been created as a user - | Email | Password | - | jenny@google.co.uk | dean1 | - -Scenario: System creating an account when I register - When a user gets registere themselves on the community platform - Then an account should be created within the system. - -Scenario: Creating accounts on Wiki and Discourse. - When a user creats an account onto the system - Then the user would automatically creates an account on Wiki and Discourse with same details - And directly login in wiki and discourse. \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/02-Register/Registering-a-new-account.feature b/features/02-Login_Register_Onboarding/02-Register/Registering-a-new-account.feature deleted file mode 100644 index 7f27a17638..0000000000 --- a/features/02-Login_Register_Onboarding/02-Register/Registering-a-new-account.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Registering a new account - -Scenario: valid registration - Given I am on the registration page - # Navigate to https://restarters.dev/user/register - When I complete all of the registration details - # Fill in values for step 1: skills - # Fill in values for step 2: profile and account info - # Fill in values for step 3: newsletter opt-in - # Fill in values for step 4: data consent - And I complete my registration - # Click the register button - Then an account is created for me - # Check you have a new account and are on the dashboard diff --git a/features/02-Login_Register_Onboarding/03-SignIn.feature b/features/02-Login_Register_Onboarding/03-SignIn.feature deleted file mode 100644 index 1188f50650..0000000000 --- a/features/02-Login_Register_Onboarding/03-SignIn.feature +++ /dev/null @@ -1,24 +0,0 @@ -Feature: User Authentication - As a user - In order to perform what I want to do on the site - I want to be able to log in - -Background: - Given the following user accounts have been created - | Email | Password | - | fry@planetexpress.com | fry! | - -Scenario: Valid login - When a user logs in with email "fry@planetexpress.com" and password "fry!" - Then the user is logged in as "Fry" with email "fry@planetexpress.com" - -Scenario: Valid login with alternate case email -# Emails are case-insensitive. - When a user logs in with email "FRY@PlAnetExPreSs.com" and password "fry!" - Then the user is logged in as "Fry" with email "fry@planetexpress.com" - -Scenario: Invalid login due to password casing -# Passwords are case-sensitive. - When a user logs in with email "fry@planetexpress.com" and password "FRY!" - Then the user is not logged in - And a message is displayed to the user letting them know they have not been logged in diff --git a/features/02-Login_Register_Onboarding/04-ForgotPassword.feature b/features/02-Login_Register_Onboarding/04-ForgotPassword.feature deleted file mode 100644 index c573eaf4af..0000000000 --- a/features/02-Login_Register_Onboarding/04-ForgotPassword.feature +++ /dev/null @@ -1,29 +0,0 @@ -Feature: Forgot Password - As a User - In order to get a new password - I should be able to do that in forgot password page. - - Given the following user accounts have been created - | Email | Role | - | hubert@planetexpress.com | User | - -Scenario: Forgot Password - When a user completes the fields as follows - | Email address | - | hubert@planetexpress.com | - And clicks on reset button - Then user should land on same page with a message saying the please check your email and follow. - -Scenario: Invalid email ID - When a user enters wrong email id or the email id is not present in database - And clicks reset button - Then the user lands on same page with an error. - -Scenario: I remembered Password - When a user remembers the password - And clicks on the link I remembered. Let me sign in - Then the user lands on login page. - -Scenario: User triggers password reset request email - When the user clicks the forgot password link - Then the user would receive an email to his registered email account, to reset password. diff --git a/features/02-Login_Register_Onboarding/05-ResetPassword.feature b/features/02-Login_Register_Onboarding/05-ResetPassword.feature deleted file mode 100644 index bc1c71d5f1..0000000000 --- a/features/02-Login_Register_Onboarding/05-ResetPassword.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Reset Password - As a User - In order to reset my password - I should be able to do that in password reset page. - - Given the following user accounts have been created - | Email | Role | - | hubert@planetexpress.com | User | - -Scenario: Reset Password - When a user fills the data as follows - | Password | Repeat password | - | hubert! | hubert! | - And clicks on change password button - Then user should land on login page with a message saying the password has been successfully changed. - -Scenario: Password Validation -# Password validation rules - When a user types the password in confirm password field, it should match with password entered before in the password field - And the password should be equal to or more than six characters - Then the user will be set up with new password and continue to next process. \ No newline at end of file diff --git a/features/02-Login_Register_Onboarding/SSO/Login-to-Discourse.feature b/features/02-Login_Register_Onboarding/SSO/Login-to-Discourse.feature deleted file mode 100644 index 1fc123c57f..0000000000 --- a/features/02-Login_Register_Onboarding/SSO/Login-to-Discourse.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Automatic login to Discourse - -Scenario: logging in to Restarters logs in to Discourse - Given I login with a valid user - # Navigate to https://restarters.dev - # Enter valid login details - When I navigate to Talk - # Navigate to https://talk.restarters.dev via the global nav - Then I can see that I am already logged in to Talk - # Check for presence of user menus to indicate logged in diff --git a/features/02-Login_Register_Onboarding/SSO/Login-to-Wiki.feature b/features/02-Login_Register_Onboarding/SSO/Login-to-Wiki.feature deleted file mode 100644 index e370f60a5a..0000000000 --- a/features/02-Login_Register_Onboarding/SSO/Login-to-Wiki.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Automatic login to the Wiki - -When a user joins Restarters they are created an account on the Wiki. -The Wiki runs on MediaWiki. -When they log in to Restarters, they are automatically logged in to MediaWiki. - -Scenario: Logging in logs in to Wiki - Given I log in with a valid user - # Navigate to https://restarters.dev - # Enter login details - When I navigate to the Wiki - # Navigate to https://wiki.restarters.dev via the global nav - Then I can see that I am already logged in to the Wiki - # Check for presence of user menus diff --git a/features/03-Dashboard/Dashboard.feature b/features/03-Dashboard/Dashboard.feature deleted file mode 100644 index f97169c39d..0000000000 --- a/features/03-Dashboard/Dashboard.feature +++ /dev/null @@ -1,62 +0,0 @@ -Feature: Dashboard - -# Welcome text - -Scenario: Intro text - Given that I am any logged in user - When I visit the dashboard - Then I see the 'Getting started' info column on the right - -# Talk - -Scenario: Latest Talk - Given that I am any logged in user - When I visit the dashboard - Then I see the latest Discourse topics - -# Groups section - -Scenario: User has followed a group with an upcoming event - Given I am a user - And I have followed at least 1 group that has at least 1 upcoming event - Then I see a list of the group(s) I follow (orderered alphabetical in the MVP) and the upcoming events (ordered by soonest first) for that/those group(s) in the my groups - -Scenario: Host of a group with no upcoming events - Given I am a host of a group that has no upcoming events - Then I see a list of my groups and a message encouraging me to add events for my group(s) - - -Scenario: User that hasn't followed any groups - Given I am a user and I haven’t followed any groups yet - Then I see a message inviting me to find groups in my area - -# Add data section - -Scenario: User has RSVPed to at least 1 event - Given I am any user and I have RSVPed to at least 1 event that has started (or finished) - When I visit the dashboard - Then I see the Add Data section - -Scenario: User not RSVPed to any events - Given I am a user that has not RSVPed to any events - When I visit the dashboard - Then I do not see the Add Data section - -Scenario: Add Data section - Given I can see the ‘Add Data’ section - Then the most recent event I have RSVPd to (and organising group) appear pre-selected in the drop down menus - And the drop down menu for group is sorted alphabetically - And the drop down menu for events is sorted reverse chronologically (most recent event at the top) - -# New groups - -Scenario: New group nearby - Given a group has been created in the last month - And it is within the currently logged in user's area - And the user is not currently a member of that group - Then the count of new groups in your area is incremented by 1 - -Scenario: Clicking through to new groups - Given I click on the ‘Newly added: X groups in your area!’ - Then this takes me through to the /group page with the ‘Groups nearest to you' - And new groups are flagged with a ‘New’ label diff --git a/features/03-Dashboard/DashboardFirstVisit_host.feature b/features/03-Dashboard/DashboardFirstVisit_host.feature deleted file mode 100644 index ce772d5a7c..0000000000 --- a/features/03-Dashboard/DashboardFirstVisit_host.feature +++ /dev/null @@ -1,42 +0,0 @@ -Feature: View of Dashboard for the first time when a host sign up on the community platform - As a Host - In order to view the dashboard - I should be able to signup as a host on the community platform. - -Background: - Given the following account have been created as a host - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: View Dashboard -# View dashboard consisting all the activities to bo done on the platform - When a host lands on dashboard - Then he would view all the activities that he can do with a journey of updating your profile. - -Scenario: About Getting started - When host lands on dashboard, the getting started column is useful to build your profile - Then the host can build his profile by clicking the links and following the process. - -Scenario: Activities present on dashboard - When host lands on dashboard, he can view Getting started in community repair, How to host an event, Discussion, Wiki and Community news - Then the host should explore by clicking the links provided all the categories to get familiar with the platforms. - -Scenario: Host clicks on view the materials link on Getting started in community repair blog on dashboard - When host clicks on view the materials link on dashboard - Then he will be landed on About the repair in your community category post on Discourse. - -Scenario: Host clicks on view the materials link in How to host an event blog on dashboard - When host clicks on view the materials link on dashboard - Then he will be landed on how to run a repair event post on Discourse. - -Scenario: Host clicks on Join the discussion link on Discussion blog on dashboard - When host clicks on Join the discussion link on dashboard - Then he will be landed on the homepage of the Discourse. - -Scenario: Host clicks on any links in Wiki blog on dashboard - When host clicks on the links in wiki blog on dashboard - Then he will be landed on wiki page of that particular link. - -Scenario: Host clicks on any links in the community news on dashboard - When host clicks on the links in wiki blog on dashboard - Then he will be landed on The Restart Project pages depending on the link. \ No newline at end of file diff --git a/features/03-Dashboard/DashboardFirstVisit_restarter.feature b/features/03-Dashboard/DashboardFirstVisit_restarter.feature deleted file mode 100644 index 5074115efc..0000000000 --- a/features/03-Dashboard/DashboardFirstVisit_restarter.feature +++ /dev/null @@ -1,42 +0,0 @@ -Feature: View of Dashboard for the first time when a restarter sign up on the community platform - As a Restarter - In order to view the dashboard - I should be able to signup as a restarter on the community platform. - -Background: - Given the following account have been created as a restarter - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: View Dashboard -# View dashboard consisting all the activities to bo done on the platform - When a restarter lands on dashboard - Then he would view all the activities that he can do with a journey of updating your profile. - -Scenario: About Getting started - When restarter lands on dashboard, the getting started column is useful to build your profile - Then the restarter can build his profile by clicking the links and following the process. - -Scenario: Activities present on dashboard - When restarter lands on dashboard, he can view Discussion, Getting started in community repair, Upcoming events, Wiki and Community news - Then the restarter should explore(by clicking the links provided) all the categories to get familiar with the platform. - -Scenario: Restarter clicks on Join the discussion link on Discussion blog on dashboard - When restarter clicks on Join the discussion link on dashboard - Then he will be landed on the homepage of the Discourse. - -Scenario: Restarter clicks on view the materials link on Getting started in community repair blog on dashboard - When restarter clicks on view the materials link on dashboard - Then he will be landed on community values post on Discourse. - -Scenario: Restarter clicks on see all events link on Upcoming events blog on dashboard - When restarter clicks on see all events link on dashboard - Then he will be landed on view all events page. - -Scenario: Restarter clicks on any links in Wiki blog on dashboard - When restarter clicks on the links in wiki blog on dashboard - Then he will be landed on wiki page of that particular link. - -Scenario: Restarter clicks on any links in the community news on dashboard - When restarter clicks on the links in wiki blog on dashboard - Then he will be landed on The Restart Project pages depending on the link. \ No newline at end of file diff --git a/features/03-Dashboard/Dashboard_host.feature b/features/03-Dashboard/Dashboard_host.feature deleted file mode 100644 index 69d3f97fa3..0000000000 --- a/features/03-Dashboard/Dashboard_host.feature +++ /dev/null @@ -1,44 +0,0 @@ -Feature: View of Dashboard after log in on the community platform - As a Host - In order to view the dashboard - I should be able to login as a host on the community platform. - -Background: - Given the following account have been created as a host - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: View Dashboard - When a host lands on dashboard - Then he would view all the activities that he can do and that is going on and that has been done on the platform. - -Scenario: Activities present on dashboard - When host lands on dashboard, he can view Creat new event, Your recent events, How to host an event, Restarters in your area, Discussion, wiki and Community news - Then the host should be able to navigate(by clicking the links provided) through categories according to their use. - -Scenario: Host clicks on create new event link on create new event blog on dashboard - When host clicks on create new event link on dashboard - Then he will be landed on create new event page. - -Scenario: Host clicks on Your recent events links on Your recent events blog on dashboard - When host clicks on see all events link or on a particular event link on dashboard - Then he will be landed on all events page or on that particular event page respectively. - -Scenario: Host clicks on view the materials link on how to host an event blog on dashboard - When host clicks on view the materials link on dashboard - Then he will be landed on How to run a repair event post on Discourse. - -Scenario: Host clicks on Restarters in your area blog on dashboard -#to be developed - -Scenario: Host clicks on Join the discussion link on Discussion blog on dashboard - When host clicks on Join the discussion link on dashboard - Then he will be landed on the homepage of the Discourse. - -Scenario: Host clicks on any links in Wiki blog on dashboard - When host clicks on the links in wiki blog on dashboard - Then he will be landed on wiki page of that particular link. - -Scenario: Host clicks on any links in the community news on dashboard - When host clicks on the links in wiki blog on dashboard - Then he will be landed on The Restart Project pages depending on the link. \ No newline at end of file diff --git a/features/03-Dashboard/Dashboard_restarter.feature b/features/03-Dashboard/Dashboard_restarter.feature deleted file mode 100644 index 2b3d013baa..0000000000 --- a/features/03-Dashboard/Dashboard_restarter.feature +++ /dev/null @@ -1,41 +0,0 @@ -Feature: View of Dashboard after log in on the community platform - As a Restarter - In order to view the dashboard - I should be able to login as a restarter on the community platform. - -Background: - Given the following account have been created as a restarter - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: View Dashboard - When a restarter lands on dashboard - Then he would view all the activities that he can do and that is going on and that has been done on the platform. - -Scenario: Activities present on dashboard - When restarter lands on dashboard, he can view Discussion, Upcoming events, Getting started in community repair, Your recent events, Wiki and Community news - Then the restarter should be able to navigate(by clicking the links provided) through categories according to their use. - -Scenario: Restarter clicks on Join the discussion link on Discussion blog on dashboard - When restarter clicks on Join the discussion link on dashboard - Then he will be landed on the homepage of the Discourse. - -Scenario: Restarter clicks on see all events link on Upcoming events blog on dashboard - When restarter clicks on see all events link on dashboard - Then he will be landed on view all events page. - -Scenario: Restarter clicks on view the materials link on Getting started in community repair blog on dashboard - When restarter clicks on view the materials link on dashboard - Then he will be landed on community values post on Discourse. - -Scenario: Restarter clicks on Your recent events links on Your recent events blog on dashboard - When restarter clicks on see all events link or on a particular event link on dashboard - Then he will be landed on all events page or on that particular event page respectively. - -Scenario: Restarter clicks on any links in Wiki blog on dashboard - When restarter clicks on the links in wiki blog on dashboard - Then he will be landed on wiki page of that particular link. - -Scenario: Restarter clicks on any links in the community news on dashboard - When restarter clicks on the links in wiki blog on dashboard - Then he will be landed on The Restart Project pages depending on the link. \ No newline at end of file diff --git a/features/03-Dashboard/Onboarding.feature b/features/03-Dashboard/Onboarding.feature deleted file mode 100644 index c5a58428e4..0000000000 --- a/features/03-Dashboard/Onboarding.feature +++ /dev/null @@ -1,24 +0,0 @@ -Feature: Onboarding steps - As a User - In order to know how the platform works - I should see onboarding process - - Background: - Given the following account have been created as a user - | Email | Password | - | jenny@google.co.uk | dean1 | - -Scenario: Onboarding process - When a user sees the onboarding process - And click on next button or previous button - Then user sees next or previous part of onboarding process. - -Scenario: Clicking on Create new party - When a user wants to create a party after going through the onboarding process - And clicks on create new party button - Then the user lands on party creation page. - -Scenario: Clicking on cancel - When a user wants to go to dashboard after going through the onbosrding process - And clicks cancel symbol X - Then the user lands on dashboard page. \ No newline at end of file diff --git a/features/03-Dashboard/Volunteers_engagement.feature b/features/03-Dashboard/Volunteers_engagement.feature deleted file mode 100644 index 118151f90e..0000000000 --- a/features/03-Dashboard/Volunteers_engagement.feature +++ /dev/null @@ -1,19 +0,0 @@ -Feature: Volunteers engagement on Talk -#Volunteer engagement. Talk is a very important of the platform, where people can get involved and be active even if there are no events or groups currently near them. -#We want to highlight activity and encourage participation and use of Talk as much as possible. - As a user - In order to communicate with other volunteers - I should be able to navigate to discourse. - -Background: - Given the following account have been created - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: Navigating to discourse - When a user clicks on the hot topic list link on dashboard - Then he will be taken to talk, hot topics list. - -Scenario: User permissions on discourse - When a user clicks through the discourse link - Then user will be seen only topics that are in categories they have right to view. diff --git a/features/04-Events/Create/AddAnEvent.feature b/features/04-Events/Create/AddAnEvent.feature deleted file mode 100644 index 68407f6d0d..0000000000 --- a/features/04-Events/Create/AddAnEvent.feature +++ /dev/null @@ -1,62 +0,0 @@ -Feature: Add an event - As a User (Host, Admin) - In order to add a new event - I should be able to do by navigating to add an event page - -Background: - Given the following account have been created as a host or an admin - | Email | Password | Role | - | dean@wecreatedigital.co.uk | dean | Host | - | hello@howareyou.com | hello | Admin | - -Scenario: Create a new event -# View all events i.e., past events, upcoming events and moderate events - When a host clicks on event page and fills the data as follows - | Name of event | Event group | Description | Date of event | Start/end time | Venue address | Add event image | - | Ram | vanarulu | exp group in fixing things | 7/6/2018 | 20-24 | Remakery | Add event image | - Then he lands on events page and can see all the events in that page. - -Scenario: Saving a new event - When a host enters all the data needed to create an event - And clicks on save button - Then a success message should appear on the same page. - -Scenario: Text cleaned in the description - When a host copies and paste into the description box - And the data should loose all htmls and css properties it has - Then it show a message inside description box as text cleaned. - -Scenario: Calender pop-up on Date of event - When a host clicks on date field, calendar should pop up - And select a date when to arrange party - Then host lands on the same page and continues with next process. - -Scenario: When clicked on start time, automatically generate 3hr+ as end time - When a host clicks on start time, automatically from then +3hr time is calculated as follows - | Start/end time | - | 13:00 16:00 | - Then that time is stored in the end time field. - -Scenario: How to find Venue adddress - When a host clicks on venue address, types the address - Then automatically suggestions should show up and the place should be pointed in map. - -Scenario: searching the image -#TODO: when clicked on add group image here text, file explorer opens. - When user clicks on add image text, then file explorer should open - And browse for the image - And select the one needed - Then you will see the uploaded image thumbnail in that area. - -Scenario: User triggers notification email about event creation to admin - When the user clicks on save event button - Then the admin would receive an notification email about event creation for moderation. - -Scenario: Allow for upload of multiple event images - When user selects multiple images and click on upload button - Then all the images should be uploaded with view of their thumbnails. - -Scenario: Restarter cannot create an event - Given logged in as a restarter - When the user is on the list of events page - Then there should be no create event button. \ No newline at end of file diff --git a/features/04-Events/Delete/DeleteEvent.feature b/features/04-Events/Delete/DeleteEvent.feature deleted file mode 100644 index c4cb16d707..0000000000 --- a/features/04-Events/Delete/DeleteEvent.feature +++ /dev/null @@ -1,98 +0,0 @@ -Feature: Delete Event - -In order to keep the list of events tidy, -As a host or an admin -I want to be able to delete events that should not be in the application - -The simplest use case is deleting events that have not been moderated, and -do not have any volunteers attached to them. Either as RSVP or invitation. - -We generally do not want to delete events that volunteers have been invited -to or are attending. - -We do not want to delete events that have device data associated with them. -It's possible there will be some rare cases that we need to do that as an -Administrator, but it should only be an administrator level action. As it -should only be in very rare cases, for now it is left as such that the only -way to do it is to delete all devices, remove all people associated with the -event, and then delete. If it ever became a regularly required thing, we could -add a single button to do that for Admins, but this is unlikely. - -To keep it simple for now, we could just only allow deletion when no volunteers -are associated. And you need to remove yourself from the event? It makes it a -lot easier to implement, however, it doesn't make much sense from a user perspective. - -# Fail -# Doesn't display a notification message on return to list of events -Scenario: Unmoderated event deleted successfully - When I successfully delete an event - Then I am returned to the list of events - And the event is no longer displayed in the application - And I see a message saying 'Event successfully deleted' - -# Fail -# From the code, doesn't look like it will remove the event from therestartproject.org -# Could this be confirmed? -Scenario: Moderated event deleted successfully - When I successfully delete an event - Then the event is removed from the list of events - And I am returned to the list of events - And I see a message saying 'Event successfully deleted' - And the event is removed from the list of events on therestartproject.org - -# Pass -Scenario: Admin tries to delete event they did not create, with no volunteers associated - Given I am an administrator - And I am viewing an event that I did not create - And the event has with no volunteers associated - When I press the delete event button - Then I am allowed to delete the event - -# Pass -Scenario: Admin tries to delete event they did not create, with some volunteers associated - Given I am an administrator - And I am viewing an event that I did not create - And the event has some volunteers associated - When I press the delete event button - Then I am not allowed to delete the event - And I am shown a message saying 'Sorry, you cannot delete this event while there are volunteers associated.' - -# Fail -# They are shown the message 'Sorry you cannot delete this event as you have invited other volunteers' -Scenario: Admin tries to delete event they created, with no other volunteers associated - Given I am an administrator - And I am viewing an event that I created - And the event has only myself associated - When I press the delete event button - Then I am allowed to delete the event - -# Pass -Scenario: Admin tries to delete event they created, with other volunteers associated - Given I am an administrator - And I am viewing an event that I created - And the event has other volunteers associated - When I press the delete event button - Then I am not allowed to delete the event - And I am shown a message saying 'Sorry, you cannot delete this event while there are volunteers associated.' - -# Fail -# Two issues -# Have to remove the myself first - otherwise shown message saying I have invited others -# After doing that, I am correctly shown message saying 'Are you sure you want to delete this event?' -# However when I click OK, I get the message 'You do not have permission to delete this event' -Scenario: Host tries to delete event they created, with no other volunteers associated - Given I am a host - And I am viewing an event that I created - And the event has with no volunteers associated (I am the only volunteer associated) - When I press the delete event button - Then I am allowed to delete the event - -# Pass -# Theoretically working, as it's blocking if any volunteers attached -Scenario: Host tries to delete event they created, with other some volunteers associated - Given I am a host - And I am viewing an event that I created - And the event has some other volunteers associated - When I press the delete event button - Then I am not allowed to delete the event - And I am shown a message saying 'Sorry, you cannot delete this event while there are volunteers associated.' \ No newline at end of file diff --git a/features/04-Events/Delete/DeleteFromWordPress.feature b/features/04-Events/Delete/DeleteFromWordPress.feature deleted file mode 100644 index 2dde79c773..0000000000 --- a/features/04-Events/Delete/DeleteFromWordPress.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: Delete event from WordPress - -As a group host, -I want event that I delete to also be removed from therestartproject.org, -So that they are no longer publicly visible. - -If it isn’t deleted from WordPress successfully, admins should be notified. - -Scenario: Event deleted OK - When a user deletes an event from Restarters.net - Then it should also be removed from therestartproject.org - -Scenario: Event not deleted successfully - When a user deletes an event from Restarters.net - And it is not deleted from WordPress successfully at the time - Then admins should be sent a notification to let them know diff --git a/features/04-Events/Editing/AmendNumberOfVolunteers.feature b/features/04-Events/Editing/AmendNumberOfVolunteers.feature deleted file mode 100644 index 94b93ba993..0000000000 --- a/features/04-Events/Editing/AmendNumberOfVolunteers.feature +++ /dev/null @@ -1,45 +0,0 @@ -Feature: Amend number of volunteers - -In order to keep records of estimated number of volunteers -As an Admin or a group host -I need to be able to amend the number of volunteers that attended an event. - -We need a way to manually amend the number of volunteers that attended an event. -Ideally the number would automatically set to the right amount by invites/RSVPs, -but this feature is not being widely enough used yet. - -It's only possible to manually amend the number of volunteers for an event after the event -has started - -Scenario: Can't amend volunteers until event has started -# Pass - -Scenario: Admin amends number of volunteers for event - Given I am an Admin - When I change the number of volunteers for an event - Then the amended value is saved -# Pass - -Scenario: Host of a group amends number of volunteers for event - Given I am a host of a group - When I change the number of volunteers for an event from my group - Then the amended value is saved -# Pass - -Scenario: Host of another group should not be able to amend the number of volunteers for event from other group - Given I am a host - When I visit the event page of an event from another group - Then I do not have the option to amend the number of volunteers -# Pass - -Scenario: Manually amended number of volunteers differs from number of volunteers linked - Given I am an Admin or a Host - When I change the number of volunteers - And the new figure is different from the number of volunteers associated with the event - Then I should see a message saying 'Please note that the number of volunteers does not match the attendance record. Do you need to add or remove volunteers?' -# Fail -# Message is incorrect - - -# General Fail -# Somewhat unrelated, but I get the message 'Something went wrong' when editing number of participants \ No newline at end of file diff --git a/features/04-Events/Editing/EditEvent.feature b/features/04-Events/Editing/EditEvent.feature deleted file mode 100644 index afbe7aaaa0..0000000000 --- a/features/04-Events/Editing/EditEvent.feature +++ /dev/null @@ -1,48 +0,0 @@ -Feature: Edit an event - As a User (Host, Admin) - In order to edit a new event - I should be able to do by navigating to edit event page - -Background: - Given the following account have been created as a host or an admin - | Email | Password | Role | - | dean@wecreatedigital.co.uk | dean | Host | - | hello@howareyou.com | hello | Admin | - -Scenario: Editing a event - When a host clicks on edit event page and changes/updates the data as follows - | Name of event | Event group | Description | Date of event | Start/end time | Venue address | Add event image | - | Ram | vanarulu | group in fixing things | 7/6/2018 | 20-24 | Remakery | Add event image | - And clicks on save party button - Then host lands on all events page with the edited event in the list of events. - -Scenario: Text cleaned in the description - When a host copies and paste into the description box - And the data should loose all htmls and css properties it has - Then it show a message inside description box as text cleaned. - -Scenario: Calender pop-up on Date of event - When a host clicks on date field, calendar should pop up - And select a date when to arrange party - Then host lands on the same page and continues with next process. - -Scenario: When clicked on start time, automatically generate 3hr+ as end time - When a host clicks on start time, automatically from then +3hr time is calculated as follows - | Start/end time | - | 14:00 17:00 | - Then that time is stored in the end time field. - -Scenario: How to find Venue adddress - When a host clicks on venue address, types the address - Then automatically suggestions should show up and the place should be pointed in map. - -Scenario: searching the image -#TODO: when clicked on add group image here text, file explorer opens. - When user clicks on add image text, then file explorer should open - And browse for the image - And select the one needed - Then you will see the uploaded image thumbnail in that area. - -Scenario: Admin triggers view event email - When the admin clicks the approve event button - Then the host would receive an email about confirmation of that event. \ No newline at end of file diff --git a/features/04-Events/Editing/EventPermissions.feature b/features/04-Events/Editing/EventPermissions.feature deleted file mode 100644 index 9607c58c2b..0000000000 --- a/features/04-Events/Editing/EventPermissions.feature +++ /dev/null @@ -1,20 +0,0 @@ -Feature: Event Permissions - -If there are multiple hosts of a group, then if one host creates an event, -then other hosts of the same group should be able to edit the event. - -Background: - Given the following groups: - | Name | - | Hackney Fixers | - And the following hosts: - | Name | Group | - | Fry | Hackney Fixers | - | Leyla | Hackney Fixers | - -Scenario: Permission to edit an event - Given Fry has created the following event: - | Name | - | Big Fix | - When Leyla tries to edit the event 'Big Fix' - Then she is able to do so \ No newline at end of file diff --git a/features/04-Events/Invitations/InvitationNotifications.feature b/features/04-Events/Invitations/InvitationNotifications.feature deleted file mode 100644 index d1e15abe5e..0000000000 --- a/features/04-Events/Invitations/InvitationNotifications.feature +++ /dev/null @@ -1,31 +0,0 @@ -Feature: Invitation notifications - As a volunteer - In order to keep track of the events I am attending - I want to be notified when I have been invited to volunteer at an event - -Volunteers are notified when they have been invited to an event. They will receive an in-app notification, -and, if they have opted-in to email notifications, they will also receive an email notification. - -The email should look as below (right-click and view to see full size): - - - -Background: - Given the following users: -| Name | Role | Receive invites? | -| Leila | Host | Yes | -| Fry | Restarter | No | - -Scenario: Invitation to volunteer already on platform, opted-in to emails - When Leila is invited to an event - Then Leila receives a in-app notification letting them know that they have been invited - And Leila receives an email notification - -Scenario: Invitation to volunteer already on platform, opted-out of emails - When Fry is invited to an event - Then Fry receives an in-app notification letting them know that they have been invited - -Scenario: Invitation to volunteer not already on platform - When a new volunteer, without an account on the platform, is invited to an event - Then the volunteer receives an email inviting them to the event - diff --git a/features/04-Events/Invitations/InviteVolunteers.feature b/features/04-Events/Invitations/InviteVolunteers.feature deleted file mode 100644 index ee4e6a8d21..0000000000 --- a/features/04-Events/Invitations/InviteVolunteers.feature +++ /dev/null @@ -1,28 +0,0 @@ -Feature: Send event invites to volunteers - As a host - In order to help boost volunteer attendance at events - I should be able to invite volunteers to events - -Hosts can send invitations to volunteers inviting them to come to their event. - -Background: - Given the following accounts: - | Email | Password | - | fry@planetexpress.com | fry! | - -Scenario: Inviting volunteers to an event - When a user clicks on invite button, invite restarters a pop up screen is displayed - And user can check the checkbox so that all the restarters associated in that group will get the invite or host can send invites manually by entering the email address of the restarter as follows - | Email address | - | d@wcd.co.uk | - And also can send an invitation message in the textarea provided as follows - | Invitation message | - | Hi, Hope to see at the event! | - And click on send invite button - Then host will land on event page with number of invites in the attendace section also a message saying the invites have been sent successfully. - -Scenario: Invalid email address - When a user gives invalid email address - And clicks on send invite button - Then an error message will display - diff --git a/features/04-Events/Invitations/images/invitation-email-not-on-platform.jpg b/features/04-Events/Invitations/images/invitation-email-not-on-platform.jpg deleted file mode 100644 index 86d98d0fd2b3495a21bc60ddde2e9c5be4daab24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869607 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�G#jS2Y?x$M}&lWCaZ+bg8Q7c3N>TS|P8<8{s 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 z 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�>Zj_gg^LmhFcMdv9Eh3SJZNmt;MNc6O^o{e4nEdTmV8|ihHxxcI5zSp%>$Y@68JyG1L)~)ETF2FAFvZ0LRasTvOCNl5_ zLzNzH5n}`5x27<(x)Qjm0b<%CZT$V3lxfW8CP%MYFr>`#NymsR¥^V(2Ir>|T$ zi;L$H(jI0;zFv5Z^-rq*9KDqgmiuu=CQL?QIK)s7-m7Y=pkAl?K#nh?<`EV4R>?*T z2Fk|U=?0SvuNq|qTk8R!sZe8rb;X8k!w}bM@WaJema3?C_UK1cK3_Itsnc+HANX4w z4;zOfseFO5`!08!Jccf04l-33>;lSg4q=VEV<&dDZ2B!L$|dxs2koTpRCEZ(&4$h3 zIL??|)J^ub7q^`^lO)Wn7W4q-x`M|VL7ip5k&M#vZ`gd`oG{~dM|-}~%=U>0y&mE4?85U7>a%&y*sX-5O498lK{9dBSina@aC_9x47r)`hduqi%2x~2; z&7W?9v9;itiZ|6yD&ins(8oYKwJrEZzxbMoZ2yj(!oO{0hEVaql1!i03M_=W*0p0N zs|u_fpuz`t!rYqFXi1iud9sr5m)<$);AhD*vI26X-sxltN6^+`nnFL-wN=+Z_vsec z_p{Z87SD3}s)KrNm2FTSeD#Bf=}S87sk~EFH6hO}ye$mMg4F2zoEC5B#Ub(Wh@HOjd zH8~-mfc;>Pd{dDE{`jRv_}HBuHwL0Se6lz0zRvkoMxp<8bLVvIu7<^vpEe=!%bQLA zo#{}M>*zVQdPH`l(W$;O&5p0`$0=FlT?W)<8+t8QG}|`P>XQNtdj7^;bj07ywN}@T zIjmZ^DD~rEx)ij^r&aa5)6?0yYE}$LD3aT~F0t;MJ}_<~yVmW6sPtKu73NnSR=!_i z{h{Z>Qh>2GA$`cA!{EIO^c7PvV>%yjMFV3lfFsc-qcr*DSc545A}>^<^&)t==()km z+o#vjgDLz7U}#%R_O$WDQZ=`3OuV$Jr6ry#>b1!X`!ubm+cqDi?()i);CQrlVU=Tm zk`9#*6;u%4^o@$bsmd!Gcn54TWfb&$Kldm{J$O}jy+_Z{0LRc5O9}eKmC`sA^}|eP z=S-Un1eOS1d$-Nrh2Z4yS#?!@G5niM#*^XAPY0TDtURC{2v#WrhHm(`pz$s*}xTJ^nwQF*R#Vc-l08{IP!df@o4ZC*V#aO^b zRS}OLuV6S-Y}iE=aJo7l?SJ8`{hQhLu-N%6$K;nj#NPpi79o$vH6^M%(Sz`jEkG{W zz!N+(h1LgUkY{V1rU9gq0m?#5Tw&MH}^za=sBdmPTErK${fdOyp zGW?jq1=?CwX&pBKD%A0OUNZZm-`&>ttlsRgDPfOpTbU#awg27hiJ4`p_TZ-K+{V!3hq-lqDvl;!@EHY zbD7*vDy9I=jc!fSDP{og4G*IDOMSiM?J52rAaDdk4;okkRjGvx77M-<7;JAq{lTq_ z;%LiC*+wx=Y;FP1ODK~!3nCrfc_;=CNecNVSO>xWsESn-_WU<&+5K~kQ{LD*dSydy z>{+YFf@^!s1sefpfdj~h*yAj`UF6~4l$ltT@kD$de9J;f88w;rhJ^axY8FHUhE|#! zYj$lq1Q=cSJuF=rT8>&EKJOa?(}Rwb;VVv?@1GFCNW@HZm4faT{5$M0@?ha`V&cgo z)4CMy)rsS$E4kH&4&U-m%!wgCQiiI3NZ=l=+c5#Si#bz#FfE%juRHYJ--)U|gpS!ij!-cIx8ze>d52B zuB{3ys9sHJqcb{F981Vk3#j8zen^B>#*pK zh+h{y^|o(?ZaxoI3+E7A7dy{;lexz?WUnGgUXnujBl}yWgMpc8%C`-ut)UcoO1%|r zWYLVz{j5Y!MRPK_NyUn+I2Glb1JNrFNLH|v`*$BjKqIRu9*Vz2K7e|?78Zj2UO~Fe zfC|MRd^axsjXRLCi^Fnm2J`XP&*ik;0TU!TGU{KSf>D<_xO9{=8|TX5`JVn_`c#B# z%6j;iXxgfN5K{gz#Fm@QtWH1uolS4j)$cLS0f(K`^*`xIycq+{+dBO1Mc4FNbAPYZ zm)f?^!>#dZios|la!2xCXlEl%r7%pEUSCYfFs3C7~Qsm$&cQ_@l{bIhAPY%`B#{xzzKBGz@traU|vkx-;nNY{Zdks<}}Dq zp)*6@2o*6m04l-@fV;tDmmnN!AW-7*b+&rVD)cPqLh#&!hYte*(12cG_jK8VPSHLs z&i5>ovp=}JL~U(z@v#%)A9#Jff1>MqR%C?}EyDCIz=qS@R$M*q(~Zh13^6)3B*%;1 z%Bm;=chu|J*j4g*aIlI~-gCCY}o1RqZaKo!F`f+T(rZ@I8T#he#KOvYr zj;miXX)J>i7y(my44K*&K)=xEbaLwWhT^R53ZEF&QCVz^e4^qGB+Y; zV`%!{=I&k4!3s^E>5ePE`_?|sQ#JYAO;UTm!SuH<>p6$SFwwCN z>D%j)`QH-fQH4K4D~k+ZLOYdUr^vgh!_iW_s!Fr9R`B8dviU0I$lBoL@pKobNXm3v zu$}gIWfP}e+01kfPUYy6)`un8OK_r$K1UOSDY<+E-gA(JSS=IAREwF zu(gP#Ouy8DNrKJy55dV(-f&F!aWq@BmSeNJLIa@}Y(M6rajgDdkmclJv7XWj#343e zy&w)Z5S4i760UACcBKGQ{_hjl2j^OEgkC(7`F*5*{fA6g(PX7j9FVvWOT{@f>9?kF zt^`_Z~pbN7&!3W(qkq7ZuTFMiniOfFvP4COchBz*i3X}bHXjM9d;-$qA z%SI^%@)Q-ndD!^*^y*|s{%;?)_Ir2JdS16hyb5yeadQuew8do{5WzN}8!3v0j3X|I zo)?l{_k?EpO0}m?SUPj?-sWH>1Sm5`>8h;a=>>ROdK0)Lq0muf&~eu*6&Ih>e->F; z{Ha1Df3;#mtoqZpetJA7z`Zi^3zYKXRNzChY{@-fRwCRz(g%5Y8 z1@enRTZyXfRqmx`V()CmzeSuowrBIw!i3GZae?eFUp&PQW7zb^MCpJe$CVyd+|bhpt=b@H)R4Oc!FlJ5fPM#s>(-&w<-%Zp&4~O~BPFQF2RQz)5_Y8K z_L2N~%#cxd0b}L-X5Y0*NZ{(OB!d@|EQL5c)t)={W}Fz4mldb6-rho}+p?fz`LpaH zsuJo>oU{;@viy5Lo6SB7GQB@}@GlUi%y7hB2)Odfr}+xU1(kdrZ3RrrhNLrxd;oh^ zY_Ys=o5s%4W#pYP=0`Ws)`zl^2!g7qywvSko#9rLN{X22EEf@{aNIVz{n*J>%*qxpMfZR;%q4v_QnJ9+%!@Yik-@BdK%8 zIj=%bl_H%<@i*M6@y_fkbe#nuq<&Q~6JX)a-7|2;DA}4x8Z=ngW|N`96xT|C;a&A?CIOjy-x%rz`B~?iPF`(}F`{ET0|Gm)D1x+qOn8 z3j)fD8pMj*JU-kU)$%ZtYsfw*J#;?lC}e5RI@woU)2*{^s8u41G#_mG1{wXGwmBTz z+aa#poWoFpMd$d7PJ3q|Lk4Xqr~3aQU%My;0MPNS9+y!OqxR3vRR13@J#&V2#C<{l zs7b9ExLN%8Pr#4E*q*A*&INZ|pGlLFeaiJdOfI)?;bOvojT2Xx@;7qhtp@u?14^I~ zIYiTE&wm`L@52*pm;eiN@iTU^beUyMnvC@{HR~{u>Tl`pK3%2<_GBe`3tyl(;GsHb z!2Z+RGOE2%{1ejGXDnuaJG_nH=CX7@$kAimG4OV}(WRpf>liFuWjOfm$vFroyb2^j z7U9ASm=)_yd{Ot2eFlx!hq({0ksYZF#-lvmvrtSlxVuU;xG;#t{!#3oJ*LvIaUrY5 z?5B!)-R(M6OSP1r+Q=q1ZWP0w85Ti4mE#UPKlZ?~pqY9Sg59-9)4{4g$|(ygj{v5A zMEJK)DME-ce;j4ZVTf|%MdTL)?(1OD@`v)3yIoza)p@uJEPx>j+D7I8sNb4O8xxvi zic8JoA!Z%A347x8VpB1*&RW9X4H>M*0v91hK-S?Ra$|O0UxWvjQdL>1KR%TP#1|kR zmLiit0@|TcqOK(zF@gK-`#DWnz|N2TO{*Xenm6QY(0?{-jPoPO?L(-7dT~e|g(8fu z|IEb48j0mqDkXv_g z&seR)v2Yb39%qTn+&hlSi3#nI&4*ftQ8tg20X9Z#a1Ys2C+;+B=T8_s)`nsZrCxQInXvgr{E!FqU>+&Ci*m zig_tbHXUolyt?(%b`cdh^=;Q~->Idw`hVEfj!v?)&0qb!?UM%=cJ(rfSx)qw^xmSi z!mk494d3C+^>uf5!ry+y3P8JB6M!JAp~E zJ5c?nW1A%c6c>FXxn=f*Y^pVrSH+9Um?yX%(nRv%G}2AN=%1Xe0<;=Ro9l@*r1wSSWNPT)vz8 zo3FAQ&Xi+=-j4urj`cGzmpC$kS;NQ}wSQl6yqqZ?-mwK06$phBV!4bjH*pyR+I+ER zHu>JZDwc=*p+UyE(EmrczjYk0gc&{hNB*nW^K*+9)8#ZR#3f|f;?-H^d&S`HdOx{MrTKSj1yeUsyjVBK4rH!uR+o zH#xMmWZi}K6smD?^x|@ezB^YGa@Q2m ztKl}IMg)eqeE(}M$b?Nytfwc&k@9ZxL6RBZ^GhqIoEWj1M67$@|0*R&CRZ+R zBoc_5R;R_kRs@!YUrgse>^L87swdl>EdJd25TtWfZaj? zW#3i+<<=39vgVyr$%4mrT>Ix%tAVozR(jXkUepRQa} z+pf7VucX`YUr@J9KQvs{FzE*cbhk@GmS20{*42hADpE+jbM@OZW6d*>9a;yo3F0XP z<=9t0OMpJVSy@A!>Yd(7-M(s7j@gqgNg;mkU)GN8OPz+e*>8^%ODS1$*j1lmMwgu4 zs7{Wez}h}AyPf{&eZP4ww1K|VglFYZvYjJf9x)?=K;xTRU@m%o2ntn9bupet1t4I&S}Sb{{%ln4*hfr zKNfD}T5DV$sN*)7wN2~3;i7y(Zua$ucP3w&jRWy5){SEiN0Lwi)_ZhW{c-siL$TFp-k6VyohQkj1t-yfD_WPD%Fup(?kQQANnF}8RIkq zKa2tEEVZ?oXX6Jw>@h~L;n(J4Xc6bvJ-4nMj4l=Mal2I*dlh-SYy&2<=Xk5&MN$uE zxBb;tn-3=b;FkY1I=;)9oy)tI6hZFc&UJhRg;a@gB63jntjtD~1};b&8NEr8!yRi+ z$F8x}i@#$NOkPlijQqE@F1>#J{b3b&HeB^@D06*DqkLUw^cqJT0;Ow-hgyInfx5aN z(i-_Ny?SPI%@MEKlZ`hLNdYFhCk;t&3fUcXwlT?%2V}G&P5JIJf?EL0dfl2UJgR7e zWJ)O&g!W{`cB&%<<2>cIrCMyOaag{H)czt)D*2*DvGvW3 zZpn0$^?GfVfqya{If=)>M%zYBLac4aEOcMdhqnxzg3FUMq&-O3$bj6`&jM7!AsW&_@E&+eFiPnacY-XMfXO^I zzJEmf^0d(=rp{#<7=;~P`+QVXxm2Ox13tsL$WPp^MYU zJ-xqVpUDWN_nE3SwjIj~a6}a^JPQ;r0px-dm2|0O6@E5BH$IO~7&EHr;?~0U{xx~D z3P?a^>h4Cf?AczGh=`weY&i4n`JmTtRKdx)4}ayS)KCQ?stun*&&v9#+A?Br=oWv&vG+_f&zI?RBHl`xKj-g2@0 z>%CGuNQbv;+?+O$_gSbaMb-RHJ*oMFGO~gqVBwmx$2uv5KpR|uZ+oHgdwQ}A&}0N$ zA*i@jkkI0>CLQH*1j_A55u0~kbVZJ*q#Mol;vOfgw24bDQy5$X{IdIbveWy zF-&ju?a~+Xsxszr5Pfhu2f?ZN38*BcQt}1B3(RwX78U$v+_ilqh(D}{!6A(bLi+(X)3)blhNamSPXBX zLA=w)f*J%b8{{yHVP>jm0pG}Z|2y|{Ps=jgb9d zWxwu3SLc&vh-7tS$~gxn%2q~=iNa*+pdzl^9br3Z4@>E%F~Jf6me}_rF?Xhl0~1JA z*~FZQmI!sKbDl7tb)Iv2t_Rdqj^lS2OE;0@7BDUP1v_520?-F@T=ImoiFgMIoK24V z`uNn4^F61r;rOrDArTNaF`yphS(T^$ExU6zmaU<8T}Yj%`Yc&>BOM^tH_Qoxzg<13 zN9jQRP*!d&M#udeZn3`mr20J@l;isF{HG;}!WqD( zW_f6$L)$W3Lm3YY;triNkJZR1K!8{P`LlisU-qd(Tgt+h{R1sy!0&$a`eMVHnNVht z6yM7H1kDJO265GUS-_qqdl}Oq?rbw461->k(AhAtBH!A>vMH?|lg-+!Ac%>IT^1EfNzQYzR;V2Aia z##k(Wq$^Qrw8ojbEHK(-EK>SuNv)W*?JsUL|3I|Q9S|8)qj(ZZm-e{Rgq)GhA;IR; zZBEKSl@e#}NqeHHVBg~i=GeKxeu3kMfgwb%U`_6W!|!jGwceAQ;%b++ijBh7>kuKY zXfHin+_$2F=3wrS_aCiZ4%Z)Ud~PG1*U)-<7cIf4$)))1kp?SN#_P#5cq|K8guSl} zj>W+*)#I%zg6o9~-E%%F6lDGg#8g;4jqJa?E}p|Q>Ie8Ld{W~0;%{4pXMcd zO6f~8Gp*XkG{49Xs^%yu&P-HXq@IrQm2Hbk>q~>v(YgKuz}D|ql4U&?H0ULMI{E(I z3<=8lO70h3Eg$Vqyslfx$LxG`oD_qDDjp`-#Tn|ZT=a5TywVxs7q9ovGo}G#-giIb zlX(4nxGC>$>}$)*M6fWp!DjwF^x;m2J-P2P9!=a0eoIL;x!E&N?ps zDs19g#C(jyB+3$x`0vd8@>x1b>=nv=Hd#e6v*RO_Hs__;db-E~__UYRk9Di~(7&Os z#yrF!pKQ4to3ac$X1k`t7|n00DGwLw{&|yf1M{0xO%@S4@87`|i7A^W)0irLfw?bR zBnsQC7^3I3@-D*aGRs{;W2i9>If!u=x1yTy(@rhU1W)OGuB!K(L7OV`jx2^N_)D=> z(LH1W2IQO4W?+py@6(2lQnT(bKA1WWL(_{^R z=nzeai|yOw^guD&=_1414a6VbXE_#Tg=@!t6bQ^x&y^Rv<{Hi`RQgF5P^Gf|82t2O znb-JjfOzN|$=s1h*WL>dd6cM*3U%EO6+BHF60woA6iTff+ejAT3Nt-51`|M3wTBMu zPgPfYxgD&OtY!W7sg!oR(y$n&MjEgLyBKRLOS$}U!BTH;)9prn4d02~>5656Lus5b zBk97U0)=}ke12=fttgbeX{I{vyp>xvIly(O_qwRBT{1Ny5UEN$+g(# z3E9#BLjw6;b5V@=Jv>QJgsD83)51HEtUpPz!1l9W97`nCd_*|+cci46$iMsNBR7Rc zU~Px+<>xJc20>C2isfMnk05eBNXRW_uIW%VL65kM73fT@oxV1!AZ)g8n9lEjKY9EJ zkEsM#_&*-=$5csz+pfc~ml*pbvK<>4frnMoqhi}YVIxNNc{~nIb))^BjGPgLV#(8M zftP&%XUehuqY9e=&9R_>V^eiuVs$pCb4X1`225l`Ayam8vL(p*8cuBPLJ>C) zxm5xVuY_9CQvyx1j5adbKUzA{N%D;zpR1*hZ*m+K2T!kYpm_&L2|vk3`qVCz6Jk|O zaX`l<|2LE|){I>Nuaa)3ql^>l-M04-w{6Y-ocf|Sasr>5Z6g2ZlM}Hf26I*a{2V1H zX^`iWNn6)z(bIH6(G9x%XCg1-4pdv-4_x>0^A<3APwmmiW9n4Rt>1HZItNY85AUG@ z_|6q`&bwObu$v54jh3_u?|Z0V*IdG{j&>=$H1p2Z5mdxwq09y^jp_WD8&_HD9+W)m zeI0#sh_{plKq~L>q*%W1JI_u1i>-k^Ry}%|DgWi^PYWcDrS@?&;2>=M{lR}{a!s_j z*z@HVZY0NSUkW;vYoGSNJS1J~?QVyE5cVg`6o+Q)*z&*OOO0#(QYUzww$WC0n59i& z>MVtafNhr6<5*_G7u7d!&EybGZ1g#$xGV`fADYB?yp&)dzq;S*x*4NSCWkIT$Ca*` zfFoCUoCarXgm+k2r_t6>iyPH{Y-G5&%~ZTn{t{bD36X8f&w9zmp<|=!P(~bh?Q_p# z$6`q!v2q!?!uXmA(bvyEy}Bi%It@VVP&RBkYz*_G-p;o-Yn^i_W1hz9u!b#oLL#kk z-ZDV3`bj^ZpL{C$?xCTVcB4!@CD*#7A=y2PJfc0i1%Tx=4I6*SX=$&xJ_FRF{lIsd z;8zx?x6I1C?Xk#rPhk`LBpQo5bZuZAnS2iDk*B{y`epBVY+)}%CJSRY@ex3ON|^PE zeR{(n=Ya@)xGk%LQ`EX7BPS-Y=2FV^RCd$@&6f`yE|hJtT-Yfz=@65Y$RVvJ6nRi^{bCmgUnI;hDhX3PHrN~ND;H3!x=WEpa*%uu0 z&SkL0L+2gqGSZdjd75MYIKlpptDnedjPlBH`8-^A zPxhXA2V*2(ef;a~fSKLbpIf$c)CQ|M;n5Rk{_r;P*Lvf702nuru*F-uTp>JPif`3w_{0uYA*ph7sJ;0r-JzI==ZW> zd~~y|jO%%uoMDbjeTS$dZz=&WH55BP9%OM!uFuvPcKa#82B&NJduMRh9gd0xu`OBo zx?8iAWnVbPRH^)&=$vw1OjQ_F;)}4(s1|owhiNCxXq06tf8Y<06}TvI-dLFOp&=<* z35at+EObupO|(>d1n_S}bltI+dY{lR|0WBAn$><-=SxJGl8r*W)p0k?x~Nch`g?9zaIPU~~vbY)FF)K`;pEBPo4|ImQ^>60(gU4C#<& zLqJM4%1QZsy+6O-U;GI-;CAhKUC+nkeitS(5t&_A5ryR<{0;jamJFTr#E@HT2HzX zPu}28owO_I%|T2VVOlPHL3f5m3L zs<$ypoZ8cOs+V*u{8zl6Q`Fy+euwFaGa}qgBG;FEWXk8is~cI+6ep?`I-LV3jvu?c z4IAHo`EL%+)5;@9Vig=Z&k>NsI9`^`yC*4R^flqpBV0S1 zlf-^5t(o%cQ6On^t9ymENeh3`@>&H~sDefo=?BZKG{Gy$gVGbEWroLF>mYU${MpRg zx>?K+e7!9@c|cf&CyqQfE5@wrnCC8a3Yuq+#Y4*4ML41db=5l)C{HeUX&(~HeZ!ZO z8m6LI;I@|VTo3ZkgytfT{^$LK8_3l1Owx2SH@$}@V=>m#hpxp@l(6Au){8wreQQ78MEp)>ksVzK`p9M3zYHqAwSoY$Y z@#-?OTNTwz_8`8|v|koSU6;5_F=S%1y_yi^T(H(2&g8iusvTmLuIu;)n9aD7hq{}0 zXqo*s6p%9mQ2anT#Msl5ji|bb)Cnkc=51+H13k=RAVSL=|7Oh!i%iPtuAcwc;6zTqCwD^LmxjA2T-76D2Q6ejgB7_sGS5@?gP9y3J zxb@@oe=SW1XDX|%>|1j~4rYssozvm20@+Wr(nN3L+^gL09JG7c2~vuj!lXx0E_`9y z2tgJ>=j*3CGJT%b9@?~6t-AMTP&lnzs}~p34Hz>)64~_J;wN97s>-M*B@8r?%kFg` zozzb=1kbNE(tVV+hPIUf>hjg2clxM}fJv7Jf&m4BwmKs1t zltdKGG@9jA_1(^KvanEh%lJ^Z^Hc-y2?Qj=wASjrY_0A`c?!zH-Mw>hY35axZqgn? zjEKbHp6UAF9J$9HI}6|Yx2A4`Cw?vPBs#I>SPsxNSQ02h7FQm(`KBw&Mu)pHWQ|e^ z4c+A0F?#yI zImR3I;XZ2qq}|Xl9d9!dWOwr3)=`US*+(qqn#z_{g?S=myDX2hVdF(Ewz2ES-NV8& z1tqhPo`&>3+6XswI_M>JRg7FHA7Y`fA}`YaEi5Q+3dAMoAK=JGbTa5u8L|<$n$$Pi zTU9^8CAkva`1SuTHl6~Od7ssfe?Is7k)CP>yi#Zdevsxf zVstB&<(A>YBlr>8O-fuq{Fhr>0T8}98*#*=K!*HaEI;)7Gy?uJ#T$%dTWZH2I=HAk zX-m_hHL4S=D9j~)(R>q?@-CQ^NP&Ff0R%w}2SH1qP0(&T(C7qZMroE&wc<78`qyZ~ z%JVjugnqY1ffXpT#i%O-=(55~kVJTes{{S{h~>1}c{qVTyETpjY9_v9=CJLDZL;n7 zGDXBzE!l4>!j8jF)|S7nP3>VfCOsxXD^Y2<`ORRb7JGljP-!C;b8M8kD2ENNn!V*4 ztd2f=QN&;~U~%SugnnCc7h|1LC2gIRt$ATYxz24x8M=sfi>obk4~%#QkdJw#e;wA{ z8j{9e)<4>|V99-i%w18Wr@V0Tl3>UtUo=`M;HHspiZw*Et@@^^Sc&5pda^?AK#$jM z2w{nTqMP$;lsZihH?P3{{o4M|eqjmfI+~me+_>n$W+C9oLlZMmeE5ZMQ|BAYNpHZH z5J(4#{3{CQnQlQZJc14;5x%N9M)KSQcWM?OzI0KLL?z)vCWn*|@UP(arZNOeY{LH_ z=c?ZP&7S(*qT5h(Uyp}5REl&2!uQp%q9|&5d=1r^+QgtAGO5bC+JtYj4R~^!hv;yi z);f>g@a-HAs(rDj;&5PIwGtrV)e!fYFL(M20p1V5HYsp_^?iUb?#d0mF7r7B+lFW@J6VGJab7^`! zFR?r_NWMNsuDF0R=zZXiup+m5)dT)nPsUO5!ol6%7v^?JSs02+ikzTIKX87j@xONn zow_l9^})81%Xn}Yz-}`^#dTT(UBk0wiN3&=D=8|nEHPYXS~Q-w#gQg5I1lBs+Ls}P z(Y_|}4G$k5JbfmhMWAft+hm*mzN8#sVB9Ipp9=cOV8M}!*7I$r!>Ycl$~_>!!jV|y zOs~%c{{sf!cOk-69oVB^A0Nw^J}^;oA{6922wA`VrDnAH#jK|qG7X(%RaOdm<*Ah3 zGlYqRXA531Nvmhsq!(|mG?< zy{J%}Lc61Yzj*Y_R#l7xn$>}M|Lh)RLD=IZ`QmCsv{~Gz#ztQCRM&5!nVc#rK`A{;;cMxnf8M~&-ay)3^OyFdBm+= zXXiLa$fsfeUW$`Jp1Y@E1+cf^*qTzDtim&C+dZwlZs=-*aZ$u1BN?kgm!z#XiC8;p zYchXOl2f#bk?7!l0ArhlBr+XOLHNdnw5`*h&hxw?cylVXxAJZLO64kWQ{MVoC~TYx zL>5Ij8^DNaGbdKoZgvW0s&BehD^OSQydYYf-sn`kYB_zTP~BYH&vxU?c03A3vEZU_ zTTho#XW}j-zb|P_TnPDG{Bbd2aSg$JPvq}$zfLVbiXY=o%NNgdj0$W=ODDsMj2zOx z^as}Xr4qnlGAr9{LD!fx%hUTjR2ZjLV{u-SN{0=DeBljtf?byQu{3VYYS31vK5!S` z!amQQnGW1bIpe_pa@N)awcaB^W0*A)UWTv=3gmgdPHtN9_l4%I4lMpwKOHm;JlW$VG*}R%s3~h>n_QlP1yD&uvd3ZKU)?@QDNCBH;_1oU>0n<6L44l}@|H(hUE`*Y8ZEimLj)?*r68+9(sekST2 z+k5`LbW%|ky)v`1apH78^=Dzb}o|{>}4$ zIdH~HtKa{Z2WPyrIR5+6r19@d&K4Ihvo53l7P%9>EVA#l+~j(mY3BX=l74F~p#8cq z@#hEPH%PWYqZK`H%rB!Do|v7~A-%&Y37UcHLjT!P+$GM-sT8>w6Kc(yYI?3?yW>64 zzb6!$Uzo48?>}uijgYSqvi)m7BA4R^#kJU;k@&LlQedCE&kA*lhDh9h1f-8#s+VU` zVEJHJ*faA1_+rLXahheeN8`eb+(7W40{eTfwjFub*JVw|?+cxM9+mURl?zAIMD#qn zxn7u`;t1N)r_ZjW#`JN}-IsP|n_Ss0M9vHn>?Zx2J~|5@n9$QP^m&6Z)sK!PyF3|Y z!ApCe@>`GNP#L#Vy&D}J3(%>PHr*~FdL)`=J6TlEo0PNGUg$ej#QUg7aJ)q~UN}o) z*Aek{L;<_&<`4a1rXP}-pYYYIn2)9leK$TL<2HTUn({+#Wh?I)YrJ;1M|^*vzcZe% z*gLJ(Xe%gIdGKqr4Cw;(_BgF#QPvbQR%-UBD8{^NDzr;&_s(RP3=@OG`l(t^0)wqPK4Def|}}wLOV7%#4Lkq0FJ417_BRkGD*IJ+7E2>?{xe7G*AQ zIgMz<4iaYLNs8w#Y3Z|INx-^j!nH4cvP(b8D7P>=9ZXXi+b%`?d-?9mOLsE@F9~KC zuUyj3A6+wU$uMi#$(U+6HV)VHi=pr&9LmJ7ELQi-t1n5=a^9^Z>!fl=%6#=Za(1^T zCz+rP#tmDJ8yq_p-{w2MAGqwd*l@ilaftdALH0uKt|s?CB9WzUp&&|F=K%?g;fxeP z{-T16P3{+lRyeH|Uq|i#fMB$@?Pq$3BCrFK9n6tnfz(`4K!K~t`URy@9aCfnWqe0c z5g(@2LHf%UtXQi4Ku0Sip@%j^r%HXmp54VT)VMi(cBzis1n?i^`u-) zvPRI~D5*5hh7_nAG5MVw__ZBMQp`&!-`Rd#=>cC#ler$>*ZcVVW9eJ86$_*8cq%vx z4#fj6>3J>DdSm{b9;*u1Iz~LhR#LCygl|tZ>&!I0d6>~p45k+gfgBeKGXKh$>XeBJ zNF7qAmMu8&iWN5D1WWTC73&DSf?IFolIt|9rm8dzlTqn8@~Z8gUm|-~wj#}ah*Ds| zhU_)c>{~KuFo892dT!gOqMR8v1hu)A3+H&t)dSHnN%8wTsgGBWW<__!GNg|}n``$;0h#m9}s zp3ToqPoLWTs>B87qj(3QVq!ONO8&tGQB~4XAzE5KW!dxNGoV(AUf&+`nKtzWD)}25 z1<~vm4xmJ-KMKgZM)yw*duk8`P7R}~^Nw;4Y^R#AtW1bn1;`7FM_p5L)rZ?RzbCAaW;T!@{2O(kSEc8A;A-PH&2tR zvG~U_?n>`F+MaWkKJOemRGlnK2PZ(MKwbPQ-d7j5To-5G9!|(U+lzHLV`5MpPF|z z_cXLYs4n(S24TM1udSOjZi3!DEX_ho?kL|FzF&oc6xkUfrT@j4I}k(H_;4njp4^lR zQxZoUVFfdZ12AXQ_xTDrH6k2_NXEm8@r+b3)PwO~Kh<4HlvnW(Sywp9f;vJdk~T9j z%HBaG6I||5H^+{Q59voa1>}u%kTLbA?IeUaeY`nu@^Ly!=|vFA>6>bfilf@3O{1nLJ6dhAvr-$0ZlxYc}J=C zA(u9Q1>P0X8%$c=osRzJ;9e)kiz+s0*s5~k?Ig3)yLrqU38@TWill5|$JNo}rgrOd zq^`X&QF$X>wxSk+iqw*~cb2o2*%`?>DOQ-XMjkmCH6zW{;1kDOFOb?+$5GAj2f6v2 zYrC-EVPk_+@Uwtojr}gR)mnT2yUEJe(5_%DByFh+2*|P`qSbw$z?#|q9I0~j74dOx z$_(Ia*nFxw`oPI0dGTJxqCxNeS&H7xH9OR+R6+erz?rn5&ZqI`qUoPixK_QMA82r< zb!)Z-%zVsgcsU~fe=UEIX4(fGnIg%+8Yu8k9U#U(o(huSfP9)JbtNA&K+)#B-)Jq( zfaKSG5@S5(bb%5^qRb+KPzEuc@}=H_A!>%kj^eLR6{pD;PfY=9qUy@z2hQ^S^ zyTWX;P|{$eh7AKabds`hqpR@05>>13bH<0dw-Bq><+#T_s;QicJMjB-N|R8F2;Va7~hZ}A>=q_-WjAgxG&d? zQ|{zwc>BS|CiVSIn0^;yLmNbbNb1w?4&3?>;0q(tu>6b-kwGp%2lGFXvU!6$h+&~euuX0 znxGz$_fy$|Jy(h5P`J0W{V zinGjd{?yTKD5NL%&sQ7SoE78IKO}}{MZW1fCP4vxJow0W>;sn11!;FbcwoP83E}{D zFxXj2hEQj{JX1;=ipC34mLs^iNA@Thrnfbl!6bHRYZ+)7cR~IeY+@)`&%^Lm^tmyT_b6Pk zTZlem2DI(~wFEHxhWh$$%Zc=N-=xl@s$%Y$$*oReLzg*yrX3bjTS|qneT&uMqYldk zTyu`jPM;d9lUWF3aqrsqhhE6e$dL}fH__(t9j4ML$XP@XEySk=ndyA;kT5)gB0Mn^X4_P$||?Hl>%2UD;2L8FUT}Dm~9zvo?V+B zJOJGThX(OI(~W~qiX|bzK!Xm9bW(*4R@bYNwS%(08)ivBpk+mB=C=xRWgTtSx*A@6 zF#fUY78&UgsZ9#v^t<|A{=*N?@M}7c$38Rv;Qq_9Hwxpv1}SvPs?wKNJkEe*S*7YU zkKA4Qx5GDYGxTV50~JqzTCbU~xm3WX?cfj;xMIrbfh9angST1xi#ZDz?S+!I?->p|<77Sxy!YSr{Msi%Dqj4Sc&y!^KBHsDrTJG#^Z-MG#=03A1t6-KzR-BuG8V zVTESTmkU}*)Q3TfHqi%|d#oBby<2B0lx60AN>;lWE6&WePy11_YsbWn|DVOTXwT3q zA5Sxr2i#6&Pg-(_;}$w055k``-qlbM2wUm(`fBRW?x8g;T!2j}CnXk12X`|GI9|4K z6-d8}vHU5tN79CaRdS_IbpKkZ-b*-W{{|_Qo#0`cZe}uYjS-Du*vMTaySA4h1p_tV+ z*XB!z(?`j2NeIEqKAuA!DSbvmfm>8KELa$9)>1Zj^}{&OBnC4B9fL06=yb{=kIiV5 zLT&S;wsTK%)1r*!*lw6(fr;b5aIMF+Qokqld9xDTcHYnoCVPorQ=Khgm(#43nq=Il z?{hWB($us0n{GP<#;)z6i4`#97nrqWhPh(!j4#%_y8o}ChO-&aAQV6db?T+`uN?5x z`PH_`=ooKG6IjUCtQ$|3t)kIeiaU5twF zYp_@{568m&Kd+YF2Td3Wiv19K=r{Rrr_vz;nIvhg?wRvX>J^nr4Jn+`MpilRDJCBR z);+LH!_F^dg0;8iOl(qMqgb1ABskTf8G@EDFVY$=OXUS4VVVY7V&FmvNO^PV4RCOi z``obZ?a@D)1cM(Yj0@1Y5wlCml{2XjeJ zqHln2q8J7h3)jSW2Py|XjNjU`A3HoPFp)X8HEZac6d~0$ee7;-Y47^Cs7&Xfc(z!3 z@Pc2QP$N<0pY2hUrWM*DTRU3_jSIWYFd6B&4r_n*xAHQVHa`cN=}~ zigbsgO1Dzq19$0(SoBzG^Ez4*;~OH+#xeKeBjH&`7E75UBIZ$ZUAonj!XctMEUx75 zhMBd_y8SSzA6V?pYI}QQTe@A#gaY%N=g|UpBMf)}Y$s}djs&VZ{aZ9VG)~Q?8O&G| z{ZtKPQl#t9Q0Q@0OCQ_`v&hdjCf+I^uzArO47?553~aA#RS&oL#nvX}T)z@GUsA;D6(|3F(`$N54B@{#b^YceYKjrTk>-d~U6<%+&jFI}L5OQ^&fL;*ODm`c zGXtczpvPR@jk_-rrp^n`ds-mhj&=KU=OSHVLT2|54kBB+6L?Ca41hYLS}h-p+v*kD zYpcI=EvGBm>$T+;gl~_>wD|cyRVeGoc3ENy$XJI>|7m}Jf9PGha+~6>4?G;MLWYH1 z3xD7{nin?DU4jT>$J8S2cLnB3X_;B=kVt3v3vpQQFQQcrb=@ryxW|j<_%RDRGHN38 z+_u*E5{|>3Yj(<0gc*$nAB}Xr@IvMAhfOtZ=g?Y)A>sJH1nBrC{WS9X;E#`>3KVq|V&W&swc-u`@V$HAGh26~qOC8kpP1%RR0mSv>z( z>d3yQKAys*%_UGUQINs7UubpIz{)wIS-?intS(`Yg$nZwh!OZY%PJNHJG9bVv(Z*5 zx3!>Hkc)S`WjWW-ru5NbC3)LiNOH1iH9E9D=1G{^OK0^$`TsPw;f{~n)uX-V{=9l& zsgzEV+y61bHM0wgwD8!4odWGP&k+&WK&yt>ul4|x8g?B~dp*Stnuah1e;RDWS9_G& zZq;<8tCZCXcK1zN{wz|{4HJrZs(o_NZ`u<11$;bV(e$=5W9wvHz{H1CXUzuM6MSg@ z7P^2Bxp~bP1;J`7hF~C^|6wC03*D~1;93*U_&5faRp;PJ#R}@O0eClxL^vZaTuo-W zL^?QEPTI0?jl}tFm*+{rbJ5|>+cXnXTJ=`GVJZfj57=MBV*zd=I@Auk8>SGqB-u_a zMylv{G%h>MZifS6K7QG0^<0CeWw+p)NRq7Lz}iYYmuSjFy|Yt&Q@S|*>e-d=ecz&xJSC`gh=B)khWx;fT68tMPc%!)Arbyw zb=@tUNlQLG(*~fN{m<`Agjwm|q&L&w19+sFQhTtqF9gG@!8cg+(9F;zOoDsTVXG)# z*MbK)Fd4JZ9(9^SLJp&;4yrT+uu9E_jjW)-T&2L7elbKT^c<_7o~y}?@H&YrM!JQ$ zi4?87I=VQHc#F&q@Cf{He^=`I7lxr#b3f_d(?Fj%xSCW)9R?hltG1Y4(08@OHKsjs$EllP6u+-5WFXUQ8KYh9y`@DAs1 z&qD0CY;D8WYr zqvRWo{nSxU3Zhz@n}wcU(_sObfehJr^gpoRG&{oTj?flN(y4~|1Y%%HrB+K87nDbQ z+}4k|V>&caAhO`&uA^CFb7P^y;=-bJLsh%@Zp+$1ohV`uWL4@JCk0y~7oEDhg7pQs>sqtzxZgKW0Iu z!CPsr>4d?GK)Rr3gk@H#gKFSZ)nHbsc{7Yy7JHX0IgX#fh{>Hyi(j+SrJQ{)Cko%}|XL!ti>9)6#K~@d!^PqtA z-`$9i-~*#PqoV%25J~46Uzf91vkhhE*_GOy@0_%NU#F;^d{Eyb{}ru+CKmNDN0yea{FCP$7r0*}-y1tex_shAXr%^>h@Skbdv>=@JHkU$` z?HV4Wf)oT3^t|B;Y|@9K&elQ4=FMVO*^_ab3)^FJzUcA=2QwD*=#L|G^Q?bUTPP`@ zVcC9`iD5P8TumuN^P`5+f_U)>{6T?I{vfv^29RPfK1`qjAq$X<`LAs6>GN=baRsxRmp(est?$36^>4Qo*}@%`ZII5Wz@mqg&)_@jKa-4Im&Be8+!@F!)*6| zlvV$E$cg@9jTw!d(wau{4T9NYtMpZ}^4Bdb{WK(mAmCkJU%qitBjceou-OXAuA78` zyPOPU)!~u6%yQ4aMydKmKQ({{W@}5&Emf3ZYX}Wn4pBTgC!sUPkG6PVcXM)- z7w-$LO$NnaBO|?oR5wM=ntaBx_1-4=V|gNruaTWpEt!?5?U-AyA{K#h9SylOIhp~1}EqKGa_8F`tub7l{`NGXhxJK zLe!~!ZAtndmRVCo`N-P|{+XNqniR>ISlX`;7bb(Ky>0xV!>c8KdfL%AdbC@BV%mOg z`}NdRpRkennWF;TY{F;eUbto5_0O~rNXU)|(=uxV-we!EKIhJjU4R0qM;ReOaa&LU zzECf*F<#y7Jqf4+p)&f}5^&lG_`f;c+7ZW$P1Gqd^P(HXF72aDiqt93?$qJ+_1gdf zi}Uii%ed)gHWzzp~wKy-2+r{)(xE@dZzGT>S$?5;r zt&&&L|NpPyCV-hv;yg_6I&%hoIt|6&m&Pkg`nY03L=K*FUV3z$iT2<@E@7D^`Y*)uC7hi3wgc5W zv1$IEt`8+g=i_!4|Goe(*p%5If46j>lydi#>tB_k!(XU-JlS4$J`+%s>t!Hf00D!; zB=jp_#PRVT{_5SsLnp=8zTD0TLNR!A1wj>6m51*RD76(j15yu=E)QFtTa|m26a-!d ztZPu(X$=XgPbV7bBfZNvnk@L}jRc^95Pi!$ltIs9IZpTT=x&tjidIvjFGWXz^DG#k ztxf#h1VoV38J-@6Mq;o1*!cWft42=EOvADz$JY$Zl-SL4C4)@+x?m&0kwMzpd#xPx zk&W5kSsL`d3eo-7$pt^B?|5=tkOY z;;)re<_`v05y08@?!KptTpu@1jJm0`?^5wuqlbPWR#YOII$*cFuDa}o>SV5$_0l(oswbGS6RuzA4M`I&oSC!wq9R*+rDz2)Lntgs zJkTy=p%{u>jw>hdg>zPO9=v@54Xkr=jw7z3S7}ZUl7JQ4Bl3ye!aw_SZBNamn+3)7 zRQtxFG!j4}A>>69a!ozWgzTMo=CSh8f;B2|)KB$2hyzV0cPgv`0e_E<$(=A3i(d5> z{_GtlU=wxyv!CiRZ;WSwkce5bWz&?}Jq=SDhe^-|InW9>Ifz;RWvC$Z67cL%spW!K zoqEYi^v)k)uu06zIPGT9qXmv{$kbz(;W#lHF8DYyDLBTWkj5prdX<IjhG^{c7< zPqsLN)b!$ob<>H<)Z$shb=MYp%u4zn7sLGVrBv=+F`A%@bQ5)qUc`+o?XCUwla12D z8+E67>M(}gr&!Rj$i#5+%*f3H7IaLSPiNga@xJ%8TnUh1?D9wWi}U%r<_2~FAP`lW z2_Lh}mnkPu5KjRh^RlxoO)QOrVDxLmi!@D&E9#oj&k@3!WGyP5Y-+@{25oCiq+^Iq z;v9YOTc}Ly&q06}N%#YsDkkexTIsW9I6?YXv`6N81it+BP@R^#0@qvQ(Ni_SRr&rG z#-|28`3Z?pJY+t|bK6pIF+1&=g)(%X?>Be5OBJ^T>2^R)7=$ z+2c}jgx`9{^wUEfthA8sj}yexwUZwb_{qK%MM&DM8XX2BRT3>C=MT<>ElR^la3;o# z?CJgXSk3bRm({gZshN1;P!IDkFIJ0s~E6f(N*2 z-le2CGd{vmY=Z6&^EuUjm5xX=iyeVYqaMf+yt0&zln_yJ((m(QKxWjLi(8RBw|u)r z==Nwpm(F^2|MY(JNc0`*UYuI(pQKV#kI^GDmS{2h>BUVy6N~1_PKgh`+_3`@XXqt2xzc zSu6a|7W(~Bkp;%O)`lDXMPX)>R`!|tOWwACw#1~g%8bJ4@iatj=#n(^`LLQK)lXg- zD>WRyFF6F-b z@!fHE`kRUcdeU*sHN+drKhaEMhl^|kjh1eSR=OuSk|bwAoKf<%IWbT4KoJ#I#{7>8 zVmJpX;1c&A8jaITWlWfIiD`_yRZ2tOM>rsMf;K*NoKkKywcE*QR&R>5+hem4WB7@R zu8P2eT0xI;tF29i0T4g-C8{Xs-qQefcV#DBlxTWsCb^O(ZrPhjaq1Vye?o`<67yFd z38WXYF^{2hY=%@oHp&(Zw#xXmsRl_eUbO;n`FhNgJvMqe{#lHmoZ1&A=h3D`lht@6 zh3&c#mhRr)yIDzhwV?-5$I@z%^l+23dwLJ+COb{8C(4(Y*^wuA_P%u{6V#`dZeL8i z4F*ijTtGq+&z?XaZ$d}5D1kEUv8Y$j!0d)j%+JZdCJ0i$$jLg$Dl{Y2Axv;JF;+=; zN_aWFz1ysi5~Wz1y`Jado7#(Tdozegi|~p_q)0tJSh&tdtFn*Q)9eQ$I`KTO2jJhD zL{mdBuLxwf1a#&MHtU69z{bdxGp&ztQEKFK39<+PTBgD0k6URYeJoZKfYlgTAamnF zkVGR9`PZ>kt?5fR0jA^tzB7fQP97B9K@NIEdV3VMduC|X|4rRnEjql6+hV|7M7p4!zG*OdF`{?lCnH&; zYI1? zgrF`go+DaHPq&zHqjA5c8I(G2Y4AS@-#4Q0h9(z0Yl%L)8&o`UXAqg~Wr@iR($!&4 z!`NPjXi6irvsKzH0VPNCQ4|#PPmtZSa{VwdV{6}AmBXOgwS)XTMgk(87}_=xC;b?K z>Kzswqz7D$8&S+|JhO>Oz#$@xln0d}#I#H1^3)Zi(V6S@Xe%}R%BF{RZ0!E?yg0_e zP8AUQO8ltfN_{5zS?dQEy3DFZzZ{c&XF9p1RB^nv(<6q0K4YVNUz#xvc|pErvd8+c zTcyr7mBWbrQ-0h<@tpH$1L^Whg!jM85(EhP<%s4R7MHTYDq~AbDmppGHO-t;q^Va8 zB%7mMqAvW}5-M#K>Qy>VI5Tgwqvw?NYx!%i5S9cGuK8W=to;Y>fSOo6kL;DjaJ5 zrS;^Or;j`*9xu`N_@J;13!|}mTQLE41Epfel=AeLIr&1jg6bJ1bUdLFg0V*%@+NH+ znS$J((KdJ<`}Xi3m>LN^ncce-G|YD01lP@m_eMnZb7WhW_RX@o;UE3JWWBlSOF`U< z;=fa4uHnO|A;7!(b*58Q%3@@SR z39B3pKK)Sd!OB4_FFNGRHO_8GoZ}5W`72ET=QU1|E#R@bjp_dtp1{kKyY^K!3LSJ! zL9vL}yYLa!uG-o3p0FVKte+(vKUmSos0n%j8%Max(;28PW`-7TWM~%T=7oC1gJYlE zUMrZ3+SucsiBPkU3l0^}po)Rl_77nyMWWVO3y3qVe>)mJ z_p~UZ+g92jb_|yNqp4uKD5IH0t+A}T$b_)f_+;S9eT=s*sn4yi{?)zR7jVn%O+q5u zE6wp(=^(b$Knfgj!8e3)Q_3s0y}+J(rRiqFp;BJ&NEol?sVFG3NpeJu0P_K(iQ*?K zYeem}vwKrb7A%OX7m865v~Yq6)5xq0c^S`k<9qGO=^hV!iG_CjPA^G-*ddO++E;YA z#N18uMDD%hr1#ssP%ts1zP?`#pH4;EH5Kv-HnfN^<%0IaiR+;oy?I_%ukoEMrhZRZ zJq_)8YDckr`W1C5ME!{H(=cyv5<(SYlTiO*c|1sj=dlWCJ6V*xECS^7uTy}?$U|1; z)wI8c$_aKZBATLbB}=z77~uk3uW;l5vG?}4!e|3^?j#(Jjc|$+LJbn z9Z?zACISl0?!JqV-9EGq-WhihBnNli({78J4a{M?&VMTtZyPVq=gbdP9QNxYZ)-`7 zS^3Ln8x1W)`1i>52iab?I7 zJFkf6rI7f?R9YM~71uYOA{`0ki`aN|!Q_BgS|!>%_b&kk?LWVt^!H-YFFOGj{p+E> zFTLUS%uN)XIy~LGy3~g>@e8OzWDx{U*v0i< zykd@ak+j{yRmNE$ET;7>YhPNiPkOTIFD3{am>lS~bwO zU+UW!59`}HNq2$1lpSybk}VLgEO&_wY^*FzMatqn=&7U$EZQxIfkUBE!qp2*j7`e-LGJpCEG}3d{=?;?C?}tc-A;#n5#qEJpfM-2l_qOw_VrRE|G@ z6Y;KFsM_YFCASP-b@D8E^$Mj+)c9h_Pkc8Z^fXm_XVG;Llug+*lNDA+Fniy6g2-=s zKI?i6y*^P1|}WF}bUapg+q~hUj5WwBjEF1U=peHvmDF#laLEZo)m`Am5FZgDn)O`IOhwd`&dee=l`*^2GRT-bvq(1i&mx+MY$zq&p znzOsWrvDX}E_~1Q69mtzAw<3^b%g0nZN8fl??c0q2E3Vx7)gpEP5v(f1#^d4L!H&U zUDO175Z{(5x_4-Ti1fJ5JJ_TztA!iw0oS}EY{FbxIEHw$d zj0a}+8u4hE^M#qpO3t(JE2WPppNVueQok%GhK?jO7|>W<=abE8sN;obVGFu(|7-sq zmNA<2EgGBT_6u%j_`cJKU|DacPIye9UKprBW60z#+JXV(ELdMX?DCgY|GAr6 z?({{eu5_%gJC_lgPhG>Hg#DoLsUF6>;yBZLdz8k*mN@+VN!yY_oH-ln(3KcCbNu8W zBF0@;98Z@?!sM)l;0#-*#0tk(2l=8TAw?QV_CygTqgCXM8ok~U#wc5!lxo#w_DvV1 z7J9;mi_w#x1d|@_%^s#|Wa~%jd4GCy5uD^0la`+q3<{FWD+SL;QL*(PD@wG13lhn*>9wRB+yfa5p(tiT80Rim)iCOA*Nc*V*n&CDtC08Ct`dMD#oKxh8pxA&dX2`2-ts@SAHTfFs`iKZ_Kcs;;O5B6sj~`Xa!;=IFg04o#N^bMA!mGs5ahZL z;oy{OJNjE00k7k z+``>Fii6&732wfWO^`uU{)bz+P5t`u+&xo0ES;j1qASN9ZPem=%)(-*<1J}m0^2|FWC({H#BXxN#k-PObkh1$MSkm^gP+ykc7ELsHLg3GtDEZ)tQxA=bn*_0Aq!l5&8}G=$=q$d?YWN~ zkoo8wz>fYB}(rRkuDu1)L7_sOYf212}tisDAIecN$5oqngK%iy?gfen`>si z?@YO7=A1d_+JC)QlD9s2-u0}t?zQfle%#Ln&xvlod&;ubB)1d^v02)E$~if!S+p|Z zfs9-e-?0k03N?u5Tex56|Mpqt&V3J-Zf&TRvLxK((zZZdc-d{2m zMDwh_lFUUYr@aFt)wnHp2`S|gltEwHNfWMy;mn`X*O|#a#5#bFtd);QrY2DpnZvm{ z5OjW07*z1A*M|VQ%{E5a67|Zs&ZJB}d_Zauw~upsnbv`6%jc=74#nT_0F^;R$*wqd z8wRv>UF!f;C1uiA7KiTk=ZMyp?(gX91h!jwR4CjO9gO7Wk%l+3+=^axQ0 z_k9w$k9CRHR|<83H|N|;w`Kvm-|53A=LN$Xnr+4_!@BZsr&~cq%9MY##oAl0E8n9A z>ehr8$LKW#%HnO3*UoaWJE_;{otqh$pj9{cv&w83@bfh#D5>MI$2m;uPt6kG= zk}&(d4Z(Urm`FLgA?X|d2iq8uIIVS#F0KlIz}c|+Z5UJ(4?FTpQe#~-O67(vCqtkd z5c-Qw_&K0RkET4JA(K@-<;d{U&hbSiqB~CrPH91#Ua9?f*p@7mx~_%n@VQJbD|eWj zoNOTQzyQCq;rk6Ee~p>Qebc+3%c1QnM?lf@7*j}}g+M5I1|{_3b4^IMR<)hQEl&0x zt@KJmpM*;GP_>&t=_mAxmBLhT!-BXl+KMC=LZFfxfQJYV!VfN?6@cHok!%Kebg1+D zeT6zh#4c|ny+s9!Ys#+AOrk14h?c0CX5qqNu4i0>(3w)uK6VAT7@IE52lVkrlre9l&jG&X2zqWOLQb0kaoOdRQ=2VtZGS z*<7!@#Ij&!Zq8l;qZ)*ns@~;?F+8+WXpLSVM}$dgmn2|pE%44vf$eJ?W~Sz5A%O@) zqJ^vMstE)1S{cpwX1i1&-VTfvdJea3Hy=?Y8(<*U$G*BIx&j>Ehi>UVz?cA;udmXL zQeO%$iDF6Hf?e8Qtm{ihojmdErRKM5UUR#j=tey$;7HaP*m@}>D!Tn}wLw`<5*Bqj z^nrZUK2`o5$%5dpeB9<>gN+Fy3pLk}zm1S&tRzBJZrLqemQBL{2$QR;Ac&_1L$8<` z&)UmuYinW$pbuKTpGE=TqOwRW0(KdFRA@!q*}l`!&fc8Eq0Q43eB(yPn#Vq;1buji zBD_(9$nk)M&#c+X^q#u72D0&?V*V;7+N488VA-8V5VOQU`nA^q>!zactzrV;D0k=H zV}S}`=xoAL0%anTM586{boD$86P)UJv1wIN@Y@UbC!#MZ4Nc1=z8H7rC3R$2>H&U7 zh6(yQd35PYE1z9r48F``Zr8oNf@ttnQ9Ytr{ga=}sO${t_4_5e)bK5z8=HIB9!E#| z?=3GqX}hBcc}WIA%A+l>OE^rZc|^Wd89(z@%+q1~5Y2E&oht%ur7NT`cD~9PUVBpq z-c93240kG>^(TH8>8oTfr|rXYJAAY{S%6;ld$e5YbX(b5)QL@G$lhlDc`}~-G|jc# zG72cNmk;iKkx45D|Ar@tU|G3@Iz@RnZ$$XHVi4Th0m9+rF-&<$EK^XuVO{JWz zq&QJDb@Eha@o&8)&pNen+)XzHU+mlOCms89@6l7Q=^c=M&98(R_1QIyw_A}1^ErcH z#d>Ie{V2OSG{+w8Y6=~`K3ew68i%;j7jrSptX|b1prNCFZr`u0Fi?W2*A&C|3Fm|q z#X<$K^SYALra!_hBin6^5~2VS)## z2%8$`BeAp$Ad-Rzh8A)aD2hv6i*hKo^Wn+KHk>8~Fo>*HG&nk}PJ>t38@Ykd%+4CT zvj$i26-1hB;`q9W zuyo>m%^Zhpd{VvEDbQX!&jXk;~Lxp$uD;Z_eZ;&OYs4N@C} z*ipuTGKVoh#Vb;*zcQgdCIsk@Y*wSCN*wPm*6)#l9M7Yv0QQ1!_830JgyP{mNSX>K zNsMs0E~Hr@w+=1AL3Bp%n~~?k*n&Rk4tx4@q1&!Ezn*HnIx6P*X!4#Cda7|UNLnD6 z-#c+}I9E+!#YBN0mC*Y+@`>cMv4l`J#s!G>@;-zc`ix7?WZu*5+j#I}rkX+w^C@v6eW>JrnM7@j4l$S?a zrPL^BDi?6Nm4&V$<5^`qzu%AdWW6pB^IvBd8%gX-P zd%W$LN|h}H=XNuV1^y8~5dw{)$rpO;fRYvg8ce#E0}oi-GjbF(+nQ`lzB}_!tiRyh zKt;XiPutJnbj9)8dOdu*jp$70`3j9^G+5Vez2Qz2?hhrk^)n{^&ezWPX$SnzIZQd}!&u zX^D@Ql0su$xRt_l;ztHP_iH(RfYVIdH{`Q1eCQV}MDv!Yr5B4fvFM1Sl%5?YPg{%& zsg+8OE0EQLs{lovl2j{YC^iuqg^NVL2cw0S{q~igz8%1)bER9)?9r}?mmwG{40rTF z)H>n&rV^}H@j3%MTp_L;r6oA~Ws!A-*en**JI^LF2-ctzaS5QC1jyz0=>1;d>pJ&< z@(=$j2M?z_n{G;cIfVp~#WUExcsH1rbhyffRwky%tPef+T2bIL79qUpk-J@vr(SC!K_s$vJ=Tp z(i=Nm3K{czS&v`uVhB%-2|8L3K85{s-^#1deijjQXn}1DN!70_urrVk;2CZ0c0M+I zEytCz+u*98VxfvZmgi6_)6gzR$5n;vex9*$N85OJn)2L^Qcvni-_kGm@Tt<B z;nV3V3=*B|4H4hKXvsdQOqEi2&VhXT1a8DH zd(WK_QNfoK;A?Wg#Pq z)jRM>(ZQN7j0Mpx$#+A!&-1vu(u;kacSTh4mKV6%VVoqTym<%nTg2yB#-@jrcO!hU zF?8@_Fo~^FZe)Heg@cY(<-)`_aMX&c~TJr`L?qhr>{60Dn_ zR<+Q+aB?&M%f!F5vMAK}PL>3AcF{bK-&)>OQy$pwJCL|s^rAja8p}X;5b4Pc@KEmL zJeguH>7)N><0qs*5I4%yjk-GSy7J}4L34DOeZ2iBdbx^ZW#2k@J;6ReQiW}XBu9X} zPs1Y63p&{KK!fFh?vPxhDiPsIV5J54!1xGnfGV8`#lDP= znqbEhS7_*v+7gwAm0e^z{#Clvobn7NT9)x5QB_nX5hRvq1IW@gJMprlPZb5`X;tMO zc)z^$S~I`!>+=$=7JHXexAR+sF5W0{2lS5x_ppmUqm6^)0oWts`*~h zE5A#L7BchJ5)uVbrc?k`yXp$QQ@496)8a$ts`ncK#*o=5&|qQQIRr{#9R$9<1t`_N?GQIAkR11#4zh*neO zqtBG_A$w^5=VFCmjr|i#H&R#iHolXtF+myNWje7S=t|Z19=egtZzoj;Q9V2f3N$6#i#ha6#&x&I{Rk?F>b)C&Qj;VE{@75W8Fa=> z?rpt3Cef_J?9+ zm;32zR*4#NlFFCc*@g9_3_TXPq}nG3`66?uv?Tz@a0~9GlQ>~l{Bc5PyDe&w*TOYL zo@>>QuXDI02rH4>9iyxo-M-RLnnSk~R8`7w>G?Nzx+jt~mPh?@avn0an49K){Njf8 z@MEMaAI0DIG*ljlYz`cY-(3ike2RdT`Tmkz@7x6)p0_67^X$+guEE>(D zBu&IC?aJ*{09Cb4txfJ-fM>+ba2#N zpF(9CMB9a6Vv6BbVE|BP7&c`Xx^km`y%Qd;D>8JZVpx+hacoK`9FivRM_82;KOBb* zdkzI=iV%i6VpvGGi8`1VYKJ$i+|A>I88{JSaNP}6D@gdywe=7hz%lQD%$Wb&Ob94a z32|PZwX0)I4H~S(Y%4t?m73AOBh{HKN>=LU(Xw5yQdF2OhX%9e8ED=VE!L7LpwW&pGC)6|-TnN!k0oK12T-Mfg>q2Q;+^he*?4Ty?HKvZyZ(CE@^#@c@J><4{i+Zn1nzCg(uI#hm$eY|v;0~++^f&}>)6s&sPb6fk zF4L=BP;|!Yp3VWW<7?VWg488PwdlsNyFwdqI*L`|3DMBZ!LQ=O_eRTu~Ym#q{~K}H!`qU{!7eI&E>bf#e6!Qj0w z__gO>r$v_{WE5|Fv--l}NTcwB1!0Fj7j0vV#J+a)8~WMMuQ%EtO{dSTKe04#Hx_O` zIfaFF))KnEA{qVe0}0etemG^v5?wQtHLPf;z!)yCI@}5}v7H3il`3$RXAm?W(F^bq zJ9&7Uhn9J0&Q1dqr)4puB1DE z9Ph`=RwhUD_8(}8m!$v|%en&L$MeqOk{FV;dYnboYZY3Kp!Si1_kHd_A|trhb}DL# z63#gV&3wvv@HLej;`=FJGC-10%`{EqdS)h}Gp2kWh-uZ^XPb>XTk={nR6bmZC|9Ll ztfcQ;s11P++fGF|db%@v=EIWO<1?t2r3`(Non*UkIAL#3sHJ`)f4-Fgm61WDrG}yH zFp7N~#i7OST|ZoyBXq~zRh@aNb2Qj082h9^7Hz#q;j%|JQ4o$z=j~puY)}IQR(OAh zDL2;m)b|?InD&VlX$PBWC-T(V1?#yh%a#o1C?FjS7LfzL%M1TsUR(VSkMIYN7Eo#Z zZ+&|C6w^Y3V4Q}xI!ez%Z*2PT16+j=!xu{q)x$^IyKFj>veRjAzB(4di0%&?>o3#F zHd+O>1(3)#h0fI;6u@Wrq=YtQ*=@&BwXc8s1wLia?m>jMhGe&amROHmof%a! z^QH9wUgA^yc4uSnHklV+6I@gjKZa|J^_I9Xr5o`$h zjj8A%o<)KYV%}QNOe`MEB5JzvARZ`4dRLUJ9YyE=q=ZX9=*gSs23%^_3nGdVUrNSx zJdo1Mll{1nu!-bhz7%8k$@ZADwGuTm{qRa9_UhrcnzTb{? z-Z3{8xKZif{gVZq9F6BT)8viT%22dk2~$8^U&9}IJQti0VV-JPAi3wr#W z-8|0De0|R(Ztq_$(0ZapNgbKVnJ*maph;y6j)W*7#S}+e-GQtpYq=}6#tGr|8J%O{4W`Rf5#a8!!DrFHq!NV@}s@3p)(;Lb#nG(4XF(` zM2h|_amE6y_~Q-8our+?3yL^@Ec86l2th6qMApj@705}~O#vsU`GVpIU{yL~`h~mZ zkBNGdFNEX+VAYP0Lx)subH;Zj)3&k%j{_j@MA!vI zv4+5R`haVQybd-9VGnZdhB*Iem`d!Ad#8GA0Z>kUM9e|YIS((n{b4q*sr<2}UywNe z6?p`Z|8G$L!s&5oUtkxYBH(vC14ed6b`o(Y;&Ud!fLN);pw2j-k#Ykl4+}0R;=Kr7 zF{wiwx$UyzFAw~6!B+f4#wvpIo5rouxEr^qIgA0l)P!jq~ zUL2U;bZq1s!$9Ae#d%0JFtI_JK$Dz5@E>vH%uQWTASV#`R~Hohf1dKsvHWuq{rUF% zX*T|}mwzr4f3A>!x(0vxM1S~~rnOboRr;EmCce6F=C>VxdL|;tKHqnv(7K!B=XBTS zLW6JIZQ)h1bm$GxOQ5`Q4c4G{8s zTgt@05-8+W0KE8*+I9=bQ9cw6e~m{#e{8ROPaxYDTOHFw|P!>mSM4n#~ zq}2LfrJ?>iZuXy^^XCR&XuU5ewt*mUga569{U0N!sL4P)j3Cbhn2F2JX8so^%_bokTpMHLXwN`7dW%mHT&^^C;`!h=DLDXZ_+2;{< zGfEJ3&mRdtrDtajqzfFA0Ud7$;^Z%L7Zj0GQAhJo()k5NkI)6hK9#}e0#aLKTR)`k z$oT|7r@yf-k*s6Nv556O@?&6he`BzMo*+07$q47IrGp>97h-M10gxF`PcgJaiUn9X ze&*>#?vtf2C?v^C6K(5zz&9p9$fME}2E;LKCwvg{FZU84t0XJ3#d%u^VrYr{OYH>( zPS)Rx>G!+Z*Fcco`U)fZh3yLmVpz)g=a6z#We?f6Vajbhmkwi#3 z3HfJFGxAR#=F(2l1qIOdf55PNZu0w)`)$}bio^Lq-lOEv0ynZdROds}qU0Sk7`tAp*w8xea) ztNq9*NkpvtLWO$W`AZe4`ok{wL3la0qkX&{#75lQMr4!C*KH09ZJM5q=M{Id@-?2V zX*rWg`DfmhjkJPD#MFOhM;N$kUqTWzL=K(y{6paH;}nHocE6qZc)wFN;=PcA5GJ62Hy6dpB@A?I`D&VLqD$S47vp}RlG z_40?MQjqUQh%bEwgzoVJniE|0zvCwV#V(XyXyiUq47uSc;ISK6Q=MZWn4}deljW0~ z;q7^a-}SOq{0x4GA{Oh(&!$pR909TQc&%`dGkM`$>uz(-r+;z2KOFvl^-Ib|d>zRf z@L^%VHM6r(mf~b)!0}!u&oL#ob+xs(-SwE*VE^quk5gTFg94o1xuw(PrO^t&F>V41 z_9(@X-5{NQk@e`|KZ2@%#|{7EF7!*+5Z|;Qr>pYhcV@|;AE6f%!LW}B&L7rd9->@U zfGI=ykpP>oyrA&Gojf$RwyFUck)JCH`nR2V9f4=}qu>6=uX$~|eTlFNIro<*hljUB zHW7jOg+iXa)&c}Z0f90a(#)8_r7$cDn`Cv~I^QonC(P0Ad1 zp1N1Dj&(D9C9eiu3fP2t)TFeu<5MF6e$57@JFy0i)v*)R-d!~WBnA|W23_}iisy-{ zsg>SR5gT^QrBnRCwRG~~=6+7Y(Flz~QCJ7rLTTx zcxZnA`1T*Egnte!Uuwb(oltiJ6qWe^kS9__NhW~sef!d7c)yVi&+pvtfV_#DipW_a zWX}{K=+NI^o3jn+6;NdWVpAt_0hjsn;r}?sdT9Y}LRJRCRTOa1k>>`LNeCLm(E)&~ zhxNg5FbphB(f*L`kvIakh&WvVlnkjqT{He;o?nYalkeRIRtw~*+{Ry4|G>$){r}i< zHNsBAAlpD3J$&P>>;|Qh0TA&!?wz|hZyLTtENlTy=1EXoOwk(4LAUMS!H)fy2tTlG zT}Wm>Z+zQM4W1GUbjZm9fBdNNrpg;h`%!qkjoMh?^NQ9aIlRO;ke_Fy+T zq3Mq3joc9y6T1j<1Ug0KVIXGShRs!+izykCl|0tF-(0{D23L*j@)a$nVGOs_m6nt~;BHY4KfRzp ztFU+XokiTEZQp%$te>*@6QezR`b?BxI_`*9g@z78vnU&j`i_e*28JT`Q^9AYy(8a&4I ziI6Z54P-gvf}+Z7Fe(>5x9q{$*;V%HN1`++L`9NVSn`ujkCXAbPDAa~%i!h5Oh7MO z>v+*;J4VY)s<`o9cNkNBZGunzwcE$c6-T^Ux%M_30gt`4lzVh?gr|+PSSJRrdyM@s zMP=>Jo3ukzhpxIB1u%vBfq_(uOqKy-aLL2>^>NW+T0xIS(>g5eUL4qah`9H-jiQX@ z)`TOY?A3W20aH za^r`A#LZ@2X{hY;V9znBUefbEm*hw^Q-@mu(28egG>qN3b{i!i9n+wesG=wQxDKxq znR}`_jSd0lY?O7(beW)2V8Qrcd6^DT6-LWuo*}m#&SH!Zs?^feR0&EOSkOo1Go2b= zh~6C!w;5>_JP&KLM6t}xKlH?Vec}9dN=o)=A>4dGS)iy(Bk1wVab*a9nkO?J^F%v^ zIx3#01C;ocu*dx()#ISQw^|1}^RigkO2}xTOSh7yl#j!qzpUuA)%_5GmrxGO30qcS zZ`Y6Kwv6bl!1uVu&*?{QV)th(93FW5D3DX?%stZRjwIch@B?bn0*1-V=P7>bxTuF% z=dViLu?DF%a2D#7I`?;=!ke-8~Pb&?C_E)ViAU1)s-mb$on{&KS4= zS4Zo0Vpc3sJ$0QpD6y<^7pQneqj#q6mJ>Jt%E*1g;*${iHTE7=gx!lt#>SI3{Lr}v z%=7%QjWL^!0s07ozf(1HWiJG>A^iP5n9>Uh!3<`VrSqoKbVqOXU;d7r04yHWP23R2X22zUZ4uVr5LvZ} zXN_jDQg3WPBrZ0rC_@XvITK37cvggnk_%xvW;-PJ(v8A>IBV%wTaUGY|woK zcIW+yk5`a_%uKw>RPpvG=&fXPKW&fD4;X25T+ou`mM6!d0eRdY(>?O7a~0kpS3fhs zp=$?q<=q=|GuDi?f4-)_ zrg3agN&4F1Ef&B%toCff-53kvJD%dK&5p7S{>?vmtCTa)`;pG&%aX{oMj zu+1=*hj%CEdY%VI-^dhr->lTPRUoX8#Jc8GbMIxb4m|QQwOM{OQeelUUwOB6N$)LYeTPAiIq?1<8HtQl$;7GX9<`)r?U#osFs^~TOUHWSZm zge<2a{*pU%91>1ev|q{SKP~8jFwHkd!mWRMo0d``y#PhAU=bbKSV5pIk_uhzn63L+ zl=*dww+WCyPdQ#92xoE+oo_1;KwNKDCCUh7Z-Z2**PR09xqZz+ToRc&>r9%m(F7Vg zMgKl`-VaK!jAeiEUUl?{+clb+xeY7qYTfItYhb%Vy!<0z6ScoUMbhvJj9T;nm!lAN zT}Gs|)*lYcD1V*(;ZA})iOJ?zcdS_fWlxKNG7q`iWN-a=cCWibf~}|4*I#iB{t7~n z`9(vMvz|UdG{?o_Hy_DXAwtj-eV(+= zCG$wx{Y-6h=-xzU=Xk;HDI%Pgk;93{=&oSH44v<>D*K}xy)ZrX4elos8jF%6&jZ=U z;nsD0U^Pbb!PaZLYK+fe^mBF1WHGa$^)}k^ih72u#JhSTdht~k6ij%h^4kDwy^*LI z6}Z|;zj^(6rw||WLKbrlb9O9jSPTIMZ9e)t=F*AiPJZAD1pGp6hcr8Y4q>x8NtzT{ z;s=uTx#=77GjIrZOgMQp=4=Yo%XuIpR(LwJA2#xE_kv=st*C1%-s5jA`=r(VhH1f@ z({CX%k84=GWs}~F!hAU+;;MDxeD9<=uhhuoPgX~`bm4TzmT9Q@P5Nx{RInDoZk#F5 ziO?8zUJIepm^*v&l-+mlWv6Fv4VP(^$>InCV2$TbJ)5Q@ z&8fKFl~xev`FUy03VXCWo)>B4M7FYKf%C^UM#qVBSf|nec|T2nXAjMAO*tu(3%~d& zH7Qc=s^p{z<^|_W9!2i^pXu(KgrroY{ERyZiE#%J!%5z;_$%r{*w5S%T-@E^Qq}%D zA{lJtyhoyuvd7S7 zrpy^PRgkIXgLq!8Na=4cHguvt1~LUHJ_{f1l?o59tyNzo(`qtC6JWsvIRWAN@RSTw zE1$SYo%95a1RH@#?f5kR?}IVRxoS%o*gI?hyRCjV6*={>=!ZjB^Sz+>Rdw{@jRG-T z-0++2J&oL?<%t;DPW#F-tOT2G^boi->AZo)1rceq<;_#`V}1SWAAs&Zprij7(olI~ zoQeBLax1XhtE!rJnUREmX*YCUD2_h{`*m$cU)%C5!Y(Mh zO2}8tAkiuX$p%9=v;OwRE}hVO=bSek2VYRU|72$zs0A`2axIsX2)uCRPe;-oZM1hS zX!Z4ZyS=?G|6!sMR`mc?g+bAXj0LRn{M;`z)cbkB<#W=|%pk*_{w_%eM$HWcuBz$R zb|bAQ62BKBC2KipDBtc~CMdgGH)*T?RJ_GgrT;t_MZdliadt1({TLS1$~5*4m!FdN zwcxG)ms+%ow3`FA`F?I80mY;$0t0vJ)}8yIfMmpOH}Kl2zt*kHq=K92>pLm4eSGGq z1f+#t*jY>sjss<#hf%)A?}+y?$OwQ62viQA(i$TR5c{4Y^#D@o)o}a}!tO7oKt(7h z%xTuMrDJ&3Y{0?J-IHaYUw^cj5lrb77lP^EW{CsXn;G7g=m>t*)0F~uEN5xutmv<} z>G5Z8>FC7Y68t(S{M7Vx2i=iL-CI8iTOF4eK6af5s7Ty;Cd{Ws3 zSI>@0dWEB|`X1S^Z@nS&O4^gJPe$eT$hGER7IbzFI(i9xEQ@h&w-fKKNH=~fFI6o1 ziQ51fyp|J%J}BVO?$ln3OstF-?%FKhEPH;)krph^*WJhzr2$W`V%sUcU!>+*_MxOl zu*PFNKJF<@-6PAjN8orMfex-$T;pFgh(Fb8E?PBAdFEC+ z=H?de_t}#>J9i~b6H|F^)jpGHhH3j?$Rn18o>6nouu*8y5HEKK*28gX*h@Z(i-`5W zaDcnSL>7O{?^vD3lPE8j?k{e&3XiWubG%}3FV&Fl;gX!ca{s5ukHciW!wHq>W)7_& zl~%{{SH z=n@~)_j-K3J^-P0YUSJJbPjE0^HZ*<|2$T%eBUFrEy5~RH9~7FVKs2BTY=)vz8bZ& zVDr9Z5Tz)D3cp{+vt|_F{Y9B6uq5y+)_q>PpBP(Ou(MC1$06 zW>o5FPrwnDAN1C(KR_J|;5js z_qlEOn(8^|^;dBg6Vn6uN_z7iH`QF`KhIE_6TZI8TJ=qZ-h{*Bj{sGO+TrVygJ1DpyZ0UPHpw?* zIs%wRJQl&U;ZsKiY;xSv5-?zDKW4D<>xUqZPEM#IvBZ z4;dd^YrU;2#K$gw7C0a8(PYNPpLoofko#M;JnOE@GHc*B>E>5C zB{m|#rrc8*>DHMdaA;_+Ou)}rQ+d``>^tqjRFdfNtR07EiMNdvwPV+!_hx#o@1o0wvZ(Iszz(eVED{@5+lA_ zR-QeS;TX|g0oonI=M__qW6P=@?-0te0#a@A@{}Ar` ztsGH-QJIb>+#aT|L;n&Z5j)`q9ze6hxoov3<$;L$E2P>Gz|;NS%U-02+>N+g@Zf65 z{gyG}&&!*siv=$XBG1R1)RZh)mf^^2T8dbPQ}0N#TOZ$On~Gf^QcY@Mtu zXT_%-4Pp~itj11gRO)*L+D}AsTk2=0Bd@Elk`#y~1$ML0j+mc_4qc~CaV5svsg6lu zvL$Bvi+%c4Lm&NLCkbK|5*|kp_MbAz%H)2OdhmIENv3CO0>~N=3~6dMh8XnoS*tgC z^Ekst3*=c*Y;7J#5m4>=q(HDqWJUdJ29{SG2G=bl4QDx`nHbVu6ygA?&uKgN=N+R_ zwmoXOci)V?X>Ym!~~DEmMxw=PJJjixX!;laDNITY9C zpQY(pXg{qjR&#UOZF>B;ZlY!GyRTt54P2w%M?-eJP&Y>lc=O#y6To*8V#6Et^&f+V zVCa-6Nx{& z9G>6Qo@n;g*Bji_L{>k^Xg^|+pl^+qfH}mT-#X|oxiLm`cu9;?iO__4rLw$C^=H_K z0s}4O9*A480jg8CTJuoP|1GQaZ+<*p0po4gA=AS;W8CNImPcen%mI|vcj=Ki*xxet zS@@=-&=O$_@x&F{bm+BQ79hHopP4z6vwc&Ytn389VY2`%{c8(C4F_3}f*fH{|OyqW3#O5?oJfIi0{}%%4JeqCk^kygGo(#cmmUzn8b3rkj`I z2n2V-*@PE-=+yl(QV`npAjrtVRw`@wEhFv4MUrgB( z5OZeU9*q`m;S8886TW7rSEPlUi??`_*oX>-(UN8eS88zdURd)Wpv|qk27{#eT1Yh} zyCB~2@Kev5SW2fm4betVj(6UKeV;U$`z^Qlv)W@6CVgEF`+6zb%|`{SF82-mCR$GS z%d#7Z+agwzg)?FX(0K6_@wFE>EiM<+?U;NvBJAqsaMpIG7Y^fJ7R9!`i|utM^On8$ zIG}rD8R;ogXi@O=%!W>ObL?1ds(AyG2c=c*9kq9R49a^GJU=_f^^nUr`PP|K=m*9R zeK3JOk*_g*a~07v*tSOe_lPW2Oghia(Sn_ucQfSGKl%z>DNk2W@HT#9-;KAvWndV- zeIvh8xJETpk4cZk$!k}4Yyyf*OS$Ll)@lFpZ$P5|v7s88V7~YhV1YwP*Nnb|DchXg z^V7n+*V&OW>}rIV&a;2(idMfv_XagCZ6}Y3VU*nyWng+W-O(h3+0usgE&3h>*zDJF z>O=;_XL76Asb%_NoHkAX#T0v?4`7Z4gVXJ z+>7*94ZfpB^4AG(jQGm18?NG3;Lg(rrFxAbyj1tkvq_F;BJiOu$TdLRs>csn3a8mK zom75^Z^Lycs&=7rO^II5o6dC2SqU#j%3j53OjJX_bHD6SCEcr6jqz~xPM8YC_))RH zkTfcw66K@oN@R@&fiW}KTMwG0bhCOyt!cNJ!pqc|`gQ@S?Oqw@r?25Bi176L%WH^C zm$t~UL78jZoz}_o-5-?I^OB~zmmRF&jo(|8la!*(LW)GM$crDxW@+SZo(acW&^|6a zkRz<`dZNg~`aSr%W2p+lm8NoH(zn_v71;$_uT$vzfSVg$Ox5zI8D(o_j?U*LC{b!* z!x=QA?dq!(ZD_)8ef1*rXl?Q|t~dF$3LE`^vdVoZlSZpW>Qtn&M&#yj`XY#K-Pr+P zmcGf7dC-w5zZSr+1ju~!49JJJwOne{DGg~bs% z=;1&dXJY#IL}b5cA)>-~S!R3+NW{{u5XYDCS_)pZe;0I`+!uW*`JNjgWI` zIz~Kly8B^dqQ_QCzO_eZt`E9(iqIrHX+e$P-p{sucTedune!PjIO%ct0W#Qv5O7`> z6y{T)Q@-s}84mI$kWfLfAP$2O;N=U7B}wEl)58l2t&S7-V{HILW{X1XxU>Se@^_Jw z?F}sQSf1^KU=5^2wDcfZ0Uww4!5GjPA0Bz?^zJAKp$;0n1!RE$&cUQ^9Cj&8EP$G5 z0{u0krtpHIM$TWCuP$~{B8k&S^X!Wnmq)n#z}w3ATymrsYzPNXDWEYVNQ9!3!R=K8 zx464y`gLuEp;UZ|5tliU&5Z_r1PwidrmKDKr$5>U=>j-b43Vt$Fj`fVPOCB5GfhSj8xN%QyW5NIafu@7 zJSm+BT`TbAgjMeV6OP7@UtZv+Rkclqwhps2Q!XeX64&=Los%{14!CmrTzIo@&XMIdzv zTzXOS*N>mCaIP&UzZ-n@Y$>Ao5sTJ(#6z!Go%(A zWv~%0WTa1VZkwZyb48BtbFIwn0!1mONxum`0hY2=mb~vkI_xK$UIpH!8%Y;@shRKW zsh`P6D&<@Jr6Oa~9bpEJSUafG{qBd*&MU<@q8Dqzq)gyv#qY+xL(^dSfLhn86UR@j z5t49o5CJ3V*?0SK;mY&_m^J z;YOZcwnPpd=@vab&`ICyJINAY`_Y+?(9%Z_cYGb~c%EmTwwPh>Qbe`Qk>7Ty*4PP| z-*Ibf$5GVc=I!db;8~U2^}ZlRnON^G?`%(dJ--Qit=y(Tx3sgBITku`E?NegU^JkT zM%G}?(f|?Zcv%o1T@Fb=;l%@%E9(an*g4he^JJh_#AJHx2ZX-O*_&kH{4;k49^Tik z==&sx=$BQ@DnL|Q>ry~%inapoy30>@_Rb41Q{%5Pi~UXl6zyOJrA6XDMtDhsSW%Gz z3}}?5>`qyG+vBV2)dgGv3>FdfSs;{+7cU@3}^0%e#Pwc3CJZbdtcL>hm zTkm_?b`CV3WOg48TDMjnI`yp8z_o6tgJM0GTTM=tmWqxNKhYX42p>6ke>qJ~XIO`g zB-bBUxJvCkC_cmRo-_gcgNAnZazeA0vWr;#9M7bQeeJ1y$jE9(n+_lTkHwF%XUD;4 zor%{w<>kzeT}p>L-DTBO=_HNZ6gW_;7ZeoraUuJW5-e5<|{S#g9is@37 z+e$^xP#T{ddPdVnNKK(%a4xZ{ofcAtb_ns?LB`iNJOYZb0CIvL=OG?IxCe*= zQU{N>^ybTdGdiN@W+d z7TU*DB&R=YDSHrPJV=hm@M0Nel?;gf{v~j&^>)t8G+zSG9IVO^8k`^f{cLC8_MYa6 z#|4G7rwBb5CX)_6nuaL2<=I<1SMgK--EqA=prhG$2zbJ)Vks6t_hOS zF3{A)K{@`d#ZC3ZU4$`_Dbcl@K^*%Ua$}W968H*GA)NToROOrc{7}wF+m*|ei^)K5>U7V`gEzJ2$uHz4H zdhF)eXsAs5f9$luqLct3IfC?d z0D&V2NS7KZ0cnZ!gNR6t)R07a+mW^<#o1@AdFOp*?)f&)%(`c-`NkJ^cDb(q^)J7I zE=-r=;d|Aj&xwDXtoS=iLy#F|s4QEcZQQe7 zc4f3?^9j&&?%`89NC$0aKc_eE7XM%5;(dm2r{Cm)AS9aHj?J;`?LgYJ>mbNp3&>6oH)H!t`x$UQr zXwyxWh~8?KZFMas<8PeilBwF3lVfp;U!`iS98JL_^T}t8=&B=!+Fk!DEAQLe_7~xZ z`qkGx!V#s1US1r&{UXOEH-&B4J?T|mTQoZ%#`3aY!Xu5Yy1qudk&yr5K`Zal$T>_(v+B;mW?ULi622AC_`>1>m|T=}r4q%{;9zSi zNDYIWl`rTeY90g~ftB2=_6omqlFlj#D`C@C&kIN?%vRf^- zP|H}IZ?CMD1cxqj;bYXnB7)s3#2F+h%=uF48PV$}eU?u^J57s8k_ayT#v%2n&ixXs zGdM0Tcqx$iDb&+o;N}4DLxgH<@1LI%k&NI;KATQyZ)I2j5nUoy*FTVQ2&XxiQ&$h` z7}O?S=(7w0(B#9qia}@8Yg23?%=dBv?oUBjSVKHHl@KJNIS9suGY7 z@|_n^mC!}u9a$G3y-$Kh4$l~DVIxj}9`p{qdpp{B{&|c3Q({g1t63ixY}~8;5?ep~ zA?;r9tLg7_hVozmYkwGcSX<*@Y$Ce2V=OSZK| z>nmngn^67i1w{6&t`RPYc{L*jUldv8as2b4!rdqD9&`@4NuV~p8%}x+A5(6VVc$ZxH}3xsmgU92FEY!I}vK_4@@Vi{Gi2Oz0vLokMemx7jjA0 zS^LLtm&D`YV#h9g9t?91^eRw>`DSzT2;Y#U;*WPixmncRL$|7X)K?#L`Sc180upSJ ztH>Lk(~o{sEtAA&u+8u4U%MV_WFXKt(ivOpM7MUPAc^OH?5)dp!HG|-6x!I8oqj)v zh~e!RGb4Le$ls4BFp z`82O?t~Q3O))b!&{z2M9 zn*z_$EIrREb@*B?X{;hz!I-+ofz6pPebrOiKI?58%urO=Y*>9}yJOCogQ@TSrR|j` z7Pm#9)?_yQs5Fx!J)J@#hnkK9cbRq1)m>;`2wENu`S#y8k#lKxhR&S3Un4PD6EYh4 zw;J}u?wMZ!osm;$n8A@lxyXw(@A^Z@QVnqd!_k2S!3Z1jm%h&-{|cG^ zH)dOaNWmdkk#isS($Wq;?j`*@UbtgwH)o|?`Xl*?CUoZDQ@bg0k=D_%W1|zj-ltV_ z9>g0@Tt?;Mkq)n~wh2cRUv1->?@o7p^3*S;Jnn;Sf$^2#BHJXRa$k6cAm#nVP2LH} z)Z9>cgaFG1vZd%@TD>+`RbwJAU2XDp@TRBVdlF5tNgI7ZF=_^~3Ucs`t%8#rqol3C z_%!l-`eSkts{Pda=+%#ck8&B9$fDazs!wm8snV-f-gBQtRXA=g7TUpjl2X55(?%~f zE?1n9u`JO2C=nAwNkWaIUpGAF6MFt zo^5a-?Cg&T@zU^9BlVunDwjSmFS0!D7k>&Gxs97Mfx<^CzN?1 zH++)(E&jrThLrQyslHJPU+g}S_up0MH~~Y2U6`qtHcw(#+Nti?c>o<{#z&6g2|m@w ziK`7=y1GG{V=s{oV}sv^!Qc& zV(?$|of-gi-`Jkht9nAW713h+s9v}eo2v3hmF4c%d(oc=X6$%rrh^@nR0r7p!Y{gU zrT3z-T*E#0`wLx12WH~*wzC@*gV%ExzAVTZzbY6vu0$@3XxG|siY9MiAKZF)O|W<- zp07urvo85a@t_n=6xif1nl_KWew{%I;Gccoc4KcyD^vOA^(+}tP|E}2b>5J6(KI5#S*}Cu= z(J_;)i$hupd-403vvu5?g3scP5H<4oa?NC5r$Us%;c^J~SV2&%O^@n|tU=n#3C<&C z$71Ya_GaD@bYXT1VG^wq0hX!oE1v)!tmC45-{n%Ih>g87&Pw@$Oa1&L(_2bwr#;|t z34$@x_>|QB!`Plh`{QaXO7uzJVHch?P)y(H5_#~XK1(`H`Uz3KtmxvXY+me>cuXpD zcJPD6aDkp?cJ*x4J?6Ykc3nk^q$gF450N9>*Y-PheoB+xDQX*`iKQ_AGS6dph?yUs z6Oq&YbzVPUtu1gfcv(gQD7+%de5rxIgTqxug&l{bqcj#|25fhSH)+s>4IH~Yy3GD8 zZQ0}i2|+eJ7a?C$*lM@H7FZEx>nxk*@NQ zR%}yegY=y)j^Az&H>=YNEAw{hokPq{DCjx;6uO3rc+V9}HM!8miAVDPe0g@+`vl@e zafHt_{hX{dWRZ74|LWc3CkYp4LOhh_bV-pklZm?Mi{7c%rs)z8msG>o1937Hw9j}@ zeZZ#THO3}1OFUjSUa|RG$wTE%sS;&G7UTrY4`gq>=f7!sD%&+pTYkp5XdYD%6ckKi zP37eijDU$#${p*8&)%XCyH1FC-Hfdkt-rWwbQrG@Ud8P*ViSsurJuGvs#%)F7pvs6 z(!(xZ#{H--k}8atmoo6=z#?yWC zUsKFX$GA`grMbalvd)3^xq>g*6rJcMWtONc-sJZoDDH%lM4N4)^}t1LpAa1xzaakRzd(pSi?-nZJb@AB*Oe?87> znF^CPQ@-2ARPNi3P8zvuT0@}~v{0ovR7@u*D$(@t^LNiaqwY&~WeNv?IuYj50CP&( zJ{FtM$@N6;e0Is8=TAx7l_bs-+(?(4x%&QlFawpP(Es3n0yF%7T(1B4QeNzi{o~2g zD|!ld=G}jB|0U*xySb`+SzuL32r*yCLcg}$-?fSwX?EFiQCX+aRI%&+3Gsa<2wcJG zuMYonM&IOed-bcv%`+ipmyYyR@3#7LuaN7a-fT?1VVOg1Wx>Kzlt#hJ z!1x^WqwR#_QBG=Bv+n84#KJJAhez)996fbhM!k1A1Nt{9c4JK{E9h25`L_m&UHa^p zZeCD~?`!F>qADNe?HAvwwhLJZ;o&c!5q96Gf7jHdWaiv+5*qdgQIo^FQYH?{wUUleox)>qpMI9;u(kcnz4gMX7T~m;Mt1}v#q}+58ThYV1kdKK}s=F7gYhM^{ z_XkYwZH4K0Myg};4<{nb2OV01N!B?s1+{owWA`9!4yu3`2G?h9AMmSyP z|GR3K5WXv(^+xaR5ji`X-C%q!=mmQHkCjf-3#U7xc z=kS-0IqX#BqgAFSB0tX0cR1a0J$KZ@H~`k3FeW?=Yw1~0`WqRIo22BEu8<( z@!GjW3ptg}<+6i`S-u>7c3KNO#4i=PbGeE;iU(mvw79PkrU%uNGQ) z7Dj#7G9>@_E&|(n0q!s7Sq@PT&eKj99fc%2j@NkmjL}*RVJuY0nm`F{?t+oxFAO#9 zMVFhiO2yn<3}n)b=S(A!W4%)CE9A_(Vag=(14C>XX8oq&7H_|N&g|EgdDRmaTd(9; z>pm^IV7k0gVq@#DQ1at1uB{BZqac{hT>9>|@e5a;)MENm=)u}J{WlBbmMuTeNSS;B7(_?mX{AfT$164w!tJi^6?C_I{Q=a!+ei#z?U9FQm$tdTeD=|^Io&a(%S8qiJxF* zn0C#~Ou255^Bw-#d`lBt=iVg_(*SRiWfiV9ad=0uh>4RR4#=ww5>t+OJ|&)d^N<8u;%)0W%yI51pyzTdl{;YM3P< zGs$b3>`#o$spi`Grw{~OZ4*tljMxdINBX`N?Lb5u34!N<@h-Rw^&&pc9I$Om2%nM} zA-J(oQkc6j!8+H0)#tA2ImM_6BjLYY>cUcm-NlimJ*nXX1IH_h!j-&ZlJ7)&S&W_^ zuGCJ#E+>2+3 zpgpJhLm(=~cPZG=?NLU1)+x?DvWqXfoOr;sDy=;cG2JMFw5kRUU;Y~Oa-lU&_T}*F zVeLgN-at&OHc5ekW*2%*~343J)%`wHZCENlt+$M*J{49(`Ga1 z^P?*>q(GJuyyCL=6Ww^rl(+dq&N?~PXR;Ah$?GDHKn6l4{|p>kF4Lwn7}X@6)Znzq ziZ5r~m|y9dHjPN2YED8ldCWnj?(l zXh*R#<(*t9C)Gb6w>559E{e2XvV2k8Hp*Sp!>m#p#;wPC^*vlKJngW6IJr;_Lw?0S zA((&zcBn`rNoeL7#1n>I_+HQ}W}1<{1(mpR}*jo+_rGBsa z0S(Qwd&!YMg{I@=FM$CNw!sIW^Q7r**%bPU=uaV$j|3eEMKgx99ilO{l1^R%H9DpY z2bR?=5~6K?$3YE0V22Y8m$FO&o! z9%AT_!*5y;k(zgzzNxSWJgj(sf;iEjv!3&Pl`s{7V2m%lN`;LQWxr+cKJ zTj59I0u;%()J`Bx^X^jhrpaRFeY^k2X8cd0G45YCgg%Z2zkxPggL(&F@n&U5W$%Hz zNb##k)0x{@;(!)o%OpZGk;Lvh0H!jG;|IHTTMkp@PWrQS!j_TNVZOrUs4lpO0fuRJ zsy@}pXtwjT-nd_XK}4yA^1UrzuaQQrpz`Ic%=}j`XRdx+H0T$QYiWUowp$PgF*FtW zYOiRNnUU;i#xdTtA=0CSSREOKQ94Q#j+U$f;^P$GrHPI9xaRWiMze4c^m9`mQ)~T* z=Y|PqS>~g4C3vi?uGHg-BNY9blv~^36;s}f)rR#G9<5FRsO%rhq+e}xMjSFzvI+{P z92RB$axl2y2P7A7smYYhlnGPA^2y90(Q`7|b(d}>BPVX0?a;JLGG2~7_)QZo3ZHH! zRl2RLbBV+rd1-#ePoam1NQEN?yL0i$oic&hEBmtaIP@q3k!S4eJqv*k6GT8^L_M$_ zVqoWcQuH2uwP3{Hj!Q7<4bqWxf4=q^31c_4DE)5pfrnLrj$X7y!K%H|DV_^WJC4aYl5-hyV_A&{>{i-QzIbX5^gp( zqGFA7htH;SI~Be*2-Q`Fwr&&ULQO}S{F%_*9=Mq|;lAS^-ceDcSn%vgTJdOjhc(&Z zPLgGYmER0#Yfi0e&RliX^Eird#*nFFJO1$B;9l9FveJq!kRT8V3R6;(TyGL^|bKfpuff#dBC5$)zqwq^;I4YeGTSb-?v>icvHuhA8CRSNFd z$%iA~&B1cl?2GpvsCu%Jz7@`>JB`GtVERp0Mx~U^M-{hIQg+6ji0I(H`X9QSM!^AJ zt|9L$G8UZoH4UmzWv6}K*%DcCSp6}N$kG13KIxU{9?B3SiE zNS@#q{If0xROCj26k1VK!U-cU5i}n6Yg-9Fx)0BCQ+0gXZ8BPS)nPJum|90Eucciv zOyBYdTz7}Kf#2bt2%c0M+n;xR5$;7=iRlB;$v~grc$+{Xdj$n%lUo0VCd*YMx3ioC z?u}(U1a15T`Y6O0p+*VWpgHMT<8n5&0$19#H1&CE=En+Ft*5VNf#m;XFq5n9Ra^IY zi&jp7OArr`S|H@BTVJdKfQx|Stw3eB_)SEVze25F(X>JWyk<3#-Pk9ySeGj8pwtSJ z2RpR^2uB%_HUD*~t!qjKkS}7LH1BYzcEqO-I&d5VU)ZulR2Q~`ue5)@O1X&~ox0>P z`6vygxHWEmyaYWsN6)a`hA(6fDe>gs+{Yky>oc^j96>p2u$&AD5rJ`lC`%y*>N<&m zG~^JD;za7OaXvC&pv+?I_t@FWdE4V1^wt9a6}qzIzK|*U85yN|e1iBfyK;L)pKJPcA$4r3 z2+*0fg&sa?M?EG;138L;M$0b@PM0jn?n@5P%TExgC@34Z8+E*u`1iu$)xYDXmFEiN z1OE)|H}j6!z$$?{&^^ud%K|VnoBpo$U z<(UD9Hial1`O8B#Scwkj;~<6!mlloO3D4NmKaT(CWZp5Qm2j;d*lIcw~HTjl?U>3-{ii|^NP1X_S_7r*!I_D?zOs-j7wjEA#q@KAsq04^CT5I zsaN=a&@hNF1!+p}-A)_EyGMa;5bf?QrlEOrssIa+I;X@qj7ZJ3U0rWI)bRcD0`U>5 zG``Zu+BoT?%q@BiUw&$U@%y0W*CSVVOs$J9lm;P-T$_>|7KYa`6D3y&Rj8giw!mbT z&J)834vqtD0^tQV9K0a20tu$=J<1Vn$DPDi-vh&n@U|aPvlKWLv|J=85}iI9SY4=#&v?1N3DYTewf0aA`;j zvvREf_@-wPx0xOGQ%KB5O~PUb<}1~2aF$etc9!KBWxlbS=yJ_nav(>k-)g9*SE%o^ z18}B-on8L zMPNop`s7-)mb-&JMb5(9VK7xZ?wFOSDbFH*ysC+cr8cS^jJ9@DQfnY)hZxmEq39{` zEa5toE>4%if!o>Oxs!7-P1o44=g#{^h%kHtQx8nGNw)<)R|26d*Mx`_Uo{1j%W@}; zNKpbIPFw|rtvQ%JGG^h{+Tb*#J@BfcNSDPbxm^%RDIB_2PJiY5Q|NGN*6%*qsx!iq zm~ApBw{w>JihOAv9)|iVuzLgDK^w^vJ(qO#K}0J}Y9<}+>Kv-ET2LTUAzCEg{OjGOP3oVAZYoEC)=V?wGOD;F>=swM#tP4b1j6&$C76fVfJw$ks z;fc?+6NSMC92HA2iWAD7YnPKVbZMjQ7Kkk9JuYW8qC^+{)5e?=SPBxTrNF|3y!muu zUD*O%&p4{6(QnI?#KS}M` zG?L`dcqiSsM+uiedmIFHrU}6@g?WPXyFw@5_9H4{aM0)E5%0 z2GyFZS$v6WP$6bo(Pa3HIZ8pQIj9A8IW`WS9ct2Ybtys9=?-Ng_GbN=I&w}H+H45 zYNXg-MkzH%w&2cv5pKl8T%y^3r`r*}k^ z4TyKdV>+pZVC;@!K_RN3Bm5OG#kf9lCR%%tXN4`|K5`m*_pGW|FR?&QSy^e#zO*oN zz;@mL`{fjC|6?890+|g;-$#Yf{Q{8{J`KtSXyY^6fgB_pAea{-O>;4}vRw%Tec$_s{S|-;sN0i1aqg zn3s-)-+oYP%ME>KmhJULcTAOBv6|FueT9W&t|q|`n1h6R36vrV+qPnRQ<~5% ztxrS!y^~`wnDUeH`K!sR$=p5`LvRGzE+Nl7#@xC{qjQ3TG*)AREFQ7tFyf;SkzJ#+ zqF+kTkhNZG$3;1xq(U4;CmCY^5#i}OX=41vC8qTYC}YDpnNnN-HWOye3D09@S_!VQ zfEQvOM)AAS>h(T;4s4YfQy;6NZkuDqmWspB9yulPapV4cq8kgwldKaQqH*PjgFl6& zY14o0q%G$F!YpzNDntQ5Y!1{UPm4<1foBG9Hv*k8?7j$R#mY+H4X_qVxPb{G?%+ak zBLXgJ$kWUBqz4~It|&@f{0{i^=U9oAm6%;gK{l4I4mwP#^Yz4ZJKldUd>M#l4Ds!t zFrWBS2t(TkMNSi_DtgHPEFny58WSGI3z*IhH&W#n7-@o6#@mbxBW^~ZYKDDQ^gE1X z>?tpR*>duHw^m1AYoFM}Jd0tQ$@sk?apqRhIy3a}Ngd;6ho|W7>*|YJl))vpVJYkN z>*BVQDQG`#&G(IV_*UZY@bCw*2#2> zSJD+r+nZn3K1Tlj!oHx5{ZJofB!xUi|K5;kXuIfS!Y!EV!S#KI%aFVfAyev5Oq}kA z46!y%u`(B4Yfs2OyDiTvSyq{ zsyv)!hTJ9!QYu{Q+kAzu&I$Tq7dnVCd=rytXQ;)L$Ukd){O$jiT0IKd@(>Xygtw?r zX|kfMv#i0@B6h-|rZWaL#+qvt9OJ0PN9A_u;nh_T$LzH8AjjoG@M2FVNsQncvv9s5wRRe%pb`c6Otqa@~)$Yf}NqFoV&atfv_^&tB#aEPNWTV|k?{IVGXIXHm7Z zl>$I+Yd1fOfZ>`7`sI}oN5HeKw}pfCEhyjJIPmx;`v8%)d86HcWwPoQ?P?bJXfIaP z&oB2@x#!9$>WFVpGyKNDrlIjb@!b^rx7VC#_3Gt6PQ83-&EUb4*5R?Z(HmQ){37`D zx3#h89>Jl1T44KzDyYXuErz^bSSOK|;BKzb0`*jCC+xWUnB}_%^??5iU?lC1yNu3` z=M%z1u*0x9i^j$}f5Zvnb$uF7Y7c?JUoy?`SA#A(Z@O{J>!2Ec+-1;z?#07JY5+l} z-`{qeH?{Vie-w%(%~UBd&f`z~Qw+rc*?N{hT7|FreeJ0y~XZgbmx*5HY0DoVvRDd=McW!sCBHsfdQx(ZW< zb-zMUvb#|G$4D(X&O)4%@zuE=Dr7-Byh`*#xw?w^(!td2PHCvDYej`QEA^L~yp|5e zwOs*89k%Jcu}JdrIbiDD_tt7VOR-iM_gbmp#d~QV2a-torGcTCuh3%^69&yUeki
N;tce0$yq8~9IXYewFJ!EDn+O53VzC?J4_f(a)YY+1F0oak*!<3?Y zD4}SR6HLHxjas5kE(X^mIN@YZNuRPey8D-4IdZkGb_XBLT`Q}z^nh>Y#%?gj1@HA8 zrXX=R2FBhFH#rVVd_&OBEaQq2>|_Vf%2s!G*1b6`oxQ{D_P-6cX&C8Oi#@yBpHXQR zVpc&cXwwoVf%qw*QG_HGoPU(yZO$L{!J_Bdc;RbqmmPT{+)|6~NAdl(ftf`ahdSz+ zyti$i%elge1Zyfnif6aSKRy(m)lg-|(;)Oabs9)d7#3H3HvJ3H8hQIL=BJtU*@>4un9^ zIB@a*O9%BoJQMzZuedY=GwZ)9F7p3h6&K`xFSuOd>eRY~;BolQ#;7+$9?J1tW*U|f zB$2y(I>^{=$f1QP^MgTDAZ7dg!XDGk3wmhyp@8kpo_YdRtvOq?Vs>hgam?TQGw
?tvqtttIU44H1RRzS6 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 z z+v70^0dUf>r!!-?#W-p7+>AWhQmLGfjs!3Rb@-MCTW88+%iD82dCJIyD38MY`xZUu zY(|aBao@Tlx#AKLw{H_A!raX@wCqj0pN8x!{x zQ_tjV1OXS>0k#iEN~1VOX=ZMDUcmi!d~o?4*a<02x3W`Tehr2pNZNYkEbi&Z%z0t0 z!+7N{q-@LPT%vLuw4l&>@)*q$phkzs_%+p(W(#= zOgsowtl7A0fH25r8Bd<_MuWj_b-KOP%b~V-+Xw4rEP?JfqAOVB6pSw6EQY?~_Ym59 z;|R<98dYy!d^mx0XPaU4K~fX1l5C!ZDhJzpM6nBzG(|gA?=A!@5SL?z6C3Suu?_hR z)kKcC9BYNZ;HQ|yMRgIBPvL?UM8RQjB0i{mXQz8^W1TxkI;jbE1miJJrIk&vj!dwB z*H+YWEjrwaJF<;$BBo<3{54u5%g&+i!d_LI_uyYdA%m|4cwpW~O?^K+D=k;PZL&>eW>L;?Xz$h_eM~kTIX+L5%ylERY|1~r3PAR z8z1eN4ZpF>REgw7&WPuAa(sOXdP!oNp@%<(wXt1RPi?QJI8^!QJR_LjcEU@deM@swmK2wu9JcyL?Jd8(`{ zuOC+#$;8kJiFNl?j6R$dCbz9=dnl1z-4CAc$H`enZLd|}W*nf=I&QRl7#OW>XBE=Bm!nRxEp(U=IKuJ#XDFcqzmC>I1HNb`+w z#H-sg>)i|1Me)lV9Jb5}uDZuM5X1Dw$ehp*L&K|wHIl*hk+PL`tJ|d_RYCoAerZXQ zYv%4H(w7b;TxCI;>C%FQuZ922F&itrz2>)>Y=lk4ZK|-pNYLdSYR+TvLfjPK*X7A$ zQ>HQ2*Hs^ngCqTaA-b~Eqfog9hz!7Khld!Y2GOCVzw}jN`--qWhVC?o&go5GYhG>> z{m}iSWs>B%Ie8SgCzynj(+D2;lh{UD#7+Q*YZGuS@8);=y5%@W%1LjYi%EUXXAhW= zC1=j@QlB7tjMXm#a;>U1F;@Y{&WdMA*>#jxx&Oc-CGe4rSGK?oV|`eunlEPP?%VGB zSqO&pzBH-Q@lReY44zE_DH1{l%xSot{v4=Ny)j{FY*68I2Od3*0OzMBXUl2$R0d|Q z#g{@u9SviB0E=sxs)7ZS+J;HllN-CXm#J6o2Z{fXaosT#Lj4`;&cgj)-}iE~Mqc6M))+{r0&?&Ngb>QFZs45SCI~K6Hw7_5!X@ z4tD}*>B-^TEQZAW<&7zndY=Dly zD)Yj>=_qQFpAF^Njy03uHG;91vqJki4qVYzMDvye<$-9;e=P z6tOYq>o9!T;K~OU)!)cH7jVzvf8t%@$Op<7(oUAPG2b_b*!}Zo15rm*s##kT$VA)D}?d*2;U;*N5Y_C!NboHD_4FtXI zZ(4!Ag8wlzMim>z#uNBjOwE2}2&x(hjVuyp?$!@r50M-AdDUx6Np)*g9^UlM%Xc={L%rOPt6b_ zFN4omucDpfSk1u_O_o>Ve^Ye9*cO7VD$=>jN$-N6gm8S^GZro=vs7fAK_>25*v^QE z_#Wh2Tnjq~-O|dH znHY?Qq~T_q#VWQdSj$o&>h8o)1*K!koNt9_k?t#gbv0mFm1Wh)rgfAbhe9=^9>@>T zWQMQhZl~>qod@X^Y^&DLCbT%&#-FXXbbCZ|P!ubP6HuK=<~zjQG&28)6bFX|)Vt$J zBOx-OI`l!)xSyMkX0Betr|r9z3&T9fW2BSF5BrOrIJxW60tA(-QQis?z219g1-#N7 z=rQ;$sFiwfGc@MQ$5lavFCUE&QN=8uZD#w#jp{K0K`~sWik`p(1yG7@ckHas&N?p=w zk$M5)!IH{Yqs)?fJaSjIOeE9AZ;i^ZP|M!_T6XadjN8dyelA-jev)i8H{FR|s_ADM zy6ugM9g~7nz2#XvSE{+ar?4OixcSq}%vlWF!N7Oh$HJyBGhVP;Gf+g_4|$#hT+z@$Ym4W}i~^}%l%L|F96#uS@KVp0lHrj zA_C+Slf_GkVpj7?@=9@FSmo=L8iy35ANcMV0UId`V_r}(e>YN~a-GizWpK{`cz>)x zIF1X+td7>uk{Z{XSdzM|`Uy&Ys%$=Z)L4kfe**kmC*!=~|Conv=18RiXtq9sEAKZ$;0)K~hp8d~x;hIj;0P zQm#?vLrUwSj$(Fxg(VrkNe1Z<3W?W!qI$)HasH=&sxTB=PP?tn44G*c2oV}4bq<2h)YWm(=JoontiHBDRz3b2(K`!#3o z=HZIEH)k`~FI+Vt`Gm83kvYK<=)T~d%sKZW6>nH9jnjTav81fwC-MZfaamj`d2&^9 zTKsAtEy*;&!3v>dR!xaMuiChl2TwC+UwKYGQ21;BmJF*-M#jF_6@A#UV`)`QEAEd`mR{ua6d(Kj~}Nk6877W0lx4M3(} zL|J0Z8)pMfD@nFdXdu6O=1!ld2XEv0(XCH@XrCc~lAngF#dB*pU7tPTkWzJ<6+ZEs9cUL;B*9)z~mKt2a~8DzwzDg8tdVvoBoQO#FL z{;Tb(l%Z14;kIVR+6??A`R=YFR{N5DYJ>2jp>AC2^3AwG^_Ylz?nwMs2N|Q700ENo3pB_WaqUO9wAFO4s*(NDq_hc;`}e2@2@8R%F?KQX^x?K@u<}DoKw); z<5=}Ll=fV3=F;|Db?1wt14sdLAGjSaW=GT%dUFIDhGQ zuD2^4+OS{TKZHH-!9G0!$*vvS)~_FjZXXJxF6bDK2g``XC!LD6b5uQdNi{|zQZQ;~ z(>>on*Pn-~v z>tnc!`|SpuCS8UFIgh~E!OtLSmAH?*7B6CbiGkN&U$Li9atGHMe=zWJIkpgteLpVWW zepG=a>(z}h8~CYErRk1~QjVyRw&6; zur}LK@H@hGc|igpUUWY53r`+v(S0n5yIES-X}9%i%cLCuA9mW6(QRrp-5QAp8KaG2 z*VPH)vNI#uoq>paJJK2l*?cmDHEWVdUb-u_#Pa!N)Qh+zgRq+ko(<;aw z*Bn`9RCWD1m$=#z@s*(2l^CxgN{kBsnlrcEsOra)i-OclGq`hC=9<=wx=M|fXhS55 zyDE0CpBDen7kSLDAQZOgop1~18pSB&Zf8@4a1>ZhKDw&&&>KwFrUof>U%ou|pqml%QqdX}qY;TsXuJ z7I$86*>5|yoF(0VLUM!7Ds| z`-&Cx3paTUbF&XvIy&9uP-%AMm|)%Xj;rCvg0vudJC;w8>@TueJnnrhGv*uj47b-n zLdK50jIti6dafT1&tZ=vN6DhQ92~wsW5~QUq>j>=W&p8t*z2HDRtOnJnL!?RTNO|-LA|DnS7ctk9GJs-)UM>N=evv%}J!4=<^)w{eDDm!9=^H0as`qLwZ0M zSz=I%Xp5qCUYQLbMrKEs%@;Zy<9YgnGrDk7?u%n>Jvfq6d_7N~%IRFeC?qRS!2t0$ zdIZ7LWdORB!sd!k-)z1@LK8W09&s;8VT7OEWG;e7yxY?HbY}()*3S+D615#@j{E`5 zqT1Eoq*yjzD(*sVP}D`f5VuLNOIc4Zp_>M zk8Yi*KUJysSNBqLNRO3eC+RIz=R~R7o=~}g(Y!5c|CDA&-9lPGzkMtZT(pw8mTfll zqA|==vCYBye03(vcu zO@qNmoj%Uf<;!nw{nu)%7nz#-J$Dav&U5jIIItvEJI-MU{MPNzy~d}g`K=|Xsn<=D zzCZu$J{!tJJ%L@1FNBtM-nHRL;T}^tU*ta~50{L?mI5*hX2`6@uP%5m+rta(?_oy#qn%+xAU%Mmc_DWH#ICOjb zIKAf%NW61Ap4!dP@GkX@pM_)bW(J-1UP_~=!JGY5YWbz|XpZ!kpPu~r;pW4z4>#BD zXg&-Zncm)9YF-I9TS^uY{yAY`+J@Zdg%E=rniLXB%CmI{uA|zbr8N{qSbF>|A7dZrnrYT+ z3ebx(QsBd4r`2mk-1dUq8_5YWNcD(`2lJo|5`tv+P(t0=#uk$CjtbtMV7ZtPaAJj5gq9kO zc)8VOZg*~sKL_QJ?fcYF>8Xb#?Gk7z2jfojb&YBT^`9SCv~S`k)`Z=sV;{$h>iPT` zpyf1f@kFt89F=Z;zgHq7y-DZ{$|5niWtVd=RsP`I$!>jLRF_-S5rftDk&`bR(l=Q5 zmxmB({IoesJA4mrjs8t!DqMAOm@3#BzR&S`(vxjQYTw^Uc+brt!!r8tQiQ}m>6bHp>8DzFK^R7&v5kW(v#HEg~R3cD76ei%a)6cprihwFu92i;$3pU_EK z51Mqa{QcfKY!VmP8`@XHQ2awue5n3m1FP{&Z|^K5ZzGatFR3X>yJyI!ar&dz_`pGt zpKHeh1G?@0yOwF0vtx-m5M#CSMtn*|cc@7@~ZI1y*__XR3Jh8ewmr~^7 zd9!F8LCgiV7aja8_Et%L=X_>s#~wlJ*sq@94K!(OKJ)#?lm};@LuQW(ltolFk{QRD zaMD!X(d@A}pP38+DGjk*l%{2-JvHt$U+|Xq92*c6N`RJ@Xp2;-z9RB>12D(rxeNWc zQ+hqep}JG~lJ@ac+b(U|@Uz_3epOZ%AVQSVFY#Un{!*`X3$Q88GKO-#cQp|PYshRI zKF^&^y%%_QksF~0xz=HsKBD#Pmr_B2hqg-2^|*?+Opam5gkbU%Q(%zxxOV1j1Ez{| zU}dvkmfhX@O72}p-*V7`te$u&Tk_qQ1ep>WxT?L9jx{e!;}A`e8$f{TWr@kmqFZ1q zSuTTOkM}N18$AeTn*gwmta|a+R3j}61+(9=Fdn?bSnr$}YJ49o*j0I0QxVnqb})W{ zYRz_TC!=XWA)Ho-vDb@k3_+T)xw3LWV@Ewr)j_%?x8oO5B~TWj368fs&_J?DVYI0< zJky%MMulyF8lV8b%Fwjn5v}C+Wj(ow;wAuXt19)~vV8b?xFJNrGZ zbM7t<#Ef{y8v}Ee^aDl2;tR?Mr5zl9`T^e`BkWc%GoGr29%|brAzeG>YkOx|26JM8 z%+vO5JXlM%o_cMZy7SyF*{B(6AOC|(cyFv%0wZ57sD%80pq^)qio8!BZ}p?tRashH zBV{}p)d#=DUv-UN;Dv#kI{R(+M?=`PS`~Ke7n2;_G(0N4?WM4;K?feA@C(>piWysF zm6=7RU_j!21$cPBEkm~Jl(9Vh!lUHQ~vyGPMEwLMaH=;jbX4?2S03NDEX9cu%%6M zrBOdAF>1kVX?d0&agegztr`U3Xpe{amU|5Tp?bKBoSr9n0Q#We+pw8#)iY=G=}An>FAup=au;yWsyC_{QBU4h z9sVa8`9GMs^&iZr{#TUjfBz3x&(eWMy#?!KA_0mi2hk4LS@?|Uuj$0xe~Z~O2ZW;& zy}2{CnzW~Ph>Vx<-&@W~^Ft4&SE3HR{u4sEH33h+BS0p_a*0&k%U*zOPivRf5SGc> zIV^y=KMr;{X?XCH9=5jRWqTRRLC*aKqw>2PgXR2hLj(V(G4VguGsg!`R~8r;Pqgdj zx_{wdP1lMJL^<{~S!t(`LwEgCaExGi4NS}jXvx>F9DaK3EY&~!-7imh;K;|9OZ;EXUYI8{d7|@OQmU9NxOVwv& zhTZf0-xNy!<6!!C58m^DWA)2$72(jSiXDZGc$M@Oy$E*JKp0Mlgu>S_%+X||evXaZ zk~;j1Baby!RxNvZcRLBWA`GU}^s_XUX}cBzQ#?~3BgHJW7xVYhCMAj_h#C!~%uP@ay+0LrDE_0Pbggy812AV~yYTxmujiI|f zQdcw-vK7LQ4SoSk27hwjbO8GUk{;pP=5Y;i=!*f>aDk4tL zt8=JGjOR*FO`SN`$POKXaQ!z8Ib%ol=zK+}qgP#h@>4<(U&$$P_UB!D0mT}F0tHjI zBUA4hYgKX09=2VY6fri%4mlQalXwO5V7LC+s(zUDO#d)R&@}eKAomRkel8h0q@qxs zyj~k~&{k%#pyU{J*M`eLk4kKKAVDkyO82x~iJksny-~Ll$`WhV$JE1DP~FI??|eCp z`?|hrBgs%FX>%VJ+@3k6pL0!3*ROKSTX$|+rvTB(atYcVv8jKDvWHHEN|6*x ztoMIaCdQmGS!$cJz5A{gB3wSJGWE#f^`uhc>+~Df>oz+>`5o@Nh~tD9eAHN{`dpd= zxf>BT`?GEHtpyLOdyG{W2|4A#q@|LLzH;IZEw(_%QUxM%A+{NP-DPe5>MRN`Bx=SFUaiX#yjj2yN&^>?cx?z`+ zY+RtS(lgJxW4)}`^p@)>WoCh(Y6O?x=ZIhe9B!{)LJ%7%6~2Km_S$W57U|1fXLR23eA z>P5?iy32QKeOa*&aIW$^NM+Yjw2=dNqTHL#Y1RhyO6ulT*G;HV2!3kRf*9AGpgX!j z{?&;Z!6!$diK9mk{wXs5t{TWOF??~yko>%-$M&2*6tDwK@U*w2HUjq)pQnJ5^lCtp zT%bd4Ka+#~4Y)z}+#-HcOonitR^>&p5+(q6WZe_mPZZO@`rchNx7=Dl}PTUYU_B!1e9FVp+{Kmg~D)!!80dh3uD zp!WWcph<$aQ6>5t?K!vC{~{=4hm=kP?y7&r4$ zsUXqz(g=WL9gp*fB|n~0;Uj6b%G%ymxloAf-Gs~ zKFW)jFBb@|&!oC)w~zf^fhz0?#&H9W(pOCwnu28oBCT}+4Ra-4K8-LfeOS}LY<^&_ z3ghk-n=PPH>M|V?Gk5)!b+y}$FjL|INuRWuYR46g8QThI<4;iZ{Vr9T08zU%uJI4- z94V?bN0=!3p=w^34498pNaD6yZS3haKXM6{O{!l%T`pTA08C81C`ttICY^#Xk)E zf*$DH(-!lwP2X6eAtc!GT8c)BKI*dWla`qKbu3`5I=d@hn156ykkY{O`D{vSHJ8Pq z?3g)=5Ud^!Q6C!=BN(5CPM@2wOD!y<=C&X$2XpYtEG;YWma5Zp(XQpNIn-V@QPKQU zdSf8rqRkOkf$2Xf@!%R0j*JMT9!nbQEg`*{^8Zbdn)ZAqsgXVjif$tV<ND%a!i^u8SG*uq~W_8iu>BzGd&n1H&zakNyIVA-p8Yo|BZ$M@m) zNltzj-stuxOXsn3xAM8^HSE19o^42r>FK7S)xperEW-^w+BpUnh*=DL4WG`aKadCQ z%BlSiyZQf@LPRcrt$fJ+rJ=*p7>`|?VHL$+-AJ2{7o@h`WNGW>nB#X z{&|GOF`$xb0kjG|^1GBjP=9d%yVthou(j?Mh~7DG0LPi%*zW#?EU?|(jBMGn=eU$M zx;XE$J(bNe1&V&pZwk~_Zu=t4H+S>hf4qylF~jkl_q{zpOtcRjCNt;ABn>vg3S4CS z?nBQxqQWy4<|A*;gtlX5SE+;EG%I#e2ldy=eiRo69!;f~#r^n%$ndpz^Su9}Nw1zT zE@F;iBP=oKdw&=x#PgD=1yUcI{wUS8{rkv+#4j5sLY5{k0ZN&}26?~|3CK}Qac?3y zxe3(=kTaH|zh2)6I-h<+nY+YxQYzSC#U=s%qkm^eK*UVP#>KixMQ*6VJH!BWt*NqV z*r!X!_u%I}AAvh*Qg(4|Ya~C$!3tzl`OZAr0K7a93J;xt06jwGWu^-6Hc;`0yAo%y zMzy(M0&kRG>`#thMLXro>>q{h`&~K6H}xgi7}oB{E{V_JpUP6QAP?pw}eiw zRHFhO{gSec&hQ(AhhM9G#@Ng~iZ8p1y+fJY$vscfVwOG<{n%*Li%+$0Hxt@O;rwaZ zFQDefy;y7KqL5bJa^93?T=q*aQtAFMw`*y<_~~s(O8{-gc(#J)FT<{pcx9Ps`k<5B zhUA;Gcw2_{la>n9{!;?ys_y&f0!#g(E|jy4Eul31>k{-^SMQ%5E)ivaftkf1`ov7C z@FY}cuxRe~2yHSk;htpyWy~hK?c%=u$|k^Qq;ayaPJpvl5QcFgDYYq?YI4loG-IeU}*1jIE%n<*!=&oHJ%n}aoWs8J+qtrpuMbP|c} zo%7?f+fmC%9<35w$q1SgFE~6<@hA1Kh?2NXN(swdWDycGu>rpvr36E5k6A%2al_FU z^2JL}i=Ce(a)N=_(ZFvpSIkaN+)6R+F;lxDiMG@zMe* z-1LmFw=nY)gZieTP>Yi1%)9S%?Gs#%B#C8CSLZ@+lScumEQO2z+0S;pkD-qV5uFn0 zTxI3Wsk#h@VjVrOZwt)6^R;Ung3-dip8WmN)1`9=>cfq{C6Sl8P6~c)QJ%E|hX#(9 zvKoh33kwEvJo)Tp0_!mQh?j63rvH!xUkA~%c1$$y6tL@#WrTRJp5`|Frnnj^ejx}n zmo*oX#DLb)1oEAcM%i->AQ9*OF8dwgalGS$%CzpA z`yxuaZtq+CNbG^hZ<_CJKy}U^cj3jYCJAiJ7q&AzRG6 zEk~HBm}GJ1C0nxL{ym+-f2|hb64+jUkb{~q!<<^!gUwrB)Z4a+hUJJ5t&*SLNU6_3 z-yD-#7t**&Gw8lht$kW0}Orx8oc`1l!+URrMU#~3Mn<%@3 z3LE_yWR&@{>6}BcwQ{pFhi~l&%WM2f@~p1-^%$h*w!q9peog}a*oUpe4A@GYDqWQ> z5bC*)T&1PiHO+7XKt4xY1pj30cED|qz*l6t%FzpP!I_2bfG0w-FP1del_Wr=anivX z=6ZLNNb+iC&T!8!Xoq{v9-p8Fe_4!*2>#0N=SUvJuJW{>ChKF!8RWko!~i5Z9JSPo^pjxQHAcvTDOl zj~PL9zQCHW?>#Wt2Hj7wXV!)vi283U>oH2;7y2m$j$EK2?M4JDdV>fy^-!j47DJG+ za*DmVF_IbNi-Z1ZdCOm0P^GZXh%>3nw;G16(9UbFz6nD^2JWruj|Y3;Sm*mGpEZMu zCkI&ksycOe+07CHKc&Cd@xa$3JH$H;(BLR`M`K9GB9oEo9Q<+K zD=REJvKqypO=XhpOlDgH@a!jr!&D!JB zlwhL>)UWHXHe)hR7b2aVmDTp+ne96z`)^iNIVLV<%eEPKW*s4mHd|Lu13 zZ`n-kfN0KYSFw{%!(}1m`^=nK^YdQwwkmqAL;td)f>>af0*(2Hnqj1R3n1qPR0B@l zXmM1c3Pndqf%6ma)WK_juH?3tza}C1^v*4BF}zg5QAj(E6~y; zptp1&`g#c{2uORucg7&D*-EYgJvPnNErx@gq}Y|E;N|0%Ys0tJs){wQMj=gpSyUNb zHAq>^nVvly>q*>EWjJh!z7Ih86K8_DZK)e|z4c~SM*!1p>7UTdj{7=Kx*F|!SisSK zw<6}3-OGwrtGvjedOe?%k!+6L<+eNNZF6Ql10h#9g6kFeA6jxC!>`Z!`S`6 z-L-^V?V5=rkL!S8o?3yu=|)(iPu_MjCjs?Qv{Dz;qcc_MW^t|VdsBI1U5z$mHHW8f zFQxjah{Vm(N$Is*H6~(E|%<2MsU~1a6SU8hh+l7n1$Fx|CT>SFUm@?h-g8`k=nJXc4+(OW9RX zk6cPzZP2bV6)2zMpk7#za{q%hZMfz=0lE;gXwuBuwWSt(Ez^f=gZC+d(EF(^8zGMm0)`$LHfhm9TloW5oCIZwai= zNL_fvs)UF13?UY*x8M8*7{hK68R%M8Q*mHG$vq6Eyu-qTLHPsLFXrYI__- z9|-ozjC;g{1$Y(uS~7Fe2#u1*#R_!%6U7!qtGA3GYQ_SSSs8J5;4C_nd~X9^m%MV4 z>zQObtU@$iI>;VFYA_fhvv2h}iROpAzQkHE6rXSck;$$i$6ZJx@9zj_;-emx!umM%8Oti`wP);v*-ar;^o z%nrk&#yoav#adq=X>2@>W9m-st<~0WC08V#tesErIXf^yzzN2b_AZm?Ae(rlsK|pXHv0ffYGBNZ>6{wT#<#^i zdv)gu&Ohok(ulHMIroTG7#3C99bPce2IbcHMqb*D7gR3G5-k6B^8VY1@Xu~`qG^@W z>vAxp?3gTH*kFYoHOVj*YLK#q@uIP+V5jRB7rE^--sj^w&B~^tQkCI5#VFb{j>!s1 ztK87J)Vq6Vbtb=gKS3W(O72?V?J|DENF64YW8RgX%9yPJs;f4JuS{|Np}sqOl;wY` zn3oxlfn(X#vE(k`Bp`qChZI0m6(M;M1z3YmTV~k>#}5ZBW=WTWKN4Y*l@hCL9f4Ao z2~;AKrPJk!1vOC`#flQ_IP{E$W zn~iGDxwnWzy767o%t9@U1|^1HYWo&SVf@*UO6U>TId@5mzV5RziJclH4kj7HjPC=gW0#zG+#L zuZCTx2>Yb*DVb6 zGlxko2nK-Yc-_}J9e3v!or~!tv^W8>1q(R4@ZId+w7i5=PFohDpX%g513z$u8kDsu z=d6S^C%9Vh`tn3zl$)X9X+-H~ZEcJ`-XELD_ z#erakOa3Pnms7uYZSed2n$oos8`4RuneB#thhn+SOiskPfZO3iBgff9=;%Xg73tC7cl)WLQ_#z) z`M-iK^9-`qvbOC6Ct^)>F)nm;< z^WZW~VWI(xFb#f**r+Y}v@CBzYS!ve(yAu`m`72##(s$ooOg!VoRW{4oD%&tumDr= z*?s-E9c4Dpu?W++WPf*4+o$dF34$@@jad4)A(xj}Qqad7*$37W?gfHTj@Q>& zY~Pp_f|6R>w5kN8@yQ^DkO1I_CM=Z6_RruyFFzkzbAl$Tu!k=DmYo5qu|9z~y&ELh zUQMVfF<&vP*8>B^8o{NMRm@+<4SI#}9het?NPMb*8@SgmXZr5@1fOY_vCUkw3{qNt z#goYflwNKBV8O*6TNR1qx6ClM&|56qSYy*q2rOlSeg<$@VlxW5FFIaAjE{W}*!mgw z`PXKR_PJ0`MLSS2#Z0JP7JYY_OvlP#aS}>7tuv7P2SgRXv8?C{wzDYg2p2Us;I4kP z*kZhIZRu1Gug*m-_J(+7talZ?w@-NF;~^-O=JoYj;^^!21@z`UoQ^8htMYp0P>#9A zr(Ns6DU4AO$yuJ0tDv|=ts)~FcR&69!^Iu0;OdYLLhhnB2y^NWGW+e6bhf6Qhshm-#%ht;*qkq{;zM`=2e}R?g@%$7H958@Ljc@Zg+Wwkwl!K1sEW)0tpC~00F&rA0F;l_4yEgIbk zO~m59Gr6+c88lHEVp-&d-DK6(4BMu%AVw%Ht;y8N2kO}VF_@DZknMD%62OWuwl1?f ze|9#t$V{Zlc5F9!iv+v^e~Y-=b{X0%JByoX=UX8Wv0T-XHeeQc6WT{(Cf!jCc%qf6 zrfR$A5X43r1GFD@XG2%Ap)a@8d{R}6osA>-?KbkbbqzPsvTqQ*e7%RS*7@7kjkd=~GWHo`uH1S!o$Al!(@STlb);s-!Plrp@dv35u}|);wpMpt|yjV(w2|0e6LVnf;Qu zxJ;F8_ew-@pt>RZj>B!WYU|i89QutEp*ChG%L(l3(q6^xZZ@n$~hpwM?2dQ``3D1vkl!f3&FBV;{hoxUe%-m0$NWacNSUGnzuWJqboFhFa z;n9krsrd+HNj>o-QFmAP&u3&SXxmI@T1%G!L43-qkBGF#NurOi{h7krCd zxgyqr==gEG6^NZsI-`A$%(=^xx2nom33l_{7nw48xGi&lDJjN&XE5?a{1DUj>VR#U9t4`LejJAsLh!^B<=~XB z1lnHc8aMXLoL@nF>}z{sHUaBltHYPKm1`~KgrjeW z^o25xTVxC3!N2jy zV#PVm(k0KSwgBwsV|GBFP*%+d6ve~DrMDM%$O-=$63%}y9`jXy+1pm4E|VJ)FBP`^ zj>&+cqSvRx_EZOobNHS9JvnVT&?IhZE|WUcb8 zpPCqll_m~|*G3oWci4H3Y+_BkL;f%F-us`;K7RjhFITH})gGm-Rk8O9u4+-c_NHi% zsJ)_s4tu4wM{ubTTkTObl8D-^S)*hWMUhY%gzKBnegArY|AEi_C*;g|KHl%+^*WB{ zQBiqUV5-rO(S|5Fr4XBEk>d?}P_(fmZuYvlV6&%5F_BJg5dZI%Ge;`MOfUDozQjk^ zY;n6JEk-*RjAR&%fh$7UPP}Ft-$SKgKIF{(1*t-|0x5#tqdheOf!diXn&q0++E! z9oPIZcl(^+g5Gdj-95&yINgftu1Qr^iA?D*&tW{+6VM-SEr*{^uB>8pdfP{87X-v^ z+MFs$V-*~dry1gF&E`+Z$L_+^0J3d$e(kQ6E8n%rSusrFG&)vrrqOc0L&n@hJs9i* zLN3>@y1Hs=qvLI(s)`=bpYih2`r9l9AU%8eqs~Hf5Cnuqjs^C-V71i7kSNL(DvS)Hvhuk2#Q_;mu%KKrYx45!;+^z)`Dj@f(rE^#=P; z4L?OUK^7Fi=d4SjcIf@9DC_}|*F|+nI9jVFM5YM*s5zeyqdV_Fo_r#DB zhv%Be<$-tdnD#UYep20)54(Y(EA1ga)O4Y*UyzF~I26Z2 zsJryeGLs~A;H(^GHkY4f2VgPbi?25~$+N6|$j+Ek1YW`SIxELU=6O42nq^cJ{Gj}D zvoG-2F{ok=a8Is(Gi+7MCutDWoRq7Xf^2F9ADf;aHH9krL;ri?`!*{P4 zs=p2qBr}n=f%YddJ!WL^uO7oL59eoxU%k7Zhv(d)sa<%5j(s-11!#d^XB$x%_tmov z)nTX@XAT$C*3j%|0p3n)<~x^m6)(}x_KNAe)oNaP%K-I8;n^xW@HQW`QCMuE<0Fl;Zl<1kJfx^NEBgZ3*(4<$>El2p(b-HAHfCBnU-n}kX?{LW}hY3;FQlGb8 z+bc|^AgkW|g`kjJC-xjWKmzwX%_yPXjBbd1kUvWRR@{D=3RPowQh(uMm}gzfi)#rr zYoHmxZ2F}{Chuj#=gIGE>cOEV=8GkVpxK8gM8%ogLwZuQ~ta`4`JfKQQ7ou0n<8P?3EfuoyGcMtAVlif~bu>7k zAgo>p*HWA+^agmm+kHJ+_)1Ms>c2)LGXXh%Gl>AMpL&gfUdnil8T9D#?suyItyMVg zq=#VfdY!u|&WBCFuNRq2RcqL`rex!$Q;(O5wrtBxTm5@SXiV@wS_g7r;h4^lG1Hml zMA4h9til+gdZ11jy*IS(+l0`)crro*jv1Y5|2cc9X*?B^#?L0-uRp+sa58
>g?ZO}b?IbTP~oKqxC3plS*Jm#mau)oKpp6&}-PQhFWtCQ!y zTcuf~+gQ&GkYduxjeeB}f>wTJ&N0(SLcsI1Asyy1+wFM*Gpf@s*;!*Yv^n*)U)@G2 zOZAz)=!wiF_Os6am~NDH1IjYqO)T&q!2Jmn+kf4pq9TP{soZO~S0Gfif;I}=vLqtJ z)G#)kXsi zysl;A>m+<2Im84Pc=QorXWV?nQFtnH&-WdCX@t-%!j8sEC0z-#WL}v1)O+7@k(aI` z=0M1Ai26XHcW^2$jBs%F-xa4ze>|-M3XSM>S3q+1Rq= z#{}bUQ-2N7;|-*)zffHjAjIDH6e7${!PjU zLKKGwb1 zg3}xt`$e6>mwf(Cf6$9XHM-0EVIeCYm;F01p=OH1VG*j!6zZ**0#}RBm0sq`h>DstK2Czby&qE*` zg4;?&*&(f2>~d$30FF1vI-|oinTjLhQ*lska3Tj?fyQE^wdQyg^Yf@J6Jcg^#ROxA zIu(CN3&y&rK5WJ4nXwb0g^^5W_dMVUqXiQ-~Jfz6YUF4^NvXI*F*_;QDigiZSepR2O7hY0J zCsp~!rQvTd*%=Kdsa@X4rg@Q26!D*V`81a56lE44E5=IlyvimfDAavB#L!Bv+ zWa-j61x-?(0?2iU0SYGUl^c%Ru(S3ZpXQhN<4BM9^w{Vq11JAdrlG1%Fu(-@Xk90O zp!?x6B`YU0C{ZzX_9P=})o75Ox4DiSfoS<=&NJ#k-t03e zA+sK4FKRR|=6L;Ge$Ds6{ReVCQa9k2#_uTcTY#*b%>#`tjgM{x2HB~ zCGTCE`|IF?r0LquwR$|WEgCPA-98%WPj2_kjtw}5d4Pa++jbGjeMFL41hgBFgTp+D)2dq`zTjg4Zn?E@^n5t{=;4pUqd4ew|+PPa>?{!4S5+HIN)W1qse{ z2x4dh_Eyafv6c|?iNV7qCuH5{*f^~ATpV6Z47{a2qD=(Wr?kCLQPk|YHP#|1_15D< zha$BtNzq031NH~SrR?f`Ya3Fy{7y!A>XXfh7~}%T>OF%0r>?J==FB=l8~X_v&mWoj z+l*<1yVT(??X^1}GB;1XMg**%@c6y@Qp<&lx!p!<7-zlzj4v&F0?MN`4He+oliPE` zuhJ~?jJ9(1IfvUGK9PRaB^}!TU8&S@jz?26oVCXhZmuJI;)Ym?z1jU4YXb8%pn)pq z%xqq%hoFt}QZ<~t`MU)Q^?&v3{;$j9T|G7&qJb~)^yp>|YS>((%t4=Xy^AY_4KI`M z%{x`b497-r=PEXTi+twQk~K{b_5^7!bBD(wXCp(10B78vB$x>?&+9ds z*xjYtn1*v_AUSkMT2>UAzs_eT%Q#sEpA^8_nCy5#5k$w{ZmAlgfR5*!%56i3flu=t z(JLh;v@Q(qPjhnn8{npZ{e8hv<)hD-yevaegolmC6Tp4Cvuqifd@Gh40%@2tvE+ja zBlt7fuD(QBWeBQrFeO#jeno#l-WD-O+JaUO4`%7&cU7oHDc6I;XhXI z!p15#4t;a9v^r_Q?XzEwW4xh^x87`;=n@b_Kt;OoR1?qr6It{0UA?F{_Kq}d+2s*@ zTw=8yZQ+t2D`XaN$&93m2`PctA-yGNy7OIE6*TyT-YqKuC@A+zbfVWTB`}MqHeazCP&1Lr1X;~*~V#FCnOI@fE(16U96ejy z9U)d2lMGL{;b^$2*N5XPW_>qb+@wD}-uh-V5OlPZ?!U~w;SSX`!rw7+>2CXRt zom?-KK=*57zT)8m>M~!U>Gij*Z%|0lU50kAlauc+<@(nJa6&8N2iAuV+dY;!g*tyu1^loQw9+S?6VV6}y1j|lO9y_PVL3FPA1 z=t?*i*qRNGV_p9|yHolX`M!OgJDc0oSgRY@`rfEqk_vcU;$wTNiPkZHZpl#g@#Qr_ z`q3^Wlb#6aHnrdYedG0ZG-Q8zS5U`(1fc|-slccU0$plxM@}3inl6SpUvhpvC5KBA zN>5YnXbP(1fqtv;WbfQyPzlos7)G0MOCz0njxUBhdJ@4}8 zc897o^V$#Nw&ze@Srb7HN!Am)$0COnM;rwAp_G0=?AQOU2vokoT;7|x6sJ7IAE4pf zRF1x`#bYgP-3LW-o%(TCW@V}~XLiPI7L+%Wo)~@oa?xvLIB|pOqlsVg>GQxesjs>+ z@5+s}!s1wL5&`X!9#ulndH9F)90~Kzd)XOozMmjk2gm~r9!|rgZjl6=54?a=R-Y1| zs6b9y>jq87bdREJeD=0@XtW+3?%om!?y~*&c?+?~`cVlQ{Zt+ef2%yGOK4`nzUG zdXd?3r*OV)Wse-k>JBY&HS%j6Z;>X%)^*M{Vi9jobZ_nOjo48w)gq;+_REnPzUsm7 z^vU;L<8>zF#g9CauXZo8sy4bQ;HdOBpNjnI&QF4j@bRjQ+m(9dEo)>lMntA7Jc&OL zZZFEr_diqTSC73xOdm-MWzg)C9OiVpZp*P*VJ$VO{i{vbZ2Eh+d^SQxtKZpZ7ZkTH zyxes%MggC@!FVp>RRZ7SkIKCQN}bD4!ggNh7O~JaFP9>#-_;VSez?5|ny?l+TTEzz z@m$Nm1aK9&s*KSEM$&chyy4tR8>eI^x3K@fZ1r5;v&!7z{3+*4XgUBn^Vn(D5BTu( ztP?vPKW)?D!9UkF1j?}mZ3-zw7)@1+)wvv|e(g#`S>Ak*mF2xZYJ}8~Q5YZYS1IDz?$&AA#O`c*pcO=+ z#1}iNx~JK0Wu&zv4&Q7h_>AZ-AxB~b$dRbMP$Eyf%m7|=Mum;deH2`47`9**#qn@6 zg~;Z!={(u`PqVt7wV(VH{)BIugXHb=Wf z`nB9c>S4PPyk?m>9!iyC_O{ijNUq4J;?EJ(ZUB$%%d*sU)(T*ESdDka&U8fZBZ<0x zx;LN_=rg(3vG-%A-MOd|mEZJ1w0+7=Xucu2qp2&V()qs0je~GqHpq09tBL=W$NHF{ zQIUIc#iHqI_SY?66DJ0whw!bd2MJ2QSQss<;)lKNd&^^N(8EqS5IfXjm^WTP-%R{h zqxf3$+!Xopwzp%G5?9d=K_7Harg%dgQ64I2ZfnhA!J+ycY>g%c?XsJzh_50v{%zVA z=dJ#_@<45`_QoLxdZ10L&t2gbx}N&bVZJa;DJDxR?0Fk^#JztUQ^eBv57PUL;2#Ag zuIZ`u1~(T~7SH!T%IorPuZpHFZBFTMPOn4vwGqGn_#}-MgGIB##bRz5N!5$ZjJv%! zCnV9*QSoxf9btYT1F7i`-gWq*KfjTZjn`gJ_Ua)$e}TZ>P%-oRXOTJ-TAo%L{~}>H z8+$UUCWuZ>PDD`3CJhB2N80T;bAc?OC=U^C?Di z^E2e4VG>0tC8k4&XG%RWpItAV%xlWVZat(KRg4}fa)7BS(T|U&odji9@Yfle0~nkp zV@}pd7SmT?iWE80;>jo}?$zb3I1uc?BJ}|tvj`Nfz?6!UI$H#-j6^k$2`iPV2Te;I z6AK4{QcA;{*ol6h$<8O;nq^$X!&Npm9Eop%p2_02iLjsyqq{SjKm^aDY|=J^jjQU+ zs=_5^HZ@j=sR+J&?;iLqVw*Hv0c$g8JMNQ#u|3O^xF+$d#tUpli$pA~AvnOsB}D=WTGIt?CH=&GqAVBvTbnL$?4rHG6#t!#ekRl{@ona?5zwgVwS4xLA z_sA2{`9FDI(bYpf>{(L_1bd&4A0=?RWC^yQ=@gYV0PnAl?0H*rI`xH%=w`6B)WrQI z<0|8?A)ATf!Pd3@va3-spS#XfSh)xRQl!>I`{Y4y=<~%yvas{meNSN-;JP$MQr!xv z=h9iqjX+3-4lCz?CN3)BQ}xY!v4i$O(4A%HgCyg!TN8#OiHqm4Q-Qal)X0!`jTgfe zXrOOzj=~zyF2wnv@@^sVEw}Zt(g?-YPNVX+OZC#Y`*J|>@NAxfLAzg-mCY)M_uLm- zks)zo%w)~X7Z#?t&bw`Kzm`#BHt*r&#k)Oj#)cr5IZ#qI(!35KCZT6lS!Jgp#;Z0i z`fE{%Xu%1iBj=+ISYyX&@w3gIDi;^38Tk*IX4)@OOX$;C{!aa}OsU8A>h~ix`zuaT zE~hz7pA{Gdd1lJnT3T;33#5du-6}_^s7EITt4Hbei!d4R3Tk2Ig3*1ZQiQ5W=Tc+A zoOPA0XYEG5(W{c^KL2E*lZ)AK0nk(;5$z>4EP~V>Nns zW6tlg%&R^`m3ooMm|J>KmzbYVwVS-`v}(rls@x)S_x8Ugv@fqkjJ&Qf zlqJD2z%{${BVkaURY^yVbCt!J zaB=)lYb`Sx8;YE$@sR9!dRV<6As}ha{`xWnAIL_Dd>H~`OYT>|@645_B9EJxNmE=x z0-8j?*R)*b*hpl@C{&N*N1h0W`UqEHJ)YF^BpcCPV(mnRkGLnlpoJ0v7In}x+Zn3H z`)xY~CNmMe*`|Psj*gk%(KlYBJ*u}CrY3I5r;l??Dghgu`qyPXcPkCTSws8WT#dsN zr*4n6>4;9Xxr94<9>M-7pgka-EsmwZ1+*5*2v7mRvqEytUw=M>|7OB{EEAzk`Y4SW zO6Cwpd2@L<%M+LvW$?d>r3Pm+IqrWx{AD0s%EOko!OL$~@p`emidENhyd6(8%o z?K62vfb&8Zd2%XSUFvTq;(^(Dt65`EEjbivfxA)5NoSm0y0cR}BcD|N;GT2c=z@O2=Y3zP}})5n<>YhcpLa)!MVK3PwdnWZ5B zS0ss3-9=}do(3BxP$K>bBUN~CYz~^3Bt%IhG7!3_;Y!P4EesO6zsz|sCW(hG_ez?7 z-M1QCs5O%dpZa99v$=AyJ_1nbelc*B@}f%J1FH5)5s(}72O_-UVvz)A_ffBX@DXra zN35|fZiOh{wb18;vo^1>q1b9J1sneKvr&8+ovyeKz9<_pG21cNjl1azHD{wK^;F^B zMR)H3Kf62Lt}>{NeE5bg`p?c)AabNjlB- zGE*F|XEi~TTvoKd{6Hdb1+U)4XNJd{6u(lEyB*XwinT(MuS>;~R{hbpg1(z@e(2uz z*qpI$%o|e(u+(wPSbpTlSGe|%XrxzOWN^>-l$|L|i}t9*r#L%xgW@ne*A43c#9c05 z)J<4Ryj_X`t#Z=jQP$&2i>+Lf|7n)A1Y{#hHZ&bhz}6w)x#me}e%v1Bvgzz^zOB5{{a850yW?Y?s(GdW_zs7AA!Rbh<7k=@_Rn~W zu`GgOuRd&@lXbBmA&s(`AcfDyG1m}2gw+|?^|@HvwVVaM;p-O>q0PRjXy%Qn?s^H7 zO}bir;siPDa00}gKg{^e1q2C6oVD7B>{*We8u89|fH&OCLO;udXYSvbKK;KJvig)( zcBC6wh9|7B5B0TNmsF+;lBA^5$3opXeg_ZROapI^EB5V_0K*iQmym3B6{$%6IR(Bj zG5$IEd9aPSimxFSb_sD6AlOc|CgBFVAxnwTJZ%$3QFZkk# z04}mk-E45K^rIFiAHfATS7GPB_D7%Cv<5RL4Wu?H>vwff-sohoQ6-lDwj;+B6Sy-f zEVvG#XoC)>))g$j+FP;3J6+4m8O1J;h*zL7BbZHR5N6=&^3=jdaAI!g0rPtnJ(e&tmBLt34Y9jAP|pQqnk1k#Yr zIJ|By!oSA4iqG79>?GYaccs-3>)y`&UWbFKPw_c71+Q=Sb7pc!Cj}Kcq$LSW=!sXCpYk*Su`6^@TSZFP+`y$Spur-~8 zm3+`~|4GAK&ph$hM%anZHkI$;h39DK{@=~#4a1{bj?7YWAhjY~ZMWwKV73t!iqH(U zS+)vAj*pct#ftVPoxmvnU3pJ6ZYwk#a$nYqQA78ulyX}mp?-vH=Qp_juJ8zY$k4Vc zT;B?nzZ-8!F_h?I(jD*Fjq}+7C5EBTcMw_lDTNY2SugdKZ@8llrVYyFm#Pfp3tOMc zsAfrjjtV*>a@lo4h~~SvUH88Y`jw>O5B6G?{wlhh8IPXobhkC=;Ds5h##>nxTRC%_ zYsb#fR+r43x-?x4mhdaqQyT`CQysn%n8_7vt9qBB?H7bl;o^ul0oy{f%L`UwgthpO zVt`^uu=!4&uy(od3#m)j=BC+bvB|5M0z zOqArupA{j23CjlMB&`!n7e&9&i(+#Wpdny52&8i;Kl~`79r41dNcM~|h0KuP% z!gB0Cs=iS9IgaUP8*gLuTM4#juwcpAY)K7dFLeCS)=zKb(De%a9ESI{AZnzE_rXVgkN?gPZ(zh`CZ%r64meZjU0ED8tNs@f{`w9b%aN~j-gxguE>D%+!bvxS1W&P`B7F&=* zGQB#|IvMaVRiQho$3D-;IL}KOuyB|In0Z~ntKZqo79yz`3d#Nn?zKE+shhDr;>}=9an6<4Zv~0{p$~Yr-h*!9Q^Fwxm@i=OP_FV zD>GR$&YtJZ3q-|(MgiSGGig&1E%z*|D#`m}%S$U}@Cha93YF1%L$+d2_pjEz^1Zu; z!U>HDwd!uGqzvB&Q))BhUf1VfX!bv|Fw1{;E^p885qoEjKWQGB%*kxnhULwi(7y%& z246??Zya<>?pzh{B+UhPyBOT+v-wHzoh!GK5k~;@QBJxN;hP?>vG(I+=<^8v5Sj_r zzACvwy%Pbk%tE+c*p_AcR-9{JE?QG{X`0I`Zs-vW*%FxCWew523A!6hQfYz8IScZvd^aDy>fh_;#*g3Z`ghAo=N0LYyAZ< z$x4jL@w`7bNxBIR!CKWCSuE)|8kZP}H%bjO(=4$CH(_cQ+5I{&d6GqHA06H=@P>p1tNEu?Xm0;Fan4^f2eR;jDkF0-ym*kcwRhd%@0+@&geI23McjQ{ zYlEy1FQSd^%?PgkNfo`-r{`k4wz)<&=~25T>_Smv=2lxFo6g^;WpBC<6wpw(bVOtt z#)7HXn>HYjFHde%F<~*}a|^35R^E_xVq(%UhA3D*NskI^nZ8^sYfDTb(Vb*asz_sj z%oLczwwq}098fD*C<7_Yv&OsdZD*O~dkgo96N9wudmDi9rs|W&PGWTnjC*IUJG~^=$0WYF`_Owo!E_38v|uvqxscq=TXM$b<{SL zr*2FVLN|)k8*1ciGQ8r|M*BbGV0>Tt#bUqFa;8*`>#r(?Z+B%%!_1`Z4c zm5uhhjV~t#n4i%4)yTzIN#Z1g?r?SW0kgdm9-N<~P}?^H^~k(Q_k}G5U)Xmv+%G=y zeald6=t3_&uO%%&S-Q0DB*AZG{#VQaw;oU%*UShKMmLudy$TjHiV$;N(k8v@xuIWv zQ-$&0V}HZ}Ihqc+yZHim9Eha7y{>L0r&r3v|^R&;iupVMss^%{QlD2vWwJHBTzcWyAe!5nz;L zk8&7}1Z_a`Bn&>4pC=dm3b>cYLH`EzwKjR!lWe9QWN`Nt6rlH1i@{EoVX#&>u-8!#?z zJXTmdlA+Q1Qe)q$)Pq*pQzoDmL*M2~g_Vfktm|J-bsuu>gm}sWc^F#~p36S4n#v6j zMcA~w4RL%C9Q)-mul!w5*UK}ZCFFQX`)&TQpd-trbgc94My}l>%T@)~?efPbnxuWqm;PsZlvxt>!2bs7 zK_FwL{J)IJ@ZHp=zRoqyrXEH?02t_%;9vljR524xC20wSV7o=Wuho6yb2P zZgi>$tyMjt(xp%;w26WT0vMoS0YS-hMc8tV_MDCP4Bd=5pMDzSg($#sf__&p+LZgE z7;bl=Eckq5uPz)sUbabt?}n}vt;umg-o^Pms9F2$`iP-wY1P%uxrJE> z?{$Ule=fGP!*#3w&a)n#8&8F}%UCxNmN^T=-rN?}Oz~#Mjc_}VyX?>d1M^R&vjT}I z9GTsml^1N29kFS+N_mLY5WeEWcfd_t5J$3uU`j=nI42ul+OCLf;6uAaCwipUPJD`2 z>=PH^NGqphR11<(j58a4;|vkfhf2WAi9;>HwvSm;zoOd|q$lSK@_^ay^;p`z`G&sU z&2*0&`eM9#k_Ik<@K4R-A*TB`WdrLie&@Hmv_pq-!Q-T38|q)Hw2GD_ zkm}52POaxldEEPjU;W=n(f|99y0c$ph`kHHO&o(fyBCzZMd{0p0{=Cj&n)oTb~BH0 ztLC{kMOJRA^EiY}ebNe?HlcG1rh3A?l0J}zw@$^mn@KHvSVz70(dxF?FY(y}2BrOm z{g(?*q}>Im`qC~duG_Kv-R%L`?_pX};Y>R#tpKG{zM+TnA@XsKV(H4$A_2--F7^F zQo=x^s&w%k#l)EiPa3wuxX5!f?h$8iM7^SZ`R)<;Q2CEmW!p^OgQ`&_-=ay(75S_= z{m2^M-qx$V{u~bd53>-R;naF+6KLUWIGxPdv3iM&yhyxLQ73wr$zTV3;jjc*gy69bd~~*m5uf- z5XvzRh+>vrw8P`p_-tB?`S@t*_iy?7i>NrxAQw=+M@afChdG?*>4&e0_YzFLMtv95 zJdsly$6Fd$=Nd9?I*7px95YV7!5)clF^tP`_sL>|B0yMv&8`zR7< z-a5V}VT?;GcV%mn;KdT7Ikee%_v)G9-u1%B*EPT=NMroWcrOz z`c#;WvFN0b)#gM9(b_6g>2{7sE^v{9L3|Extx}s|^P{Bd2G%5W%(jFV7$|D4NQXHP zcsXYKG7R*T_ZBM~z_^s5c>&27eh+U|qWK}B4=|hXSdF`io2YWXv&c-f9jsDk7HhLyd2-Tr>nbrww3KYzZxCLG8L11w(N0nhjiFaWj4 zKD2vtLdCy@`}me_(&Ydsx*U9lt;`E`o(u-#_q_LKE+50@EQ%x7hGWACW`a^f&m1Ne za$0ES936DS5!0mlOeqJKc{P9Dy;kJ?u^^NuK(8LI((!Y7V8@NiZnzXf3lhYooO5a}_o)ABsz%z$siZRJ}9ng>ukYY|?ue*T-&}KQcO8_T#xa z)wS*8Y(MAja>uy4MEw5oW790k^>f>tw=S;>**C~g!CkbFNOlQKNXS<4 zxvR;T!$cjGBJC|?{V^BTS(or@mDVq&b$?=A7uz82^_J3w`tk%#Y-kOyWP#k6L5*mdWvCQ?DiG8xqBI%PMZX!vc8hTL6(N?}ro}Pl z#iSl|8|T9ZqO1yJUmP`?14WqA2u0i+Vf_tuci0HKw;K{0J5?F^5aM!-U|+m&m?LvDonon+c_g;m6c5( zsR@5RA*2e0+Gad%6yuuI(5tj9MoJodXB%%7x`&~}VZ+G<3^878uSSSLyhZG_=Y0|G z%x1<`mETuEP(3cmF{8uz^k)rlTJy7+#fkMr)}`n!_lu5^zbStbNOhmEremCz0=^&-lneO*^2%Sp0wlK zM2dZ^m8kje%B%mbv^Jxp0$*M7%)oqba2Dt^Mn|5sRzk24q*S=iKAr1(*aS_(bXr2r zGPW0+xQ=~=)}ql|IeA@gfqHk@*D0A2{&d;6g#^{vtuDM-C?MIZ=z&tuVSl#XF zgnIqeTu`AJr}ya(D5Nto*W@$LWRda)SH|?S*FF)bL1c>;5+IB9XOu5JtO8p>mQ`zm{i9)d+_hXay?!(}q@zfR zV~$74?U?j3wuI3>!^zeOR_;W4`huWK4jv1(1SCJ_ZJ0J#uTkHi=*dUL*Wg zSeWt$FOmN5MdN_?bY?$eM{EBVstB25uwR-|_8ww6B%9q3hx&JMB%_Z>yag=jz9(g* zlAKs9%^M;Tgz@5~A~U-A2iUiI%pkJCW8~F>0I>{>x_~fwR!`_OITuXiCjCpw^T zqjGM|q~?e3@r~qPq;rlU+}#Y^!~vU~L*{McJSL&-Nqq3B>AEZzw*HSx?NA+r$KTqR z%_&5^&x96&OeYCOzV*Cs$bvZx4_<=Qn|U6tZnAG;4Z_~f%|XnJE0JUGch!`aYXzuP zWa3E@nN}IYQ%ezXqNH)ZJez(+WvZn7wP-)1jP|PWE3!*HQpx?3+~focJ4VI765EtGL(LHgjw6^*2(z});UOSr{RZj0qG`al5_9XG|D};TF+N;LvLq7VK zabXbFg~4W~{rzA;rRMyN--_St%1xH$FqZ%Rz*}=kNNRR`+6_IgHT-V*_=2CN<`pSc z%PT~=;ekx2y1O$v3^0+!H=dk^m0B0#6o^XXs(Y; zFVmT~9{%WG)RBSNr;nu-isliAOC^*nvPY%(zkhaxGx2jjzY=`r8ujI~dTix>`9sMu z*XH+@D32bmfW;q9I=#X<9@~oqH;F1H<3`x7hRedo0EboQoW9@I{sZF2hTCdX?$8m< z@ad7jB=>9W0=Y39xFoa;&jUXP0q%vf(sE|=&z|(2(_9%H?==R)d97FNH%pmt5W{;D zZGDfNnoGTN>ubjexqy(YkI~(|+1YL{n#Paah1&S734+ac(WBAKZvf>bjp5LVyZ4c1L-V;uUV^s|9 zkKCr$8e?~|bE(ZSvK-r1v7_1;1hK#8F?*!&~}PKe>;1NF9M*h$w@lkOB(Y${AJFa5$Cgqe_fGe!oqjX zA4cS@j7=(r2IB*HXt(6WH&pPbyseT;fSi1y(FjyC>2vg44xY$9Kt*7$H4 za0|QGw07^w$vnVlvQ2gO1Wc*%cRF~`_66qi{N`ujp*7K&@X;dRvsTBUkgn(dZ26`^ zKMR<>aB#0&PcY#S6pBlqrpR$gp39mm;2YLODj4DVd_*aH)tl6TmGB(p*y9f1g#FjD zVY#}#0R8yS-Q!HZzT3*)Bmj|GjeuadQjUC1F#E9a*yOO)=Fi-zxRJB9X$GjoU=bX( z8%IY;L+J*(nqW8_zdQH|iJ!Z?n%lX#>Wl$FA768=LNuukwp>5boI3s60wl zGBHz-u$4b8jo(q9P}P;dm(^MS$Qs}EAgkowU$j_5^4oCs1L{KCfVwx8x>#@G`spWN za^*vU4^U~s%p=JFyn;ION(wgs5)9o5C;fH>TfL~us!#4h8)lWlKkuF>k=wrip5Zz1 zCdcl#QX!RD({7YA;)Nn}s0NOsS^|RGL15pb$ zz1~_~@f$?=BU1;RM180VKiLi{_0p`>f}Dy8oJKg6vb*<}y-fIj%Od_iCJX=jMhaO1 zN$sUf-6^-0T^@w<-F~<-mMyD&___sy$ETq^<#Vlafwqj_ASu7_$yJ(41NqY5CrRH@ zaAb9utLnU|?7d9!V&_`?4yxUMYw{Y6e;xDi{4sdM<_$_m_cf^djb#VixEC}YW$C`8 zPq1J$c26G(u3leTs{Ijlra$*|6Uep!uLuAM*0T@y(Yd9e7sp$|l}weNZH zA>UTHey}Hhnn`ypt*AASt=OY(sV-l)u0N~rd7FzGL-2`Ed$5fXvkb7AL*317DpQS~ zRTRIRS(TLwG;q$u;_sZ;9;TbAh~vFB>Mk2~v)?pdf2qBK-@+RGmhz?Q5|E#IzXIQY z{OX;SogiIjpkl!cU8}F*_j)7KU@Cq2We@xF*7mP`mxb3jS|kJx($eZ~nb9-`kf0

);$Qa&GZ?KaB&^&$JP4)$#o;7DaZx;zn6L*5(5uFJ~Lem_0i!W9&VMBPGszt8u zG)zFER~>=g5~62)9~@j(m=aK%ONovN*}a3_jPqXUcXOtELev z0PLe=(anbSYdO#q0zE5{RCwJ3)1x9iI{O2D1G@3186{}sytH=f5=~Z1__-;_GyE+o zq$+X5L@rUaQU>VHp|RZg)KST}jujRwN+{JF!i%L7 zF7K0ehp361E5ma`o4MVyX^>DiK&G?1z{}CY7rZH|6-M}whND|M>gW9C5nXL)gv?-f z!!vn=Fk0vyWvF!Q|B(0IK~1%NyC^=WD4>XR1ftTr^dgc65fBg}U1|gb1f+w68U^X? zkt$tjks9emAV45UmoA+obOaJ=fDre3&%5_`zHiPxv(F!A=FFTuvt}}rNhX=Bm33eD z^}9;tw>o082@gG1#H#(EJkzk#zBYKVorl%CtlGRvEArU6Wzv>K^oU1@_=8~h*I7df zjv=Pc-m7TyErsnC1645RSXCOnt(vejgZg;{<($6<^1(ybJZ%64dk zBCC~~Q96gF8=AsC08*D9l2Un21a1GJif^vsG$;@2B??ZV=A^4=(S0Hl-mNZ$pVs|& zHE(yUW}5J8F&?Ry^?EIr1&r>Exv>2hQo_b{XjtpI^PuNf*5KV zXJiwR^HE`I=y+APYUGv|6fTl#*JsDl9)=G?$v~@15e-DEzQle$K67;g=EL znu-G!7`GpwIrqZJMkSp#}&1ow3-HP3xg;jyQVsA`col|bB`EVI&s(-omj}F$-trMD>|AthLCe|I(E!5{E%Lq9G_mwJ>%|>&@V-LHX?~sQB|O} z$rHR`!SKQu!8etyBW)J(^dZJG^$Xv)6PkyakemLc2$pm#Oj`BwD&>~Z3)%}0mCt{r z92G;Ra}^|OOH}M}{L;Wf|LV7^X^VW63~{43!sI)>+&Rsoxuo9!;=rPq^!-92*vz7Q z01H*qd;`NpRTDAKW|dtaIZ6~>>8O;Z!=A$sn(?IA_vU!<5S(j1m0J*ANBG9iA5iUq6zEBW33>VoLa z{O}LS6*m&;dz9dZidYn#&=vgUH{_w=EcR;rh$hB;k9GESX33NEKUAwS!KP0C7@@JG z#0nv&Rs~^um~PAhK77Q}xT0D~K(#7wgee-mn2az%Ivc1hE-iITzMDSf-U^(cVr83f!ZzL`f_$Aw z-K~1{=aJcj?<3ysED=(iR!ut!Fv--5+oCM}(s6#M~!Zc?vvJ!2W}0(wK(V2HW%1Hp6MhT5Cn3GVC;HAD9_fI3MV|CELRQ-4Epqk zYRW?Oiz}b$bagyeTiVh`-@?m{shT%o2QoP|>3*q><{JJ3x>B9fT{^CT?iHK}gV#q0 zgU3PO4@Wihiw$bI4(3xlB7QZ4Z$TXFx*8@1S$;x|qoyV6dhI#WGavz=N~6v{N=5j~ z2I^9%;?@+fwo;_X3geY3_d;mm1mm8Kw%Xelbcxk@+=fBB*~D2hzs_z2K4VQ$)>dKT zv3>hu;5C)@%*qr_PXZ<<*B%O9q@yghY`kt57zZ8A!gpCWMbDx%c zQM4FMEtqO-XC&pTk@C;2$!~~D;m9vQ4j&d8!E>4PN<|CtqtQZcFXm3S3@py5Zd?*C z?h$l+%`NL;%w7K&>(pJ5jiCnhgsycfcz0%rwJCeWO`7}t`|v757g%6ZV=OFdV$;NC z2jax(rrlGQ+oH|kB|y#g56q*hS>H(q_6+?1$F-#Lf^*cDDEm$H>bF#p>4LFbNmu1+ zPb2O65T^KKkDec22uVBP=MP~xoVuF>ZixXlf=xYmFn2lYL$yF= z-CryJ(2h)a1Evy1Etzc3;!n0R^m#rmqkax7Ht}2y`g*d>d6nfZzg4-s2g$N{t1?Ct zk=3Tb#z!A`EASfHKaq0W^L9nel?{!mE6^6zaBx~^a;Uz95Y_r?tAzc6fe|$sDvf%2I8iFVBL$g!G z?q{y07uUO%hzTT_9;L}sDHZj2b4Q*a-5Ej7+bg?8xvu0T^-lQmN6?K7Onw7TIBt&g zlN7Yv_#s%22)4{p+gF#!ce+R^pju%ze>Ev5*Yp^Ou}v5+U5v|z_mKORo0QvcXS*`x z;vY0yU#ql?U*9R;sQ6uKxH_&o5!Qehg7Kz_!MSXS_4bsZk1wkO+5#SWBlLODH`CJ% z{mO-ryW{CYqGYFY-C%o_ev&B&{$k}{mo2;!J-0sv#eCwrh9^+Fnt2f8?$&O!V z_xQ{87GKuf(#K%9I=Xy8)l-P7V>9uQ&|eE_7nE!je`U9$wR|t8nEQGCYeDAre&-cQ z)R_K`cWRfp-dn+bH%bg{7^59u(6ib`m9x>-Ni|upmzmrX=fD2AP5EQ$tA7R9`hQt? zKX|}ZQ?H_LorHNQI+o*NR2kl5);0M7w_8k`>U3RG`}g=Gr1nKY=w0>KviWQYfW9#* zn)Xbv`-bWxXOjm;7YrsBQ`LxpI&!V$A~z!W!&f;{sMn!4;jBS?jSLdo?xNh+8|Ijf znu&OpY?ynRF)f|HxH1zV@hayl&eJscBmmDkdhTd&7>l1(G)eOc_V!>>3_;I~@Z*2C za17e(X=Plb$hD~~Q5$H~bJj_Dq|Mq48|uvBJC^7vVj92|cilrGmcmlW@%Co z?Y1SJim^58TLpF2h1M!F7sJl24x-khJJp&;7$XYWLG~A#gpr;sIZ={cJhIcuvk*`+ zh~eqSB7(1ai7E}N+~_%4 z#^5~If^{az&H@pSx^KJ4&q`!sf63Bu?CoHaAvG5T0jm$Xf4?|&NW89iKvn^28Hi@R z!{WGMhF-WEq4yfhE!ERlW|lqh=YW*blvB4~E%`0zQZ!O0f2tiB^+kup<*`cXkmio; z5kr}A_Nh6&(*qet5u2@)7ke4D5dR+;$aaj{0E-}ZE= zi1E6>1?JF2JGd7*f!HVf@0A*;+D(!W4;3YYr`tJPs;YGhob|Xd#j322!06K8v#6-n zXD3EAb911-NU^vV^~}ky7q`2VcM;s*l6B?&(kx(%jUIGW#N<&&*~aHRjA}}Mk@KW53f+DMC#Ioeo}gUsJi^kYwCe<+FEj3Z zoK0Y03RYn8ozsEk9cyJ^WPtT^Zwd{&@#XT77`B{Qj zakmsHzY}4&mL{yGqkFm+Lzcn3QgV2G&!ui4N^UxYvwlQIatAW!_xCtUEhDLG@{9TNg(|e+bdp;>M<(U{_eMm zvRpDki4XaxWV1m)DQk-4a&Bz|gd-g<#m;5S>2Fm}s24WTIXMYv_6u|g^bUSYs$A`5 z8HpV(yZ^jYpt10^^57N?^@ZT`ai`p9?nO=eiJSvyhHeLx_EDuylMM@{-|y9`a)1Dk z6Z$Jadyg`dv1Tl!0bY$z#LV)gM{P+Fw|o3`a=FZyTPF>Y#FaA_4L+_bMr*ujul?ju zzukviOVifq9(}-bSKrnSpICOoIFfcgOaVRSmXy9BC3d zP-=18K5t=8wAr-XC#L4wdXtc50<_HW6KB3fzt1(~qOFuCB(0%7O(g%yi-)CZzh|{3 zJ@aovqH3@Ax3MJj%g}nzk>G>( z|4^q3ja|I)S}UGRjk|NlbpiZBSJTJ|52i;4CT2w@!QNW&4}Fz!-V;uI%=@yp=SOXY zLXhP5Ui|j;dX`_hMlti92fA1RR)(1mCo>T-3 zZ_PEOfPH0+&JXfhvG!z6nQ>~FajCF=v3B3Tgh{EzO4^OW+6@4bpYwN!Edb8Qc`t}I z^bT1!?2ZQrP%ngvC;m!tnVrh;@OxAhN@!@gYyG&Atj*P*u%H(Zkf)WhE)_3h)ku@{ zoWuiIS^&>taoSTPKVNH-lQ53!;C||Q%39NW^91ES+AQau>ag$bW?xl8PyJ{XS~H{x<4XrWojjple&%sVD-D`Fu0`4Cx^sF+7WyyK7?i8hdjw2ax`qW|31(vdbQm zvgTzjs9LC++27k)Kw$D~kK6Eye6e#@fSm{C)Vs+2-DkB`xhkn*_I?l7yGW2rtbgni zLzV8!T+3!Xq+AVn8LR>$uFjNV=NV9PyKofK4r07qP>gCXc48rl7Vfq3AtjFnuBYou zmwp)WZ2DbzM^6-EET!m@k(0jkJ=Hh`PB(E@-ldF&g`;_Rrfp>Cwk=qb%3H;!SSJp* zU8mwM|0OTGsu@Ik9(?m2j_^XoD2cZl>q&|Nt@?fKDopC@?_EDlQXBV?8g zLBj@=al>-Bmbg47OzZb623u*IMqc#_^=)Y)LGHOHU^vmF_wMrIU(08ZnF++ZMAxLE zy3oZ+InfDikDYCk`Z52w4WQlng9m|*a((>VDReyVbuE#t`(ZXHteqxzBtyE0jwNC~ zJ>j3>aaUE5kAzIAT>9o^DNDTB1q!Ed)wAD<^rnSrm^iAlwR?2Gq{Vx*i+^mlWlM_+ zfwp1uT4FsAva8irzdx`t7pEg^m=Zp=pBDTkFJW%$Ui=ze58$x3@r->;pAtVU&qV#cnd_!@#O(!`)@#2#}LGG;Cn@Vdf zq5qxG6J3_~=E&F0%?e$=tN)xd43t6as_R#jgPw)$TAF;4)l+_KU1-jd`i-h|(~6_0 zR>-0G!@dj5Vy5l^EORy0Ypj%>+ba0=5D-?3(7;r@Hm>->SyM7GamN`^b}0R6wRT9F z}|`l_54}CF@p@A|IZ^WEK7H1k^Plb1UyQ zjA7|S;q0FNpk+eynr%ME`oGsn^-c{B<}@ zEISJEuG?(HWwm}|EzR>mq(r-*Y{jZRc-G1uOOavw=s*@uCh`~nu@CfKJU$5>FsH8O zPzG+OB$2h9TC&q_!->lQ(>|4}(>!u(y!YpqkE4S^rv00ECl!7!RTB-7KuA8-HN*(P34dklLbzIgw zQ@48+m`26XAjV{0U;KyY!DEgRJsSu^=CY`f=_%FMl9a*ICWz;7uzdXt*obWE%!%j^#cTb9BP{D zy}i^6=3L>^Q4ym zu=zim&;Qy(qey~s>tyDKct|+;$}$6MA0ZCU7U`RG8_-ihIqSArTl2dfkov>!t(tq z0nVjQMb639?m=R5xnVKKVn0J#d7thvqbB?oplZPVOZar_c>4)+!X!*}C z0@c23Jy94;d7*wnpu2)kl5~ccRjB*8st_y#+uJk3LKy_tCFCV7k0eqqP5VjGSwS}y zH1XJz?$SEl6bIF|Wo~!lNYPJweCo2ZDtXqcIq{>{ewL#_PS?C9YIR<4(J*53Ah|ft zIxltylOPoVXU!r&x_-r=@rt3#SZSp9T6idKwZ=-t13Tdz+Z^f8MJmn%v@0BzH)4;a zkDKPR+LW{*3`xbzC7Wth7O?N$L;O3Bb{r1b?;cX>&(uzz*8Qtx8T1!rDtUoyLJB8@ zAHS?^2}A1=F-5^X__@;kNPH*dc2lCqZ%gT4iMVy+79PtEY1{+8yVvHx8D99(ytPc4 z%j2b-#xf#Hv*yLx4b9)!IfO%O^0kNS4!z9Yx|sgF2uG(uqH5gv@mqDPmW*l7DgAw$ zk4I9Z2k+vK${MB~e9=1)-humhAQo9of6mO#&CY55GdHJxqxBYs>gne&xmfm(S_@Bc zCK}Z5%A}x(E=I&Pqc9z2Jo{r&4fal<9!Y-Y~I3eboQxT!t=lm6U!5A5GEz z)}|olS$=iDTS%bwrpO?x5nAcke)x-+gjrmg(nC0>Z?R5T0%fk!kSi`|r}S{1BVA=Z zmJ}qq;>R05L@?g!5t#lK@p`IiB{_7fP~Y8cqab&r6uw-Me;Y@NI(H4$i^bq~ETHIZ zai$J=kq@U{1BJiDr;0Co9n|%Ngz#N4_8tw9+FxXHNRn92sWD0tw*r)J2kkp1`TW8P z-&^k%!}lKTAb*iYv&BY|4m9+wCTf1z?r*&%8Gki05y7asRBCG!Px6I`o(DO5k!b*( zN?>Rgsx}9-VbK^nj37cW@@m1&>l3zP_z8ExcIq3vCH44l_x6|DPV58hY#^Bq7Ml

>iv8Lif9E-B)OY4`HH5XfM1whN@x2FA>LhPN+h|d&J%5EC8G%Da z&ZrvoGPi2v*=7??ZhF1FL4Za#Cu+pM5O(-EY~@Y9>XT`d#yKJSDl^xjZvPojv}8&f zU`13ETg!D(9btJ6*y4c>=ymz!z(pRTf&Ik$IQ?5aRkDOV@exlC&RWh)1$o<~zM9#O zy4Qe-)&nhXC1`b)=UFLXAGSf}+E8|V8IiOB^h1MCP3iGi`3guEfWp0)aG zk*l2NPRI11cZDOv{Xyc4=FNC74hgMXv!sawm0t0#G7qMRh!@jd`o4G*O}$XF?mTAV z8YuDsh2K$XK!zT~Xqa)^{_E;#2@_lH>L)Qgn<*?9|FG|CA0Q+{Np<%ZpmD`IFZ|?7 zhkaM@w@~5k0wZ=u6c^fTgj)PykbX`&B zSD?#j3Ir1w6n5>02%5f#i^V~u{I6>w0fyI9!l4bXkMv}L12;aY*k`RH?#dxBk)kJ` z<%H9dopmnB&2q*VxWf9y1vvzZ3dWpEvRYXGi&ceY4@_npc``=fAWK|)1G`$g-#~YS z(xr3-@>RXnSlMimn~o=|b9u8o6l`fqLd$2T{1cJZP8eCvlfsFt1t4h%Y1dtoFcM}aC zm;t@#ks?WAmuB}c7T|Eo-OYq@m;Bq5d(K_rHZ!x+(9!x4HdrF4&LvBrl0m7ey9d9>(m;~rz?L!EIL?>IZWe}a)G6U?byGI78I~Xh z9yOoR&=IeOMBuDc1tofh*;|*Si*;Fayi6YaDo*OrFhRti`wzDt>r_;gWa~OsA{fuz zgYS}nNTJJx7oY2w!ffP-H>=O}$W)`gaQf{)rye)ar*lMI>{J5oq44hSx}@k??phU_ z`<&Kwo^^}&$1l6e)m7`snvQ(R-cP)S4;Aiw#SU~mbxaS#+@_HciOv!F4GtOT8~l0` zJXsj-a30=oOy z>?3uIn*=@*`w#;YJSHRM2Yf2HRYJ|;3lq8~bki$2O1&FWR!Tv!X&UfACWGW1H^}-R zo^QyT-p%T}V#joc-KKo52*GPT_N|Gq?sBCL)UjAWNcH6BPWh8^Cmh20nS);TE^2aF}|Xm<*0`eJvz;Fqz&FYjTvxGl`{ui^O?o+5)dKH6Ejm(V>Z0RrfN z&P`Fh*E!5{@uicc$FRGH$e$wvJ)aq-P$XW#@X8~|?1&jDt&GpPAefn?jfb-@LiL*) zt6L{`%+RJawIAzWS*xB{rs=B}sPlzK{2-@bg5Q*Srg7DzEd*~XblTq2ms~8Rl|CCR zbUU?v`dsh#oHk%Dy74Z-T?Uyosr~$iw^gXJpF^mH5Aw=~@b>xsv}aH1rqguhocAH< z8?1k*jw>$e>+aaPpTG$Xp-Ky|B!fgqzWaM{^!hY1%P8{7{ZY4Wv8TVfMRG)G&*sPK zRhgG_o;0U|YrGY)oArqE$LL-Lx`39kwY|wV!8Qg_rI^sWwuL{|FKWA`drT6LZ)AD~ zn2fUf6=B|uYZ*qrB}w9Di94-Y=QhrHSH`Pu>pjFWbRlVBmcI#2uifPITrBsPpy=wG zKXz~TpKB)ib-esISITbE+Y1wZmwxAisQs2kStiCUw#P@?!l+nH{f5599-AS{yv?+? z>Qe9Te#I)eFByhuo3Aoe8Lr`qa-65Sb*dza-qaZxZ#_4(EM~7v2HzJwIv^1K%g*8d z+BNhay9!DPd^s$CUsDx;Dl@u-CCV3h7IHm)ot#($I%l;5A4xkMvyGxDPgFDjdCD6} zO8F+J^@w!uf=kT@aAh3)p_&%_L-kXS%6sD9=*Bl4MBHS%sQW`Tiu{}HzqcLXH~#$< z768J0Li-PuHH7jm^%CN55D@Oz`4ql_K{-Rt1^q#1eq-A^WCfssV?7e}+a7cwXG}it zfu1Vlm;t``ULcBmBfo0_?wh~rFs}hRsw6Aw_2k!F#kHP&Z$ORjiO=^wD&EQI z^K$c{4^K_!DAZ6;H9Ka++Bn^TNuV555y9Q zq$%1oD>U?72d$<}X6e0kIE_>g?p>~Z*2rXe<x*r=hIlf;*~NXFS~rTqNlp*2t?TIdZQ14D2eICRjp5tGtLm6jfq?E? zgI-Ei_myr6UMt#v=FZ7tBN`X_CGt!1S`+7J#IydW>LKCDQo{y`98`-Zmv%BKF4-a2 z;Ul5J=@T)5hi3#P_^?kgG{Bur6g{Adwwq1#5AV^>>LTP%6Xkqzkar#%7N<`g&j3+h zo10-xA`BzkMEY)EDl08j{B7=jum7li zLq;1W_AH#uY&ZK0e1rZ~6S}8@RZ_GtV`>@BAfqhjnHlMj^K!!kw<|CpWn4`AD;Ocr zJzgGxB@2k;tg>aU{p_}%R2YgF*c_hxLcRz~q9JL=qaD)@XstYOJeC&el9B^8Z>%k> z?xB^^IqO^ukXh@B=HuPOt1@(kT%!Zt&CffUF~2H+VVH~b{v+Mz&6D-w>ZWZ{cZLkl zwx550pw3-)b#33NDF^Lw?ZxN#K3?Y72aH#l>1i*LL1vt{tWnfwF z*FV$qi|ibYct`s&w8W_OG^zYlDAr-9fB!INKkfDA(JTFA+h+sSxy6)W-*k_ zADL;MJJVWiXI@3k1_z<*ELw%^dE^V07COh%UN?@DV(*;hERmUMdc}zkkB2S_$+}`F z7a;T?BB2as4>`D&E>%d9pBnEx{^u)SY0S7*x}$okxR1y`YWG`IzytVng4s8`>xv*G)U`m&#}j zoPk6eU|yEK;_?d%)=usLjP9?B2l5?+>sidGli;miKUW6Iy*f=c@J=6_WN6!LlN^}wTqk-?3s>K{YRJP`Yc zrd+3=Jy@wGpe*BDr2Hs&PAs*#EzMGplN4Zc^q@Xv4WXK0;C5b<5rt9VrBsbvNgNhNfoZ6J!c$Q}C%zQJ_|ODog{qJcb!X@!@+Cq>FPwgE zvjq()gysL8vlU81Y)=jy!ZBQPef{Ly;^y?nwCvye5H8K*?r&jOV@2bpr>l@mTq0|S zm*!1oFRov~Z&_{T#0EDM=xw0UkSv*EL-~x_)a2t-`F?&#EosZNoJD4ljr9j7g*HomKymRT^CWRaG#lwkuRDe3@-W05F#D zcBtgjkhcF?LPME-f1&(6{GGkeZNs6jCqt*5?rG-P>4*&WK!!Z`SnLUkBm$Cs-}V4z zp%m)u{*1?8!{$Mbh-@L3k+#qHTc5Or=4{ATQ(<_`?_P;~c7mk5AYb;{V9ke9;>?u* z3Fq-#xqyMIMN73=C_Y~|%uvXWn=qhK`QXB9SM;!U-{*MXSRscpvP5{cHwQirZ_#L+ z3Ki3(>5`-#c-P1#?suJ#YWR31a^H5MRj*=6=ho`-Sdrg~1eg&oRCSlA5Jn2+IpQkS zmG9--WB-b(Ya8yEb;TLq1NvvAQdXP%7z9c8b}c+$n=ZHr|0U zy?&Q1IWL|)X^&Ik$3^+2r{(85WL0Ah;kMvzWV2{bE zxfUhyP^QNe5i-dGcZ#yy;bh+Ik%)Og{STn>pYNCdlP4LroG90T_+~zPJn|wH z1!P@qG1)=~Y*gVtw(kKl5=Y)YR7L`D+Ym1Bih4KnSiTE*Mf=C|5oj1_w3`h~+yh^D z!!IuXq!Iu3Fo#Cl7Qi{c4?O5WdetKxs}{*q5B((8_7HtXLHL83WauV`0+bjTNd zwm?D_*2}2N z!u2Sy&h&o7X)fnh4z6s>Tf0e5M?w2n85P&1*e#_i{{=%{VxY?Z`!)3m)A7cHW)!ez zYz8Pb7)f)cK@F!ZyLW3r6LD!ymvFVv+Y0%(>%>NLq+Dt{mi+L&^SK8zP)por^TNT1 zf#$nTiE2*Z;R^cuDIZ)N7G;hl-zAJ(VF+j5z_~~y{aUSedYkWzGn#JCP}KrH;Z<-D zN$p&bGX8dnv0Zk{A~FUWL3rC-@M7CkS&q`olUd>7Jrj*+uN}YNgtCE`LsxlG< zw7TZa>Bm(ojTkB{U2f>#3?jll{cQ)7cFQGVVoS0&s>*RO%+k z@)va|;Qulkx114M0e_uD4{Z1{mQis$SL*C>NenKF^wYl&_hQWvMIc6Fmj%r zK5qE2SG+)1N*^62G}EAAWu;{#iLnzRHePW&byQFquzmBE=|+5^=7HGjzo5Fg`_zC5{r^64ZfAjjNQhRXD&Oo%($kk z&?tQ`-}&ip)my+G-O$*;$@uSRI^wPWZa( zXIO)om@Ja{F^{M%|9mWeNP#&brl1`j-A9U(#Xbw+VaHpvPbFxUzOpiK{MNMP($D@T zIQJq_LKq`q6f~n_7@nYYb~C8!RExvmSE9tSh$^OyWd|1i!N{=3VUp7wR?$Ga^rBO* zR8KRxK3|siy0Aggk?nbaOz_Q%_b5Bbne^e88SR2K`MAA=+xN=^)9*0xCpTQRQJ7NE z3s7$6V?x{=aFSc`WRM8zZT09ru$uUGkZ2SJzrC7zv6i>gfmVC{ds1^+eSs)Ieuza~ z@=OhxZThOKG{{?Fnd989A@p6gy*54vfR*cGV<(Szk6*SzXW}T=9}(y9c30|&9+(R! zLqb%P(?4R~_4U1E!v-WZm&!*>vTMp`P26krI<3zd@d# z3|XnITkG~b@jGHIFo)OZ!hm2O?Q@vw)qD}yq#~P}vXXJmt!lY7rr&z8Shi{`=DL|LwE@>p>FEC38Z5vz$M7F}rW%VNV!7-txLE zZKb!WR=Sz2y{dN2*)hc>w;EGCzbwQzJ@>D+X8w^I@Lw2J`2Jey=}9bV-$M~e=}G!S z1sUD@LcW%i0B5*F=T%`flhVnSrCI*Qn1~KYZ(_Na9$5DNrpT?y zjg=*{=WztG4arsMQm}o&7yEYtO|Y9GRC|I&B@Z_e$tj8Er#!`QAqftRU z5%Iy}?L|uW*_BR@mTH${`rbzm+F>5!hll}Dn`s+U_&-XT5@X46K|VGLhb@}8CG(~$ z5<59OYPz59@K$Ng+z?eA*#*f4_KQv#K(n8O;h4r=jEp_~Lq%#)av&pj?bf3X06az= zb((yY=Cj~tI60>1c{6w(e!lYaQnHfBGW`4BjCI7j11)#|P`Qo54+WTiFZRXMHKv+X z6d*VKkv|H(DmGbN+xLveD^tEh;Lf*`N&_NjrQN6eLm#JNSpsx~{oTY5wG;w~f*tZ4 zY(S2}?^ka*D=RAhPz87Gb5WShw;OV2q1hs5g3jhUul3DNG2)WB@k;HoWclbF$n8$w znGRO@#_3GeMUC1ZU)c%Eol{h^b@EF3iEgGtyIRUM z7e6JxD6k3Q`dJvX?bu?zcu}!4hr*Uhm$RGK&0Dl2dwJ=8U-fps5X-mL1jYLAFaIJd z5*PY!Jq?gOcU7B?kBdRmpTE=c%3}8TUVCV|UFN^vq~qqj-=i;CmZIn8;h(&--Kd7g zF~sw8G?L74?!ZE+gBsmAAaTq@p*A6Df^BD;?n}6xuXqK1Kc4ea@fNa>I-ViM`&B2Q z{mEtGaX#ZFF()uB9t=)kjRP2FJ`@D9Ntfkvk}$3RqJiS?MFua2yDqT_Q1=lOq5!6I zXgwyk`VZBm$jLUv^)o|lsM+)gl*F(nqF-PZ25FRiyFa;S$KOtx1YqPpZ10z$W|JPP zihroy&Bf;*yx03`spYhmhl*Mv-72=s^ikKElDICJwzo-Y-_Hz{=P3H94<_<2J#yXv5_RC4kyEwZseX!0tXlXl{`<&!hHNnA!3bM4zl6jW6~eQ4tC12-+g{yBi(9D?oPZMb|IjS+GUVP|{A zkMgi{JNuV@ivUl|l6{v3adno9l;R01|l7ApxIlV{W0aDoP z$k0DjUwXTiNYCcs`yQufqliP)xyMga_+a}VD#{w@7YgWW-|!+dQkWD##|d{7)ng=yXq0_ECSRUZZ5r{<>&? zvl~TbN}^m(2=Egb0V4d;Fd z5R?QONZedN&r<_VQ2i#5k?W2bwN z(Ka_>(V{mKaFrIKtaGCd;{wh3&vJv@@`nGWQM1vv{pVF?g_RE%LJ}kRy)vR;E4U0J zRnF~q;#fa_BE86uqt9~*u<^@WwlYb5Z7-^sKb(pXF+5D=)YY)xmAnM+vFI!?m+LAVh_EW#o$S@QRmK zv{liu7}Bb`%UM7DihO~TIaH~|?5cKpk5?w39qT9{hosK&uPfhu42})mw(1QJ+Y#U9 z;hh@6bkYMp#C6K`5rW-sSZSrxM5~(p@@thlrLK|UeJsBwkSa<}UU0>PnR_YcYAdfq z-XDv+KWKu`F4FoHceVN@bxs(%7mJu+O}U6R+eliLS#Ri&vRiSG^OqyVCH7F1P8gnn zL3-X#@Qz`n&4-PVnZENS(>#GFS);a7=Sl50|A}-+0+;~o9bybV5Vd}<64kNXt6lH; z*Td^|W3aVp9XI$Mpi8YRYk0lC>_AsBW?!q)l40m{cneX$JiF_mI)^@E>KFiCiaCI* zymxY|P6>1i2Fez-SA@#<2|ikXUoI^4$WMo*m^DMU^Gy8t$IyN_LDwV3pcQo!<#q$! zVdld%=Zw1L8~yXi`fji6w5jRC){Xw+Zq`QsE}FaVs6VeOahE?Ob*f)~?UW;)@8Bn=*B_n>6s`I7Gw-%> z#JAo=Cg=x)d&m!Sj5fYR$BUc_YciGhFXgrThMC2|mt#iceFnF6~cEEjV-YTCrgzWpt6%)9oLmatmp(J!T;` zhf1XBK#g;sRy?k}uBe=vE8+fH=eDJsljGZbf|*`OJ!*EX7wi6E+-hU#S||^R8Vip& zJiIh39ExU{XxR9O9FiNF`r^T1Vm-W7y2LWGym&Q_It-tf^*ql$9%H|)w`5^FTYPop z>~XH}!}g3fIO52I(o8S>09MkOtMSVFfejUcgsEA7G2d0fKx1eIZ$3^8T{|`?=9GH7=`hMWPfTp}R^?u4ptgx&2;!_d2`P7;KLkcmE|K>T zCmH=mGtU^ekf;4F+5V(U|ifS;|wM=Zp?7oPyj7F4h3gaXZ&y$6g|ILE8rF9$>h zmQ;pt@K&$Q;~Td`lEco;#%ssnV;Bh&WU*|5^OuPX)8e?=kU0P``CLb(lzW2EmRoNG7r8o1&< z2oi43367U;9u>b@%E+$Y*$-_HZq`(A(fe+$sc;0p-EznbTk0j`AEF|%vTqjs+RifR zW&h3R+t+uzqft1D%0&%b*ReL-AJax!bE1|X1nW-~ys;)r6YKuwl2N~z?|W5wS=}q0 zEVUQwE-V?lS6o54@I6N{3is>r(+PghkagS0@#9i`;B3$^w?s!;>qu&KB(xp=X!X{e z3;6tg{(TQEo0q`b^C2;*#t8?Ze{!!-Mup*}8*j{UWAXw}A>ftgvKqF7V6D!`UgE+V275*4qpY z6`W(!2Z|_v%STeuw$7q6`41Ixd&OirFMq+GEP0w?Pbw#@S-BArQO%U&&(VQ+QrG?? zaHXo*BACP+_`7l8m`%B@(x9;R={e)8Z&CWkZ_jr;wyQ;oENkAv2ZW8{>y{RL zQ1Gm8eX3HV0R8);!Oosixj#v|rlLt!b*`i!qj*VpK&a%|DG-7CV{&s?`$%6{;^aHW zA1b=IrxZX(yMx*_nxF#5+|RFVAA=B}L9fJ~DR&i6Q0TLFB$Q(>BTS}upJ|*TT%Jlp zIrmBw@|~TwgwG)ny1LM9vx&s}ISYj-$6`{uE-erJ|n2;b+8>So}u zLY}d8p%{~4SI?i1xv|YDX3k%l$D{s=<2z}YcJ&q4uKS(kd{GR%t6_Wp=n^hJ)|;so zTVLTiH$r^$&Ew6fmm&{^{CsR90^( zJ@}gj|1t94gq)1@7@=Ho_xz45S1Ze+WuZ*l)K*ssnorE~SG}MEJpVzj3jQDTs@=t% zKU6Df|A}8+{eOpFWg|03Q=ijQ#y%ecBc%U_46BG-<@XDcJ^Z9l^Md0kayL7FJu)}L z?PD%Ds_tRVMWNOhV%TThxxt$$B~Q1@d0}???auhFU^3g1B#K{{k)`=vJi zs#b1n-=}ysWsL&x#SzzQwG$fEL!XD1h=M;vIK*C#wnP8#^Ig2J8N*Wo_afu14ug*tJ!Z?(D_!6Pjf> z+J5}+Oa{j!>*=3KC33vslpxyRJqpd^kkp3?TYD$gAxmE|B;MsvmG?MZ6&}?-08HO{ zLi3Fw-~szFvyW=oA1Wou3xTKZ*UN>q12yB33t(rRz<^L*txm}G#H^?Ut#Qok`X4GT z#2_loc?y^UrbB9=gMX+9rc8gRGXD;~P4MC!{7(E(zTiMCY3UD%Hvjl72phrmhiU;D z{DKuF)0M>xeBDbbEz|92)1a<7p!;&$N-H{7bAi9qY^eIG(X1}*y!fCbboZ^oP zf!}NK3OWcZDWK?!hzHDU&yO~ez=W}1RP8rL`R0BusPS(;I#oy>)IM8F@%OK>iLu-j z7S&4Y_f9fV8aCVaPiaxU1Gx-)+KukDc`!vx>Cuiz@9(cKuAr( z?bn?Pc^rb8_{|+hBAk31 zbj(AHK@Lx=ZgtwOT8FupWzxpA~%@ zifgVqdT8m;{vuCTRM&OfwFU=~0<#gRS+a;UOb%R^((ocLACOwX$B|w!pO@;-8fAC% zW(`{HX^k>?oprpU9^n9HEQl~olj1pY-6@pMk;EC0C`uDc8Tvt}A3N4%ExhRxmkAC9 zn7wgy%vjK1cXf`Y+>nhXYq+7TF7cIaCGMo;ra zUr;c#K2nt(c5X4SfPnm(@{C7Z3*C>L$d#e?4U>GXeN@4cg%T-&`t_I6w7(mSX~3r(tkA-tl3fPe-FooqxpNSC0I zsPw*-CS8OOLV!pwQiLS1=~6;dfh5vF5(JD8aGvkH=ggcl>wMpQb7t0>S+nM^EV5vc z=Xvhj*L_{TmhalRl{P$+|5#*lwUxFlKkMRtr~2%AhY%6IY0AC)vvCPa1zjH}^*CqW zuY{P_zi=`UlBzN>*!`}zXLOl%BI0t9q@QD9^{_%X`xgAPzU$aV_KcyZWp{Eod3_Kb zlv%JXqr4Pw3)4L-jPgxN`78hWDp^ccH6kz zEnO?sD?b`)DQ;5(OU=UCVy(;%vh@eK;SDL4((6kl^9={N%n*>p5-LMR2(14O|1E&! zU1ROF(aCQiafExX??HS0_4!}vfb+Tr6&iO?16TB=yT0M!8&=`-yTQKurfnyrXfZ~{Hv9;|x>V4gKV3>a_OM}m zMe&25;y3FHa5bjpbh-D;x5qp3^XCmew|l1N1^nUvyG2A0|67bTXIh;eL|{o}L61X_ z9`3v3=A27eGtJT7pnZMUI3>J&-3|-0&z_Ghh@3ivu=UcIW5j?Q$FwM#zuhp*KkvSV zaN)+ip|^|(DKkg)Xj|WjKQmM#z@it2mLr_;#$gKBcN@&Rn@c(0;pVdl}6uxs|wCwK=&Ee&m1a@BHj z`R|_Z0W}ZCX2MNbw25?I)dIIP{NK6fEU2;YYMWz@Knk44XyIeH$>F*#PL2+6oOp`qsmcT5Ek!&xO>-mHIU*0xabN+~;TLVZi^A?r90kvd`8=*2@ry0eq8`3{u4*OsyHV$> z^~qe474NhLDqqdCe7z2Zo80m++8Z35H#$C}VZQVJXz*TYv?wXC(cb!{Zy?3`y}0^O zCGHp7o9E`VljfP7&zbiRqcJQWw%M){pl=Xo``3H(rKaF|(^Dgx6YX>V_RbH~6YiAt z!xF|DwWIFNlqS=lP1c&wPHW?D$9Dkg*lDA$sYu}C)#p;WkBtMAfBN^2{girObf7{+ zZ9Ev;QZGwjB_dKz`exzB_7g@?oAeupdM{Q_41pq8YYlv&e75Dve{SyUDn_&k^&{V3 zY-MiG)c*Mhf9wDFFJSC%?}7DHnR(J)a{Qa(DXV7?08D=I*Dtn#wCIVF1FLUFdzwTY2xcHdW&&^Wn?tk)Os>ovrR!A6_LSGap`ElKeq%v3wlfU@kqW z_4m{Awx}tP${mk0KLB$KGgxv*S50DQvLC-cBdGru8!yY7-atBBeAaal5ecQ^Q;^pp z<#KRke$BhipKmhSZnZx9yQ<}p$c3op$b%IN|4K2>WRpK=2i4tIdc0cAMOp9ptc7BU z*R8VspioO4`hcoCRNZVc8_n*j9epZqIV#>Vo#@$CEZod15m&iBUFyW6X?acQR%6!s z*y9LUgq5mZLq;v(nc}Gf+JOz-Zf83Z0H>FjrAMlWQ#KPQN(k#3v#NxDkC)4B@w)rf zByH!NcP_C>m}|zz_46m>+D}(LjUFUjGpRp=C+guPc+N8vl&OWi+3>A^eo&Mr()J=K zh1W@X0jHD#<>aSg5ZEeLtBF6K;^9=GLqbLtQ%AltO7$%Lr`Xw%m{ z7Y6pM4JEcszZxA0EVqWUEdH?rV9*>lvn0dMvY`taadt@~c>4@^Q&^5vxBw#N9|&M2 zvy`!)HZw^WXW#s^yR@7F_khpxPy zw@L?Lnn>g_RR!x!{*_oilcAjGkz0f64lUkQ5D!w}_p?OFkbGLOkR4J^-6N*Vjc0G; z*hw;5!OGdZpmL>5uKd-ClQ!}q91$G=fMRF2yIK4egaZ^OnES{vdLAN|_UA;GAX0rA ztW0rEX`J&9sTuP;?!;9K=$;zgbz(-E+9o!D^9%lQHvf@56{2=uA>X6b;st#sJ77k; zEQMrZFsLnSz(VeCx+wOWDug z(DbK;#tX;g>{d=6$|UEfV^K952I(zTcYcT$H&nv?4zqTpCM;3dFBVUtlv^G>$@}VM zIDnsDhsJT(u0b>8K-v`ZLfAOQ3UuD$qR3Fbc`$ecB$@QN_YK1eHm?C@Wz0d}3SWR_Otr;T}@&T^N| z+Oi5iVdCpr)fM9_!A?r|gXy2IUvB=vH}FSo+DK{-C5%fIDXbd@h6xA(+vIQ@{*hCQmUuR*fWhu((+_UBk_S~TYFN!y<$~ZNZb?Ei!h#I zd5(p>>Q5(eJ@JGg67-E8qe02F{8k64 z5@yJ82Ihp_h5_hVLYa#Pk7pWr=bb5*!%(cRbS4Zs4DJ0K9Kp`I(JTiO)$3`a%EFMxgEpDgMR-|$xc{xL8tE#fG2KV_V z7^uP>-`Ux{BsG!&$_F8i1`u8^OF=^5KnRs$s)VRUy276m|;KS zIO=@2cFyeWf6EvMaZvF(Q(j36ZcUYQcyEA6)=?aQOk;ror87U%rcYXhF5l)&Mg4&& zAxiTyq@H_t)-pZpyT*0=18F>$x+XC#t>IZ@GfKf~*EkdU+^dk` z8n(VOXyrhlxF~)Jf7HJAk?z2H=$sg@u1=x`>s3A6V~CpX2k)1DF+nStz@FL!>a-i$ z_Zv0IY%4IdZeXFi;7Y>r$f$HOxhqwuy)1R^bk_d#F=>=R*anBje2+=_Zdg5(+KRtQ=uq<}I*wlBmh+`B z#Nsc7d*uvUad%8&vOs0u8(DicDUZ|7qbxFS<`VYH^M_$*PXb-%6d|CMm^c&9fg10@DI<2O))RA8o1Gfun4-?;2# zf-&&@aZw`JqEpQz)4I*rY;fq|+#lcFAc2IRx=$=-SLPmxNN{QwIo&&W+3jFwW}CA2 z^4r%A%aY*jprA~z*Ta9DO!?ToLSMT!AMUz701v0t_OGwTqLylH5bv#;>0{d=M+QhO z=KhV|ht5xO)n0de3!Yig8#|Z7UtQ-SON=VM zp4dqO(nve3Tk#WAvf;a8qw2fad z))?Brw6705E+56#bT6f#8U+fTSF>&(XCuvm(G`uI4dm@`;nvJ&7mFtrNyTEjw4m25 zKoG~+=;;tFf=pPyH9myEaWz6Q1~$adnr|2td8Ou#D#+++Si-Z8J3o(`eS4T#KOoBH zF~VB`-==s&BGwGjF@>KovHQiA;1E3mh*MoYBToUHL<~}v!4(uEoI&;N&q zc+b47ym^(&gWur$k2G6wIE7rHAUEb?_OR{BL`zk+Q;_vb9Y{J00Ey$qTA%PqXUuzC z99g3o*YA;8qtKm`b5D-E{&BmB9L=@CIro-PjDN^W387@m8m&(4oAyg{p`;`?N-}%y zW$yh5fs;?XB~LPtp!vLR+ND&(hi_qP zRnY^D^zH;{i`!nQ5PZbSMMrRe0&hr065=z&lQfQfMgJlOYIUj7DB^fs*@D>pSa49K znVw0y4=r$lrqv96^FWk5XDNKRuUX8Qt#Xv?-!o2H)ymQkd{;kiF@Im_WVzKShCMd) zg|EScrH*=!x-heWSbUA4+d`8O*%WC9o?*wWN|%lNQGDf{$uDjTUv59hag-W6rQm1M zdi$e_PgU}p=$|pY?(amM^uSW0?)2HmA!w5{?Xq*m90Qlze+0n*|J6Cxr;Psl4Jux; zGU<35ffT^%$Zvn6%XbQU_0gyGIk|GXSL2fV;f2rtjhFnN9LfGy&hq~&NNH3frV=mf z^~|=?FSZBYXusI3+FhS^$Nys6b)nB3r+WNitEeg|K>#BO`R@SayXEkUZSPos>5TuD z$)f)!&5Dp$aLvA^_KZ0 zFH&>UsHtok&t7gOxAq6v7paL;2D*G7h^Z8O83KK1`O(f@T&UNO>|5&)qJ}zmkRI|{ z?uW{)=E=z$e=!tDGD!;>CK;qfelUuf6?~(gsxHRNbV}>lkT$$w(`tIQ)$>C7+jjb# zoBfNKvpLI5`*8~0!B6$ELHOI5fkKDsO}&2ky0&KT6zhnj{`)x0Miu!LN;^2Y>J8`_ zU-4FQY|33f$Qxrpe7y3gp0Lm7%T z7_vFtoznq;Jujzk0937E)02wZCq0K(-+z?^YK8|=^XQ%6B$v-FiemD3(GEgb<7lw99_pVHyF*)Yruj@8cwfOd&5txBETs_v-&s zi{(Eqo&VBLC*|Es&r5c1K>#An9CRGDFVKWv?v_D)jR2;Av$fqP=)X@s9P0jJ`#T2k z)Z7XI?%drs(Ld~$y!W1;9%DTj`^Dx0!0p$ye;fMO$>M|qs=pk5F!_tkq?66%pC{2% z8UOkk2|S&93da#fhri!FQ^bY@HmuWp01SNbxWZ^FXA^ZO)$|mT0N-^99y?A`Jh6fB z0wbEAS3f%f4-9F#dWva@|3+YK{#SRh|LWfvVbz%zyjd@;(*a1wwh?}ObKC!CQ2*k; zOk|buzu2&$M(-eL-Mbg4Mn{r&0V%MeOedKsc6{Og7A-N*{`K5Mef=Bdn{g!9zIc)l z2=}GTuyQ4}fOTtblry&*U2fxk-)X|Q>NDnjuSG~$rTkD)c811}0I1pN0B4jO1bJ~p_#bs#oTcAjb z_4s(O4i!JIw9SIoZWwVz3nQiI)+AK?iK@73b>xYWb*dH;Y#l3ZN6K$}c|*R1H{)`N z!_nFNgBZf&DYNB)hg1ksM)-c6o|Oc&hqCU~RvVT!7zUQWUA0y}>2pjt7;zXgJ<6yg z-LnfE+0R$~uB5#0(JFfy81XsBUlp;JAE@W*)*oODW*hnE4H=${ItsC0R}ik#>>q(; z3n4mGAGA3=qPZWxJOLq0iQU{KG*o<(Ogx;MWyg^1kv_x7NUhb8;a)Hz%y!sR&ONPW z4))E!I$G(vE#7Y|o>qTaJJE0c_;5MCce(h}P;=YvQHiK0kaFWy54Ho3Y4rlR?2mX) zi#t@R^g1|&eLXB(H7N|4@=m;425J?Xc@dU|jxsq3NAQ9_PKR~>r4cv@&Z$!( z{DtXHSxgC3YczY0py`Vy(&8Ug_jP9?w#|=-IqVphS)Y8ntpgj^+0U-GPRFAw zzPS3Erf32QO`=e!kbu-pwcA4HbT~5|Idn2s75H( zy!v9i>~RPF}&x&$1aDXDe!Gl-j8 z8;8`-`cEQjQ4FM7E@fc%v_@yRNp9 zy7mzVHgvP!+MJB799`I&TU|vem(aHq0k^Vszy#0F4sFutPYDT^bBgP1mbRnYF$A$x zUsrv~hLsSt_KS9AOXJ#NT@bKYNwfHvW(*ICX~KSqq#NRZMzySXUv?{uatxkZWU4zm zb1UDbqif5svm3?gGy7?}Ql?N8@0##@bF*xN`soAkZq>+c4rBgXy27HQu1O-&*qb(~5U7;-gzfD&-Nq6fK_`aG@8G2`R( zm}b@a5kI>=n^;Zr@QsyM%T?3-MK0PQS*vPJLGw!PXmQ-^k)>3Zdic*|N&TYxeh;Q9 zmq1pS^L90+3JHy+>>i+xB#YBdd^R|l`|H$Fkou-H$u&%#vLii2LCuZb0Xi1H6Wy-d zzIN_~mq%9-tF!>#$~i>vnzTF_sc>}N7j>4upP)6n@#7H3d~{9KB!XPqG{h|cOCjZ3 zl?A$cN4_~uuPQr!difWb{(VsVQRH8Z55RT?eE?z*yu=@>(gfyqu)dIx=Vqi;gM83o0Cc`3{ zn6Z|*l>LD!^HU8#Vw|@o$i#PPbkOm!U2@C>O4ijbLo!4f;q2JNfF!oxr1eH$$U_2I zsx(I7LHo&H)9tz`wSNB9BO%&u(z$m2%Hu({h(+1b=R=!bZN)sI9bV2iw6Zi0^>aY6 zbaD~mIEY*1g+ohBDxKW6Fq2EwRzP_&9i@Ev)h|NP3d7&*AIbhYc;aW;S<8zpwr|H?SWQlDvJ z2UslrV}EQM%w+l+aIZ0H3-R)$OCy^7MDg_OC_J;PS8v{Vk#p_5-{b9SXV2mu*_UFS zl99r}-<FX=WOB>Hi2NJA1C-FfE$FUno>yYgPOI!4gmX2zi7zf_d5vys&JG# z(J`9e8Q~1;VrGh@JnT5Pz&rUyJm=ksT0L2A{9*VtM78wFHC$_xo?Me^pvpTflZneC z=e{dXMisl&lM4YmB(VqYg8QpIP1f%@7-VH5>@zFh(!`)y53*k6U_-zAAT||-mkTT| z#q%`XSLVtKG}Q__T%Xs(Dl~OXz2*Gd&|l#^jR= zOgrrw5#o#!IzFk^H~J#IJ0)Cs+v27$#(u)2W$8EwK2fuurV$hKOBS%^se|r)2&HQThVeI(gUt z-2N~P4Tn3AM7ryYbind~2(G?}){;x5d3J-!UfS3d!HWj1$^3B|?lXrzfn*2PnBvjm#qbK7)@-CznZ{+F`>GJEvOvM66Z11RqDMw~D1->(18fJ%W2@ z%XFPivB50L(>TujW!C!Oy}MW|=$g*XoWMaUeY$&TjLWZ^D?(}I49M{tbO|pB3(q7qTv|L(`;#HKcb=4 z^Jlh-6(^rnt!81=#-FQj-Xz=&-sIRICHFcVpJ{VVWKL>L0o8iW``|gfxM2x^He|ST zXw@v^>2F{y3a8YiKxN`9KfpQtiO)VSX9F|r9=UW9X^n1Lt|POq;mka0eAyN9unzNm zuQdJRsH0MS_xh-cUacsP+`H+@Vg}?~g{B}7bD;nT|NB=;-YYu3Ce2ea+Su9{>T*U6rKOuEoqw$_E(!>#4 zb|AqjJG6?(jFiEKO}coKilMny^&7O_7Z2H$086PUgb_HG|N*B=Ha!*YqH9Nv+Mm5<>azlM?)6}Gc!b9`2Jc~V$OZAn z%wlsL#cK~hpdgKQoVTTt9LTrBID2Vb2_v*=bPmvbeS!Bu5t>F4zS39eUoaV6m!e0V z&csor)Oa}-e1wZRnXA-AafGYRm%xWjv-?Me_IFX|7F?L}ql-5?n!6J$$={j=wBPGD zvNr|E>QSro@eHRla5Ki ziah~Mkbs1b`0Rihi34xO&0_t=$$be=mpmqx|qt1 zcHsmn>b#E<>W#0xlgcTQ_*W>m=ES+Cr`Ignx*2lS;@a~tYT>1!Ram<6DXwT4-d9wO z#yS}n#2xXGO^UA#I+5rO7^YkE!F163PTWr%&Bk#sLHb0t&+3gBjgt9yrHMT&T7wKd zfQZSSJKfvSrN=@Y$jgYq&`4bgiR9kC3h`9>IAYki=^P1GW)eoKyqh~@x1T^LN_fWl zji#Qopg74ASyJa+L=+I`-!54AqG!+9b&X&gUHqJij=ziyHy=1X%0sVD=Q^chfzV*x z_D2Qofgw>(!%jD9ns+$Hd%PHYm#r}ue@WCuRpGQjlYU7jGz4Q_c=0qS8$`w`PNK~V zy`kmHqQ;t;xA!!M@mEGe8tYkjP8+e*>MC8irMbqRq1v&CyO|Zw_0E zi2kUCWzkvSj2>ge-^IPKmILQQ>V{i0%^EXn5kYqw$a^yUK9CC&&|R8!&e08qdR&vG zKViNR_G7wX-Zh2Win6UHyITuYc)&fD?H%P6!LhIT*}mnl#_ooIRd|SKfQd8?Ab|+c zXRB;A1Pe>$6!j;P^WUdDdbBax`b3Yi@!Bt{i+5v8>=yM(_C+`+5RK`BZ4WKta^q;0 z<+cYTriJcK(2DKRvJr_N=c5M}8*fd=Ey?iBv(%?+8@rRQw##J@CIg?8e)f}A%_JJw zEwrFN`--a=;5Kd6GtdrxA}#GhzU$?_8or0m$oPQry7#vcawOJOE))0oVt*5%`bzs^ z_YrG8am1~7oVbt&tfR7uqpAj4q<7Cw%Bdb}J!kA!uHUH`tS)Rz@O<4Kr4uzi>K%{C zZiV%l*XmH$tObm1gBe7yX??iT6b{;fHAy=Mt=gQzY^@G{F+G4DzX|UaV+MV&hw}u% zi4gS(oir5Tm4m;VC>g0!q`R;UY?9joM{~>hf5kdko?4Aks3Tze5U4{N6{UNR}Ma=yb6gkv)J81 zlG_<-yMDZYa`8PoDq~NX8k}A%d)k@ZnKurKs2b8JOTy;%6${-u_6sB3a^H~&pp5bO z?Hs8gpTMQ?ga~FB){=^$SG!%~^v5EizZ1IYFNW0TCi_v$mE-YiTv|DgR*98J|~$b{b9;vE(ARHve|Y;!)R z)YrdaqgcAcuC7({XNpm#WW78Sa%muBlZ_q~2Lf8Qh!EQ=<{DK1K*W)?NnNwz$B0oj z@1ohQ&?7E(`u-d{!okc??fqQ>jTf`Mc}|(Tl%uO%F;~(J4#lvByA#Jh|*7 zEq(in3|h_XD;9OWW?iODFij7vk4wRk;myTD%)rWxP*krhMMm08+3!Sra%&qYLmToR z!k^pxF&~euadhxK5dR7jQTF>Wqq{5jA%0>-4{(8TFUS=meZKZAB}Z8cW2WMzrCwi} zjMewh{ArV}#mf<1X%zvw8{s}OAf_O^ETY)^(C{_SX==x)pQy@Pw6_Y+DXsU!C9JU? z*Mttx?~bB@ni{@Nl{LnwH)eT?$#J}lT|GAh+C1=M(md%~EW0-5ld4-w?&ZJOdT$+L z555TPWW*aa37Eiz@$s~&PsE+2pE~;Yn-WO4G8yjC$s3mq$_Of6vGmD%Mu0Gf zn7cg_=DIdxkde@zbU{Q~2BJ>ijz>pOjZUXM)V+=_5neY??8>?QrdiWkC8YiX!|HmT zN3rYk;Yz9os{3oKyPGyc29~QPyMf5hDvj?u5{b0g$i{`<(jOeR#Jr|^3oPr0j)Y0R z?UFcsGPVseuaJ%iUUbgTmDrp$x5K1-coIH=*`F8G$0$y^vC2foSZYiOhBFPEU(dQq zkDEzUZ4|&%v{a2$`W&83*h|_^Qb;hVpXxB9x|*7PRN0sEd*c6EJ5ZMf1+LA$c)=%p z(?9Q0gj?ziWKi>#>5;V_{VbWH1WQ&NpdRAs#t>Cs`*m*THn2Fzq*R`@zhML zVnyE2EBbU4QLTM|EDmR zM~K+*%bmtWK&jTqOTwq*bScxD>*$%pd2d3I?1zKMF7}BCG-JB7oQa3NZ)apDBuC&3 zy=II*F8*VZYT%YszJN#|*7;4kA)@5#Cv+q#qa%g-&f|*d2lq0^*po{OC{z$0fVs|A=!30R*>@?l>C&x>0g3Lv8#k1Yd?mMWR!kH%Mm0cUdde9N6nS5L= z+_~epobl=g_PZo9*5(Q(70)r=dpDay2}-ajRuCjN(zisGcb#T{?25q5Ei)d7+ts$HrCz)$6ChBL{lp*P4oD}$err%s245vL)Q0K zohNn}DHt`b*n*5PS_ut}HDe>;Pu$Xuq@yPcPD-gYvKCBtlrC;*M|1O^3M^Y%n~FDY(eL{o#)h~#ntc`QY|=txGsohC_vqPv zD_JxPiI}q2<5)?EX1VM$yaI>b@SSzas-&=Zd6{Bgvkqmwg}v6l7j~#(#1;|_s?|;7 z$}g{4(jeCl-_pPTP7tHg&wFkP|Dw0A7Q`!)gkkT6mOVQho+vUjWWsrS-~d^^zdNy* zucRMvlMSrigh-}aK9n$<-ZZV7+Mnyt`K^_~1>vWELt`D88GT_sFXP3l-2^5guqvME z&QG$_5#?!-{UP?e%d>w2cA7;TdU+t8d&@P@?9<7)YT^zZmLMC#pJlF%>lPxgBDo-7fPSncmoIj0ne_Pr(!ulrn>kL~LCdoU`t!4BqRES0fKnCq+Rxl7cu(!^Y@ zGP&nAUK`!to}PWA%Tj0JFt@0@{H%X4^GboEtN!?2Q4oa!%wA4}kw$e4;hJhcgYr{E zdui3Fh%(AAHtt14`qKRD{M_2RGG-+78KO|F_(YCJ6JwwB{Z2*syV-#ED){F^c7Bao zGBwoiF1?7y+SrL)GA$N!>%PVnf@yJRk#~Tl5?DDxcF!T54QCotUw8ndJ#I!hI-w&|{|GiuIRP4y1Lk_$G4X?t6R*pW*a#<=%`JU#4`G- zW?lFxqnAc^2lu{+RR;z$62hr>aXDIx=|#C@dVr zZr!6n>CZaU{AaD)KZB>1P3Jw7y!ER-tOzOf)~xC;1%K0_{atAD>Y!`W9-abVh2DK* zvF$@QuuNXp){hbJ#Fj-KupG);?PaasV@wi+9IUO*y^*h;pu=rrOaGCoGh%SLyN+J_ z-UGdv`|{_AFJ|zaMcsqX@RzHCf>@6=Q$ABwOrD4DsLmR+Ea7X$w1zg0>N|l>?D<&r z#o%?75a?q}i{Y)|+V3Z)sgf!DG<#Lz7(4tbHfxz&3Wi*2mgV2D22QT6NI9pbce7iT zqE%V+*U7g2V+(gHem=+&U)+j0x{Y}Jh;NC~X zVS8mmG*!r9u$hz7ULu)bTO?_D+ntg1uF)TMSbWL0&c=2HJ6`yf8j^4SK|NKRj3;nz zYkg?1A?5akGmza}59b377Cw>QG0#w+1c|vgT8BO1denR(l`~H}GN(cP6)z?$wDRk; ze)n&0Isafb%Ihy&23qWE#+ioOyX35Q8COz0V^XJ-21Xs?6p!>K4qk=&sVezI%|?ri zG42jvZm8n)LVoY>D0bPCl?(`NQC#7VDRQU^>1{Qe%0_ug+pdZzZiJ&wp}g^Y$gpvU zj{jq6EKmTE5=^hf^AF#2cYmy2bZG_bead1pfV`ZP# zCQb5l6T>}A3LsRl?hWV5Wp3F{8T!N1a4{Q9Vt(oAczj~<#VXOqC*ys#SZEsOWFgrX zmJ&|iZ+oKW9S01_ZzL*HaM1F4mA8(CWzY(7UI9C*kNdj24e@^P$)Hx8IT@YQWFCGT z>tktB3rf(jG(GTOelKT%QOWta1lQ2Xo-1pI_DO0H?4AJb*QC;+QQM)h)}=fJ2DNNc zM~r%%-hXzk&7&4<^DGj6EFk4SL9;Bx{4pf3k+Y_wrOIe5W3ik>}h8Y=V(s4N<3f{AXJ0C|Pt594x`%~4k#J??%BA(L(N>#b|K+`kWz*Acw(b_v*`DGNkTTeNbITf`nWt)hj9qEkZU1?|Q|p)s5Rx$L zuRXfzUK9c5YkAWZWzI4QagVd>*A4iy%~A8(!HiHKO&p2;o5~EVVm45_%IE}&PHicJ zV|SJG_#|#=XRGyX&JNMZD?74MBG5yleeTmdB<23$bm`N}bc*^em$C~Z(KvVPj zsTFeISAT@~(6-2A7-AgY+OUQd9pun(fvF$3JxPf6-3pGrZels-=>)^tExi3mA! z!w`s1^W$;ePHJ~E8deGgtNc*)nC(+r-o_aQ`L!ycl@SjesPkLHWHO$J}XuZyp| zER!J5L?~Met~vFUQQW;LGz=WoYYIM`Qle1&mHkbKYF1gTEeZaAhUBGc8Qkk#0!@~t zW;;3L3su7K16xXCoNj4g=VICU8yg$iml={nv)?zoou4zS;ys=ZVzOX4S2fG*`JShV zGw)b(-QqGbAd=&+@+RV5+$DrsY^os=kDV5~4r zkauB&#dY%61;C6mBkC91W+uR(k$81FG0W9ZZzW?>6<4O>423&9a?74yN3x- zSmcjVjJB*3SxYGPrsG*u(SK7W|JxP(_T%c->d`HPItBG1C_S2op)rM`fPX)NGf%6g zWi^o8sbh&HyhvBNJ=OL{WEHYTsf=!#tlf#S>UfGjE~8i=-l#^(VKbJPx$%rP{P_oZ zpFx=Yvs?7f|ERLkh`18<$RlQSch;m}8n1hm)1DU!H0&Bs&fH> z<)RxZ15aGwT;|#OW|PBOckmK_c}2+CJ;^dGJ|$$zXB8TPWcuI8FMHwo?6{^ws+@J| zxLErM=e1)vwfhA!iayY#IOp=our?cy)ITonaAydRP#ldRRR)$^1iKh&%vyUY-;ImS zDIW|3f81+UB^IJKqBUF2he-L37D-~Ho{bpQSDBbc1ph4I`*U|oKG1niK}`L@?pUDZ z09qlVM${;&|D#L9vr+))P(7kBGQF_Ph=cLl}tf3?$6k$S8_ zVe!av)#;^QBCWJOCSzjbe^*!dpl>WHDd%J!0lFb#X_e(+9A{uTX_p%*%1Ad&A7mz{ z+hh=^pb%a6I8uk2NZh+TUHLe1hxHXr$8VlP& z9!E9^1xj(t(QnLTA05%o}T79ZKmVip=K;sg;yPzA@FPh^SEpc3-kgy>uYS77xo7 zyH6+kjC~2S#Tfh*`z@=Zx*&D;b1^>N0c+Bwd~BBv_%v}_Nj9L5(S=?*S@hBRG;uN| zh6E+rG-gRT7-wxvOdG6nn+qyhn zkp5ieLVE%{fkwR;zLNVJ=Cz<=`TDY}R})HK#FSc2Kr^Pj^#?8QWoXN{_9xb-!fshy z9t>fE!@Y|-<}nA}T<*-E)8>NjfKVbS#1ow););&&rMESDX727*h4(uf+Z1>R6eALT zjscO5?#I)*le;wNs3eqUN#epaW@a_Q;uc*Vi|C4q%9qXa$6BB#*z0b zGdSiQfMN7_%aB3es8$+@iIP@Z7!t1w8 zIGT`d(zaE0`1lG&7*;$y$O(#81RIXwloYCkEUjinyulAa155%Q1ImMaSUE11zid@jBx7n-J) zn#h(p>AP!AUNs?+K|aW>p?JLv?iebvM7hWPyCeklY8e3%OLKXuqE6oMoYMhUHGxf} z%e`R{A)LJ8ucK_Tuu9YBolf^+S2_bQDNJjzG>YW+t3U(;Oga8LYexnSLg&o%9sA`3 z6;F>|*}pQ|u9+r!uNQ0+FR$Y+z8lB>)Gf`-st}&zgKA75NL^j(%3E3w!pkv)GPdFv zaEiq2Sm}bbyLx(u-I1q4-&27*`L4w`+XKg*+id4XlH$tkFRzETwqH{w6N5+n?G13L zwoC6OsjLFsgO_+K9pO`FdnN|zgzn>qt4t+-UgQjGJ=s^Yw3gr`&8c$5=Wy70s@Or; zsVW6?*4$3v=+`TfA(G$Oje~M?Y^yvO2iYK3o0Lv5Gg~Cap8==MZ2h1H3LH!@pHmi- z+;qDb{o8?*#j{`5OE@Ep&iLsz7oV9?=~88Z8LNqVmMBvE3C(=^Oy-%iYDa|Z-HDo$ zzIpB@qCvue-SL;4qN~C-e}zbkcc1oT7UEA?pX${s4Dj=6tZT%8pK|2E++Pr82oynC zr-Y_#C#}B8>fS{6K@wY5r`}i|xL98jSRd7MdotUKg#??_R9De?0`;+^JqgT~>__rg22uRg@&v63SOFGrt z^jR<%JYQp8mJZ3$(!jeVhdkUX^mqTdq5frL{n66)7zyl|=@oSTonF=VIBR}Jp;cz7 z+p8Qv*QQLkOLPiJ!+~BS@7T#_JE#U^kpV-+O+@5D4Wm20!=plhbbPJXjR#PJJO>iK z6X=_8W)!`5r_UfVUE3&W!H_PJ@pcky8irwJShh2*X@=t5Mt9mFvW%v<9H1XQSNkqV z6|c5JhoSE;Y9t@_voD1pKzK!5Nt#r8-Qpnd9 zCxiRb&$gBk9wm29B~YmZ{=&gcyMHN+L*1b4#Sqw%DmkV^^2{@I>5cbJ7zuOf)=pCi zsHFPZ4QMn9`dV*BWrOq(OLaWu3Qz}wshJO%h$D(?!uB!^mAGJNkkdqe8#K>J#UuvR zf;FO$YUVX?Yf z2lqjgt3}3$Gl6-7Q-IRfOj63 zcj>TX8St%biglbc2awmC5{LJA}-tv<^nwC_A`>^$?w#QiH3om5Mc zzMY$ie(kGi$nNu>b&k6VeAM;=`KNcSc*F*@QWf~94FQiN#7sF8|6W_V@Lh$m>hL3} zECZXE+mx$Snt;)RWukBVQ7jIAg@rhgS5L1qQ0KpjE(rEMX!BD44K9{IHE7GCWYIS% ztR{DV&$?c`JG**N5{`Ww2q5VJIuik=wZFLJ#}}l14oDvAq#K1MX#Jmio3?w4v{q7bhCgL*1O=zu4GVx~&X+21ElP3q39k zI?-d&i1i3>qBLhaz|_JMf&>tlf1ZLIgb0?C`VT21CTN6e&eq zHTMm7}44<@IX7OQ#qpIA`@%$pTfDt+?S!Y!AxZe6f^RT>Ob}T z+g)0;K#%E#GRbI;Al1?D!;j>?e%1nKs;6-c#cPOp$!yFbu2Vyx>2mktkS6-ap;ovw zbR5AZ@8{2>n=A|ZDlvokzfkw4@oXjj+yBgTRP9y!nrXFEEKy6Xm2W8q6}9gaweMRS zgtSFsH)CI8j7Az;>{OLXLRxF>rHVvRTP1Dj8N%G>_xk>~NB;-+v-?qAJV=~#68W6Z zbzSevCWJovVU!A>!3d!`5YnXbvGJ(Ej{)bciuUjsd58E3H=%oYS^3dDe;#bPlM!Ow z>u=_YOXeuN`>gZA?M(yAa{pLe1&MF;D9=Hg%6}q8wI!`|ELSqk4Y3>UZWU|a(1!s# zaSAqmD7gYZaa=+SVUJY`Z|pPCiNQ}^7^x3_2IJDz7Ckhi030X&V2Uw2emUbp8iBYA>ciT9r!RZA{AXiI8b=34eLq`8jtG=h$ zQ=Mdubfl8T*tcv(m!$oA@%-z#iMIDAzYor=U-xe5;Z-rW3yYq1M)B#*DQzbdZPn)& zl&nS$q`R2f{PDmUA}lmPh3%uRsg$RG0?s1Xvi@$5D2aaqEF~?F9R3a#v!jK7hSz1fbfu$tlw=gRrQwi zjPHEm9-!GC4}uQ*>*T&Q+isf10cN^5x5wD_T04jx2H25keATImOB{*lGa!weOfJ1#2lhWQd0KQk;eTo&*7`{0Shsm(j; zsmD^|t`GG3u$`UXhsmX_wI6wBY5>prj~p$Y0e7oFCrBKmEpxSxwKq$L4JC!jK)Z@@9y!`Y3eE+2Sx5OyLn7F_)0bs+YUpoHmPeLmDb3bCHP}4C#i< z8$bqKL%RF)!P}5`HBU*0?w*zzqZ*km=e7AP3fsG3-uaVu8+V8ga^me-GA1!`*HS!X~x@Lt- z$$by~py<*Gwa58Z`1Oy}68F_BLt7kzJq`Mb0>rIxOg`@avk}Om?^n%Ef}1wikz@N8?TK+OTIcqfzG#k4 zYGkxXG|MT}VBT)&m1c_f^~Y5<+#}?XQox!@YLcB)X02c7ba$l@LV)EBD51wTGt(Nqz$&X5i0|-0sq{LD30vngi`4&k!WOq zeQUMtTe&~hgofAEfci^=_lZL$_X<6JkC{cgHt5-sGE;et6(N8Q-p)*% zcB)vC`}t4vLk9u|Bs{A5K7?o|3(a?uIDl1hZ$Al-eB^K=`Omo~#_=8J>L17@s zF73_>=AnaR{)SEO;nx+Nw@hg>a(tSZV;9f4*FE8)W5G!_PPlVIPF%SZCz2Uo`UWA3 zfFWk2?%dYqHQ{n1@W)#gd-&1zZJ6JT7tVwMr#nD92MKGS6v3+7wP!g|(2Jmsm6|LO zbWETQ@NOr|wob=EQuXFj7X~i&DKVtNxJM=#uX4MJtAkpL-}b>GRBLLkeId~Jg~oR2 z-$Fg*6bo58#0RbT)G?q!ZP>p^aib@*bH@>1d5FvhN@O9 zxw~NkYo}-3j~E^TuO%0-wJppa>BH&D=YZaiD02ex5|5nvxU(mO(Wu$Bynj`katlOpR?xeZ$6AxVWwc+r{L-Tc=2HN4-d|@XyP%yA?b|9ym_9RZ`KRaj2Kn$yEcU^1a3x4gR_Psuq zY8jpH_mFZ@DqAz_)>%#MhwXBYxs?iG?GiQDATun0<;tW)Nk{K#g`#?@Z%(x8%1D!o z;J&G2U!5PkOEU=j-HgXc!t%ZCkdH?VqOX27JJ?gOu!S0B#^c-K+%Jp^$)s%jNte#L zOlHZT+Fp4@{`tW;qxn{>)XxOt^m=8?( z;h&x!R-w~fi`sl!h3%mY>SJm>!Kx(}S(vblG--P!nt-JN#SX)-xiyM#c!r;}h_+wb ztK7Jtcr|8=?Lg^lGuTobz45-%x{IF6@isC}>HZEKpV>g^8Tm%DXwsieyU>#eWoFk; zsJt~2fm-lY9^{>=pnhQyj>LwGSqD@rIPEy#bslDwr(n$=TQmM_dz5j2l@(+TJdrzl z$Es{wMJDgA^>_Qy7g+oa^sEpqmT0Zk_a&hZ+XI0G?%kikI_k@ViKx62xC*gkZn9l@ zYU^-!xYI0UEDBi}bA-HFlac$#2$_bh%__u6mZyd&+S}OUC(8oZuv}!goC_|*OtXd( z?}_LM;KAZ#^A@7VRKTFWD3^|v+yEkldp!RsjDjoZ{E88b17h1fi?^8yosY`Z^vYD_AWhOq(P<(JL zhF1?Kk5Le^)SFmVI0U>sgj@0lM;xFIITEu(E4vc-=l~Zxj9EclZKq`p1XO3N=*=Yy zjjc);=&~yQ!|EiZYQdxf%ctKX;jT=_cDhxB=@d-)F!7ef{0H0ac>_h_70>OqyT>bK zM8n+fmL07_mwrxdGD}u0{c9tK@<+4}L*3oVO3jhao$hbp5mF>l9KMJ4klj48nn`7t9gb%_V zgRoaaK`&$pRr}%eM;BLQirdS6=2812!ma(;%_JX|?dG2IxPJVy7Db}iI{QtqPqD1c z;3t&1v6S*H>yI|HfcT?x+JrO;*+Qd;TMct1JNUY(Xf5QS0n4muXxY0k;05}U4cSsi zvh<4_Jsa_hPPvsMspNsXZtmM)-y2$2wh$t_v&e*LJT#wpa#WB{kncgK8EOEEO=pwp z>?;6%y(*D@RzpYUfz`Vb%Hgq-=RJ|HP`-b8B2_2JOABe=3w)oyr#%DymWWNX1idf` zmMXt6^tZ(HnrhwDl9yM{;qEc6Rr=|0OXL`M35;H?4E7CLTj3Fu4rRqg#T8k^#I-az zf}-B1=tl(psMbAte*EN=D0ev^En>kO6iWiwEiSvtL9qL%7 zxBTO2W6b%a$Y4@{B9UyPOi`Vf_tFy|(~RPFMs4x9_(ZeU6;pSHo3x}=?i%&WXJ)1S zj)2Eo<^WDYl>x}?a6j%cgj`k(?~ZPG2xWR)abb{=-0(K*O;oI?n8urSA~^@VeD3yY z6Yql$ieq=|K$FgOefWBJR&CpGgISxVgE>tbNS^f#B+&!NrCz<9q|&iX{ZP zdM~1+>e-q=6@w>n6wVEl&3JWAu`OX4hNIs6O$19uqE4LCivnw0yDaZyy|2a_JuMBW zyNR^$u210B`^H+;TCh=3>gQ~H*+#51)Q9=@T~(-NT0^Mp_S{EQEazxo+v zoln7Lwox-f_m($J_QdkP8x>U$ zu0JC}*m#z}|f1mm&L$XTC>TVu6FJ6G~HL1nKAjKoBdN z9V>b3R&^t3S5YOU#dvU`)uJLTjHdx=GArEyv}+CV>{8J^g%m9}U5|zKtKLZCGE&b^^>Y(UZ89x%#|IASPAIxfIiHxRbLZ*NX^_VXsspZx^5 zFktD1YIC*o2G+O!{b`@X%vxW``Ws*Q_m({~B5jf;j&dS?@bDCFpXs|>yrTc^+Kf+s z`HEWw1NY#qNaa@(=06J;{B@h9R0gMGBkQYw-F(53@Fi*kpF>4^k8)W=rENL!Zat<# z^9d5e7hl?hM_GSIVRPFmE5s^&cN0;*O$>eqDl$}^pryB%1lb3CmHvktJUujw^Tt+P zcPP?D5TMaEsd(WjLpb}|X?dT1KpjdF_>)nc<2uoPVhI}5wur%!2PqM3IRbzt5Ac9# z?F-EPkNq#7dyLluGqgW|`CThk+)=gEXY~8y*y3|Gv-xaI=zu_gv{ibQ`>rziL2O{; zM8Kam1Y;>{2|K~8v5nLaAqns8LEG1B*HUuauj%D|sGk!)t(2Aw#tMIOmrF~NPSF`= ziG(_d`MH~8j5-uF&@y%8dePt6~)5AXLaGnUX3ADR7|`K^Y_E)HT~?Z7(NFJOwU zzOI%uILF+%mEb0T#feR`xlW{3Rsw%GJ`zoUQL8aW13d6R6({HXd;ZMRBVrvo7>Tv| zwQ(T<^LIWd|U%h_k7?8!sx`Jt25g#jgxSGNFw! z*Ey>=v$^C>=q^X5P;QLsV3kK|U1mm@_UbF=>Y0Z@_G!EeiWqBZT)l;jEqU%Jc~!{# zE!iQ!#w2kH{NRB5&6`X}+F!s4os=$n`6aWin&rF3|B|_7!s6&pOJZDCHUJR{JUnzl zp62Xq?7r4K;Jl*-h<>xsez>i@s7h)Iz`@&d_e*XZMZB*L1J!Zu z>6spyyfM=Hy~sin9{<)>hr93vqdaws^V;ac{uU6CEWwln$E<28bYPC$FiyD-c*3F_ z#l8YG4bNMxeRvs&y3DW!(^|PhZUVFm7E;xojz^p!GWP zNvuRl*k9wIt$=JUHhcghNi8`$hHjvoRbL2w0oUS~7ge3g#iAtgpK`N&RHEhrm^~9vwWZjupv9W{V)4pu#(| zl&Rr+4Vi>AQU=}=BPIpCNIbmjV4)?#y(4ldbvD?T-lHK?=(l*v>-cD*#gZ@Y89|%@ zox*1}JtbLk*-2r@jub{z&jp5pK=b`=r)Ml->Fu`@{Py)pAV%YC9{p=al>j}wtOi7< zC56zpDCiG)nu(VXql714z}OL&=>!OBP0==`ac;%}{v`b-T_4%_JQ)17_<3 zfUI z%2mNi{})}Ca=4puVPqGuiKHPt=lZ7lo6o+1>uR0Q=*gW<=_p0|t^?sZbavak*|{5X z?h0c$kLS+^FXZ)wGXAdrgo^lM)45*9wP>qI^)hwshPdAWTK<4T*mzmffCZ#a*< zhXUe=I(_wGJstteiyy7MMQra8#%BMykJqt_{**^MJTiNo_Ww9`K$`C1H4x3n`|nTr zimcVMk^j*WpI0@ZRe%$)%%Tx{HU!eO4^_>MIH$VL?ns+~B$Z6aaoV{by#wdq&n~E< z*H_TTpTO!8uD|$Q|4UNg&!?Q-x&n@*)yG<&f7$r&Ye^^l_fe|X>o^0xOZ@kzcb6V( zem=Jj0j}q<%LMjsfZl*^H}Kc{4f_TldnJDzgWd}=`&!0KRsioR`x%obLJYVLgdB!` z2-$M}|K%l}@2_C+C7PtzbWI(;@-pw5+wZ3}xNY|qZDdR0OT)-BHktE*wXeE(E#t+M zl-+V4ZnidHC<{fp3zVrQsQOkdw1YTXr14<2wCy; zL_KDWXOs8>fn8LKuyMFdqG(KmB}ajvhP*|CEUWq1kPCu+3yg zA;fDm8FYC6w>H}YeQNpV>67naAPp;j<|foSu3cw^ew8k+7*i_^Rxg?J zcD0YvsqeUMN2W&>291i?$+&$$JZt68BqYSng5g>ceZ`}Efj%N3sv(FFS}S)qt9Eel z)E4tFVQd-U6u44q)2R-_zBdkc8dapbuygCC;wCP$$@8d61rQo_|6>GMl6{<)*%uE_ zOXgW*%b~NEuvC%=xQ%qeu$MR+ zxHQddX{G^z45AmA#EcCAzUi-h@NQD&mK>ChuTD6JiKrI{ZLTc*ZQskqrxtZ)p7(}~ zHE`axRg%bfNBiI@BCnOf-I{Ac0fPhW|Niv)CZKp?90CqH!(O~ANHoPz?X=`jfSY}P zs!yyrr2ks$)Y)%=Xvt3teL`Z73v62}tXQGFb$PXfOwBNBFU;`BDn%psX2Qqs=tWjA z(ie$Mhj#(d#gJ=5#zGn7C=+E*OE(!~0SwU%)|7w38$#=~OLM;(MR)o zOTKozF0zFhkRgT;oj``B-7(LWfh2hnU>oN%^sCQ!%Tyy44MHh*NJk- zDqa5YbJ@DAY_lQe5{^6G)KKE#&0>X%+m3lxqf}$J9aFFFSTCAPVLJ}~@x^s|<;L_FQ>3LQaG^%a);RzX*Yd53X#8Q^sk$|@VQTV3 z5O|LcVatMRcuem=I=H%DJ4h>klnb$1Xw;I3&AW(FV2M$syadfj?!i6_7EIw}p>FF- zAxpomi1aPg%!V;S!o1hp5~aQbMon<^>W;g{S4nFh6SKyH?h@J~wIDzsyLvqt2!abBLEFVXEjvuB$@Bm; z?`C$OB|a~B3V_&`^uMPKC5H@2%|HioBYdE}Ultr@JeI~AgPHE{Lt2oYZt>a4vq0WW zGW|wT6dUAI`vjVC=n2zH=}Pw-j3r!S-AH9UQFY3y=Fg8@kbI~Muv^}RGCjjsS&)Eb|6lp3)2b=CWN?_rIeL$PFJ zzL&}E6RB-9H#R%YOPJ4Y=uDc0-b-RlGO&-GXkca$Wz1|J?w4R$KZ(=l6H$%JJGWcX z{X;TtKl`iM^T6_={wCsfZ*vvVH6`SG^7vJLUZ z3bjGswvnC$>BFyk4i@dTwgp7V(%`8ETM^=%!{skuN4y{?2|y9gHUn2+R5S!RLz`da zGn7Cnr;w+BYH)YN%w0teIK5avMG-x>SA>{bST@W%5#LWB23IfYZLp`8cY4E$FlB$Q zx=%*C8}kkXRBaWtjhVWYtVRFhUse~U>_(<1w_9_XYN~10IEiIYed>+s@raVn8U$1m z?6bFcm+kw~>l|fS-&mWx`47&w+*sl5SLgf18WM*VFVf&6yP!WDSJjlWCsHFQ*Nhz!Oe+WC&{1nQ;fg zXO!Xu(FWpYy;rzb-bp9cC_`36PRA?l-{%<%&t^KT&RMvn@3G?yYidI5LX>K^^>AhK zPeju8n` zRNY4$)ZUl*cpK#edpRE2rdcIDI*I~R0#5W+KLTRwoGAv6NULWHt6a$!SJ?jpX(0i! zA71w+*RH{{HGquf{yD==74UFB+WxS9hcfmfIa7~ucmeDehYlX8m(ESF8x)r6BSX2= zsDEy1|BNLJE_Ov(E7fGyq47C7_9P5W7GGn&kaw`f^}-khZdOhW z#X^)PquG-}Zh7jJxy>=@gHEHqC3ZNs%0BymeTDQQ_b$8z66IiEBERMJUh}yrUT4^D zfGtF`nf=nwZ%Ow`_mqneV7mg7AxzU-VDe?qS{$tFZCyB&k^SaA%{KdMJNdWS<^j4I zGw!gs;`x($H?N>a^CcIDA`#U{AYK{V za@R_DpI~#0Q?J~aIh`fWrPeB3w+~WKfN>LS>r4*su8J}jCr~{}^W!>?AO#Nibg=Y9 zwOEM{JG2lX^P~Zh=CEI5n_Z(NK2lzgkLB?_5p_d;Jd-hJhOEOeXIHjyFaS?tUuLOx zKSu_*F+I!HRt1s1xgwlxbtDO=*Mnk@Spoi} z`_|`@-xx{*1M4#SCIE~zU=5_vU!wVtKZg2sXBogFMuUJfQrj3nmMaeQWzoa%!<`I> zuz<)UgHOpCNRrKZ7{EGD(43cSG?c;(18$!B*-!@Dr_n5MQc04M;m~$7gN>`gl#Y}OoEnhdOb1`^ZorJ~*H<0LX>>!|JbK(%%5qm}T~ueRn3#4bTU0Z@Okl+dV`=MJlKg0 zy6GLB&*2@5Ty3Hdo@Syq%e!7%2FAV(L`8fWRxXjJFrwmjZ%H^(H`U{IoE%=rVG(?z z-+9+l+w}f1y^R5%BiW$ko0Zb!rKNAO*V_s7gCm&^qkgNn!6E0V>Bf4%G-&* z!${DJ%zY{Y#EsvC!hJk``LuJU`Vu&-aX|@m14@3Z86%*%|NH_;Rg1){O+D47t9H^) zs(&?p-i&_+tlnY8&23i5XKJY!kvG5cTv%|yOxh+H(Uz*E8FG7(k#zQ*Z;JsA>dL0~ zSOC&A_nKdkhO2nGZ{3?Ip{jD`zcF%oyxB zLVBHvn3lxU?><^F>}I7M6%d?1>pg6btJ~2_ZU|`}B&n9jEYF{b!t#RrzTePn=k4^? zXuKJcIwI@lbc15d1%1DF70jx+jqi|)xRG4<>5h1d!|TI%Xd&Ln{#I?C_VoQejfQfc z$fCBs#q~B`PpjOC;xIGCVQVQ#-G}PB4`CeA`PsWZ!J9V2v$Yn*vQ_bRO%{KXxW5SI zTeIMMA|#}~Oa)VbEn6tWM;KBR>QvX?2xfyZm>B*ADbhpXWCEVo2 z4=CdvR>xa{bD(W-ic$Z}wax_w%X#`sZE>+!9upW*t4SL@>%=*X2Nc?kFynKDMAC?^ z;)?#(V!SIw%<0kfr&&bXUi|*{oE>G9Xa6@^Hj^gwm}DoIGj52dbbv-8hnVb#4mpGC ziqphgmj{tr>UtA8J^nE?b2|by&VjqokDE30b^K1I!26OrU;E6~r4DkBIS7Lu8f#q{ ztPkKd5n?bsyW^r55!}IO!8O1o{x39H=CqdMOTqdpjbV8BloaLLPWMfXoyhmp7S$J<^{((S+O@jD8n>UFxZb+$au;5cL_8~! zm?$TJc^9?io<1^3h)!f4N@Mw`&hDF_BR_g*ZFf^iiHJdRdWu~4*SwJ#YuLE!kiBzq zU2k^I98qoVccSqA^D2M;P1kMp&#S@*Z0|MLV(l=xeKl8QPc>Hm<-R^+VE85a=K;1w zr&KYTf7dSfq3deO;lAG2ov%uk4LsG*qY(ehjTgaDaTbfkW_lz2cGetujBJSD{cE;b zbnY@!b7eFu$VA!d!gQ6i2M9KiUe{USHm_|fIX6w&kT$avP`(-Gq&5m@$dDKFYn8Rk zrzdq%PV@mSyyE@ci6*`G23Cr*&uiYC{t%0)1h!8&fQGdN@Z`z>j8*E=R{A8_`r>Dt z6i{})m03YU3!vcA$D7Yl`VmcRO%^uuH!BTBMA~00oh*}T`_7cx{c-&>T3NTQ?3xT% ze&2b61jUIee;wXmTME@ymw*JIvdumQb>25UiZXpX_Iwj*pj_on5>Zy!9WLDPpkwVizO6a~dv_61JQc=*fBL&Pf=J4UdWvA-IxFk_mbmk}bf87k z^>-E7;IyiEk0{X}v4-B;eZ=afqo3}pz`#1&ZIsK&e~=Y}fp*(>Pq?D>;5AMBeFQ9i*1o%<+UiHt^biOq2yWI$2Mm<3`K_dA~q%(8=z=0+G@Fv%D zg`>Z{oHy+C01y^p$#A_K`E0*Ik)u}Y$jSW_skR2cP(nuah zx6f_u3osxOL8415M7$dy_4-G$?rdnE%G$m$1D+SRtK<=K=Ur~aS~d0?Dx#zM#z4A!)7)gGun$2^#|` zC~G=!Igb_aeDWqL*~)FR~-@DNZgFu^r0}*VH2D5i10Dw;R4Hj;VDp} zM-7mcL*#l%-{iSjTV+q9uW0k6#~?W^syir*>oz3G@7HJYhrI)gn&2dI-(_3PYgV<} zB^Mru-_6Snb{fByHKy*m47XMpN-~y6wJ&~9?_kf;3AIYNMDe+y<--&oL6$q9+x@Ua z$4ew`VzGhQ$ptH4=B^WvLXXIB1$Scy+(0{hE3MDGVTBE04WuSRc1Bs8)SJn|UGx1S z?EfstyFoG}JgEow_z-GFRM>T<;~q4F80bCRrC(_X^Ag}@mb(v zo(%g7<2*1pb$gA_{?w#87sn>eTHKRrkiB2sgM;JxSQn{&g?OXZ#UZlZ8o2Ntb z#6SFXq`TV2TVq>pP#-MfEDhm~-oSN$~vBy95YMGq$)u-stByC4v z98QH~Kz`QD6WG475?C!@VD{{DzZh!=<%A_m=H~sn(688zrOG*$&%<~;cG})A2lZZ@ zJ5+HUS#=1LpLSabg^RNIee>2v3fq3)SPVzI3AvE_eKAdLVvo;8kiBuwYElbZR)#f- zRfP-J?F9FNY$}P+nR~lbrWuc4yqD}u6BVX4-V>h7|Fpqaarj>CE!VVEWLkw(x#z^1E=#jZo^^dBQgnv9!3 z(f#PY3YjV&mafd*?OEF9dsi(-S)6aiAOa^R+;WfLbaBUyASsB)WInIIriIWXIFzma zywMRAKjB*$@XsTGwU#~;v)^)*yRQyA{>5@oZi%{f}>!T-@(3h0D>Fkl8Pu%h0R+BaF~%h9b2? z$a<|ndhmvh`@D1TLy{-lwbr6ZSw%ZIisre{(2;s^N|5u0&?nj~l6~9Tl`CkJGK+lWqeQF>6u- zsc4y4v<%Xcx+=U5=rTwbt=6p26zwx^R?b1%;eqI9ZC}b#-QPbXf26Xlo&mldVPfuX zALS1wXFhe#X@;q9=bvNv0IPyU6g5oLAC9km)m}Iq4GZzNgGpGNHm9^Fgwqq^f;Tr4 z$f7t5f%J}BRe@h8%d3L_aHmb(@6#s-2#rD?xLcWNy!O?|c;LKeH`3~C@giAwElP)N zFfZB}9*W=*G2`;Ep`N&2vdc`fP^;KLoaUnatvOH*EXZJRQR9eMVHZuy0$XVNA-% z=WBU`pENZxk&APLw-zGbBulxj8R5C7h_)r|aaRb)$ug6n=#L9nwp0mda?4YjxS{Iu zP&?y>uE^b9;oxshM9heH*|05jiaJ#VjY}f5mt3*UYmX@Vwggu}YP>dtfZwHw0zU;k<4Y)cGyYJy4ikjPV_*~12WebDt)4Yf_#aG&?K9{YG1)iqvAnN3s zl=X=5F{HLH=rvrz@`@6mfDb&=W?l7!0CROHw}ELt7Hx1q1mI+7ib2kIsKBY7m#1UB z(w2&eN$7PMOX@?({xX5bSKf7Q=24Fe7eoc*OOLcwtHmIKfi%vl`KHGdOTqlP5yd%Y z>0Pc;zxLc1&pL>JV^@epq2k)McfHMX)>o48X*sus#ov|I1J!8`I5?L1UE{7Td22SN zw_~gHf%tN}CP6tfP1#f)e3TK}2F3GxXyvKIQ zaoERZ;?)9o*QL|s+ZD4DEp|f=pv9w9(rK+1kSgwL-^T-?~*m#LRK^*QjcLYczUmB4s&v7scG`Dp~SA2 z09$uG(WS|I`U{MNidxryNfO$Ym7VUBqVK}A@4cAo2wCj3yb#`bAvQ0+I$fwXh3c>M z)%@KcI(Yug*FBTa8BPlcOpqBQeQ-o5&Kn^vEqxi&l-`g-wJxpEu zLX)MGC{e;u64)ax{>$TP9qR6J!DZn#ZZOKauWezVeS-l_2HI0E4mv6&x$yy>IbJ~= zisXU=_*!*2rh;+(g9lInPdStPh!SGahEKdCfp7GPEcRtaq6dUd$k2@72R=|ht(+ob z5kuNezTO(<$@5WCN@_pEoFy$*u5jdEzgs`5T4_wxaiC}!E9GivV&b2?*?98W|Gj~~ zXk5F277D>Bf*n^h-Z_k%yOmnwGEpVj6J*-m`RrA`1DKrA)9GO8jxlxb^dzb?#5W~! z>Nb2fcgCLb|K^rcyu6ZMMcn+4r||cL+nB@L8$P6D4yTqX}DoCckx6S;#=~s8+L* z`K;+)R1($|6cym-fEgg(K0^7@>6xqW+R`why*`#nB)8lUAk@McIesuV@;im<&{%iCKg zYgyb*IYBpSVUF7>UThjaW*$bB#ne_0cbQlC=`=3D#sW8-dtYEw)>^I4WsU|uh^?O# zbke|QT9;=>8B%tpa0>|4I&dOxWWvxqH%)Z1fJjO+?>xa=CX zeS7$uO?c0;L3nrUD%VE*kz`jufp4S>h)K{-k1X@aF^~!M(A|j7(E|%oo7;wGaDo$+ z-V#m@im_s#USn{OTDVqh=Fy$~B!7FpPp#- zvsIiIWf21tNh3K4a!Vu&oqJsC8W&?=s$zk+_)__q&b&eKkqQ2qDyLWK+PxN3RY~kF>_daGKC~o=n!-cJT<7(zh3~ zTXoEhGP4Mt!n^iGu*A``pV)lU{Tfz`+x5s%*LU!iiaSq7DJvI%5QcTufS`d@T+?Kt zM71%~8mk&RuP2KY$+Bd~MA*!S%C#5&`;%E)Yu6ksPLS7-ba87g+9d7B8LE@lm>6#@ zm^;Q?H1xpaTp0YiK=bjng*!LzxbYcPDUJkJ1x?u3SeJWh^F)rzUOC=vDrKl;aUBLy z_)0d!$4)edCIz8cIE+V1m7?-Z8M}T3A=?f)E(frLHh2PG`+W?;MC=DshN>lF1w`1l z=hj-m`E2zZ;C8Q*J)A0umrLSe}ekY4p4@7qMUq z8nzb$rc}P~n=NpZ%m?HEAXxQZ`>Tc4cqUDIN-Qor{S_M_3t55qDGV+@32xOMjY zJxrUVO+B9AF+?jLCHtcZ5QlZ|UIk$sR*)=#5{t+fkVMlhgFu>(nC(Cxt2u{WeaU5U z)$?;Q=(@vdh9#U(9!jDf`Tjmz)5%(Cc;*sVe(U4MN~hw2kcS!{w@s!)Yz`Oe9-Wr` z`R`BR4ukWtbnA0oLTQzBZou78zDpJ-50*G|>RSJ7(Xs28>QC1)ic0ga&%?e29-a86 zukzc{rgB{7###UaKRvq!%&$J}_yuJ}qN!DPwCb3N$f zB2d#O$F!qK60*O)(x$8mgCGSjpoEdwF|8VrN8T5so29G+DKcIC8A$>kNZ=jGD<^V! zH}<#e_gd65#g>+ga8Kzn-|XM-Iqe^Tu>L~=8y57LZWr+A9J%ClS06j%9e#&KuHajJuKai_PgLhEIe zH_Gg_PrJ0Ltat)s5!hS&^!~1UOepU+E=E;6J#eAv&$`wQHJwU(89l8HUHeZ(&_lKF z+jCj^ES#{vvjIUO69*GIC6s(>xHY`y_vfbO*EimBSd4}sriN-|a9%-;OqZ{Bq!@8m zfQB(eA23m+A6wl?BMV@XIe|y42zzEpN^BC(y?3CJ0$bdrNLqc&j&AIdg|N)_TAw2) zsgm{_n~^G@Ux6mu9s5i}Yv;V9y_8a3N=)_)r1aDG*3u;)6QqBq-*Bk0HLowt))t|0 zV4GA#wk&y0(hUp0f73_)xH6)?*I>}}WR&^dwI^Ab-Y6q6g;gecN4X2LfXs`JrmI2& zPOMCh>Q88!x036UHUB>*uK&{wh>&Qc_0il5=1TRNis3Fj`Ok)-zfl5n=zxgy{~%vd zdyP=0z=N~vS;Mj-qFZ+ZoBISAU_d!!O69DYQ6>6inYC>ZKK(J=vQnM{#OJH5?p`!McgGZD)v}UkagU24`u} zJ%@Zq;@-^F#lQqk8w!*x3 zF53z0-)h{kFN$aQ-SqD{gSe6q@%*wR0mfJKp1Z%L8zig2OT<*Cv(#>QenJ7|-md5T z#+GP#X}i~c+cxKdcP*cj&^l~MeTHiIGmyfZp?Gn#Wtb;qPxU!No|T|3L&+@T*P>kft;3b z->gBqiCV`xMbo*hDu>Z}D;t7DqJgLsmvnEH!Ocsl9$FG3wgu0(^l<*(LmjR0{vn0; zzZ#r(crpfkz@K9vjUUGn{;(UPbEY?3PrOT$$SL--ty7XouMF-+T+B`?PgPt2UY^+Q z{QHwATVWl}y#kmarfR?vy#8MSa^k25V)Kio#Myba;CwQ-vx|vvSF7?A@+r+ZDd9^% zY@$?;=!h^*Ortqoo7)B)zLo876e;z|a^4y=6~c={|D4nqaarEES-0#di-$Fk6}4<~xy6=DB{^|0QTq`Trd7jsC zypPxGUdvfowitUDR1$uKRQrppmR;T~FHii-EH?u$uEO$m-n^Ci-1?ehRkjK zT>giL0K683PnH&i*1_}WU~VF(RI$73^=#BzKej2wJtx_~w(K)v2cXB;hg;}4e;j|8*>H7RG?M69{7!E{ha-`?8<(ZNY)O6*JYST$yA|w_z53IQa|1*2PJFCC zwy9}sdo=AHY-3>2GQG7mf0ZZrm7`0a8{J^3JB~fnSbd(&Cy1$$ekG>{KsaC8R;x@` z12F)cp~`%;>VZ}ugAC4nR;x`*3`@rF2|k;qOyHhH$eY`YU!(h~4;7u8rLcln9K*~z z%FZGgIL{Qf+`N3%**#t(MqaE&V(jQ`r5Za0hox_0`_AcyVFoE)=c2R)-bO5KrqI%TIw*LGw1>o|4y{=l8IW^+_``>7SxF z38FG;B__T_b|by7ik#^$mmk)-$oeVsTS;IY>L|6YIZ^A&jh%Rb@H&DM-b>J_LV%6P z^dBC4Q#{hE*YcI9PeX$2M#H&$8hv1L@e21&$O9oY$CnIzIkFDt@ml=p8UdUzC+vjL zDu8lhhRVxhdODULZ#`zuudyU(rhM;s5Ox(El$3CpYj<#icm4GgPq&^s_a^p^$z`qx zGeaic*o7Nkzi~T`m5Nra-R!7Tn$&xTw)T!71RqJp84tgG(8edBK>dens+)bc$k)FF zn26gEE{hQI7XaSzWhpJxwRdS<`7Hu^AFnpkXR6_Xo-Z0_6yU;X(U&C0&J@IhL?TvU zJ05e|7(~(-_px{`d(6%rBP^OT^hE~{Upbwt35^)#D;$&@99cat~qgV9a zn3#6*0SYzmb)K6+KN4rdG2P+~8@(!r`Dpj&S_LtLg)c`J7^X)b$~833ocxF*>EOp3{j|iiN@Z?KOMRX90vq38$n6gj19 ztPRg#o5*PYdO891+a`11)l!eUb@GRzN&Ru54e2b>)=b-B&%RZh+WgzFYZl>^-=Zm~ zJ3Hc;G@mB@^+BmzbLH^AYosQlS|nGabXx0r!xn96(|8p#hZUPntpotJJ{JD(F_~pl z(&N5^7TPh72mH+$2ZxNNq;!8n4X1ek$Sen7~${Q0VSNi{^)~}Zq(H}-_O9eXh%H~nQ zTGi}5L1}B3Zgt}PDDk6G$IBo$68)!;`qL((Lixn`Zu6{x)pIl?xBirt;RF4%@+U+J zyUlCtEA0+O!~=bt)LM1o9%X8mP0kvkb`!5Xcx}KICc3I-~(f$Qwqy) zZpoF_IghWr-9Q3)%wDhy4|cs(ZRTYoBitp(4iD8MOj7PO{(G#8I+dP@S6ZS z+x$K{Bs@;#CRN5j#IF8AKm021WrmX$!)Ma`47-|1ZjMCffmKPO6Ky6h9DnjHv;ZJi zPvfBc#`}9|2c8S>-{QU;DR3jIQ60>$i!I~8WHVfrEC17dCTf@S7zuQttoK6u;lUY(gh?!b0I$|l-d0ZF+lEbEG4-Mmdy39s;4%gt^ORGu7=k1 zvvi7)$>bCQ_T@(%7iecTJ-WQX+z?6E%ox| zu@COowCAPtb6qLz6ym67=_O{55*^TZ2+G(GoGh z;sDLe8$Gw{`0JjvIyXb@5(d4_ck{FRXp2(2IjK&i*U8T}t6FmC@Y5eqz8+mO8X7#` zI#kk)3#TFK7iwzsVhc+Wi61Obh0+x-CTwayS;_sdPrGN~n{{m@Au#2w%E}Z8+9RYi z6p>4}O;Ky~s8>m;C`Z}fgY6Et)H;hTUj)w70z-6a&(M=r?lngrih8AIqDaEj#4}Mg+DoBD zY%;Bn@84rgc#b%?)S5Uhh@#Tj=$jm&o(PV#R0zZhloN^$L)HejdtPa2Z*Q4eo~qZ& zkQ35WRcf!w?KojBZrO%*3ifP|bJwS=fj*cbC@;-LlPHirL9A=AJ=OZStk}jxrS!x6 zjjk4={p*+0ISC+I%+e;4{SH!y0b#z}=Z-wPuMWzLR>TZ0E0p*&!3}bhw2bmOKh~Y` z>B$NLA~;w}5Q(myGLC zR$JM{0YEx~kb;u#gvNM;V6wfO`Bf=6p~MhyOF@i}$A?}o&bf<#GerN|S^ZG?0pz*2 zoD$6k30fqy4cKLTOTcjB)yS`=+>tNK3jEVFaA>BgnVteB)4?M?u^-gdK?MpYrt%t) zK=v}F5NO%~&*w2<5dAh=6Jo(a`7m1JymF32Iknx5sJD0ayN?Vocb$Q`L?q`1L+8zW zTS{ZR(y~oU&aI-s!Eg-HO6o88$r9FvpExQ8uV-H8&09Ol z$|PmLKB(ZfTYV6GUi-23a(!*D7mdOBWhqeTY>v5Bo}s`j$fDDosMOTPciqlfCR1d{ zfXSkG$+#p_hEZcPl+T3cdfu#0n6FeTUHorQ8(Qu;O8r(MKMy#+P;VGpGs1R{vj=Z- zSUTaP6y?o98V<+XUUdvkWh{f7kHYQ(>EkSf4>iWRbJ$ znqpQB^axHB;Kcdj%mb~X5xS?Ihe9&WT7Up7Iq5-q>t>LTb7kycZboMKfc=}5cj&IC z{p^Jk$~b5bbnzWGRBF_;tuf&c1w-x6G(9BR_qcr%LJ(CSe#f2AUJl!G#Pd8SAzmTA z?3_Q?{;5Zbs605wD~D&+tHVjm(EQ-o_PS>#>}#()H<9)@?;YSz*z0Im0E$){;Jf8r zJyU0l<cds>P!G|N;5N}dy$I~o?! z=k^>n#`Jt+7)0U<5;3CtQ68M4kz05|w2bv~S@#ZNq>0M~x7NYBnFY*#{tZviELve%IPHRIYff5%&Rx`*k(qA* zW>&0Em}DX|`T{k(x-dH+2$a9*F|)H{!`3sQZ8A3$No|3>BR?;2K&E>C1aagOEA45v z1NWNWvu9(0bWeeFeL(pv6dFtzrV412j zsHbLkl{WwD)pV3~vE~XxZ!^o>eiO^@yOKJh!|hcZbQnFpH>DSPB$U}M{ zLB7~p0Ink4LNxSg-2LR@bIGY2sR(-!IL)e(UHOZ$QWAP5`P#k|>~6`bR6bj>{*n4s z)Z0}T0hGYP2T`YUB)EvB-a4b7#r{@sNAC->{PG&qQEj)Qs>9>w{C3LLb^_3#dBD?S zFH(flKqo)5v1!1ssDoB{b%v+TF9m`b}?NZUpK;ZIi62DC0A(4@j+h zx%;bIoy<1?76OP^_73XN{H6S&nu~ z*v7X(?nFlz-eSBpY06_ZYb;)@JRw!S%qiwsih|44d_LXTX!X3TRSvk3T`aN9RQt^J z>8y>&!IkZ&i|2osVoJY}5?R8>))#I}wPh*lZ7c3pSW|#k!A~pgq}t63@``NjY`s51 z+$oictwlE1HDk_76dKIKstN1=eH=JB^vl$-0vWw?=Y}*2O{w*A%JO$Qq7>@#rzH~{ zY7l2~-Z%$kYYXZlD$MMY*JtrilG4 zteA98TJ)B)BYOM8FV-`Zd|Yt>J8B|*3|#iXadrZZEoGcf~8DApyYn$7o>}v`#yqXfl zexC&u=i2M3OxCj*8-p?!jA!#lM`;F9|0^zyiXV2Wu+o5(+8SP55(nf3G9z@-?W5+dMe-sK>!NeArIj=F zfXVaIfnC2RXmJ?{x}!HL3DL28&V$UO0${95B{$f`$sOJj82IwA>Alj}CY3v0ZO(qJP7;MVxaEb;3 zdrt-?t?d=gnHYaLI>W^i(RZgoOj@sUGn=wG59D3ja*n%w?C0p-VgN$Et+pJDbV_9w z;o~CL--;2Ut=v4T@6f{iIE>lR$j%l%nOna{>huF{U9P}(NUeUYXC7mG+yH{R6$~ zC(?%3VN!JIW(q~WIVitzy5fO8xOd8y27k{(vcl$d9i|c=z-1B`Ai)ctLPLAOs5KTg zg`|HV3?AFQ#SzZXudo+X@S6T(W81$jz%6gxZM5DX0=^eVe9`_oDN&1QvM5N6B8G?Z zrL>rYx_ow#B}+hVSi{5{xlp|ocVR?9L##_Wlq6-?xnrhfn;$0eYgRjb)4Ox$>hjsD zyiyN~;?;L5tUv=;EeLp7b;y#nQC8G~a^1!XP=tX%SdeIPZtf2`?Y;3fZhRd3$n?qL z$!<+Hm2xD+?Z@*%X1fhySUIBHmF_^+C*Vs)8{yYWD_iPq{NwRlxHWtAHR}fG_LSbP z^@sa&VPRzbcq==X(CJZPzwU^4G2{S3_v@_pgF|vLN|JZ9j^Ar6P`9T$5Mf#3h7NQF zZG!4VbgKDW)R<*Bm2#aG`=i?oU+6HjOhp?%eH)HC`(5^C8U-$wIpXP^g^_L$(!+c9 zwN#vygD3%(_X2^4hfnK)1294C6W~Xloa{ce$p6(u3@yOke$uVW#xEn+28KhVcLpj| zILNg${SYted?H4_LfL&zU$3Lf+O-u>c~Nbu;7JpK?QHk%!jAnXeGL86+JhGYy;*Xmo|COv5B(>) zz3yp72W#5TPTQ(0DRq=BjDA=3kCE6jF_u$xDq_?*44MmCn6)dPOs!7Of_CzE6$j<3 zJN{jOmV?FW;#JMzkL-Tc=cQeu@@^l#E?k+!W8olJ;a!A;8=^XSkV#}JLbH*Q(|{3V zqULV53Ai)`<&f!L_b{_3!|SlIRWK694Pg?Fen*8N*ooAvL{@KoDUi?!WRWFMSh^0N zy4gr=D8_MUy_= zHz};Z6&Kg=G3ozi(ys0nXe9V&4YD}4W8s}{hUo=6(v#V0mHt?A3P$;4iMPD8ODI&V z8r!A{Bj+bf^tCG0a8?1-{P}>#ZW7odNv?_4Nv@k<7`FHOsjW02i# z)!{g&WPRwz`e5B=9b$ZYQZFO!hOYH=$a1w_;8_A0OquqILf3za_pzT4_WZ$$$)&b>SF#Jartw0?+|W9LL0S2NRR ze`?`YXs3F3sC@fvYnA=207r_yOZUNvYzLJw7xW{AYXhrS*Qic_=~3@u(@bMqz>G&{ z`uT#x@)zatYO?WZH8jVT@vr;3HCg|Jqm7DJ#zj3#X)D|ZvSuIF2i#h!SdlRwBoGp*cz&v|y$J5?6&1vu zSj|5SZkF)gQYU+5Cjcx=l>s=37u&fv6WP9IY-J22hIN;Z4%8T<6G88J@Hw<_vcG>Hk_;+=ya47osoqx#rA;PTDswrr3aM*(kP(BlYZQn51{uX{(Tn(8hkqJh zc?#>%nGx^Y#CKHu-jzFQ?43i6lUSU_FtNi@>Rh!Vwi1-9GRRrnDgk^-d@k(W9LnJt z%6vl2fhj6-FQy$srIqg0YVeGJGR8S{_!Q(OWPkC)t|pw;;e77jV?L;)jUBtI8*>H{ z;2-DKYyX(?`Eb17u79p3wKCXC+`j0X4+;ZAdEC%K!?Z8QC_aGr-lSA$=ppvFD6@($ z6dh`Z{a6cCha=WsCFTonidcbGCy%!3Pi}zSP8yaBdoaB4lmL(CppW~qdLC1q=aD}=RT3pok#_8= z>>u~BE>qDtf*ZN;-whA|L~OpcAQ3p1H{?VLvdSJKk_d^&@KrwHVpz5@Mpe!5ETvXh zI34d)&K~AZ2mHp)4{MwXm2xv8952}y0L;WGk_6wV7}~79rB@YD-~jzHp1b=8KO>|@ zg7QhXET~IS2F0;|wK!l<#H?MKSRPZMYEQBRYKX&AcV~tc+MpJ#H1kcLXk0dmaE=>=(@Xz7mKN6V?HkXWv@vHptiQr& zcIyubC~Uv*38f{LEh?I~tOj_7T{2rl%2)tQKw6KPPAZ#7;UB0_gXA}&(0Z3nGr!m+ zKd%+XHIk18!LhLK`7qFc_wv~X^@ zG*9c~~qEM*>^vI_^aWl5JBSlzBxC( zmJ{6pq-gaaGPOMDY$8*(H6B6dNcp-CkGdnK_2P{k7!BIOdYwkIW8pEC+Sf@LHAQ~< zEgFK-?;z@flLY5Y*-j(>>!|rxArfh&xTghuj|Bj^5&@Qfxodf_F55gC=n^Q(ilfKX zYVudbzpP5q3!QQBjg4BctjVi~8&d6;y#L-O_28CqsPYln9zNs*@1E~@LOv?9KG@L|bOzT#QN6O9<@2&d;3=}+YItebW z7j*GKZiNHWRDqICIIyF$(WY*~hth;5jx#`_5a*e*tu3*4=Ry-?Ho9!Ksf!@)AdrdW zfe7du>{HK{jH1ScxpQW5Ip;vXp(+KXhwWz|mk6VYnxxU5*Mal9Js%^3Buvbf-13{t zl@Qo*b%=?)RDm?$?t9Hw!i>moIZJ6b(T|Xn=5->Ay^)?#>%M`ORS=}2{nMuo%in+< z{Z@@Tcwi0HD_gT$?s%uJN4mr>ID1H^SnYkNJ9gOL4C9-UL5FJ$SP8<~JbGK}9>P?q zB3lxziTax$8J;(hhweFiPK$LaSRNivCvg%~T7xZ{CVv2XKY-4&hq(X#=)!YXrR;$Z z_6{z|bGo12o)7El>U=z>s=Fcq`y)bN{;^PX`*-~n{z>bL+qH-B|1gP<1D z5ir32+Ds(L&P&cKl{3SwL^}^#X8S_c{nN!Rt~1wJg*v_pr!5S${iV|^zvtK4cseQ@ z4cRAJaDVP?bBeOM4Gt_(u*H58Irc&tXJhA$$hs2{(VYhFj0ga&TggJGM{s`B?a~Du zr82;>fzs~pm7jU>EW~BKOX9DlYhJL7otVU9OO1w=G6U9fskFI&F6BfcoysNl8kA++ zMbomi#kUQBq@|OwRO<7*s%>?p`Kakc_Y!Vdv7e!d`Wvb?b&1WhMrb-*vTR-4yDoYh z3ji$cv5WBHK+017#7PVZr;ez(Qln^xD_ACfPzy^nxiEw2VZXL~#U-*#0m%o|O9XAz z$q7sU)*3vjdwZ(2N(i4GwT-z3#PBHUHR%6hKnwuzd2CTC>2nc0@SDD%FKj~ZljrtU z#QL90#VhZ+w1rD&vk{n)Ai%-WZV0)eK23BYd05Q^`PG@alZvKkvjuLbK%9xobd7xv z)NUna)#Nf`ge{rMdKh$Vtf|BiQX^4jeRU8nXrBev3-9y5THj*rZ`yjpnNrD*X-^-*Sxw zM|VVCCc!4|G+hY?if=uf9%q?cC(#TcRDOguKE;K%rZ&1_=%eU3UFrPSzsI}>k}_~7 zRc5gVf7H&07ky*g@7Ybr%B@xRC3+fOF$inftg`ap@F zqk(_$uA%P;_s`LreV}&u&r<+z^){9RE*;jI zel6Tg+?Q*M$78*|dxVc4W~m$@OoV}D;+MfkS74V$Tdkeo+K|6dd7A?NF=PIpE+_n^ zsg;-dCfnd5z@Yl*8uo`lYliz=h~DeXEE%iZqxJz ztC+v8D_2gVBFNT)2oW>M(v47ze01PI4-%&3D5nO4;w({^%EKIFJpoI!(aqO}T=g5*>4i&edI!OeTS5P~<*8u~hv3q}?$qSrM>8WU_ zj_{5-net<=(h}G%UN!>&qiGR!|4$vDOlE0SvVP|#;yAi&hSO5y-RPb0cflq zGiuPQ&avt}o~d5|P7?|UX)ZN(X8K(Y?6jp!5>iQu;xUF(IH@tHx)bAWVg1{vfcMX4 zo=v8M4b}b`x`jku6h~f6I{o{(n^L4a8>Ncr8U4DzuhUlp>78%&rUPs1r``0XXY_sq ze!c$WYu$Qtoy!FUwzkocy<==h)t9YavoEWxdSs7jM&+5X)jfp!( z*_JO;+#HR1DsDM^24>bimm}Xgf#i%Hb`0B_1_@2&IAjIclCARQCyCbc_9?LmQ{~KY zGdz3KyhJO=(S&Y+vi{nxcvST=&^a=2AD6XSmiWLiR3mJww&nGciVF^|q=xfG&oyOU zq|1plgFA;Bui%|30xWTAe-UBMD+E|XxuPG?&UDXcu`#|O9ULY8a+b;{khM^2Rlf;r zh=ienTi5e*^Ob5;IxduUIosSQfz|(`a_m3P%YQDfl&TU13mWj6S)biPe*ApY?v`9Q ztyr)!nl#_D+eZ3uF^Ls-rMEe*)92aecK2bY5?hZyJjLA}62QutPCb|+<@Zq){N!no(xP?ig+Fv*~+gzM|)GIj`#LKxWD>e?b87F_nV4glS zZ8XX1`+kvSdLU~Hm~d4H@$^sA>NAQ;zA8&Cd&o@2W(8y*UyMK4|>+7?|?^E{6aAuU+N0qaysLp#91U zoXdxg3!WQ~_e$d{aOGxkuZhGDsavG2EpLsa;F6VRmy<4kxl&MIp!HCfWG@!zNV2y} zRz+0Y9t$fxmtyz|iYTb45i84UX|{P^=KW<{#1kW5u56EsWqg^&!_*v=!7Z5z0uiBV zi2N7%KA-dQpqr7qWR}6#9`-3=EJ!M`g{O?;dJTY1@PgSn7JXB_@@NN+KYcsHx|U03 z-M~_-!~(p;G(`U>Tl(q=3DhDhPq*e^-Dv0MQB|-q%MkFU4aS|&cX1d+OhuO5UznD1 z7JWK?)rcM&tqb_M^FDv871bb=cn7aI-bJmQAD+t6x9|16O<=0k4ZR5JbxBw+3-=eO zC*IhTls5DT6J9kEk|#lGj0gQ+eGXV|iFJkP3YIY!1;dko!Yss;y$`U-1li;iFG{Qg-FztysIM5X!m^@A5%B3Y8+DJ@?4Q^KJ+u~= zP!n)u$X2FpV%ZBgy(%?#jOKF51$!J*iI1EV)=t8?yEIgma9j8DRX-f}wL{ER*B4$>dm1}-ihiV9{FsPtQX;kuvsa~x%wY#7vjp%=hNaI{4k zBXvs=@4BKnISND9KF%x(ZCLZW^& ztobeKsh()O!Flf%0a<>UgN_mDjwiU#yxf6UJjjos!dfq3X|qv<(&b3A+)BB4yD?CA zraPJ6vO}YW!&A>3;>at64=C{GPWK~cP#Fq1D>c+tPc6yVJQ_2c)4+*F%31^>=);?n zcw_s#%RA;5N$O&UDmxs)@z~shjWl zW~BmGw3?gYJcUn>*}V})%ZZG`2T7am9o0lXcg?tKIkf}rwcflPwU~y3n^1iX%YdgO zL(o}c=}3BDhTyD4aV|7zJF67qC1_cX6o+D@ucknwE9J}8$4kqXorFXkO)cn-%z97Z z6FsTW)woaxin zQR%m>hmQxhBKSGc`&@#)pn$vep~S5WvknPzoz?nqD);I2n#$#Hqij)S9QBnvqV&+s zMHW=h*k+xstDG{flsYUt;`2axIdUUv zzQkJ5!m_T<=M44$%Yy~y#6Tkd(PdO&*l(z^fl3e?lxFI`sfn-*d+H?uxi*_1fjOXq zEoDSevMuZcLo*vhBKP%-ynH5&WbL=1f;|Fu1?5x@3UR6X{()?ltN$Z z$Oge$6q^|U7I@LfjmDCs7ba$_eh-g_bf^z=9K$0#V_s}ZNFV3;HL-G1K{2_GLcB?&s)WZ$ke zji9|M^v2Tf1Ks~r+!IojpJb-SjvB)^)dgyJ=ajOX;Y79FKqjZS$Wkx-=tE_G*!6V> zG$A2|Vgz$e?~gEfT;?6T>XINce6_PH#ztU=(j9^h^~JtHR4Rzv2LE8YShz)VJgK=v z=mnyUs%rc$n>EL*>dz76IdhxX%gm!1<|_9!0Pa4@W3A+*gmuR+yN5hxc26Enc}j2* zEI|n>5KnHqp?tTBlAu=vZ{c{R)o&Q+q6%eb?xG7l~V8<_#{Fp5T;!5D7Sh#)MWTTODo0AuqbH+DFATG)LtxH6M4RFNp2!K zo#(A{ec3xy6IHJ00UWjM+}zp4(WYuDGc|vvXe;z|Vbu8{t{k;ND){r9QxmlP=Wqo6 zZhVQ!ds$+b9znxcNo{7|GPs!4Sn}^Nft4TrlHQTf_jJg8*^8eno(`?0QwMZ&AJ#5A zLB^la-zwoypFnw^-#ZD*P$B*$ELCW&t_toiMnBMZzf6E6gq>AVLL}d>cAmE{y1ds^ zbfq*uL=)bsC;a|kFOvP~v-)y~s73Qk8~pu;Jx5LvR)O2bs!Fds&ozx$4oj~*+r?4N z8O$)bh~l$hkb%A2#!=ILjk#CWuo$p#F5ilE^0nVx@WMwlOgXi)NK`7`O2jiNFhW^; zsYzRvf;1dq8OjnR&R)N}d*?OCK3}Ie2o`FT;&zUd;Y{sp+fr2CSCU9US)Wl0)1lbn z-8%T$ex`zl9ob{eytLJrf%EMOdi#69MN=f8*WHYh0(9*9D)&CmUV7MOV}b4=pbfZj z?4NrhPnkt@?bAWM(p+agx{bsi90|-eBm_wg0t^4ibH4F(ej^;UNwxO%Z7{D50Dr1V z(<8af8l&3WB|}U;NFP353Em*A#$@~U+mBwW57B@HeXrYPbL&t*i#T=g-i!qpemrfh zLdubBhH`7gjef0zhL*M7L*IQ+qc+rSmTgnEvfBu(xsBWhFrfxtftjnn5{%!+froV{ zafY*a%WS2}YblOH8eT1lJA&QMT(jS#^f$e5l^81s?= zz#k20ujqy&s%f)!s&_ZXG?N!hfHQyb>^KN&p-y10obG0Bg*vtLRLk`umLP~a`?c$i zZou9?;)BVvnE1f(FL0SmmPb*Zgsf~p#G)j#JiJp@(2%8&JhW-Upnac6C#BPD9m98< zbYU%7u8#J56Ui)}z?FAGBIBR#oaIc>xRGy)dms4u7SEz$mRr&ts;vYzeEc;`METO9 zBBHLg&R55(CI9`!fglBH>%;V(1=>!}4g%L_6NTF3_*h~6WUTxtF4>=Bd?b3q=a6Uj z_`++pSHGtcd#{P9YHup!8ZZ^ucg~bm8Lu`a=sC4!k-q6LvwNkxbOt6&TXXev?br7& zLC}yfv&ifr|AKgEmVQd|%QeH1>zA{24AKa$j&BT79q)e`(l1w?!v9mdmd!?+mirxD zoXkcb1S{?v!R}U=gIzI~$#aSVB^QLnQ%HXnH0HnTl1j(OO(qegCLDuis*Im-*4_ZC zqI?TinDb#-g0_uyHa))^227UcFJxn?2fZj_kJnte}#AXXOhQ(+gxqaxL zkDsY}*YH3)WY<{ca!23$sg2S{HG3sT%0`v(f8BrYiIi;yK%nDIhTT>S0PHsz6V;qU z1dGt{Fx^!;Bl*{|A++H3g8YcvzkO#x8ec zxxC&Xc${C+-Zs2{njmB){fr2$s8h2i!N{{!=S-1{@8>)?9fMv^tAx<%WUiZN%Wz$ z{i_*doatY~oy0Vidk_2`W{Me($@HzhP{r+OrC1alJIUGblrP6J}qb zRu|zYr}Et#gM#bP*4~{}x}7<+LO~;*A@z0ib??B`YNL}z4AYH-lnPDqmtmE{(o=<6 zd2iHol6~FsGJA4~T39$&?m#{0abGJrOX0uUn95Ak_d6_Y?9r(&3G&<$P9&?K4~urK z-vCb4Sh+zOS&sX(-&1}T?fAm;)0d;OZPQVpv)lwh1!~p&oB=tG@DXxhwg}y(`%MD} z$ArVL(tUN%7KL-;!9EX1%G7`kv00^zcK)@IQ!+BCHOZvYP6M!71#y5_3~$OZf!e|z z-pxmaB?U8BA7h6aT{I-lthS;aVq^@)cS>FEgkDCCP;^IkWIg!=QwO})0A+E7tdg)G zfDR8)>zyUtj?+U2b2^q5sav4EqA3$e-c^p+GcIW0XX2R`Q(?P$v)>fh1nx5&H+ILi zN#aOhf~Qc2!kV-9s_Q=`dZRFFx29!ip3)iCGhXLEy;VK%$T1!X4(~zF=}`&3jps%k zUF@UoaT4Db=$ymbO;hLSQ&eXfq6Sp&z3f&;W!-fP{*<2119+j_$Lds0wv6Ii4$SD0 zzq4|bnxjivy})QSHd?i=xK0xMuHHl%7icY*Rv`@+P2SVL@@qxal$00{_NQ0#8nsWD z7mz_I^ppWcwOaaey0u@-2TGe}_g>}J(E3DL;}YfPx$1PV#K3DC>o*DVY%;Yc&OW6< zKf}iAP1jzIZ*XKtB6IY*rrYQB{TEf2sNLpt*KB3Q{ZDrs!n>`CmesmuzJIOa#|#sP zk3&L5MRH-4rhs(or9HaU9}Y6BU*S7z;|w*K$~~x5WhR^*YK+`6!e7@TE@aff0H-d~q z%+&e2r37)Ansvc{vh9~20F9$(5hnh!kG!l!s3-v!sBMjzzRGIncmp)QGh3@ivJ;7_ zi$YqTgl1G2*!e0N^&xM{SA+?7`ts2{6!VAGM}Wu_S%>Bu3>Qr$K-+DSvhQv&Dc@Zl z{E@%&K+$c2ltoHiAxe8WBws#kxNJQJSlUJxk0l09v+;B{)2I65NwI)OM%LsK?;0lu z^EaomgXPWI7UU`~HFR)l2e#p}`X2=04pR`XEArAslms=fQ%PKH8t-;Z(7rPE0d62i z8CMaZeU9C?*M7bojEV6yx^TC2iDTbyOF4v#WQ~2fUvLR*7&C=)KMjCdP+r0I;+nuv zV_VF?Zqc*9*hOa|68E%>g$r4zxU<|My|)oul~u`dUx0-!YnnE`&d7S;pf*cgb^``e zC0`;c^mmJ$s?ExO1yl%Qfo00;z13jCRjx7d-G>01>P_jQ!BGhoU(ykv;sB}aIWzJz8XjEko*&R#d{>6D*YoxD$kbv3m`p5N5(Jbhz58{_i=6vVwe{==J5tty%YX14Kd~H zZ^}3RCfbec=$k*iDz*dv+IEaAi7fAwY$cCTieaXe ziK~I|eObp8X1CQ0amC1-Jm{L`QL<)KsLn6#D(_02@x@SQ$-AY+j+rz@1)3_JLV-&_ z)WV@J8s7yX;_+X99ViF8ji*3@#ZxeN<|D4ofh}rq(DM`*zMPo0PfqS@>*eDreV{K$ zGkBt$6D-r@C>!Lrw(6Mc6)ZWSjWCf90S5E&xRH_BQkv7VJDoWhFDL2u?z*)$C4N9_ zC%swTd2q_v>cY#l;un@tS@cOXH;&(00z)qHE2$JdlUe|sB!FG&A#164ED=@~u|o783NZc6 z@5qmwU5Ovae5OVT5|! zQ%TriRX=@C?fIb>J%dI4KB`Qk&%f^EU=7{%`&YYdyp$^8f4*6Xx$|YEWWl$T`A`F9 ztTU>^6)65_5|&bvK1xKk)+9Mp+h|3Xz+7UB$$rnr^G$;mv3-IGasZ`0q*rtUs4@Ww z0~B9>uVGTZ5=W^9&yBO^TqpCn44h=nS zKaM*&^KsFg;#!C-K}I9X5Gw=Tx@SXwbCeBd)B*QerwHv;5KN)5zASNI=N&jME_0>0 zR6L@<@_eQuA5qYSdLWQxeiPmwkFlWZ=UG8BLyWA-ux z4Zyo5B!Sjo?~MuS0Lhh-eIY7%Cb=dsAPB;q;75pr71xu}SKpL9aKMjBC zQ8IXeb0HCnOBvmPz8krrwhj1~Dg^8Z>ETgFZE2`jJzNH@?qRt?Djhsi!#}1|iYP_5 zXK|ca23VjAduqLuFEhI5{4`MPZS#^xDIZ+^vOec2#ldv&VYk}g=K|eQo>O1me0jH@ z=_NcczE^u|poA~?SyA!ujF;+gguYH&gd|vet(d8LPiJA?WXiByj^9VoTG*-lLoJiv zr%BLFwZrbyYs-%)^o{|=ZupCL1Q&?e5#`*k4fiA$s4{ilr81fBBG7uVAOa)%Lb6+A z1hf>YUh1)s!UD|`_mViyX}}Qor$|<4TO^5VDJ;^@EYaN3yQ>SEG-Y0${?^(j{_$Oa zn^Ot$Z|X}_E@f|3FwEg-6kLe!L3Vc)qN;OEjfE*5#>o^`W7M@So$9PYX&0PY!3Kl8 z3;v6klF1Pd8b7zr1X}bjryL#C9<^S4KA+H_o^42$$?RX|NR3@a)&DQ{-UF7eb!lbt#jAj=iYPX^YA?5AsHF}`2T;5zr5f3z3&A-qwYbung*l;rBf?F zIt_RxfZf784r!VvHWOfLmDN$Ynr0_h+=Rf3sa1CxuET#J@ zWijEykD8R{R?b?F-Wohw1lL@szG%AGcut4tcoiT& zXW&ukLZd5VYvOv`A$hBdjya~^!F?1!=j<|t=no|7`Nu!hmm}Mot=l5HGQOTe%%jM|#L>b;#?<%Nmy?uDW4XxiMg% zH2lzUDm~r3am2M-dmiIw278P1g?2o3QkhFc@tVtak38y`FqNKOi_G`Dw;vFdX zs%KF5Q92J&Xy}FhP%*xF*WpwXDmvL~X2%9ZLv8sOSfDAEglNPn%tcQgm7sdR?p8a_ zp5d#_+*lx1BE&q|EaA~~hloN#Sm5PkP8ZjrDCS(&9#uu4Pob4?dMk^E@>h7p+G>q^ z9IAG1&&Bo>J0%urXQ%|!x_8|8KIOd-29;FCed*!=1eN#L)j7V{3Gmtqe@aVMWLqUD zRf?Az<<%&~lYSg!_!^@}&6hMitLefg3VBtTmrqm90T$&3sA8xi^ze7bx`Z9sMK?ca zzOx~dHg@;f_t6zQ{2=tDA^2#57-TZhUp6`X^LDxZ^^O0vy{C;5B3D z=Y>sjSWPp-mlSjg!lCg)Jvq5UB2%hTZWS8u7GKoSC8_+nL!-w2yXaH<`Tars-tD6) zf+T8>#W^1CtjDUVl7lv6*B$zdLuf&kC;ZBCE(7;wG6<`|<~e3s)ExRIFt|(lbbCa$;|}eWJ0G@8?j|_l7FF!JmdX782{JpG%uxt$ZK;QHfGQhZ)NDO!i@? zADATyjc}S&=`SY=mjtt6HPV)DM!G!xE-Hx3Zx=i`< zH2qby$Pg>mZ_`P-9P!L+i6vT{D(PQ}XnySXNca$AR%ZJ_Y#!k;qsgpF#rp z0E?-gvE7@IQtgMe-)5S0rFWn9oG~URi-!en5~$Rb`WR5I|I!eEr&QF9E@@F zzw%T{w%5G(X?E~nZR0JZ)dy>?mS94+dQK@4izie>6)8=k)e{|;k3A7ada~H8eug+O zwYSwx`B8`UezxAm{Imf>HvNchmUYA(3D?AJMs3CQFo<+8bY659x zIeuOoPd-!p(1+WOGNE1%c^~RiNB0WS$|KF+ZEzKgHi51gG}6|ZM7l7z85l6fr}Nk$ z!l-whPVb{}Ro4C01QUA{fe-cGwTpMQTE0v!DR{wloTM~N0X5DXBzfoqJTI5=CqcP- z?Nf56xeJ`dsU9A&YtQ{R^dgnKflv->Iu;8UgI33(dlD-?Wzf#0XWj_#Fsd+U6tulr z-jn~J$4yYUA@#0>-x3>|+gh43-)qPoi*~@jjn4qY&lr0h07hm_O?6DQdMRH+&5yh_ zK;hE3f=1UkaWc&%5nA6@AV`>vlP~0eVr-^5^l&MROC!kb;P178g6nXky@A&8cS%9P zWEOEFt#-%e*Gg5($x1hp<&W@CRZ07(qSxJzN}_tO$Z}I*qt{U?zRBZ>=0QQX_C$1A zby^jcMptU*hQ~MoX$p>k| zo>09Y0v8~*k%hB0*vGBE!dBCfbXr^A_OKlrKkUvAN=gq0>T$vx~cFr8}K=Y0Hn6E0<>| zFHgc;r4n- z{xdl7?Q3x((iydf?vDN)H$JXs*a#z?ZoesDdk;4fb(fAWpr#X>c$D?sv9)rwWY~g; z>7Dn9Bxx*r@Y<~}^n{B|lN76=3HLQ$&Tr+QBKc=`Ns3{);{Co|3;nevus+$IStzQJUJ-&PcDQ;u{V>QXb3JjMuD1-!=onJ!=-KYH zPL0+E-pefYWZHE8^bU=o_xV~i)$9gU;)X(UONxyMtIC_@{uTQ3qch)o{cZ&%6nL0i zdkaCD+_BKi(aTJ<-9=2w}`9e2oB0 z3dZbV1a+|=4>d2%jX?CtkHv>7)s{x#>>0nz&vgT-3yf|?{k5OB?ZmRIrrsxZIBq#H4mE@eNxc~*R^N;4$9#`h-WaL17J_Xhxl~oW@F2$2=05M#5+f?h?r#t zW+J+ukC`xoDA`6aKIzQG$mn>LxCgr=IHRVDXC!X|qM(f)bbAc$$!*1x_Vc-&k{S;F z;;D1w?EL!4B0+kjGxMaMXYPXVfp*eb=wdB^}kdOy` zqIomgx9t0D?q#g_9Vb)ER%x*23>NQ;s04@^^$%9Lndj9i=^m6jhz^+LZJ9iK_f^Ee zZs?5;;v=-ZUrmIt7Z>Qm2_3VaR@KMlKmTU8b#hc41dMKBzO~vHeB^s0o8~02(epDb zpXsYA8Lh1`ER20zCrYYp%u+q$-H&SyYUXqqSK%@6i?qH8-ul8H>e5R@1{O{7N|Y5v z6iAif4oSm=jQuNUR%`a8-VxL4xGF`_##?ZXzSe+8kxrMjM6?(a9WHY83GNi|lPh7a zg>2Tu@Y!Az%i*p!h~6Wdn;;lF<#iAeC(pnL{q-6)$)(Sv>#Yl+tE33&Jh`Xpa;sC7 z?q)g2v+fe%Hi;h%)p2x=9`rrn6O9(4Gx?ebI3*_)SAXaDM050hl>r=C?8OnA2Vvpd5UE)pC@^m5D2V;z1HLJb| zQsB-K4LM0I$#i=Sf}Ld%X<+OXl>A`Da!tVPIdPLgc$$MWEwkx2=kaRwx*mfJWi5GM zLcop9NhD{ve@D^anvmpo&XvlsTcb6{(GGEaPdTJ^bF#nRp6B8TGw=_}#l`^SmY5r7- zUvCWbyZDvTj?jL$;Fh^r4LDCVO>V2~{5DXrZQRYg)!dx;GDU-?=L`51+R68=X9XRP znv;Q?UqiW8;LNQ=0YJFU2q$D_*OTrnsP#IvL{o96==@MWp^)XNQU{7RVYD`_&lw_U zEmfg2iB^>ePE9PwiD2jqfNZe_IJ;d3Ty%QZeKO}$ZZD{j9W%y4Ow%BEHxh)*TV_b| z4!Ez1=pPG~u5EUO@CE2k?Y2*C2r5HSR41^8*&#C01O~SpDP*Bru_YTN$YDG zc%CAyFNK*d7D#Ip?vEBNWhxcaEeUQE(>rIyk;sI!tFpuiUXgIs3J_808ZD?zWO2T^ z&D#IPBnfbmB_=L55G+KY^AEsX8Z#-V;uOM8|HAZhl5sM0tD@jYb}$1(Hb5(+^K z(w;oj(`%I!_uld18nu4f)YcKd(#)E=W-*%r?V!J+eN+mfkHnPM0`mI|5&6MyEes@n zAYuTbwQ>3~+?Y8vr%>+t%EmG=MrCNmqQ){=fR3CL-?t)z(d=jHag@dv8FDM>Yv*{d z8Zv0*yF+X?O%dz{k9?8FGMj*Hjc%wP;c2~OXLYE?^oPAwJaG4X#lAp{=6Qz8@)-BL z-5jy~*NFpqAZ-1qApv~NdP@-w36s*VZ*9-PelO1Z>XrS%_lxvzSmAQOT{vB&(wkY@ zYqV3hzJJ+;W|_e1$Lc=X>4q%nGwqWGE0GRJ zqiFlLJ-!$Rq(j*_BD#pj)J4imMXt!$3#q&>+?ay(Nk*}UGAq7B;0sgaM=se%i{UIf zuFQvK;*)3>`V|@caqWVJ^>yxCL9xY|rqc&sEq!*Rs@5_`abI@@Q`weSe|tg%c1d>j z8jSVkQP49gw=pRnaTe3tX~b&XQeMFwccY^~{+p%6rRm9@?948o{RbDRWqTb89@f4Y z3d^e3qrcJO~I*oknxu|&#)qDG7BKkGS=*jbm3{_fnlHP~05!65;l^mN~3g&wPspqMGrj&|-FSzdHSD|Eh4}0y~(n2PQv*kuQ9rmiQy!L9OEeB!awwEf|uy z4$eLMBQ@iy+8;;yuTtdug@;pTRNrWRnh;m=hH_8ys!a3 zH26pke*BOKWI)q8Rk2Mc&V(c zrT^l;ko8n)7{MDgTz9gF=8mY~BDyb*X4t!!DK>QGy8=S~wwp@2YTB3FGM4=-+u1Xo znugcD#296QST*J$@Le~9FQ1MYgbW&_ocBzSG?IzLI}~14fD{a%p6_X-D7^MbAQC}r z4~&x}Mx9Y<90Fng%B(Z0e9Q)jaG^s6IO~}`@x>VGcpZfQ253xS$c#EL{1(aejA|oJ zo20qKi24?e!cPP5>V69tM+0>}qq@I}!tWQt_J_gPaeKUB%E@)$TkJG({ETXhDTSEO z#Si;LhG8oNfou4}dYSM;l(+#Hc0&#L|1Avt9<^KuI=BaXi>@HR&!`FnK?L?tbzq=6 z0X{MVay&EeKTpImXno$_It9BeanPHZ~RcB8Lq9)ywx`O(amqp?8-=n;UA*qN_Xb3?2 zFxit-P+Z_+oY5K8wV+<96A+La^8`iu&Om%^#|ax(mLjQcERpsZhyms#<`qipO%yRO zTn@J13#Z)Ji?u%h+Y{XfV8>tn?4v*X=+F1)&-duhvF^|L=)a%V|D2EhTr>Q+X83bm z_vhOCzhdnjW`sX~WDlf-NPf%t8KZWIDAK_SC+0$8tY>xsx|IY$q;qO_m#Lq-umRc( zh*EhqS-tODo!7rWpR~vPKyP-CK+WQkXJpS1H|B@3t%@oUWf3~`yv3cGUb>~L+M>%M zAU3eLZ=Cx1j%!#7y>ASIZ#0NG3cGXu;7iAA?b;&E+D;(e^^%~l8D zzVFkAcaJ*GZ$6NOtt`S$RsqO_=G|4Re}g_!(UiM4&ZwFSPvpP-vi1j-#1r<%k-N?Q zBo4fd1SB(l7W4~UA@OG+r4>wh?Rq}*-*kS8YtE=r9-wv+l%!y) z)_=oxKz|%Beb1u2H$2&b9b9-vukyE*eEzbif98L$Hz;>E&Zs^BING}$sbL}N(RAp(DwnFkb;qwN6bkM(ODE%|wkH7ya*IR+6 zeQ`#$ody72w_Yl{|53h*9s}_pfie&KHv5h){SWyRzk@%H-kY$kn?PL=XH>uHQceCB z!-W5>*Dn9#Pk4^CaP-69z`?=4fnT|v*9(TdfbA7gnRNRxNLuXWB41{;* z|GeCvZTFw@pfK9hkqdmXVbfqg^5m~PeSb#`;O`#*{?pF9`nM(~YIH)g3QM|#~K+zb+Pn(nuyzAs-e<||AN?4s8D{P<^ zzfbwSfc=bWTJrLVN{7JS>;I{B`#*Ptr(O#pu_;m>qJbf&E@c@^7MT(|u%|<2*d6(kk>VJWH_+K;iR>*|=1yBi4TDDIwKmm@MQF5YaP8qH~D>b;Td z3X@%l-%s{O2Y`;gK9sjo?%j5H#?|PyQlXo~Be!XA4PlmASevtvmgddU36J;DCL1o_ zqD?ZmOppTU`zmnDp`Y?_#sFEHu*ja--+cr8-gfjPOD5m=AV43RA(#jkc?7>KEIQZf zP^7GBW%QG*wRB`l^f+}4pF}YT;#0Z{UllSJemtY1YcPCWz)wWukH*Z27fVC$#rMw| z6Mn{es!H8#Yl^{2uw&Y6XEKCdA69&9I)RigE{$<5*^gk!+Px7t9@v#9N=udN**jZK?Z$eIDL1(-i!&wZ`6@ArH{v~BpYzL}0nFChU;ZO}XDje^2=9uT8O&9KOsC%nk%B)<$m6Gk~fhovW!Dn11-vRugL#1noNvBVV zLfDiT@KZ7`K;~F_4S0(&5)CnhoS|aNeRxhnR&?O$f>i9H9AOk*@vV7g#cGD69rEE@ zTW0<9EUxGxe~02eKQ*V)Qo%Q3UA8@mKr92>DT2aRX-Y>bR4Q>57T>cncd| zB}mHm%}-IH4McB4(}3qN{|k=R@Ta z_3(SxrYJ(18IixVDIbq`L`3_)2rW>YR^zp}+gXzRDXMBQJu`IrM1N z67wz3p?nf!VngDY0+K^;?bwDJd`wumj$&b^9t5gU4g zVDew0hEku?i+6J->Gjt4Lw)k_rF6;e>m1@u(dSvST!<%1SG*Nt@;Rrf)L(?;yLXLA zLncjM2<)b>82y|DmW4XoW$e9~&%2~&R%gXg?jy|D=dT{moOt&CJc7;0FVPZV6t+H` z<}cu*{Kk!>fETwIRorgek@!{nLO;}MA(>AAslo(x7fo*oZc^#kGkWG?T80yYx%9Py zzv?@b!UMJz{W`M5)_;nTIo1r6h#GSJL#%qeHf-9jOFYFpo6qA2+1^(z$)?DAJ{ogeImPs2(zy#oD?TqhV5%zr?f=BYQ8L^HMlo1$9N6+LEiI)EHpa@CnDa6^}= z%0N_qD3g`veQRz;YP%=JcC4o5%GDQn%XO8S5ADn&M*Mjst>Y^<2R{g%i|LywiRgs@ zEwKOAPyc)|$FSexKTb1t)@@KS*fq zwd}zv&M|h*RcJO24}(;e_p`u7>&Ykiq96PcO?kmDhL&~#Q|_@iAi>m}B13dJ1&5ln zPEdHEblBP~TwzZVxWC?A#RqLR6B8A-tF~a(PAq&KVu}Lsnvx((yA|N z+w#|KTo=PfEqQ?`%!XxvyOZDBZRg{}ns{bRh*YIfq=RAB*6w&Dvd8^d@o{G!V0icQ zHlaG!-4s1N(h~HFm|AirMez3$H397J>yy1kzw=42&CTyuCzw#i6aA*K_Sdvb-Ea;& zr|@fJ_~Fug&XV<~L!Wp%!HEw65+0{c_Y;Xv_cgKrLDY)7pi?@% zmWfn)@Pp>@0Ly?DuMhmvUpEzk6s3arTNSw+p&GY(R|B9gCad+%#Z+)j<%=%uUaLeH z7jLyS3Yg>s+Pas+)2-H!!hM>;KYloO$r8FOF)e%7isC-vT4JPo#?Hq_i(Oi@R%I!} zew*mgrjDtK4)}(3is;e1T4W^y@x>#}AkLy65a~ppqX=RGwwj(4h#%=3%`WRc)wJ5o zTw;>HYd2`!>A2Rg#EeSNT+a&Ro$gRD&uZ(amp_=a`dV3|yUF6K)8u^MvHF$=@E`7g z8|VJM2C&(6-R0gR)Rn@m-uR^>I7}j6Fr|CWe9+U_kfGci`>{jKwal+7c|$dfRvLH3 zKs2%35g`hg%SKd0<%v!rw5mKcgS+NUN+3#upOTaX1y`Q4*Kan@SS2Bi{2hY4LcDD? z-WAL|DY)@F)R{@EBpr_y=nT%_=W5t62wFqZsGB_xtv8SygV%pK=8+G6YomDuax23| z-W{^3Ea_UF?!xt(_g!;2$SkDjkRbu=nUYv=yOsP-Dv%~r**WC&0nikM@v1Lgz&C@Q zvs*o{#%GxV>B9jOru;yio8#dlLHwsi`Hh_3tO8FmIkQH=;ApI8H9b$}ZOF!z_+$qS zYT8DAr71-Avnj>R*~~#sxd8#+?Wm48ffr= zDArF^EY>2gv=joa8nw`-jZ^th(L4IwfC(W#8~_4V{@#U&05+^jkMsG3n4m*+!V#lKT^(3hDxn~653KC)WOl;yKZ=x)$8WePV5P!7&k}vjOjKdlS5ZuLDrHV zJ{x5m{88zA#hI%$D(H3ejRM=4z7-*Rx=b`H%!h|nh@&lhLZZjOzw8TNRU@b5q9~y- zL8<-Lu#D$(=9t^p#>AW(iD}XUbyk+)9=+3b8SF0$f)bLf60RKv*F-_JqQvC{%;-|3 zOV^%p4g%V#?VcH18LSL-Bo>rPof z<%&@NkqN^NL6lV%lB-a0Pak5Gr&hrkB5~WM@m4;!a@W(Z z)@6-5lP4O`1Vd2tFeJ1bg8y=hs3o0wwH>hX6m9TOooSR$v^m~rK#zNHg(-Ox;~L^0~<<)?;c0002lcoIUBa~iX;GVfEn&puNnZvENjFH_JTeUbM~LMgMHc_2F8n{d%O#Zo?81RB)(hc%^YAZ*S1vCx zgc8RnQf#d6x$w}BZey204SI^I=NY7BkcN?XSPl3qO z`IO_rb?s?s`vdw|K)hZae9ZVC&Q0;sql5$C(#I8w!{I}7@_9!vUf+;%AKY-TbaL6^ zjB42y1;};57mUxS3W5C{Ug?bLZI}rw5b2pqAu*c(Ol*eTyNZ<8Y+xe04?s;9KAJ*p z?1D*G!RsK?KG-J(pvNu%lGLh4I^6`&slynDrmTmjB7%@CL&?;>e7s zf9e!^tDPuIC>XP9!$*xamq6o{RqvE1v0K*6G&lsbg^`orc~vus+|XNi`&FujK-%}lq_MT-SB1h+0{Dva7t1US z@!^elgnEH!flU5GUfqBS^+wS^H%%m@#4a}hVOQzQX`Iy;=yr2<4MoyGpPmCE=6Wl8 z6do@CfqJWZbVfBp8lr?ghT+YCw;{)H3_yx6;|s~u1ZoQF+7fAtffy5W1f2UW3$sL0 zng<}^+v%{X<17*p04|m*0jOCnhIEe)K#AW`t^+HlxKLQ_3Mq26$6BKqOY+jbHx_0I3CfU=qS&=Fsu6ymfwUumbHK4+e6=Ki$UlPhs)B1k6ojAM8%Y&U(C%sfN=dY(Yo3sih!#F&o4Au(nQ{y zwCFX*zXeAjoz{cdJBFOf<>U0=tBjGfy;(bU00e4#(Kb4L;0~|=ZTIpTi6fZ zs}30G+!S(dy`djjhzhBQ-4TCh`Q3)P;L!wXc)iPq*$!H%8LF?zYTRj+QTnd+afz{k zm%8Hfc<*uZ=Vsat(COY{6OcrTS<s!!A+|5Fdr ze@0*Y6>`rnBEVV}SQ6O)d;3rHRL|1?qFm`>%_n97X1`@5S-y0+&c=UE*^z~f|Jkn> z3NC_Hmj>i=5A=(dp0~#wFRbr5Z^KWsH*(nf86qjdguMhcR-y;a{w3)iLH46rus3`K z7BerE5FlaLU%*f^W4C_y)_(6IXMI<$<)__1W$|jJo-p0f`8&;xEf!oFS6Z9$1HtQbE-7|0fJ@Y!cs@|x2foVeJ(jpnqvca&mFvN9P!W{U!85VXpp#i*YHte zZJ3i)!Tk3ldVz=5*^Y|y=`)#%%|@2iG?I3U6YI{2mZNx;CSdZj(Fa>H5DoF zLPw}_w5%jQgC+1Ozv+|ZC#h5e*Zmih7rg}67YAN+0aFOWPj||y%1dbnz{2H&JTR-$ zT5spvrwC0Pd<9!hb=+ZtyWMI=Y;raHoN2Q|hLjYS9xWJ7c?XPWE%yI#Wm??wp!@yZ zo5lIZ$s(hyqW6?dO02gIU3i@g+Di=D;K~vL=5x~}=AQ?UAu7M+w>q;8NNVdCehI{? zq?>jwdC>YF1qvA)Z6pePH!x~T?3{h-Wqe-pr_Ff7!mg0sl)RS;#(1{0wRv3bw0$8Y zWW+Ay&eM+en1@Z7_j69Ht?!5A#_pzSMPGC)rsI&fAGXR8O+{ zE(X!c_cY^5-;y7oeH(u}&A8&ifc)kDXQ4G2t_~|AZk*;wgGQ?W(}Lv6O$P!izrNZF zlOi)WrO8~Yhu_{V4z|A){r+rs3U$2^eF!tXa_H&x=E#@bUxLP>fBV?uk>c-kO1d^$DEcAoFBiqXz_$mTm33M zmCApJuyKvXo_lV3G2`A-S~}^TvYUzZOur--%4yq1?Md@So7y@+{k?H z$OBAI(M^xic?-TPoxI|xXd9g5BlfLCpuh4i0B$WH%c`2YMRhdz;Lw6b09=? z%K8MKFFe-~Z1=gJ2*}}#hw2x*Endg3SCwwhvsJs%Q!*;Q{cM`g%tBgxxt_ZCqlYr8 zQ{}x|nivxg6@;!Db6P~?%mi#07_jmS>sz*rO3Ik)R3Kc+-9Bu7NuPYCQ;Jod$T9fN zDx%X<148bCjiwuvq;{RB4~FP1 zKcwk(q9#+#+8Y|C?D`Kqy@leHKIBZSJr24(&=9{7xuv~`Fla{`_|4qz)k@;IU#6?~ zV8&EhDR?y3-8~~1A~9qvk?JlJDfoS~1nhOWQ&2^1BA~O-4wgzd!J*LKJ9PVBchn8(y=6TG7n(PM{6BjiYXEnIR&JcTHGT{5n?D z8FZ%I)TOj(S1Vswhi?0XESiY5~HrQIF<_XZc?duxH>olck72p29 znTKL_c2;gPLBY{Qfj&+S4qkWHc6YywFU)_Qx9Xkz^3~>x?f?th5gtAyH_?V+aUI<$ zFOEeT=X3d2nE4@e(*=!7bOy9ouou>pM~&UIq~pDfy>6!Yr~_&!RwXK?MJgHYqjH;* zkv1E~#j9{YAj`lwuXxIdCD*Gs<1=3_((R)%Rrn?jf|R_OX74T?>%#(C*jr2$)AnFPOdt7*A;=lS73lCuYA4oBG0Dq2O=#00a+ z0A2>2rqrLNGx7-wUW$5?l{n7KtrN<>w7=I1U$;yfCd$Ql}ZzQG7a;qhDr%H1jETGeU?qy6ZKFOhj&(rcE#=mfU)u zD|e%Sb4rz2Q-)QWo+aT%#v6_Pk3|9=aB7Y5^k~itTwZeXZl$^U@=tS~yCLcgwVEGh z2oDIc<)j)X7;N_K3Vu~fakSF-H_8*&a9QQ|?rSXd^^E1^aPeV7Dk_?rc&Y(p9@c;f zX>1gwq-Bz~KIL>-Q(4zItuE0q&8sO@r%9=ApsY_>S6@p+tZAW6M`9uP=2O?4^#q)k zfB_(MB=4nY_o*@DfzLsei*{$zR70n3KlVcA&rJ5CXZjvNUUE-VO}fP}H+~!J<(a8R zs66upuuAulem}p|HhtSWcTMzz3|32XQ}q>TM$;#Pe37~atRh3lE;Rj*^6Y9;-HOL6 z9{sx~5U9)f|6oT7%!3yI#H1{j(y9Y&<+!NU{&Iap>Lj;U%jbgTVHBENf9&?<#xQTG z6cEqaM1x2EgKtMUqX_DqYQod7J9-_{Y9mm&Q|pCqRm(ZYm3wR>_Ph4Zc|8Ii1GW}` z*s3TC+^#{DcO^dEbrew-rCYnQcWLUz*0T{4lpK5%D+vJ}s-kt4Z;;>dbj(sNI?$*d z)x!)ys{nrSm}IPRqe|%bvpkW(=ka+w)7atkZ0r*L{yss#glK!J4K2h4?Ep~FKGrby z@QiAK?x=Ap(4Grwf;lnorHA!*3FjVV5NoO98+bz?5#4IcGm@1Q(4yr6)c)7mK(`Ml ztiXhXgilofnd$S5N%(f@3LndIj!~7`1N;Z|ngb`Ao=ky@CgNzv&8Hd68ORk`9y2NK z*gkBYkf>7JG*aB`R^Y}XT(4%A7_MysJz;{(LHSq_0$p(;%XlaxA~GEu5)FUd^VmVF z!TItJbq?202t#`PAwW70*yQPscZlIJNAc5#_7OS5V4iS5PpM66=T!-b8pdjgsR(^Q z*y{zc5WR<%kDA{Rn&rrw}hnG`ICWx;t+6uL5LqC~68z5+5T+hNCj9j?_eZN;&bvd}{- zNtZ(~C$S)oqEHbl+P$cku$t0N0_w<{oTqBEVt;jt(OWh5>H5ps%sh8r7@pHUXUHk+kf~wD9#FhvsGU&)`3Uo`49B|w}wv?67_1#kv@$+RVW zLH64mmiQe4WC6kDt<)CaHV6?hGx`FUm}qRLC&K9!ibdc->)MO){L3RAoQ4hKikDeZlaW!cFw=4hFr-XlU#pXq7(osHSt9 zPeui~OI1B-Xj>k1-FH%zs(9TS7Ib@3W;3`+?X-i)e%LW0DLmT&hH9$c!^uTaO=i!dYOt z^-O8G{sja(yda)+b4?Z0{BgZO?DUEjSN(Q4um$YahPi_2LygI0YOLX7;F^9Up<08S zq^h_KVj(>ujJ6ZT)B&HsZ9woE+!J;lmp>Mx#x?(ysNFX|o2Vw{W_1bS>qQbocE5v$ zQ^dT~yfiRv`rq3f9)Ee880vd$=GFT-9f|$niBKK+G2CCJ-2VZbCVbKvijhV?=I07n zi|$_D9%79H@`oaxb&4uK!%SI}EuXk9yBprdcEm^}RKF##GhqEgY0D|qSy;h@5!r`X zQXiixC*KHPvk8|KPrrTm&7^M<&T7}>BHopFyRmlZ1~H35tBp^?2JPJU& zk?oyIL_`jm&erryXV6SzRs;>DJ{t8p-72dFpO5R_Xt86#aS>B?603Z@-I9^2VImlg z3P=CyBO3(6OTBH2yam=+_sH9(MPvH?C82sn(QvB6ri8_75oM#Qsh!tnQlkFNi@u zTl*bSvr0v#Y0FL$7u1G8DxykD;^C1^Oz`%1toC!B-(1=C!96MSP1-lAP@wI8+^P&!~F8ixJ-+ zg^xhv2i$PH8ht9>3D_}q4=%f0$2jcQ^S!~1rq7!20sJRL29tPhdN|_GsFdx}Ye`^3);Ofj zrvZ}gKrPWl80lCme@0akYA~?5MpTtebmGzCvy4(I|MB77k2xo4+42$tQ+IL}GJI|x zgz>owy#vJe8bLc~9KerrB?52IMHawof}t18pejfhv*^MXMs-QpLFFkoL%~FNQK%+9 zApAlrF&DqS-OYDnvM~zZ98VG{=|kFX0jhW@fZ%&+@i=}t6LhNg%AcpJEyMeI3eRKT zLqF())-|P_v>51MG%TVjvb@&f;lnL7fB!OGX-g*0!H`>4z zLO-nT5QtI72B4w}B&H8?a}8;>=k1dkm)Mr(?OlVXXJ2_XBzn&IjhJc zv3^7q;ukidD@a@oQC_`4xDplHS@KX)N^FFn`n{B!?p5~&hqJ!FlXQ!`u)jx6-`d;x z&;AJO?YAm(w1C!Xi#QJzwX3nwBYa%|xogGQ_9cfgqV`a#DCy zL|{PMo?l_#0kbEOu2m5$dKU%BMXC@iDw=C1V?`naZ5Do!U`!b+|N0s`R zAt66%BZ?$aMSRZ7Y~M5`?j?1YYy0%FWBVj7JJ?q#I78azUJ81^q#C`*>j!2uPcJuJ z?Ol88&A;qf&z{*Ig;0kOEGm~IdnfuJr5jO*m(^S{iM33|^ToV29|E4Ph|7EK-$1As zC}hpN@K<^J@S#Uvh^sdJfTcmA5Qih{lX7H#P8>d_8%7i}?DvVY1CjH>6`?~%d^6!} zlz}s<2A|$t_T~O4f|EIM0b6B_yBfEW!n(9&CG?u44a27n_0*~_T_)M%c$Hj(g%V2% zU$f%Y+NR`kkrdFvW?O##&OFvP(0!%uVe>T=7QZ~5G)Gy_f_zbwWr`Yibgildo-^rz z*6ki##cH;2O_#Y91gEuRy1OS$1=p4z|!SDLLGE&b-}f$8f6N++0m!`FYPLG6w_9o>&w2 zm6d`wr%$DJz(PAGszy&vPDvIpUWN25gl&p$KnmIm|DL-r8E!m!7Yf+Y3Qsl-SO3_hW&>Py@9n z+4|cE@g^JV-Kl&@t|GwdqJpEP@_V!&xsZf4MM+_h92@ZQR*{F`m5~?<jUe8z5`xduYST9v$Gcvu|~+xw%B+8)*KNLW^CopF?5H z=3#w%K)~vPs`4_gt6zn7$;%kL+zN zwe2arYQjV(oDZ{3$yOcI9L-g%q2pygIaH)AJ?8saUUb$nh7ntLn(F+lvgokFX5 z`XH2=Ak`zqum!4%&OVh1=4 ziM6L9P}!B41pEf3kQ;%ILGQgR{Dp7GV4QR}gy6qY9oGPh~F> zq`IAfwQxB=Vg5AeXVLM{j|q@5UY@3%8@BOqx}9Fj^EOy1RKfgJ|A-2m(y*+jnsro( zuo=><%U1QOkU}pca@(XLrrTj9*MY0bAVb$~zTtKQvahVq6_BRJ1G{Bws8e?V-#E%C zg?Fp4kq>cdrFY6jJUt5N0N7I!{GoIN4GJqCijXsIdq6L(+Uj%kdgMuwD(c#A+7#xhlxT<7IAMbi z_K8DlkY#tfV*Z^O&~13uR7os^KM|@cw-&4Rk(>;3FN}pXT!j-huuJ`8uh~%l7hUfe z)nwZBkLoyzbm^TuBLfITLT^U$DvvNyrFSAAU7ElcFeZbP(3z2rKn4*aLyu*W|FXk!2IM$Dtx*DmU(R>F!VdFwrayna+l3cEC3sCI89r$6Uoz_{_{@6x zWQ5tiqfj8!6*0`@EC(25YUEqUwDvW4Tf~pL9cOMC6J!+P}8D#K6EGdn2bFM@iP)@oVDxvkj)~()2Dw7_vw5Op_>~3qDDE(=% z*)hK23uzw&qR%Fi0pn1pf?NC`^afSM~&YU~MJCfA`+29pNbScs9EoSR~ z#Y$p_ZDNcsN3r-tY_;|Ip3y7FROHW==g>|sIhVmqinX87x@=4xlT`5Usi=j-*mIE| zE^~T2*$0`OBti653r#9k0jTkJawd1PH(v#dWiTAD9+i_$uXd>vh4kdD1-+>em)Af$ zT%!%Ovn!m@oK4v%x1R*(dvB`RghflS5g|)5M}8&-sDaT}=wHg2KHp`sv0O? z@hIk)<$(Hiu^_Wro3l7V7RgDMKMkf8p)a{MW>Kb_bH;TxmIqkMj+$q#XDAC*aU@YW z@kmX;i7#BnP$K<7?!r;mWYESyU^6hwb)DynZ&z**_P!lE^DKb_wiFe#+f_l^g)ksz zc9HBUc6g1*EFAI-c;MUj5+bWKYAHMeWxtmOBW5i2oX$ke)x|MlU?WrSNU}0udCR=U z)mJd5(e*Op9}fIeNLy{;+otupEc!af3$cff#WhSJqL23!KhsFqC{W`!VWHnDV-0iwGFD3f0rDn&#LzoE)V?V z+*FTiwm^7O>_l@%XGmqtxvSmhntjUe-hJN5NyZ4(aYLosB$_=Ui=Qu2j-kepUN5f3 zMhIGbE#3(vx>jk;)#r{(uv_XBd%ZOU135{vcumTh0%E-pp)#nti|8tSwT@p(Z~-#d zYFri0`>jkc4iA}AhEy5QVqA_qq*UI=p^aG%u>pWSn~N2WTpYBVA5dE-Nzj-u*>H^3 z0$*u+>P1975KJA^nIC)~MhGh&m0yL4Z<=R#ZB*Qsh}Q_Dm|5f)j4~sbdT3s%cwRYBv z*oX%v9FZh7oEV~dxWb%odnIh?$TdNXnFGgi zkwib9j=nO&`Dq+Lz52nb#&cUTfL zhVC3ix@20ECgqWG+=#d19^)#inL2^@#zn%dn?=@ync9pOTVnG@jm$U&2*kR@de>>? zdV{b&{o~gT!Oij%JtB_(dT1n^PG>fp@hqsy=nOU=bSBj zfme)5IT$X)Evm}S9}HlLfX%R_S}rx<@)Xa#nP)c3^qRF})3ec@#E1QpjvH_4lz*4Q z9YRN5+*>7Q0Y!R@D)k!*!TLrVc}Kl*Gu_fKU(stiAu=6Rm%$7!p~vIlZa;RtqwP&3 z3p5o_is?WvC^?SB%&rLVq?Nd()0qG8EZKua$1*(VNijweortI2Lwiq$kl9X@cYWA! zhcHiI43^FWLZX=9$X^0A0z0z=#JT~$f6yK50L4TMUkA*jYj5AeXQ)o80iop1K-iP5 zl6c``DFkg@%X!4bYk8zWK;wUuv9{@Ab*E#An{JFSo$kNfdH>cOk>J zCAuOmK>T7}#90>V>^@3hBosWZ|EB{p9}Tnx8t;1G?FxJjx{COy-jAyvog+s9c)m?R}9T-guNu9mjvoIAbPeQorAI3OJXeXeoi5JK|053LqfIiAU*WTX_;GSY8ks?WxqLH~A z;{k~#dQxqqDPNCMIPwbSv+(uA%8{LakQMUC5b=g1@^1YFSj>#LwO7q*P1dHBN<73G zdciH|8zmiij{f2yiphx}4l}Q2TdE^b+!>3}cS6J&W7 z`|*A{0kMJg8f-_{h*Kt642|WGTuw6i!n`}2y9gCTI8qoh4iV;wuZtr83uawhRaqHZ`}2OiHcY&ohe;!ax|m{1qj;6cr@s?oYAclT1s)HHyu`MV~vYXJjK)M zMcnOgKtm(Sw~qAWQ_O5U^1{~-E1YS;2_k+?&h@wv>-vb9XRW!Aau1TDUmteN{miO$G4nLunFgdau8HR z{s&MRnen&jqpuL@$bRq%zIuNsMW8^Fa~#?4znR)#^5p8GgUmVBcZf=qg?oNSvyQ3<^ld8D+EqkUid2?XRDL3BJv$T zW{?XzeIJ@2jr`mQV zh|3(V-tch;$6>j{9<>a5MjyJheCJkkfKZ2*8S|54Ny=Q*?RYQy8x{q|(aMI}NYv=f8+qg|GDo5tibfax&h>{~1_anm*VD;n- zo(CZh4{S7~kgS3TJvj3L{ht#&HgGLX@he2?h2<|10R})J;~=xrGanIA9c;6RmRip} zIK8~)4RkQ^xzQil`HPQ?NYX1e0yRo%qb$Js{^^|Lq8;bUc#@x-X#9=)IO?Qa9;-^s zH+^_xs#Hy>GOT=@lyNUWmGQ%8I*(D{O^r8;oGBt$DOECCb<<;g6?|VB4!P39;E?N5 zlm|izvI#lOxpab^Xj#Y#7w=bME=Nat)PfOut(S8dZuF6 z|Aus0=5mzQt#QX*7+MEr;@?vu2D-c-v#V73H^3$Q##l3-gsS3u-O*6H^n;Ai-r3QXZB=Oj=NKT-@7s zp01%%k&R4RZ2`@VU?-S67WX~F2L(SDl{>Z-kR>_%u;s3#K1yLQ=g}#bk{M z+5xy@ISgn)q6qeI2QujYS@7k0#bzKnNNGG@juT@vm4l_O$r(dDl4*dt`2q8#nL@Xez2g2wgITzk*1GA6RnSO=fk zor3C`Z*Cg5U*x$ERE%V2Wv2zjC2 zb*C5VakF~E@0zb%UR`FUlrAxcAvB zd`I}5Z3Y+~|!$HU9w|*aj2FLwt=QW=}p`lW`!ieB=3hRJ&7pjac7e zL)UaO-2KLr1%C7GLuD3hB(xk2*9qW;R0?phm5-V@RZdojL$jC0JB>?mi8ZHy@|Jbcr} zJG|Aw2-Xg4nKtK93`=@VN_62{!YT^xRdG_ za`p|XidPSf+yB~@@T?nC&47FZilt?VF_$mSU;+vsZNYju+JsAaX2va-A`7@lJEJWcUV|4)RqO<{ z0hHZkl9p$DGcMr>wv6TCI!@|&!c0&j5c2*gfSDuJ@)@N!VZYi{c`)f?!T5 zyuNeG)>t~ksQAuoglct|VsdG88LbcWP6!^X(|&uY>99aG!>2?|`1OcTQpouPyUO@S zRdo(yk1hR=lQ2t_^u6eHQhLCD*poweCH{24W#BDmafEz&K%M=L@wtuhUW!_VxyZq0 zqQgkrD|z<^bzaV*5waC`_!6=EW3N2jXI>;eRE#=F`TRY)v+*{*2G>p7Qi!p`<;!G^ zf7&dm&7v-F3#H@lVSKfT_nx>3Y-mCd#Zk(ZQv_IzYEZ8;yN zZI67#INEvwR3q344vFo$zUjmIia z)TpBJbZx3VDZ$ku9;Y|G@?d7++{&1-D0JYjU3h5H^`1a{w+BEcYqLDT^EdCMT{joc74z&qF)btFH}Q zZ33L!fZVHP)V_f*=2bgdT%-jIrwcy~3b#RDf}R<2WZ`#~jm-hVcMmAd;zWMjmGI4GssMV;gizCev zY9F4iGj*{HVIqLb6D5s2g_A!A?z7X@>5q)DDwstd?5H5munrw{QqNcAT>ubIcadk3 zqD?6n19l04o-u=dzyM!RR1r1c;@sm!M!Kc+RP5I^#c=Lo&96_~roQHeRd&-|h?(P` z*5f*(Sig8?+>0?FTz9KaooMUxc#uxW8(KG51xpVtccx-uB%xr;P?@4ro3>FzEWbyr zDi`8VLzeO|x>6L1FctVLNeha5TvxGSrc8%XgTmcttV6hZgmr;u_K#-IKd6D9f;eWC z-L*%T-1C2A~J zm&`g}nbd!@Z&8BHwKu*dX^B}A^4 z>^Ofa)^vis;mB-QXI?S?abz#6>Oyioqb&Q=06XDrymzURxWCJg=O_&%|J7$wLnrbr zx^^}aiz7x!YoOB+c0Yo>%k4g?1Sw5UC<~oeXNEsqnlT>Rccgf|oQd6HPt-Fm+qg`_ z1M63Jew^htGERb21iYuae2o{4M4eowjl(Z{I?s?=_G121@uS1j>C&*vI45QhavJ%| z7*JW&h62G@e|VkYo9A0zk>%r}?nikV+GaxRQcVG8i=~vN#5+|_L&{EqAvvTnYn*Oy z#)N*KC>pMPz1g(lcKngSP8%gCI1-g-?03Tys;doeC0$S4y+?UciomV)VD~x4H+dMa zQA@x~A!X5O$3nY@{85P9pz_+M52pdT_$WeT6%8JwbSJ7s!IMD7BsexasorA0FZO|q zIN09wbS*t_0P2|HSr$&X7HHCmD`TViuX(Y*rb};YPiCR7j%;;)xS3A{ks!xlCqduk zV72r{tHRzei&d z&JdfV%Fw@;xV^C};Zi8V5fhg4)GW~Lj0%nek}tg;h=!7+0whRqOW7`q#4X?L110_{ zQVs{oufk0+{@Tk*s zl+!wl5_@htKzF(m{LK}UqU5mXz^4H~4eREdu`sv1Sa~3RI`~}plL|$o6CS&%boG45!QY5e5>$Bi+|azlDi>h!lJ3qw$f-pI-bSP zf#k=w42UssdoK+SD{^3sz*ukYewma5mDREda1+C0PjT1FbVj6ST|f&=XPBv$PGfD^2~H4Rr;c|B&9^2{ z)(_E7bVkO`1T?5`ieCW-11l1BLdAOX5v1K2T~6oxtCBP%L{ZJY9~n#^;W;k3Y0m z)lPmn#;)jAQ!l#^s-Ph&k8j#YitkOH$bhRN491D;fzXE{XYGycl{pXfD9ixOV-3=L zT;GPWtN>V8=TRLCoN|*f8DHO*>(cx~{+U`*o_aP&uY6p&<2y5Ma%c5Q4HFeB z<(ToCo#A-G-E(pR`QzaqmuwG2GpN(UQ*_3sNtxX7IQisF$;Q;Y_x6?=ZpoiKDM76Y z=X5hr<{VvDr>kRqMtw0 zwi{jrDB~ig$&oN&{`dz7TYY13v@jQWo)-dog%xtk0qcz=m}o3rKk`@GtXh z=hivC%kLxQK1lUu&RzqOL2MygE-tc1E9!o{Sdqxe7fujywvJDnuXD-w6Od#tC}nL2 z@6Mqv-SS%15RglKQ6rZ=I41zpZ@Jnw$>Y*S{p;OqFZR|x`AfMe~#c}LvMs?T$-=gc@GRU%M z#Tq&V*5Zpgw41s(x5e)I=*hK|99$g0i})Q`xW~)$%0&O51P91nVdQSafttv^(q77uX)AhW~ z0gs0Q%u<{`WB`KHPD8(QJSo`1{;!Zuja2aI`NmvKON@x-Uj{U}q3liax{?%UaE#HD zwRnq7{cwp>N?~b(=ex7*bqflyUS}Il&Id^Yo7Ug3`w$kxx^0O-2kgSyt>$R=A zk~cbo%7Q+vMz4vMg~>xZ#4BmG^?t(}z@E|Wo0c=;k4A!YTq!|qi3DZek%uba_^hB9 zl(7FyKS|#TztbH-4i!(A>>3#U@03xE=*%kRlJ%X#i<-fEq5f}v?+{Tu5zY^m=U7I` zJGiAs(X5|3Xwh77(8npy<}01tJLbN>sQmYoI|=oLyboXD%-WpP=k)ha?>_V>#1KB! zqZ@bspU%MlAExyG|B6q6w|E7xssWSMc|Kq%t$maEI#Cc2O3E7415(drRbJeQV99Y} zDKKfCX|%TgwJzT?wU={HDiO5(`Vm=j}JX zu5J0_?j2x_lK=ucG7t(ew7^yIm(r|cOQi{Hy*28Ux~USK=gMFua# z7uZmib*=V8EW>h2UH_;{t1&FOuKkEQQPiw_b?5l}YnPAnY}=*KT$I z`=}p~EF(nvpv6f$&oG%Iz#viDLNtiawpZ@wTV6!V0?sYK>4f7q6l z>bbXC|N4(v*zS_D=7p`nnG3HIvYaXG7A1+~p!)JHFK7!o7=K&ukf^ZHtNq>4X{5pd zZZ*=l=~cOWWVX=II?u{_m#a6^1h}e?21X1}er`jJFJ2&IG`kdB`-8qP${w}J$tm&q z+6UkaCVLA7A>8mL7YcLRNy-ND`NWWg05lHv1wt`b(Pk$#h!~x zsyx~Px~g<+4hGA0|$hIn?%{G>Ati6-}ZHC}vK`5JeC7|rL zJyq+{Aj1ss;1qkP?dX>H^m==9VtGJlX9LMle|n};P>dPH6f5; zeeO1}*f_j?kp3rtvuB6>uR=KY7ErW~LW^?5W+{BF`9xxV7HtZ`H3(C;GsfsX+x zi@Kg5@_TT0t#)~KU?lubUDoiNEurU_#I**_fTPsrV|}#1Nfm+td%_gpX~8l+hyju4 z*!ZV5jF*Kn5W!E~mDd&0pXNp zhmgF{_q!G>l~H5#c%JuM;(-hW!qd(DEfFEL%|Fi`uS_aT3x0HHH6N3-9cx4~J-w%g z3J`Ot*RH?`#(f2xgBs`D;+8Y*aE!a;j4uSZ62Sw79us#u>#9&5#L6M!#x(WaF6we8t$6s3Am0Y-&gc@~lSdpl~5K8Av6fK3}!f zdPhqMTwJ3yH+7eD^JVjl^v@6Y=6m&Z`(2_<4+pmTP1uPuOYN9JPj=yT!b4ujy%6E! zPL6PDoinTWNj-D|yH{e_RP&4H^W8bB;~Q-QDacHK*Alxp2NI$Mp=y_x@~ej>Fr4T3KJ=0XPnA@15&9*enRWBA;aLRoXYtW zb%>XG*o_b*W#5c?c?6#0uRNGi`BeWTgF^aE&dmHrt-F?vSEsAUvIe(F=pznG#{ z{$YB>Ke-S;uRO}}^_sx+ zmU@qF=koQY=XPg6CQf~%abQYOb7rHjpy$!pP=GXNu$oQ!A2yN}tLgB!-**#xYQ>apnnJV100rw%$x_V#zIL95Y&4YDtGp&@>% z8ZwP@M2G9{f!5^CT4h_prO_mJvl026&bsR|Oios($&ENqmJqr^LCcsbFeyOmHMRRMzp4Eb$F8!P1Mx*kgEym8iptUfcLjdU20*^+g9&aZ zuR-Rq^BDDi%yM^S2d4$e;K_RpsfxNCogk?4O8JQ_hvJduYhc#Y~=WOwwBVpu#LjMvH~u z64x>?s&hP>*m?kiklgi2@AoT{>-{J}EV8Z9=t>SYR7?&CE^(*15Jb*G7Ze_qz*@pk zKFV|Py#pqy_uNWkGAIud${>o;O`5juRkq&Mic7YzonB>YLnv+Fs=M;t)(c~8()uL9 zV$YV6yD}mHroz@qJ8q?#GDooyX+NmjbH$UdEKT^6Y;-7RZEum4Jm3n$t#K29S1)*8 z-Lt{dv#v;4Cn6653Q3AT75SSGZYPE}Gk_wKKJM3^xfO4t@~>d4V%?LU9KD=Df@(7_ z(X@1bS8*H*IwtJ-k*)q*cG6Py-q|Q;>&L!ML^?zW|e8m$y@HjGBQNqwhKaD6c^C z$Bjpo$t=%>Pn;xq{&u`aSnhao{qf=-UM&VgoT#Udxk&H0A7$JWB7gGjKBi}HQFFdw z8N2>uP`HRMq(}x;H&%;MjQ9`Qfj2^dj0FaIkm}G$E}CZ*z;wc5tmL4Kz&Yvxa4bUw@ol zoxG)h6aTohc6Y}a2sH`A=+_t$0{|2Eu;4B%_LMxje*;| zrt7h4G9T5~h7BmyD6y~1hc&wX)B2`Ii3I~R)^c<)O4uN@!O7qIppX!p%=aLvlkW&1 zx;}7?U5QXYd0yiCGn9#fFOugxn?*+HKh+AxQOn>ipLl^~?M&gIa=c!15M6)I>;5{zrYTq(W0TWJ6loxM=csZ1qcc(2Jw`E|=u&;@`K{5p zdWDI4c~AUXaMpxaFTl$Ws_o!A=RvmA9YANqQtqVn2qFfMSfd26t^#rP3%sBKPE0lf zA_}A&+OT1?sDs>v8NipJ(bI_Xb)5edz&4`pQ&(DW&sKN%D(tmL~t$Rq+gseil@2p2Sh&%ea^al`fQt?qtWzKqo0Df!qv{9tm3m;^JW%HxP zT-p?OmIhjs7Z^$%R}X<7-4Zy`VRu!sx%RWYlMLz3N}GQ}eUg3St9! zF;cnh{XjXKkQ0_SY9p#BWLEXkc=V&)MPg2Yfw9~Idypbtx`@&))*?rNaong%=TV2* z?FQC$xT#N0ae|o2M+#j+ON-Hl65ofa2D{|7R{d42?01r>Bd+Wh?^-W}YPyHAC>kO7 zQlmi_s1hkLC>OrgPRb&O9IO<)W5DQ6%Ooy}eX#e6gjyWMpSuX)*^?~N2vW?KW?9jI z`o{1lQAt1TDq53jQB?t`vXPXnOumM1KzQtn-IW{bAl=CR1iuZW!Kqtl&r!I8W4_2` zOH-N)ZL=@L##72kGQC2>H9S1^(bc*$H3|X-_Y*cg@cLZ4EfXsrSQVUr;CxM>QGlW&( z{nW`OXTntinNhir3{?^KWIFH0-@ZW1=w+MHp6(y9>Ct<}c5i)M=3}}5l);;??ayz2 zx>fH1zNHlO&Bw0X`64P)f7KPgF}dAeiSP39B3E2! zt$QnAcExwu_2a;gwj!^A00Fr-+XJfCGX7aL@0&+9Z7zQZZ?pAl<)XpsP?fT@f+l-# z2j`Dt!|XOe<2_LR;ZTS}N`f1!7AZ!KeHb-bxl}d`5jaBPEXc!Z!A65;Iix&QghY6a z4A9p6PyhZakW0ue{9_=Vb#U5S{aa?2Z?+La>Yvie?hEUMiFzp#0EM zzBm|ag2+s`Up_s4X@R8JJFYIz+}%ia)X0mxp59vF5nI0Ly`Z#mz2_JMTlr$0cxkTi zb&UwPdsI+TjI}*)juO{_O{QOsbzT@ig8mb++?;7k4b=Z`A5c7;_)d$jgesyeA_e%e zz#3yQ8y(u*xHki~Uxbxhoy zX}~j8AKOVvP&J~?joiE4OA$X(|AXR@SbFo1dQhYz_-L%@jd3tk7ow8NJ<>Z0f1vCS zRviL9s*@7tHNJkrQY|9>uHxvO_92^AM^GU zIV+Wdx5?qN#R;C}^OgA)aDA)HFDvqwpelZCj6?XWaY2-oRLbBxIZv5NkCGI#ei`v4ts@E*cy*C`?j(JUYk(|N{m;Tc#Jac)u*=N?N}@Qh(Qf=XzTh^tgD_kz>@v&K zsRgbttPLa1e)fZAOeI0F5QXE&3H1DGupz-`FwED0)%sLH4qhW(9mmn zzK2?oNImIjvDERiV>&a`2e3FKyMrehvfl99*EFWDGjnq9TG+|6`YwbRHeA7S^v0h~ zojt0um6VND&0(n2^S>JJ4;=->Fpa>m0_Ra%L>%u&kmscdd;AWBJjZEI;`llM zV|r2%*@(8u{rm?0WEn&mZMc4Ng@wd{#OTv$tVvv#xH6zN>;s`x%Q3%Elso|vd&LRI zH;p}qx_@Kl$N}N=ggz)XuRfia`OX@hVf2S!E4QmuTgYERGwhbmrtFrpH+m71g^Pp;u1Ff8`+Uun%A*d`@f~&z;`+$k7 zPjhT6lx#$~ElutSDI8;D5zOX>k8O*6hl2HBG8rWnUfFNDJ4(Lo)~Gl(Q#mk0U{XYAl*jv(0<0y##L*^6rz2FycPq>LV?W}t(r zs{NAF1TqG)JKs5&`lVhjvg@7w)nxjITYRTh{5kImxQyAyUNLFH5Pk_2aV+S{&^Bw4 zXwDoCS^DPKG#t$C#fXl@d7+c;%9<2MEKuEukD4{*o2rGpUT6d>gKbR${JzXs0iv_c z1LZZ#^jX{eSwD$SaCnnDMx0`zSJDk=>NdiTs1RIn2&m9IDFZc;r~W;anG1w5NVxv8 zTwjXICxk2rEqUU7yQa!q6*IPm#d9%2Kx_Z?h{ur&7bhT6{wVXr`!A1^X2aP#qAA@g zMel?o#_RO>bfyUDYMtE*HdOalkPENL^Fdn;uiA}>+V&T|gsSUaEH$@VdhJmoaVx%F zaiUqLsEIAVda+8zK1N9#SAE~%jh7VaPa@N;mLc>|E~>SlF`um{k~|({$YzM z6KajwAzouywlOUOnP*16JQx#y!&zHaU8{UGuU^2_n%s%+7hl@)UWk8D6Q4e&NA`>v z6F+$}?CmL_)zp9N?j3?(f!9pnJ3zl&Hy3=zk8!XKp+j0B*=Pq2IEH09R&ekX@IxWX zOZ;(+^hq)J{vy%>E&(?*vp-`r(H88xNNFht{BVF}8}JvSVo+hHG8JfSzVV_9ToO1| zl-AtU`FnPVzNw)68<;_%%x(Q6b=QkbbhQ2Aju)2eN5A|wa>M9Lc2Mhbr*c)TA_`8D zvaVuBChB`>IhKS&?dMd_)!%J`>*S0zJrLQ=aJTUCd+237C@z(m8Im?$r4vGWY&$@( zlDankWA9VH{PRXe7!+X~d+7v(m)0xRDB280gGGIt5VH5knOu78{XnRJgRo zuz56S40K%YY3-eXi!%yy!KxO^P~%)CWGAlu98p9)SHF(TSQ8m=VETJH%p65~`e*w# zmAPyD8)N%BXDqJVUKCE!LFLGUWvtBhK$5L_fvGUA*4eYbKOH0jiCXQ%wCDZeD))%C zY1G=9VO&_F^F;aNkcwzcwD|YbUKazu{5Q|JbOAJs#Q+aELsN}Da>trvyv*H` z>Guz#b})-OIdv%Pi+jfyTT`wM9qt6)FJDjU;Kt0@!hY;t*KrK~5A0b)1W686$CRTY zar|EZ;SdgXwB{^li>hWsmIBQpAWX|Tj?KvLmgk(5)|}#-2mb=eeLtaXX3^$MoqZdR z>5Dl!<(<1olWxJFFNmX9C66S79O({wOMx9u9gglYyqVPI^*Y3Bz_rfDY_+?_R3Yo$ zlR6vInx9^EtQjkVd;EsatJl~IteDz^g1wjvVjMaa<(=o3ZO8VU}-Em;TE zwJ;C$%^W~kfW@Y>5ESyM++DKht|@qMVle6`geO}w-^l-g*TT_5Q%^RX+ILyK zXFhEDX#a{|&!Z9MX>l(dN^D|++c`R?^qI< zw7vd}ozyyC>v<-i>XJLyHq>dC46K;>NKn?*0(84gp|s7C*77CCdR4SoZ0?WGhT1en z-_9)}?#EojVtsaB!y za1l}nCU*(2KO7HXC3%{h2c9!sYgqxOIFmyNoF`fEYx#ieN<-@3{wM>O2x`rWc zZ~H?#8s-ux^3gT6*EjyPBRu#E0ZKmWsy58#hm|n3?esx~xWUJr5MVVxo6t(MGaU(z zWa&@S*6T7T6Agidb#S@)-BIc8o&`O3z3=((tM=F51|+36myQhnlS6W(WQU$tZZjemN3wHjPnid8vCg5r(r=ndSL2myHU~o|I7op+*j_t_w;3=lwXHVqxBCS* zPdMvn6lXZHu~S?l$mE!_EV~Ndviqu2dQ;ru{H}uO;ky25BmHJ6ZmoTT36&3{=ZQ#( zY+^Re&IIe5)Z}PDoo)0KY3;S>MZY}zl7r(4uubX6thFx99PseG^u~`Mx-|FtK*yP2 zjzD_iWy`B-UhMj^KhQRuSZW+<_Zla6M{ZZ+mHHMpUb_OTOkL-}T#O65|VeM^W$*T`_M=*yBJ{^qrYHT(!A%Qk()ol+p3qVu>3;YvfU# z!&K64igcTHO-M0|a6MC_z`rE4!cqrDvvwWX>=oJUirrV%)mfe>`7My+1?HX%zR+@T zPi&fNbbMvrdk@uH&{V(i9ZZ0D0S(fka2qn!$5 zUpe4@)^K1zystpcFhe^~J!fQN*>$|E9gNFT{<%#)=P{MV9$32cBF0d`<}9dg&Q!&B zy&$@NY4h?15h}vz9O`=eO(y$@Q*Q1M6rY@_1fxySH@pL25Os&i(|?TX_4*|~ri^x* z%B2l2Q0HPExf~mET~4a^L2~dxI*Hx#j#h-4(FC$NQA`2u>JRO3-Cu!5jv);xu`!d0 zS0xbhD}No-e5i4SlH7j+rS1AISG;`z|LZxcggxOkzbF=0D8zmiwa1BLpmC@Fq9|!U zxK(OkCXcPSDDUhbOa7L#Jc zCdZd~D)qNKRmB@-f$Z-sI7)cHT`85w&I`2)n&g_Oh5@zKv!UvfJwNyai z-Pi&-U)Lo0Z}5Tx!A+A9VYR4S8Ym?#Y(_0IOUno=eme;f7MP-+dtU#n*iv)H4`yv- zsCtq4{P3ZTc;-l;K}$+8!%ku}zMiU#$fh&&y0&c_E_!>4Y$mq|L-HxdW;0Zlfv)YB z8iiqHJ4NF!<9HlVn=_%q!gTKhR;Rd7*r6BAt?w65Sn-|Gf!Yd#38ir#=zxBdUmdi%bRde`SZVaHHNUhwq|8!Uq2KzW*JMPD0!!?0 zyZ0u41v%g4vzaPRf)!JR7edYQ)-1una8pS*Se;g|5=0Usp+Cp>+Is}%Hap2UPgK^w z&!NsX`+~GCcJZY!BLki#5-Dey0@#C!xbuvAcRdiW;yMLp`+y4E@~nmN^Xbv`)^c0< ze#2@74PTOjT}z~91BSl&-!qRQ@@s( z^vctlW19JOEej#g@(X|y$Qgh|Gp{&FtVGf6O)WATBjOp~p`U9szHa3bp=&18*^k2? z`!>BP71pNe!?QWW^kH`X-FGK`eA+mNsN#Co^YYNv^5E%*38EEKREh+Slvf+jAXZsc z?U;j7R)HtkE;mF!n&_wkbtPd6W^j+d@_1NlBNe;iXjC0B^Ol2x%bGNecn(j-y~CyESPDu)YE>3b_{W4C6DqDD1k?AB!}n zJfF{LScXcJ^WuN{=F!pM!IwaJ4$CP{rY6od4hNq!w)pq}&gzAGE%I3&^Zg{ zg5oEWJ>>a}I9Fw8k8v&uSw3e~Mr%rHn*(iB%RQOKDRbf0%2zyv^WKJXjN;52$}3%o zkC^C`|HIyUM>UzR`{Ls`%Fv96^pa7e1*8ZF#7IUNVFV#S=+%IL5Z0EmQ%;011Q<5TpwhQU(zaO+?}=B-!_!z4q_yvw!QZd(Xb>p7Y0D=Pw9k!JD^y zzt8h|K4sX(>tlTRAKP5wgZd^-SkLQ|8mES72W$1^erXpxdgP;QraSGNIF4o2H}w2E z|8Nq}8@VNL;F;SCZ-eT*$xNyiV9tIMA(Gg`{U$I6{o&-V`;%G#r1z9)U($=Ej}`SJ z4>zJGYc{;&hv)Chmr>qdFASXVd12UfTFdM5@cT-nq4;(W@7fvkUU!13gMMR9s3Wcq z%1=Aw{(D`mtpdS~TLfdZ9lToOvkr`_8)9am#wa3eJDNc;x=H@L(I^!PHhtbPU`wSZy&2}Z7TM3N3{Xtc04Qw3 zVaU<~zkW(&DnQMFOr5B#st%9AZ%I(R1S+Lp+DaOfi^~^>hH@t5Nw+CUFueT&A{4wR zvi@Oj)q3Z)eU{bVKXzGrtk#lV6Sniq)i(jYLHAc?JET&wua;iM@LpqxGovxRR(TZE-wB~H40)!gg}&EmVTx!G`qp^=6OhFk(F)-k8&$X zF9~EvL6e|32s`BNE&|xgzY3IrwO%7XfV;3M%Uxi5q>B{JkSVtjmodyIpZ=_5%x?*9 zu)f7V4^eC}rDQzLPuo^I@%inf5BD88hUBx{-CPo=7i5y8H8SPttEG??3*F4QY@Px# zTL<4o(=pt`5i8#wHn^llZ|q4YCeCZK?^;9KW}GBz@FRzMy>bNhrBkTLE6z=Z`{(MX78Lfx%$z!DjPJS9&l~&8aVbXQ+_{L0?R}h|eg_gv z23RY~_Z#WaB5jp`ec59jeUUML83>Az8Q+3z!lPhAD>%U~?K|67=TN!>ER5^L+9D>` zE4M@6KcFfkQ3RE7Im`vlyFMpR*Jg}utN^$(sC{X*X>{i?EL{d=G{|CQJmeMC<_@{x z=pyk5UJa<@?J%e3FVY7Bx+ZTU&R63=6CI8#_~d_CUh?3d1`>H+S;dSaymZD+f3C)Y z;2f7Fh+*D%sxhK2S>^S#eY)#7ltE@myXZaP&mzQ?eFyguEs5%tr&n;^_UpYi9)oyu znxe1Nr`#cCC_OPmR*$}#cr7&J9>awZsDlY?bY_e}6+g2`5@WLIl^QaMag9u3uzzzR z+eCFTb1P3{IIvm~6UJU!wRmj-Eygr`rMy3DE5W z?P$?83Z$2*cY@V!no*&}E z28(EdAmxp=H|@7g8F8M#y45u}ws_sDQKdt22ZD40+wOXf$_%=aGd;^{bcFVM?G+p? za_D>VCye8GaVi5W7^~y;=%c9IQEV_+_>ykdmMoA1_UN0|v$=)qC@G#?{jScGFbvS- zUO^F(e?T1PCJZMTJq9Q-4}mK;A;VTi^I&@H^eZ_fg(Q9fimvqY%1;L?hx@Rvv z>2;myd}ER5-g5ViKUN{>rjRyqB<1;9piu#BSAW0u9@X|bwS{K?c%w!!RXJPlr{`ns zs7FhS>^|2jA9nLD*r7rpw)b)@+q-hcYNdW@Yaa@#$!jdJJzVcZXB1&e$n5%Q`iq)< z5;(j{p$-P)Jl|07QrEaZ@u+P2>vx(6a7gt-j<5!Ay=#G8ZWBvGG9SQ4z*%@uSdfF> zpucnqKkmhLK%TPstuLE4uh8688cJ3Gf-wYg-5TiR5K&{+3HRmigwiH|#J%$6Zr4_3 zHUMm&(0LWlzHZs9nv!U0ctxOgRS*zl&ib%qwsDrIup82U;N45rk$pbq1Vy`w3z1>W z8b`%)Q=>2Qfvw-3Mj9NgQ)5L$`8Bv&4jBXUpkW#?JcxJ+Q`E%E|DeV*s#;3+1I%_E4Qc(Lx-8%zRUEex zuNJ^ePPNj(*FP%nHE`9lB{Uc<9YWehqdRfhB2b+$X8iyroltKpAH5_mn@kyr!qhsKG|)DfOBb1Z>cSwciocGG9Vr; zC7M9e_yD#CH(wplAs!%Yg9CkAwi{8BgDGSuYp5Cn_m%@;@ zm$;re`;UTdPm$X5t`RQH88tp)oPZ7m!6CaDrdYNWRA4=uWQeob9e%4SBwHO7%~tCC zxr{~Kf-4OC^}Cef$Di`8#8F%;q?iB!1l8b{hcdYv=VnaL1W~ZwMf3ff#dU?2iv-k@-rXF+kLx=2N z5dC_iI;?v&DZ^*xM%bs?Lhw|KO z;t?i4acqda1uG~>cF&a~e4WF({Yl~fp@H`WsbB@iP4ce_ABxmLa+=uYaZUlx9CRoa zMC~3Gz<~|UhQF-?}>dQAgT4KO|f1j+OpI-$>y5`Y zMSu97%%diK4|N~7cr|M~Vs`9AUx>MEai2cfY5YAaR*EiLw(x8{$T%)mO4GMNiD)7R zKS=c2er%!t%jX?j4=C0lTR)Mr@EBpoW;EoRGMGk+s;)6+a*+*9?d257g5VP1A{kBN z=y2+T0mN~Hy;sErt&_OxZlNi)-nfR6s?y|0HGA+%w2y4YaFDWs)55kScoIG7G?34= zXYuoS<^c=f^L5;ZpDC;aS34bq%tK#X0=@DW@GIV&6lSIN;!g?Mk6~vg>B)<5zqce( z#5E(}IwK(Etzov!_ir#Uvdy-c(Q%1XawhxNcSY^EUC-6&5zgnn7CGK)-OSitN(g#aQQVW9-vHU5HQxwEn33Udj9H(6m}&pPc@J*-&3& zW;ipLI9JEY8FC;0iIp`LWWT2bO}aBQ#os<%rLn7%JZM5aA@CI513v&r$d|=?EKn8k zmjPqm7XJ}w6mm^SL56PXaS$R?Zt>=Ep7!t(|85ID1~4(tN;>ogh~-F8m7apPYsPPL zaj1hpggZB+nT*S~t~wtUf2u6Pe|=WxqBgClwZ~T-szL+;=z=3zHSQI@SG11~*&lzV z_b%>g-V@$VTaU|ub=#~Ccj1i-Jc}(MIou2r8-cx;$5nSSA zZ(_F%e?$UkHY_oVxtGspl{RHIWr^RKFczm-!X)fsy zP{ru)Y^er8D&zrVgke6k>q<9UNpyHkT>>P*O?m^XOv+)L)h?}S5su9M^rc@qT%@Y5 zb>o%Fn-fbB;mo#_3n{ui}Hzl{eih;K!%v1`5n| zfwollJ|(yKaOMVVYKWzo)tocLZ0!tZ>bZ}@mW{9BK?naIwn0?UlAWK=N476)K2F+$ zKP)66Fzl*~Dw!lGkj^wK2I<<$IN6b^gG=E_T0k}vIh1S5PET#ZOI4avdwS-pe&r?K zw$fOms`2FbHH~3+&&iE@$5V3A-?w=kVl`d%njJOz0y@cvt#fPA{zMhs+B|zfRMGx# zsG{QQkfSdDKoz~^G}1;ePsOsMpMz$gQu?QfF&?`b8wC{Y%&`r(XQ12@eT(5d0NSSb z#+?}Nmb7c4c6;p27@kf$NeysE4^I!@dSK zGBPO9gQ%SqZPBf;y@mfs|M**ugw##w5FC=>BJ$hoJ>Avw<*A3$i!MvkinB9L-~?>i zz<<(h+R%I2>s(81-J4;}=IxvngUbdQxX|2VF2DJ2!{dXRVNdk@!SkU|eMH+#RY3Q~SPQAB!n;?4TOa9gKV<(x-tc0?QgtgmTuSauBL zt=+>TpGJ#x78(_ICo04p(7EBY3CdUNXEiLn4KANM_5RS;pBfx_Bp8owb9EX5nj>Io zcM7KFL5HITn^OG83Rr&^m|Ld4!=c-TzZqr{j&wnWcw*7RsCG{dk zX3Q*p>v@#zJhSvpSGq!QZNbBx_tr=8;~~ki4B{EpX+4>*Aq}=~$cnS6Sljaqxu7w3 ziHNt(Wazbr=uXbVf}gi@e%ns{X35;nd0NhKSDjk&Ejl9cm&f>yoRDUny3W4^fc-s0 zu$nEvUh<_Ik|V4SnlzOC7E-(oOd>IG=cQwcMm0{2F7| z<#hw@+;OkmLzoMnBY-V;rO&Jp#k2kyh|tbFUNBOc*Uv_!QGacn zSE1jw*E&FX8EZ)kX#85Em$eEdXCqio*bunsd?v5%va zGKPtC!{cGD%~|AIc@h@a0rKPu!YYA*%dwJwq^(4Z9)a*|g3?Jp&d?txCZzQqh`1kI zqWVkKyovsLp4XkBplZiT2}OhtIc0zqGq(kw&7@ChBS{Blhb+Sg2c%2cg5)Cj5TL z3y@4zf`9CZuu&0ryhF;aO>ZPP5+tIOEJo_${0&uz^Kmh_1r+_d@A>n=I8V0mCoR%2 zK9oT8NgpfnJ&w4B0kuM$4y8ancamX4kem`b$o_|FNLPR0QAML z0YQnu>>JJ6^qqVfC7&uTtP#oKt+}f&nzG zo%k=6yRewHj+$eC+BcFuPQr;t%^D_5Yi+2|MNFg1uv7Eq5pDm%P_(o=n99?v?=PP~ zz%k5P+a1ffz~gl^*gu;mfrHM$C{t8A)ex9#0RmWJ^iPLH&-*)~h9EL{3xLjp41p*d zgr1zXtg@{ZI&l5Xa=Mk~dh))%eitH4w(FUrYP`1+pFbYb38CPYS^OuQlWnuM^v%7) zC}B?N!U3-=P&)Z71XJQcBCaI9JCP=<$B3O79zEPv0)ThT!pR!D7}3NixN{DZ&(;~5 z&{>*N{)YP1=O-8W?6pyo@m8hF`i?>6D~I*wM=n;tJylKDUktd6Hw5=cT|4m<+4Rn} zwY_ok<|C+h(G48v7P{0&GPj?i8iAk7)yfc;z^LjnD;`LG$p8_91Q1Ag$r%Kfb&<9p z2p~7$FLPJv_G&?_~IMLzv-ER-`4uc}+d{))I^=|Knl?Uc20%-N}t5@Oc zZ_Qh&^GzRY;@jj->?rn4n$aiHoQbR7st$x4qPbRQO=#o|xD8D2FjVxLJ;cto1f1gp z`4|rccBsmEn_40}j20Oh8y0wN8!>SqC7U(gp*w@}#!m&RY-R}|!KkD8PpZnQu4eCvXi0}A{tLJO95 zN{z_bx*%uwQc)O~?83lY&3Rj=j-@QjM#p&OJb}10l2Bt*vE)IYE~t9a!dr3SJ*oj- z12Ex!9jcP6<*nqW#O0@f3nMLgNtOe-y&dqwnn&d^xb3D4H+$f*TY*5g%9s1J=sCZl z0T;l49>!ZnHJ;HT)JHr@aCzx)Q|XGb(geiZt_g-RWPMvLxqlHva)^`SD7E5X+=s)l zo-_0Y%OZ(y6MLp=L8@+0_|0pN#AMtqVmmIZcRbrzxy<6p&_gWyu3o=7B1G@Y<8KWH z@#13Qu5N?#`w&0(M0a>fV|p`MCjB10?+WBV<1-hKTruJY1hc^d7Kx)N_@B7upph%E z*9ABS7UxHMrtq5Vesx?i+rOV=38e2@wbX#cTn@soVWafpZ#!vqhGswh);njwn!!AF zfIpv~UOMdCe*H5@vkfvl?=*tb8+iFaP1#k~DNkWf4$(SefC=jUoZZ%$Tu?mJoLyn& zq2N;3Cg#vFHJ6XFd7L55Gyn|J>ex1X<9|=EAE5 zV4S(>p3#3gls&xk&7xgHV2hvE4yaM^+5r6_UKXJ2p2lCw=0I=Zz1YcVq3lno23@*I z>cAGOuCWGJHo(PkSWiXO!3nHS8Stk0Zg_G|C;3CXUc~wPR~{@&V<0W8jteJ)?+m*< zAo`X5@hwgLkzAlg&RDF+?Piw>Smja4k3NHA0uJ2~O*CNic@A3^HDe5<0 z>~#42C+*A+Do$CNJ#iiS7u77HLR0d^&~!#j&7j~M{r*Sw12u(haX>;Y_jQo{UU+%q zOJV5x*l}`(Gx?d)n0&nhh^tyucz4Apy)$U4(RaK-pMIwI%$iuCyltVJzTb7^Y-!Po z!$kJ;BdPJScS;BPTwf>k9*>e24Ot-zT!o}QA8rjlzX$N)^e-KtGyPhMo5#5MH0tT8 zKCP;KeTKC-{|y^(0)_Bu^7X{+(voE&O*gVpvTG;X0X@%-=`Ovp(;7p>ui@$>Uo)M+ z(|PbB%T1g-ey{B;Z~%rnrE?u6PV#aYL!;)Ve(@f z_AkS;!H}q8_j0Um@N0#17ECV8tw_~D8MtzUeL++ipWYZgO>i?fvQswbQJwW*4b$Kn zf3r@jYVMfuc0Wd2nB&12$uOfRy<>`r$U{!Bt*ga7&OaLo_4kGPwjXi|5!ePx#> zt56aYq<<~|yEZ!xLl?I8{HjA!yzoTYF;@rE`j=JbGK$}1>627TZO1PB#G_#UT3y%5 zy?co>1bu|g+dPRn*pngl`fxAD7-(`dmvN!OnnCWBBJQl|dz-(0X95(6#Lw{{wg7>5 zg~Lx0)+1!O$;_`K$gI+C22=@%1-I^Y54vG)vN8g~{-gxl?z88?k$3u)!K56sDTG-K zuz{`=vGpJs%i>gh$dAv-%gGmeI(PRGtDfIwSo)qQS2s=$3%)OJxU}-p8>=Ysd8|64 z(gbohs4Y%+!n5g78Z6eaGu-*P9`h2{Ek>{wSZs5`u0>C+g!vv57NS(E95Zg!tLksE z2d$=h8XfgnM}efQ~KLurvl_n+i)>>_j&FTVE5x6eU}gYbob}Sg_T!= zixDGfTNCQ>V1#Ih>Y4l*yV>)%kXh4T z)Cy$&3nfOLkGbe*wKAzAvW|{j9wOI!30i59!X=udHn5}H^W5%Xj9!k95jx;K<=yG; zT^dmm>kF)UTHPVs65xAUqQ~3P^~7VGZ{TzMhbw-Lwfb6;hUKkZ*HkjeJpHwW9OIV) zKW_`f251|SHGZsqG=|>vNya&lV`owB;F!p%)QYXuM^5+e1qYW-c=-k7rHU(t*#$rv zYS9NYP%lmey-@es)JT;A|P{H7b-gR#$F_|4E*9V`2F-LWAz@hL9)`@)$_a1 zf_Towde;F~bf>Pn@S`l9s>X!H3rm;NTffCic#U)v)~ZKZkImWMy5d~7{#l4^Agpe1 zup=r6b}VU3*vvi&k~&~z*gNAJG3UI3r5EAUXEEB^3o{Q_x2>Yc^bL8s@a8TOYzF%2 z$%INMH=VJZy8!L99lCk)Ce|T}{d|EA-t&0Fsv)Q44Uexo4o`4~G;;;-14Pr)TJOfJ zy)J7f%qlo46Xp$C>YUdCVK2z4N2}93L#++QT6>5MvyI#1*A&D+Z>AI2T48F3z8kz} z5fk2RD+&8ZkY7V*P9A$}Xws}OMi_p#NHj4V1VN6)#4CDA-qe7?hEK~3{SI-sr)FNW zqC4XTw8pB4m4d$D|OAZ53<;|c*f!frYifE+Tkh3JHH0!g-zOK&i{h6 zIeSL%{`5mwTm^8S?wq96 z32Ur0-vGtTg;Xn5Y=Hds@?mKt{~AzqBgm|q{#+Bpt26iKC;s4Ff+wSpuVUenp6I-BcHY4dh-OvSl{r*Eqad zA{(rC^5StxuF<$si^K(v!QmQjxd@lvc!k(tJVrEP7augbZhx>9$h2L0@l?tz+^#V- z*oHz+ZX<18=63MS0oz?v(js(U(vJcguGj|^-Y%Ooh$1Yv8h)5!M`c` z81U>3rKW)j5-*8F8 zq>q6l$q~0a4J)>~#`D-Dbz)Ek8DWJU*aoaMCyY=g6Jbq^&Z|o%1EIZ@%DGbD%v33) zHwk@*9%yV)D$!l+7978&KX!7!?x_?d{e+Z(8^cWJBFVlg$Efde=_SPm+=ceo8W*a$ zw2(yqW_3#TLv*$bsEv!T!(~}`1=fE3bO*`ocng{CL@mJ<__-hh3GCMd=Y&;MSpdaB zsH+Ogsg{5qzm-cGu95_Hhdq)Z0w}90-QS2iU%|Y2-byV1d_l22pCMG}j?!_=r+LXz%Ao270n7V?dBJN~yAM4B~I9 zkw#9VyVdwW;BGt%gm<$<94}_bTIOte4K7q9A+w7HZm?HBbb}GQ#llzW)8M>8Rlp5~D=CQe! z%T}7N9jeEI<6Xh%meO~Y$JUpj#g{DW@L)E|1l6r%dX$&wC?-P~i0b=1+2ZSBq z-5DbM4G(F;p=hFGyo#c)Bb3G6f%l)mbb_y$AO~YZ%yGUC%G=9MRrYUK3c1U^G-a@@ zb9TboMrj4XFdBN{+1IZ@Omwj@3sAdtr#2HzNWI$Uc(LBe(|10{#P@jEOr^S~zH2yp zUKR>^eV}A!%AG}{JHr9t;;gWc9^dw|A)6Kjm6BkNQ+2oI8gN-4x&b z1&AG?YI6&{-ETARBThxt0D7#Sruq~(ki!5Nahs2bdT_ql2Z#3Ue#A}cij4C^d9RMT zZbeek8W|Ar@|bIG#i6}c9=T6J%_Z^C`OJwe{TcJ|LtuLnc~U-CV$pky>(w0jNh}u> zi-MHgCZo?ecw`3;?^q}5AaV(K8wE=S#!@?zoF#fSaLFr4Qg_h3;>Qrh*Y2lI(5Hu8 zaDAs$sSQImkF;F5B@MF(Lw5S+4c-Q8Wb+f3!>-!AysLpl{z&N$jRLfzHsA0vmhf6Y zb2UDJn-8vpQfo;>^T>0m_EL+v!pPTm0mJAWT=osOzdwa#qnp+N%9psJwX=v=0uf6*LYsilF~j{QM8+p?_VOIV?Q$PRQt#f z7=x~D00D7^Ihm0pd+&$rVdZ_xXwtL=q@jAbf;TEgftuci^OGS^WzHsJG!ub;&vHWCrKDJQU-B}A} zntlQ_Kt2#6Di~C~#?qn6U50ybvh4nms2`H%mwyoaRCT}ra{y1Kca{2lS5D2JEv*UD0n8cZ&~d zK#w=RYahNDsCY%=S^IcLMm=*K6Wzrt880>-c&Bvb=A9v-O#^LJrqYdgGg+p@Y2rx9 z?BLcyT|L{_0^1`(2-D0ar9gghS6@{Z$Si!-pPvNfeWIUMvFqldKAhRrzy&dp83M5g zX7gF-!8Phh0L{vU3?(ao+TRY&aY}acmwx4udVk#Kt)H_t=*q{GJ#PQxV8z+BN6@;Y zPAW+HS6pC#s{5h)2V!lFQmGv%ZP4G@SHIOF$4XM1KuG@J`}7&Rqrr2h_bK+<^>HwG zKJ93Wd@WNWVB^`;PM3Gg?J~&t!fs%NYbBgYJmp4eKU)P?H3&V}2Z@R2fsFk!-YJ(Jus&-7CsXR@Vt_)b(1%gn6}{&og1zEu&+kT> zNm;4mBGnM4F>)}aps<_RJj_|MwgZ-FG4_bY490BQDbRUL^;uB33njY(9r1Yxk$Nd6XE5=v8ANT9PO$APVra+UY!Xj-dZ~~SJn3NHRy)=Hz zvfwn($d1aWMDiG=JL$Kh%w9d!V^k`1OpA^J=>u;yxgSYQUgy}82bKf+60D&8JzYIB zee3bYir&6*`f_%0ygmh*m)MU}&Hkyz7LhZ13!_^UQh6H+sRh|JDDy$5q8pfv5e4Ex zkuEFdbA=fE=?OmWeoQ=qWLVMXe@xZ-w*%jU(M>Xc;P;hUatQh{> z1;qQHa5Tk+3TCFc>DXq@Br_|QyFgwzn8-u7`_m-&PRhAvygld@6KV(&-aA(5ucA`G zD+MkpB4r$sRahmv9q`?T6W*TtHj`78S*3hz4j+IarN2xp+CLwuXZ8&l!P#CMMRXWiw{zG&3V0=NDe@^?|u&A0@|*7zWLmOocx^^cE_>5;Z=B*QWCg=_yO5G$+JKKPk~+lyh8JeGw^5Fr``2@CLw_TGVMAf zHPj>B@#%fUImGwR+DEeuYAbjFkiZUvYt^GMAQ?u=p|d)2Y|umpN8c}>8+t2`x)yE( znjm69{w*4!>@qw&9aD)(AMZG?&!{|iH%4WU1#@v?tlqDPlpSWa_ErX^$H68n#*_St zRyq%BrqYAIVA&C5`qJ|e{v=Hv{;rsXl3shOJs--0W_*Y{4V&>__;|T<_f&4E=bcf- zZ8gUT2d()L`$zZqo54L{rn`DR7CB|dH`y7m1LKk0ZDU+%iMJjkt>St+{Y6fLqiKC_ zf9O6~dxe({V{}_vH=*EqxrI((IFsATaN`5@FKSiKUHR2|Y2L|y8ecdYK2n-+E!EXy z@w}Q`tlF9Xx;^_}^6~ru?R(}*b&FQkKJ7hqcaOT<+;hzd)$MIK)3_&)sQZ`mQf;H@ zHA5Rmp*6ZciQ@KX{?l&%pEghWw|e5={=>gmh7gvy-qKL!{1cG50cfXH@IdaiVHPsH zig0|_27loR&wP*~CNQ6+8bnZam6Jbg@?d;ML_m7!FDXvEpQb+jl(l>e*R_#s^m#%zsl$6XEVn_3uSLVEe@na{Ra}QCh^;zR7l0`8& z?=Obhg6(?w<%Dt^@9MLdQe!A92S+n+}TZ^%%JY&E#zo%_ZP)H#Jf(LPX6!= zw3?^Ag{8g{I6ML`?;X5J1j|7oAe_XW_k4FV)D zw~8(~mWxHHLJq&d>+_2GGx6fg2+H>rwobgzw5}>y>)J(M-!F4u(X{neajfC-ER5X| zxdq7^TX!L<*J-X;o{Y+&&*Ubu+GM=0fw3BOaK(&WDVkaPLa_(!qNp1s-!rczcVa@T zsd{W1kuRA|3pxUK^H;7r+MZ^z#F{(jUKv#6XsYWvI7>oHXVjM1JXLi-VO;Kh?0=Lm zkVAqXghNf3)lWe6t|k5l?!?_-F5MnT;SBQZ`2b+Xr3}IOEyU?%+!GcU%*#?k({{Qu zL>9OO`bl^AomXerxu=*D1?;D;Yo(~P_|s=^e5<5CuSD*#H+in(PSjXp`y!x{{o|Aw4h#>C(L26t9XW5f~mdw;R*amJu|=cc z6+2?(OWVufRFZN$Y_{l7q+4>FCh~nwm zRFe1MH4LvXdRzUJjJ_KzE}T(eYY>T?-k)!NvZ}ov(QS%-Ai&*;l9x zRVwoG>CgAu`;;}G_)7mu)t-uC&DjsNT&R6#0rPAEk(_LcgjC-BD=Ly+f&O|~u?YEq zg21cKCXA~~t)bhcpCk#jF2svGPgoDaQ9)vZr59+BgF#$V*yo{C>_kK!Wh1sEC$qaE zPa7x>2xCvwmN`|xqV_5_^w_HUiE~=7R%i0>Hp2kCqkORvXA;oY-h^^DMyjNe4&X-k zvRv(3NoIIIu0b;oBt1c>u%uVuqM%A=Cllto=a;VKv!DlXbT8nhHUSj9IIVZ&di(U> z-Z@#5$nuk*qq=9oNP)XvSf@z^2gGUkx4hsYR*b1}&qsCorR|>VeW_$e+)nZUkyan*lu;VS4BL+Nl0 z*|=ec{7&Eq?z2e1gTV*0tCE-oAC-FlNz6--bCCw}UvpNI@a}xrK*mja`>+h@}rPymV}jdqv~{J%ieefvIXsd)>h~ zKQI#b-+?Bd|0kfy?O}wp8(~5N(Wtj0(tui9*L3=^LmM zAquvJWXFfK@S+aY5GzH>vJ=C(8Vy9L4D+Dd4a2$6=9B3bYfos8Hqq*pCnfBT7_0z|PWIbd&>FdVhG z#X05;@+*;x0cXI^A~rxZ7nb2eS@~)J(mk7hV@9MC(XFmM*B8WwNFQGqHar+0aGBZe zmoFRsZ1ANZNbElLX{5ZQM)kdC7uzh6hu`@+@f24O69kX4Kfd(DsuZxIuhhv~UU8Gk zE3dz}#scrMSc$HV^K)ePrursf`h3h{i?+!Idj0lXsrFn6mpWbtnHMDzKeBsHfa2wk^k>NTKU$?nNdm9NG(f)p}CWEqzh}c;ku_g;txfIaCs{W%{)t-$6q^$gcbCvHr z;xyYq!FT@Xoav;V3=yLj+)H(qFy#UlR?YHa^C@;k$W8qu-IZ_GBw8S*!=naDX-;qb zpqLc$SvhVGZ2R+$#hjA<*{?<*-fn=QTQ>g+d-+zW+Q*QlGf}I5Ec(!7ht!62fMi-> zBSPy2AukwxpaT^iAfDBnGS=oPs8NtIx$ugICX!~7Q(j>G) z>BTZFyXL#9J!Z+7k00P(?f!}@aMKjHfl_D10g>A7ep7T!rcG}HD8y3yKqW!T^e_7# zYurx01f*xjAY2w6t$L!Oz*5&`!0?UrtE>w@lb+80mJ@gKol>VxeO+a zRj8xVORF|D+0Z2pAM@mquqsZEqAr^3SHs)$Y#9M^pW>tB*G0#G+id6$f@tnN>|3)r z0sQS@Dwv33oxnQPxS^8ki&c>9Zp_)z)&wA$JS)#>BJ8S#+C+dVKc)uES(@((yml zmUt6@wQDahTL4{TWLZ!1X+rscJIHqJ+oHV!BoO@2`&)rOkOq;UbCy+sEr$Pbp4+@WbhIfJs4i=wWh8(?U2*$@$^Ln%&i@N4%sx?;=}OO9NyOOerkz%#WK(w1=1mf zOr2@^RHcGsmgqSSTeKzdjiE&V)rW54HmZPK-?STYDabK82OGU`kSnyb%c}4$!lmdA zuf&@m;$9atd;HjTc->n3wrHI0o~ui1;1}u6)8hiVLj|&1?A6WNzn$UkT7z^rd0YZh z)WK~CNV75noOv@~rY)#aWc9?KOeDSn+fUlqCYq59>H3rowp<^MYk$_KY*(O1DiykV zXX2#YN9ZTv#A3uw@c~0=TVqOz@TO~}f-%Le35$V^?JW;3oT+asiEK1`P)Z*$BDu^A z&Cxs<7%bV1?vbM!{pBm@o)X;odF^5Y8dv_fe5N|LS~bMJ)GfcY@<3e-G1iHaO-gCD zabShL^Nh68BAj<>{BZ(E-`T@Ov948ctwD_e9h&mkrn?0wwg&>3C`mvT#S_bHaoHMz z&s7n=+;C7|M$flA$kQRsQi3|YKK_xX!!bGa;he7ozoTg)apLm*kU1R}I?9+4Xnc?U z;vL`A@A|#^wVBwfWvP};<$wIKnRxOQqP*;Q9;)c#iJk>=W}cX&tyJS|4hBvgl|Xzv zXm@y~YtF*pS3Mi6b=!K6lIxiNDh%geqtpJo@ymZ|QS(17l>W6!=fD2={&CR%&z@AJ z;^__J-)kJ&W(=xzB%ksd<1t5{^|m)2RzCT#rR>_>Bli{Cf?Q```4Xa{0`t5Z!b%`D1mwV#*Gz$nD8MYY{!gH zoZfQ9pwF7=V9xqNRhSzu6*8)nmw=eR^OaFZFly@3OZpL_5}>-NJ!%@4tz-ikRkPK{`OL%-am z9*J3W@ku?gjDgjjQa~cy&e*N3D_Rk23bTuIh4qlx(O-hyo1(ysX>vHXpC1jJ=Abej z^~?RCZZwOKeXvnloY$o$JM6DF)wP@n?}T3|YXaJLf9373ez=IczA@xoS3w#uwQnrD zDK8yh->n>+TdtrN^d+$tX4=u9gTF&4RLBx86NekmYmRS?-EVt zS&FKAFx*u)5GD-FS^eDWhwaI!d=!yUN``xSa(Krr&;+diG93pkT%R6y7xZF+WK(sf;!!F-0b$9IPL#MQ{TJ^3rwJ^F zgN{+fnZM(W&I#p73a{B_G;lH`}E}y z4663x#KY(wguAwqtsxks@#7pNgBYAXFh9<9H3G#TnZfPV{>?CxA?I48cbBeH{rhKw zb41OHT<&U)ytbUw6T|VCLh@|G+H|e3Om${&>Nu87O0Q01%<~U4^#*G$;%@Mp0XKI4 zz6~mp`$wsW%xd0i$JJ_!i7R#S@%3H8pLH<)a;dwW`lRb|+Q;$r)^kl>SYyxEFHv&i zT9%hG^x|CW)}GmxnxH372+}I-uA*x_Wbe~88&ig+>pRJ}8||$I=G-`+;7Rk&Bm>Xb z6@xIlKG;kJ>}6zu>7=nK*1)?{=a0GAC8e}OO;=`PW+S*CG3TeAkS0Gwx#>Qm-4i}?)^iRf0&J8(A zI3B**cOa^0Qi~AfMiZ6y)T`y^P`P$t9-ld^< z_E3cvdrPYOMB|SmZ|I;RuE_s_nUv$v!hj!@Vw3*iUNIPO5hOcB5 zMi*&_kDf>w*Df6GJXWFeF1j|ei5v57rQ!yCZ$2N_XQ~&xO(l7|#>8vD4mFPZie@}O zt^)NGK7!kwjo09zheZ2ls7D3r+!a!;>2Ynkhx+$GNWV;<0{82$Q=LL@juTHlm#sI` z2rPRO*&;*9_x{IwrWCw8XU!%*G@tl5ZC5VMbLE_?b&NN`U;CbLow(BIPW+w-uT&vc zbv7%0)^@Bs+N_N8$ZS+a&a3(3Mrw>xe&d>j4bIwwgNx2K&+8H{&ChHRljOiHak6(= zu9Uobc>}E+w4OII!_pyU4x>JmM}$38HJrzYx&`+@KQljL-g`0yVaVxM{J9nMjGSxf zbF0Q%_*e>@;~xN_=YaHjVA)n??due_^c3zBO>`i8=#jX7rCPCTk-GwofQ^ryYcq*} zNSV+k<&>N4*Lx5)R(SzFY8m7+^VK$a0f=+T-w5J!c}PfFdBaUd(0?1PZ4*ODqYuKT z8MB^|8g;dzxjgc%;UMlyRWr+a4~mbHs=9`BI>oM#YpC#}b7OYxX1!e<e#>^HEF5NTWjibq&^ zn;XHe2j#Q`{rPu3r=witOXtvoBkLxN63a|0v}ze8A|hhn zYNO{O3rVUi+Dd9^N|Gc8a}u`4y@s zI?YHTV;L#FlL*RW1acC86$T07*!`~T$HD-fJB6Dd&iDq<6TNMamw5X|_fiLsW5!u! zAIiozDm8hNrIAlImZET(R1c1ue8_3Neb=GuWee4z1lDva%0uJc@TwxLC&UUC@WbDZ zMqoyY`oww@Se$bKWpLejntSJOzI9s=%-K4|{oM}T`gdWUPQ0(>&uc;gU_g4@1{xac z-PbT87v=%VDsS;@puj4@IOUyl51J@#uWe;BUitxWMl6y8`W2NaZVMKI0aFFkh&`wj zyrv=DzImKs)Mvwa`t=6Wxqqg^?xpf=Rc(uH?|a0 z9AwTuPr1T3W`xIf&v}y(sR!-8Q7iR}b!+YOSaZZ&F#V|49PScR$D%~?TKPeVts;4cdU%B&B(DKls&M(Gg9`*|p)LKGZ}Y!oL9$I1gB? z*&P-B8p(c&%wGCNVGKPV%+2XkPkSTqWYn6{^##9dc5yundFaKFz4@6A(f*Ck0nZcNd)hP@+~pNhgWKH znI57@seZ(@N+at!GA!V7m3S$K8s1a;gk4B_U|*c3a~w_#4mGuW!b`1o_rV0tV2Z+W zcOPO>mHofAtUTWTYLeixyq zJfonov=>TcZ-8XF@QcrsCws{Kb-A1aM2RAD(^a4 zx;XJ(?^or&@7)ES5!BB*$-;=86YiS7x?>)CeIRtE{;c~M=}yv}9=-DY?T8E^QFk=L zxZUKxFGt2yc~#9XTCA{7<${htuW5h^Xkv1Dx|I6wRZ5w0o8m=xmo#$wln>3P(RMji z$7Z?otj(3_FCXXh`{b%IWHxJ{ClVc(c&i?Ub-5YFz2zEbqX%pY{npC9ouzA5B=mjD zAC<@%=L^cU9CfEOIfkN)kG?!UdNq$!m27ZXj1i_gVnWHml%<89m+%%l`2hZTq`3U! zJDd91-BlB%H{5CVw;IG6n{ZayS;{OMFZ2DO;Nnl5f29o_Wh zFMoyKYQ$vNiCtjZzNAJk^PL23Tl0 z+}+o*Ks?Xh@S^38Q9VFNk(^;qBDS|**Y^_%5^V>Ci|TGY55L}cP4Cw{Pl{MT*+bDV zc>^D~raPdhj?5pLqdLnu;gAsp)#k_Qe%@LZ%XqVVTo}gp9%bVngmF@iwQ-GPgb?0x z(TB%F-Wb>63~S!)0eUh$29iOH8z5Y3tG)8QW% zngQ4{Ch%#?K^^O2A?kx%e?elc0JZNSxLu8T;QiQb8V!yk{=Jlhde2v`7Kh{jF~L>Fc7VYH-`|} z$p5LdNw^wB(*4k*D^p9hprbKGoWZ;d2tQ=x5qa(3U(`ARw~u3u>QFWCY$j4Af_D@D zPy5r>T&#;xF1+Km0>f5?_YT)s(%asfl^Oe2C{w1FX$fun)!VEgoR7BhXN=8~-HhV= z%{h&9)r!kDfhyc0=PNRE2+YKsmFlSB$Ah*GHtZhp@#3&=m1*I`#k(tSJQsg;MQOW5~rR|x=^HNPv^$w_Un znl4DA%}{(vgTn04iC=3*TiF-2Z8XgOY8Rnt(c**G!K zslqZh+g8&E4<~*yeG%hDhXM%c1@(ZwmXXIK)yQ}!Jqh>zM9NFXJZl=KbUVC22LdBm z`QG)Sg2Hkrk3L$voiK=wz_<*<$KWEI|y!to_qcM zl`Sdt7pZ@=cJ}=(1`pTt0TITU-wwQvQW|jlv-orOQ?H2@!DUNxyI8QxB30F%$(E(L zZgeyQZjTC8<>By{`X%4CShsz#o+uSaIc2fnl4b6gZg?8oTp6w7UIBTSwm_dcJ|BR9 z6Co)qh*f%}5qoNBHkh}`0_ApA+6p50B&ePp;ZS64aOsE}Pi+&QableB{0u3XdZ5RA zuhZAU?<T&4YfQ?7`|{eG(TCcdAqqt&MSwi!D_@`LgTuFQ21( zc7S(Wtru&MRGt+I9eLb$Z)&a?4L%6$y*^kg@Y#JYaO7&_mDrs~C4gi)20DPrj6Kg= z{J$r2r4fzb22IJv_(cth2TGvi0sn@b}u5)&Qk3IeNNPUchC) z`{bQqw_76>;J=5#rnLP@gem1-p>_dewg5r|CiD8Bl-XvX0`g>r`a3Li(d_nl_D*9{ z#;MpJ<8>XoHBxi>uaDk&I-U6Kj&k~Yr{$=@=JW52d-$i_6&^)2xXR8o8>}3ZYi6X@ zlq3fmm#)G*mZIPSzgn9EAmi?4C<&h5c6#+o#?w*FUMHDWyk99u$}l|e$Ly!l{`f?fNWO4*kKzrPhqPiqSd8i0yK zM}hR4(IqA}7>O%`eGCxIhQa5E|`< zZBGQdi(Y~)fY4smajjrw6Icr$z8HWC>{dV^fr@`0uQWHlBPhgfWi+SBRvoc!YsS0% z?Ll1##-PuYjJ?3$nV85XGL_5>0-NRR**O-Y)+7cZ9CThEgQl z4{uoL5{l`4J~99-Ij^+oGwxM_PJW(d%~l5DvWjDF4$9e~Jd^~BZgW@{p3g|vp)$|% zUS>31On8Zp@2|#0JMk@A>~ar{G1>pQH>7-xShu0B%GVpG36Kos#2n#&mgJfqr`gun z<@FiMjXbKy<0svWi=*+wA2Vk9N8^=C6N1S=_q!dY?SK0tkj<<`O*8tnYZ4?aAq(5HiPG8Tvs zGvl;fg>!qWh_)JiXe%gceYPe@n)D^J^=AH|f#5MqL$(p?#?c@E=vXh(8;nI}_VP(v zE39JCN@)=qB!!YM1KI*ievByKTq1|?7VxKDl4qe8fs=Q;hs6({c{A3)g2H75O`4P4 z>u>04r%JH(fCXOVwcn>oowIn5Ar;T!#N0v*`Ze))+En$!53(9wGNx%e7)nD&8YU^F- zhV4-SZKdcp))V37MSWWxK^t@LH;gHwOJFbHe}G^SpuCP{g$ovsq~8XweP2J6oB4uu zPKZr0!f%>~DN20u8up>xAs75u>vQtDJC%fi{FNCzvfBOg%GygRo+ODGtD!wy-40cU zYvvTUbjQw+y>W2g4VrywOO+3SgnR&{F+2EXQ~*J55$6)|vEGl0NG;1+i+s4=I&2TX z)iP*)g%(XJGNN9d4*S;xhGUzTTKQ89dO_6*Lo5uccbjd-pThSU|0XD9+UoPOvxVY` zoTt`MJFeYH=epQEqny4Vc3h^+=YcZ`ppi0(!JO2mZ#KoX8oz>XFtS!d!fMxMhnavg zC9ekD{%HsDs!u+e@C?%Nd8|pf1A04{tW+9?x)K-8*^+Yw`Me(KfZSgt#@r6%>RS5` zjf3)7VSF>Tm9vcV5vbm%l{a14D$j&@h3{%woLrnV*?9z%PsIbS#tw>eB2%MNgbB(` z@8%(ypZIb=2pt}3LYN@7PBYf;@1fWRA@pVV!X`EXeP*#$6C=O(2F_!R1O8{dhNGaykD^~kqINxN>m!n0`zc#J?4Aec$1Rv8t8!cA z4vY1b&m29NMIGCa^`#l}+Cjs;v00%1!{B*KgY3E?z<)M0RSB(7vWr^xVLI!*XtpZj z-6x&MkZw}02%NC@-to9Auc5fTdE8ZGSI*IlGA0#p}dsSXe1$~}%SlP9)iKzVj$EnbOJzuV_mR-W1HBKFuEP7UYxFImg{d5!_&R@Sz zgsPpekS4{}kqF5Zma69c+vBwML$1!IR6Aww zyMsGzn}U2K9PMIpEPxTvGrI2xYbeoJpHEWC0Mqmn#O9mt6UF982%v!Wa5{OW;4=J1 zbGH?{#IOYX6!6U#r<~|Apo^KYzZ#3nWe)>AXRI2^tOb24_aEMN9MnnOJma3g1$fWq zEN2_-jAx1q0E$Q7 zerjxKXUb4=LfYwpqt}OCGB~ktawy)gB5=0C7CjC~z&k;5_Kjfs3K*K#-DiU}j~TPr zEv{wj&L)-DRJuy#G3H4SbKZSs!(YV|H&~_VQT&S}Vl~7ZJj9f`3vlmGx_eQN&--rp zkPxP1b-hu$cBcxqQI0d4oPDSy^bt@vYNjqP0cx%Ca~{`)H}S2Cw{OqaCRsdwvaWvS z@$i5?kHr%H7@74PbQ2j`7|`XLrTbM`)L0PI8W)UiD#nGQ;QqczbH>Hj_g?M&D3mUN zbck71QJ)XFx1}b%YE;(*fRvHAp=s7jY98H5y0`{|2VfR2e)8p-i7nensa(q(>b+|3 zeuW%Da-ll7NmD$R8AkD?iwXK1#oC+Oyu|NZ5cjoy*FHO~g+%;>*hrVxvL z=DZ(Vby_thW0^f#gmnfuUOqlmE-zoGgM0XOmFDLS#Dl7sWrKM_74{SeLp1Ao>@dH% z!1aiG5glsQ3~wO9+9_Xh8mAgpAV$=L z6!!=wECKu$&tNfY8>x<3K9*r82pY;b$E(VL2JtqB5kInorxP+x4Y4yNLotH^GfgTNALTxje{2n-#|R2Hk#d9c16=La|Td3J$O zPS+oO72d$+d6Be~w<;lZlASW5xj5Y`;P7{1-Yn*ZRT_NH|CyZ%R1WZk*=q4d?^Suu zmoh5VdG3Q0L7vL38@yQ!^)>H}Jqto~J?YJO3T=qJMcODUXk8-QO0YyuYrFPTe!KJ! z`rJ;eejH82WySQeyB9*n%^eT`DTw3^!-^9&Uy^rTg}rmLTdLH|Ghs-AhRKnuQV6t=TXPrnoKA*PsF+!vEK|u{^h$T{9;X+HU=8l%Ti$TRN;c`5v`@Brb3nPh3n7hyggS^Eaz?6kKKGgOw;-mo-1^GtAdEsXGEDf7R7pS)Z&kECAk{tgs>R zPSUOd1)>e!Dc|*D9B_>RzJa5d>S1vSrB@$bD^KSzj0xUXn~2(NkcluArzh6cf9E}_pso0utvaB0YIxb7fXq9gT{KW7|( zg6lffA@w^I0U{UYQz%JUtN?6X7~(Bgzd-YlIjFuz!V%*gG1I5{1R9wBip{>mi1IZy z%`Z287@Pr^9KzIW<$!Yb=wA(J zg2xy6pK$s@8NU7a#o0b_?mJ88S)t3yKCtZ;Vbc5qX8deqyymy#_Je5YTLJTp<{_rT z%J2VfbgZwdCZT>n5?F1x0*Zqn`>lMOcQXAbo}+r>G)+Xuo1`y!tK7T5(!I5IZIQ`t zZf5kF7U(Frq^!SvKZb+#R6xbZUr_FaA;&4cB=2%^ei2lU!u}L^-4}L##V~|A@ulM6fm#HheA~aq$lf3T?{}lFvxhXY#)#F)3Y0+AcPhEV9wP6@7tWvTNS5{rx#7 zQb8;L8wn4YEx=4T4K|m~w@4M5R46~Rgd_t_j~qtB+u=-}=Wj zyyGEVUA6lu`vU)FK^=c{2q>ZdCU9NZyjyuhK)=l`I=O^7buD#G2wdgWjTmV7%(T;U z(mQF;y~666*BIo5&Ka|yja;nPv8Jw>pwB5WkP!;1n0O+1b#sAS;h;0*RX1C5UMh$D zU{nN068%0`Ll}lnM1*>eG-`vy?yf; zYU*9i&7uyb8P~_m z8)XuFzC|_1NJ(iO&-pN8@>)!oO^qp_wBT=)A8L!7A|2I4|=HqSI za}6aC1m=}$@F4Or{Y%`Hh)~+u$Kfm0_U*oumn90h*W-;AqP-CPCjgIxdlS;dp^Su@ zH&zTj1}1BPBHVFSixn83>ipeM3MW%=R%dAQ#OFh~`5>m9l(}BPP4*VndvW{hSE#~2 z8=0U!DT!}2b???g^*Z_F0-;f2J<6|Z$*>>T@gMKHbFD9u^XB8r%?~rF2KMr8_rF4l z;epq~&(06o<3n;wBAwjp6kbKOYZ9K#6)3Vk%E<+v;pS1kH2YvsCihriX^Ojvt{2@4 z96I7TI&S=;wIS^)*@Xl6tMnSRZHqc_F00#I4+RJY0jEa9zGN*F*JM#byy)Q22mB(= z0-3zF+?JSQtA@e<`VVl1T3qS>ZEsJ-Rs0ot^C*V!?9h5~U_ujVJ4695U|C^EOpCt1*`phu7gTK95(6)5>MF z-)fz86+?gKbZ44RB;AM0LDgOIhW!28BMLc9YU2%ap2Xt*I`MPE)3DmevGpw$_^&MP z%3#OMQBZE^ksbk!EI^Lh{=p;Svv2O}y?%|dmEzsNaW&*({4!-S^pKc{QA=CZmx+C+ zxVn9gP3!6!1*c}rDA@BH>xu0o!@q0CZ`u*3tP5Sb7UXS_6(f7fFt;D;7?MT+L42I4QMkEebDPS)Oi~;V3e=tuYE8`6I z0^m;v499>FJ9lNmXa!jSb)&EKHr+{FSw1Fy7HZ75yif&eUigAlSebD3BskuGzyAK? z5gXQzYat#R(yj`C{ni6-D&&fanfx%ef>|$$cs@6c{mwBqG#w5zjeqWw73ToT8=7Zu z2PiPOZUe^8-7eIZ6gVo9J9h42sb6uJzG1BHC$p6JCP|nf4Xh`6ry|g|+I>JlO+QrB zkE(jU{IKVs6+i|(U?Yddjg&Bm%#(FB(fsI@3LKF9j}M>gyFmNgJH<*AT|;bUr_yY_ z2ydoN##-J?zi3g5%uReei(^Bam~5 z*eJ^*5Z?_iGSpDhi0L^Rp_zku^s=tn^(bM8Q|DsMY> zrJl8PL~(HXel&rlSG2|PHUlPFs;g42xf))UM{o83FyuW;dc z;1O3e*vt|paA=0h4!}i1H2{M?fm%=iwy*jxcPbJu68w4d6`iD`(|NuX!43?k)CFxK zqBuFVe0Hz6h8XperNjY`J_dmm`wSf(J4oa*{f5InAf+Qe)(&JOm*(p9G->&dfcZ3;fz=LwDpPo>*6x?Y~%gJHm~B z?9q(`gZnO7dLVa9nXIuf4(3aZJU2nw$%CKuWm34LlEy(fSgoda;nkLh*bxGA3|cyt zBHz#fdrYmpDK)*9*`3_Kg&4DTfCESZJTyuV`YKB*WI4b^IPci zVh8CR91A%cy5ax+557AsTKh3&IW)kU;5fVT^z!Fhu=Zx(wU?C8CLPeQQeITJff&q~^%&eY&bO-c;GN+c55(;^&Z!S0Xy5aiujugw}~;g zAZTzXy#>|UT9fU$d%sw>p)Fel^mXW14c7?&7qBlDwLKMtwcy*`u{FX_M-L4bod1lE z5`@)bPw}<0*;7D>O}h(-9py**@(e!g4cnR>j@GAy$o&=+ci$CF+eaPST@e0Sy7DfOu_nEA!k!L#vz!-LN&N4T4df zOZCPpfbf){bF^~!^U9-EPQ9#ImcGWB;8ih6(+2?!m>iCleUk*myLba;R@I0#KA>Q& z`I@XUP!`=*6=?0prErT*tOFUEND9{ZrO>7>wn`dnTr)*xHK1%Y4jBNwe8)ij`-obE z(_j^|^876J6sKc$Cn%`8x;Sqefok5#T#AKq#5dqjSCE7y2qQ9IF7nBKFo#1jtdWg%u~GcifeL^0ZjG= z=Uhj$y{xfWy`~R?D{(n(tME=5h3Ut{X1aJL;GyRKSl>jZRhv3>V z!cFoUqg@47ft|xF*7>^Qx6*ozuR)j0#4V=DQ?Ct3_gCrhXj#mCRq#t(O!(UK=lW3+ zD-GT4<*~3vJ!_wY^S&SN`rj{33;K~5^)%_>Iv`gEx7WCPKZ{n%xasJdPf`m1z7(+J zt2^&ip4PloXxr796%2M6snSBkx_JC~@Q?6F)4PlbTWz2oyZNkZP^!Zqb7+}I+g3S0 zcv6u0A2-paZHn1D%~8Z|Tf@5Yslq9S0&i_^=ZyfRG9~lqYj`Ph&xXbMgK!z}FbN)} zOoT-ffSK3(a1T4C6mr?tq|(+J2T4Zj&C_r+d%1JIx+CNc)(8%=b2h9Z-pw$+tOTT2 zBL>&hcL#~wq2McjOMpD;lqMDNl*+W^(ID3<6HK2gRY_TUvZ0$v81iR;Ih=bQXmc^kRFR^gj#{SSP zBg8edm9L6$1RAnmef;N};yZGjYS5|`im$zg!&{~#L~!HA-B|5ofpA@`uv34IYlas3 z+vl^N6Nbi*02mj>4E63Xy8)KP6>F{M3H-B}B41+wqg%3JrH&kaglp-#!_9$POHp zZ!saeldPfys^1F5k~4j(3&)#ZM~RDnVT*{-L9XHtR_DU-6d-!)0aD(M@Q^|Ad#n1H zizG{(99HD(PI%sn;EzBYN*nEOG8}Qx;jH7hKp{+Q>BFeXQV%Hkba!$)bLthH+~>x7 z%B<7}O8JQj>krmzd;~!^o8Al3RpJN%U#^k(l39o9gCXHc`gJAi=FNYX{oYYI8acFl zs>JS{pK1#x-|w`S59S5=-1E2@;z4n9T8X9ZC@0m;b!k7oN?h!EN>YLDVt%#tSos>o z`LTq9#EokFi{>F<|1l&_&T<^nF8qZF;iXu#O6 z!Q(&|77vdI?1tU=Qgph|SxNAiYm}W~wRkw5Mt0r}31UCuU3i(WU1jO=_{-kyMd2R^ z%iVU%%xgW}`%a`?*QXkgH(wskhCcW5n)iI69wENdbWqi!hu9vxsewk^+TRa~T_}F@ z!0YLM`HzkO48*s5x&;~qTs1639JJ)^rW{ItsGe}bcG%GG1K9jL;jg?;oQrlRQ>Rpg zF7u7;`v9{UQAptZKxAeotk6t0Ig_Ns2EoX!N89x5bpJxEPf9X6zU5UYW^rUdtFNUs zEq;d0EwSg@7bsg9)x(HTN6?o`y!BoF(?TE7u&d4MW(O69X$S82hdFANNX54e5nzAX zb8o5Ka=tk?$EQR&d4lrk{$Bg~g}E2(>=8CGZL)TK;)1hAXljf%5n|s%_Kr%~fFP6FC%T6=+ySIRulVdY&C8dom<8-R};2+;XrN&$!w*E4|J=XZnm2w?Gr?k&OJykLHbiRkodyAF0YT z9bKrOEx0_TR78SC#ye!U60uIFT_tP4$>hek?uZu5UJ_aCVP6L5Txytts)6WAqzk+G z6->0A%}bqEbPQXW@k&WXUB7N!rExeqa4Zq`UW51TPIX+>Nuvx!ti=4`34scu>__1W zFBtNzD6Jl&>EG2qhmEKexF7zw$gg}{FSL7UZX}6$;NINXI=hqed)q5#RRTJqDWZ@S z-V)dup*UvM$5ms#dU3fKZADK= zN)E;HPEu`s*oI%HdT~l&W`dLX8mA<&bo@vzBZ9)ZFn%FMViwk5~b$7P&xJ^yA}Cd4kjiAvBJdkKW5< zgJy+sbpjPH!7an;=+gpy%IY?Fw5Sz;p?X=hvgIizay34Y0AEy3jmXxC2bIm#D zJLu;P2#W<1 zL~0mcni;M`Ac@7vA*FWmLo)nGgrxDd%WV>{#&E8CrHY8N^^1+Ln6PSlDON<>0_Cfm z^AQor#Ap%g{S&q_O7|FHZ%JUxr6|w|{(S7%HFyKZ*!bB>>>MqZ8VaiffsTJ)s-fKa zpOskWuC1ETIZ;gzG!kk%yY0v~%I%AYq@haJW8vZ zx=meACzA2##2iF6ZhK?D#h|e0_Zx^{3#%({hS(JLm3N2$ENJ(dl;6$0reo%3CvnHm z-ZJ+KK=_`@Vl1%0JD*p6)`N>Geb9sf!w%Ta8Lsz$wpE{RP3*W#PQG=dwR=}b#Zd&Q zMKLEV(q1mEDXLhNGEU}?e&I)Q=s5{|OJ=65t*-DaU!GF?8Nly0W=a|fl_V>;2Qti? zKM;6AG)FH}5u-CA6YwtJ@y5o{MW|LXn|{)@_T6)`M}v#RKxKT5ghs0jf*UaNPPqs&nK<|~}Vihowb?dtG6 z3Tcg+K#R(hvpEuXAZ>Kg2)8q+g0lT>*1YIg$cCrDM!$o8>>budaC;@0T_p|3tcDUg^a@v77?@YKhBe6))f#5dmc+|ot_ za~6H3oOD$6D%aYjw?hu%4p-SNB)|Cg7x~PnA{oIE|Cc+7cK`t6G!C{Y@ys;Mxs&$-`q*Q~~ zIJoz#&l~^Zjazm#hf3IAyMY`0tMucClbI(wf=GP?w)SJ*4;EqyZ?4td-_>_GT;wr0 zIE}s?1iOEp`ZTCu7J*zx=rPe|vF7g|@?Eqj+gnBvK?+V7M8_%BV@6=s73xTNm^o65 z6_)%Ed^qxyteXQZ#VTkz%Ps#NM&JM7?Lt6Q`g0di8 zP?j-*Mm5?RrZ$A@cEjLCev*a@vn>Z@edZe3*ud(z0doLfNl1hy0`AvJJz%nR^axer znviiC;{MMz{&}uytIUhe7TU!g^)Rwoi&I zC}K_32gjBEf95SJok+){k^j%UE%-n4);KFsB%6#UpkqCUGNagX(U}b^5#ITqJ@00p zZr~NyJBZ+DdGL+tp)F6iN_ibux)R*D;qGoq%fai(X~nwA7(^h?YCIPZw39H(%F0g8(9=YggxlL3JDH$PpdEay6#((%klj&8`3N(Q^+R zsjp&hy46f10^5$s!J1H1sPe-0t$o*z{V#XU*Y5kK=lekl%GunVM9M8)GoIIEecfDe zi{fRVd_Z`SqAGtnxC@gO&Ob+YoKB5Z9~YU!bZTq7Sg93-s%f2w{lIIi=}_*G z2k8$*zG^hGv}_xmB@w50A5^vD;7ApF-$M$4ipRVcKX|AQHRoB8kit^en%8P=%XaOW7os^Dvg;PTv1P}b ze(&Hc~)}-lG-Jl*Kx=>p+sL zRwE|)HL?R8Ru=ETCr8K40w8{c8XMnAv~iHJb$G-H^Ap!h3Kb-jsUZ7GaD(qV3M5IO zxoao50NjQkrEOIOZa|IXGhpbvmCP3zHpz?)n5ajfj2dDg1^9yM3GLzp;F?t;#;;es zv^pl;XDPU&FgsSQYbmnl9VSWvFRuAa`=Ibb(62}looGbIdrD*!-z3THJeFkr?1&A{w{}(6WmDJse8P=yUoM8% zD6&GQVc`AOdU`*rY(g?#*qzuh5)-5hA%^(J=wQqVSmoh+au+S}$$gj~P(m#O84QYGBbaw(Za`IF z8CWv8zAdmoiV8rCg&9o6<~AL)?mS{^*v|LQJ=4!yz@6#M|NC{H&qj``oP!dqiP&}` zG_YVKLKjhZnil_9%15CDoVs@Q3a_2_s!Wh~I32dwifJq}wjyktbe8&AkKGR%s`rEU?no;wvuQugNCD?S0q7jpe{Q%O?h}7G-IO zLT^hPbHtSH?zt>Lo^fduih#&LnDdL+7rj@Wi7r{=E{w!JY-muQU?eVizf+kWywwS)qChSP*(e1*Ej@vwkz$FSebY zy=PZw^flfHU10z3FD|@Y68HR+L~K`^V{&2*rL{RIG(7-i#=}6>eECV^-(x=nh;`Sk z`!QC)s}G)|zFU2_M}I0_7+#&GA>`CfsOw2NfRsJUeT`(iF?oV9UMBo-`o%&*5h*Kl ztVB;vbxf&W>&)9#cOrDGL`9ix?^}U&k}in%-IznKB6XO9&6$6;2Yma2w#%zh7KT*o z3?(XOOdZPeKINbXe{-xAfY?<9BW1n#3U)Scli4oUv)ysHP2>g0$K>U0@m#KqA3IN=q^dsS4Y={YeOJAnNfTS4fQ~7&plH={46XD zIw%xcb2=VD!}t+gkzDTlfbyE%iM~((N()Nu;^V8>w{HgXE$;}OGn3g<+35!F?{Suo zY%J|elGz8yAxm`y=iauN4+}K&l&e@yN--(a^V*LKCbT zMCE|JaRE-1kz>p4FTg3TWt-V{S2Ite){8D1OBw0gtFHsSB$RXjYvkH}g#jML>u@1PSzX=`oHEDKe3~fu> zL17TGJrDM1R#C70Qv6b*xKj{8pSx=*Aj=qrY*Dh9KGg~y_hpK%RvpJWRtvV6WnFiL zahXprU_kx!gX28hFL~qcZ3ouUkKEK(jb=7tO99*e<#zDu9;e)Fh_g(B0yktH^#PwR zb={O7#}rgbzDlj1xD{-0;#h*KsM}z=m5^&&i1t?rYzi1(|GV^jf$_yq3)tjD}b!#rxz2M{KMjqe5k9A;ti zJ~R+R<)~mU^Ojklyi75uL&F+GBU>1!!6a-Rb0A~>{pBL>-N8cjlh=a0sJe%6Ae zpZ4C~5PC}VEhcVQdd>2B?Ckn|heYyYUFJ~Ox?l3OIt`fuCQx~ki29U8Env=64qgz5{BJpZ5tsBQ}H z(@?0{@lH}=t0 zV5>U#g+>=b1m}6qERB;LQw3GBSR{|YZdeBDR2h7ooB_oP>?$$LCpeGrd1O z9~9U4C^?1?(0nRkorWg~biV+sfxe@@7NjF~uHtN?ts48_>8{y9)gZenL-aMq$7iN` z2I|EL@%Q5=5>j88=kDxG)6F0K78@#+jVyCHGp`R7W#^b7kE|*D-Tmj9tww8*W8u5g zj-N)ff_}X_wh`VCb&?VJ_cKmQ>!+-(6H%vp>E%(n6Ha}Z?QQz*rYaioM2u5kgjet1 z@ktf1hhIibh;q0}J7XH5I*X8BeV5^cQao`cOaUyr>LBi(H|)b4Y#5i_n6K?YsT$qQ zyaK|%KOT{oz}MsK(*8jRtOOwDq3oQYtwKPItrBljsI{b1@SoXH+@U}EGvc` z!#-#NwpS4pVjXe5`Eo~*AeLg9PwfXz4eOQFl{Qr6Ogl9k<-6-k zaXr4_PgS+K6k_jH5#YNsm7~!Hx(B^Y4HcAQsz!l(WC~v+OBliidR0KV-(Y9z7>2-5 zSMB2wi9m{kvj{bB`doT$y;5ba!%Y)8)8|o(AzYgKidHFq83#$JYZ6*fKk}eOQ1(PG>m8nOVB@k;FM)Bo>>Yh}XNwTf_@BtJliHU&o}U`XSs( zN)yOyOms)qjk44m3ng!@-=h54jeyCLNoll&R{)pV5xSEd={>|?riRr#CA7we;;&Rd zQGDK;1S9pCz9`vV*}_4CW2Uf-2!G1=JKYN!8;sy~lrGynhp z@y>KwwN=#~+jLR;)`}&yyvmdjl~{vVQq&UrmNrP4*1k^>TD6QuL`1|EN-dQHQ>u!f zrA4AzYb7n3mYVPNKIeDN?|lArEJsMLT+heje!ty>Upc~v_L^>FO?K(3eyQcjBgX46 z)GtR;g20t7mPA4IIfyz#5x9N6&Lgp^&+%^fDGCCc1;858@-+We&xw(YUKt`b&6VBZ zD~Fr|48B?XtlZw9K+gNC&d<^u(<1JT3{;w1+=z;3d6WBafO>6NBY0-UY-OOGyb^;I zTpxA|Ors(?we`j}16t)@%HV7@Ip>tF+cP@#Oskc&$=6>O$7Mjw(%V4~VQ7ea;7jR4AMwW4@lt!-taZ5?{JUR8v5R9kz*M4r4y5DYlB3)cDl4m5dhtp1Is z>=3%(Oj$*6+OmUgh~tzw*njz%{=NOw(|U&%cLJ&J?3&O3gg6cS?5_33;)I*_X^Pb1 z7!wgswRLL*q@ZuBwT*|NP5!}CDlGzm2$5PRd6`auMOo2Kz^Hn{Exab)wlIn$E%vGzq(omAQo)MH2SuCB|=D>{MDUwM(FyKcL?S18kv$WF#69caFJRN#*YI=n8G$-Ky zPB<~UD`H?Bade>JS)$SjfV(1Azy6vv{e<9{Tr-$@Z@=c`KXVN1x8bET`n}gI^2Qqk zqtl$vWwWwLkzH>iI<`%KF4eMCR=-N7w7Blj`1WuSrYTG=ehhp>iuuiu8P~jOYjn2? ze6aB_7w=)!K|xX>Mjz%&SD^)_jC2`@d{}~pEezvp<^g=>#)_?B14#}n|C*FZa_m?E zC2SxlvLEI;C|*6UuF#M~Xd6ky=sOnQW#DQ$HGX1Pol>L~|Bf zjqlz4NAQ&!eGgNh$|z4cF)-U}3e*uX7B;N@Gf(Hha7piVWCivUXCmL|r{32;XTalO zzH+R7$yVM(Zo=+N)B_Az#EahKk7kOBNC$ND*fEL5r?H8a?%A1kX_?1`U7F7qwGF#c zyhUNsu|>k!OjnkzVV|j~Ys?hg3sH87QeeuBRj7}D%#;Q!5E9uFvEhn^L>L~1(*+`+ z=U~_*`7KLbr6-#=oyPT%V5GVGN@{Ak9L(a5TTna?#1>)#M};;m=0_woD$!`D=EV}0>F za(*r1etl^eg2|1+=Ee~bGNJ6+oWT`CPb9n1wK#$DVme{dw#qXk%egk4dao35K{T5& zB9u+?ebLjgK3khZFmb6Qvoj(r^+hv>ohUG;1iopKYkO`?c`16JO)eewh#Z!4l;ed2)$CH;y zTHcZI!^T7T6HFRt{dTA2W%?|}H=K1_t}`j!6rLa5+Bgd+LC294F?@;R&rb^3xvxhpJ1xELbhQP$fg0;)uY!BTwhC zntD9Tp_VVWhGw^7jT!>OAyInRo`<+U4Bk{w7l8ZMO#Gj~K+Kbx{n;FIU_Ot#A-F2R zkWj+8324+_&`wsby(;U?4o;}{(7`v5(XZXc&%Bo?^C`9sN~YM+&upcmLGli0!AP^x&x?B}kl7SleL(ei0&!L`4FKE%oD^<{$4FnkiB+^p@ ztd0xHt@*Fg&-SJik}ipSL(Mv}icnD~0Bweie8?X9)b0<*N4;2mOxm3Nr$! zUV_{O_}oMey+Fc;f8ryVh<4ck6|g~f={-R?Br$g}cZDHq>|xY##Uhq-6dvc(_JUm| zC9W<@o*cXu5WBmY$(XJMm3}p6fR*}Ny2Y-P$#%*%scDWJPkR|-3IRW+Kr?jaGt7+x zt?rHzf$_PK!Qc1@N9a`UAm_W8Pw+;P9MkG;AV;48&;Bt0+~b|}3@bzK)0S0F9zu+- zEL}6sAca;7PjBz$X;anV4jQ-GX7(brVXuM8=^5WV@;RX51OBIRe!-%|{AbC~9NE>F zY}O4od+GluP%&=R9X;Ho20AmKreqW=-^*0qT9MNPfMS?Lc1aUK%>9&>mxX>}Q^_yc zV=X07fT3c@BlA4fcTd? z-{tVr6piAQ*zxcwVtI(p$aBrG{6!h(+p_}^ay1L-@0WKZhYxq>lsaF5KJizyZV!}*kiyYCf`b?nkGCi!q*n^8p`?y%= zTGbdb5r!AAUjayL@#**bjYV!rR$C z&cz;j^DhjlXm!otlv8WOmp1gB5sd+?#q!b{bGX(R+S3B#lF*o&74c&Jnz;W~P+$(rS$XbY6D zS1YF`31&TU?uZMUTIa~u7kkJ(ZOq+pM@ujso7!u z=Qu41YJOCR<>XT*!l^hIUR}gU^O}E)C+KY>e8m!T0|8|66eZ?D;RxhyXpdEjGj6$Lf0&Y44#o2Wr8|5|7aq{Im$sbiT|S{*TeG} zCsuo7e}9fS>r+m=8n^~5P5WiBS=KeI9}=vZU&2!q>2n+&bt2oSMs5vMm=n!SuCiUQ z>*8(wAXe9c^N}BZ(6_4}oi4e!c~`IYPGs=kU>4tYz7Ydr(1qy*`Jd7{ZXI=rgtb?; z%%>a~ct+SfCcS*pfQVXrb$b-7InH$p5jIynn9nc4qT;IH`*~LHjy_YhYI;|{X}Q)g zO}i*S{(0wK?^mGLBV3-5^1A;*$>6xq;YAR^eooPW3B5;|lH z44S^ar$4=~{vf_*HGSu^Tc%c>+I|T9I3gjoJ#F5JfdIr;m!KON(D)1w1#A1zX;>W+ zJ>`jZN8G7z%}rxKDw6Z0TY;OxxHjruuFAyYdFJC!139VmF2;YyByd*U{7=jpRh+)y zL0~PA@(ltmLc<;)^`Z`OxC1ZW&y>G-kK>EjK@CjOXth&%yS`TuPiL-o*6%ki1+li3 zyx&Qy!Roa&@;9u@j$ffZnm&46`lN;Ld0J)s>(d@g&F3%({_+p`+ubvS99IwAgR=e? z3x@UISMr~8YP~lqX$w7gAj7KU?^4d!Bx%vX9|pjhw)6J1B%Ug3APXhEi#ET`n;7XA z7i9f&J<+(vn7;gfoDA)$fPpTND4kpE1nq^*Kc4*sQHY#(Hu5j+5obam@%g|hULAya z@(CK3=S-1*<+iF77dGu&86<4lSxV68bG0)Hvv#QhoA#7ex_fG>YehM`O?4>NC?A@%2&i|$8&MmoqQDYOaqUjO{&Z8q=J)M_cZ*8N z?75XLPg&tl6_F5A?$^>*_aJpK@SngsOvPW=*162F^kZT^d91n+}be&Ckb1?=|1-+*z4XSoZL7xP;BL*E zvn$(9JI(ezxyAWaUIE(v7aXtm6v<>Udwp@2GrIfwl(euF9g*9buVEcraX7xlntq? zN@P_1w&_L&O_M|%=3z0+S(g9iE6IX)1RKeWA!q8v3X+F}U*)?XXqX=DvnHF0`eqb5 zny&3m`Rq#6aR+%;8im0S`D)qBxmv&bB`_+8-FOWul^3^w3l&%;a#2!(%hOyM^D#|M zpbqbu=?&s|rz&Ejq9p}zhqi*CUUskjlM%8pvGxtpc3o|JkrWvj{VSxSP2=VbhBMi^ z`O;Ze=44G9)lU~%pjA0@ZfnEcBVBz0T9+7f@jH1O$-f;5Miwg9Q@GN8DrxZfIoEtO zA={b}*9!1CjW3$&n?=czjcZ4a-z)&5pEDIj2e8wRw|*dN@Q`;7FN^BVh>F+XFhf5 zx6?d+DInV3StYv)<)$m*MHfNT1GH;q7YcSm@y| zHU^xtl}sxonaF=3kClGhvI0^IZ!fr%F#le_MGG*Wur*wG4lq9c*`(*&y4WNM-#{xW|IR&W6)n`(+n&FLiNV6ETjC8(m(OhXct^-Q5*TN zxa(PHsQb61ttY8aujx-wABH6le zyZ}S4O9I;VNemv^L3EMPw7%SqhsF~SQt7UxYS6k{CF#Y_0VSBSghLv~{*F%MZ;{ar;dhc$a@4ld z!X_7O+)Btr%$xJE1wN-ujA)3tgv;;rKs9Z{){j@+*SS}8Zae-}bdk%x0?sSyAX&#g z@F**kQ^;8m+uoSpf2 z&ifD5rfgggSO4Up8BiYOYx@Yomx0Fo$Z(HwmK;mjhT(!n3gt!ZjzxwX=$T%a>i^w0 zEJdO-ck!!Bq^+anoKp_h5i$D?B8lOB_x*D-XM6_vR7YChRnkLL$2Uyj_IXLaz3UYm z^3+R%2SiY=r@5aj?laNewZ7GUd1EEeyG;7>ys3R)YjK4q&H@KJZTh2B-9wOYM79nq z)0`p0h&n-HQ7Q?wdmd)rAgGa=dp{NguPhW-R2lD)@T@a%3}3{;WMomMKlRu71;vc+ zr~LcgVQpQR%U$7DTa9|2w-;WBj8QISUV0O$V=|}MDb6mC$^Gxx!{~5JcM-oOf!|b= z^JX-4UyRj1I_Wa0|y z7lD)mpvoOV&K#+QR_s4pKB$r#Sv<|&r6L!YKgw$A#v>z>(anGA>F+5nj6F>V_xAj( z=n{FH75>Z8lf}9_r$*~q|F$2-YRTgqL+wppyr$Vm0g0p`%ByNsp^UOCGFLU67_-c| z$8MX}a0Rz?e;CQ!M=Kzup{}BhwjG$|wy;p``G_ehf9WIttXp^DJiK#qAXMU>$_3uH zY@9b|r@%@Cyd)y9{i19&l%h5XVBQ^EUgN;2u@?;%-iH6^tEPc7i|&|row+XFUmF{3 zR180RUiQH+uUykLTv@N2GgT-RL_bH{0y}64&DomJacO-L*2MN+t*?AfAUCEjp2uES zFn2d1x{5vd*$37ft@K&ZI zdx^;clz!C1aE@1kG;jO!1JdSMY~ctZ&8uvFhdF->R7Gs2QSVm-S2aBIeCI=DMcpUt z_-n63%X4^wovk0!rBC{*&kfhKf13LiLq)h7>?*zU^|4iyfl9^^ey>y$L&%+o!ojZm z+PWJ${cQsRm&|4ML`n9}p4S%Ldo;NkS12Ww&bkWNJEPm8=PxXaU@gbEQox1Gw*MD4 zsfRw@8?hwW`@6YXYJ6b4a@BTUO?F}H&j;}qRqtAn@2`t5yg0$i5o>INkS8Y_DgG_5 z@Yl14hp!C2jwz<*rf;|sg*jyUgx?hk5^oAEE(UtB_oG~M<0Tfgrbq|>az1TsK207i zfCqX=zHp~B#{cL8&3q3D*&@4{g_X33}Se+p_ z%!xT#5nqtRZg3lNC)hgoP!QE1ywCMNuZ=p@!Z5c=&ws$%Yq^qP6t@j$=7=0Z#^S{k zW7Ii47JNb5)TxwoYPhMmepQ2bY2Fe&Wfidv{l;w+zz#SWm43(A{pWx;Qg5K#Dj9lY z;d_VsN58f}KcsOHTL}1yg}FRp<65=!Olk`zJXK<2HU&Hf*8KRGIWP}Vsp!AhVerL9 z?nD{4UF3CRm5SoHX=8zi^h}Ve-e|j$p0Bq!vV&yr{BmPLIjc&?NOP_h%LN{TD=jOA z{F=9?qGyVPRdk|Dg1}k7>FSFMO?Bv)a6?MCx z0~nj-30dsGkm{+9yg#@5&j?&sOz!C%D)YVJ{L&;^77%#MF+cYY(Abouo0)5J4kR*> zO`zJ&-Z{N8xUAszh>dRupr3s2+k3SUIkE5li*#Hp(3Ixr+Z|!ruu8- zZXP_JhT-M<#s{*mYymp9Nk5mBqT1QkU3hCo`^1Ec zr-pN0-jIWZyNVjbARn7TO)@3>`?!1Lxi>mPGYHph-_V+RR9&c8j76m(Mr$~#O6-zr zLH(ND{HR-ezPp(6iR?T)I0Fxwsp%}KLb}ugO>H)HugBRJh^B-AetY|rvxmC;and~z z>>M|1NTdJkdi8HbtX33yo3^fUezs#rdE*B>Z@Z&N8_BE5Is|j{7Vu@mM#%kr#mkd*LwU?I`@K8(I|LluI1sjVcV&$KT14> zsM6mSV~WBzMey(lI$5Mc^V8)fve}0>jZcM#3xZs#wL$IjL8YNUH_&L+M5`T}|A$2h z%fIDe1jft%la3lRWNLh6>G(+fTi{|e#%NuKWag2v#UrlKXV4BLKWy^#%=s11xk!EF zn)kcVc{jPTk}yc63%IJ(1M$UY{Oq_wgw`wRa}at6$c;Q*5C*J;Pg&>BJ5kK+zc4D_ zJs}u>S1g9Y)*7ZMng?K56m2%8e!bzvc%W2cwN%+C$`h6mw1sp}jrVxx_v-d?vlUwZ z?c(%cr>dl0zd25+lXsHRI8nQvVp_uuNjuLgBv8E-%2xhtU__$($&o(YWpF5|>ZVXsqmV1QQ_1HF*Of5r_5!f$=t z?*A1p1ISnN5dA9BGfAi88lMoh$$pDdaxwXh))~;)cv5Zx0u<|!d5){)PQ2z^{4ESJ z6Y4>7crbv5fCEKGE2q9nWGr=jVh*UR`N^<>xS0M)tdNHwPj7&N1M>>|Rw6-5Lw=We zCprnus-oD@F>Che^2XozCK+_n~gb{#R1pC-6>5Fs#`FsXckhm3S7Pkb5GYT`@rC1kP@&}ylvU}uFoxk z91SO$>pKE6Dy*VFtF1%JVcy=gdYI6Q@57vOD~VdA{ifG# zD;MH&?X4ZxWkZm-c%FXld0r-wH#V#)Zg~M4kK&^aFZA>e)Z!d@y|YMjAqH|Jx9pQ+ zxB}f2XWt0!tO_wXys&>qcCO}4d6(t6ua23I4DfFm(FcA%bG-6|h1ThSY z!9OjMN_h*kJ$5pUXrkfmhp~b{N@$86pL=LJO{Yl+zA`|=571nHpnl>zNC~?=&uN>E z+#U0z4wJzwPE#;@H~Uh-E%vr767Zq4nkuQ89(}u9c-~Vln4t7W%ku{uP$cy+WIi9;C?DoVbewl?Bp|Te(=|GTdyExB z0OAu?kknblui>1eaih;*_3Z^@-li+RD81>@49=b7Xf@og*vnVV?0A+?XuqeN{6`nN zj@^+bA6TYdw&T>HZL!iQhjmFy>L9z&YynT$~<7FP;Zs1k#5Tk)d}LY))BH8n?d zA?{KFwcrv=iy+}KE%yT!Y4zos>l3q2OcR?7xdZD_~W8N z6g?8othmnl5i`5oR|HMifGeaiN2M~9U=mkeHU=p9l2^Y+_{m}$oy&D%4HDnu+BL`^ z3{ajOfwh11gm%m~a_oe&S!_HJmUveTtY{hGr+t~Mz*)P#?Kq}Od>GtXS+09S&lmOf zE7WPginp>)2Igz5qJmVArQG_w==#xFffZ+4$}2k8C`>r26~xG0HVUd#)8Sr3QB>Jkru*@BkbPzq}EnO3wEYlf4OEp`S~5x37il=YsIp4 zdEhTe?38pS06P<6sh(cnNBZ^ktcLJ*{nTa_{x`iBX?+}Rwh%62lqX%J6p@YWsvwM) z4`*Nl)E=!0#F)bJI81FJ!@m{S(cOVGK4wjm#^n#jhrWzd{lUnix*lAckU->)#p{gd zvCJ;bm<0(AZH1~kia$Kr7(2bXwW|K_!u`tci8U4PkKWwL;b-7vNLV538B1mLp;QT+ zeEDz;&JG}5q;Gs0T2$jHrC3bwRVi{3{N$@Gyq^ccD&$w^=7u|e5ax~g&(V3SBbnPD zW;Ad5yGof`nBP!2i~aHLy3H>qiHKM-6Ku$C9Rp|SsCWbQo0rk-y2W#jV|oRt{^k=B z^1VTS`mfDWt({pTC$e6|dd{VW2s=--%4^A+l)H7T6ya63m2_Hf?;E5QLhxGn@Swd~ zz51^J-e{(?{J>GrZM3a@B(t=&geIfE3WmQ9l^F}K=qqFI*md{w;Tav9q7;qV>8;&@ zppK=J-r*%1AwZ*gkkfjl zk)UoXfA~tiQ6A|;^dsVwK?)fX;c!LkM{75EEkmEMHy$r&bnT(GZ&)X+inV#>B!`uL z#CuHWsCa34WkN81D%Fzi*rYc1(15MSk}Kw9r^t20zZdcF4#^s|nH<_-fnsX}2t<_Zq&b&yS$ zH&T9?=|%msR{eVyeHxgWZ>vge+^)DzB<4FLCkL%f2%83b-FAQ3$R@)d8@xo95EfI!bjHL?6U+gI2`!z$UA68@98O~$ zZHk)vo}@T4m^x*KZ2HN?pghJh-u&07IzA=_&+kZShjkc4P7(@P{(XI7Iw7bDoZW#x z_8I3knfnY?h!Qc^=54$hChg_+6Eugx;;g4;ndW(+|EmGUtW%#Ewvo@3+O-0uw6 z)3;BQj|ffVQXvm>-D6_+wH2U6T`+Nh>OmOx3hT9<(6DMQs(mLjn*KQYv4E016O30MB zjE6zG`ccTl;k#w-V|+}dKYUXjdux;$73x$O0%^g^H~LJm`BvNE+`bFLD*AWjIF?1! zLlr?hKX6d>WN+-s2#Uwvrh#{yI*p5 zTOHlpG@;L`MZnePjqf%;IB;GEf|}b_sRvir`el3iraFp_3rbiZ5^H}ZAnSV3(4rLE z{G3F#xiD!xbEw9pd(vn}am^%Ywq1oJQ~#I@kNwA@w+EkD*XfalLNY?+*G(sxL6{cl zb(l+jnQ^tcWcAHf&xalCP=B6RrcL2sl%Cj;`N)E07GH+QOoEr={2cgJ~ISi!jm;S73?zQ5=Ws!$ifmu9o ztw4FN12?$J1FVUYj$8$kVB}=eIMPHfEVvu5DR~Xu0FO4GI`d$7e8|q+0xxpN z+m~-FECY2J-7P!cSWkf@grSO?W-c{;VK^QblcGH0X3TnKVm72OYpxjJDN;@+KrjE_ zgnD}dCRrLJr%9B#IDO{^Ptj`O&U5<}W_Yupo#U6oyYK5U(s|oTPCw=M(EWbd{tn(i z*3p@;A8O;B0~m~4mO5m0gjHqz7FXrWF1WO?^(0YG{mdrJnCTyq@4^UZHEQo}0=sXm zPT*rNq^+svp>yfQRWn=kA6u5^kEZ<8i%?UzD+lI>R=kms@Xex3Ih6dK1;FHN z5!f&ym+Sj`rg0{boK(s66lwlUS57Z{~;Q_HCofl43P||^(SQ36CS-fG2 zlualb&AgP}_(^`tPw3c(54_kil#=MM$4CGf$cnJfnNJ*tssLX>wKM-?M%%xR^qBW- ze-?Q2?eqIQ#!4~bsWLm}f(5uG(cK~i!H5m-TOKYve5EGyNQB>G7g-zjZMIx4si3}= zJ3M)!`R}fcFWxo>6PEEJKfp0@q`cuEUS+H)ut){GU&PElI|$Zux-#|*DLVXx%jL>B zBbi#+eaFfY@)qxVidK_)CLwne9oTxddAT-Y2o4^PTVG!Flfo-NV#n6U=@uafsLB2O z8pi|clo_kjmcr|x%*R3nDT*5?8BQP12*?_byN*Egs<_+M%%LM=-lvQ@HkY^I>%dir zr0USS_e^hPIbx&4pVXF_R(*t-UoBKu$Y4yROwR{DN=bgDlVr0&tJ?|d z00G(S>09X8@}8}4fOCPu6r6%0Ts$k@=u;Mzrk>SY z3^I+Y?yJY41RfN@><$N?#iAWsJan9n@Nk~#SAGjj8@~COOzXTvv|G%4%kXEb`gYL& z=%vS745i1Wci+qV<+AM4Ycrm?rP35f@HrOUyKQ3z{{ius|0nwL|NAIvJ$2*a zf5)1EmD>NH$EE?%vB3U7AvD|2O>ec7*_8cHm+xu2LHR;RCR!{Wm(|IiRP>Ov2`3jjY_F;?6jnnD8QoR3~ zgs7(-s2)1!ej2tC$ASHMfk!g>g(+7B4lCX`I2)sS=IvnsFG59uFOg;LteVkLBhyJv>M1O}|2#I)+-jNfFrp|c>ejTZxD83vFRIhsRZ*H)^6^o9h{� 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 ZzXqiuyZh@w32anuG+c;J6YT$Q0sx- just prevented X kg of waste!' - And clicking the group name goes to the group - And clicking the figure for the weight goes to the event at which the waste was prevented - -![](./our-global-impact.png) diff --git a/features/06-Fixometer/our-global-impact.png b/features/06-Fixometer/our-global-impact.png deleted file mode 100644 index 37efedc933e4d4bce7167db5c48e01ce8eb6dbaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36885 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 diff --git a/features/07-Reporting/BreakdownbyCountry.feature b/features/07-Reporting/BreakdownbyCountry.feature deleted file mode 100644 index 21c542df57..0000000000 --- a/features/07-Reporting/BreakdownbyCountry.feature +++ /dev/null @@ -1,17 +0,0 @@ -Feature: Breakdown by country - Total hours volunteered - As a user (all roles) - In order to see the total time volunteered country wise - I should be able to click on see all results link in breakdown by country section on time volunteered page. - -Background: - Given the following account have been created a restarter - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: Total time volunteered country wise - When a restarter wants to see the total time volunteered country wise, click on see all results link in breakdown by country section - Then a pop up appears with all the country names and the time volunteered in the countries. - -Scenario: Click on cancel - When a restarter wants to go back to time volunteered page, click on Cancel - Then the restarter will go back to time volunteered page. \ No newline at end of file diff --git a/features/07-Reporting/Impact Analysis.feature b/features/07-Reporting/Impact Analysis.feature deleted file mode 100644 index ad8bff8cca..0000000000 --- a/features/07-Reporting/Impact Analysis.feature +++ /dev/null @@ -1,36 +0,0 @@ -Feature: Group Impact Analysis - As a Host - In order to be able to showcase the work of my Group - I want to see an impact analysis of my Group's Events - -Group hosts are able to get reports about the impact of individual Restart -Parties: total of waste prevented, CO2 emissions prevented, hours -volunteered. - -Group hosts are also able to get an an aggregate total of all waste -prevented, CO2 emissions prevented, hours volunteered for the -entirety of their group’s events. - -TODO: Add larger dataset test and checking the algorithms. - -Background: - Given the following groups: - | Id | Name | - | 1 | Hackney Fixers | - And the following events: - | Id | Location | Date | - | 1 | The Redmond Centre, Manor House | 28/01/2017 | - | 2 | Homerton Library | 19/11/2016 | - -Scenario: Impact analysis for event - Given the following devices logged for the 'Homerton Library' event: - | Id | Category | Comment | Brand | Model | Repair Status | Spare Parts? | - | 1 | Laptop medium | Needs new screen | Apple | Mac Air | Repairable | Yes | - When viewing the stats for the 'Homerton Library' event - Then the stats should be: - | Participants | Restarters | CO2 Emissions Prevented | Fixed | Repairable | Dead | - | 35 | 5 | 914kg | 12 | 21 | 5 | - -Scenario: Impact analysis for group - When viewing the stats for the 'name of the group' group - Then the stats should be: \ No newline at end of file diff --git a/features/07-Reporting/TimeVolunteered.feature b/features/07-Reporting/TimeVolunteered.feature deleted file mode 100644 index a544ff0cb1..0000000000 --- a/features/07-Reporting/TimeVolunteered.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Total hours volunteered - As a user (all roles) - In order to see the total time volunteered - I should be able to navigate to time volunteered page. - -Background: - Given the following account have been created a restarter - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: Total time volunteered - When a restarter wants to see the total time volunteered - Then he can see all the information about volunteered time on time volunteered page. - -Scenario: search for a paticular period of time volunteered -#Users can search for devices by either taxonomy or by date or by users or by location and miscellaneous. - When a restarter wants to search for a particular period of time volunteered, he can fill the fields as he want to search as follows - | Group | Group tag | Name | Age range | Gender | From date | To date | Country | Region | Include anonymous users | - | Restart HQ | Exampletag1 | James | 23-28 | Male | 23/04/2017 | 12/08/2017 | UK | London | Yes | - And should click on search all time volunteered - Then user can view the list of time volunteered. \ No newline at end of file diff --git a/features/08-Admin/Brands/AddBrand.feature b/features/08-Admin/Brands/AddBrand.feature deleted file mode 100644 index 1d7a8c4072..0000000000 --- a/features/08-Admin/Brands/AddBrand.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Add Brand - As an admin - In order to add a brand - I should be able to do that by filling the fields of add brand pop-up and click on create new brand button - -Scenario: Adding new brand - When a new brand name is added, to do so fill the field as follows and Click on Create new brand button to save the changes - | Brand name | - | TP-Link | - Then you will land on All brands page with newly added brand in the list and also with a message that your brand is added. \ No newline at end of file diff --git a/features/08-Admin/Brands/EditBrand.feature b/features/08-Admin/Brands/EditBrand.feature deleted file mode 100644 index 19b15ca4f0..0000000000 --- a/features/08-Admin/Brands/EditBrand.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Edit Brand Name - As an admin - In order to edit brand name - I should go to edit brand page and click on save brand to save the changes - -Scenario: Editing a brand name - When a brand name is edited, should edit the field as follows and click on save brand button to save the changes - | Brand name | - | HP | - Then she will land on brands name page with the edited brand name in the list, pop-up message saying your changes have beeen saved. \ No newline at end of file diff --git a/features/08-Admin/Brands/ViewAllBrands.feature b/features/08-Admin/Brands/ViewAllBrands.feature deleted file mode 100644 index 55055c4528..0000000000 --- a/features/08-Admin/Brands/ViewAllBrands.feature +++ /dev/null @@ -1,17 +0,0 @@ -Feature: Brand name - As an admin - In order to view all the brand names in one page - I should be able to do that by navigating to brand page - -Background: - Given the following account have been created as an admin/user - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: View All Brands - When an admin navigate to Brand page - Then she can view all the brand names in that page. - -Scenario: Creating new brand - When an admin wants to create a new brand - Then he/she should click on create new brand button. \ No newline at end of file diff --git a/features/08-Admin/Categories/EditCategory.feature b/features/08-Admin/Categories/EditCategory.feature deleted file mode 100644 index 8172397c79..0000000000 --- a/features/08-Admin/Categories/EditCategory.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: Edit Category - As a User or an Admin - In order to change the details of category - I should be able to do by using a edit category page - -Background: - Given the following account have been created as a user or an admin - | Email | Password | - | jenny@google.co.uk | dean1 | - -Scenario: Edit Category - When the fields are changed/updated in edit category section as follows - | Category name | weight(kg) | CO2 Footprint(kg) | Reliability | Category cluster | Description | - | jenny@google.co.uk | dean1 | 1.34 | good | Digital telephone | good product | - And click on save category - Then she will land on All categories page with the edited category in the list of categories. \ No newline at end of file diff --git a/features/08-Admin/Categories/ViewAllCategories.feature b/features/08-Admin/Categories/ViewAllCategories.feature deleted file mode 100644 index bf331814e8..0000000000 --- a/features/08-Admin/Categories/ViewAllCategories.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: All Categories - As an admin - In order to view all categories - I should be able to navigating on the Categories page - -Scenario: View All Categories - When an admin view all the categories - Then he/she should navigate to categories page. \ No newline at end of file diff --git a/features/08-Admin/GroupTags/AddNewGroupTag.feature b/features/08-Admin/GroupTags/AddNewGroupTag.feature deleted file mode 100644 index 84d6b429d2..0000000000 --- a/features/08-Admin/GroupTags/AddNewGroupTag.feature +++ /dev/null @@ -1,12 +0,0 @@ -Feature: Add new group tag - As an admin - In order to add a new group tag - I should fill the fields of add new group tag pop-up and click on create new tag button - -Scenario: Adding new group tag - When the fields are added as follows - | Tag name | Description(optional | - | Example tag1 | | - | Example tag2 | | - And should click on Create new tag button to save the changes - Then she should land on group tag page with the recently added group tag in list of tags. \ No newline at end of file diff --git a/features/08-Admin/GroupTags/EditGroupTag.feature b/features/08-Admin/GroupTags/EditGroupTag.feature deleted file mode 100644 index c18291dc86..0000000000 --- a/features/08-Admin/GroupTags/EditGroupTag.feature +++ /dev/null @@ -1,17 +0,0 @@ -Feature: Edit group tag - As an admin - In order to add edit group tag - I should navigate to edit group tag page and click on save tag to save the changes - -Scenario: Editing a group tag - When the fields are editted as follows - | Tag name | Description(optional | - | Example tag12 | | - | Example tag2 | | - And should click on save tag button to save the changes - Then she should land on group tags page with the edited tag in the list of tags. - -Scenario: Deleting a group tag - When an admin wants to delete a group tag - And click on delete tag button to delete the group tag - Then she should land on group tags pages with no trace of the deleted tag in the list. \ No newline at end of file diff --git a/features/08-Admin/GroupTags/ViewAllGroupTags.feature b/features/08-Admin/GroupTags/ViewAllGroupTags.feature deleted file mode 100644 index bf35d6456e..0000000000 --- a/features/08-Admin/GroupTags/ViewAllGroupTags.feature +++ /dev/null @@ -1,12 +0,0 @@ -Feature: All group tags - As an admin - In order to see all the group tags - I should navigate to group tags page - -Scenario: View All Group Tags - When an admin wants to see all the group tags at one place - Then she should navigate to Group Tags page. - -Scenario: Creating new tag - When an admin wanted to create a new group tag - Then he/she should click on create new tag button. \ No newline at end of file diff --git a/features/08-Admin/Roles/EditRole.feature b/features/08-Admin/Roles/EditRole.feature deleted file mode 100644 index f7a38a1875..0000000000 --- a/features/08-Admin/Roles/EditRole.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Edit Role - As an admin - In order to create/edit/delete a user and to create a party - I should be able to do on an edit page and saving the changes through save role button - -Background: - Given the following account have been created as an admin - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: Editing User Role - When the user permission checked - And the user will have those permissions to do and click on save role to save the changes - Then she should land on All users page with the edited user in the list of users. \ No newline at end of file diff --git a/features/08-Admin/Roles/ViewAllRoles.feature b/features/08-Admin/Roles/ViewAllRoles.feature deleted file mode 100644 index 0465917b89..0000000000 --- a/features/08-Admin/Roles/ViewAllRoles.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Roles - As a Admin - In order to view the roles - I should be able to see them with permissions - -Scenario: Roles with Permissions - When an admin wants to view the permissions of the Roles - Then navigate to roles page \ No newline at end of file diff --git a/features/08-Admin/Skills/AddNewSkill.feature b/features/08-Admin/Skills/AddNewSkill.feature deleted file mode 100644 index 538115678b..0000000000 --- a/features/08-Admin/Skills/AddNewSkill.feature +++ /dev/null @@ -1,17 +0,0 @@ -Feature: Add new skill - As an admin - In order to add a new skill - I should fill the fields of add new skill pop-up and click on create new skill button - -Background: - Given the following account have been created as an admin - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: Adding new skill - When a admin needs new skill to their profile, they should fill the fields as follows - | Skill name | Description(optional | - | Mobile devices | | - | laptops | | - And click on Create new skill button to save the changes - Then she should land on all skills page with the new skill added in the list of skills, with a message saying new skill have been added. diff --git a/features/08-Admin/Skills/EditSkill.feature b/features/08-Admin/Skills/EditSkill.feature deleted file mode 100644 index c74deea273..0000000000 --- a/features/08-Admin/Skills/EditSkill.feature +++ /dev/null @@ -1,22 +0,0 @@ -Feature: Edit skill - As an admin - In order to add edit my skill - I should navigate to edit skill page and click on save skill to save the changes - -Background: - Given the following account have been created as an admin/user - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: Editing a skill - When an admin edit a skill which is in their profile, they should edit the fields as follows - | Skill name | Description(optional | - | Scanners | | - | laptops | | - And click on save skill button to save the changes - Then she will land on all skills page with the edited skill in the list of skills, with a message saying your changes have been saved. - -Scenario: Deleting a skill - When an admin wants to delete a skill which is in their profile - And click on delete skill button to delete the skill - Then she will land on all skills page where the deleted skill will no longer be there in the list of skills, with a message saying your skill have been deleted. diff --git a/features/08-Admin/Skills/ViewAllSkills.feature b/features/08-Admin/Skills/ViewAllSkills.feature deleted file mode 100644 index 8b4c282f07..0000000000 --- a/features/08-Admin/Skills/ViewAllSkills.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: All Skills - As a Admin - In order to know the skills - I should be able to see them with description - -Background: - Given the following account have been created as a admin - | Email | Password | - | jenny@google.co.uk | dean1 | - | dean@google.co.uk | helo1 | - -Scenario: View All skills with description - When an admin wants to know the description of skills - Then they can navigate to the Skills page. - -Scenario: Create new skill button - When an admin wants to add a skill to their profile - Then click on create new skill button and follow the steps. diff --git a/features/08-Admin/Users/AddNewUser.feature b/features/08-Admin/Users/AddNewUser.feature deleted file mode 100644 index 99e6046df1..0000000000 --- a/features/08-Admin/Users/AddNewUser.feature +++ /dev/null @@ -1,29 +0,0 @@ -Feature: Add New User - As an Admin - In order to create new user accounts for cases when the user can't self-register - I would like a Create New User facility. - -Scenario: Creating new users - Given an Admin user is on the All Users page - When she clicks the New User button - Then she is shown the dialog for creating the new user - -Scenario: Valid details added for user -# Entering correct details in the fields provided at Add new user pop-up. - Given an Admin is creating a new user - When she enters the new user's details in the fields provided as follows: - | Name | Email address | User role | Password | Repeat password | - | diamond | diamond@gmail.com | Volunteer | h£!!05 | h£!!05 | - | james | james@yahoo.com | Restarter | scr7vd* | scr7vd* | - And she clicks 'Create new user' - Then she lands on the All Users page with the newly added user in the list of users - And she is shown a message saying that new user has been added successfully - -Scenario: Invalid details added for user -# Entering invalid details in the fields provided at Add new user pop-up. - Given an Admin is creating a new user - When she enters the new user's details in the fields provided as follows: - | Name | Email address | User role | Password | Repeat password | - | diamond | diamond@gmail.com | Volunteer | h£!! | h£!! | - And she clicks 'Create new user' - Then an error message should at the password field, password should be more than 6 characters. \ No newline at end of file diff --git a/features/08-Admin/Users/DeleteUser.feature b/features/08-Admin/Users/DeleteUser.feature deleted file mode 100644 index 152a23a2a4..0000000000 --- a/features/08-Admin/Users/DeleteUser.feature +++ /dev/null @@ -1,13 +0,0 @@ -Feature: Delete User - - As a user - In order to exercise my right to be forgotten - I would like to be able to delete my account - -Scenario: Admin deletes user's account - Given an Admin is on a user's account page - When she deletes the users account - Then the user's personal data is anonymised - And the account is marked as inactive - And the Admin is directed to the All Users page - And the Admin is shown a message showing that this user has been successfully deleted \ No newline at end of file diff --git a/features/08-Admin/Users/EditUser.feature b/features/08-Admin/Users/EditUser.feature deleted file mode 100644 index 034a67cf49..0000000000 --- a/features/08-Admin/Users/EditUser.feature +++ /dev/null @@ -1,39 +0,0 @@ -Feature: Edit user (Profile) - As an Admin - In order to change the details entered before - I should be using a edit user functionality - -Background: - Given the following account have been created as a user - | Email | Password | - | jenny@google.co.uk | dean1 | - -Scenario: Edit User - When a user wants to change/update any details - And he/she should be able to do that by changing the details and saving them - Then she should land on the Users page with the edited user in the list of users, a message saying that the changes have been saved . - -Scenario: Editing User Profile -# Updating details in the User Profile section and click on save profile button - When a user enter details in User Profile section as follows and clicks on save profile - | Name | Email address | Age | Country | Town/City | Gender | Your biography(optional) | - | jenny | jenny@gmail.com | 45 | United Kingdom | Remakery | Male | I am an Artist by proffesion | - | diamond | diamond@gmail.com | 23 | Spain | Belgium | Male | | - And the user saves all the changes he made in that section - Then she should land on the profile page with a message saying that the changes have been saved. - -Scenario: Editing Repair Skills -# Updating details in the Repair skills section, only prefixed skills in the system are saved - When a user types the skills he/she have - | Key Skills | - | Mobiles devices | - | Laptops | - | Kitchen devices | - And the user saves the changes in that section - Then she should land on the profile page with a message saying that the changes have been saved. - -Scenario: Upload profile picture -# Updating the profile picture in change photo section - When a user wants to change their profile picture - And browse the pic and click on change photo button - Then she should land on profile page with the uploaded picture in the placeholder, with a message saying the picture has been uploaded. \ No newline at end of file diff --git a/features/08-Admin/Users/EditUser_Acc.feature b/features/08-Admin/Users/EditUser_Acc.feature deleted file mode 100644 index 8c0106c659..0000000000 --- a/features/08-Admin/Users/EditUser_Acc.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Edit user (Account) - As an Admin - In order to change the account details entered before - I should use edit functionality - -Scenario: Edit User account - When an admin changes/updates any account details and clicks on save - Then he/she should see an pop up message as changes have been saved. - -Scenario: Changing Password -# Change password and click on change password button to save - When changes are made in the fields as follows and clicks on change password button - | Current password | New password | New repeat password | - | jenny | hello! | hello! | - | diamond | hi£donna! | hi£donna! | - Then a pop-up message shows saying all the changes have been saved. - -Scenario: Admin only -# Updating details in the Repair skills section - When the admin uses this page to change a users role and group - Then only admin can have that privilage to do. \ No newline at end of file diff --git a/features/08-Admin/Users/EditUser_Emailpref.feature b/features/08-Admin/Users/EditUser_Emailpref.feature deleted file mode 100644 index 4bfea91413..0000000000 --- a/features/08-Admin/Users/EditUser_Emailpref.feature +++ /dev/null @@ -1,19 +0,0 @@ -Feature: Email Preferences - As an Admin - In order to get notified by the Restart Project - I should signup for email alerts and save the preferences - -Background: - Given the following account have been created as a user - | Email | Password | - | jenny@google.co.uk | dean1 | - -Scenario: Check Email preferences - When an admin wants to get notified by the Restart Project - And ticking-off the checkbox and click on save preferences button - Then she should land on Email preferences page with a message saying that the changes have been saved. - -Scenario: Creating an email. -# User can create a email or set an email to Restart Project discussion platform and click on save preferences button - When a user create a email or set an email to Restart Project discussion platform - Then the user receives the information to that email id \ No newline at end of file diff --git a/features/08-Admin/Users/RepairDirectoryAccess.feature b/features/08-Admin/Users/RepairDirectoryAccess.feature deleted file mode 100644 index 41d217b39c..0000000000 --- a/features/08-Admin/Users/RepairDirectoryAccess.feature +++ /dev/null @@ -1,31 +0,0 @@ -Feature: Access to Repair Directory Admin - -Only certain users should have a menu item that links through to the Repair Directory Admin section. -This is a user-level permission (not role-based) that can only be set by an Admin. - -Scenario: Admin can set repair directory admin permission for another user - Given I am logged in as an Admin - When I visit the user account page for another user - Then I should see the permissions section for setting repair directory admin access - -Scenario: Host cannot set repair directory admin permission for themselves - Given I am logged in as a Host - When I visit my account editing page - Then I should not see the permissions section for setting repair directory admin access - -Scenario: Admin sets repair directory admin permission for themself - Given I am logged in as an Admin - When I visit the user account page for another user - And I set the Repair Directory Link permission on the user - Then the user should now have Repair Directory Link permission - And should see the Repair Directory menu item in the top left menu -# Pass - -Scenario: Admin sets repair directory admin permission for another user - Given I am logged in as an Admin - When I visit the user account page for another user - And I set the Repair Directory Link permission on the user - Then the user should now have Repair Directory Link permission - And should see the Repair Directory menu item in the top left menu -# Fail -# It doesn't persist the change to the setting when it's for another user \ No newline at end of file diff --git a/features/08-Admin/Users/ViewAllUsers.feature b/features/08-Admin/Users/ViewAllUsers.feature deleted file mode 100644 index b888578e64..0000000000 --- a/features/08-Admin/Users/ViewAllUsers.feature +++ /dev/null @@ -1,44 +0,0 @@ -Feature: Search - All users - As an admin - In order to see all users or search for a particular user - I should be able to do by using a search button - -Background: - Given the following account have been created as an admin - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -# Valid search - Multiple scenario's -Scenario: Entering details in all the fields -# Entering correct details in the fields provided at By details category. - When an admin enter details of a particular user in the feilds provided as follows - | Name | Email | Town/City | Group | Role | - | jenny | jenny@gmail.com | London | Remakery | Host | - | diamond | diamond@gmail.com | Belgium | Group2 | Volunteer | - | james | james@yahoo.com | Portsmouth | Group3 | Restarter | - Then the admin should get the details of that particalr user. - -Scenario: Entering details in only one field like name or email -# Entering correct details in the fields provided at By details category. - When an admin enter details of a particular user in the feilds provided as follows - | Name | Email | Town/City | Group | Role | - | jenny | | | | | - | | diamond@gmail.com | | | | - Then the admin should get the details of that particalr user. - -Scenario: Entering details in any two of the fields like name and Town/City or Email and Role or name and group -# Entering correct details in the fields provided at By details category. - When an admin enter details of a particular user in the feilds provided as follows - | Name | Email | Town/City | Group | Role | - | jenny | | London | | | - | | diamond@gmail.com | | | Volunteer | - | james | | | Group3 | | - Then the admin should get the details of that particalr user. - -Scenario: Invalid Search -# Not entering any of the fields and clicking on search all users button. - When an admin does not enter any field as follows - | Name | Email | Town/City | Group | Role | - | | | | | | - And clicks on search users button - Then she will land on All users page without any changes. \ No newline at end of file diff --git a/features/08-Admin/Users/ViewProfile.feature b/features/08-Admin/Users/ViewProfile.feature deleted file mode 100644 index dde1de182f..0000000000 --- a/features/08-Admin/Users/ViewProfile.feature +++ /dev/null @@ -1,15 +0,0 @@ -@current -Feature: View profile of an User - As a User (All roles) - In to see the profile of the user - I should be able to see on view profile page. - -Scenario: View profile page - Given I am logged in - When a user wants to see the biography and skills of a user and click on view profile - Then they will land on view profile page with their details. - -Scenario: Edit User - Given I am logged in - When user wants to change the profile, click on edit profile button - Then user will land on edit profile page. \ No newline at end of file diff --git a/features/09-Notifications-and-emails/Emails.feature b/features/09-Notifications-and-emails/Emails.feature deleted file mode 100644 index 659e195d5a..0000000000 --- a/features/09-Notifications-and-emails/Emails.feature +++ /dev/null @@ -1,84 +0,0 @@ -Feature: Emails that are sent out by the system - As a user (all roles) - In order to organise the platform - I should be able to send automated/manual emails to users whenever required. - -Background: - Given the following account have been created an admin - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: Post event automated reminder email to host (4) - Given a host has received a post event automated email - When the host clicks on Contribute data button - Then the host lands on that manage event page. - -Scenario: Post event reminder email to volunteers (5) - Given a volunteer has received a post event device reminder email - When the volunteer clicks on Contribute data button - Then the volunteer land on that manage event page. - -Scenario: Password reset request email (1) - Given a user has received a password reset request email - When the user clicks on Reset password button - Then the user land on the password rest page. - -Scenario: Email invitation to group by a user to a existing volunteer (2) - Given a existing volunteer has received an email invitation to group - When the existing volunteer clicks on Join group button - Then the volunteer land on that event page with a successful message on top. - -Scenario: Email invitation to group by a user to a new volunteer (2) - Given a new volunteer has received an email invitation to group - When the new volunteer clicks on Join group button - Then the volunteer land on registeration page, go through registration process - And should land on that group page with a welcome message. - - Scenario: Email invitation to an event by existing user to a existing volunteer (3) - Given existing volunteer has received an email invitation to an event - When the existing volunteer clicks on Read more button - Then the volunteer land on that particular event page. - - Scenario: Email Notification about event creation to admin (9) - Given admin has received an email notification about an event to moderate - When the admin clicks on View event button - Then the admin land on that particular edit event page, clicks on approve button. - - Scenario: Email Notification about group creation to admin (missing wireframe) - Given admin has received an email notification about a group has been created - When the admin clicks on View group button - Then the admin land on that particular group page. - - Scenario: Account created by admin to a new volunteer (13) - Given a new volunteer has received an email to set password - When the new volunteer clicks on Set password button - Then the volunteer land on password reset page. - -Scenario: Email notification to admin by a host/restarter when description of a repair has been marked suitable for wiki (12) - Given admin has received an email notification about repair description to wiki - When the admin clicks on View repair notes button - Then the admin land on edit device page. - -Scenario: Email notification to host by admin when event has been approved (10) - Given host has received an email notification about event confirmation - When the host clicks on View event button - Then the host land on Upcoming event page or therestartproject.org(if clicked the link in the email). - -Scenario: Email notification to host by new volunteer when he joined the group (8) - Given host has received an email notification about a volunteer joined the group - When the host clicks on Go to group button - Then the host land on that view group page. - -Scenario: Email notification to host by volunteer when he has sent an RSVP (7) - Given host has received an email notification about a volunteer attending the event - When the host clicks on View your event button - Then the host land on upcoming event page. - -Scenario: Admin can select the type of emails he/she would like to receive - Given admin wants to select the type of emails - When the user clicks on the checkboxes in the preferences section - Then the user wil get emails accordingly. - -Scenario: Admin receives email when abnormal number of Misc devices are added - When user enters abnormal number of misc devices - Then the admin gets an email about the scenario. \ No newline at end of file diff --git a/features/09-Notifications-and-emails/NewGroupCreatedNearby.feature b/features/09-Notifications-and-emails/NewGroupCreatedNearby.feature deleted file mode 100644 index 1540ad0581..0000000000 --- a/features/09-Notifications-and-emails/NewGroupCreatedNearby.feature +++ /dev/null @@ -1,11 +0,0 @@ -Feature: Notification of new group created nearby - -As an unaffiliated volunteer -In order to find repair groups that I can volunteer with -I want to be notified when a new group is created near me - -When a new group is created, volunteers within 25 miles of the newly created group are sent a notification, to let them know that the new group has been created. - -If the volunteer has opted in to receive email notifications, they will also be sent an email notification. - -![](./images/email__new-group-near-you.png) diff --git a/features/09-Notifications-and-emails/Notifications.feature b/features/09-Notifications-and-emails/Notifications.feature deleted file mode 100644 index dee9165e2e..0000000000 --- a/features/09-Notifications-and-emails/Notifications.feature +++ /dev/null @@ -1,47 +0,0 @@ -Feature: View Notifications - As a User (All roles) - In order to view all the notifications - I should be able to click on notification symbol with viewing notifications in it. - -Background: - Given the following account have been created as an host - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario: View all notifications -# View all events i.e., notifications related to events, devices and groups - When a host clicks on notification icon - Then a side view appears with all the notifications in it. - -Scenario: Identifying new notifications - When a host wants to know if he got a notification or not, just simply by looking at the number near the symbol tells how many notifications are present - Then if any notification is present then host will open else not. - -Scenario: View upcoming events - Given there is a upcoming event - When user views notifications - Then they should see notifications of upcoming events. - -Scenario: Clicking links inside notifications - Given user has notifications of upcoming events - When they click on the link in that notification - Then they land to that upcoming event page. - -Scenario: No notifications - Given there are no notifications - When a host clikcs on notification symbol, even though they did not get any notification(for the first time) - Then there will be a welcome message. - -Scenario: Notifications in fixometer of activity in talk -#Volunteer engagement. Talk is a very important part of the platform, where people can get involved and be active even if there are no events or groups currently near them. -#In fact, for a number of people it's where they're likely to spend more time. We want to highlight activity and encourage participation and use of Talk as much as possible. - When a user is interested in a topic or few on discourse and something has happened on those topics - Then the user will get a notification about it - And can navigate to talk by clicking the link from the notification. - -Scenario: Notifications of discourse activity in fixometer -#Volunteer engagement. - When a user is related to any groups or events and something has happened on those - Then the user will get a notification about it on talk - And can navigate to fixometer by the notification displayed in the dicourse - And can have a detailed notification about it in fixometer and navigate from there. diff --git a/features/09-Notifications-and-emails/images/email__new-group-near-you.png b/features/09-Notifications-and-emails/images/email__new-group-near-you.png deleted file mode 100644 index 6f2a90c6fc8f9ea27dff381b5a22ad0ffeb364b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41173 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 diff --git a/features/11-Navigation/AdminMenu.feature b/features/11-Navigation/AdminMenu.feature deleted file mode 100644 index 9f7992b3cc..0000000000 --- a/features/11-Navigation/AdminMenu.feature +++ /dev/null @@ -1,50 +0,0 @@ -Feature: View Menus as an Admin - As an admin - In order to view all the menus - I should be able to click on the menus on dashboard. - -Background: - Given the following account have been created as an admin - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario Outline: Our group and Other menus with parameters - When a host clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Discussion | https://talk.restarters.net/ | - | Restart Wiki | https://therestartproject.org/wiki/Main_Page | - | The Repair Directory | https://therestartproject.org/repairdirectory/ | - | The Restart Project | https://therestartproject.org/ | - | Help | Help | - | Welcome | Welcome | - -Scenario Outline: Administrator, Reporting and General menus with parameters - When a host clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Brands | Brands | - | Skills | Skills | - | Group tags | Group tags | - | Categories | Categories | - | Users | Users | - | Roles | Roles | - | Time reporting | Time reporting | - | Event reporting | Event reporting | - | Your profile | Your profile | - | Changed pasword | Changed pasword | - | Logout | Logout | - -Scenario Outline: Events, Devices and Groups menus - When a host clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Events | Events | - | Devices | Devices | - | Groups | Groups | \ No newline at end of file diff --git a/features/11-Navigation/HostMenu.feature b/features/11-Navigation/HostMenu.feature deleted file mode 100644 index 620328036c..0000000000 --- a/features/11-Navigation/HostMenu.feature +++ /dev/null @@ -1,45 +0,0 @@ -Feature: View Menus as Host - As a Host - In order to view all the menus - I should be able to click on the menus on dashboard. - -Background: - Given the following account have been created as a host - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario Outline: Our group and Other menus - When a host clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Fixometer | Fixometer | - | Community | Community | - | Restart Wiki | Restart Wiki | - | The Repair Directory | The Repair Directory | - | The Restart Project | The Restart Project | - | Help | Help | - | Welcome | Welcome | - -Scenario Outline: Reporting and General menus - When a host clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Time reporting | Time reporting | - | Events filter | Events filter | - | Your profile | Your profile | - | Changed pasword | Changed pasword | - | Logout | Logout | - -Scenario Outline: Events, Devices and Groups menus - When a host clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Events | Events | - | Devices | Devices | - | Groups | Groups | \ No newline at end of file diff --git a/features/11-Navigation/RestarterMenu.feature b/features/11-Navigation/RestarterMenu.feature deleted file mode 100644 index c73fa38454..0000000000 --- a/features/11-Navigation/RestarterMenu.feature +++ /dev/null @@ -1,43 +0,0 @@ -Feature: View Menus as Restarter - As a Restarter - In order to view all the menus - I should be able to click on the menus on dashboard. - -Background: - Given the following account have been created as a restarter - | Email | Password | - | dean@wecreatedigital.co.uk | dean | - -Scenario Outline: Our group and Other menus - When a restarter clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Fixometer | Fixometer | - | Community | Community | - | Restart Wiki | Restart Wiki | - | The Repair Directory | The Repair Directory | - | The Restart Project | The Restart Project | - | Help | Help | - | Welcome | Welcome | - -Scenario Outline: General menus - When a restarter clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Your profile | Profile | - | Changed pasword | Changed pasword | - | Logout | Logout | - -Scenario Outline: Events, Devices and Groups menus - When a restarter clicks on in the menu - Then they land on page. - - Examples: - | menuitem | landingpage | - | Events | Events | - | Devices | Devices | - | Groups | Groups | \ No newline at end of file diff --git a/features/12-Wordpress-Push/NewGroups.feature b/features/12-Wordpress-Push/NewGroups.feature deleted file mode 100644 index 9511625c0d..0000000000 --- a/features/12-Wordpress-Push/NewGroups.feature +++ /dev/null @@ -1,19 +0,0 @@ -Feature: New Groups - As an Admin - In order to view the new groups on the wordpress site(main website - https://therestartproject.org/) - I should be able to do it through API call. - -Scenario: View created groups - When an admin approves a group - Then they would see the approved group in the list of groups on the wordpress site - And a group page is created on the wordpress site. - -Scenario: View edited upcoming group - When an admin/host edits an approved group - Then they would see the edited group in the list of groups on the wordpress site - And the changes made would appear on the group page created in wordpress site. - -Scenario: Delete groups - When an admin/host deletes an approved group - Then they will not see the deleted group in the list of groups on the wordpress site - And the group page created in wordpress site will also be deleted. \ No newline at end of file diff --git a/features/12-Wordpress-Push/Upcoming Parties.feature b/features/12-Wordpress-Push/Upcoming Parties.feature deleted file mode 100644 index 0c2e9c1a99..0000000000 --- a/features/12-Wordpress-Push/Upcoming Parties.feature +++ /dev/null @@ -1,30 +0,0 @@ -Feature: Upcoming Parties - -A list of upcoming parties. - -They should display until the end time of the party. - -How many should be listed - all future ones? ------------------------------------------------------------------------------------------------------------------- - -Feature: Upcoming Parties - As an Admin - In order to view the upcoming parties on the wordpress site(main website - https://therestartproject.org/) - I should be able to do it through API call. - -Scenario: View created Upcoming events - When an admin approves an event - Then they would see the approved event in the list of events in upcoming events section on the wordpress site - And an event page is created on the wordpress site - And the event would appear till the end of the event date and time. - -Scenario: View edited upcoming events - When an admin/host edits an approved event - Then they would see the edited event in the list of events in upcoming events section on the wordpress site - And the changes made would appear on the event page created in wordpress site - And the event would appear till the end of the event date and time. - -Scenario: Delete upcoming events - When an admin/host deletes an approved event - Then they will not see the deleted event in the list of events in upcoming events section on the wordpress site - And the event page created in wordpress site will also be deleted. \ No newline at end of file diff --git a/features/13-Wiki/EditingWikiPage.feature b/features/13-Wiki/EditingWikiPage.feature deleted file mode 100644 index bd065fd5dc..0000000000 --- a/features/13-Wiki/EditingWikiPage.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Editing a wiki page - As a user - In order to edit a wiki page - The user should have the wiki badge - -Background: - Given the following user accounts have been created - | Email | Password | - | fry@planetexpress.com | fry! | - -Scenario: Editing wiki page - Given the user has an account in restarters.net and a wiki badge on discourse - When a user logs in to thier wiki account - Then they should have the permission to edit the wiki page. diff --git a/features/API/EventsApi.feature b/features/API/EventsApi.feature deleted file mode 100644 index a87e978db0..0000000000 --- a/features/API/EventsApi.feature +++ /dev/null @@ -1,34 +0,0 @@ -Feature: Events API - -As a repair network -We want to access data about our events -So that we can display it on our own website - -Specifially to being this has been gone for Repair Together. - -The event feed should includes: - -- event id and event name -- event location and geoordinates -- event description -- details about the group the event was organised by -- the event date, start time and end time -- event impact - -Scenario: Event details are returned - Given an event exists for my network - When I access the events feed - Then I see the event details - -Scenario: Event update date is included - Given an event exists for my network - And an amendment is made to that event - When I access the events feed - Then I see the updated date - -Scenario: Filtering by dates - -Scenario: Deleted events are not included - Given an event has been deleted - When I access the events feed - Then I do not see the deleted event diff --git a/features/API/GroupsApi.feature b/features/API/GroupsApi.feature deleted file mode 100644 index 57679db5c1..0000000000 --- a/features/API/GroupsApi.feature +++ /dev/null @@ -1,27 +0,0 @@ -Feature: Groups API - -As a repair network -We want to access data about our groups -So that we can display it on our own website - -Specifially to being this has been gone for Repair Together. - -The groups feed should includes a list of groups for the network: - -- group id and name -- group location (value, country, geocoordinaates) -- website -- description -- image url -- list of upcoming parties -- list of past parties - -Scenario: Group details are returned - Given an event exists for my network - When I access the events feed - Then I see the event details - -Scenario: Deleted events are not included - Given an event for a group has been deleted - When I access the groups feed - Then I do not see the event listed with that group diff --git a/features/API/NetworksApi.feature b/features/API/NetworksApi.feature deleted file mode 100644 index b1f4e58cf5..0000000000 --- a/features/API/NetworksApi.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Networks API - -Get stats about a particular network via the API. - -Scenario: Get stats about network - Given I have permissions on the Restarters network - When I call the API for the Restarters network - Then I get the following stats for the Restarters network diff --git a/features/Networks/AssociateGroupToNetwork.feature b/features/Networks/AssociateGroupToNetwork.feature deleted file mode 100644 index 2ff2038e35..0000000000 --- a/features/Networks/AssociateGroupToNetwork.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Associate Group to Network - -As an Admin -I want to be able to associate existing groups to a network -So that I can organise existing groups into networks - -This is only for Admins. - -Network coordinators can't do this (only invite a group to join a network). - -Being able to add any group to a network (and therefore get moderation rights and additional permissions over that group) would give network coordinators a lot of power. - -Scenario: Associating when editing a group - Given I am an Admin - When I am editing a group - Then I can amend the repair networks(s) to which this group is associated - -Scenario: Associating from network page - Given I am an Admin - When I am viewing a network page - Then there is an option to add a group to this network diff --git a/features/Networks/BulkImport/AddImportedUsersToNetworkDiscussionGroup.feature b/features/Networks/BulkImport/AddImportedUsersToNetworkDiscussionGroup.feature deleted file mode 100644 index 37c16c8fb7..0000000000 --- a/features/Networks/BulkImport/AddImportedUsersToNetworkDiscussionGroup.feature +++ /dev/null @@ -1,34 +0,0 @@ -Feature: Add Imported Users to Network Discussion Group - -As a new network being imported, -We'd like all of our imported users to be added to our discussion group -SO THAT (from network perspective)... we can communicate with all of our members easily via Talk -SO THAT (from Restart perspective)… we have more users engaging in discussion on Talk. - -Each network has its own corresponding network discussion group in Talk (Discourse). - -When we do a bulk import of groups and users, we want to add those new users to the discussion group for the network. - -# Background - -We've done an import for Repair Together only so far. - -# Considerations - -A decision needs to be made by the network as to when we add all of the imported hosts to the discussion group. - -It would be safer not to do it before the network has onboarded them, or at least let them all know it is going to happen, in case they started to receive emails from Discourse before they knew what it was. - - -Scenario: a random selection of 3 users that were imported from the network, are present in the discussion group - - Given the sync of users to Discourse has been run - When I view the list of users in the discussion group admin section - Then for 3 random users associated with the network in Laravel, I can see them in the Discourse discussion group - - -Scenario: the count of users in the network in Laravel matches the count of users in the discussion group - Given the sync of users to Discourse has been run - When I view the list of users in the discussion group admin section - Then the count of users matches the count of users in the network in Laravel (give or take a few existing users, network coordinators etc) - diff --git a/features/Networks/MessageUsers/AddUsersToNetworkDiscussion.feature b/features/Networks/MessageUsers/AddUsersToNetworkDiscussion.feature deleted file mode 100644 index 60b9291c10..0000000000 --- a/features/Networks/MessageUsers/AddUsersToNetworkDiscussion.feature +++ /dev/null @@ -1,23 +0,0 @@ -Feature: Add Users To Network Discussion Group - -As a network coordinator -I want group members automatically added to our discussion group -SO THAT we are able to easily facilitate discussions between all of the users in our network. - -Scenario: User joins group in network - Given I am a network coordinator - And there is a discussion group in place in Talk for my network - When a Restarter follows a repair group in my network - Then the Restarter is also added to my network discussion group in Talk - -Scenario: User joins groups in multiple networks - Given I am a Restarter - And I am already a member of discussion groups on Talk - When I join a repair group in a particular repair network - Then I am added to the repair network discussion group - And I am still a member of the other discussion groups - -Scenario: User joins group not in any specific network - Given the group is in only the generic Restarters network - When someone joins the group - Then they are not added to any new specific network discussion group diff --git a/features/Users/EditLanguageSetting.feature b/features/Users/EditLanguageSetting.feature deleted file mode 100644 index dbea2d98b4..0000000000 --- a/features/Users/EditLanguageSetting.feature +++ /dev/null @@ -1,5 +0,0 @@ -Feature: Edit language settings - -As a user, -So that I have a good experience using the site, -I would like to be able to choose my preferred language in my settings. diff --git a/features/Users/EditProfile.feature b/features/Users/EditProfile.feature deleted file mode 100644 index 0c07c38937..0000000000 --- a/features/Users/EditProfile.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Edit profile - -As a user of Restarters.net -I want to be able to edit my profile -So that I can keep my details up to date - -Scenario: Editing email - Given I have an account on Discourse - When I update my email address in my profile - Then the email address update is also synced to Discourse diff --git a/features/Users/SyncLanguageSettings.feature b/features/Users/SyncLanguageSettings.feature deleted file mode 100644 index 43da078dea..0000000000 --- a/features/Users/SyncLanguageSettings.feature +++ /dev/null @@ -1,5 +0,0 @@ -Feature: Sync language settings - -As a user, -So that I have a good experience using the site, -I would like my choice of language setting to sync to Talk. diff --git a/specs-site/.gitignore b/specs-site/.gitignore new file mode 100644 index 0000000000..58ed2f44dc --- /dev/null +++ b/specs-site/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +.vitepress/cache/ +.vitepress/dist/ +# Generated pages (rebuilt from manifest) +features/ +personas/ +index.md diff --git a/specs-site/.vitepress/config.mts b/specs-site/.vitepress/config.mts new file mode 100644 index 0000000000..fa97a7053b --- /dev/null +++ b/specs-site/.vitepress/config.mts @@ -0,0 +1,53 @@ +import { defineConfig } from 'vitepress' +import fs from 'fs' +import path from 'path' + +function loadManifest() { + const manifestPath = path.resolve(__dirname, '../../docs/specs/manifest.json') + if (!fs.existsSync(manifestPath)) { + return { features: {}, personas: {}, coverage: { annotatedStories: 0, storiesWithTests: 0 } } + } + return JSON.parse(fs.readFileSync(manifestPath, 'utf-8')) +} + +function buildSidebar() { + const manifest = loadManifest() + const featureItems = Object.keys(manifest.features).sort().map(name => ({ + text: `${name} (${manifest.features[name].storyCount})`, + link: `/features/${name.toLowerCase().replace(/\s+/g, '-')}` + })) + const personaItems = Object.keys(manifest.personas).sort().map(name => ({ + text: `${name} (${manifest.personas[name].storyCount})`, + link: `/personas/${name.toLowerCase().replace(/\s+/g, '-')}` + })) + + return [ + { + text: 'Features', + items: featureItems + }, + { + text: 'Personas', + items: personaItems + } + ] +} + +export default defineConfig({ + title: 'Restarters Specifications', + description: 'Living documentation of what Restarters.net does, organised by feature and persona', + base: '/restarters.net/', + themeConfig: { + sidebar: buildSidebar(), + nav: [ + { text: 'Features', link: '/features/' }, + { text: 'Personas', link: '/personas/' } + ], + socialLinks: [ + { icon: 'github', link: 'https://github.com/TheRestartProject/restarters.net' } + ], + search: { + provider: 'local' + } + } +}) diff --git a/specs-site/generate-pages.mjs b/specs-site/generate-pages.mjs new file mode 100644 index 0000000000..b0561de9b4 --- /dev/null +++ b/specs-site/generate-pages.mjs @@ -0,0 +1,242 @@ +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const manifestPath = path.resolve(__dirname, '../docs/specs/manifest.json') +const narrativesDir = path.resolve(__dirname, '../docs/specs/narratives') +const featuresDir = path.resolve(__dirname, 'features') +const personasDir = path.resolve(__dirname, 'personas') + +const GITHUB_BASE = 'https://github.com/TheRestartProject/restarters.net/blob/develop' + +function loadManifest() { + if (!fs.existsSync(manifestPath)) { + console.error('No manifest found at docs/specs/manifest.json. Run php artisan specs:extract first.') + process.exit(1) + } + return JSON.parse(fs.readFileSync(manifestPath, 'utf-8')) +} + +function loadNarrative(featureName) { + const slug = featureName.toLowerCase().replace(/\s+/g, '-') + const filePath = path.join(narrativesDir, `${slug}.md`) + if (!fs.existsSync(filePath)) { + return null + } + let content = fs.readFileSync(filePath, 'utf-8') + // Strip the specs:hash comment + content = content.replace(/\n?/, '') + // Strip the top-level heading (we generate our own) + content = content.replace(/^#\s+.+\n+/, '') + return content.trim() +} + +function coverageIndicator(tests) { + if (!tests || tests.length === 0) return ':x: Uncovered' + const hasPhp = tests.some(t => t.file.endsWith('.php')) + const hasJs = tests.some(t => t.file.endsWith('.ts') || t.file.endsWith('.js')) + if (hasPhp && hasJs) return ':white_check_mark: Multi-layer' + return ':white_check_mark: Covered' +} + +function coveragePercent(stories) { + if (stories.length === 0) return '0%' + const covered = stories.filter(s => s.tests && s.tests.length > 0).length + return `${Math.round((covered / stories.length) * 100)}%` +} + +function ensureDir(dir) { + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }) + } +} + +function generateFeaturePages(manifest) { + ensureDir(featuresDir) + + // Index page + const featureNames = Object.keys(manifest.features).sort() + let indexContent = `# Features\n\nRestarters.net functionality organised by feature area.\n\n` + indexContent += `| Feature | Stories | Personas | Coverage |\n|---------|---------|----------|----------|\n` + + for (const name of featureNames) { + const f = manifest.features[name] + const slug = name.toLowerCase().replace(/\s+/g, '-') + const covered = f.stories.filter(s => s.tests && s.tests.length > 0).length + indexContent += `| [${name}](/features/${slug}) | ${f.storyCount} | ${f.personas.join(', ')} | ${covered}/${f.storyCount} (${coveragePercent(f.stories)}) |\n` + } + + fs.writeFileSync(path.join(featuresDir, 'index.md'), indexContent) + + // Individual feature pages + for (const name of featureNames) { + const f = manifest.features[name] + const slug = name.toLowerCase().replace(/\s+/g, '-') + const narrative = loadNarrative(name) + + let content = `# ${name}\n\n` + + if (f.description) { + content += `> ${f.description}\n\n` + } + + const covered = f.stories.filter(s => s.tests && s.tests.length > 0).length + content += `**${f.storyCount} stories** across ${f.personas.length} personas | **Coverage:** ${covered}/${f.storyCount} (${coveragePercent(f.stories)})\n\n` + + if (narrative) { + content += `## Overview\n\n${narrative}\n\n` + } + + // Group stories by persona + const byPersona = {} + for (const story of f.stories) { + if (!byPersona[story.persona]) { + byPersona[story.persona] = [] + } + byPersona[story.persona].push(story) + } + + for (const persona of Object.keys(byPersona).sort()) { + const stories = byPersona[persona] + content += `## ${persona}\n\n` + content += `| Story | Method | Tests |\n|-------|--------|-------|\n` + + for (const story of stories) { + const methodLink = `[\`${story.method}\`](${GITHUB_BASE}/${story.file})` + content += `| ${story.story} | ${methodLink} | ${coverageIndicator(story.tests)} |\n` + } + + content += `\n` + } + + // Sources + content += `## Source Files\n\n` + for (const source of f.sources.sort()) { + content += `- [\`${source}\`](${GITHUB_BASE}/${source})\n` + } + + fs.writeFileSync(path.join(featuresDir, `${slug}.md`), content) + } +} + +function generatePersonaPages(manifest) { + ensureDir(personasDir) + + // Index page + const personaNames = Object.keys(manifest.personas).sort() + let indexContent = `# Personas\n\nRestarters.net functionality organised by user persona.\n\n` + indexContent += `| Persona | Features | Stories | Coverage |\n|---------|----------|---------|----------|\n` + + for (const name of personaNames) { + const p = manifest.personas[name] + const slug = name.toLowerCase().replace(/\s+/g, '-') + + // Calculate coverage for this persona across all features + let totalStories = 0 + let coveredStories = 0 + for (const featureName of p.features) { + const feature = manifest.features[featureName] + if (!feature) continue + for (const story of feature.stories) { + if (story.persona === name) { + totalStories++ + if (story.tests && story.tests.length > 0) coveredStories++ + } + } + } + + indexContent += `| [${name}](/personas/${slug}) | ${p.features.length} | ${p.storyCount} | ${coveredStories}/${totalStories} (${totalStories > 0 ? Math.round((coveredStories / totalStories) * 100) : 0}%) |\n` + } + + fs.writeFileSync(path.join(personasDir, 'index.md'), indexContent) + + // Individual persona pages + for (const name of personaNames) { + const p = manifest.personas[name] + const slug = name.toLowerCase().replace(/\s+/g, '-') + + let content = `# ${name}\n\n` + content += `**${p.storyCount} stories** across ${p.features.length} features\n\n` + + for (const featureName of p.features.sort()) { + const feature = manifest.features[featureName] + if (!feature) continue + + const personaStories = feature.stories.filter(s => s.persona === name) + if (personaStories.length === 0) continue + + const featureSlug = featureName.toLowerCase().replace(/\s+/g, '-') + content += `## [${featureName}](/features/${featureSlug})\n\n` + content += `| Story | Method | Tests |\n|-------|--------|-------|\n` + + for (const story of personaStories) { + const methodLink = `[\`${story.method}\`](${GITHUB_BASE}/${story.file})` + content += `| ${story.story} | ${methodLink} | ${coverageIndicator(story.tests)} |\n` + } + + content += `\n` + } + + fs.writeFileSync(path.join(personasDir, `${slug}.md`), content) + } +} + +function generateHomePage(manifest) { + const totalStories = manifest.coverage.annotatedStories + const withTests = manifest.coverage.storiesWithTests + const featureCount = Object.keys(manifest.features).length + const personaCount = Object.keys(manifest.personas).length + + let content = `--- +layout: home +hero: + name: Restarters Specifications + tagline: Living documentation of what Restarters.net does + actions: + - theme: brand + text: Browse by Feature + link: /features/ + - theme: alt + text: Browse by Persona + link: /personas/ +--- + +## At a Glance + +| | | +|---|---| +| **Features** | ${featureCount} | +| **Personas** | ${personaCount} | +| **User Stories** | ${totalStories} | +| **Stories with Tests** | ${withTests} (${totalStories > 0 ? Math.round((withTests / totalStories) * 100) : 0}%) | +| **Generated** | ${manifest.generatedAt || 'Unknown'} | + +## Features + +` + + for (const name of Object.keys(manifest.features).sort()) { + const f = manifest.features[name] + const slug = name.toLowerCase().replace(/\s+/g, '-') + content += `- [**${name}**](/features/${slug}) — ${f.description || `${f.storyCount} stories`} (${f.storyCount} stories)\n` + } + + content += `\n## Personas\n\n` + + for (const name of Object.keys(manifest.personas).sort()) { + const p = manifest.personas[name] + const slug = name.toLowerCase().replace(/\s+/g, '-') + content += `- [**${name}**](/personas/${slug}) — ${p.storyCount} stories across ${p.features.join(', ')}\n` + } + + fs.writeFileSync(path.join(__dirname, 'index.md'), content) +} + +// Main +const manifest = loadManifest() +console.log(`Generating pages from manifest (${manifest.coverage.annotatedStories} stories, ${Object.keys(manifest.features).length} features, ${Object.keys(manifest.personas).length} personas)`) +generateHomePage(manifest) +generateFeaturePages(manifest) +generatePersonaPages(manifest) +console.log('Pages generated successfully') diff --git a/specs-site/package.json b/specs-site/package.json new file mode 100644 index 0000000000..9d57fc0ab8 --- /dev/null +++ b/specs-site/package.json @@ -0,0 +1,13 @@ +{ + "name": "restarters-specs", + "private": true, + "scripts": { + "prebuild": "node generate-pages.mjs", + "dev": "npm run prebuild && vitepress dev", + "build": "npm run prebuild && vitepress build", + "preview": "vitepress preview" + }, + "devDependencies": { + "vitepress": "^1.6.0" + } +} From 7df1b00046d13d9527f3b5576bbc60afc385c515 Mon Sep 17 00:00:00 2001 From: edwh Date: Thu, 16 Apr 2026 17:29:54 +0100 Subject: [PATCH 3/5] Add @story: test coverage annotations to 46 test files Links 135 of 168 user stories (80%) to their test methods via @story:ControllerClass::method docblock references. The specs:extract command now picks these up and the VitePress site shows coverage indicators per story. Co-Authored-By: Claude Opus 4.6 --- docs/specs/manifest.json | 1681 +++++++++++++++-- tests/Feature/Admin/Users/ViewUsersTest.php | 25 +- tests/Feature/Admin/Users/WikiLoginTests.php | 25 +- tests/Feature/Alerts/AlertsTest.php | 4 + tests/Feature/Brands/BrandsTest.php | 14 + tests/Feature/Calendar/CalendarTest.php | 8 + tests/Feature/Category/CategoryTest.php | 9 + tests/Feature/Dashboard/BasicTest.php | 9 +- .../Dashboard/LanguageSwitcherTest.php | 1 + tests/Feature/Devices/APIv2DeviceTest.php | 3 + tests/Feature/Devices/CategoryTest.php | 5 + tests/Feature/Devices/EditTest.php | 18 + tests/Feature/Devices/NullAgeProblemTest.php | 2 + .../Devices/NullEstimateProblemTest.php | 2 + tests/Feature/Devices/NullProblemTest.php | 5 +- tests/Feature/Devices/SparePartsTest.php | 25 +- tests/Feature/Devices/TooManyMiscTest.php | 1 + tests/Feature/Events/APIv2EventTest.php | 21 + .../Feature/Events/AddRemoveVolunteerTest.php | 10 +- tests/Feature/Events/AttendanceTest.php | 2 + tests/Feature/Events/CreateEventTest.php | 59 +- tests/Feature/Events/DeleteEventTest.php | 15 +- .../Events/EventRequestReviewEmailTest.php | 5 +- tests/Feature/Events/ExportTest.php | 9 + tests/Feature/Events/InviteEventTest.php | 24 + tests/Feature/Events/JoinEventTest.php | 6 + .../ModerationEventPhotosNotificationTest.php | 6 +- tests/Feature/Events/OnlineEventsTest.php | 5 +- tests/Feature/Fixometer/BasicTest.php | 2 + tests/Feature/Groups/APIv2GroupTest.php | 33 + tests/Feature/Groups/BasicTest.php | 3 + tests/Feature/Groups/GroupCreateTest.php | 8 + tests/Feature/Groups/GroupDeleteTest.php | 4 + tests/Feature/Groups/GroupEditTest.php | 25 +- tests/Feature/Groups/GroupHostTest.php | 8 + tests/Feature/Groups/GroupJoinTest.php | 4 + .../Feature/Groups/GroupNetworkCreateTest.php | 5 +- tests/Feature/Groups/GroupTagsTest.php | 5 + tests/Feature/Groups/GroupViewTest.php | 5 + tests/Feature/Groups/InviteGroupTest.php | 10 + tests/Feature/Home/HomeTest.php | 2 + tests/Feature/Networks/APIv2NetworkTest.php | 7 + tests/Feature/Networks/NetworkTest.php | 27 +- tests/Feature/Notifications/BasicTest.php | 1 + tests/Feature/Role/RoleTest.php | 6 + tests/Feature/Stats/EventStatsTest.php | 12 +- tests/Feature/Stats/GroupStatsTest.php | 10 +- .../Users/EditLanguageSettingsTest.php | 5 +- tests/Feature/Users/EditProfileTest.php | 9 +- tests/Feature/Users/GroupsNearbyTest.php | 1 + tests/Feature/Users/PasswordResetTest.php | 6 + tests/Feature/Users/ProfileTest.php | 11 + tests/Feature/Users/RecoverTest.php | 6 + tests/Feature/Users/SkillsTest.php | 11 + tests/Feature/Users/UserAdminTest.php | 4 +- tests/Feature/Zapier/ZapierNetworkTests.php | 32 +- tests/Unit/CharsetTest.php | 5 +- tests/Unit/Events/EventStateTest.php | 2 + tests/Unit/Events/TimezoneTest.php | 6 + 59 files changed, 2084 insertions(+), 190 deletions(-) diff --git a/docs/specs/manifest.json b/docs/specs/manifest.json index 0ca66b9e67..1c4ab7c2ad 100644 --- a/docs/specs/manifest.json +++ b/docs/specs/manifest.json @@ -1,5 +1,5 @@ { - "generatedAt": "2026-04-16T16:01:27Z", + "generatedAt": "2026-04-16T16:29:32Z", "features": { "Administration": { "description": "Platform administration and configuration", @@ -17,161 +17,324 @@ "persona": "Admin", "method": "AlertController::addAlertv2", "file": "app/Http/Controllers/API/AlertController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Alerts/AlertsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can update a platform alert", "persona": "Admin", "method": "AlertController::updateAlertv2", "file": "app/Http/Controllers/API/AlertController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Alerts/AlertsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can delete a device brand", "persona": "Admin", "method": "BrandsController::getDeleteBrand", "file": "app/Http/Controllers/BrandsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can access the form to edit a device brand", "persona": "Admin", "method": "BrandsController::getEditBrand", "file": "app/Http/Controllers/BrandsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can view all device brands", "persona": "Admin", "method": "BrandsController::index", "file": "app/Http/Controllers/BrandsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can create a new device brand", "persona": "Admin", "method": "BrandsController::postCreateBrand", "file": "app/Http/Controllers/BrandsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can update a device brand", "persona": "Admin", "method": "BrandsController::postEditBrand", "file": "app/Http/Controllers/BrandsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Brands/BrandsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can access the form to edit a device category", "persona": "Admin", "method": "CategoryController::getEditCategory", "file": "app/Http/Controllers/CategoryController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Category/CategoryTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Category/CategoryTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can view all device categories", "persona": "Admin", "method": "CategoryController::index", "file": "app/Http/Controllers/CategoryController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Category/CategoryTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can update a device category's details and impact factors", "persona": "Admin", "method": "CategoryController::postEditCategory", "file": "app/Http/Controllers/CategoryController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Category/CategoryTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Category/CategoryTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can delete a group tag", "persona": "Admin", "method": "GroupTagsController::getDeleteTag", "file": "app/Http/Controllers/GroupTagsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupTagsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can access the form to edit a group tag", "persona": "Admin", "method": "GroupTagsController::getEditTag", "file": "app/Http/Controllers/GroupTagsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupTagsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can view all group tags", "persona": "Admin", "method": "GroupTagsController::index", "file": "app/Http/Controllers/GroupTagsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupTagsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can create a new group tag", "persona": "Admin", "method": "GroupTagsController::postCreateTag", "file": "app/Http/Controllers/GroupTagsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupTagsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can update a group tag", "persona": "Admin", "method": "GroupTagsController::postEditTag", "file": "app/Http/Controllers/GroupTagsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupTagsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can edit the permissions assigned to a role", "persona": "Admin", "method": "RoleController::edit", "file": "app/Http/Controllers/RoleController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Role/RoleTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can view all roles and their permissions", "persona": "Admin", "method": "RoleController::index", "file": "app/Http/Controllers/RoleController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Role/RoleTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Role/RoleTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Role/RoleTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can delete a repair skill", "persona": "Admin", "method": "SkillsController::getDeleteSkill", "file": "app/Http/Controllers/SkillsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/SkillsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can access the form to edit a repair skill", "persona": "Admin", "method": "SkillsController::getEditSkill", "file": "app/Http/Controllers/SkillsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/SkillsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can view all repair skills", "persona": "Admin", "method": "SkillsController::index", "file": "app/Http/Controllers/SkillsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/SkillsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/SkillsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/SkillsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can create a new repair skill", "persona": "Admin", "method": "SkillsController::postCreateSkill", "file": "app/Http/Controllers/SkillsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/SkillsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can update a repair skill", "persona": "Admin", "method": "SkillsController::postEditSkill", "file": "app/Http/Controllers/SkillsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/SkillsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view active platform alerts", "persona": "Guest", "method": "AlertController::listAlertsv2", "file": "app/Http/Controllers/API/AlertController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Alerts/AlertsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Alerts/AlertsTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 23, @@ -198,7 +361,16 @@ "persona": "Restarter", "method": "DashboardController::index", "file": "app/Http/Controllers/DashboardController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Dashboard/BasicTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Dashboard/BasicTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 2, @@ -227,56 +399,176 @@ "persona": "Guest", "method": "ItemController::listItemsv2", "file": "app/Http/Controllers/API/ItemController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/CategoryTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can delete a device record from my event", "persona": "Host", "method": "DeviceController::deleteDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can log a device repair at an event I attended", "persona": "Restarter", "method": "DeviceController::createDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/NullEstimateProblemTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/SparePartsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/SparePartsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/SparePartsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/SparePartsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/SparePartsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/NullProblemTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/NullAgeProblemTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/TooManyMiscTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/CategoryTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/APIv2DeviceTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can delete device photos I've uploaded", "persona": "Restarter", "method": "DeviceController::deleteImage", "file": "app/Http/Controllers/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can upload photos of devices I've worked on", "persona": "Restarter", "method": "DeviceController::imageUpload", "file": "app/Http/Controllers/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can browse all devices and view global repair impact data", "persona": "Restarter", "method": "DeviceController::index", "file": "app/Http/Controllers/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Fixometer/BasicTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can update a device repair record at an event I attended", "persona": "Restarter", "method": "DeviceController::updateDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/NullEstimateProblemTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/NullAgeProblemTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/CategoryTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/EditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve device repair data via the API", "persona": "ThirdParty", "method": "DeviceController::getDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/APIv2DeviceTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/APIv2DeviceTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 9, @@ -307,21 +599,36 @@ "persona": "Guest", "method": "CalendarEventsController::allEventsByArea", "file": "app/Http/Controllers/CalendarEventsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can subscribe to a group's events as an iCal feed", "persona": "Guest", "method": "CalendarEventsController::allEventsByGroup", "file": "app/Http/Controllers/CalendarEventsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can subscribe to a network's events as an iCal feed", "persona": "Guest", "method": "CalendarEventsController::allEventsByNetwork", "file": "app/Http/Controllers/CalendarEventsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view event details via the API", @@ -342,42 +649,224 @@ "persona": "Guest", "method": "PartyController::confirmCodeInvite", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view an event's repair impact statistics", "persona": "Guest", "method": "PartyController::stats", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Stats/EventStatsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view a public event's details and repair statistics", "persona": "Guest", "method": "PartyController::view", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/JoinEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Stats/EventStatsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/Events/EventStateTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/CharsetTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can add a volunteer to my event", "persona": "Host", "method": "EventController::addVolunteer", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can create an event via the API", "persona": "Host", "method": "EventController::createEventv2", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/OnlineEventsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/Events/EventStateTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/Events/TimezoneTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/Events/TimezoneTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can update my event via the API", "persona": "Host", "method": "EventController::updateEventv2", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Dashboard/BasicTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/Events/TimezoneTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can access the form to create a new event for my group", @@ -391,21 +880,48 @@ "persona": "Host", "method": "PartyController::create", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can delete an event from my group", "persona": "Host", "method": "PartyController::deleteEvent", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can duplicate an existing event to create a new one", "persona": "Host", "method": "PartyController::duplicate", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can edit my group's event details", @@ -419,126 +935,324 @@ "persona": "Host", "method": "PartyController::getContributions", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/EventRequestReviewEmailTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can retrieve group member emails to invite them to an event", "persona": "Host", "method": "PartyController::getGroupEmailsWithNames", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can send email invitations for an event", "persona": "Host", "method": "PartyController::postSendInvite", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can remove a volunteer from my event", "persona": "Host", "method": "PartyController::removeVolunteer", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can update the participant count for my event", "persona": "Host", "method": "PartyController::updateQuantity", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AttendanceTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can update the volunteer count for my event", "persona": "Host", "method": "PartyController::updateVolunteerQuantity", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AttendanceTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can list events across my networks", "persona": "NetworkCoordinator", "method": "EventController::getEventsByUsersNetworks", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can view events pending moderation in my networks", "persona": "NetworkCoordinator", "method": "EventController::moderateEventsv2", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can edit events for groups in my network", "persona": "NetworkCoordinator", "method": "PartyController::edit", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can subscribe to my events as an iCal feed", "persona": "Restarter", "method": "CalendarEventsController::allEventsByUser", "file": "app/Http/Controllers/CalendarEventsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Calendar/CalendarTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can cancel my attendance at an event", "persona": "Restarter", "method": "PartyController::cancelInvite", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/JoinEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can accept an event invitation", "persona": "Restarter", "method": "PartyController::confirmInvite", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can delete my uploaded event photos", "persona": "Restarter", "method": "PartyController::deleteImage", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/ModerationEventPhotosNotificationTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can RSVP to attend an upcoming event", "persona": "Restarter", "method": "PartyController::getJoinEvent", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/JoinEventTest.php", + "test": "PHPUnit" + }, + { + "file": "tests/Feature/Events/JoinEventTest.php", + "test": "PHPUnit" + } + ] }, { "story": "As a Restarter, I can upload photos from an event", "persona": "Restarter", "method": "PartyController::imageUpload", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/ModerationEventPhotosNotificationTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can view upcoming events and events near me", "persona": "Restarter", "method": "PartyController::index", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/InviteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Dashboard/BasicTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/Events/TimezoneTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve event details to display on my platform", "persona": "ThirdParty", "method": "EventController::getEventv2", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve volunteer data for an event via the API", "persona": "ThirdParty", "method": "EventController::listVolunteers", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 35, @@ -564,14 +1278,40 @@ "persona": "Admin", "method": "GroupController::delete", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupDeleteTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupDeleteTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupDeleteTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupDeleteTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can list group audit changes for Zapier integration", "persona": "Admin", "method": "GroupController::getGroupChanges", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can view all groups pending moderation", @@ -585,14 +1325,28 @@ "persona": "Admin", "method": "UserGroupsController::changes", "file": "app/Http/Controllers/API/UserGroupsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can join a group using a shareable invite code", "persona": "Guest", "method": "GroupController::confirmCodeInvite", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/InviteGroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can list events for a group via the API", @@ -634,126 +1388,344 @@ "persona": "Guest", "method": "GroupController::stats", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Stats/GroupStatsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can remove my group's image", "persona": "Host", "method": "GroupController::ajaxDeleteImage", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can remove a volunteer from my group", "persona": "Host", "method": "GroupController::deleteVolunteerForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupHostTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupHostTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can edit my group's details and settings", "persona": "Host", "method": "GroupController::edit", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can upload an image for my group", "persona": "Host", "method": "GroupController::imageUpload", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can change a volunteer's role in my group", "persona": "Host", "method": "GroupController::patchVolunteerForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupHostTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupHostTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupHostTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can send email invitations to join my group", "persona": "Host", "method": "GroupController::postSendInvite", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/InviteGroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/InviteGroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can update my group via the API", "persona": "Host", "method": "GroupController::updateGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupCreateTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupEditTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/GroupsNearbyTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Unit/Events/TimezoneTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can list all groups in my networks via the API", "persona": "NetworkCoordinator", "method": "GroupController::getGroupsByUsersNetworks", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can view groups pending moderation in my networks", "persona": "NetworkCoordinator", "method": "GroupController::moderateGroupsv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can browse all repair groups on the platform", "persona": "Restarter", "method": "GroupController::all", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/BasicTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can accept a group invitation", "persona": "Restarter", "method": "GroupController::confirmInvite", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/InviteGroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can create a new repair group and become its Host", "persona": "Restarter", "method": "GroupController::create", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupCreateTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupCreateTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupCreateTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupCreateTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can create a new group via the API", "persona": "Restarter", "method": "GroupController::createGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupNetworkCreateTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can list all groups via the API", "persona": "Restarter", "method": "GroupController::getGroupList", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupCreateTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can join a repair group", "persona": "Restarter", "method": "GroupController::getJoinGroup", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupJoinTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can view the groups I belong to", "persona": "Restarter", "method": "GroupController::mine", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/BasicTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can discover repair groups near my location", "persona": "Restarter", "method": "GroupController::nearby", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/BasicTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can browse groups within a specific network", @@ -767,49 +1739,152 @@ "persona": "Restarter", "method": "GroupController::view", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Stats/EventStatsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/InviteGroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/InviteGroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can leave a group I belong to", "persona": "Restarter", "method": "UserGroupsController::leave", "file": "app/Http/Controllers/API/UserGroupsController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupJoinTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve events for a group to display on my platform", "persona": "ThirdParty", "method": "GroupController::getEventsForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "PHPUnit" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "PHPUnit" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve group details to display on my platform", "persona": "ThirdParty", "method": "GroupController::getGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve volunteer data for a group via the API", "persona": "ThirdParty", "method": "GroupController::getVolunteersForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupHostTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve group names to display on my own platform", "persona": "ThirdParty", "method": "GroupController::listNamesv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve group tags to categorise groups on my platform", "persona": "ThirdParty", "method": "GroupController::listTagsv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 36, @@ -869,70 +1944,136 @@ "persona": "NetworkCoordinator", "method": "NetworkController::associateGroup", "file": "app/Http/Controllers/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can access the form to edit my network", "persona": "NetworkCoordinator", "method": "NetworkController::edit", "file": "app/Http/Controllers/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can view the networks I coordinate", "persona": "NetworkCoordinator", "method": "NetworkController::index", "file": "app/Http/Controllers/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can view my network's details and statistics", "persona": "NetworkCoordinator", "method": "NetworkController::show", "file": "app/Http/Controllers/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can view my network's statistics via the API", "persona": "NetworkCoordinator", "method": "NetworkController::stats", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can update my network's details and logo", "persona": "NetworkCoordinator", "method": "NetworkController::update", "file": "app/Http/Controllers/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve events for a network to display on my platform", "persona": "ThirdParty", "method": "NetworkController::getNetworkEventsv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve groups for a network to display on my platform", "persona": "ThirdParty", "method": "NetworkController::getNetworkGroupsv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve all networks to display on my platform", "persona": "ThirdParty", "method": "NetworkController::getNetworksv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve network details via the API", "persona": "ThirdParty", "method": "NetworkController::getNetworkv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 15, @@ -961,14 +2102,24 @@ "persona": "Admin", "method": "ApiController::getUserList", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view the platform's global repair impact statistics", "persona": "Guest", "method": "AdminController::stats", "file": "app/Http/Controllers/AdminController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Stats/EventStatsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can search and filter device records via the API", @@ -1003,14 +2154,28 @@ "persona": "Guest", "method": "DiscourseController::discussionTopics", "file": "app/Http/Controllers/API/DiscourseController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Dashboard/BasicTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view the landing page with platform impact statistics", "persona": "Guest", "method": "HomeController::index", "file": "app/Http/Controllers/HomeController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Home/HomeTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Home/HomeTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can dismiss an information alert banner", @@ -1024,7 +2189,16 @@ "persona": "Guest", "method": "LocaleController::setLang", "file": "app/Http/Controllers/LocaleController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/EditLanguageSettingsTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Dashboard/LanguageSwitcherTest.php", + "test": "PHPUnit" + } + ] }, { "story": "As a Guest, I can view embeddable CO2 impact visualisations for events and groups", @@ -1038,42 +2212,84 @@ "persona": "NetworkCoordinator", "method": "ExportController::networkEvents", "file": "app/Http/Controllers/ExportController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/ExportTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can retrieve my own profile information via the API", "persona": "Restarter", "method": "ApiController::getUserInfo", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can export all device records as CSV", "persona": "Restarter", "method": "ExportController::devices", "file": "app/Http/Controllers/ExportController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/ExportTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Fixometer/BasicTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can export device data from an event as CSV", "persona": "Restarter", "method": "ExportController::devicesEvent", "file": "app/Http/Controllers/ExportController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/ExportTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/ExportTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can export device data from a group as CSV", "persona": "Restarter", "method": "ExportController::devicesGroup", "file": "app/Http/Controllers/ExportController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/ExportTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/ExportTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can export a group's event summary as CSV", "persona": "Restarter", "method": "ExportController::groupEvents", "file": "app/Http/Controllers/ExportController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/ExportTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can search and retrieve device records via the API", @@ -1087,7 +2303,16 @@ "persona": "ThirdParty", "method": "ApiController::groupStats", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Stats/GroupStatsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve aggregate platform impact data for embedding", @@ -1101,14 +2326,24 @@ "persona": "ThirdParty", "method": "ApiController::partyStats", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can embed CO2 impact widgets for events and groups on my platform", "persona": "ThirdParty", "method": "OutboundController::info", "file": "app/Http/Controllers/OutboundController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 22, @@ -1133,14 +2368,40 @@ "persona": "Admin", "method": "UserController::all", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/UserAdminTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/ViewUsersTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/ViewUsersTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/ViewUsersTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can list user audit changes for Zapier integration", "persona": "Admin", "method": "UserController::changes", "file": "app/Http/Controllers/API/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Zapier/ZapierNetworkTests.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can create a new user account", @@ -1154,21 +2415,48 @@ "persona": "Admin", "method": "UserController::edit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can edit a user's role, groups, and permissions", "persona": "Admin", "method": "UserController::postAdminEdit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can change a user's Repair Directory role", "persona": "Admin", "method": "UserController::postProfileRepairDirectory", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can delete a user's account", @@ -1182,21 +2470,56 @@ "persona": "Admin", "method": "UserController::search", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Admin/Users/ViewUsersTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/ViewUsersTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can log in to the platform", "persona": "Guest", "method": "LoginController::login", "file": "app/Http/Controllers/Auth/LoginController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/RecoverTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/WikiLoginTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/WikiLoginTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/WikiLoginTests.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/WikiLoginTests.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view the login page", "persona": "Guest", "method": "LoginController::showLoginForm", "file": "app/Http/Controllers/Auth/LoginController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/RecoverTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view the registration page", @@ -1217,21 +2540,52 @@ "persona": "Guest", "method": "UserController::recover", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/PasswordResetTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/PasswordResetTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/PasswordResetTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/RecoverTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can reset my password using a recovery code", "persona": "Guest", "method": "UserController::reset", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/PasswordResetTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/RecoverTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can view my notifications", "persona": "Restarter", "method": "UserController::getNotifications", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Notifications/BasicTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can complete my onboarding process", @@ -1245,14 +2599,24 @@ "persona": "Restarter", "method": "UserController::getProfileEdit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/EditProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can view my profile or another user's profile", "persona": "Restarter", "method": "UserController::index", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can log out of my account", @@ -1266,49 +2630,92 @@ "persona": "Restarter", "method": "UserController::postProfileInfoEdit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/EditProfileTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Users/EditProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can change my password", "persona": "Restarter", "method": "UserController::postProfilePasswordEdit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Admin/Users/WikiLoginTests.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can upload a new profile picture", "persona": "Restarter", "method": "UserController::postProfilePictureEdit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/EditProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can update my notification preferences", "persona": "Restarter", "method": "UserController::postProfilePreferencesEdit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can update my repair skills", "persona": "Restarter", "method": "UserController::postProfileTagsEdit", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/EditProfileTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can delete my own account", "persona": "Restarter", "method": "UserController::postSoftDeleteUser", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/UserAdminTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can change my preferred language", "persona": "Restarter", "method": "UserController::storeLanguage", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/ProfileTest.php", + "test": "(unknown test)" + } + ] } ], "storyCount": 26, @@ -1385,6 +2792,6 @@ }, "coverage": { "annotatedStories": 168, - "storiesWithTests": 0 + "storiesWithTests": 135 } } diff --git a/tests/Feature/Admin/Users/ViewUsersTest.php b/tests/Feature/Admin/Users/ViewUsersTest.php index 1647eb214a..fe44d49ea9 100644 --- a/tests/Feature/Admin/Users/ViewUsersTest.php +++ b/tests/Feature/Admin/Users/ViewUsersTest.php @@ -22,7 +22,10 @@ protected function setUp(): void $this->actingAs($admin); } - /** @test */ + /** + * @test + * @story:UserController::all + */ public function an_admin_can_view_list_of_users() { // Given we have users in the database @@ -35,7 +38,10 @@ public function an_admin_can_view_list_of_users() $response->assertSeeText($users[0]->name); } - /** @test */ + /** + * @test + * @story:UserController::all + */ public function an_admin_can_see_how_many_total_users_in_the_list() { // Given we have users in the database @@ -48,7 +54,10 @@ public function an_admin_can_see_how_many_total_users_in_the_list() $response->assertSeeText(42); } - /** @test */ + /** + * @test + * @story:UserController::all + */ public function admin_can_see_users_last_login_time() { // Given we have a user who has just logged in @@ -64,7 +73,10 @@ public function admin_can_see_users_last_login_time() $response->assertSeeText($lastLogin->diffForHumans(null, true)); } - /** @test */ + /** + * @test + * @story:UserController::search + */ public function admin_can_see_users_last_login_time_on_filtered_results() { // Given we have a user who has just logged in @@ -80,7 +92,10 @@ public function admin_can_see_users_last_login_time_on_filtered_results() $response->assertSeeText($lastLogin->diffForHumans(null, true)); } - /** @test */ + /** + * @test + * @story:UserController::search + */ public function admin_can_sort_user_list_by_last_login() { // Given we have users with various login times diff --git a/tests/Feature/Admin/Users/WikiLoginTests.php b/tests/Feature/Admin/Users/WikiLoginTests.php index a0ba989370..8d18412845 100644 --- a/tests/Feature/Admin/Users/WikiLoginTests.php +++ b/tests/Feature/Admin/Users/WikiLoginTests.php @@ -27,7 +27,10 @@ protected function setUp(): void DB::statement('SET foreign_key_checks=1'); } - /** @test */ + /** + * @test + * @story:LoginController::login + */ public function if_flagged_for_creation_create_when_logging_in() { $this->withoutExceptionHandling(); @@ -51,7 +54,10 @@ public function if_flagged_for_creation_create_when_logging_in() $this->assertEquals(WikiSyncStatus::Created, $user->wiki_sync_status); } - /** @test */ + /** + * @test + * @story:LoginController::login + */ public function if_not_flagged_for_creation() { $this->withoutExceptionHandling(); @@ -75,7 +81,10 @@ public function if_not_flagged_for_creation() $this->assertEquals(WikiSyncStatus::DoNotCreate, $user->wiki_sync_status); } - /** @test */ + /** + * @test + * @story:LoginController::login + */ public function if_already_created() { $this->withoutExceptionHandling(); @@ -99,7 +108,10 @@ public function if_already_created() $this->assertEquals(WikiSyncStatus::Created, $user->wiki_sync_status); } - /** @test */ + /** + * @test + * @story:UserController::postProfilePasswordEdit + */ public function if_wiki_user_changes_password() { $this->withoutExceptionHandling(); @@ -120,7 +132,10 @@ public function if_wiki_user_changes_password() // Then the user's wiki password should be changed to match } - /** @test */ + /** + * @test + * @story:LoginController::login + */ public function login_succeeds_when_wiki_unavailable() { $this->withoutExceptionHandling(); diff --git a/tests/Feature/Alerts/AlertsTest.php b/tests/Feature/Alerts/AlertsTest.php index 16a1303cd7..4cff9cd1d7 100644 --- a/tests/Feature/Alerts/AlertsTest.php +++ b/tests/Feature/Alerts/AlertsTest.php @@ -18,6 +18,7 @@ protected function setUp(): void Cache::clear('alerts'); } + /** @story:AlertController::listAlertsv2 */ public function testListNonePresent() { // List - no alerts present. @@ -29,6 +30,9 @@ public function testListNonePresent() } /** + * @story:AlertController::addAlertv2 + * @story:AlertController::listAlertsv2 + * @story:AlertController::updateAlertv2 * @dataProvider roleProvider */ public function testCreate($role, $allowed) { diff --git a/tests/Feature/Brands/BrandsTest.php b/tests/Feature/Brands/BrandsTest.php index 306561f05e..79ae690132 100644 --- a/tests/Feature/Brands/BrandsTest.php +++ b/tests/Feature/Brands/BrandsTest.php @@ -11,6 +11,13 @@ class BrandsTest extends TestCase { + /** + * @story:BrandsController::postCreateBrand + * @story:BrandsController::index + * @story:BrandsController::getEditBrand + * @story:BrandsController::postEditBrand + * @story:BrandsController::getDeleteBrand + */ public function testBasic() { $this->loginAsTestUser(Role::ADMINISTRATOR); @@ -47,6 +54,13 @@ public function testBasic() $response->assertSessionHas('message'); } + /** + * @story:BrandsController::postCreateBrand + * @story:BrandsController::index + * @story:BrandsController::getEditBrand + * @story:BrandsController::postEditBrand + * @story:BrandsController::getDeleteBrand + */ public function testErrors() { $this->loginAsTestUser(Role::RESTARTER); diff --git a/tests/Feature/Calendar/CalendarTest.php b/tests/Feature/Calendar/CalendarTest.php index f158de5007..bff674001b 100644 --- a/tests/Feature/Calendar/CalendarTest.php +++ b/tests/Feature/Calendar/CalendarTest.php @@ -93,6 +93,7 @@ protected function setUp(): void ]); } + /** @story:CalendarEventsController::allEventsByUser */ public function testByUser() { // Valid hash. $response = $this->get('/calendar/user/' . $this->host->calendar_hash); @@ -107,6 +108,7 @@ public function testByUser() { $response = $this->get('/calendar/user/' . $this->host->calendar_hash . '1'); } + /** @story:CalendarEventsController::allEventsByGroup */ public function testByGroup() { // One event. $response = $this->get('/calendar/group/' . $this->group->idgroups); @@ -120,6 +122,7 @@ public function testByGroup() { $response = $this->get('/calendar/group/' . $this->group2->idgroups); } + /** @story:CalendarEventsController::allEventsByNetwork */ public function testByNetwork() { // One event. $response = $this->get('/calendar/network/' . $this->network->id); @@ -134,6 +137,7 @@ public function testByNetwork() { $response = $this->get('/calendar/network/' . $network->id); } + /** @story:CalendarEventsController::allEventsByArea */ public function testByArea() { // One event. $response = $this->get('/calendar/group-area/London'); @@ -159,6 +163,7 @@ public function testAll() { $response = $this->get('/calendar/all-events/' . env('CALENDAR_HASH') . '1'); } + /** @story:CalendarEventsController::allEventsByUser */ public function testCancelled() { $this->event->cancelled = 1; $this->event->save(); @@ -167,6 +172,7 @@ public function testCancelled() { $this->expectOutputRegex('/CANCELLED/'); } + /** @story:CalendarEventsController::allEventsByUser */ public function testEventNotApproved() { $this->event->approved = false; $this->event->save(); @@ -175,6 +181,7 @@ public function testEventNotApproved() { $this->expectOutputRegex('/TENTATIVE/'); } + /** @story:CalendarEventsController::allEventsByUser */ public function testGroupNotApproved() { $this->group->approved = false; $this->group->save(); @@ -183,6 +190,7 @@ public function testGroupNotApproved() { $this->expectOutputRegex('/TENTATIVE/'); } + /** @story:CalendarEventsController::allEventsByUser */ public function testEventNotVisible() { $host = User::factory()->create([ 'latitude' => 50.64, diff --git a/tests/Feature/Category/CategoryTest.php b/tests/Feature/Category/CategoryTest.php index 0239aa66f1..ef3921f821 100644 --- a/tests/Feature/Category/CategoryTest.php +++ b/tests/Feature/Category/CategoryTest.php @@ -10,6 +10,11 @@ class CategoryTest extends TestCase { + /** + * @story:CategoryController::index + * @story:CategoryController::getEditCategory + * @story:CategoryController::postEditCategory + */ public function testBasic() { $this->loginAsTestUser(Role::ADMINISTRATOR); @@ -41,6 +46,10 @@ public function testBasic() $response->assertSessionHas('success'); } + /** + * @story:CategoryController::getEditCategory + * @story:CategoryController::postEditCategory + */ public function testErrors() { $this->loginAsTestUser(Role::RESTARTER); diff --git a/tests/Feature/Dashboard/BasicTest.php b/tests/Feature/Dashboard/BasicTest.php index 78c37399a4..bf8ca0b41b 100644 --- a/tests/Feature/Dashboard/BasicTest.php +++ b/tests/Feature/Dashboard/BasicTest.php @@ -24,7 +24,9 @@ protected function setUp(): void } /** - *@dataProvider provider + * @story:DashboardController::index + * @story:DiscourseController::discussionTopics + * @dataProvider provider */ public function testPageLoads($city, $country, $lat, $lng, $nearbyGroupCount) { @@ -84,6 +86,11 @@ public function provider() ]; } + /** + * @story:DashboardController::index + * @story:PartyController::index + * @story:EventController::updateEventv2 + */ public function testUpcomingEvents() { $host = User::factory()->restarter()->create(); diff --git a/tests/Feature/Dashboard/LanguageSwitcherTest.php b/tests/Feature/Dashboard/LanguageSwitcherTest.php index 53d4b6f2eb..721beea08b 100644 --- a/tests/Feature/Dashboard/LanguageSwitcherTest.php +++ b/tests/Feature/Dashboard/LanguageSwitcherTest.php @@ -13,6 +13,7 @@ class LanguageSwitcherTest extends TestCase { + /** @story:LocaleController::setLang */ public function testSwitchEndpoint() { $this->loginAsTestUser(Role::ADMINISTRATOR); diff --git a/tests/Feature/Devices/APIv2DeviceTest.php b/tests/Feature/Devices/APIv2DeviceTest.php index 571c69bb70..9fe337d786 100644 --- a/tests/Feature/Devices/APIv2DeviceTest.php +++ b/tests/Feature/Devices/APIv2DeviceTest.php @@ -28,6 +28,7 @@ class APIv2DeviceTest extends TestCase * This logic duplicates that in DeviceController, but it's worth testing to make sure that the API is * behaving as we'd expect from the DB entries. * + * @story:DeviceController::getDevicev2 * @dataProvider providerDevice */ public function testGetDevice($repair_status_str, $parts_provider_str, $next_steps_str, $barrierstr) { @@ -149,6 +150,8 @@ public function testGetDevice($repair_status_str, $parts_provider_str, $next_ste /** * Create a device over the API and check it retrieves as expected. * + * @story:DeviceController::createDevicev2 + * @story:DeviceController::getDevicev2 * @dataProvider providerDevice */ public function testCreate($repair_status_str, $parts_provider_str, $next_steps_str, $barrierstr) { diff --git a/tests/Feature/Devices/CategoryTest.php b/tests/Feature/Devices/CategoryTest.php index 1964092c11..1971d2a866 100644 --- a/tests/Feature/Devices/CategoryTest.php +++ b/tests/Feature/Devices/CategoryTest.php @@ -11,6 +11,10 @@ class CategoryTest extends TestCase { + /** + * @story:DeviceController::createDevicev2 + * @story:DeviceController::updateDevicev2 + */ public function testCategoryChange() { $event = Party::factory()->create(); @@ -50,6 +54,7 @@ public function testCategoryChange() self::assertEquals($device->category, 46); } + /** @story:ItemController::listItemsv2 */ public function testListItems() { $cat1 = Category::factory()->create([ 'idcategories' => 444, diff --git a/tests/Feature/Devices/EditTest.php b/tests/Feature/Devices/EditTest.php index be3d7b11fb..2a5071e624 100644 --- a/tests/Feature/Devices/EditTest.php +++ b/tests/Feature/Devices/EditTest.php @@ -30,6 +30,11 @@ protected function setUp(): void $this->withoutExceptionHandling(); } + /** + * @story:DeviceController::createDevicev2 + * @story:DeviceController::updateDevicev2 + * @story:DeviceController::deleteDevicev2 + */ public function testEdit() { $iddevices = $this->createDevice($this->event->idevents, 'misc'); @@ -56,6 +61,10 @@ public function testEdit() $this->deleteDevice($iddevices); } + /** + * @story:DeviceController::createDevicev2 + * @story:DeviceController::updateDevicev2 + */ public function testEditAsNetworkCoordinator() { $network = Network::factory()->create(); @@ -83,6 +92,10 @@ public function testEditAsNetworkCoordinator() $response->assertSuccessful(); } + /** + * @story:DeviceController::imageUpload + * @story:DeviceController::deleteImage + */ public function testDeviceEditAddImage() { Storage::fake('avatars'); $user = User::factory()->administrator()->create(); @@ -146,6 +159,10 @@ public function testDeviceEditAddImage() { $this->assertEquals('Thank you, the image has been deleted', \Session::get('message')); } + /** + * @story:DeviceController::imageUpload + * @story:DeviceController::deleteImage + */ public function testDeviceAddAddImage() { Storage::fake('avatars'); $user = User::factory()->administrator()->create(); @@ -202,6 +219,7 @@ public function testDeviceAddAddImage() { $this->assertEquals('Thank you, the image has been deleted', \Session::get('message')); } + /** @story:DeviceController::updateDevicev2 */ public function testNextSteps() { $iddevices = $this->createDevice($this->event->idevents, 'misc'); diff --git a/tests/Feature/Devices/NullAgeProblemTest.php b/tests/Feature/Devices/NullAgeProblemTest.php index a3ad994c0b..0942f78b0f 100644 --- a/tests/Feature/Devices/NullAgeProblemTest.php +++ b/tests/Feature/Devices/NullAgeProblemTest.php @@ -11,6 +11,7 @@ class NullAgeProblemTest extends TestCase { + /** @story:DeviceController::createDevicev2 */ public function testNullAgeCreate() { $event = Party::factory()->create(); @@ -24,6 +25,7 @@ public function testNullAgeCreate() $iddevices = $this->createDevice($event->idevents, 'misc', null, null); } + /** @story:DeviceController::updateDevicev2 */ public function testNullAgeEdit() { $event = Party::factory()->create(); diff --git a/tests/Feature/Devices/NullEstimateProblemTest.php b/tests/Feature/Devices/NullEstimateProblemTest.php index 620941c1ac..54d0f5fade 100644 --- a/tests/Feature/Devices/NullEstimateProblemTest.php +++ b/tests/Feature/Devices/NullEstimateProblemTest.php @@ -11,6 +11,7 @@ class NullEstimateProblemTest extends TestCase { + /** @story:DeviceController::createDevicev2 */ public function testNullEstimateCreate() { $event = Party::factory()->create(); @@ -23,6 +24,7 @@ public function testNullEstimateCreate() $iddevices = $this->createDevice($event->idevents, 'misc', null, 1, null); } + /** @story:DeviceController::updateDevicev2 */ public function testNullEstimateEdit() { $event = Party::factory()->create(); diff --git a/tests/Feature/Devices/NullProblemTest.php b/tests/Feature/Devices/NullProblemTest.php index ebc48636a9..1128e9e098 100644 --- a/tests/Feature/Devices/NullProblemTest.php +++ b/tests/Feature/Devices/NullProblemTest.php @@ -26,7 +26,10 @@ protected function setUp(): void $this->withoutExceptionHandling(); } - /** @test */ + /** + * @test + * @story:DeviceController::createDevicev2 + */ public function null_problem_mapped_to_empty_string() { $iddevices = $this->createDevice($this->event->idevents, 'misc', null, 1, 100, null); diff --git a/tests/Feature/Devices/SparePartsTest.php b/tests/Feature/Devices/SparePartsTest.php index 3f97328b15..ead6127012 100644 --- a/tests/Feature/Devices/SparePartsTest.php +++ b/tests/Feature/Devices/SparePartsTest.php @@ -31,7 +31,10 @@ protected function setUp(): void $this->withoutExceptionHandling(); } - /** @test */ + /** + * @test + * @story:DeviceController::createDevicev2 + */ public function recording_spare_parts_from_manufacturer() { $iddevices = $this->createDevice($this->event->idevents, @@ -47,7 +50,10 @@ public function recording_spare_parts_from_manufacturer() $this->assertEquals(trans('partials.fixed'), $device->getRepairStatus()); } - /** @test */ + /** + * @test + * @story:DeviceController::createDevicev2 + */ public function recording_spare_parts_from_third_party() { $this->device_inputs['repair_status'] = Device::REPAIR_STATUS_REPAIRABLE; @@ -66,7 +72,10 @@ public function recording_spare_parts_from_third_party() $this->assertEquals(trans('partials.yes_third_party'), $device->getSpareParts()); } - /** @test */ + /** + * @test + * @story:DeviceController::createDevicev2 + */ public function recording_no_spare_parts_needed() { $iddevices = $this->createDevice($this->event->idevents, @@ -81,7 +90,10 @@ public function recording_no_spare_parts_needed() $this->assertEquals(trans('partials.no'), $device->getSpareParts()); } - /** @test */ + /** + * @test + * @story:DeviceController::createDevicev2 + */ public function recording_spare_parts_related_barrier() { $iddevices = $this->createDevice($this->event->idevents, @@ -95,7 +107,10 @@ public function recording_spare_parts_related_barrier() } - /** @test */ + /** + * @test + * @story:DeviceController::createDevicev2 + */ public function recording_no_spare_parts_related_barrier() { $iddevices = $this->createDevice($this->event->idevents, diff --git a/tests/Feature/Devices/TooManyMiscTest.php b/tests/Feature/Devices/TooManyMiscTest.php index 85104bb138..4e85bbf040 100644 --- a/tests/Feature/Devices/TooManyMiscTest.php +++ b/tests/Feature/Devices/TooManyMiscTest.php @@ -13,6 +13,7 @@ class TooManyMiscTest extends TestCase { /** + * @story:DeviceController::createDevicev2 * @dataProvider provider */ public function testTooMany($count, $notif) diff --git a/tests/Feature/Events/APIv2EventTest.php b/tests/Feature/Events/APIv2EventTest.php index f11b3e42d7..85f731f248 100644 --- a/tests/Feature/Events/APIv2EventTest.php +++ b/tests/Feature/Events/APIv2EventTest.php @@ -18,6 +18,11 @@ class APIv2EventTest extends TestCase { + /** + * @story:GroupController::getEventsForGroupv2 + * @story:EventController::getEventv2 + * @story:EventController::moderateEventsv2 + */ public function testGetEventsForGroup() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -78,6 +83,11 @@ public function testGetEventsForGroup() { self::assertFalse($json[1]['approved']); } + /** + * @story:GroupController::getEventsForGroupv2 + * @story:EventController::getEventv2 + * @story:NetworkController::getNetworkEventsv2 + */ public function testGetEventsForUnapprovedGroup() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -110,6 +120,10 @@ public function testGetEventsForUnapprovedGroup() { $response->assertSuccessful(); } + /** + * @story:EventController::getEventv2 + * @story:EventController::getEventsByUsersNetworks + */ public function testMaxUpdatedAt() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -161,6 +175,8 @@ public function testMaxUpdatedAt() { * @param $role * @return void * @dataProvider roleProvider + * @story:GroupController::createGroupv2 + * @story:EventController::createEventv2 */ public function testCreateLoggedOutUsingKey($role) { switch ($role) { @@ -216,6 +232,7 @@ public function roleProvider() { ]; } + /** @story:EventController::updateEventv2 */ public function testEditForbidden() { $user1 = User::factory()->host()->create([ 'api_token' => '1234', @@ -244,6 +261,7 @@ public function testEditForbidden() { $this->patch('/api/v2/events/'.$id1, $this->eventAttributesToAPI($eventData)); } + /** @story:EventController::createEventv2 */ public function testCreateEventGeocodeFailure() { $user = User::factory()->host()->create(); @@ -283,6 +301,7 @@ public function testCreateEventGeocodeFailure() ]); } + /** @story:EventController::createEventv2 */ public function testCreateEventInvalidTimezone() { $user = User::factory()->host()->create(); @@ -322,6 +341,7 @@ public function testCreateEventInvalidTimezone() ]); } + /** @story:EventController::getEventv2 */ public function testEmptyNetworkData() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -341,6 +361,7 @@ public function testEmptyNetworkData() { assertEquals(null, $json['data']['network_data']); } + /** @story:EventController::updateEventv2 */ public function testNetworkCoordinatorCanApprove() { $network = Network::factory()->create(); $group = Group::factory()->create(); diff --git a/tests/Feature/Events/AddRemoveVolunteerTest.php b/tests/Feature/Events/AddRemoveVolunteerTest.php index db6c9486cb..43a8ff1c58 100644 --- a/tests/Feature/Events/AddRemoveVolunteerTest.php +++ b/tests/Feature/Events/AddRemoveVolunteerTest.php @@ -25,8 +25,12 @@ class AddRemoveVolunteerTest extends TestCase { /** * @dataProvider roleProvider + * @story:EventController::addVolunteer + * @story:EventController::listVolunteers + * @story:PartyController::removeVolunteer + * @story:PartyController::postSendInvite + * @story:PartyController::view */ - public function testAddRemove($role, $addrole, $shouldBeHost) { $this->withoutExceptionHandling(); @@ -215,6 +219,10 @@ public function roleProvider() { ]; } + /** @story:UserGroupsController::leave + * @story:UserController::edit + * @story:UserController::postAdminEdit + */ public function testAdminRemoveReaddHost() { $this->withoutExceptionHandling(); diff --git a/tests/Feature/Events/AttendanceTest.php b/tests/Feature/Events/AttendanceTest.php index c3e1bf8b6c..e55b7c7c8d 100644 --- a/tests/Feature/Events/AttendanceTest.php +++ b/tests/Feature/Events/AttendanceTest.php @@ -37,6 +37,7 @@ protected function setUp(): void $this->party = $this->group->parties()->latest()->first(); } + /** @story:PartyController::updateQuantity */ public function testParticipants() { // Initial count will be 0. self::assertEquals(0, $this->party->pax); @@ -52,6 +53,7 @@ public function testParticipants() { } + /** @story:PartyController::updateVolunteerQuantity */ public function testVolunteers() { // Initial count will be 1, for the host. self::assertEquals(1, $this->party->volunteers); diff --git a/tests/Feature/Events/CreateEventTest.php b/tests/Feature/Events/CreateEventTest.php index 393f7f1809..a87ce58919 100644 --- a/tests/Feature/Events/CreateEventTest.php +++ b/tests/Feature/Events/CreateEventTest.php @@ -56,7 +56,10 @@ protected function setUp(): void }); } - /** @test */ + /** + * @test + * @story:PartyController::create + */ public function a_host_without_a_group_cant_create_an_event() { $this->withoutExceptionHandling(); @@ -71,6 +74,11 @@ public function a_host_without_a_group_cant_create_an_event() /** * @test * @dataProvider roles + * @story:EventController::createEventv2 + * @story:PartyController::create + * @story:PartyController::view + * @story:GroupController::getEventsForGroupv2 + * @story:PartyController::index */ public function a_host_with_a_group_can_create_an_event($data) { @@ -262,7 +270,10 @@ public function roles() ]; } - /** @test */ + /** + * @test + * @story:PartyController::duplicate + */ public function a_host_can_duplicate_an_event() { $this->withoutExceptionHandling(); @@ -301,6 +312,7 @@ public function providerTrueFalse() * @test * * @dataProvider providerTrueFalse + * @story:EventController::createEventv2 */ public function emails_sent_when_created($notify) { @@ -358,7 +370,11 @@ public function emails_sent_when_created($notify) } } - /** @test */ + /** + * @test + * @story:EventController::createEventv2 + * @story:EventController::updateEventv2 + */ public function emails_sent_to_restarters_when_upcoming_event_approved() { $this->withoutExceptionHandling(); @@ -420,7 +436,11 @@ function ($notification, $channels, $user) use ($group, $host) { $this->patch('/api/v2/events/'.$event->idevents, $this->eventAttributesToAPI($eventData)); } - /** @test */ + /** + * @test + * @story:EventController::createEventv2 + * @story:EventController::updateEventv2 + */ public function emails_not_sent_to_volunteers_when_past_event_approved() { $this->withoutExceptionHandling(); @@ -453,7 +473,10 @@ public function emails_not_sent_to_volunteers_when_past_event_approved() ); } - /** @test */ + /** + * @test + * @story:EventController::createEventv2 + */ public function emails_sent_to_coordinators_when_event_created() { $this->withoutExceptionHandling(); @@ -487,7 +510,13 @@ public function emails_sent_to_coordinators_when_event_created() ); } - /** @test */ + /** + * @test + * @story:EventController::createEventv2 + * @story:EventController::addVolunteer + * @story:PartyController::removeVolunteer + * @story:GroupController::getVolunteersForGroupv2 + */ public function a_host_can_be_added_later() { $this->withoutExceptionHandling(); @@ -591,7 +620,8 @@ public function provider() /** * @test - **@dataProvider provider + * @dataProvider provider + * @story:EventController::createEventv2 */ public function an_event_can_be_auto_approved($autoApprove, $approved) { @@ -619,6 +649,7 @@ public function an_event_can_be_auto_approved($autoApprove, $approved) /** * @test + * @story:EventController::createEventv2 */ public function a_past_event_is_not_upcoming() { $host = User::factory()->administrator()->create(); @@ -643,6 +674,7 @@ public function a_past_event_is_not_upcoming() { /** * @test + * @story:EventController::createEventv2 */ public function a_future_event_is_upcoming() { $host = User::factory()->administrator()->create(); @@ -667,6 +699,9 @@ public function a_future_event_is_upcoming() { /** * @test + * @story:GroupController::deleteVolunteerForGroupv2 + * @story:EventController::createEventv2 + * @story:EventController::updateEventv2 */ public function no_notification_after_leaving() { Notification::fake(); @@ -716,6 +751,7 @@ public function no_notification_after_leaving() { * @test * * @dataProvider providerTrueFalse + * @story:EventController::createEventv2 */ public function notifications_are_queued_as_expected($notify) { @@ -772,7 +808,12 @@ public function notifications_are_queued_as_expected($notify) ); } - /** @test */ + /** + * @test + * @story:PartyController::create + * @story:EventController::createEventv2 + * @story:PartyController::edit + */ public function network_coordinator_other_group() { $network = Network::factory()->create(); @@ -817,6 +858,8 @@ public function network_coordinator_other_group() { /** * @dataProvider invalidEmailProvider + * @story:EventController::createEventv2 + * @story:EventController::addVolunteer */ public function an_invalid_email_is_trapped($email, $valid) { diff --git a/tests/Feature/Events/DeleteEventTest.php b/tests/Feature/Events/DeleteEventTest.php index 78bd016d6e..5eb1f91c9a 100644 --- a/tests/Feature/Events/DeleteEventTest.php +++ b/tests/Feature/Events/DeleteEventTest.php @@ -35,7 +35,14 @@ protected function setUp(): void parent::setUp(); } - /** @test */ + /** + * @test + * @story:PartyController::deleteEvent + * @story:OutboundController::info + * @story:PartyController::getJoinEvent + * @story:ApiController::groupStats + * @story:ApiController::partyStats + */ public function an_admin_can_delete_an_event() { $this->withoutExceptionHandling(); @@ -93,6 +100,9 @@ public function an_admin_can_delete_an_event() /** * @test * @dataProvider roleProvider + * @story:PartyController::view + * @story:PartyController::deleteEvent + * @story:PartyController::edit */ public function view_edit_deleted_event($role) { @@ -272,6 +282,7 @@ public function provider() /** * @test * @dataProvider provider + * @story:PartyController::view */ public function candelete_flag($role, $pastFuture, $addDevice, $canDelete) { @@ -317,6 +328,8 @@ public function candelete_flag($role, $pastFuture, $addDevice, $canDelete) /** * @test + * @story:PartyController::getJoinEvent + * @story:PartyController::getContributions */ public function request_review() { diff --git a/tests/Feature/Events/EventRequestReviewEmailTest.php b/tests/Feature/Events/EventRequestReviewEmailTest.php index 8ce0e817c5..ff4cea1c86 100644 --- a/tests/Feature/Events/EventRequestReviewEmailTest.php +++ b/tests/Feature/Events/EventRequestReviewEmailTest.php @@ -39,7 +39,10 @@ protected function setUp(): void parent::setUp(); } - /** @test */ + /** + * @test + * @story:PartyController::getContributions + */ public function a_request_review_email_is_sent_to_volunteer() { Notification::fake(); diff --git a/tests/Feature/Events/ExportTest.php b/tests/Feature/Events/ExportTest.php index 6c783a9ee3..9513505f00 100644 --- a/tests/Feature/Events/ExportTest.php +++ b/tests/Feature/Events/ExportTest.php @@ -18,6 +18,11 @@ class ExportTest extends TestCase { /** * @dataProvider roleProvider + * @story:ExportController::groupEvents + * @story:ExportController::networkEvents + * @story:ExportController::devices + * @story:ExportController::devicesEvent + * @story:ExportController::devicesGroup */ public function testExport($role) { @@ -227,6 +232,10 @@ public function testExport($role) } } + /** + * @story:ExportController::devicesGroup + * @story:ExportController::devicesEvent + */ public function testSlashesExport() { $admin = User::factory()->administrator()->create(); diff --git a/tests/Feature/Events/InviteEventTest.php b/tests/Feature/Events/InviteEventTest.php index bb657e1128..cdaf35eac7 100644 --- a/tests/Feature/Events/InviteEventTest.php +++ b/tests/Feature/Events/InviteEventTest.php @@ -25,6 +25,7 @@ class InviteEventTest extends TestCase * Test notification content. * * @return void + * @story:PartyController::postSendInvite */ public function testInvite() { @@ -78,6 +79,13 @@ function ($notification, $channels, $user) use ($group, $event, $host) { assertEquals(0, $event->volunteers); } + /** + * @story:PartyController::postSendInvite + * @story:PartyController::view + * @story:PartyController::confirmInvite + * @story:PartyController::index + * @story:EventController::updateEventv2 + */ public function testInviteReal() { $userAttributes = $this->userAttributes(); @@ -186,6 +194,12 @@ public function testInviteReal() $response->assertSessionHas('warning'); } + /** + * @story:PartyController::getGroupEmailsWithNames + * @story:PartyController::postSendInvite + * @story:PartyController::confirmInvite + * @story:PartyController::view + */ public function testInvitableUserPOV() { $this->withoutExceptionHandling(); @@ -288,6 +302,12 @@ public function testInvitableUserPOV() $this->assertEquals([], $members); } + /** + * @story:PartyController::getGroupEmailsWithNames + * @story:PartyController::postSendInvite + * @story:PartyController::confirmInvite + * @story:PartyController::view + */ public function testInvitableNotifications() { Queue::fake(); @@ -402,6 +422,7 @@ function ($notification, $channels, $host) use ($user, $event) { }); } + /** @story:PartyController::confirmCodeInvite */ public function testInviteViaLink() { $this->loginAsTestUser(Role::ADMINISTRATOR); $user = User::factory()->restarter()->create([ @@ -445,6 +466,7 @@ public function testInviteViaLink() { $rsp = $this->get('/party/invite/' . $unique_shareable_code . '1'); } + /** @story:PartyController::postSendInvite */ public function testInviteNonUsers() { Notification::fake(); @@ -475,6 +497,7 @@ public function testInviteNonUsers() { $response->assertSessionHas('success'); } + /** @story:PartyController::postSendInvite */ public function testInviteNoUsers() { Notification::fake(); @@ -507,6 +530,7 @@ public function testInviteNoUsers() { /** * @dataProvider invalidEmailProvider + * @story:PartyController::postSendInvite */ public function testInviteInvalidEmail($email, $valid) { diff --git a/tests/Feature/Events/JoinEventTest.php b/tests/Feature/Events/JoinEventTest.php index e0a2d276a8..930d643776 100644 --- a/tests/Feature/Events/JoinEventTest.php +++ b/tests/Feature/Events/JoinEventTest.php @@ -14,6 +14,11 @@ class JoinEventTest extends TestCase { + /** + * @story:PartyController::getJoinEvent + * @story:PartyController::view + * @story:PartyController::cancelInvite + */ public function testJoin() { Queue::fake(); @@ -82,6 +87,7 @@ public function testJoin() }); } + /** @story:PartyController::getJoinEvent */ public function testJoinInvalid() { $user = User::factory()->restarter()->create(); $this->actingAs($user); diff --git a/tests/Feature/Events/ModerationEventPhotosNotificationTest.php b/tests/Feature/Events/ModerationEventPhotosNotificationTest.php index 28ae74009e..faa809d894 100644 --- a/tests/Feature/Events/ModerationEventPhotosNotificationTest.php +++ b/tests/Feature/Events/ModerationEventPhotosNotificationTest.php @@ -38,7 +38,11 @@ class ModerationEventPhotosNotificationTest extends TestCase */ protected $group; - /** @test */ + /** + * @test + * @story:PartyController::imageUpload + * @story:PartyController::deleteImage + */ public function a_moderation_notification_is_sent_to_admins_when_event_photos_are_uploaded() { Notification::fake(); diff --git a/tests/Feature/Events/OnlineEventsTest.php b/tests/Feature/Events/OnlineEventsTest.php index 4357c66830..b0aad4cf11 100644 --- a/tests/Feature/Events/OnlineEventsTest.php +++ b/tests/Feature/Events/OnlineEventsTest.php @@ -28,7 +28,10 @@ protected function setUp(): void }); } - /** @test */ + /** + * @test + * @story:EventController::createEventv2 + */ public function a_host_can_create_an_online_event() { $this->withoutExceptionHandling(); diff --git a/tests/Feature/Fixometer/BasicTest.php b/tests/Feature/Fixometer/BasicTest.php index e71d1d3b39..feaf1d7a20 100644 --- a/tests/Feature/Fixometer/BasicTest.php +++ b/tests/Feature/Fixometer/BasicTest.php @@ -16,6 +16,7 @@ class BasicTest extends TestCase { + /** @story:DeviceController::index */ public function testPageLoads() { // Create a past event with a fixed device. This is shown on the Fixometer page as the latest data. @@ -99,6 +100,7 @@ public function testPageLoads() $this->assertEquals($event->idevents, $data['idevents']); } + /** @story:ExportController::devices */ public function testExport() { $this->loginAsTestUser(Role::ADMINISTRATOR); diff --git a/tests/Feature/Groups/APIv2GroupTest.php b/tests/Feature/Groups/APIv2GroupTest.php index 23ce795642..42b06ac720 100644 --- a/tests/Feature/Groups/APIv2GroupTest.php +++ b/tests/Feature/Groups/APIv2GroupTest.php @@ -24,6 +24,8 @@ class APIv2GroupTest extends TestCase * @dataProvider providerTrueFalse * * @param $approve + * @story:GroupController::getGroupv2 + * @story:GroupController::moderateGroupsv2 */ public function testGetGroup($approve) { $user = User::factory()->administrator()->create([ @@ -92,6 +94,7 @@ public function providerTrueFalse() ]; } + /** @story:GroupController::createGroupv2 */ public function testCreateGroupLoggedOut() { $this->expectException(AuthenticationException::class); @@ -103,6 +106,7 @@ public function testCreateGroupLoggedOut() ]); } + /** @story:GroupController::createGroupv2 */ public function testCreateGroupLoggedInWithoutToken() { // Logged in as a user should work, even if we don't use an API token. @@ -122,6 +126,10 @@ public function testCreateGroupLoggedInWithoutToken() $this->assertTrue(array_key_exists('id', $json)); } + /** + * @story:GroupController::createGroupv2 + * @story:GroupController::listNamesv2 + */ public function testCreateGroupLoggedOutWithToken() { // Logged out should work if we use an API token. @@ -200,6 +208,7 @@ private function assertGroupFound($groups, $id, $shouldBeFound) { return $ix; } + /** @story:GroupController::createGroupv2 */ public function testCreateGroupGeocodeFailure() { $user = User::factory()->administrator()->create([ @@ -216,6 +225,7 @@ public function testCreateGroupGeocodeFailure() ]); } + /** @story:GroupController::createGroupv2 */ public function testCreateGroupInvalidTimezone() { $user = User::factory()->administrator()->create([ @@ -233,6 +243,7 @@ public function testCreateGroupInvalidTimezone() ]); } + /** @story:GroupController::createGroupv2 */ public function testCreateGroupDuplicate() { // Logged in as a user should work, even if we don't use an API token. @@ -259,6 +270,10 @@ public function testCreateGroupDuplicate() ]); } + /** + * @story:GroupController::listTagsv2 + * @story:GroupController::getGroupv2 + */ public function testTags() { $tag = GroupTags::factory()->create(); $response = $this->get('/api/v2/groups/tags', []); @@ -276,6 +291,7 @@ public function testTags() { self::assertEquals($tag->id, $json['data']['tags'][0]['id']); } + /** @story:GroupController::createGroupv2 */ public function testOutdated() { // Check we can create a group with an outdated timezone. $user = User::factory()->administrator()->create([ @@ -311,6 +327,7 @@ public function testOutdated() { * @dataProvider providerTrueFalse * * @return void + * @story:GroupController::moderateGroupsv2 */ public function testNetworkCoordinatorApprove($first) { $network1 = Network::factory()->create(); @@ -344,6 +361,7 @@ public function testNetworkCoordinatorApprove($first) { } } + /** @story:GroupController::getGroupv2 */ public function testLocales() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -375,6 +393,10 @@ public function testLocales() { // Create a group in } + /** + * @story:GroupController::createGroupv2 + * @story:GroupController::getGroupv2 + */ public function testEmptyNetworkData() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -410,6 +432,12 @@ public function testEmptyNetworkData() { assertEquals(null, $json['data']['network_data']); } + /** + * @story:GroupController::createGroupv2 + * @story:GroupController::updateGroupv2 + * @story:GroupController::getGroupv2 + * @story:GroupController::getGroupsByUsersNetworks + */ public function testNetworkDataUpdatedAt() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -470,6 +498,11 @@ public function testNetworkDataUpdatedAt() { $this->assertEquals((new Carbon($updated_at))->getTimestamp(), (new Carbon($groups[0]['updated_at']))->getTimestamp()); } + /** + * @story:GroupController::getGroupv2 + * @story:GroupController::updateGroupv2 + * @story:GroupController::listNamesv2 + */ public function testArchived() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', diff --git a/tests/Feature/Groups/BasicTest.php b/tests/Feature/Groups/BasicTest.php index 3af88c638f..2069f29ca5 100644 --- a/tests/Feature/Groups/BasicTest.php +++ b/tests/Feature/Groups/BasicTest.php @@ -14,6 +14,9 @@ class BasicTest extends TestCase { /** * @dataProvider tabProvider + * @story:GroupController::mine + * @story:GroupController::all + * @story:GroupController::nearby */ public function testPageLoads($url, $tab) { diff --git a/tests/Feature/Groups/GroupCreateTest.php b/tests/Feature/Groups/GroupCreateTest.php index 454a6b1a55..85a6adf8a8 100644 --- a/tests/Feature/Groups/GroupCreateTest.php +++ b/tests/Feature/Groups/GroupCreateTest.php @@ -17,6 +17,10 @@ class GroupCreateTest extends TestCase { + /** + * @story:GroupController::create + * @story:GroupController::getGroupList + */ public function testCreate() { $user = User::factory()->administrator()->create([ @@ -40,6 +44,7 @@ public function testCreate() self::assertEquals('dummy', $ret[0]['network_data']['dummy']); } + /** @story:GroupController::create */ public function testCreateGroupAsRestarter() { // Restarters can create groups. This wasn't true in the past and for backwards compatibility the act // of creation should convert them into a host. @@ -66,6 +71,7 @@ public function testCreateGroupAsRestarter() { $this->assertTrue($user->hasRole('Host')); } + /** @story:GroupController::create */ public function testCreateBadLocation() { $this->loginAsTestUser(Role::ADMINISTRATOR); @@ -84,6 +90,7 @@ public function roles() { /** * @dataProvider roles + * @story:GroupController::updateGroupv2 */ public function testApprove($role) { Notification::fake(); @@ -167,6 +174,7 @@ function ($notification, $channels, $host) use ($group) { } } + /** @story:GroupController::create */ public function testEventVisibility() { // Create a network. $network = Network::factory()->create(); diff --git a/tests/Feature/Groups/GroupDeleteTest.php b/tests/Feature/Groups/GroupDeleteTest.php index edf2c8dd93..427bf80b80 100644 --- a/tests/Feature/Groups/GroupDeleteTest.php +++ b/tests/Feature/Groups/GroupDeleteTest.php @@ -9,6 +9,7 @@ class GroupDeleteTest extends TestCase { + /** @story:GroupController::delete */ public function testDelete() { $this->loginAsTestUser(Role::ADMINISTRATOR); @@ -35,6 +36,7 @@ public function testDelete() ]), $response->getContent()); } + /** @story:GroupController::delete */ public function testCanDeleteWithEmptyEvent() { $this->loginAsTestUser(Role::ADMINISTRATOR); @@ -55,6 +57,7 @@ public function testCanDeleteWithEmptyEvent() ]), $response->getContent()); } + /** @story:GroupController::delete */ public function testCantDeleteWithDevice() { $this->loginAsTestUser(Role::ADMINISTRATOR); @@ -78,6 +81,7 @@ public function testCantDeleteWithDevice() $response->assertRedirect('/user/forbidden'); } + /** @story:GroupController::delete */ public function testCanDeleteWithDeletedEvent() { $this->loginAsTestUser(Role::ADMINISTRATOR); diff --git a/tests/Feature/Groups/GroupEditTest.php b/tests/Feature/Groups/GroupEditTest.php index c29ec12540..45d6acff86 100644 --- a/tests/Feature/Groups/GroupEditTest.php +++ b/tests/Feature/Groups/GroupEditTest.php @@ -17,7 +17,11 @@ class GroupEditTest extends TestCase { - /** @test */ + /** + * @test + * @story:GroupController::edit + * @story:GroupController::updateGroupv2 + */ public function group_tags_retained_after_edited_by_host() { $this->withoutExceptionHandling(); @@ -58,6 +62,7 @@ public function group_tags_retained_after_edited_by_host() ]); } + /** @story:GroupController::edit */ public function testEditGroupAsRestarter() { $group = Group::factory()->create(); @@ -66,7 +71,10 @@ public function testEditGroupAsRestarter() { $this->get('/group/edit/' . $group->idgroups); } - /** @test */ + /** + * @test + * @story:GroupController::updateGroupv2 + */ public function invalid_location() { $this->withoutExceptionHandling(); @@ -92,7 +100,11 @@ public function invalid_location() ]); } - /** @test */ + /** + * @test + * @story:GroupController::imageUpload + * @story:GroupController::ajaxDeleteImage + */ public function image_upload() { Storage::fake('avatars'); $group = Group::factory()->create(); @@ -157,7 +169,11 @@ public function can_edit_timezone() { self::assertTrue($found); } - /** @test */ + /** + * @test + * @story:GroupController::edit + * @story:GroupController::updateGroupv2 + */ public function edit_email() { $this->withoutExceptionHandling(); @@ -191,6 +207,7 @@ public function edit_email() $this->assertEquals('info@test.com', $group->email); } + /** @story:GroupController::edit */ public function testEditAsNetworkCoordinator() { $network = Network::factory()->create(); $coordinator = User::factory()->restarter()->create(); diff --git a/tests/Feature/Groups/GroupHostTest.php b/tests/Feature/Groups/GroupHostTest.php index a8f1ebfd19..589fadaded 100644 --- a/tests/Feature/Groups/GroupHostTest.php +++ b/tests/Feature/Groups/GroupHostTest.php @@ -36,6 +36,9 @@ public function roleProvider() { /** * @dataProvider roleProvider + * @story:GroupController::getVolunteersForGroupv2 + * @story:GroupController::patchVolunteerForGroupv2 + * @story:GroupController::deleteVolunteerForGroupv2 */ public function testMakeHost($role) { @@ -95,6 +98,10 @@ public function testMakeHost($role) $this->assertEquals(1, count($json['data'])); } + /** + * @story:GroupController::patchVolunteerForGroupv2 + * @story:GroupController::deleteVolunteerForGroupv2 + */ public function testHostMakeHost() { $firsthost = User::factory()->host()->create(); @@ -128,6 +135,7 @@ public function providerTrueFalse() /** * @dataProvider providerTrueFalse + * @story:GroupController::patchVolunteerForGroupv2 */ public function testNetworkCoordinatorDemoteHost($addToNetwork) { $host = User::factory()->host()->create(); diff --git a/tests/Feature/Groups/GroupJoinTest.php b/tests/Feature/Groups/GroupJoinTest.php index 7a440f5af2..15425087a0 100644 --- a/tests/Feature/Groups/GroupJoinTest.php +++ b/tests/Feature/Groups/GroupJoinTest.php @@ -14,6 +14,10 @@ class GroupJoinTest extends TestCase { + /** + * @story:GroupController::getJoinGroup + * @story:UserGroupsController::leave + */ public function testJoin() { Notification::fake(); diff --git a/tests/Feature/Groups/GroupNetworkCreateTest.php b/tests/Feature/Groups/GroupNetworkCreateTest.php index 439a768fd7..e059cc7dec 100644 --- a/tests/Feature/Groups/GroupNetworkCreateTest.php +++ b/tests/Feature/Groups/GroupNetworkCreateTest.php @@ -24,7 +24,10 @@ class GroupNetworkCreateTest extends TestCase { // New group is created as part of the network represented by the current domain. - /** @test */ + /** + * @test + * @story:GroupController::createGroupv2 + */ public function given_specific_domain_when_group_created_then_it_is_created_as_part_of_corresponding_network() { $this->withoutExceptionHandling(); diff --git a/tests/Feature/Groups/GroupTagsTest.php b/tests/Feature/Groups/GroupTagsTest.php index da3bc3171a..7dcccf5dce 100644 --- a/tests/Feature/Groups/GroupTagsTest.php +++ b/tests/Feature/Groups/GroupTagsTest.php @@ -15,6 +15,7 @@ class GroupTagsTest extends TestCase { + /** @story:GroupTagsController::index */ public function testList() { $admin = $this->loginAsTestUser(Role::RESTARTER); @@ -29,6 +30,7 @@ public function testList() $response->assertSeeText($tag->tag_name); } + /** @story:GroupTagsController::postCreateTag */ public function testCreate() { $tag = GroupTags::factory()->create(); @@ -50,6 +52,7 @@ public function testCreate() $response->assertSessionHas('success'); } + /** @story:GroupTagsController::getEditTag */ public function testGetEdit() { $tag = GroupTags::factory()->create(); @@ -65,6 +68,7 @@ public function testGetEdit() $response->assertSeeText($tag->tag_name); } + /** @story:GroupTagsController::postEditTag */ public function testEdit() { $tag = GroupTags::factory()->create(); @@ -86,6 +90,7 @@ public function testEdit() $response->assertSessionHas('success'); } + /** @story:GroupTagsController::getDeleteTag */ public function testDelete() { $tag = GroupTags::factory()->create(); diff --git a/tests/Feature/Groups/GroupViewTest.php b/tests/Feature/Groups/GroupViewTest.php index 63b7eec934..421c227205 100644 --- a/tests/Feature/Groups/GroupViewTest.php +++ b/tests/Feature/Groups/GroupViewTest.php @@ -12,6 +12,7 @@ class GroupViewTest extends TestCase { + /** @story:GroupController::view */ public function testBasic() { // Check we can create a group and view it. @@ -53,6 +54,7 @@ public function testBasic() $this->assertEquals(1, count(json_decode($props[1][':events'], TRUE))); } + /** @story:GroupController::view */ public function testInvalidGroup() { $this->loginAsTestUser(Role::RESTARTER); @@ -60,6 +62,7 @@ public function testInvalidGroup() $this->get('/group/view/undefined'); } + /** @story:GroupController::view */ public function testInvalidGroup2() { $this->loginAsTestUser(Role::RESTARTER); @@ -67,6 +70,7 @@ public function testInvalidGroup2() $this->get('/group/view/1'); } + /** @story:GroupController::view */ public function testCanDelete() { $this->loginAsTestUser(Role::ADMINISTRATOR); @@ -139,6 +143,7 @@ public function testCanDelete() } } + /** @story:GroupController::view */ public function testInProgressVisible() { $this->loginAsTestUser(Role::ADMINISTRATOR); $id = $this->createGroup(); diff --git a/tests/Feature/Groups/InviteGroupTest.php b/tests/Feature/Groups/InviteGroupTest.php index 8235d62b4c..a4840ab6bf 100644 --- a/tests/Feature/Groups/InviteGroupTest.php +++ b/tests/Feature/Groups/InviteGroupTest.php @@ -18,6 +18,11 @@ class InviteGroupTest extends TestCase { + /** + * @story:GroupController::postSendInvite + * @story:GroupController::view + * @story:GroupController::confirmInvite + */ public function testInvite() { Notification::fake(); @@ -131,6 +136,10 @@ function ($notification, $channels, $host) use ($group, $user) { ); } + /** + * @story:GroupController::view + * @story:GroupController::confirmCodeInvite + */ public function testInviteViaLink() { $group = Group::factory()->create(); @@ -159,6 +168,7 @@ public function testInviteViaLink() { /** * @dataProvider invalidEmailProvider + * @story:GroupController::postSendInvite */ public function testInviteInvalidEmail($email, $valid) { diff --git a/tests/Feature/Home/HomeTest.php b/tests/Feature/Home/HomeTest.php index 3e543f1bbd..4baf0f0512 100644 --- a/tests/Feature/Home/HomeTest.php +++ b/tests/Feature/Home/HomeTest.php @@ -11,6 +11,7 @@ class HomeTest extends TestCase { /** + * @story:HomeController::index * @dataProvider landingPagesProvider */ public function testLoggedOut($url) @@ -29,6 +30,7 @@ public function landingPagesProvider() { ]; } + /** @story:HomeController::index */ public function testLoggedIn() { $this->loginAsTestUser(Role::RESTARTER); $response = $this->get('/user'); diff --git a/tests/Feature/Networks/APIv2NetworkTest.php b/tests/Feature/Networks/APIv2NetworkTest.php index a270b73e16..b6b1dc8bee 100644 --- a/tests/Feature/Networks/APIv2NetworkTest.php +++ b/tests/Feature/Networks/APIv2NetworkTest.php @@ -13,6 +13,7 @@ class APIv2NetworkTest extends TestCase { + /** @story:NetworkController::getNetworksv2 */ public function testList() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', @@ -44,6 +45,10 @@ public function testList() { self::assertTrue($found); } + /** + * @story:NetworkController::getNetworkv2 + * @story:NetworkController::getNetworksv2 + */ public function testGet() { $network = Network::first(); self::assertNotNull($network); @@ -76,6 +81,7 @@ public function testGet() { } /** + * @story:NetworkController::getNetworkGroupsv2 * @dataProvider providerGroupsParameters * @param $value */ @@ -156,6 +162,7 @@ public function providerGroupsParameters() { } /** + * @story:NetworkController::getNetworkEventsv2 * @dataProvider providerEventsParameters * @param $value */ diff --git a/tests/Feature/Networks/NetworkTest.php b/tests/Feature/Networks/NetworkTest.php index 26415767b0..1f101c082f 100644 --- a/tests/Feature/Networks/NetworkTest.php +++ b/tests/Feature/Networks/NetworkTest.php @@ -81,7 +81,12 @@ public function groups_can_be_associated_to_network() $this->assertTrue($group->isMemberOf($network)); } - /** @test */ + /** + * @test + * @story:NetworkController::associateGroup + * @story:GroupController::getGroupsByUsersNetworks + * @story:EventController::getEventsByUsersNetworks + */ public function admins_can_associate_group_to_network() { $this->withoutExceptionHandling(); @@ -211,7 +216,10 @@ public function user_can_be_set_as_coordinator_of_network() $this->assertTrue($coordinator->isCoordinatorOf($network)); } - /** @test */ + /** + * @test + * @story:NetworkController::stats + */ public function network_stats_can_be_queried() { $network = Network::factory()->create(); @@ -234,7 +242,12 @@ public function network_stats_can_be_queried() $this->assertEquals($expectedStats, $stats); } - /** @test */ + /** + * @test + * @story:NetworkController::index + * @story:NetworkController::show + * @story:NetworkController::associateGroup + */ public function network_page() { $network = Network::factory()->create([ @@ -296,7 +309,12 @@ public function network_page() $response->assertSee(__('networks.index.all_networks_explainer')); } - /** @test */ + /** + * @test + * @story:NetworkController::edit + * @story:NetworkController::update + * @story:NetworkController::associateGroup + */ public function admins_can_edit() { $this->withoutExceptionHandling(); @@ -327,6 +345,7 @@ public function admins_can_edit() $this->assertTrue($group->isMemberOf($network)); } + /** @story:UserController::postAdminEdit */ public function testRemoveNetworkCoordinatorByRole() { $this->withoutExceptionHandling(); diff --git a/tests/Feature/Notifications/BasicTest.php b/tests/Feature/Notifications/BasicTest.php index cb7e007370..c777623e2b 100644 --- a/tests/Feature/Notifications/BasicTest.php +++ b/tests/Feature/Notifications/BasicTest.php @@ -15,6 +15,7 @@ class BasicTest extends TestCase { + /** @story:UserController::getNotifications */ public function testNotificationsPage() { $this->loginAsTestUser(Role::ADMINISTRATOR); $idgroups = $this->createGroup(); diff --git a/tests/Feature/Role/RoleTest.php b/tests/Feature/Role/RoleTest.php index a29fd58189..c6586b9f7d 100644 --- a/tests/Feature/Role/RoleTest.php +++ b/tests/Feature/Role/RoleTest.php @@ -12,17 +12,23 @@ class RoleTest extends TestCase { + /** @story:RoleController::index */ public function testLoggedOut() { $this->expectException(AuthenticationException::class); $response = $this->get('/role'); } + /** @story:RoleController::index */ public function testNotAdmin() { $this->loginAsTestUser(Role::RESTARTER); $response = $this->get('/role'); $response->assertRedirect(RouteServiceProvider::HOME); } + /** + * @story:RoleController::index + * @story:RoleController::edit + */ public function testBasic() { $this->loginAsTestUser(Role::ADMINISTRATOR); diff --git a/tests/Feature/Stats/EventStatsTest.php b/tests/Feature/Stats/EventStatsTest.php index a683f4f9a7..0f4dd4c5e0 100644 --- a/tests/Feature/Stats/EventStatsTest.php +++ b/tests/Feature/Stats/EventStatsTest.php @@ -20,7 +20,11 @@ public function an_event_with_no_devices_has_empty_stats() $this->assertEquals($expect, $event->getEventStats()); } - /** @test */ + /** + * @test + * @story:AdminController::stats + * @story:PartyController::stats + */ public function event_stats_with_both_powered_and_unpowered_devices() { $this->_setupCategoriesWithUnpoweredWeights(); @@ -180,7 +184,11 @@ public function event_stats_with_both_powered_and_unpowered_devices() $response->assertSee('23', false); } - /** @test */ + /** + * @test + * @story:PartyController::view + * @story:GroupController::view + */ public function event_stats_for_upcoming_event() { $this->_setupCategoriesWithUnpoweredWeights(); diff --git a/tests/Feature/Stats/GroupStatsTest.php b/tests/Feature/Stats/GroupStatsTest.php index 0f624604df..6f10a40fad 100644 --- a/tests/Feature/Stats/GroupStatsTest.php +++ b/tests/Feature/Stats/GroupStatsTest.php @@ -20,7 +20,10 @@ public function a_group_with_no_events_has_empty_stats() $this->assertEquals($expect, $group->getGroupStats()); } - /** @test */ + /** + * @test + * @story:GroupController::stats + */ public function a_group_with_one_past_event_has_stats_for_that_event() { $group = Group::factory()->create(); @@ -340,7 +343,10 @@ public function two_groups_with_mixed_devices_have_correct_stats() } } - /** @test */ + /** + * @test + * @story:ApiController::groupStats + */ public function get_of_stats_after_deletion() { $admin = User::factory()->administrator()->create([ diff --git a/tests/Feature/Users/EditLanguageSettingsTest.php b/tests/Feature/Users/EditLanguageSettingsTest.php index 8c569d8039..5205c8c76a 100644 --- a/tests/Feature/Users/EditLanguageSettingsTest.php +++ b/tests/Feature/Users/EditLanguageSettingsTest.php @@ -48,7 +48,10 @@ public function user_language_update_triggers_language_sync() Event::assertDispatched(UserLanguageUpdated::class); } - /** @test */ + /** + * @test + * @story:LocaleController::setLang + */ // Added these to try (and fail) to reproduce a Sentry error. public function user_sets_language() { diff --git a/tests/Feature/Users/EditProfileTest.php b/tests/Feature/Users/EditProfileTest.php index c945072063..629c9b3f13 100644 --- a/tests/Feature/Users/EditProfileTest.php +++ b/tests/Feature/Users/EditProfileTest.php @@ -89,7 +89,10 @@ public function test_three_digit_lat_lng() $this->assertEquals(132.654, $user->longitude); } - /** test */ + /** + * test + * @story:UserController::postProfileInfoEdit + */ // Check that we can update the location. public function test_location_update() { @@ -138,6 +141,8 @@ public function idProvider() { /** * @test * @dataProvider idProvider + * @story:UserController::postProfileTagsEdit + * @story:UserController::getProfileEdit */ public function test_tags_update($id) { $user = User::factory()->create(); @@ -185,6 +190,7 @@ public function test_tags_update($id) { /** * @test * @dataProvider idProvider + * @story:UserController::postProfilePictureEdit */ public function image_upload($id) { Storage::fake('avatars'); @@ -225,6 +231,7 @@ public function image_upload($id) { /** * @test + * @story:UserController::postProfileInfoEdit */ public function edit_profile() { $user = User::factory()->create(); diff --git a/tests/Feature/Users/GroupsNearbyTest.php b/tests/Feature/Users/GroupsNearbyTest.php index 73bc9c7bea..0561f798c1 100644 --- a/tests/Feature/Users/GroupsNearbyTest.php +++ b/tests/Feature/Users/GroupsNearbyTest.php @@ -113,6 +113,7 @@ public function testInactive() $this->assertEquals(0, count($groups)); } + /** @story:GroupController::updateGroupv2 */ public function testNotification() { Notification::fake(); diff --git a/tests/Feature/Users/PasswordResetTest.php b/tests/Feature/Users/PasswordResetTest.php index c67bf847a4..fab1a24076 100644 --- a/tests/Feature/Users/PasswordResetTest.php +++ b/tests/Feature/Users/PasswordResetTest.php @@ -11,6 +11,7 @@ class PasswordResetTest extends TestCase { + /** @story:UserController::recover */ public function testInvalidEmail() { $response = $this->post('/user/recover', [ 'email' => 'bademail!' @@ -19,6 +20,7 @@ public function testInvalidEmail() { $response->assertSeeText(__('passwords.invalid')); } + /** @story:UserController::recover */ public function testUnknownEmail() { $response = $this->post('/user/recover', [ 'email' => 'nobody@nowhere.com' @@ -27,6 +29,10 @@ public function testUnknownEmail() { $response->assertSeeText(__('passwords.user'), false); } + /** + * @story:UserController::recover + * @story:UserController::reset + */ public function testResetSuccess() { Notification::fake(); diff --git a/tests/Feature/Users/ProfileTest.php b/tests/Feature/Users/ProfileTest.php index 22535fe544..18f4b197e5 100644 --- a/tests/Feature/Users/ProfileTest.php +++ b/tests/Feature/Users/ProfileTest.php @@ -12,6 +12,7 @@ class ProfileTest extends TestCase { + /** @story:UserController::index */ public function testProfilePage() { $user = User::factory()->restarter()->create(); @@ -36,6 +37,7 @@ public function testProfilePage() $response->assertSee(__('profile.my_skills')); } + /** @story:UserController::edit */ public function testEdit() { $GLOBALS['_FILES'] = []; @@ -98,6 +100,7 @@ public function testEdit() $response->assertSee('Edit User'); } + /** @story:UserController::edit */ public function testEditBadPassword() { $GLOBALS['_FILES'] = []; @@ -125,6 +128,7 @@ public function testBadMediaWikiId() $this->get('/user/thumbnail?wiki_username=invalid'); } + /** @story:UserController::postProfilePasswordEdit */ public function testChangePassword() { $user = User::factory()->restarter()->create(); $user->setPassword(Hash::make('secret1')); @@ -144,6 +148,7 @@ public function testChangePassword() { $this->assertEquals(__('profile.password_changed'), \Session::get('message')); } + /** @story:UserController::postProfileRepairDirectory */ public function testRepairDirectoryRole() { $user = User::factory()->restarter()->create(); $admin = User::factory()->administrator()->create([ @@ -160,6 +165,7 @@ public function testRepairDirectoryRole() { $this->assertEquals(__('profile.profile_updated'), \Session::get('message')); } + /** @story:UserController::storeLanguage */ public function testLanguage() { $user = User::factory()->restarter()->create(); $this->actingAs($user); @@ -174,6 +180,7 @@ public function testLanguage() { /** * @dataProvider invitesProvider + * @story:UserController::postProfilePreferencesEdit */ public function testInvites($admin, $invites) { $user = User::factory()->restarter()->create(); @@ -208,6 +215,10 @@ public function invitesProvider() { ]; } + /** + * @story:ApiController::getUserInfo + * @story:ApiController::getUserList + */ public function testAPI() { $user = User::factory()->administrator()->create([ 'api_token' => '1234', diff --git a/tests/Feature/Users/RecoverTest.php b/tests/Feature/Users/RecoverTest.php index b277a19f71..73e09f13e3 100644 --- a/tests/Feature/Users/RecoverTest.php +++ b/tests/Feature/Users/RecoverTest.php @@ -23,6 +23,12 @@ private function getCode($recovery) { } } + /** + * @story:UserController::recover + * @story:UserController::reset + * @story:LoginController::showLoginForm + * @story:LoginController::login + */ public function testRecover() { $restarter = User::factory()->restarter()->create([ diff --git a/tests/Feature/Users/SkillsTest.php b/tests/Feature/Users/SkillsTest.php index 275e51bcde..247b1f1a43 100644 --- a/tests/Feature/Users/SkillsTest.php +++ b/tests/Feature/Users/SkillsTest.php @@ -12,6 +12,7 @@ class SkillsTest extends TestCase { + /** @story:SkillsController::index */ public function testIndex() { $this->loginAsTestUser(Role::RESTARTER); @@ -29,6 +30,10 @@ public function testIndex() { $response->assertSee('UT1'); } + /** + * @story:SkillsController::postCreateSkill + * @story:SkillsController::index + */ public function testCreate() { $this->loginAsTestUser(Role::RESTARTER); @@ -48,6 +53,11 @@ public function testCreate() { $response->assertSee('UT1'); } + /** + * @story:SkillsController::getEditSkill + * @story:SkillsController::postEditSkill + * @story:SkillsController::index + */ public function testEdit() { $this->loginAsTestUser(Role::RESTARTER); @@ -78,6 +88,7 @@ public function testEdit() { $response->assertSee('UT2'); } + /** @story:SkillsController::getDeleteSkill */ public function testDelete() { $this->loginAsTestUser(Role::RESTARTER); diff --git a/tests/Feature/Users/UserAdminTest.php b/tests/Feature/Users/UserAdminTest.php index 83683d2b39..c08b0d7553 100644 --- a/tests/Feature/Users/UserAdminTest.php +++ b/tests/Feature/Users/UserAdminTest.php @@ -32,7 +32,8 @@ public function provider() } /** - *@dataProvider provider + * @dataProvider provider + * @story:UserController::all */ public function testUsersPage($role, $cansee) { @@ -50,6 +51,7 @@ public function testUsersPage($role, $cansee) } } + /** @story:UserController::postSoftDeleteUser */ public function testSoftDelete() { $user = User::factory()->restarter()->create(); $this->loginAsTestUser(Role::ADMINISTRATOR); diff --git a/tests/Feature/Zapier/ZapierNetworkTests.php b/tests/Feature/Zapier/ZapierNetworkTests.php index ff6bf9facd..0b50c99541 100644 --- a/tests/Feature/Zapier/ZapierNetworkTests.php +++ b/tests/Feature/Zapier/ZapierNetworkTests.php @@ -43,7 +43,11 @@ protected function setUp(): void // When a new group is created that is in the Restart network, it IS included in the Restart Zapier trigger - /** @test */ + /** + * @test + * @story:GroupController::createGroupv2 + * @story:GroupController::getGroupChanges + */ public function given_restart_network_when_new_group_created_included_in_trigger() { $this->withoutExceptionHandling(); @@ -81,7 +85,11 @@ public function given_restart_network_when_new_group_created_included_in_trigger // When a new group is created that is in Repair Together network, it is not included in the Restart Zapier trigger - /** @test */ + /** + * @test + * @story:GroupController::createGroupv2 + * @story:GroupController::getGroupChanges + */ public function given_nonrestart_network_when_new_group_created_not_included_in_trigger() { $this->withoutExceptionHandling(); @@ -119,7 +127,10 @@ public function given_nonrestart_network_when_new_group_created_not_included_in_ // When a new user is created that is in the Restart network, it IS included in the Restart Zapier trigger - /** @test */ + /** + * @test + * @story:UserController::changes + */ public function given_restart_network_when_new_user_created_then_included_in_trigger() { $this->withoutExceptionHandling(); @@ -147,7 +158,10 @@ public function given_restart_network_when_new_user_created_then_included_in_tri // When a new user is created that is in the Repair Together network, it is not included in the Restart Zapier trigger - /** @test */ + /** + * @test + * @story:UserController::changes + */ public function given_nonrestart_network_when_new_user_created_then_not_included_in_trigger() { $this->withoutExceptionHandling(); @@ -175,7 +189,10 @@ public function given_nonrestart_network_when_new_user_created_then_not_included // When a new user/group association is created for a user in the Restart network joining a group in the Restart network, it IS included in the Restart Zapier trigger - /** @test */ + /** + * @test + * @story:UserGroupsController::changes + */ public function given_restart_group_and_restart_user_when_user_joins_group_then_included_in_trigger() { $this->withoutExceptionHandling(); @@ -206,7 +223,10 @@ public function given_restart_group_and_restart_user_when_user_joins_group_then_ // When a new user/group association is created and either the user or the group is not in the Restart network, it isn't included in the Restart Zapier trigger - /** @test */ + /** + * @test + * @story:UserGroupsController::changes + */ public function given_nonrestart_group_or_nonrestart_user_when_user_joins_group_then_not_included_in_trigger() { $this->withoutExceptionHandling(); diff --git a/tests/Unit/CharsetTest.php b/tests/Unit/CharsetTest.php index d14f9be689..319c6a6f27 100644 --- a/tests/Unit/CharsetTest.php +++ b/tests/Unit/CharsetTest.php @@ -21,7 +21,10 @@ protected function setUp(): void parent::setUp(); } - /** @test */ + /** + * @test + * @story:PartyController::view + */ public function test_charset_db_insert() { DB::statement('SET foreign_key_checks=0'); diff --git a/tests/Unit/Events/EventStateTest.php b/tests/Unit/Events/EventStateTest.php index cace9b55e4..9141e433c8 100644 --- a/tests/Unit/Events/EventStateTest.php +++ b/tests/Unit/Events/EventStateTest.php @@ -72,6 +72,8 @@ public function is_doesnt_start_too_soon() { /** * @dataProvider timeProvider + * @story:EventController::createEventv2 + * @story:PartyController::view */ public function testStatesOnViewPage($date, $upcoming, $finished, $inprogress, $startingsoon) { diff --git a/tests/Unit/Events/TimezoneTest.php b/tests/Unit/Events/TimezoneTest.php index 543468d3e7..cf02021194 100644 --- a/tests/Unit/Events/TimezoneTest.php +++ b/tests/Unit/Events/TimezoneTest.php @@ -75,6 +75,9 @@ public function testStartEnd() { /** * @dataProvider timesProvider + * @story:EventController::createEventv2 + * @story:PartyController::index + * @story:EventController::updateEventv2 */ public function testOrder($date, $tz1, $start1, $end1, $tz2, $start2, $end2, $editstart2, $editend2) { // Two groups in different timezones. @@ -187,6 +190,9 @@ public function testOldEndFieldException() { $p->end = '10:00'; } + /** @story:EventController::createEventv2 + * @story:GroupController::updateGroupv2 + */ public function testTimezoneChangeUpdatesFutureEvents() { // Create a group. $g = Group::factory()->create([ From 7c99ee9ea90b0f830ce456f881301e3ceef92973 Mon Sep 17 00:00:00 2001 From: edwh Date: Thu, 16 Apr 2026 21:13:46 +0100 Subject: [PATCH 4/5] Add platform overview to specs site landing page Co-Authored-By: Claude Opus 4.6 --- specs-site/generate-pages.mjs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/specs-site/generate-pages.mjs b/specs-site/generate-pages.mjs index b0561de9b4..fdc64ba5cd 100644 --- a/specs-site/generate-pages.mjs +++ b/specs-site/generate-pages.mjs @@ -202,6 +202,14 @@ hero: link: /personas/ --- +## About Restarters.net + +Restarters.net is the platform behind the global community repair movement. It brings together volunteer fixers, event hosts, and repair networks to organise community repair events and measure their environmental impact. + +The platform combines three core modules: **The Fixometer** for organising repair events and recording their impact, **Restarters Talk** for community discussion, and **Restarters Wiki** for collectively produced repair knowledge. Groups around the world use it to run events, log device repairs, track waste prevented, and coordinate through regional networks. + +This site is the living specification — every user story listed here is extracted directly from the codebase and linked to its test coverage. It updates automatically as the code changes. + ## At a Glance | | | From fc617f1b5c958670cac5aee8ed1ebffb76ea7e90 Mon Sep 17 00:00:00 2001 From: edwh Date: Thu, 16 Apr 2026 21:41:40 +0100 Subject: [PATCH 5/5] Add theme sub-groupings to features and fix multi-story test linking - Adds optional `theme:` parameter to #[UserStory] to group stories thematically within each feature (e.g. Groups -> Invitations, Manage volunteers, etc.) - Annotates all 168 stories with themes across 29 controllers - Fixes a bug in specs:extract where repeated #[UserStory] attributes on the same method (common for multi-persona API endpoints) only had test coverage attributed to one story - Adds missing @story annotations for registration, logout, getDevices, outbound info, and GroupController::network - Restructures feature pages to group stories by theme, with persona as a table column - Restructures persona pages to show themes within each feature Coverage now: 165/168 stories (98%). --- app/Attributes/UserStory.php | 1 + app/Console/Commands/SpecsExtract.php | 15 +- app/Http/Controllers/API/AlertController.php | 6 +- app/Http/Controllers/API/DeviceController.php | 10 +- .../Controllers/API/DiscourseController.php | 2 +- app/Http/Controllers/API/EventController.php | 20 +- app/Http/Controllers/API/GroupController.php | 38 +- app/Http/Controllers/API/ItemController.php | 2 +- .../Controllers/API/NetworkController.php | 18 +- app/Http/Controllers/API/UserController.php | 2 +- .../Controllers/API/UserGroupsController.php | 4 +- app/Http/Controllers/AdminController.php | 2 +- app/Http/Controllers/ApiController.php | 20 +- app/Http/Controllers/Auth/LoginController.php | 4 +- app/Http/Controllers/BrandsController.php | 10 +- .../Controllers/CalendarEventsController.php | 8 +- app/Http/Controllers/CategoryController.php | 6 +- app/Http/Controllers/DashboardController.php | 4 +- app/Http/Controllers/DeviceController.php | 6 +- app/Http/Controllers/ExportController.php | 10 +- app/Http/Controllers/GroupController.php | 30 +- app/Http/Controllers/GroupTagsController.php | 10 +- app/Http/Controllers/HomeController.php | 2 +- .../InformationAlertCookieController.php | 2 +- app/Http/Controllers/LocaleController.php | 2 +- app/Http/Controllers/NetworkController.php | 12 +- app/Http/Controllers/OutboundController.php | 4 +- app/Http/Controllers/PartyController.php | 42 +- app/Http/Controllers/RoleController.php | 4 +- app/Http/Controllers/SkillsController.php | 10 +- app/Http/Controllers/UserController.php | 46 +- docs/specs/manifest.json | 463 ++++++++++++++++-- specs-site/generate-pages.mjs | 52 +- tests/Feature/Groups/GroupViewTest.php | 6 +- tests/Feature/Networks/NetworkTest.php | 1 + .../Registration/AccountCreationTest.php | 7 + 36 files changed, 660 insertions(+), 221 deletions(-) diff --git a/app/Attributes/UserStory.php b/app/Attributes/UserStory.php index 0c2a908bea..12138d4202 100644 --- a/app/Attributes/UserStory.php +++ b/app/Attributes/UserStory.php @@ -11,5 +11,6 @@ public function __construct( public string $story, public string $persona, public string $feature = '', + public string $theme = '', ) {} } diff --git a/app/Console/Commands/SpecsExtract.php b/app/Console/Commands/SpecsExtract.php index 6591b11b19..6b6fe1a571 100644 --- a/app/Console/Commands/SpecsExtract.php +++ b/app/Console/Commands/SpecsExtract.php @@ -167,6 +167,7 @@ private function findUserStoryAttributes(Node\Stmt\ClassMethod $node): array 'story' => $args[0] ?? $args['story'] ?? '', 'persona' => $args['persona'] ?? $args[1] ?? '', 'feature' => $args['feature'] ?? '', + 'theme' => $args['theme'] ?? '', ]; } } @@ -260,6 +261,7 @@ private function resolveValue(Node\Expr $expr): mixed $features[$featureName]['stories'][] = [ 'story' => $story['story'], 'persona' => $story['persona'], + 'theme' => $story['theme'] ?: 'General', 'method' => "{$shortClass}::{$method['name']}", 'file' => $filePath, 'tests' => [], @@ -279,7 +281,7 @@ private function scanTestFiles(array &$features): void $storyIndex = []; foreach ($features as $featureName => &$feature) { foreach ($feature['stories'] as $idx => &$story) { - $storyIndex[$story['method']] = [ + $storyIndex[$story['method']][] = [ 'feature' => $featureName, 'index' => $idx, ]; @@ -313,13 +315,14 @@ private function scanTestFiles(array &$features): void foreach ($matches as $match) { $methodRef = $match[1]; if (isset($storyIndex[$methodRef])) { - $ref = $storyIndex[$methodRef]; $testName = $this->extractTestName($content, $match[0], $ext); - $features[$ref['feature']]['stories'][$ref['index']]['tests'][] = [ - 'file' => $relativePath, - 'test' => $testName, - ]; + foreach ($storyIndex[$methodRef] as $ref) { + $features[$ref['feature']]['stories'][$ref['index']]['tests'][] = [ + 'file' => $relativePath, + 'test' => $testName, + ]; + } } } } diff --git a/app/Http/Controllers/API/AlertController.php b/app/Http/Controllers/API/AlertController.php index b532b78b7a..f925607ef8 100644 --- a/app/Http/Controllers/API/AlertController.php +++ b/app/Http/Controllers/API/AlertController.php @@ -41,7 +41,7 @@ class AlertController extends Controller * ), * ) */ - #[UserStory('As a Guest, I can view active platform alerts', persona: 'Guest')] + #[UserStory('As a Guest, I can view active platform alerts', persona: 'Guest', theme: 'Platform alerts')] public function listAlertsv2(Request $request) { // Alerts don't change often, so we can cache them. if (\Cache::has('alerts')) { @@ -119,7 +119,7 @@ public function listAlertsv2(Request $request) { * ) * ) */ - #[UserStory('As an Admin, I can create a platform-wide alert', persona: 'Admin')] + #[UserStory('As an Admin, I can create a platform-wide alert', persona: 'Admin', theme: 'Platform alerts')] public function addAlertv2(Request $request) { $user = $this->getUser(); @@ -206,7 +206,7 @@ public function addAlertv2(Request $request) * ) * ) */ - #[UserStory('As an Admin, I can update a platform alert', persona: 'Admin')] + #[UserStory('As an Admin, I can update a platform alert', persona: 'Admin', theme: 'Platform alerts')] public function updateAlertv2(Request $request, $id) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/DeviceController.php b/app/Http/Controllers/API/DeviceController.php index 9da14c67ae..ccb9e6813b 100644 --- a/app/Http/Controllers/API/DeviceController.php +++ b/app/Http/Controllers/API/DeviceController.php @@ -58,8 +58,8 @@ class DeviceController extends Controller { * ) */ - #[UserStory('As a Guest, I can view device details via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve device repair data via the API', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view device details via the API', persona: 'Guest', theme: 'Get device details')] + #[UserStory('As a ThirdParty, I can retrieve device repair data via the API', persona: 'ThirdParty', theme: 'Get device details')] public function getDevicev2(Request $request, $iddevices) { $device = Device::findOrFail($iddevices); @@ -160,7 +160,7 @@ public function getDevicev2(Request $request, $iddevices) * ) * ) */ - #[UserStory('As a Restarter, I can log a device repair at an event I attended', persona: 'Restarter')] + #[UserStory('As a Restarter, I can log a device repair at an event I attended', persona: 'Restarter', theme: 'Log & edit repairs')] public function createDevicev2(Request $request) { $user = $this->getUser(); @@ -350,7 +350,7 @@ public function createDevicev2(Request $request) * ) * ) */ - #[UserStory('As a Restarter, I can update a device repair record at an event I attended', persona: 'Restarter')] + #[UserStory('As a Restarter, I can update a device repair record at an event I attended', persona: 'Restarter', theme: 'Log & edit repairs')] public function updateDevicev2(Request $request, $iddevices) { $user = $this->getUser(); @@ -447,7 +447,7 @@ public function updateDevicev2(Request $request, $iddevices) * ) */ - #[UserStory('As a Host, I can delete a device record from my event', persona: 'Host')] + #[UserStory('As a Host, I can delete a device record from my event', persona: 'Host', theme: 'Delete devices')] public function deleteDevicev2(Request $request, $iddevices) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/DiscourseController.php b/app/Http/Controllers/API/DiscourseController.php index 01e003a23a..071342b7f3 100644 --- a/app/Http/Controllers/API/DiscourseController.php +++ b/app/Http/Controllers/API/DiscourseController.php @@ -21,7 +21,7 @@ class DiscourseController extends Controller * @param string $tag * @return \Illuminate\Http\Response */ - #[UserStory('As a Guest, I can view recent community discussion topics', persona: 'Guest')] + #[UserStory('As a Guest, I can view recent community discussion topics', persona: 'Guest', theme: 'Discussion integration')] public function discussionTopics(Request $request, DiscourseService $discourseService, $tag = NULL) { $topics = []; diff --git a/app/Http/Controllers/API/EventController.php b/app/Http/Controllers/API/EventController.php index 74b98f42ef..382807ff57 100644 --- a/app/Http/Controllers/API/EventController.php +++ b/app/Http/Controllers/API/EventController.php @@ -28,7 +28,7 @@ #[Feature('Events', description: 'Community repair event management')] class EventController extends Controller { - #[UserStory('As a NetworkCoordinator, I can list events across my networks', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can list events across my networks', persona: 'NetworkCoordinator', theme: 'Find & browse events')] public function getEventsByUsersNetworks(Request $request, $date_from = null, $date_to = null, $timezone = 'UTC') { $authenticatedUser = Auth::user(); @@ -150,7 +150,7 @@ public function getEventsByUsersNetworks(Request $request, $date_from = null, $d return $collection; } - #[UserStory('As a Host, I can add a volunteer to my event', persona: 'Host')] + #[UserStory('As a Host, I can add a volunteer to my event', persona: 'Host', theme: 'Attendance & volunteers')] public function addVolunteer(Request $request, $idevents) { $request->validate([ @@ -242,8 +242,8 @@ public function addVolunteer(Request $request, $idevents) } - #[UserStory('As a Guest, I can view confirmed volunteers for an event', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve volunteer data for an event via the API', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view confirmed volunteers for an event', persona: 'Guest', theme: 'Attendance & volunteers')] + #[UserStory('As a ThirdParty, I can retrieve volunteer data for an event via the API', persona: 'ThirdParty', theme: 'Attendance & volunteers')] public function listVolunteers(Request $request, $idevents) { $party = Party::findOrFail($idevents); @@ -295,8 +295,8 @@ public function listVolunteers(Request $request, $idevents) * ) */ - #[UserStory('As a Guest, I can view event details via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve event details to display on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view event details via the API', persona: 'Guest', theme: 'Find & browse events')] + #[UserStory('As a ThirdParty, I can retrieve event details to display on my platform', persona: 'ThirdParty', theme: 'Find & browse events')] public function getEventv2(Request $request, $idevents) { $party = Party::findOrFail($idevents); @@ -353,8 +353,8 @@ private function getUser() * ), * ) */ - #[UserStory('As a NetworkCoordinator, I can view events pending moderation in my networks', persona: 'NetworkCoordinator')] - #[UserStory('As an Admin, I can view all events pending moderation', persona: 'Admin')] + #[UserStory('As a NetworkCoordinator, I can view events pending moderation in my networks', persona: 'NetworkCoordinator', theme: 'Create & manage events')] + #[UserStory('As an Admin, I can view all events pending moderation', persona: 'Admin', theme: 'Create & manage events')] public function moderateEventsv2(Request $request) { // Get the user that the API has been authenticated as. @@ -467,7 +467,7 @@ public function moderateEventsv2(Request $request) * ) * ) */ - #[UserStory('As a Host, I can create an event via the API', persona: 'Host')] + #[UserStory('As a Host, I can create an event via the API', persona: 'Host', theme: 'Create & manage events')] public function createEventv2(Request $request) { $user = $this->getUser(); @@ -637,7 +637,7 @@ public function createEventv2(Request $request) * ) * ) */ - #[UserStory('As a Host, I can update my event via the API', persona: 'Host')] + #[UserStory('As a Host, I can update my event via the API', persona: 'Host', theme: 'Create & manage events')] public function updateEventv2(Request $request, $idEvents) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/GroupController.php b/app/Http/Controllers/API/GroupController.php index 4988611691..49f1d3c389 100644 --- a/app/Http/Controllers/API/GroupController.php +++ b/app/Http/Controllers/API/GroupController.php @@ -42,7 +42,7 @@ class GroupController extends Controller * * Only Administrators can access this API call. */ - #[UserStory('As an Admin, I can list group audit changes for Zapier integration', persona: 'Admin')] + #[UserStory('As an Admin, I can list group audit changes for Zapier integration', persona: 'Admin', theme: 'Admin & integrations')] public static function getGroupChanges(Request $request) { $authenticatedUser = Auth::user(); @@ -65,7 +65,7 @@ public static function getGroupChanges(Request $request) return response()->json($groupChanges); } - #[UserStory('As a NetworkCoordinator, I can list all groups in my networks via the API', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can list all groups in my networks via the API', persona: 'NetworkCoordinator', theme: 'Network membership')] public static function getGroupsByUsersNetworks(Request $request) { $authenticatedUser = Auth::user(); @@ -221,7 +221,7 @@ public static function mapDetailsAndAuditToChange($group, $groupAudit) return $groupChange; } - #[UserStory('As a Restarter, I can list all groups via the API', persona: 'Restarter')] + #[UserStory('As a Restarter, I can list all groups via the API', persona: 'Restarter', theme: 'Find & browse groups')] public static function getGroupList() { $groups = Group::orderBy('created_at', 'desc'); @@ -269,8 +269,8 @@ public static function getGroupList() * ) */ - #[UserStory('As a Guest, I can get a list of group names via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve group names to display on my own platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can get a list of group names via the API', persona: 'Guest', theme: 'Find & browse groups')] + #[UserStory('As a ThirdParty, I can retrieve group names to display on my own platform', persona: 'ThirdParty', theme: 'Find & browse groups')] public static function listNamesv2(Request $request) { $request->validate([ 'includeArchived' => ['string', 'in:true,false'], @@ -322,8 +322,8 @@ public static function listNamesv2(Request $request) { * ), * ) */ - #[UserStory('As a Guest, I can get a list of group tags via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve group tags to categorise groups on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can get a list of group tags via the API', persona: 'Guest', theme: 'Find & browse groups')] + #[UserStory('As a ThirdParty, I can retrieve group tags to categorise groups on my platform', persona: 'ThirdParty', theme: 'Find & browse groups')] public static function listTagsv2(Request $request) { return [ 'data' => TagCollection::make(GroupTags::all()) @@ -363,8 +363,8 @@ public static function listTagsv2(Request $request) { * ), * ) */ - #[UserStory('As a Guest, I can view group details via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve group details to display on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view group details via the API', persona: 'Guest', theme: 'Find & browse groups')] + #[UserStory('As a ThirdParty, I can retrieve group details to display on my platform', persona: 'ThirdParty', theme: 'Find & browse groups')] public static function getGroupv2(Request $request, $idgroups) { $group = Group::findOrFail($idgroups); return \App\Http\Resources\Group::make($group); @@ -428,8 +428,8 @@ public static function getGroupv2(Request $request, $idgroups) { * ) */ - #[UserStory('As a Guest, I can list events for a group via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve events for a group to display on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can list events for a group via the API', persona: 'Guest', theme: 'Events for group')] + #[UserStory('As a ThirdParty, I can retrieve events for a group to display on my platform', persona: 'ThirdParty', theme: 'Events for group')] public static function getEventsForGroupv2(Request $request, $idgroups) { $group = Group::findOrFail($idgroups); @@ -489,8 +489,8 @@ public static function getEventsForGroupv2(Request $request, $idgroups) { * ) */ - #[UserStory('As a Guest, I can view a group\'s volunteers via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve volunteer data for a group via the API', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view a group\'s volunteers via the API', persona: 'Guest', theme: 'Manage volunteers')] + #[UserStory('As a ThirdParty, I can retrieve volunteer data for a group via the API', persona: 'ThirdParty', theme: 'Manage volunteers')] public static function getVolunteersForGroupv2($idgroups) { $group = Group::findOrFail($idgroups); $volunteers = $group->allConfirmedVolunteers()->get(); @@ -533,7 +533,7 @@ public static function getVolunteersForGroupv2($idgroups) { * ) */ - #[UserStory('As a Host, I can remove a volunteer from my group', persona: 'Host')] + #[UserStory('As a Host, I can remove a volunteer from my group', persona: 'Host', theme: 'Manage volunteers')] public function deleteVolunteerForGroupv2(Request $request, $id, $iduser) { $user = $this->getUser(); @@ -589,7 +589,7 @@ public function deleteVolunteerForGroupv2(Request $request, $id, $iduser) * ) */ - #[UserStory('As a Host, I can change a volunteer\'s role in my group', persona: 'Host')] + #[UserStory('As a Host, I can change a volunteer\'s role in my group', persona: 'Host', theme: 'Manage volunteers')] public function patchVolunteerForGroupv2(Request $request, $id, $iduser) { $user = $this->getUser(); @@ -665,8 +665,8 @@ private function getUser() { * ), * ) */ - #[UserStory('As a NetworkCoordinator, I can view groups pending moderation in my networks', persona: 'NetworkCoordinator')] - #[UserStory('As an Admin, I can view all groups pending moderation', persona: 'Admin')] + #[UserStory('As a NetworkCoordinator, I can view groups pending moderation in my networks', persona: 'NetworkCoordinator', theme: 'Create & manage groups')] + #[UserStory('As an Admin, I can view all groups pending moderation', persona: 'Admin', theme: 'Create & manage groups')] public function moderateGroupsv2(Request $request) { $user = $this->getUser(); $ret = \App\Http\Resources\GroupCollection::make(Group::unapprovedVisibleTo($user->id)); @@ -749,7 +749,7 @@ public function moderateGroupsv2(Request $request) { * ) * ) */ - #[UserStory('As a Restarter, I can create a new group via the API', persona: 'Restarter')] + #[UserStory('As a Restarter, I can create a new group via the API', persona: 'Restarter', theme: 'Create & manage groups')] public function createGroupv2(Request $request) { $user = $this->getUser(); $user->convertToHost(); @@ -898,7 +898,7 @@ public function createGroupv2(Request $request) { * ) * ) */ - #[UserStory('As a Host, I can update my group via the API', persona: 'Host')] + #[UserStory('As a Host, I can update my group via the API', persona: 'Host', theme: 'Create & manage groups')] public function updateGroupv2(Request $request, $idGroup) { $user = $this->getUser(); diff --git a/app/Http/Controllers/API/ItemController.php b/app/Http/Controllers/API/ItemController.php index 7e84dfef93..a852cbf096 100644 --- a/app/Http/Controllers/API/ItemController.php +++ b/app/Http/Controllers/API/ItemController.php @@ -41,7 +41,7 @@ class ItemController extends Controller * ), * ) */ - #[UserStory('As a Guest, I can view suggested item types for device records', persona: 'Guest')] + #[UserStory('As a Guest, I can view suggested item types for device records', persona: 'Guest', theme: 'Browse & search devices')] public static function listItemsv2(Request $request) { // Item types don't change often, so we can cache them. // Allow cache refresh for testing purposes or when running under Playwright diff --git a/app/Http/Controllers/API/NetworkController.php b/app/Http/Controllers/API/NetworkController.php index eac9f15cce..7a30879834 100644 --- a/app/Http/Controllers/API/NetworkController.php +++ b/app/Http/Controllers/API/NetworkController.php @@ -16,7 +16,7 @@ #[Feature('Networks', description: 'Regional network management and coordination')] class NetworkController extends Controller { - #[UserStory('As a NetworkCoordinator, I can view my network\'s statistics via the API', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can view my network\'s statistics via the API', persona: 'NetworkCoordinator', theme: 'Network stats')] public function stats(Network $network) { if (! Auth::user()->can('view', $network)) { @@ -55,8 +55,8 @@ public function stats(Network $network) * ) */ - #[UserStory('As a Guest, I can list all networks via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve all networks to display on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can list all networks via the API', persona: 'Guest', theme: 'Browse networks')] + #[UserStory('As a ThirdParty, I can retrieve all networks to display on my platform', persona: 'ThirdParty', theme: 'Browse networks')] public function getNetworksv2() { $networks = Network::all(); @@ -97,8 +97,8 @@ public function getNetworksv2() * ) */ - #[UserStory('As a Guest, I can view network details via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve network details via the API', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view network details via the API', persona: 'Guest', theme: 'Browse networks')] + #[UserStory('As a ThirdParty, I can retrieve network details via the API', persona: 'ThirdParty', theme: 'Browse networks')] public function getNetworkv2($id) { $network = Network::findOrFail($id); @@ -197,8 +197,8 @@ public function getNetworkv2($id) * ) */ - #[UserStory('As a Guest, I can list groups for a network via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve groups for a network to display on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can list groups for a network via the API', persona: 'Guest', theme: 'Network groups & events')] + #[UserStory('As a ThirdParty, I can retrieve groups for a network to display on my platform', persona: 'ThirdParty', theme: 'Network groups & events')] public function getNetworkGroupsv2(Request $request, $id) { $network = Network::findOrFail($id); @@ -322,8 +322,8 @@ public function getNetworkGroupsv2(Request $request, $id) * ) */ - #[UserStory('As a Guest, I can list events for a network via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve events for a network to display on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can list events for a network via the API', persona: 'Guest', theme: 'Network groups & events')] + #[UserStory('As a ThirdParty, I can retrieve events for a network to display on my platform', persona: 'ThirdParty', theme: 'Network groups & events')] public function getNetworkEventsv2(Request $request, $id) { Network::findOrFail($id); diff --git a/app/Http/Controllers/API/UserController.php b/app/Http/Controllers/API/UserController.php index f391763f62..f36e4a4fac 100644 --- a/app/Http/Controllers/API/UserController.php +++ b/app/Http/Controllers/API/UserController.php @@ -22,7 +22,7 @@ class UserController extends Controller * * Only Administrators can access this API call. */ - #[UserStory('As an Admin, I can list user audit changes for Zapier integration', persona: 'Admin')] + #[UserStory('As an Admin, I can list user audit changes for Zapier integration', persona: 'Admin', theme: 'Data exports')] public static function changes(Request $request) { $authenticatedUser = Auth::user(); diff --git a/app/Http/Controllers/API/UserGroupsController.php b/app/Http/Controllers/API/UserGroupsController.php index 5ac24198ef..44380cd4f2 100644 --- a/app/Http/Controllers/API/UserGroupsController.php +++ b/app/Http/Controllers/API/UserGroupsController.php @@ -23,7 +23,7 @@ class UserGroupsController extends Controller * * Only Administrators allowed to access this endpoint. */ - #[UserStory('As an Admin, I can list group membership changes for Zapier integration', persona: 'Admin')] + #[UserStory('As an Admin, I can list group membership changes for Zapier integration', persona: 'Admin', theme: 'Admin & integrations')] public static function changes(Request $request) { $authenticatedUser = Auth::user(); @@ -100,7 +100,7 @@ protected static function mapDetailsAndAuditToChange($userGroupAssociation, $aud * @param int $id * @return \Illuminate\Http\Response */ - #[UserStory('As a Restarter, I can leave a group I belong to', persona: 'Restarter')] + #[UserStory('As a Restarter, I can leave a group I belong to', persona: 'Restarter', theme: 'Manage volunteers')] public function leave(Request $request, $id) { $authenticatedUser = Auth::user(); diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index cb42f28d36..dbc2ef36a0 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -14,7 +14,7 @@ #[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class AdminController extends Controller { - #[UserStory('As a Guest, I can view the platform\'s global repair impact statistics', persona: 'Guest')] + #[UserStory('As a Guest, I can view the platform\'s global repair impact statistics', persona: 'Guest', theme: 'Landing page')] public static function stats($section = 1, $paragraph_only = false) { if ($section == 1) { diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index e4a362045e..f059def31e 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -50,8 +50,8 @@ class ApiController extends Controller /** * Embedded at https://therestartproject.org */ - #[UserStory('As a Guest, I can view aggregate platform impact statistics', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve aggregate platform impact data for embedding', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view aggregate platform impact statistics', persona: 'Guest', theme: 'Platform impact stats')] + #[UserStory('As a ThirdParty, I can retrieve aggregate platform impact data for embedding', persona: 'ThirdParty', theme: 'Platform impact stats')] public static function homepage_data() { $result = []; @@ -104,8 +104,8 @@ public static function homepage_data() ->json($result, 200); } - #[UserStory('As a Guest, I can view repair statistics for a specific event', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve event repair statistics for embedding', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view repair statistics for a specific event', persona: 'Guest', theme: 'Platform impact stats')] + #[UserStory('As a ThirdParty, I can retrieve event repair statistics for embedding', persona: 'ThirdParty', theme: 'Platform impact stats')] public static function partyStats($partyId) { $event = Party::where('idevents', $partyId)->first(); @@ -136,8 +136,8 @@ public static function partyStats($partyId) return response()->json($result, 200); } - #[UserStory('As a Guest, I can view repair statistics for a specific group', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can retrieve group repair statistics for embedding', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view repair statistics for a specific group', persona: 'Guest', theme: 'Platform impact stats')] + #[UserStory('As a ThirdParty, I can retrieve group repair statistics for embedding', persona: 'ThirdParty', theme: 'Platform impact stats')] public static function groupStats($groupId) { $group = Group::where('idgroups', $groupId)->first(); @@ -169,7 +169,7 @@ public static function groupStats($groupId) return response()->json($result, 200); } - #[UserStory('As a Restarter, I can retrieve my own profile information via the API', persona: 'Restarter')] + #[UserStory('As a Restarter, I can retrieve my own profile information via the API', persona: 'Restarter', theme: 'Platform impact stats')] public static function getUserInfo() { $user = Auth::user(); @@ -179,7 +179,7 @@ public static function getUserInfo() return response()->json($user->toArray()); } - #[UserStory('As an Admin, I can retrieve a list of all users via the API', persona: 'Admin')] + #[UserStory('As an Admin, I can retrieve a list of all users via the API', persona: 'Admin', theme: 'Platform impact stats')] public static function getUserList() { $authenticatedUser = Auth::user(); @@ -200,8 +200,8 @@ public static function getUserList() * @param Request $request * @return Response */ - #[UserStory('As a Guest, I can search and filter device records via the API', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can search and retrieve device records via the API', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can search and filter device records via the API', persona: 'Guest', theme: 'Data exports')] + #[UserStory('As a ThirdParty, I can search and retrieve device records via the API', persona: 'ThirdParty', theme: 'Data exports')] public static function getDevices(Request $request, $page, $size) { $powered = $request->input('powered'); diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 931e8b8d1f..c35884e77e 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -56,7 +56,7 @@ public function __construct() * * @throws \Illuminate\Validation\ValidationException */ - #[UserStory('As a Guest, I can log in to the platform', persona: 'Guest')] + #[UserStory('As a Guest, I can log in to the platform', persona: 'Guest', theme: 'Authentication')] public function login(Request $request) { $this->validateLogin($request); @@ -111,7 +111,7 @@ protected function validateLogin(Request $request) * * @return \Illuminate\Http\Response */ - #[UserStory('As a Guest, I can view the login page', persona: 'Guest')] + #[UserStory('As a Guest, I can view the login page', persona: 'Guest', theme: 'Authentication')] public function showLoginForm() { $stats = Fixometer::loginRegisterStats(); diff --git a/app/Http/Controllers/BrandsController.php b/app/Http/Controllers/BrandsController.php index 28a464102a..b00d95fe48 100644 --- a/app/Http/Controllers/BrandsController.php +++ b/app/Http/Controllers/BrandsController.php @@ -13,7 +13,7 @@ #[Feature('Administration', description: 'Platform administration and configuration')] class BrandsController extends Controller { - #[UserStory('As an Admin, I can view all device brands', persona: 'Admin')] + #[UserStory('As an Admin, I can view all device brands', persona: 'Admin', theme: 'Reference data')] public function index() { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -28,7 +28,7 @@ public function index() ]); } - #[UserStory('As an Admin, I can create a new device brand', persona: 'Admin')] + #[UserStory('As an Admin, I can create a new device brand', persona: 'Admin', theme: 'Reference data')] public function postCreateBrand(Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -42,7 +42,7 @@ public function postCreateBrand(Request $request) return Redirect::to('brands/edit/'.$brand->id)->with('success', __('brands.create_success')); } - #[UserStory('As an Admin, I can access the form to edit a device brand', persona: 'Admin')] + #[UserStory('As an Admin, I can access the form to edit a device brand', persona: 'Admin', theme: 'Reference data')] public function getEditBrand($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -57,7 +57,7 @@ public function getEditBrand($id) ]); } - #[UserStory('As an Admin, I can update a device brand', persona: 'Admin')] + #[UserStory('As an Admin, I can update a device brand', persona: 'Admin', theme: 'Reference data')] public function postEditBrand($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -71,7 +71,7 @@ public function postEditBrand($id, Request $request) return Redirect::back()->with('success', __('brands.update_success')); } - #[UserStory('As an Admin, I can delete a device brand', persona: 'Admin')] + #[UserStory('As an Admin, I can delete a device brand', persona: 'Admin', theme: 'Reference data')] public function getDeleteBrand($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { diff --git a/app/Http/Controllers/CalendarEventsController.php b/app/Http/Controllers/CalendarEventsController.php index 4d4b7293f6..774674ff75 100644 --- a/app/Http/Controllers/CalendarEventsController.php +++ b/app/Http/Controllers/CalendarEventsController.php @@ -23,7 +23,7 @@ public function __construct() $this->ical_format = 'Ymd\THis'; } - #[UserStory('As a Restarter, I can subscribe to my events as an iCal feed', persona: 'Restarter')] + #[UserStory('As a Restarter, I can subscribe to my events as an iCal feed', persona: 'Restarter', theme: 'Calendar feeds')] public function allEventsByUser(Request $request, $calendar_hash) { if (empty($calendar_hash)) { @@ -58,7 +58,7 @@ public function allEventsByUser(Request $request, $calendar_hash) $this->exportCalendar($events); } - #[UserStory('As a Guest, I can subscribe to a group\'s events as an iCal feed', persona: 'Guest')] + #[UserStory('As a Guest, I can subscribe to a group\'s events as an iCal feed', persona: 'Guest', theme: 'Calendar feeds')] public function allEventsByGroup(Request $request, Group $group) { $events = Party::join('groups', 'groups.idgroups', '=', 'events.group') @@ -78,7 +78,7 @@ public function allEventsByGroup(Request $request, Group $group) $this->exportCalendar($events); } - #[UserStory('As a Guest, I can subscribe to a network\'s events as an iCal feed', persona: 'Guest')] + #[UserStory('As a Guest, I can subscribe to a network\'s events as an iCal feed', persona: 'Guest', theme: 'Calendar feeds')] public function allEventsByNetwork(Request $request, Network $network) { $events = Party::join('groups', 'groups.idgroups', '=', 'events.group') @@ -99,7 +99,7 @@ public function allEventsByNetwork(Request $request, Network $network) $this->exportCalendar($events); } - #[UserStory('As a Guest, I can subscribe to events in my area as an iCal feed', persona: 'Guest')] + #[UserStory('As a Guest, I can subscribe to events in my area as an iCal feed', persona: 'Guest', theme: 'Calendar feeds')] public function allEventsByArea(Request $request, $area) { $events = Party::join('groups', 'groups.idgroups', '=', 'events.group') diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php index 12704b7c4a..3fa188351b 100644 --- a/app/Http/Controllers/CategoryController.php +++ b/app/Http/Controllers/CategoryController.php @@ -14,7 +14,7 @@ #[Feature('Administration', description: 'Platform administration and configuration')] class CategoryController extends Controller { - #[UserStory('As an Admin, I can view all device categories', persona: 'Admin')] + #[UserStory('As an Admin, I can view all device categories', persona: 'Admin', theme: 'Reference data')] public function index() { $Category = new Category; @@ -25,7 +25,7 @@ public function index() ]); } - #[UserStory('As an Admin, I can access the form to edit a device category', persona: 'Admin')] + #[UserStory('As an Admin, I can access the form to edit a device category', persona: 'Admin', theme: 'Reference data')] public function getEditCategory($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -44,7 +44,7 @@ public function getEditCategory($id) ]); } - #[UserStory('As an Admin, I can update a device category\'s details and impact factors', persona: 'Admin')] + #[UserStory('As an Admin, I can update a device category\'s details and impact factors', persona: 'Admin', theme: 'Reference data')] public function postEditCategory($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 1219d9165b..50d653e69a 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -15,7 +15,7 @@ #[Feature('Dashboard', description: 'User dashboard with personalised event and group information')] class DashboardController extends Controller { - #[UserStory('As a Restarter, I can view my dashboard with upcoming events, my groups, and nearby groups', persona: 'Restarter')] + #[UserStory('As a Restarter, I can view my dashboard with upcoming events, my groups, and nearby groups', persona: 'Restarter', theme: 'Personal dashboard')] public function index() { $user = User::getProfile(Auth::id()); @@ -85,7 +85,7 @@ public function index() ); } - #[UserStory('As a Host, I can view the host dashboard', persona: 'Host')] + #[UserStory('As a Host, I can view the host dashboard', persona: 'Host', theme: 'Host dashboard')] public function getHostDash() { return view('dashboard.host'); diff --git a/app/Http/Controllers/DeviceController.php b/app/Http/Controllers/DeviceController.php index 30809d4664..9b1395734f 100644 --- a/app/Http/Controllers/DeviceController.php +++ b/app/Http/Controllers/DeviceController.php @@ -29,7 +29,7 @@ #[Feature('Devices', description: 'Repair device tracking and impact measurement')] class DeviceController extends Controller { - #[UserStory('As a Restarter, I can browse all devices and view global repair impact data', persona: 'Restarter')] + #[UserStory('As a Restarter, I can browse all devices and view global repair impact data', persona: 'Restarter', theme: 'Browse & search devices')] public function index($search = null) { $user = User::getProfile(Auth::id()); @@ -70,7 +70,7 @@ public function index($search = null) ]); } - #[UserStory('As a Restarter, I can upload photos of devices I\'ve worked on', persona: 'Restarter')] + #[UserStory('As a Restarter, I can upload photos of devices I\'ve worked on', persona: 'Restarter', theme: 'Device photos')] public function imageUpload(Request $request, $id) { try { @@ -110,7 +110,7 @@ public function imageUpload(Request $request, $id) } } - #[UserStory('As a Restarter, I can delete device photos I\'ve uploaded', persona: 'Restarter')] + #[UserStory('As a Restarter, I can delete device photos I\'ve uploaded', persona: 'Restarter', theme: 'Device photos')] public function deleteImage($device_id, $idxref) { $user = Auth::user(); diff --git a/app/Http/Controllers/ExportController.php b/app/Http/Controllers/ExportController.php index 2f178db9e0..a13d6bd8e6 100644 --- a/app/Http/Controllers/ExportController.php +++ b/app/Http/Controllers/ExportController.php @@ -27,17 +27,17 @@ #[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class ExportController extends Controller { - #[UserStory('As a Restarter, I can export device data from an event as CSV', persona: 'Restarter')] + #[UserStory('As a Restarter, I can export device data from an event as CSV', persona: 'Restarter', theme: 'Data exports')] public function devicesEvent(Request $request, $idevents = NULL) { return $this->devices($request, $idevents); } - #[UserStory('As a Restarter, I can export device data from a group as CSV', persona: 'Restarter')] + #[UserStory('As a Restarter, I can export device data from a group as CSV', persona: 'Restarter', theme: 'Data exports')] public function devicesGroup(Request $request, $idgroups = NULL) { return $this->devices($request, NULL, $idgroups); } - #[UserStory('As a Restarter, I can export all device records as CSV', persona: 'Restarter')] + #[UserStory('As a Restarter, I can export all device records as CSV', persona: 'Restarter', theme: 'Data exports')] public function devices(Request $request, $idevents = NULL, $idgroups = NULL) { // To not display column if the referring URL is therestartproject.org @@ -153,7 +153,7 @@ public function devices(Request $request, $idevents = NULL, $idgroups = NULL) /** * @return \Illuminate\Http\Response */ - #[UserStory('As a Restarter, I can export a group\'s event summary as CSV', persona: 'Restarter')] + #[UserStory('As a Restarter, I can export a group\'s event summary as CSV', persona: 'Restarter', theme: 'Data exports')] public function groupEvents(Request $request, $idgroups) { $group = Group::findOrFail($idgroups); @@ -161,7 +161,7 @@ public function groupEvents(Request $request, $idgroups) return $this->exportEvents($parties); } - #[UserStory('As a NetworkCoordinator, I can export my network\'s event summary as CSV', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can export my network\'s event summary as CSV', persona: 'NetworkCoordinator', theme: 'Data exports')] public function networkEvents(Request $request, $id) { $network = Network::findOrFail($id); diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index 976d41f302..5ac458b949 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -83,31 +83,31 @@ private function indexVariations($tab, $network) ]); } - #[UserStory('As a Restarter, I can browse all repair groups on the platform', persona: 'Restarter')] + #[UserStory('As a Restarter, I can browse all repair groups on the platform', persona: 'Restarter', theme: 'Find & browse groups')] public function all() { return $this->indexVariations('all', null); } - #[UserStory('As a Restarter, I can view the groups I belong to', persona: 'Restarter')] + #[UserStory('As a Restarter, I can view the groups I belong to', persona: 'Restarter', theme: 'Find & browse groups')] public function mine() { return $this->indexVariations('mine', null); } - #[UserStory('As a Restarter, I can discover repair groups near my location', persona: 'Restarter')] + #[UserStory('As a Restarter, I can discover repair groups near my location', persona: 'Restarter', theme: 'Find & browse groups')] public function nearby() { return $this->indexVariations('nearby', null); } - #[UserStory('As a Restarter, I can browse groups within a specific network', persona: 'Restarter')] + #[UserStory('As a Restarter, I can browse groups within a specific network', persona: 'Restarter', theme: 'Find & browse groups')] public function network($id) { return $this->indexVariations('all', $id); } - #[UserStory('As a Restarter, I can create a new repair group and become its Host', persona: 'Restarter')] + #[UserStory('As a Restarter, I can create a new repair group and become its Host', persona: 'Restarter', theme: 'Create & manage groups')] public function create(Request $request) { $user = User::find(Auth::id()); @@ -120,7 +120,7 @@ public function create(Request $request) return view('group.create'); } - #[UserStory('As a Restarter, I can view a group\'s details, events, and members', persona: 'Restarter')] + #[UserStory('As a Restarter, I can view a group\'s details, events, and members', persona: 'Restarter', theme: 'Find & browse groups')] public function view($groupid) { $user = User::find(Auth::id()); @@ -297,7 +297,7 @@ public function view($groupid) ]); } - #[UserStory('As a Host, I can send email invitations to join my group', persona: 'Host')] + #[UserStory('As a Host, I can send email invitations to join my group', persona: 'Host', theme: 'Group invitations')] public function postSendInvite(Request $request) { $request->validate([ @@ -390,7 +390,7 @@ public function postSendInvite(Request $request) ])); } - #[UserStory('As a Restarter, I can accept a group invitation', persona: 'Restarter')] + #[UserStory('As a Restarter, I can accept a group invitation', persona: 'Restarter', theme: 'Group invitations')] public function confirmInvite($group_id, $hash) { // Find user/group relationship based on the invitation hash. @@ -423,7 +423,7 @@ public function confirmInvite($group_id, $hash) return redirect('/group/view/'.$user_group->group)->with('success', __('groups.invite_confirmed')); } - #[UserStory('As a Host, I can edit my group\'s details and settings', persona: 'Host')] + #[UserStory('As a Host, I can edit my group\'s details and settings', persona: 'Host', theme: 'Create & manage groups')] public function edit(Request $request, $id, Geocoder $geocoder) { $user = Auth::user(); @@ -448,7 +448,7 @@ public function edit(Request $request, $id, Geocoder $geocoder) ]); } - #[UserStory('As an Admin, I can delete a group that has no device records', persona: 'Admin')] + #[UserStory('As an Admin, I can delete a group that has no device records', persona: 'Admin', theme: 'Create & manage groups')] public function delete($id) { $group = Group::where('idgroups', $id)->first(); @@ -542,7 +542,7 @@ public static function expandGroups($groups, $your_groupids, $nearby_groupids) return $ret; } - #[UserStory('As a Guest, I can view a group\'s repair impact statistics', persona: 'Guest')] + #[UserStory('As a Guest, I can view a group\'s repair impact statistics', persona: 'Guest', theme: 'Stats & data')] public static function stats($id, $format = 'row') { $group = Group::where('idgroups', $id)->first(); @@ -557,7 +557,7 @@ public static function stats($id, $format = 'row') return view('group.stats', $groupStats); } - #[UserStory('As a Restarter, I can join a repair group', persona: 'Restarter')] + #[UserStory('As a Restarter, I can join a repair group', persona: 'Restarter', theme: 'Manage volunteers')] public function getJoinGroup($group_id) { $user_id = Auth::id(); @@ -614,7 +614,7 @@ public function getJoinGroup($group_id) } } - #[UserStory('As a Host, I can upload an image for my group', persona: 'Host')] + #[UserStory('As a Host, I can upload an image for my group', persona: 'Host', theme: 'Photos & branding')] public function imageUpload(Request $request, $id) { try { @@ -633,7 +633,7 @@ public function imageUpload(Request $request, $id) } } - #[UserStory('As a Host, I can remove my group\'s image', persona: 'Host')] + #[UserStory('As a Host, I can remove my group\'s image', persona: 'Host', theme: 'Photos & branding')] public function ajaxDeleteImage($group_id, $id, $path) { $user = Auth::user(); @@ -659,7 +659,7 @@ public function ajaxDeleteImage($group_id, $id, $path) * @param [type] $code * @return [type] */ - #[UserStory('As a Guest, I can join a group using a shareable invite code', persona: 'Guest')] + #[UserStory('As a Guest, I can join a group using a shareable invite code', persona: 'Guest', theme: 'Group invitations')] public function confirmCodeInvite(Request $request, $code) { // Variables diff --git a/app/Http/Controllers/GroupTagsController.php b/app/Http/Controllers/GroupTagsController.php index ff2afd76d8..7a1b3ce525 100644 --- a/app/Http/Controllers/GroupTagsController.php +++ b/app/Http/Controllers/GroupTagsController.php @@ -13,7 +13,7 @@ #[Feature('Administration', description: 'Platform administration and configuration')] class GroupTagsController extends Controller { - #[UserStory('As an Admin, I can view all group tags', persona: 'Admin')] + #[UserStory('As an Admin, I can view all group tags', persona: 'Admin', theme: 'Reference data')] public function index() { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -28,7 +28,7 @@ public function index() ]); } - #[UserStory('As an Admin, I can create a new group tag', persona: 'Admin')] + #[UserStory('As an Admin, I can create a new group tag', persona: 'Admin', theme: 'Reference data')] public function postCreateTag(Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -46,7 +46,7 @@ public function postCreateTag(Request $request) return Redirect::to('tags/edit/'.$group_tag->id)->with('success', __('group-tags.create_success')); } - #[UserStory('As an Admin, I can access the form to edit a group tag', persona: 'Admin')] + #[UserStory('As an Admin, I can access the form to edit a group tag', persona: 'Admin', theme: 'Reference data')] public function getEditTag($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -61,7 +61,7 @@ public function getEditTag($id) ]); } - #[UserStory('As an Admin, I can update a group tag', persona: 'Admin')] + #[UserStory('As an Admin, I can update a group tag', persona: 'Admin', theme: 'Reference data')] public function postEditTag($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -79,7 +79,7 @@ public function postEditTag($id, Request $request) return Redirect::back()->with('success', __('group-tags.update_success')); } - #[UserStory('As an Admin, I can delete a group tag', persona: 'Admin')] + #[UserStory('As an Admin, I can delete a group tag', persona: 'Admin', theme: 'Reference data')] public function getDeleteTag($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index e774fe6ab3..683c9ec800 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -15,7 +15,7 @@ #[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class HomeController extends Controller { - #[UserStory('As a Guest, I can view the landing page with platform impact statistics', persona: 'Guest')] + #[UserStory('As a Guest, I can view the landing page with platform impact statistics', persona: 'Guest', theme: 'Landing page')] public function index(Request $request) { if (Auth::check()) { diff --git a/app/Http/Controllers/InformationAlertCookieController.php b/app/Http/Controllers/InformationAlertCookieController.php index 50f77ea8ce..841c0cf04d 100644 --- a/app/Http/Controllers/InformationAlertCookieController.php +++ b/app/Http/Controllers/InformationAlertCookieController.php @@ -31,7 +31,7 @@ public function __construct() * @param int $id * @return View */ - #[UserStory('As a Guest, I can dismiss an information alert banner', persona: 'Guest')] + #[UserStory('As a Guest, I can dismiss an information alert banner', persona: 'Guest', theme: 'Cookie alerts')] public function __invoke(Request $request) { if (! $request->has('dismissable_id')) { diff --git a/app/Http/Controllers/LocaleController.php b/app/Http/Controllers/LocaleController.php index 6cf11355e5..5b3790c004 100644 --- a/app/Http/Controllers/LocaleController.php +++ b/app/Http/Controllers/LocaleController.php @@ -11,7 +11,7 @@ #[Feature('Platform', description: 'Platform-wide statistics and public impact data')] class LocaleController extends Controller { - #[UserStory('As a Guest, I can switch the application language', persona: 'Guest')] + #[UserStory('As a Guest, I can switch the application language', persona: 'Guest', theme: 'Language preferences')] public function setLang($locale) { // Get local from URL and set in the session diff --git a/app/Http/Controllers/NetworkController.php b/app/Http/Controllers/NetworkController.php index 000fc1f0da..76a92113d0 100644 --- a/app/Http/Controllers/NetworkController.php +++ b/app/Http/Controllers/NetworkController.php @@ -19,8 +19,8 @@ class NetworkController extends Controller * * @return \Illuminate\Http\Response */ - #[UserStory('As a NetworkCoordinator, I can view the networks I coordinate', persona: 'NetworkCoordinator')] - #[UserStory('As an Admin, I can view all networks on the platform', persona: 'Admin')] + #[UserStory('As a NetworkCoordinator, I can view the networks I coordinate', persona: 'NetworkCoordinator', theme: 'Browse networks')] + #[UserStory('As an Admin, I can view all networks on the platform', persona: 'Admin', theme: 'Browse networks')] public function index() { $user = Auth::user(); @@ -51,7 +51,7 @@ public function index() * @param \App\Network $network * @return \Illuminate\Http\Response */ - #[UserStory('As a NetworkCoordinator, I can view my network\'s details and statistics', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can view my network\'s details and statistics', persona: 'NetworkCoordinator', theme: 'Browse networks')] public function show(Network $network) { $user = Auth::user(); @@ -76,7 +76,7 @@ public function show(Network $network) * @param \App\Network $network * @return \Illuminate\Http\Response */ - #[UserStory('As a NetworkCoordinator, I can access the form to edit my network', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can access the form to edit my network', persona: 'NetworkCoordinator', theme: 'Manage network details')] public function edit(Network $network) { $this->authorize('update', $network); @@ -93,7 +93,7 @@ public function edit(Network $network) * @param \App\Network $network * @return \Illuminate\Http\Response */ - #[UserStory('As a NetworkCoordinator, I can update my network\'s details and logo', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can update my network\'s details and logo', persona: 'NetworkCoordinator', theme: 'Manage network details')] public function update(Request $request, Network $network) { $this->authorize('update', $network); @@ -122,7 +122,7 @@ public function update(Request $request, Network $network) * @param \App\Network $network * @return \Illuminate\Http\Response */ - #[UserStory('As a NetworkCoordinator, I can add groups to my network', persona: 'NetworkCoordinator')] + #[UserStory('As a NetworkCoordinator, I can add groups to my network', persona: 'NetworkCoordinator', theme: 'Network groups & events')] public function associateGroup(Request $request, Network $network) { $this->authorize('associateGroups', $network); diff --git a/app/Http/Controllers/OutboundController.php b/app/Http/Controllers/OutboundController.php index f9c0f5f9d2..7d24a96144 100644 --- a/app/Http/Controllers/OutboundController.php +++ b/app/Http/Controllers/OutboundController.php @@ -15,8 +15,8 @@ class OutboundController extends Controller /** type can be either party or group * id is id of group or party to display. * */ - #[UserStory('As a Guest, I can view embeddable CO2 impact visualisations for events and groups', persona: 'Guest')] - #[UserStory('As a ThirdParty, I can embed CO2 impact widgets for events and groups on my platform', persona: 'ThirdParty')] + #[UserStory('As a Guest, I can view embeddable CO2 impact visualisations for events and groups', persona: 'Guest', theme: 'Embeddable widgets')] + #[UserStory('As a ThirdParty, I can embed CO2 impact widgets for events and groups on my platform', persona: 'ThirdParty', theme: 'Embeddable widgets')] public static function info($type, $id, $format = 'fixometer', $return = 'view') { diff --git a/app/Http/Controllers/PartyController.php b/app/Http/Controllers/PartyController.php index f042e8529f..abb12ba52d 100644 --- a/app/Http/Controllers/PartyController.php +++ b/app/Http/Controllers/PartyController.php @@ -122,7 +122,7 @@ public static function expandEvent($event, $group = null, $countries = null, $at return $thisone; } - #[UserStory('As a Restarter, I can view upcoming events and events near me', persona: 'Restarter')] + #[UserStory('As a Restarter, I can view upcoming events and events near me', persona: 'Restarter', theme: 'Find & browse events')] public function index($group_id = null) { $events = []; @@ -195,8 +195,8 @@ public function index($group_id = null) ]); } - #[UserStory('As a Host, I can access the form to create a new event for my group', persona: 'Host')] - #[UserStory('As a Host, I can create an online event without a physical location', persona: 'Host')] + #[UserStory('As a Host, I can access the form to create a new event for my group', persona: 'Host', theme: 'Create & manage events')] + #[UserStory('As a Host, I can create an online event without a physical location', persona: 'Host', theme: 'Create & manage events')] public function create(Request $request, $group_id = null) { $user = Auth::user(); @@ -224,8 +224,8 @@ public function create(Request $request, $group_id = null) ]); } - #[UserStory('As a Host, I can edit my group\'s event details', persona: 'Host')] - #[UserStory('As a NetworkCoordinator, I can edit events for groups in my network', persona: 'NetworkCoordinator')] + #[UserStory('As a Host, I can edit my group\'s event details', persona: 'Host', theme: 'Create & manage events')] + #[UserStory('As a NetworkCoordinator, I can edit events for groups in my network', persona: 'NetworkCoordinator', theme: 'Create & manage events')] public function edit($id, Request $request) { $user = Auth::user(); @@ -277,7 +277,7 @@ public function edit($id, Request $request) ]); } - #[UserStory('As a Host, I can duplicate an existing event to create a new one', persona: 'Host')] + #[UserStory('As a Host, I can duplicate an existing event to create a new one', persona: 'Host', theme: 'Create & manage events')] public function duplicate($id, Request $request) { $user = Auth::user(); @@ -321,7 +321,7 @@ public function duplicate($id, Request $request) ]); } - #[UserStory('As a Guest, I can view a public event\'s details and repair statistics', persona: 'Guest')] + #[UserStory('As a Guest, I can view a public event\'s details and repair statistics', persona: 'Guest', theme: 'Find & browse events')] public function view($id) { $File = new FixometerFile; @@ -427,7 +427,7 @@ public function generateAddToCalendarLinks($event) } } - #[UserStory('As a Restarter, I can RSVP to attend an upcoming event', persona: 'Restarter')] + #[UserStory('As a Restarter, I can RSVP to attend an upcoming event', persona: 'Restarter', theme: 'Attendance & volunteers')] public function getJoinEvent($event_id) { $user_id = Auth::id(); @@ -507,7 +507,7 @@ public function notifyHostsOfRsvp($user_event, $event_id) } } - #[UserStory('As a Guest, I can view an event\'s repair impact statistics', persona: 'Guest')] + #[UserStory('As a Guest, I can view an event\'s repair impact statistics', persona: 'Guest', theme: 'Stats & data')] public static function stats($id) { $event = Party::where('idevents', $id)->first(); @@ -529,7 +529,7 @@ public static function stats($id) * * @return Response json formatted array of relevant info on users in the group. */ - #[UserStory('As a Host, I can retrieve group member emails to invite them to an event', persona: 'Host')] + #[UserStory('As a Host, I can retrieve group member emails to invite them to an event', persona: 'Host', theme: 'Invitations')] public function getGroupEmailsWithNames($event_id) { $group_user_ids = UserGroups::where('group', Party::find($event_id)->group) @@ -553,7 +553,7 @@ public function getGroupEmailsWithNames($event_id) return response()->json($group_users); } - #[UserStory('As a Host, I can update the participant count for my event', persona: 'Host')] + #[UserStory('As a Host, I can update the participant count for my event', persona: 'Host', theme: 'Attendance & volunteers')] public function updateQuantity(Request $request) { $event_id = $request->input('event_id'); @@ -576,7 +576,7 @@ public function updateQuantity(Request $request) return response()->json($return); } - #[UserStory('As a Host, I can update the volunteer count for my event', persona: 'Host')] + #[UserStory('As a Host, I can update the volunteer count for my event', persona: 'Host', theme: 'Attendance & volunteers')] public function updateVolunteerQuantity(Request $request) { $event_id = $request->input('event_id'); @@ -599,7 +599,7 @@ public function updateVolunteerQuantity(Request $request) return response()->json($return); } - #[UserStory('As a Host, I can remove a volunteer from my event', persona: 'Host')] + #[UserStory('As a Host, I can remove a volunteer from my event', persona: 'Host', theme: 'Attendance & volunteers')] public function removeVolunteer(Request $request) { // The id that's passed in is that of the events_users table, because the entry may refer to a user without @@ -631,7 +631,7 @@ public function removeVolunteer(Request $request) } } - #[UserStory('As a Host, I can send email invitations for an event', persona: 'Host')] + #[UserStory('As a Host, I can send email invitations for an event', persona: 'Host', theme: 'Invitations')] public function postSendInvite(Request $request) { $from_id = Auth::id(); @@ -731,7 +731,7 @@ public function postSendInvite(Request $request) return redirect()->back()->with('warning', __('events.invite_noemails')); } - #[UserStory('As a Restarter, I can accept an event invitation', persona: 'Restarter')] + #[UserStory('As a Restarter, I can accept an event invitation', persona: 'Restarter', theme: 'Invitations')] public function confirmInvite($event_id, $hash) { $user_event = EventsUsers::where('status', $hash)->where('event', $event_id)->first(); @@ -751,7 +751,7 @@ public function confirmInvite($event_id, $hash) return redirect('/party/view/'.intval($event_id))->with('warning', __('events.invite_invalid')); } - #[UserStory('As a Restarter, I can cancel my attendance at an event', persona: 'Restarter')] + #[UserStory('As a Restarter, I can cancel my attendance at an event', persona: 'Restarter', theme: 'Invitations')] public function cancelInvite($event_id) { // We have to do a loop to avoid the gotcha where bulk delete operations don't invoke observers. @@ -762,7 +762,7 @@ public function cancelInvite($event_id) return redirect('/party/view/'.intval($event_id))->with('success', __('events.invite_cancelled')); } - #[UserStory('As a Restarter, I can upload photos from an event', persona: 'Restarter')] + #[UserStory('As a Restarter, I can upload photos from an event', persona: 'Restarter', theme: 'Photos & media')] public function imageUpload(Request $request, $id) { try { @@ -793,7 +793,7 @@ public function imageUpload(Request $request, $id) } } - #[UserStory('As a Restarter, I can delete my uploaded event photos', persona: 'Restarter')] + #[UserStory('As a Restarter, I can delete my uploaded event photos', persona: 'Restarter', theme: 'Photos & media')] public function deleteImage($event_id, $id, $path) { $user = Auth::user(); @@ -815,7 +815,7 @@ public function deleteImage($event_id, $id, $path) * This sends an email to all user except the host logged in an email to ask for contributions * */ - #[UserStory('As a Host, I can request attendees log their repair contributions', persona: 'Host')] + #[UserStory('As a Host, I can request attendees log their repair contributions', persona: 'Host', theme: 'Devices & repairs')] public function getContributions($event_id) { $event = Party::find($event_id); @@ -844,7 +844,7 @@ public function getContributions($event_id) * Called via AJAX. * @param id The event id. */ - #[UserStory('As a Host, I can delete an event from my group', persona: 'Host')] + #[UserStory('As a Host, I can delete an event from my group', persona: 'Host', theme: 'Create & manage events')] public function deleteEvent($id) { $event = Party::findOrFail($id); @@ -887,7 +887,7 @@ public function deleteEvent($id) * @param [type] $code * @return [type] */ - #[UserStory('As a Guest, I can join an event using a shareable invite code', persona: 'Guest')] + #[UserStory('As a Guest, I can join an event using a shareable invite code', persona: 'Guest', theme: 'Invitations')] public function confirmCodeInvite(Request $request, $code) { // Variables diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php index d4f7285db4..3c03ebfcf5 100644 --- a/app/Http/Controllers/RoleController.php +++ b/app/Http/Controllers/RoleController.php @@ -16,7 +16,7 @@ class RoleController extends Controller { //Custom Functions - #[UserStory('As an Admin, I can view all roles and their permissions', persona: 'Admin')] + #[UserStory('As an Admin, I can view all roles and their permissions', persona: 'Admin', theme: 'Roles & permissions')] public function index() { $user = User::find(Auth::id()); @@ -37,7 +37,7 @@ public function index() return redirect(RouteServiceProvider::HOME); } - #[UserStory('As an Admin, I can edit the permissions assigned to a role', persona: 'Admin')] + #[UserStory('As an Admin, I can edit the permissions assigned to a role', persona: 'Admin', theme: 'Roles & permissions')] public function edit($id, Request $request) { $user = Auth::user(); diff --git a/app/Http/Controllers/SkillsController.php b/app/Http/Controllers/SkillsController.php index 7e4b6c77dc..414a588168 100644 --- a/app/Http/Controllers/SkillsController.php +++ b/app/Http/Controllers/SkillsController.php @@ -14,7 +14,7 @@ #[Feature('Administration', description: 'Platform administration and configuration')] class SkillsController extends Controller { - #[UserStory('As an Admin, I can view all repair skills', persona: 'Admin')] + #[UserStory('As an Admin, I can view all repair skills', persona: 'Admin', theme: 'Reference data')] public function index() { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -29,7 +29,7 @@ public function index() ]); } - #[UserStory('As an Admin, I can create a new repair skill', persona: 'Admin')] + #[UserStory('As an Admin, I can create a new repair skill', persona: 'Admin', theme: 'Reference data')] public function postCreateSkill(Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -44,7 +44,7 @@ public function postCreateSkill(Request $request) return Redirect::to('skills/edit/'.$skill->id)->with('success', __('skills.create_success')); } - #[UserStory('As an Admin, I can access the form to edit a repair skill', persona: 'Admin')] + #[UserStory('As an Admin, I can access the form to edit a repair skill', persona: 'Admin', theme: 'Reference data')] public function getEditSkill($id) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -59,7 +59,7 @@ public function getEditSkill($id) ]); } - #[UserStory('As an Admin, I can update a repair skill', persona: 'Admin')] + #[UserStory('As an Admin, I can update a repair skill', persona: 'Admin', theme: 'Reference data')] public function postEditSkill($id, Request $request) { if (! Fixometer::hasRole(Auth::user(), 'Administrator')) { @@ -75,7 +75,7 @@ public function postEditSkill($id, Request $request) return Redirect::back()->with('success', __('skills.update_success')); } - #[UserStory('As an Admin, I can delete a repair skill', persona: 'Admin')] + #[UserStory('As an Admin, I can delete a repair skill', persona: 'Admin', theme: 'Reference data')] public function getDeleteSkill($id) { diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 7162a4cdf7..c1c9e492ea 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -54,7 +54,7 @@ class UserController extends Controller * * @return \Illuminate\Http\Response */ - #[UserStory('As a Restarter, I can view my profile or another user\'s profile', persona: 'Restarter')] + #[UserStory('As a Restarter, I can view my profile or another user\'s profile', persona: 'Restarter', theme: 'Profile management')] public function index($id = null) { if (is_null($id)) { @@ -72,7 +72,7 @@ public function index($id = null) ]); } - #[UserStory('As a Restarter, I can access the form to edit my profile', persona: 'Restarter')] + #[UserStory('As a Restarter, I can access the form to edit my profile', persona: 'Restarter', theme: 'Profile management')] public function getProfileEdit($id = null) { if (is_null($id)) { @@ -128,7 +128,7 @@ public function getProfileEdit($id = null) ]); } - #[UserStory('As a Restarter, I can view my notifications', persona: 'Restarter')] + #[UserStory('As a Restarter, I can view my notifications', persona: 'Restarter', theme: 'Notifications')] public function getNotifications() { $user = Auth::user(); @@ -140,7 +140,7 @@ public function getNotifications() ]); } - #[UserStory('As a Restarter, I can update my profile information', persona: 'Restarter')] + #[UserStory('As a Restarter, I can update my profile information', persona: 'Restarter', theme: 'Profile management')] public function postProfileInfoEdit(Request $request, App\Helpers\Geocoder $geocoder) { $rules = [ @@ -197,7 +197,7 @@ public function postProfileInfoEdit(Request $request, App\Helpers\Geocoder $geoc return redirect()->back()->with('message', __('profile.profile_updated')); } - #[UserStory('As a Restarter, I can change my password', persona: 'Restarter')] + #[UserStory('As a Restarter, I can change my password', persona: 'Restarter', theme: 'Profile management')] public function postProfilePasswordEdit(Request $request) { if ($request->input('id') !== null) { @@ -230,7 +230,7 @@ public function postProfilePasswordEdit(Request $request) return redirect()->back()->with('error', __('profile.password_old_mismatch')); } - #[UserStory('As an Admin, I can change a user\'s Repair Directory role', persona: 'Admin')] + #[UserStory('As an Admin, I can change a user\'s Repair Directory role', persona: 'Admin', theme: 'Admin user management')] public function postProfileRepairDirectory(Request $request) { $rules = [ @@ -259,7 +259,7 @@ public function postProfileRepairDirectory(Request $request) return redirect()->back()->with('message', __('profile.profile_updated')); } - #[UserStory('As a Restarter, I can change my preferred language', persona: 'Restarter')] + #[UserStory('As a Restarter, I can change my preferred language', persona: 'Restarter', theme: 'Language preferences')] public function storeLanguage(Request $request) { if ($request->input('id') !== null) { @@ -286,8 +286,8 @@ public function storeLanguage(Request $request) return redirect()->back()->with('message', Lang::get('profile.language_updated')); } - #[UserStory('As a Restarter, I can delete my own account', persona: 'Restarter')] - #[UserStory('As an Admin, I can delete a user\'s account', persona: 'Admin')] + #[UserStory('As a Restarter, I can delete my own account', persona: 'Restarter', theme: 'Account management')] + #[UserStory('As an Admin, I can delete a user\'s account', persona: 'Admin', theme: 'Admin user management')] public function postSoftDeleteUser(Request $request) { if ($request->input('id') !== null) { @@ -315,7 +315,7 @@ public function postSoftDeleteUser(Request $request) } } - #[UserStory('As a Restarter, I can update my notification preferences', persona: 'Restarter')] + #[UserStory('As a Restarter, I can update my notification preferences', persona: 'Restarter', theme: 'Profile management')] public function postProfilePreferencesEdit(Request $request) { if ($request->input('id') !== null) { @@ -336,7 +336,7 @@ public function postProfilePreferencesEdit(Request $request) return redirect()->back()->with('message', Lang::get('profile.preferences_updated')); } - #[UserStory('As a Restarter, I can update my repair skills', persona: 'Restarter')] + #[UserStory('As a Restarter, I can update my repair skills', persona: 'Restarter', theme: 'Profile management')] public function postProfileTagsEdit(Request $request) { if ($request->input('id') !== null) { @@ -360,7 +360,7 @@ public function postProfileTagsEdit(Request $request) return redirect()->back()->with('message', Lang::get('profile.skills_updated')); } - #[UserStory('As a Restarter, I can upload a new profile picture', persona: 'Restarter')] + #[UserStory('As a Restarter, I can upload a new profile picture', persona: 'Restarter', theme: 'Profile management')] public function postProfilePictureEdit(Request $request) { if ($request->input('id') !== null) { @@ -379,7 +379,7 @@ public function postProfilePictureEdit(Request $request) return redirect()->back()->with('error', __('profile.picture_error')); } - #[UserStory('As an Admin, I can edit a user\'s role, groups, and permissions', persona: 'Admin')] + #[UserStory('As an Admin, I can edit a user\'s role, groups, and permissions', persona: 'Admin', theme: 'Admin user management')] public function postAdminEdit(Request $request) { if ($request->input('id') !== null) { @@ -424,7 +424,7 @@ public function postAdminEdit(Request $request) return redirect()->back()->with('message', __('profile.admin_success')); } - #[UserStory('As a Guest, I can request a password recovery email', persona: 'Guest')] + #[UserStory('As a Guest, I can request a password recovery email', persona: 'Guest', theme: 'Authentication')] public function recover(Request $request) { $User = new User; @@ -479,7 +479,7 @@ public function recover(Request $request) ]); } - #[UserStory('As a Guest, I can reset my password using a recovery code', persona: 'Guest')] + #[UserStory('As a Guest, I can reset my password using a recovery code', persona: 'Guest', theme: 'Authentication')] public function reset(Request $request) { $User = new User; @@ -542,7 +542,7 @@ public function reset(Request $request) ]); } - #[UserStory('As an Admin, I can view and search all users on the platform', persona: 'Admin')] + #[UserStory('As an Admin, I can view and search all users on the platform', persona: 'Admin', theme: 'Admin user management')] public function all() { $user = User::find(Auth::id()); @@ -578,7 +578,7 @@ public function all() } } - #[UserStory('As an Admin, I can filter and search the user list', persona: 'Admin')] + #[UserStory('As an Admin, I can filter and search the user list', persona: 'Admin', theme: 'Admin user management')] public function search(Request $request) { $user = User::find(Auth::id()); @@ -650,7 +650,7 @@ public function search(Request $request) } } - #[UserStory('As an Admin, I can create a new user account', persona: 'Admin')] + #[UserStory('As an Admin, I can create a new user account', persona: 'Admin', theme: 'Admin user management')] public function create(Request $request) { $user = Auth::user(); @@ -759,7 +759,7 @@ public function create(Request $request) } } - #[UserStory('As an Admin, I can edit any user\'s account details', persona: 'Admin')] + #[UserStory('As an Admin, I can edit any user\'s account details', persona: 'Admin', theme: 'Admin user management')] public function edit($id, Request $request) { global $fixometer_languages; @@ -872,7 +872,7 @@ public function edit($id, Request $request) } } - #[UserStory('As a Restarter, I can log out of my account', persona: 'Restarter')] + #[UserStory('As a Restarter, I can log out of my account', persona: 'Restarter', theme: 'Authentication')] public function logout() { Auth::logout(); @@ -880,7 +880,7 @@ public function logout() return redirect('/login'); } - #[UserStory('As a Guest, I can view the registration page', persona: 'Guest')] + #[UserStory('As a Guest, I can view the registration page', persona: 'Guest', theme: 'Registration & onboarding')] public function getRegister($hash = null) { if (Auth::check() && Auth::user()->hasUserGivenConsent()) { @@ -903,7 +903,7 @@ public function getRegister($hash = null) ]); } - #[UserStory('As a Guest, I can register a new account', persona: 'Guest')] + #[UserStory('As a Guest, I can register a new account', persona: 'Guest', theme: 'Registration & onboarding')] public function postRegister(Request $request, $hash = null) { $geocoder = new \App\Helpers\Geocoder(); @@ -1070,7 +1070,7 @@ public function postRegister(Request $request, $hash = null) } } - #[UserStory('As a Restarter, I can complete my onboarding process', persona: 'Restarter')] + #[UserStory('As a Restarter, I can complete my onboarding process', persona: 'Restarter', theme: 'Registration & onboarding')] public function getOnboardingComplete() { $user = Auth::user(); diff --git a/docs/specs/manifest.json b/docs/specs/manifest.json index 1c4ab7c2ad..cdc1b11715 100644 --- a/docs/specs/manifest.json +++ b/docs/specs/manifest.json @@ -1,5 +1,5 @@ { - "generatedAt": "2026-04-16T16:29:32Z", + "generatedAt": "2026-04-16T20:39:33Z", "features": { "Administration": { "description": "Platform administration and configuration", @@ -15,6 +15,7 @@ { "story": "As an Admin, I can create a platform-wide alert", "persona": "Admin", + "theme": "Platform alerts", "method": "AlertController::addAlertv2", "file": "app/Http/Controllers/API/AlertController.php", "tests": [ @@ -27,6 +28,7 @@ { "story": "As an Admin, I can update a platform alert", "persona": "Admin", + "theme": "Platform alerts", "method": "AlertController::updateAlertv2", "file": "app/Http/Controllers/API/AlertController.php", "tests": [ @@ -39,6 +41,7 @@ { "story": "As an Admin, I can delete a device brand", "persona": "Admin", + "theme": "Reference data", "method": "BrandsController::getDeleteBrand", "file": "app/Http/Controllers/BrandsController.php", "tests": [ @@ -55,6 +58,7 @@ { "story": "As an Admin, I can access the form to edit a device brand", "persona": "Admin", + "theme": "Reference data", "method": "BrandsController::getEditBrand", "file": "app/Http/Controllers/BrandsController.php", "tests": [ @@ -71,6 +75,7 @@ { "story": "As an Admin, I can view all device brands", "persona": "Admin", + "theme": "Reference data", "method": "BrandsController::index", "file": "app/Http/Controllers/BrandsController.php", "tests": [ @@ -87,6 +92,7 @@ { "story": "As an Admin, I can create a new device brand", "persona": "Admin", + "theme": "Reference data", "method": "BrandsController::postCreateBrand", "file": "app/Http/Controllers/BrandsController.php", "tests": [ @@ -103,6 +109,7 @@ { "story": "As an Admin, I can update a device brand", "persona": "Admin", + "theme": "Reference data", "method": "BrandsController::postEditBrand", "file": "app/Http/Controllers/BrandsController.php", "tests": [ @@ -119,6 +126,7 @@ { "story": "As an Admin, I can access the form to edit a device category", "persona": "Admin", + "theme": "Reference data", "method": "CategoryController::getEditCategory", "file": "app/Http/Controllers/CategoryController.php", "tests": [ @@ -135,6 +143,7 @@ { "story": "As an Admin, I can view all device categories", "persona": "Admin", + "theme": "Reference data", "method": "CategoryController::index", "file": "app/Http/Controllers/CategoryController.php", "tests": [ @@ -147,6 +156,7 @@ { "story": "As an Admin, I can update a device category's details and impact factors", "persona": "Admin", + "theme": "Reference data", "method": "CategoryController::postEditCategory", "file": "app/Http/Controllers/CategoryController.php", "tests": [ @@ -163,6 +173,7 @@ { "story": "As an Admin, I can delete a group tag", "persona": "Admin", + "theme": "Reference data", "method": "GroupTagsController::getDeleteTag", "file": "app/Http/Controllers/GroupTagsController.php", "tests": [ @@ -175,6 +186,7 @@ { "story": "As an Admin, I can access the form to edit a group tag", "persona": "Admin", + "theme": "Reference data", "method": "GroupTagsController::getEditTag", "file": "app/Http/Controllers/GroupTagsController.php", "tests": [ @@ -187,6 +199,7 @@ { "story": "As an Admin, I can view all group tags", "persona": "Admin", + "theme": "Reference data", "method": "GroupTagsController::index", "file": "app/Http/Controllers/GroupTagsController.php", "tests": [ @@ -199,6 +212,7 @@ { "story": "As an Admin, I can create a new group tag", "persona": "Admin", + "theme": "Reference data", "method": "GroupTagsController::postCreateTag", "file": "app/Http/Controllers/GroupTagsController.php", "tests": [ @@ -211,6 +225,7 @@ { "story": "As an Admin, I can update a group tag", "persona": "Admin", + "theme": "Reference data", "method": "GroupTagsController::postEditTag", "file": "app/Http/Controllers/GroupTagsController.php", "tests": [ @@ -223,6 +238,7 @@ { "story": "As an Admin, I can edit the permissions assigned to a role", "persona": "Admin", + "theme": "Roles & permissions", "method": "RoleController::edit", "file": "app/Http/Controllers/RoleController.php", "tests": [ @@ -235,6 +251,7 @@ { "story": "As an Admin, I can view all roles and their permissions", "persona": "Admin", + "theme": "Roles & permissions", "method": "RoleController::index", "file": "app/Http/Controllers/RoleController.php", "tests": [ @@ -255,6 +272,7 @@ { "story": "As an Admin, I can delete a repair skill", "persona": "Admin", + "theme": "Reference data", "method": "SkillsController::getDeleteSkill", "file": "app/Http/Controllers/SkillsController.php", "tests": [ @@ -267,6 +285,7 @@ { "story": "As an Admin, I can access the form to edit a repair skill", "persona": "Admin", + "theme": "Reference data", "method": "SkillsController::getEditSkill", "file": "app/Http/Controllers/SkillsController.php", "tests": [ @@ -279,6 +298,7 @@ { "story": "As an Admin, I can view all repair skills", "persona": "Admin", + "theme": "Reference data", "method": "SkillsController::index", "file": "app/Http/Controllers/SkillsController.php", "tests": [ @@ -299,6 +319,7 @@ { "story": "As an Admin, I can create a new repair skill", "persona": "Admin", + "theme": "Reference data", "method": "SkillsController::postCreateSkill", "file": "app/Http/Controllers/SkillsController.php", "tests": [ @@ -311,6 +332,7 @@ { "story": "As an Admin, I can update a repair skill", "persona": "Admin", + "theme": "Reference data", "method": "SkillsController::postEditSkill", "file": "app/Http/Controllers/SkillsController.php", "tests": [ @@ -323,6 +345,7 @@ { "story": "As a Guest, I can view active platform alerts", "persona": "Guest", + "theme": "Platform alerts", "method": "AlertController::listAlertsv2", "file": "app/Http/Controllers/API/AlertController.php", "tests": [ @@ -352,6 +375,7 @@ { "story": "As a Host, I can view the host dashboard", "persona": "Host", + "theme": "Host dashboard", "method": "DashboardController::getHostDash", "file": "app/Http/Controllers/DashboardController.php", "tests": [] @@ -359,6 +383,7 @@ { "story": "As a Restarter, I can view my dashboard with upcoming events, my groups, and nearby groups", "persona": "Restarter", + "theme": "Personal dashboard", "method": "DashboardController::index", "file": "app/Http/Controllers/DashboardController.php", "tests": [ @@ -390,13 +415,24 @@ { "story": "As a Guest, I can view device details via the API", "persona": "Guest", + "theme": "Get device details", "method": "DeviceController::getDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Devices/APIv2DeviceTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Devices/APIv2DeviceTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view suggested item types for device records", "persona": "Guest", + "theme": "Browse & search devices", "method": "ItemController::listItemsv2", "file": "app/Http/Controllers/API/ItemController.php", "tests": [ @@ -409,6 +445,7 @@ { "story": "As a Host, I can delete a device record from my event", "persona": "Host", + "theme": "Delete devices", "method": "DeviceController::deleteDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", "tests": [ @@ -421,6 +458,7 @@ { "story": "As a Restarter, I can log a device repair at an event I attended", "persona": "Restarter", + "theme": "Log & edit repairs", "method": "DeviceController::createDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", "tests": [ @@ -481,6 +519,7 @@ { "story": "As a Restarter, I can delete device photos I've uploaded", "persona": "Restarter", + "theme": "Device photos", "method": "DeviceController::deleteImage", "file": "app/Http/Controllers/DeviceController.php", "tests": [ @@ -497,6 +536,7 @@ { "story": "As a Restarter, I can upload photos of devices I've worked on", "persona": "Restarter", + "theme": "Device photos", "method": "DeviceController::imageUpload", "file": "app/Http/Controllers/DeviceController.php", "tests": [ @@ -513,6 +553,7 @@ { "story": "As a Restarter, I can browse all devices and view global repair impact data", "persona": "Restarter", + "theme": "Browse & search devices", "method": "DeviceController::index", "file": "app/Http/Controllers/DeviceController.php", "tests": [ @@ -525,6 +566,7 @@ { "story": "As a Restarter, I can update a device repair record at an event I attended", "persona": "Restarter", + "theme": "Log & edit repairs", "method": "DeviceController::updateDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", "tests": [ @@ -557,6 +599,7 @@ { "story": "As a ThirdParty, I can retrieve device repair data via the API", "persona": "ThirdParty", + "theme": "Get device details", "method": "DeviceController::getDevicev2", "file": "app/Http/Controllers/API/DeviceController.php", "tests": [ @@ -590,13 +633,20 @@ { "story": "As an Admin, I can view all events pending moderation", "persona": "Admin", + "theme": "Create & manage events", "method": "EventController::moderateEventsv2", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can subscribe to events in my area as an iCal feed", "persona": "Guest", + "theme": "Calendar feeds", "method": "CalendarEventsController::allEventsByArea", "file": "app/Http/Controllers/CalendarEventsController.php", "tests": [ @@ -609,6 +659,7 @@ { "story": "As a Guest, I can subscribe to a group's events as an iCal feed", "persona": "Guest", + "theme": "Calendar feeds", "method": "CalendarEventsController::allEventsByGroup", "file": "app/Http/Controllers/CalendarEventsController.php", "tests": [ @@ -621,6 +672,7 @@ { "story": "As a Guest, I can subscribe to a network's events as an iCal feed", "persona": "Guest", + "theme": "Calendar feeds", "method": "CalendarEventsController::allEventsByNetwork", "file": "app/Http/Controllers/CalendarEventsController.php", "tests": [ @@ -633,20 +685,45 @@ { "story": "As a Guest, I can view event details via the API", "persona": "Guest", + "theme": "Find & browse events", "method": "EventController::getEventv2", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view confirmed volunteers for an event", "persona": "Guest", + "theme": "Attendance & volunteers", "method": "EventController::listVolunteers", "file": "app/Http/Controllers/API/EventController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/AddRemoveVolunteerTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can join an event using a shareable invite code", "persona": "Guest", + "theme": "Invitations", "method": "PartyController::confirmCodeInvite", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -659,6 +736,7 @@ { "story": "As a Guest, I can view an event's repair impact statistics", "persona": "Guest", + "theme": "Stats & data", "method": "PartyController::stats", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -671,6 +749,7 @@ { "story": "As a Guest, I can view a public event's details and repair statistics", "persona": "Guest", + "theme": "Find & browse events", "method": "PartyController::view", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -723,6 +802,7 @@ { "story": "As a Host, I can add a volunteer to my event", "persona": "Host", + "theme": "Attendance & volunteers", "method": "EventController::addVolunteer", "file": "app/Http/Controllers/API/EventController.php", "tests": [ @@ -743,6 +823,7 @@ { "story": "As a Host, I can create an event via the API", "persona": "Host", + "theme": "Create & manage events", "method": "EventController::createEventv2", "file": "app/Http/Controllers/API/EventController.php", "tests": [ @@ -831,6 +912,7 @@ { "story": "As a Host, I can update my event via the API", "persona": "Host", + "theme": "Create & manage events", "method": "EventController::updateEventv2", "file": "app/Http/Controllers/API/EventController.php", "tests": [ @@ -871,13 +953,28 @@ { "story": "As a Host, I can access the form to create a new event for my group", "persona": "Host", + "theme": "Create & manage events", "method": "PartyController::create", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can create an online event without a physical location", "persona": "Host", + "theme": "Create & manage events", "method": "PartyController::create", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -898,6 +995,7 @@ { "story": "As a Host, I can delete an event from my group", "persona": "Host", + "theme": "Create & manage events", "method": "PartyController::deleteEvent", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -914,6 +1012,7 @@ { "story": "As a Host, I can duplicate an existing event to create a new one", "persona": "Host", + "theme": "Create & manage events", "method": "PartyController::duplicate", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -926,13 +1025,24 @@ { "story": "As a Host, I can edit my group's event details", "persona": "Host", + "theme": "Create & manage events", "method": "PartyController::edit", "file": "app/Http/Controllers/PartyController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Host, I can request attendees log their repair contributions", "persona": "Host", + "theme": "Devices & repairs", "method": "PartyController::getContributions", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -949,6 +1059,7 @@ { "story": "As a Host, I can retrieve group member emails to invite them to an event", "persona": "Host", + "theme": "Invitations", "method": "PartyController::getGroupEmailsWithNames", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -965,6 +1076,7 @@ { "story": "As a Host, I can send email invitations for an event", "persona": "Host", + "theme": "Invitations", "method": "PartyController::postSendInvite", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1005,6 +1117,7 @@ { "story": "As a Host, I can remove a volunteer from my event", "persona": "Host", + "theme": "Attendance & volunteers", "method": "PartyController::removeVolunteer", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1021,6 +1134,7 @@ { "story": "As a Host, I can update the participant count for my event", "persona": "Host", + "theme": "Attendance & volunteers", "method": "PartyController::updateQuantity", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1033,6 +1147,7 @@ { "story": "As a Host, I can update the volunteer count for my event", "persona": "Host", + "theme": "Attendance & volunteers", "method": "PartyController::updateVolunteerQuantity", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1045,6 +1160,7 @@ { "story": "As a NetworkCoordinator, I can list events across my networks", "persona": "NetworkCoordinator", + "theme": "Find & browse events", "method": "EventController::getEventsByUsersNetworks", "file": "app/Http/Controllers/API/EventController.php", "tests": [ @@ -1061,6 +1177,7 @@ { "story": "As a NetworkCoordinator, I can view events pending moderation in my networks", "persona": "NetworkCoordinator", + "theme": "Create & manage events", "method": "EventController::moderateEventsv2", "file": "app/Http/Controllers/API/EventController.php", "tests": [ @@ -1073,6 +1190,7 @@ { "story": "As a NetworkCoordinator, I can edit events for groups in my network", "persona": "NetworkCoordinator", + "theme": "Create & manage events", "method": "PartyController::edit", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1089,6 +1207,7 @@ { "story": "As a Restarter, I can subscribe to my events as an iCal feed", "persona": "Restarter", + "theme": "Calendar feeds", "method": "CalendarEventsController::allEventsByUser", "file": "app/Http/Controllers/CalendarEventsController.php", "tests": [ @@ -1117,6 +1236,7 @@ { "story": "As a Restarter, I can cancel my attendance at an event", "persona": "Restarter", + "theme": "Invitations", "method": "PartyController::cancelInvite", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1129,6 +1249,7 @@ { "story": "As a Restarter, I can accept an event invitation", "persona": "Restarter", + "theme": "Invitations", "method": "PartyController::confirmInvite", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1149,6 +1270,7 @@ { "story": "As a Restarter, I can delete my uploaded event photos", "persona": "Restarter", + "theme": "Photos & media", "method": "PartyController::deleteImage", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1161,6 +1283,7 @@ { "story": "As a Restarter, I can RSVP to attend an upcoming event", "persona": "Restarter", + "theme": "Attendance & volunteers", "method": "PartyController::getJoinEvent", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1185,6 +1308,7 @@ { "story": "As a Restarter, I can upload photos from an event", "persona": "Restarter", + "theme": "Photos & media", "method": "PartyController::imageUpload", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1197,6 +1321,7 @@ { "story": "As a Restarter, I can view upcoming events and events near me", "persona": "Restarter", + "theme": "Find & browse events", "method": "PartyController::index", "file": "app/Http/Controllers/PartyController.php", "tests": [ @@ -1221,6 +1346,7 @@ { "story": "As a ThirdParty, I can retrieve event details to display on my platform", "persona": "ThirdParty", + "theme": "Find & browse events", "method": "EventController::getEventv2", "file": "app/Http/Controllers/API/EventController.php", "tests": [ @@ -1245,6 +1371,7 @@ { "story": "As a ThirdParty, I can retrieve volunteer data for an event via the API", "persona": "ThirdParty", + "theme": "Attendance & volunteers", "method": "EventController::listVolunteers", "file": "app/Http/Controllers/API/EventController.php", "tests": [ @@ -1276,6 +1403,7 @@ { "story": "As an Admin, I can delete a group that has no device records", "persona": "Admin", + "theme": "Create & manage groups", "method": "GroupController::delete", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1300,6 +1428,7 @@ { "story": "As an Admin, I can list group audit changes for Zapier integration", "persona": "Admin", + "theme": "Admin & integrations", "method": "GroupController::getGroupChanges", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1316,13 +1445,24 @@ { "story": "As an Admin, I can view all groups pending moderation", "persona": "Admin", + "theme": "Create & manage groups", "method": "GroupController::moderateGroupsv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can list group membership changes for Zapier integration", "persona": "Admin", + "theme": "Admin & integrations", "method": "UserGroupsController::changes", "file": "app/Http/Controllers/API/UserGroupsController.php", "tests": [ @@ -1339,6 +1479,7 @@ { "story": "As a Guest, I can join a group using a shareable invite code", "persona": "Guest", + "theme": "Group invitations", "method": "GroupController::confirmCodeInvite", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1351,41 +1492,108 @@ { "story": "As a Guest, I can list events for a group via the API", "persona": "Guest", + "theme": "Events for group", "method": "GroupController::getEventsForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "PHPUnit" + }, + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "PHPUnit" + }, + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view group details via the API", "persona": "Guest", + "theme": "Find & browse groups", "method": "GroupController::getGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view a group's volunteers via the API", "persona": "Guest", + "theme": "Manage volunteers", "method": "GroupController::getVolunteersForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/CreateEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupHostTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can get a list of group names via the API", "persona": "Guest", + "theme": "Find & browse groups", "method": "GroupController::listNamesv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can get a list of group tags via the API", "persona": "Guest", + "theme": "Find & browse groups", "method": "GroupController::listTagsv2", "file": "app/Http/Controllers/API/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/APIv2GroupTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view a group's repair impact statistics", "persona": "Guest", + "theme": "Stats & data", "method": "GroupController::stats", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1398,6 +1606,7 @@ { "story": "As a Host, I can remove my group's image", "persona": "Host", + "theme": "Photos & branding", "method": "GroupController::ajaxDeleteImage", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1410,6 +1619,7 @@ { "story": "As a Host, I can remove a volunteer from my group", "persona": "Host", + "theme": "Manage volunteers", "method": "GroupController::deleteVolunteerForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1430,6 +1640,7 @@ { "story": "As a Host, I can edit my group's details and settings", "persona": "Host", + "theme": "Create & manage groups", "method": "GroupController::edit", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1454,6 +1665,7 @@ { "story": "As a Host, I can upload an image for my group", "persona": "Host", + "theme": "Photos & branding", "method": "GroupController::imageUpload", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1466,6 +1678,7 @@ { "story": "As a Host, I can change a volunteer's role in my group", "persona": "Host", + "theme": "Manage volunteers", "method": "GroupController::patchVolunteerForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1486,6 +1699,7 @@ { "story": "As a Host, I can send email invitations to join my group", "persona": "Host", + "theme": "Group invitations", "method": "GroupController::postSendInvite", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1502,6 +1716,7 @@ { "story": "As a Host, I can update my group via the API", "persona": "Host", + "theme": "Create & manage groups", "method": "GroupController::updateGroupv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1542,6 +1757,7 @@ { "story": "As a NetworkCoordinator, I can list all groups in my networks via the API", "persona": "NetworkCoordinator", + "theme": "Network membership", "method": "GroupController::getGroupsByUsersNetworks", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1558,6 +1774,7 @@ { "story": "As a NetworkCoordinator, I can view groups pending moderation in my networks", "persona": "NetworkCoordinator", + "theme": "Create & manage groups", "method": "GroupController::moderateGroupsv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1574,6 +1791,7 @@ { "story": "As a Restarter, I can browse all repair groups on the platform", "persona": "Restarter", + "theme": "Find & browse groups", "method": "GroupController::all", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1586,6 +1804,7 @@ { "story": "As a Restarter, I can accept a group invitation", "persona": "Restarter", + "theme": "Group invitations", "method": "GroupController::confirmInvite", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1598,6 +1817,7 @@ { "story": "As a Restarter, I can create a new repair group and become its Host", "persona": "Restarter", + "theme": "Create & manage groups", "method": "GroupController::create", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1622,6 +1842,7 @@ { "story": "As a Restarter, I can create a new group via the API", "persona": "Restarter", + "theme": "Create & manage groups", "method": "GroupController::createGroupv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1682,6 +1903,7 @@ { "story": "As a Restarter, I can list all groups via the API", "persona": "Restarter", + "theme": "Find & browse groups", "method": "GroupController::getGroupList", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1694,6 +1916,7 @@ { "story": "As a Restarter, I can join a repair group", "persona": "Restarter", + "theme": "Manage volunteers", "method": "GroupController::getJoinGroup", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1706,6 +1929,7 @@ { "story": "As a Restarter, I can view the groups I belong to", "persona": "Restarter", + "theme": "Find & browse groups", "method": "GroupController::mine", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1718,6 +1942,7 @@ { "story": "As a Restarter, I can discover repair groups near my location", "persona": "Restarter", + "theme": "Find & browse groups", "method": "GroupController::nearby", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1730,13 +1955,20 @@ { "story": "As a Restarter, I can browse groups within a specific network", "persona": "Restarter", + "theme": "Find & browse groups", "method": "GroupController::network", "file": "app/Http/Controllers/GroupController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can view a group's details, events, and members", "persona": "Restarter", + "theme": "Find & browse groups", "method": "GroupController::view", "file": "app/Http/Controllers/GroupController.php", "tests": [ @@ -1777,6 +2009,7 @@ { "story": "As a Restarter, I can leave a group I belong to", "persona": "Restarter", + "theme": "Manage volunteers", "method": "UserGroupsController::leave", "file": "app/Http/Controllers/API/UserGroupsController.php", "tests": [ @@ -1793,6 +2026,7 @@ { "story": "As a ThirdParty, I can retrieve events for a group to display on my platform", "persona": "ThirdParty", + "theme": "Events for group", "method": "GroupController::getEventsForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1813,6 +2047,7 @@ { "story": "As a ThirdParty, I can retrieve group details to display on my platform", "persona": "ThirdParty", + "theme": "Find & browse groups", "method": "GroupController::getGroupv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1845,6 +2080,7 @@ { "story": "As a ThirdParty, I can retrieve volunteer data for a group via the API", "persona": "ThirdParty", + "theme": "Manage volunteers", "method": "GroupController::getVolunteersForGroupv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1861,6 +2097,7 @@ { "story": "As a ThirdParty, I can retrieve group names to display on my own platform", "persona": "ThirdParty", + "theme": "Find & browse groups", "method": "GroupController::listNamesv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1877,6 +2114,7 @@ { "story": "As a ThirdParty, I can retrieve group tags to categorise groups on my platform", "persona": "ThirdParty", + "theme": "Find & browse groups", "method": "GroupController::listTagsv2", "file": "app/Http/Controllers/API/GroupController.php", "tests": [ @@ -1907,41 +2145,80 @@ { "story": "As an Admin, I can view all networks on the platform", "persona": "Admin", + "theme": "Browse networks", "method": "NetworkController::index", "file": "app/Http/Controllers/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can list events for a network via the API", "persona": "Guest", + "theme": "Network groups & events", "method": "NetworkController::getNetworkEventsv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/APIv2EventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can list groups for a network via the API", "persona": "Guest", + "theme": "Network groups & events", "method": "NetworkController::getNetworkGroupsv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can list all networks via the API", "persona": "Guest", + "theme": "Browse networks", "method": "NetworkController::getNetworksv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view network details via the API", "persona": "Guest", + "theme": "Browse networks", "method": "NetworkController::getNetworkv2", "file": "app/Http/Controllers/API/NetworkController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Networks/APIv2NetworkTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can add groups to my network", "persona": "NetworkCoordinator", + "theme": "Network groups & events", "method": "NetworkController::associateGroup", "file": "app/Http/Controllers/NetworkController.php", "tests": [ @@ -1962,6 +2239,7 @@ { "story": "As a NetworkCoordinator, I can access the form to edit my network", "persona": "NetworkCoordinator", + "theme": "Manage network details", "method": "NetworkController::edit", "file": "app/Http/Controllers/NetworkController.php", "tests": [ @@ -1974,6 +2252,7 @@ { "story": "As a NetworkCoordinator, I can view the networks I coordinate", "persona": "NetworkCoordinator", + "theme": "Browse networks", "method": "NetworkController::index", "file": "app/Http/Controllers/NetworkController.php", "tests": [ @@ -1986,6 +2265,7 @@ { "story": "As a NetworkCoordinator, I can view my network's details and statistics", "persona": "NetworkCoordinator", + "theme": "Browse networks", "method": "NetworkController::show", "file": "app/Http/Controllers/NetworkController.php", "tests": [ @@ -1998,6 +2278,7 @@ { "story": "As a NetworkCoordinator, I can view my network's statistics via the API", "persona": "NetworkCoordinator", + "theme": "Network stats", "method": "NetworkController::stats", "file": "app/Http/Controllers/API/NetworkController.php", "tests": [ @@ -2010,6 +2291,7 @@ { "story": "As a NetworkCoordinator, I can update my network's details and logo", "persona": "NetworkCoordinator", + "theme": "Manage network details", "method": "NetworkController::update", "file": "app/Http/Controllers/NetworkController.php", "tests": [ @@ -2022,6 +2304,7 @@ { "story": "As a ThirdParty, I can retrieve events for a network to display on my platform", "persona": "ThirdParty", + "theme": "Network groups & events", "method": "NetworkController::getNetworkEventsv2", "file": "app/Http/Controllers/API/NetworkController.php", "tests": [ @@ -2038,6 +2321,7 @@ { "story": "As a ThirdParty, I can retrieve groups for a network to display on my platform", "persona": "ThirdParty", + "theme": "Network groups & events", "method": "NetworkController::getNetworkGroupsv2", "file": "app/Http/Controllers/API/NetworkController.php", "tests": [ @@ -2050,6 +2334,7 @@ { "story": "As a ThirdParty, I can retrieve all networks to display on my platform", "persona": "ThirdParty", + "theme": "Browse networks", "method": "NetworkController::getNetworksv2", "file": "app/Http/Controllers/API/NetworkController.php", "tests": [ @@ -2066,6 +2351,7 @@ { "story": "As a ThirdParty, I can retrieve network details via the API", "persona": "ThirdParty", + "theme": "Browse networks", "method": "NetworkController::getNetworkv2", "file": "app/Http/Controllers/API/NetworkController.php", "tests": [ @@ -2100,6 +2386,7 @@ { "story": "As an Admin, I can retrieve a list of all users via the API", "persona": "Admin", + "theme": "Platform impact stats", "method": "ApiController::getUserList", "file": "app/Http/Controllers/ApiController.php", "tests": [ @@ -2112,6 +2399,7 @@ { "story": "As a Guest, I can view the platform's global repair impact statistics", "persona": "Guest", + "theme": "Landing page", "method": "AdminController::stats", "file": "app/Http/Controllers/AdminController.php", "tests": [ @@ -2124,20 +2412,37 @@ { "story": "As a Guest, I can search and filter device records via the API", "persona": "Guest", + "theme": "Data exports", "method": "ApiController::getDevices", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view repair statistics for a specific group", "persona": "Guest", + "theme": "Platform impact stats", "method": "ApiController::groupStats", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Stats/GroupStatsTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view aggregate platform impact statistics", "persona": "Guest", + "theme": "Platform impact stats", "method": "ApiController::homepage_data", "file": "app/Http/Controllers/ApiController.php", "tests": [] @@ -2145,13 +2450,20 @@ { "story": "As a Guest, I can view repair statistics for a specific event", "persona": "Guest", + "theme": "Platform impact stats", "method": "ApiController::partyStats", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can view recent community discussion topics", "persona": "Guest", + "theme": "Discussion integration", "method": "DiscourseController::discussionTopics", "file": "app/Http/Controllers/API/DiscourseController.php", "tests": [ @@ -2164,6 +2476,7 @@ { "story": "As a Guest, I can view the landing page with platform impact statistics", "persona": "Guest", + "theme": "Landing page", "method": "HomeController::index", "file": "app/Http/Controllers/HomeController.php", "tests": [ @@ -2180,6 +2493,7 @@ { "story": "As a Guest, I can dismiss an information alert banner", "persona": "Guest", + "theme": "Cookie alerts", "method": "InformationAlertCookieController::__invoke", "file": "app/Http/Controllers/InformationAlertCookieController.php", "tests": [] @@ -2187,6 +2501,7 @@ { "story": "As a Guest, I can switch the application language", "persona": "Guest", + "theme": "Language preferences", "method": "LocaleController::setLang", "file": "app/Http/Controllers/LocaleController.php", "tests": [ @@ -2203,13 +2518,24 @@ { "story": "As a Guest, I can view embeddable CO2 impact visualisations for events and groups", "persona": "Guest", + "theme": "Embeddable widgets", "method": "OutboundController::info", "file": "app/Http/Controllers/OutboundController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Events/DeleteEventTest.php", + "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a NetworkCoordinator, I can export my network's event summary as CSV", "persona": "NetworkCoordinator", + "theme": "Data exports", "method": "ExportController::networkEvents", "file": "app/Http/Controllers/ExportController.php", "tests": [ @@ -2222,6 +2548,7 @@ { "story": "As a Restarter, I can retrieve my own profile information via the API", "persona": "Restarter", + "theme": "Platform impact stats", "method": "ApiController::getUserInfo", "file": "app/Http/Controllers/ApiController.php", "tests": [ @@ -2234,6 +2561,7 @@ { "story": "As a Restarter, I can export all device records as CSV", "persona": "Restarter", + "theme": "Data exports", "method": "ExportController::devices", "file": "app/Http/Controllers/ExportController.php", "tests": [ @@ -2250,6 +2578,7 @@ { "story": "As a Restarter, I can export device data from an event as CSV", "persona": "Restarter", + "theme": "Data exports", "method": "ExportController::devicesEvent", "file": "app/Http/Controllers/ExportController.php", "tests": [ @@ -2266,6 +2595,7 @@ { "story": "As a Restarter, I can export device data from a group as CSV", "persona": "Restarter", + "theme": "Data exports", "method": "ExportController::devicesGroup", "file": "app/Http/Controllers/ExportController.php", "tests": [ @@ -2282,6 +2612,7 @@ { "story": "As a Restarter, I can export a group's event summary as CSV", "persona": "Restarter", + "theme": "Data exports", "method": "ExportController::groupEvents", "file": "app/Http/Controllers/ExportController.php", "tests": [ @@ -2294,13 +2625,20 @@ { "story": "As a ThirdParty, I can search and retrieve device records via the API", "persona": "ThirdParty", + "theme": "Data exports", "method": "ApiController::getDevices", "file": "app/Http/Controllers/ApiController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a ThirdParty, I can retrieve group repair statistics for embedding", "persona": "ThirdParty", + "theme": "Platform impact stats", "method": "ApiController::groupStats", "file": "app/Http/Controllers/ApiController.php", "tests": [ @@ -2317,6 +2655,7 @@ { "story": "As a ThirdParty, I can retrieve aggregate platform impact data for embedding", "persona": "ThirdParty", + "theme": "Platform impact stats", "method": "ApiController::homepage_data", "file": "app/Http/Controllers/ApiController.php", "tests": [] @@ -2324,6 +2663,7 @@ { "story": "As a ThirdParty, I can retrieve event repair statistics for embedding", "persona": "ThirdParty", + "theme": "Platform impact stats", "method": "ApiController::partyStats", "file": "app/Http/Controllers/ApiController.php", "tests": [ @@ -2336,12 +2676,17 @@ { "story": "As a ThirdParty, I can embed CO2 impact widgets for events and groups on my platform", "persona": "ThirdParty", + "theme": "Embeddable widgets", "method": "OutboundController::info", "file": "app/Http/Controllers/OutboundController.php", "tests": [ { "file": "tests/Feature/Events/DeleteEventTest.php", "test": "(unknown test)" + }, + { + "file": "tests/Feature/Groups/GroupViewTest.php", + "test": "(unknown test)" } ] } @@ -2366,6 +2711,7 @@ { "story": "As an Admin, I can view and search all users on the platform", "persona": "Admin", + "theme": "Admin user management", "method": "UserController::all", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2390,6 +2736,7 @@ { "story": "As an Admin, I can list user audit changes for Zapier integration", "persona": "Admin", + "theme": "Data exports", "method": "UserController::changes", "file": "app/Http/Controllers/API/UserController.php", "tests": [ @@ -2406,13 +2753,20 @@ { "story": "As an Admin, I can create a new user account", "persona": "Admin", + "theme": "Admin user management", "method": "UserController::create", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/Registration/AccountCreationTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can edit any user's account details", "persona": "Admin", + "theme": "Admin user management", "method": "UserController::edit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2433,6 +2787,7 @@ { "story": "As an Admin, I can edit a user's role, groups, and permissions", "persona": "Admin", + "theme": "Admin user management", "method": "UserController::postAdminEdit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2449,6 +2804,7 @@ { "story": "As an Admin, I can change a user's Repair Directory role", "persona": "Admin", + "theme": "Admin user management", "method": "UserController::postProfileRepairDirectory", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2461,13 +2817,20 @@ { "story": "As an Admin, I can delete a user's account", "persona": "Admin", + "theme": "Admin user management", "method": "UserController::postSoftDeleteUser", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/UserAdminTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As an Admin, I can filter and search the user list", "persona": "Admin", + "theme": "Admin user management", "method": "UserController::search", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2484,6 +2847,7 @@ { "story": "As a Guest, I can log in to the platform", "persona": "Guest", + "theme": "Authentication", "method": "LoginController::login", "file": "app/Http/Controllers/Auth/LoginController.php", "tests": [ @@ -2512,6 +2876,7 @@ { "story": "As a Guest, I can view the login page", "persona": "Guest", + "theme": "Authentication", "method": "LoginController::showLoginForm", "file": "app/Http/Controllers/Auth/LoginController.php", "tests": [ @@ -2524,20 +2889,33 @@ { "story": "As a Guest, I can view the registration page", "persona": "Guest", + "theme": "Registration & onboarding", "method": "UserController::getRegister", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/Registration/AccountCreationTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can register a new account", "persona": "Guest", + "theme": "Registration & onboarding", "method": "UserController::postRegister", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/Registration/AccountCreationTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Guest, I can request a password recovery email", "persona": "Guest", + "theme": "Authentication", "method": "UserController::recover", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2562,6 +2940,7 @@ { "story": "As a Guest, I can reset my password using a recovery code", "persona": "Guest", + "theme": "Authentication", "method": "UserController::reset", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2578,6 +2957,7 @@ { "story": "As a Restarter, I can view my notifications", "persona": "Restarter", + "theme": "Notifications", "method": "UserController::getNotifications", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2590,13 +2970,20 @@ { "story": "As a Restarter, I can complete my onboarding process", "persona": "Restarter", + "theme": "Registration & onboarding", "method": "UserController::getOnboardingComplete", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/Registration/AccountCreationTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can access the form to edit my profile", "persona": "Restarter", + "theme": "Profile management", "method": "UserController::getProfileEdit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2609,6 +2996,7 @@ { "story": "As a Restarter, I can view my profile or another user's profile", "persona": "Restarter", + "theme": "Profile management", "method": "UserController::index", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2621,13 +3009,20 @@ { "story": "As a Restarter, I can log out of my account", "persona": "Restarter", + "theme": "Authentication", "method": "UserController::logout", "file": "app/Http/Controllers/UserController.php", - "tests": [] + "tests": [ + { + "file": "tests/Feature/Users/Registration/AccountCreationTest.php", + "test": "(unknown test)" + } + ] }, { "story": "As a Restarter, I can update my profile information", "persona": "Restarter", + "theme": "Profile management", "method": "UserController::postProfileInfoEdit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2644,6 +3039,7 @@ { "story": "As a Restarter, I can change my password", "persona": "Restarter", + "theme": "Profile management", "method": "UserController::postProfilePasswordEdit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2660,6 +3056,7 @@ { "story": "As a Restarter, I can upload a new profile picture", "persona": "Restarter", + "theme": "Profile management", "method": "UserController::postProfilePictureEdit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2672,6 +3069,7 @@ { "story": "As a Restarter, I can update my notification preferences", "persona": "Restarter", + "theme": "Profile management", "method": "UserController::postProfilePreferencesEdit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2684,6 +3082,7 @@ { "story": "As a Restarter, I can update my repair skills", "persona": "Restarter", + "theme": "Profile management", "method": "UserController::postProfileTagsEdit", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2696,6 +3095,7 @@ { "story": "As a Restarter, I can delete my own account", "persona": "Restarter", + "theme": "Account management", "method": "UserController::postSoftDeleteUser", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2708,6 +3108,7 @@ { "story": "As a Restarter, I can change my preferred language", "persona": "Restarter", + "theme": "Language preferences", "method": "UserController::storeLanguage", "file": "app/Http/Controllers/UserController.php", "tests": [ @@ -2792,6 +3193,6 @@ }, "coverage": { "annotatedStories": 168, - "storiesWithTests": 135 + "storiesWithTests": 164 } } diff --git a/specs-site/generate-pages.mjs b/specs-site/generate-pages.mjs index fdc64ba5cd..f4cc88e4d3 100644 --- a/specs-site/generate-pages.mjs +++ b/specs-site/generate-pages.mjs @@ -88,23 +88,30 @@ function generateFeaturePages(manifest) { content += `## Overview\n\n${narrative}\n\n` } - // Group stories by persona - const byPersona = {} + // Group stories by theme, then by persona within each theme + const byTheme = {} for (const story of f.stories) { - if (!byPersona[story.persona]) { - byPersona[story.persona] = [] - } - byPersona[story.persona].push(story) + const theme = story.theme || 'General' + if (!byTheme[theme]) byTheme[theme] = [] + byTheme[theme].push(story) } - for (const persona of Object.keys(byPersona).sort()) { - const stories = byPersona[persona] - content += `## ${persona}\n\n` - content += `| Story | Method | Tests |\n|-------|--------|-------|\n` + const themeNames = Object.keys(byTheme).sort((a, b) => { + if (a === 'General') return 1 + if (b === 'General') return -1 + return a.localeCompare(b) + }) + + for (const theme of themeNames) { + const stories = byTheme[theme] + content += `## ${theme}\n\n` + content += `| Persona | Story | Method | Tests |\n|---------|-------|--------|-------|\n` + + stories.sort((a, b) => a.persona.localeCompare(b.persona) || a.method.localeCompare(b.method)) for (const story of stories) { const methodLink = `[\`${story.method}\`](${GITHUB_BASE}/${story.file})` - content += `| ${story.story} | ${methodLink} | ${coverageIndicator(story.tests)} |\n` + content += `| **${story.persona}** | ${story.story} | ${methodLink} | ${coverageIndicator(story.tests)} |\n` } content += `\n` @@ -168,14 +175,29 @@ function generatePersonaPages(manifest) { const featureSlug = featureName.toLowerCase().replace(/\s+/g, '-') content += `## [${featureName}](/features/${featureSlug})\n\n` - content += `| Story | Method | Tests |\n|-------|--------|-------|\n` + const byTheme = {} for (const story of personaStories) { - const methodLink = `[\`${story.method}\`](${GITHUB_BASE}/${story.file})` - content += `| ${story.story} | ${methodLink} | ${coverageIndicator(story.tests)} |\n` + const theme = story.theme || 'General' + if (!byTheme[theme]) byTheme[theme] = [] + byTheme[theme].push(story) } - content += `\n` + const themeNames = Object.keys(byTheme).sort((a, b) => { + if (a === 'General') return 1 + if (b === 'General') return -1 + return a.localeCompare(b) + }) + + for (const theme of themeNames) { + content += `### ${theme}\n\n` + content += `| Story | Method | Tests |\n|-------|--------|-------|\n` + for (const story of byTheme[theme]) { + const methodLink = `[\`${story.method}\`](${GITHUB_BASE}/${story.file})` + content += `| ${story.story} | ${methodLink} | ${coverageIndicator(story.tests)} |\n` + } + content += `\n` + } } fs.writeFileSync(path.join(personasDir, `${slug}.md`), content) diff --git a/tests/Feature/Groups/GroupViewTest.php b/tests/Feature/Groups/GroupViewTest.php index 421c227205..c5f3e4e696 100644 --- a/tests/Feature/Groups/GroupViewTest.php +++ b/tests/Feature/Groups/GroupViewTest.php @@ -70,7 +70,11 @@ public function testInvalidGroup2() $this->get('/group/view/1'); } - /** @story:GroupController::view */ + /** + * @story:GroupController::view + * @story:ApiController::getDevices + * @story:OutboundController::info + */ public function testCanDelete() { $this->loginAsTestUser(Role::ADMINISTRATOR); diff --git a/tests/Feature/Networks/NetworkTest.php b/tests/Feature/Networks/NetworkTest.php index 1f101c082f..5fe05c5edf 100644 --- a/tests/Feature/Networks/NetworkTest.php +++ b/tests/Feature/Networks/NetworkTest.php @@ -247,6 +247,7 @@ public function network_stats_can_be_queried() * @story:NetworkController::index * @story:NetworkController::show * @story:NetworkController::associateGroup + * @story:GroupController::network */ public function network_page() { diff --git a/tests/Feature/Users/Registration/AccountCreationTest.php b/tests/Feature/Users/Registration/AccountCreationTest.php index 1d3ae2e2b6..e56f9d8313 100644 --- a/tests/Feature/Users/Registration/AccountCreationTest.php +++ b/tests/Feature/Users/Registration/AccountCreationTest.php @@ -13,6 +13,11 @@ class AccountCreationTest extends TestCase { + /** + * @story:UserController::getRegister + * @story:UserController::postRegister + * @story:UserController::getOnboardingComplete + */ public function testRegister() { $response = $this->get('/user/register'); @@ -92,6 +97,7 @@ public function testRegisterAgain() $this->assertEquals(1950, \Auth::user()->age); } + /** @story:UserController::logout */ public function testLogout() { $response = $this->post('/user/register/', $this->userAttributes()); @@ -148,6 +154,7 @@ public function testValidEmail() $this->assertNull(json_decode($response->getContent(), true)); } + /** @story:UserController::create */ public function testAdminCreate() { $this->loginAsTestUser(Role::ADMINISTRATOR);

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�!{MX5kZ`JM!V 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