From 28a9d9c1d5d8a362a29ccff3142af99899873825 Mon Sep 17 00:00:00 2001 From: saitama1429 <204038567+saitama1429@users.noreply.github.com> Date: Thu, 13 Aug 2026 13:46:14 +0700 Subject: [PATCH] Fix ini wes fix --- web_JMW/.editorconfig | 18 + web_JMW/.env.example | 68 + web_JMW/.gitattributes | 11 + web_JMW/.gitignore | 19 + web_JMW/.htaccess | 46 + web_JMW/ADMIN_WHATSAPP_SETUP.md | 198 + web_JMW/INTEGRATION_GUIDE.md | 217 + web_JMW/README.md | 66 + web_JMW/WHATSAPP_API_DOCUMENTATION.md | 258 + web_JMW/app/Console/Kernel.php | 30 + web_JMW/app/Exceptions/Handler.php | 37 + .../app/Http/Controllers/AuthController.php | 196 + .../Http/Controllers/CategoryController.php | 259 + .../app/Http/Controllers/ChatController.php | 312 + web_JMW/app/Http/Controllers/Controller.php | 12 + .../Controllers/TransactionController.php | 316 + web_JMW/app/Http/Kernel.php | 68 + web_JMW/app/Http/Middleware/Authenticate.php | 17 + .../app/Http/Middleware/EncryptCookies.php | 17 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 30 + web_JMW/app/Http/Middleware/TrimStrings.php | 19 + web_JMW/app/Http/Middleware/TrustHosts.php | 20 + web_JMW/app/Http/Middleware/TrustProxies.php | 28 + .../app/Http/Middleware/ValidateSignature.php | 22 + .../app/Http/Middleware/VerifyCsrfToken.php | 17 + web_JMW/app/Models/Admin.php | 27 + web_JMW/app/Models/Category.php | 120 + web_JMW/app/Models/Favorite.php | 32 + web_JMW/app/Models/Transaction.php | 55 + web_JMW/app/Models/User.php | 73 + .../Notifications/LoginOtpNotification.php | 41 + .../Notifications/VerifyEmailNotification.php | 68 + web_JMW/app/Providers/AppServiceProvider.php | 31 + web_JMW/app/Providers/AuthServiceProvider.php | 26 + .../Providers/BroadcastServiceProvider.php | 19 + .../app/Providers/EventServiceProvider.php | 38 + .../app/Providers/RouteServiceProvider.php | 40 + .../app/Services/CarRecommendationService.php | 161 + .../app/Services/WhatsAppBusinessService.php | 285 + web_JMW/artisan | 53 + web_JMW/bootstrap/app.php | 55 + web_JMW/bootstrap/cache/.gitignore | 2 + web_JMW/build-assets.js | 48 + web_JMW/composer.json | 66 + web_JMW/composer.lock | 8212 +++++++++++++++++ web_JMW/config/app.php | 188 + web_JMW/config/auth.php | 125 + web_JMW/config/broadcasting.php | 71 + web_JMW/config/cache.php | 111 + web_JMW/config/cors.php | 34 + web_JMW/config/database.php | 151 + web_JMW/config/filesystems.php | 76 + web_JMW/config/hashing.php | 54 + web_JMW/config/logging.php | 131 + web_JMW/config/mail.php | 134 + web_JMW/config/queue.php | 109 + web_JMW/config/sanctum.php | 83 + web_JMW/config/services.php | 48 + web_JMW/config/session.php | 214 + web_JMW/config/view.php | 36 + web_JMW/database/.gitignore | 1 + web_JMW/database/dataset_final.xls | 406 + web_JMW/database/factories/UserFactory.php | 44 + .../2014_10_12_000000_create_users_table.php | 32 + ...000_create_password_reset_tokens_table.php | 28 + ..._08_19_000000_create_failed_jobs_table.php | 32 + ...01_create_personal_access_tokens_table.php | 33 + ...6_04_12_000000_create_categories_table.php | 23 + ...2_010000_add_price_to_categories_table.php | 22 + ...2_020000_add_image_to_categories_table.php | 22 + ...18_000001_add_year_to_categories_table.php | 22 + ...26_04_18_164603_create_favorites_table.php | 35 + ...350_alter_favorites_username_collation.php | 24 + ..._000000_add_phone_number_to_user_table.php | 28 + ...dd_seller_username_to_categories_table.php | 30 + ...0_add_email_verification_to_user_table.php | 32 + ...05_18_000000_create_transactions_table.php | 33 + ..._20_000000_add_login_otp_to_user_table.php | 40 + ...dd_payment_proof_to_transactions_table.php | 22 + ..._000000_add_status_to_categories_table.php | 22 + ...6_05_30_000000_drop_unused_users_table.php | 26 + .../2026_05_30_010000_drop_unused_columns.php | 40 + ...add_dataset_fields_to_categories_table.php | 45 + ..._add_missing_relationship_foreign_keys.php | 31 + ..._fields_to_categories_and_transactions.php | 35 + ...tracking_columns_from_categories_table.php | 31 + ...eservation_owner_to_transactions_table.php | 72 + ...000_drop_cluster_from_categories_table.php | 30 + ...tegory_status_required_without_default.php | 31 + web_JMW/database/seeders/CategorySeeder.php | 92 + web_JMW/database/seeders/DatabaseSeeder.php | 40 + .../database/sql/add_reservation_columns.sql | 88 + web_JMW/database/sql/tamyhost_E31231762.sql | 208 + ...Rinci_KMeans_Rekomendasi_JMW_Gabungan.docx | Bin 0 -> 45075 bytes ...Means_Rekomendasi_JMW_Gabungan_Update.docx | Bin 0 -> 46823 bytes ...omendasi_JMW_Gabungan_Update_Centroid.docx | Bin 0 -> 48198 bytes .../build_kmeans_detailed_doc.cpython-310.pyc | Bin 0 -> 24006 bytes web_JMW/docs/append_code_usage_explanation.py | 305 + .../append_initial_centroid_calculation.py | 183 + .../append_k_determination_explanation.py | 206 + web_JMW/docs/build_kmeans_detailed_doc.py | 598 ++ web_JMW/docs/flowchart-sistem-user.jpg | Bin 0 -> 331484 bytes web_JMW/docs/flowchart-sistem-utama.jpg | Bin 0 -> 240480 bytes web_JMW/docs/flowchart-user-drawio.jpg | Bin 0 -> 140075 bytes web_JMW/docs/flowchart-user-sederhana.jpg | Bin 0 -> 151565 bytes web_JMW/docs/merge_kmeans_docs.py | 86 + ...enjelasan-contoh-input-cluster-centroid.md | 195 + ...njelasan-contoh-input-cluster-centroid.rtf | 106 + .../penjelasan-kmeans-rekomendasi-budget.docx | Bin 0 -> 20446 bytes ...gkap-kmeans-rekomendasi-budget-update.docx | Bin 0 -> 8371 bytes ...san-lengkap-kmeans-rekomendasi-budget.docx | Bin 0 -> 7326 bytes web_JMW/docs/render-flowchart-jpg.ps1 | 136 + .../docs/render-flowchart-user-drawio-jpg.ps1 | 138 + web_JMW/docs/render-flowchart-user-jpg.ps1 | 159 + .../render-flowchart-user-sederhana-jpg.ps1 | 99 + web_JMW/flask_api/README.md | 85 + .../flask_api/__pycache__/app.cpython-310.pyc | Bin 0 -> 18472 bytes web_JMW/flask_api/app.py | 629 ++ web_JMW/flask_api/requirements.txt | 2 + web_JMW/index.php | 53 + web_JMW/package-lock.json | 2041 ++++ web_JMW/package.json | 13 + web_JMW/phpunit.xml | 32 + web_JMW/public/.htaccess | 21 + web_JMW/public/favicon.ico | 0 web_JMW/public/images/default-car.svg | 18 + web_JMW/public/index.php | 55 + web_JMW/public/robots.txt | 2 + web_JMW/resources/css/app.css | 0 web_JMW/resources/js/app.js | 1 + web_JMW/resources/js/bootstrap.js | 32 + .../resources/views/admin/dashboard.blade.php | 533 ++ .../views/admin/dashboard_old.blade.php | 394 + web_JMW/resources/views/admin/input.blade.php | 259 + .../views/admin/kategori-edit.blade.php | 123 + .../resources/views/admin/kategori.blade.php | 232 + .../resources/views/admin/laporan.blade.php | 545 ++ .../resources/views/admin/layout.blade.php | 276 + .../resources/views/admin/riwayat.blade.php | 113 + .../resources/views/admin/sidebar.blade.php | 113 + .../resources/views/forgot-password.blade.php | 180 + web_JMW/resources/views/grep.exe.stackdump | 15 + web_JMW/resources/views/login.blade.php | 281 + web_JMW/resources/views/otp.blade.php | 183 + web_JMW/resources/views/register.blade.php | 178 + .../resources/views/reset-password.blade.php | 217 + .../resources/views/user/all-cars.blade.php | 544 ++ .../views/user/budget-cars.blade.php | 464 + .../resources/views/user/car-detail.blade.php | 685 ++ web_JMW/resources/views/user/cars.blade.php | 801 ++ .../resources/views/user/payment.blade.php | 78 + .../resources/views/user/profile.blade.php | 280 + web_JMW/resources/views/welcome.blade.php | 380 + web_JMW/routes/api.php | 32 + web_JMW/routes/channels.php | 18 + web_JMW/routes/console.php | 19 + web_JMW/routes/web.php | 161 + web_JMW/storage/app/.gitignore | 3 + web_JMW/storage/app/public/.gitignore | 2 + web_JMW/storage/framework/.gitignore | 9 + web_JMW/storage/framework/cache/.gitignore | 3 + .../storage/framework/cache/data/.gitignore | 2 + web_JMW/storage/framework/sessions/.gitignore | 2 + web_JMW/storage/framework/testing/.gitignore | 2 + web_JMW/storage/framework/views/.gitignore | 2 + web_JMW/storage/logs/.gitignore | 2 + web_JMW/ta_jmw | 0 web_JMW/tests/CreatesApplication.php | 21 + web_JMW/tests/Feature/ExampleTest.php | 19 + web_JMW/tests/TestCase.php | 10 + web_JMW/tests/Unit/ExampleTest.php | 16 + web_JMW/vite.config.js | 11 + 173 files changed, 27438 insertions(+) create mode 100644 web_JMW/.editorconfig create mode 100644 web_JMW/.env.example create mode 100644 web_JMW/.gitattributes create mode 100644 web_JMW/.gitignore create mode 100644 web_JMW/.htaccess create mode 100644 web_JMW/ADMIN_WHATSAPP_SETUP.md create mode 100644 web_JMW/INTEGRATION_GUIDE.md create mode 100644 web_JMW/README.md create mode 100644 web_JMW/WHATSAPP_API_DOCUMENTATION.md create mode 100644 web_JMW/app/Console/Kernel.php create mode 100644 web_JMW/app/Exceptions/Handler.php create mode 100644 web_JMW/app/Http/Controllers/AuthController.php create mode 100644 web_JMW/app/Http/Controllers/CategoryController.php create mode 100644 web_JMW/app/Http/Controllers/ChatController.php create mode 100644 web_JMW/app/Http/Controllers/Controller.php create mode 100644 web_JMW/app/Http/Controllers/TransactionController.php create mode 100644 web_JMW/app/Http/Kernel.php create mode 100644 web_JMW/app/Http/Middleware/Authenticate.php create mode 100644 web_JMW/app/Http/Middleware/EncryptCookies.php create mode 100644 web_JMW/app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 web_JMW/app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 web_JMW/app/Http/Middleware/TrimStrings.php create mode 100644 web_JMW/app/Http/Middleware/TrustHosts.php create mode 100644 web_JMW/app/Http/Middleware/TrustProxies.php create mode 100644 web_JMW/app/Http/Middleware/ValidateSignature.php create mode 100644 web_JMW/app/Http/Middleware/VerifyCsrfToken.php create mode 100644 web_JMW/app/Models/Admin.php create mode 100644 web_JMW/app/Models/Category.php create mode 100644 web_JMW/app/Models/Favorite.php create mode 100644 web_JMW/app/Models/Transaction.php create mode 100644 web_JMW/app/Models/User.php create mode 100644 web_JMW/app/Notifications/LoginOtpNotification.php create mode 100644 web_JMW/app/Notifications/VerifyEmailNotification.php create mode 100644 web_JMW/app/Providers/AppServiceProvider.php create mode 100644 web_JMW/app/Providers/AuthServiceProvider.php create mode 100644 web_JMW/app/Providers/BroadcastServiceProvider.php create mode 100644 web_JMW/app/Providers/EventServiceProvider.php create mode 100644 web_JMW/app/Providers/RouteServiceProvider.php create mode 100644 web_JMW/app/Services/CarRecommendationService.php create mode 100644 web_JMW/app/Services/WhatsAppBusinessService.php create mode 100644 web_JMW/artisan create mode 100644 web_JMW/bootstrap/app.php create mode 100644 web_JMW/bootstrap/cache/.gitignore create mode 100644 web_JMW/build-assets.js create mode 100644 web_JMW/composer.json create mode 100644 web_JMW/composer.lock create mode 100644 web_JMW/config/app.php create mode 100644 web_JMW/config/auth.php create mode 100644 web_JMW/config/broadcasting.php create mode 100644 web_JMW/config/cache.php create mode 100644 web_JMW/config/cors.php create mode 100644 web_JMW/config/database.php create mode 100644 web_JMW/config/filesystems.php create mode 100644 web_JMW/config/hashing.php create mode 100644 web_JMW/config/logging.php create mode 100644 web_JMW/config/mail.php create mode 100644 web_JMW/config/queue.php create mode 100644 web_JMW/config/sanctum.php create mode 100644 web_JMW/config/services.php create mode 100644 web_JMW/config/session.php create mode 100644 web_JMW/config/view.php create mode 100644 web_JMW/database/.gitignore create mode 100644 web_JMW/database/dataset_final.xls create mode 100644 web_JMW/database/factories/UserFactory.php create mode 100644 web_JMW/database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 web_JMW/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php create mode 100644 web_JMW/database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 web_JMW/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100644 web_JMW/database/migrations/2026_04_12_000000_create_categories_table.php create mode 100644 web_JMW/database/migrations/2026_04_12_010000_add_price_to_categories_table.php create mode 100644 web_JMW/database/migrations/2026_04_12_020000_add_image_to_categories_table.php create mode 100644 web_JMW/database/migrations/2026_04_18_000001_add_year_to_categories_table.php create mode 100644 web_JMW/database/migrations/2026_04_18_164603_create_favorites_table.php create mode 100644 web_JMW/database/migrations/2026_04_18_173350_alter_favorites_username_collation.php create mode 100644 web_JMW/database/migrations/2026_04_22_000000_add_phone_number_to_user_table.php create mode 100644 web_JMW/database/migrations/2026_04_22_000001_add_seller_username_to_categories_table.php create mode 100644 web_JMW/database/migrations/2026_05_11_000000_add_email_verification_to_user_table.php create mode 100644 web_JMW/database/migrations/2026_05_18_000000_create_transactions_table.php create mode 100644 web_JMW/database/migrations/2026_05_20_000000_add_login_otp_to_user_table.php create mode 100644 web_JMW/database/migrations/2026_05_24_000000_add_payment_proof_to_transactions_table.php create mode 100644 web_JMW/database/migrations/2026_05_25_000000_add_status_to_categories_table.php create mode 100644 web_JMW/database/migrations/2026_05_30_000000_drop_unused_users_table.php create mode 100644 web_JMW/database/migrations/2026_05_30_010000_drop_unused_columns.php create mode 100644 web_JMW/database/migrations/2026_06_05_000000_add_dataset_fields_to_categories_table.php create mode 100644 web_JMW/database/migrations/2026_06_07_000000_add_missing_relationship_foreign_keys.php create mode 100644 web_JMW/database/migrations/2026_06_17_000000_add_reservation_fields_to_categories_and_transactions.php create mode 100644 web_JMW/database/migrations/2026_07_01_000000_drop_dataset_tracking_columns_from_categories_table.php create mode 100644 web_JMW/database/migrations/2026_07_01_000001_move_reservation_owner_to_transactions_table.php create mode 100644 web_JMW/database/migrations/2026_07_02_000000_drop_cluster_from_categories_table.php create mode 100644 web_JMW/database/migrations/2026_07_02_000001_make_category_status_required_without_default.php create mode 100644 web_JMW/database/seeders/CategorySeeder.php create mode 100644 web_JMW/database/seeders/DatabaseSeeder.php create mode 100644 web_JMW/database/sql/add_reservation_columns.sql create mode 100644 web_JMW/database/sql/tamyhost_E31231762.sql create mode 100644 web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan.docx create mode 100644 web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update.docx create mode 100644 web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update_Centroid.docx create mode 100644 web_JMW/docs/__pycache__/build_kmeans_detailed_doc.cpython-310.pyc create mode 100644 web_JMW/docs/append_code_usage_explanation.py create mode 100644 web_JMW/docs/append_initial_centroid_calculation.py create mode 100644 web_JMW/docs/append_k_determination_explanation.py create mode 100644 web_JMW/docs/build_kmeans_detailed_doc.py create mode 100644 web_JMW/docs/flowchart-sistem-user.jpg create mode 100644 web_JMW/docs/flowchart-sistem-utama.jpg create mode 100644 web_JMW/docs/flowchart-user-drawio.jpg create mode 100644 web_JMW/docs/flowchart-user-sederhana.jpg create mode 100644 web_JMW/docs/merge_kmeans_docs.py create mode 100644 web_JMW/docs/penjelasan-contoh-input-cluster-centroid.md create mode 100644 web_JMW/docs/penjelasan-contoh-input-cluster-centroid.rtf create mode 100644 web_JMW/docs/penjelasan-kmeans-rekomendasi-budget.docx create mode 100644 web_JMW/docs/penjelasan-lengkap-kmeans-rekomendasi-budget-update.docx create mode 100644 web_JMW/docs/penjelasan-lengkap-kmeans-rekomendasi-budget.docx create mode 100644 web_JMW/docs/render-flowchart-jpg.ps1 create mode 100644 web_JMW/docs/render-flowchart-user-drawio-jpg.ps1 create mode 100644 web_JMW/docs/render-flowchart-user-jpg.ps1 create mode 100644 web_JMW/docs/render-flowchart-user-sederhana-jpg.ps1 create mode 100644 web_JMW/flask_api/README.md create mode 100644 web_JMW/flask_api/__pycache__/app.cpython-310.pyc create mode 100644 web_JMW/flask_api/app.py create mode 100644 web_JMW/flask_api/requirements.txt create mode 100644 web_JMW/index.php create mode 100644 web_JMW/package-lock.json create mode 100644 web_JMW/package.json create mode 100644 web_JMW/phpunit.xml create mode 100644 web_JMW/public/.htaccess create mode 100644 web_JMW/public/favicon.ico create mode 100644 web_JMW/public/images/default-car.svg create mode 100644 web_JMW/public/index.php create mode 100644 web_JMW/public/robots.txt create mode 100644 web_JMW/resources/css/app.css create mode 100644 web_JMW/resources/js/app.js create mode 100644 web_JMW/resources/js/bootstrap.js create mode 100644 web_JMW/resources/views/admin/dashboard.blade.php create mode 100644 web_JMW/resources/views/admin/dashboard_old.blade.php create mode 100644 web_JMW/resources/views/admin/input.blade.php create mode 100644 web_JMW/resources/views/admin/kategori-edit.blade.php create mode 100644 web_JMW/resources/views/admin/kategori.blade.php create mode 100644 web_JMW/resources/views/admin/laporan.blade.php create mode 100644 web_JMW/resources/views/admin/layout.blade.php create mode 100644 web_JMW/resources/views/admin/riwayat.blade.php create mode 100644 web_JMW/resources/views/admin/sidebar.blade.php create mode 100644 web_JMW/resources/views/forgot-password.blade.php create mode 100644 web_JMW/resources/views/grep.exe.stackdump create mode 100644 web_JMW/resources/views/login.blade.php create mode 100644 web_JMW/resources/views/otp.blade.php create mode 100644 web_JMW/resources/views/register.blade.php create mode 100644 web_JMW/resources/views/reset-password.blade.php create mode 100644 web_JMW/resources/views/user/all-cars.blade.php create mode 100644 web_JMW/resources/views/user/budget-cars.blade.php create mode 100644 web_JMW/resources/views/user/car-detail.blade.php create mode 100644 web_JMW/resources/views/user/cars.blade.php create mode 100644 web_JMW/resources/views/user/payment.blade.php create mode 100644 web_JMW/resources/views/user/profile.blade.php create mode 100644 web_JMW/resources/views/welcome.blade.php create mode 100644 web_JMW/routes/api.php create mode 100644 web_JMW/routes/channels.php create mode 100644 web_JMW/routes/console.php create mode 100644 web_JMW/routes/web.php create mode 100644 web_JMW/storage/app/.gitignore create mode 100644 web_JMW/storage/app/public/.gitignore create mode 100644 web_JMW/storage/framework/.gitignore create mode 100644 web_JMW/storage/framework/cache/.gitignore create mode 100644 web_JMW/storage/framework/cache/data/.gitignore create mode 100644 web_JMW/storage/framework/sessions/.gitignore create mode 100644 web_JMW/storage/framework/testing/.gitignore create mode 100644 web_JMW/storage/framework/views/.gitignore create mode 100644 web_JMW/storage/logs/.gitignore create mode 100644 web_JMW/ta_jmw create mode 100644 web_JMW/tests/CreatesApplication.php create mode 100644 web_JMW/tests/Feature/ExampleTest.php create mode 100644 web_JMW/tests/TestCase.php create mode 100644 web_JMW/tests/Unit/ExampleTest.php create mode 100644 web_JMW/vite.config.js diff --git a/web_JMW/.editorconfig b/web_JMW/.editorconfig new file mode 100644 index 0000000..8f0de65 --- /dev/null +++ b/web_JMW/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/web_JMW/.env.example b/web_JMW/.env.example new file mode 100644 index 0000000..28e636b --- /dev/null +++ b/web_JMW/.env.example @@ -0,0 +1,68 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailpit +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_HOST= +PUSHER_PORT=443 +PUSHER_SCHEME=https +PUSHER_APP_CLUSTER=mt1 + +VITE_APP_NAME="${APP_NAME}" + +CAR_RECOMMENDATION_API_URL=http://127.0.0.1:5000 +CAR_RECOMMENDATION_API_TIMEOUT=3 +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_HOST="${PUSHER_HOST}" +VITE_PUSHER_PORT="${PUSHER_PORT}" +VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +WHATSAPP_API_BASE_URL=https://graph.facebook.com +WHATSAPP_API_VERSION=v23.0 +WHATSAPP_ACCESS_TOKEN= +WHATSAPP_PHONE_NUMBER_ID= +WHATSAPP_ADMIN_RECIPIENT= diff --git a/web_JMW/.gitattributes b/web_JMW/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/web_JMW/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/web_JMW/.gitignore b/web_JMW/.gitignore new file mode 100644 index 0000000..7fe978f --- /dev/null +++ b/web_JMW/.gitignore @@ -0,0 +1,19 @@ +/.phpunit.cache +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +.phpunit.result.cache +Homestead.json +Homestead.yaml +auth.json +npm-debug.log +yarn-error.log +/.fleet +/.idea +/.vscode diff --git a/web_JMW/.htaccess b/web_JMW/.htaccess new file mode 100644 index 0000000..cc90180 --- /dev/null +++ b/web_JMW/.htaccess @@ -0,0 +1,46 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Deny direct access to Blade templates and sensitive files/folders + RewriteRule (^|/).*\.blade\.php$ - [F,L] + RewriteRule (^|/)\.env($|/) - [F,L] + RewriteRule (^|/)\.git - [F,L] + RewriteRule (^|/)composer\.(json|lock)$ - [F,L] + RewriteRule ^package(-lock)?\.json$ - [F,L] + RewriteRule ^vite\.config\.js$ - [F,L] + RewriteRule ^phpunit\.xml$ - [F,L] + RewriteRule ^artisan$ - [F,L] + RewriteRule ^tests/ - [F,L] + RewriteRule ^node_modules/ - [F,L] + RewriteRule ^database/ - [F,L] + RewriteRule ^storage/(app|framework|logs)/ - [F,L] + RewriteRule ^resources/ - [F,L] + RewriteRule ^app/ - [F,L] + RewriteRule ^bootstrap/ - [F,L] + RewriteRule ^vendor/ - [F,L] + RewriteRule ^public/ - [F,L] + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Serve static assets from public/ if file exists + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{DOCUMENT_ROOT}/E31231762/public/$1 -f + RewriteRule ^(.*)$ public/$1 [L] + + # Send Requests To Front Controller (index.php in root) + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/web_JMW/ADMIN_WHATSAPP_SETUP.md b/web_JMW/ADMIN_WHATSAPP_SETUP.md new file mode 100644 index 0000000..b22719e --- /dev/null +++ b/web_JMW/ADMIN_WHATSAPP_SETUP.md @@ -0,0 +1,198 @@ +# Admin Showroom WhatsApp Configuration + +Untuk sistem showroom pribadi dengan satu admin, masukkan nomor WhatsApp admin Anda di file `.env`: + +```bash +ADMIN_WHATSAPP_NUMBER=081234567890 +ADMIN_NAME=JMW Showroom +``` + +## Langkah Setup + +### 1. Update `.env` File + +Edit file `.env` di root folder project: + +```env +# Showroom Admin WhatsApp +ADMIN_WHATSAPP_NUMBER=081234567890 # Ganti dengan nomor WhatsApp admin Anda +ADMIN_NAME=JMW Showroom # Ganti dengan nama showroom Anda +``` + +**Format Nomor Telepon yang Diterima:** +- ✅ `081234567890` (Indonesia mobile) +- ✅ `08-1234-567890` (dengan separator) +- ✅ `+6281234567890` (international) +- ✅ `6281234567890` (country code tanpa +) + +Semua format akan otomatis dikonversi ke `62xxxxxxxxxx` untuk WhatsApp. + +### 2. Jalankan Migration + +```bash +php artisan migrate +``` + +### 3. Selesai! ✅ + +Tombol "💬 Chat Admin via WhatsApp" akan otomatis tampil di setiap halaman detail mobil. + +--- + +## Cara Kerja + +**Ketika customer klik tombol "Chat Admin via WhatsApp":** + +1. ✅ API mengambil nomor WhatsApp dari `.env` (`ADMIN_WHATSAPP_NUMBER`) +2. ✅ API mengambil nama mobil dari kategori +3. ✅ Membuat pesan otomatis dengan nama mobil +4. ✅ Redirect ke WhatsApp Web/App dengan pesan: + +``` +Halo, saya tertarik dengan kendaraan bekas - [Nama Mobil]. Apakah masih tersedia? +``` + +--- + +## API Endpoints (Admin Showroom) + +### 1. Dapatkan Link WhatsApp Admin +``` +GET /api/chat/admin-whatsapp/{categoryId?} +``` + +**Contoh:** +``` +GET /api/chat/admin-whatsapp/5 +``` + +**Response:** +```json +{ + "success": true, + "message": "Link WhatsApp berhasil dibuat", + "data": { + "admin_name": "JMW Showroom", + "phone_number": "081234567890", + "whatsapp_link": "https://wa.me/6281234567890?text=...", + "car_name": "Toyota Avanza 2015" + } +} +``` + +### 2. Direct Redirect ke WhatsApp Admin +``` +GET /api/contact/admin-whatsapp/{categoryId?} +``` + +**Contoh:** +``` +GET /api/contact/admin-whatsapp/5 +``` + +*Secara otomatis membuka WhatsApp tanpa response JSON* + +--- + +## Tidak Perlu Melakukan Ini + +❌ Tidak perlu menambahkan `seller_username` ke mobil +❌ Tidak perlu menyimpan nomor telepon untuk setiap user +❌ Tidak perlu update data mobil - semua langsung ke admin + +--- + +## Troubleshooting + +### ❌ "Nomor WhatsApp admin tidak dikonfigurasi" +**Penyebab:** `ADMIN_WHATSAPP_NUMBER` tidak ada atau kosong di `.env` +**Solusi:** Pastikan sudah menambahkan nomor di `.env` + +```env +ADMIN_WHATSAPP_NUMBER=081234567890 +``` + +### ❌ WhatsApp tidak terbuka +**Penyebab:** +- Browser block popup +- WhatsApp tidak terinstall/login +- Format nomor tidak valid + +**Solusi:** +- Pastikan format nomor benar: `08xxxxxxxxxx` atau `+628xxxxxxxxxx` +- Pastikan WhatsApp Web sudah login +- Coba di browser lain atau incognito mode + +### ❌ Error 422 +**Penyebab:** Nomor WhatsApp admin tidak valid +**Solusi:** Check kembali format nomor telepon di `.env` + +--- + +## Testing + +### Test dengan curl: +```bash +curl "http://localhost:8000/api/chat/admin-whatsapp/5" +``` + +### Expected Response: +```json +{ + "success": true, + "message": "Link WhatsApp berhasil dibuat", + "data": { + "admin_name": "JMW Showroom", + "phone_number": "081234567890", + "whatsapp_link": "https://wa.me/6281234567890?text=Halo%2C%20saya%20tertarik%20dengan%20kendaraan%20bekas%20-%20Toyota%20Avanza%202015.%20Apakah%20masih%20tersedia%3F", + "car_name": "Toyota Avanza 2015" + } +} +``` + +--- + +## Custom Integration + +Jika ingin membuat tombol WhatsApp di tempat lain: + +### HTML Button: +```html + +``` + +### JavaScript Function: +```javascript +function contactAdminWhatsApp(categoryId) { + window.location.href = `/api/contact/admin-whatsapp/${categoryId}`; +} +``` + +### Async Function: +```javascript +async function getAdminWhatsAppLink(categoryId) { + const response = await fetch(`/api/chat/admin-whatsapp/${categoryId}`); + const data = await response.json(); + + if (data.success) { + window.open(data.data.whatsapp_link, '_blank'); + } +} +``` + +--- + +## Catatan Penting + +- ✅ Sistem sepenuhnya otomatis - tidak perlu update data per mobil +- ✅ Tombol selalu tersedia untuk semua mobil +- ✅ Nomor WhatsApp admin terpusat di `.env` +- ✅ Support WhatsApp Web dan WhatsApp App +- ✅ Pesan otomatis disesuaikan dengan nama mobil + +--- + +## Support +Jika ada pertanyaan, lihat [WHATSAPP_API_DOCUMENTATION.md](WHATSAPP_API_DOCUMENTATION.md) diff --git a/web_JMW/INTEGRATION_GUIDE.md b/web_JMW/INTEGRATION_GUIDE.md new file mode 100644 index 0000000..3a788bf --- /dev/null +++ b/web_JMW/INTEGRATION_GUIDE.md @@ -0,0 +1,217 @@ +# 🚀 WhatsApp Integration - Quick Start Guide + +## Apa yang Sudah Diintegrasikan? + +✅ **API WhatsApp** - Endpoint untuk mengarahkan ke WhatsApp +✅ **Car Detail Page** - Tombol "Chat via WhatsApp" pada halaman detail mobil +✅ **Database Fields** - Kolom untuk nomor telepon penjual dan username +✅ **JavaScript Handling** - Script untuk membuka WhatsApp dengan pesan otomatis + +--- + +## Step 1: Jalankan Migrations + +```bash +php artisan migrate +``` + +Ini akan menambahkan 2 kolom baru: +- `phone_number` di tabel `user` +- `seller_username` di tabel `categories` + +--- + +## Step 2: Update User Phone Numbers + +Pastikan setiap penjual memiliki nomor telepon. Buka database atau gunakan Tinker: + +```bash +php artisan tinker +``` + +```php +// Update seller dengan nomor telepon +$user = User::find('username_penjual'); +$user->update(['phone_number' => '081234567890']); + +// Atau bulk update +User::where('role', 'seller')->update(['phone_number' => '081234567890']); +``` + +--- + +## Step 3: Tentukan Seller untuk Setiap Mobil + +Ketika menambah/edit mobil di admin panel, masukkan **seller_username** dari user yang menjual mobil tersebut. + +**Format Field Input:** +``` +Nama Mobil: Toyota Avanza 2015 +Harga: 120000000 +Tahun: 2015 +Penjual: john_seller ← Username dari tabel user +Gambar: [upload image] +``` + +--- + +## Step 4: Test di Frontend + +1. Buka halaman detail mobil: `/mobil-bekas/{car-id}` +2. Scroll ke bagian kanan (price section) +3. Klik tombol **"💬 Chat via WhatsApp"** +4. Secara otomatis akan membuka WhatsApp dengan pesan: + +``` +Halo, saya tertarik dengan kendaraan bekas - [Nama Mobil]. Apakah masih tersedia? +``` + +--- + +## API Endpoints (Dokumentasi Lengkap) + +### 1. Dapatkan Link WhatsApp (Return JSON) +``` +GET /api/chat/whatsapp/{username}/{categoryId} +``` + +**Contoh:** +``` +GET /api/chat/whatsapp/john_seller/5 +``` + +**Response:** +```json +{ + "success": true, + "data": { + "whatsapp_link": "https://wa.me/6281234567890?text=...", + "seller_username": "john_seller", + "phone_number": "+6281234567890" + } +} +``` + +### 2. Redirect Langsung ke WhatsApp +``` +GET /api/contact/whatsapp/{username}/{categoryId} +``` + +**Contoh:** +``` +GET /api/contact/whatsapp/john_seller/5 +``` + +*Secara otomatis membuka WhatsApp tanpa response JSON* + +### 3. Dapatkan Daftar Semua Penjual +``` +GET /api/chat/sellers +``` + +**Response:** +```json +{ + "success": true, + "data": [ + { + "username": "john_seller", + "email": "john@example.com", + "phone_number": "+6281234567890" + } + ] +} +``` + +--- + +## Integrasi Custom (Frontend) + +Jika ingin membuat tombol WhatsApp di tempat lain: + +### Option 1: Link Langsung +```html + + Hubungi via WhatsApp + +``` + +### Option 2: Button dengan JavaScript +```html + +``` + +Fungsi sudah tersedia di `car-detail.blade.php`. + +### Option 3: Custom Handler +```javascript +// Dapatkan link dari API +async function getWhatsAppLink(username, categoryId) { + const response = await fetch(`/api/chat/whatsapp/${username}/${categoryId}`); + const data = await response.json(); + + if (data.success) { + window.open(data.data.whatsapp_link, '_blank'); + } +} +``` + +--- + +## Troubleshooting + +### ❌ "Informasi penjual tidak tersedia" +**Penyebab:** `seller_username` tidak diset pada kategori/mobil +**Solusi:** Edit mobil dan masukkan seller_username yang valid + +### ❌ "Nomor telepon penjual tidak tersedia" +**Penyebab:** User tidak memiliki `phone_number` +**Solusi:** Update field phone_number untuk user tersebut + +### ❌ WhatsApp tidak terbuka +**Penyebab:** +- Browser block popup +- WhatsApp tidak terinstall/login +- Format nomor tidak valid + +**Solusi:** +- Gunakan format: `08xxxxxxxxxx` atau `+628xxxxxxxxxx` +- Pastikan WhatsApp Web sudah login +- Coba di browser lain atau incognito mode + +### ❌ Error 404 pada API +**Penyebab:** User tidak ditemukan +**Solusi:** Pastikan username benar dan user ada di database + +--- + +## Database Schema + +### User Table (New Fields) +```sql +ALTER TABLE user ADD COLUMN phone_number VARCHAR(255) NULL; +``` + +### Categories Table (New Fields) +```sql +ALTER TABLE categories ADD COLUMN seller_username VARCHAR(255) NULL; +ALTER TABLE categories ADD INDEX idx_seller_username (seller_username); +``` + +--- + +## Notes + +- ✅ Nomor telepon otomatis diformat ke format WhatsApp (`62xxxxxxxxxx`) +- ✅ Pesan otomatis disesuaikan dengan nama mobil +- ✅ Responsive design untuk mobile +- ✅ Error handling untuk missing data +- ✅ Support untuk berbagai format nomor telepon + +--- + +## Dokumentasi Lengkap + +Lihat: [WHATSAPP_API_DOCUMENTATION.md](WHATSAPP_API_DOCUMENTATION.md) diff --git a/web_JMW/README.md b/web_JMW/README.md new file mode 100644 index 0000000..1a4c26b --- /dev/null +++ b/web_JMW/README.md @@ -0,0 +1,66 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[WebReinvent](https://webreinvent.com/)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Jump24](https://jump24.co.uk)** +- **[Redberry](https://redberry.international/laravel/)** +- **[Active Logic](https://activelogic.com)** +- **[byte5](https://byte5.de)** +- **[OP.GG](https://op.gg)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/web_JMW/WHATSAPP_API_DOCUMENTATION.md b/web_JMW/WHATSAPP_API_DOCUMENTATION.md new file mode 100644 index 0000000..b8ffecc --- /dev/null +++ b/web_JMW/WHATSAPP_API_DOCUMENTATION.md @@ -0,0 +1,258 @@ +# WhatsApp Chat API Documentation + +## Daftar API Endpoints + +### 1. **Dapatkan Link WhatsApp Penjual** +**Endpoint:** `GET /api/chat/whatsapp/{username}/{categoryId?}` + +**Deskripsi:** Mendapatkan link WhatsApp untuk menghubungi penjual + +**Parameter:** +- `username` (required) - Username penjual +- `categoryId` (optional) - ID mobil/kategori yang diminati + +**Response Sukses (200):** +```json +{ + "success": true, + "message": "Link WhatsApp berhasil dibuat", + "data": { + "seller_username": "john_seller", + "seller_name": "john_seller", + "phone_number": "+6281234567890", + "whatsapp_link": "https://wa.me/6281234567890?text=Halo...", + "car_name": "Toyota Avanza 2015" + } +} +``` + +**Response Error (404):** +```json +{ + "success": false, + "message": "Penjual tidak ditemukan" +} +``` + +**Response Error (422):** +```json +{ + "success": false, + "message": "Nomor telepon penjual tidak tersedia" +} +``` + +**Contoh Request:** +``` +GET http://localhost:8000/api/chat/whatsapp/john_seller/5 +``` + +--- + +### 2. **Dapatkan Daftar Semua Penjual** +**Endpoint:** `GET /api/chat/sellers` + +**Deskripsi:** Mendapatkan list semua penjual dengan informasi kontak + +**Response Sukses (200):** +```json +{ + "success": true, + "message": "Daftar penjual berhasil diambil", + "data": [ + { + "username": "john_seller", + "email": "john@example.com", + "phone_number": "+6281234567890" + }, + { + "username": "maria_seller", + "email": "maria@example.com", + "phone_number": "+6282345678901" + } + ] +} +``` + +**Contoh Request:** +``` +GET http://localhost:8000/api/chat/sellers +``` + +--- + +### 3. **Redirect Langsung ke WhatsApp** +**Endpoint:** `GET /contact/whatsapp/{username}/{categoryId?}` + +**Deskripsi:** Redirect langsung ke WhatsApp Web/App dengan pesan otomatis + +**Parameter:** +- `username` (required) - Username penjual +- `categoryId` (optional) - ID mobil/kategori + +**Behavior:** +- Secara otomatis membuka WhatsApp Web atau aplikasi WhatsApp yang terinstall +- Pesan otomatis dikirim ke chat window + +**Contoh Request:** +``` +GET http://localhost:8000/api/contact/whatsapp/john_seller/5 +``` + +--- + +## Cara Menggunakan + +### Option 1: Dari Frontend (HTML Button) +```html + + + Hubungi Penjual via WhatsApp + +``` + +### Option 2: Dari Frontend (JavaScript) +```javascript +// Dapatkan link WhatsApp dari API +fetch('/api/chat/whatsapp/john_seller/5') + .then(response => response.json()) + .then(data => { + if (data.success) { + // Buka link di tab baru + window.open(data.data.whatsapp_link, '_blank'); + } else { + alert(data.message); + } + }); +``` + +### Option 3: Mobile App +```javascript +// Untuk membuka WhatsApp App di mobile +const whatsappLink = "whatsapp://send?phone=6281234567890&text=Halo"; +window.location.href = whatsappLink; +``` + +--- + +## Setup & Migration + +### 1. Jalankan Migration untuk menambah field phone_number +```bash +php artisan migrate +``` + +Ini akan menambahkan kolom `phone_number` ke tabel `user`. + +### 2. Update data penjual dengan nomor telepon +```bash +php artisan tinker +``` + +```php +$user = User::find('john_seller'); +$user->update(['phone_number' => '+6281234567890']); +``` + +Atau melalui database secara langsung: +```sql +UPDATE user SET phone_number = '+6281234567890' WHERE username = 'john_seller'; +``` + +--- + +## Format Nomor Telepon + +API secara otomatis memformat nomor telepon. Nomor dapat diterima dalam format: +- ✅ `081234567890` (Indonesian mobile) +- ✅ `08-1234-567890` (dengan separator) +- ✅ `+6281234567890` (international) +- ✅ `6281234567890` (country code tanpa +) + +Semua format akan dikonversi menjadi: `6281234567890` untuk link WhatsApp. + +--- + +## Pesan Otomatis + +Pesan default yang dikirim: +``` +Halo, saya tertarik dengan kendaraan bekas - [Nama Mobil]. Apakah masih tersedia? +``` + +Contoh pesan dengan car_name: +``` +Halo, saya tertarik dengan kendaraan bekas - Toyota Avanza 2015. Apakah masih tersedia? +``` + +--- + +## Integrasi pada Car Detail Page + +Tambahkan tombol "Hubungi Penjual" pada halaman detail mobil: + +```blade + + + + +``` + +--- + +## Error Handling + +**Error 404 - Penjual tidak ditemukan:** +- Pastikan username penjual correct/exists di database + +**Error 422 - Nomor telepon tidak tersedia:** +- Update field `phone_number` untuk user tersebut +- Pastikan nomor telepon dalam format yang valid + +**Error 500 - Server error:** +- Cek log file di `storage/logs/` +- Pastikan semua field exists di model + +--- + +## Catatan Penting + +1. **Nomor Telepon Wajib:** + - User/Penjual harus memiliki nomor telepon di field `phone_number` + +2. **Role Seller:** + - Untuk endpoint `/api/chat/sellers`, hanya users dengan role 'seller' yang ditampilkan + +3. **WhatsApp Web:** + - Pengguna harus sudah login di WhatsApp Web + - Atau memiliki aplikasi WhatsApp yang terinstall + +4. **Character Encoding:** + - Pesan otomatis di-encode dengan `urlencode()` untuk mendukung karakter khusus + +--- + +## Troubleshooting + +### Link WhatsApp tidak buka +- Pastikan WhatsApp Web sudah login atau aplikasi terinstall +- Coba akses link langsung: `https://wa.me/6281234567890` + +### Nomor telepon tidak valid +- Check format nomor di database +- Gunakan format: `+62xxxxxxxxxx` atau `08xxxxxxxxxx` + +### Pesan tidak muncul +- Pastikan browser memperbolehkan popup/redirect +- Coba buka di incognito mode + +--- + +## Contact untuk Support +Jika ada pertanyaan atau issue, hubungi team development. diff --git a/web_JMW/app/Console/Kernel.php b/web_JMW/app/Console/Kernel.php new file mode 100644 index 0000000..99b3e94 --- /dev/null +++ b/web_JMW/app/Console/Kernel.php @@ -0,0 +1,30 @@ +call(fn () => \App\Models\Category::releaseExpiredReservations()) + ->everyMinute() + ->name('release-expired-car-reservations') + ->withoutOverlapping(); + } + + /** + * Register the commands for the application. + */ + protected function commands(): void + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/web_JMW/app/Exceptions/Handler.php b/web_JMW/app/Exceptions/Handler.php new file mode 100644 index 0000000..39c9271 --- /dev/null +++ b/web_JMW/app/Exceptions/Handler.php @@ -0,0 +1,37 @@ + + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + */ + public function register(): void + { + $this->reportable(function (Throwable $e) { + // + }); + + $this->renderable(function (TokenMismatchException $e) { + return back() + ->withInput() + ->with('error', 'Sesi halaman sudah berubah atau kadaluarsa. Silakan coba kirim ulang bukti transaksi.'); + }); + } +} diff --git a/web_JMW/app/Http/Controllers/AuthController.php b/web_JMW/app/Http/Controllers/AuthController.php new file mode 100644 index 0000000..0d3a7f6 --- /dev/null +++ b/web_JMW/app/Http/Controllers/AuthController.php @@ -0,0 +1,196 @@ +check()) { + return redirect()->route('dashboard'); + } + + if (Auth::check()) { + return redirect()->route('user.dashboard'); + } + + return view('login'); + } + + /** + * Proses login. + */ + public function login(Request $request) + { + $request->validate([ + 'username' => 'required|string', + 'password' => 'required|string', + ], [ + 'username.required' => 'Username wajib diisi.', + 'password.required' => 'Password wajib diisi.', + ]); + + $credentials = [ + 'username' => $request->username, + 'password' => $request->password, + ]; + + if (Auth::guard('admin')->attempt($credentials)) { + $request->session()->regenerate(); + return redirect()->intended(route('dashboard')); + } + + if (Auth::attempt($credentials)) { + $request->session()->regenerate(); + return redirect()->intended(route('user.dashboard')); + } + + return back() + ->withInput($request->only('username')) + ->with('error', 'Username atau password salah.'); + } + + /** + * Tampilkan halaman register. + */ + public function showRegister() + { + return view('register'); + } + + /** + * Proses registrasi user baru. + */ + public function register(Request $request) + { + $request->validate([ + 'username' => 'required|string|max:255|unique:user,username', + 'email' => 'required|email|max:255|unique:user,email', + 'password' => 'required|string|min:6|confirmed', + ], [ + 'username.required' => 'Username wajib diisi.', + 'username.unique' => 'Username sudah digunakan.', + 'email.required' => 'Email wajib diisi.', + 'email.unique' => 'Email sudah terdaftar.', + 'password.required' => 'Password wajib diisi.', + 'password.min' => 'Password minimal 6 karakter.', + 'password.confirmed' => 'Konfirmasi password tidak cocok.', + ]); + + $user = User::create([ + 'username' => $request->username, + 'email' => $request->email, + 'password' => Hash::make($request->password), + 'role' => 'user', + ]); + + return redirect()->route('login')->with('success', 'Registrasi berhasil. Silakan login dengan akun Anda.'); + } + + /** + * Tampilkan halaman lupa password. + */ + public function showForgotPassword() + { + return view('forgot-password'); + } + + /** + * Kirim link reset password ke email user. + */ + public function sendResetPasswordLink(Request $request) + { + $request->validate([ + 'email' => 'required|email|exists:user,email', + ], [ + 'email.required' => 'Email wajib diisi.', + 'email.email' => 'Format email tidak valid.', + 'email.exists' => 'Email tidak terdaftar.', + ]); + + $status = Password::sendResetLink($request->only('email')); + + if ($status === Password::RESET_LINK_SENT) { + return back()->with('success', 'Link verifikasi reset password sudah dikirim ke email Anda.'); + } + + return back() + ->withInput($request->only('email')) + ->with('error', 'Link reset password gagal dikirim. Silakan coba lagi.'); + } + + /** + * Tampilkan halaman password baru dari link email. + */ + public function showResetPassword(Request $request, string $token) + { + return view('reset-password', [ + 'token' => $token, + 'email' => $request->email, + ]); + } + + /** + * Simpan password baru. + */ + public function resetPassword(Request $request) + { + $request->validate([ + 'token' => 'required', + 'email' => 'required|email', + 'password' => 'required|string|min:6|confirmed', + ], [ + 'password.required' => 'Password baru wajib diisi.', + 'password.min' => 'Password minimal 6 karakter.', + 'password.confirmed' => 'Konfirmasi password tidak cocok.', + ]); + + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function (User $user, string $password) { + $user->forceFill([ + 'password' => Hash::make($password), + 'login_otp' => null, + 'login_otp_expires_at' => null, + ])->save(); + } + ); + + if ($status === Password::PASSWORD_RESET) { + return redirect()->route('login')->with('success', 'Password berhasil diubah. Silakan login.'); + } + + return back() + ->withInput($request->only('email')) + ->with('error', 'Link reset password tidak valid atau sudah kedaluwarsa.'); + } + + /** + * Proses logout. + */ + public function logout(Request $request) + { + if (Auth::guard('admin')->check()) { + Auth::guard('admin')->logout(); + } + + if (Auth::check()) { + Auth::logout(); + } + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect()->route('login'); + } + +} diff --git a/web_JMW/app/Http/Controllers/CategoryController.php b/web_JMW/app/Http/Controllers/CategoryController.php new file mode 100644 index 0000000..1f8ed30 --- /dev/null +++ b/web_JMW/app/Http/Controllers/CategoryController.php @@ -0,0 +1,259 @@ +get(); + + return view('admin.kategori', compact('categories')); + } + + public function store(Request $request) + { + $validated = $request->validate([ + 'name' => 'required|string|max:255', + 'description' => 'required|string|max:1000', + 'merk' => 'nullable|string|max:255', + 'model' => 'nullable|string|max:255', + 'kategori' => 'nullable|string|max:255', + 'price' => 'required|numeric|min:0', + 'year' => 'required|integer|min:1900|max:' . date('Y'), + 'mesin_cc' => 'nullable|integer|min:0', + 'transmisi' => 'nullable|string|max:255', + 'bahan_bakar' => 'nullable|string|max:255', + 'status' => 'required|in:available,reserved,sold', + 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', + ], [ + 'name.required' => 'Nama kategori wajib diisi.', + 'description.required' => 'Deskripsi kategori wajib diisi.', + 'price.required' => 'Harga mobil wajib diisi.', + 'price.numeric' => 'Harga mobil harus berupa angka.', + 'price.min' => 'Harga mobil tidak boleh negatif.', + 'year.required' => 'Tahun mobil wajib diisi.', + 'year.integer' => 'Tahun mobil harus berupa angka.', + 'year.min' => 'Tahun mobil tidak valid.', + 'year.max' => 'Tahun mobil tidak valid.', + 'status.required' => 'Status mobil wajib dipilih.', + 'status.in' => 'Status mobil tidak valid.', + 'image.image' => 'File harus berupa gambar.', + 'image.mimes' => 'Format gambar harus jpeg, png, jpg, atau gif.', + 'image.max' => 'Ukuran gambar maksimal 2MB.', + ]); + + if ($request->hasFile('image')) { + $validated['image'] = $request->file('image')->store('categories', 'public'); + } + + Category::create($validated); + + return redirect()->route('kategori')->with('success', 'Kategori berhasil ditambahkan.'); + } + + public function edit(Category $category) + { + return view('admin.kategori-edit', compact('category')); + } + + public function update(Request $request, Category $category) + { + $validated = $request->validate([ + 'name' => 'required|string|max:255', + 'description' => 'required|string|max:1000', + 'merk' => 'nullable|string|max:255', + 'model' => 'nullable|string|max:255', + 'kategori' => 'nullable|string|max:255', + 'price' => 'required|numeric|min:0', + 'year' => 'required|integer|min:1900|max:' . date('Y'), + 'mesin_cc' => 'nullable|integer|min:0', + 'transmisi' => 'nullable|string|max:255', + 'bahan_bakar' => 'nullable|string|max:255', + 'status' => 'required|in:available,reserved,sold', + 'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', + ], [ + 'name.required' => 'Nama kategori wajib diisi.', + 'description.required' => 'Deskripsi kategori wajib diisi.', + 'price.required' => 'Harga mobil wajib diisi.', + 'price.numeric' => 'Harga mobil harus berupa angka.', + 'price.min' => 'Harga mobil tidak boleh negatif.', + 'year.required' => 'Tahun mobil wajib diisi.', + 'year.integer' => 'Tahun mobil harus berupa angka.', + 'year.min' => 'Tahun mobil tidak valid.', + 'year.max' => 'Tahun mobil tidak valid.', + 'status.required' => 'Status mobil wajib dipilih.', + 'status.in' => 'Status mobil tidak valid.', + 'image.image' => 'File harus berupa gambar.', + 'image.mimes' => 'Format gambar harus jpeg, png, jpg, atau gif.', + 'image.max' => 'Ukuran gambar maksimal 2MB.', + ]); + + if ($request->hasFile('image')) { + if ($category->image) { + Storage::disk('public')->delete($category->image); + } + $validated['image'] = $request->file('image')->store('categories', 'public'); + } + + $category->update($validated); + + return redirect()->route('kategori')->with('success', 'Kategori berhasil diperbarui.'); + } + + public function destroy(Category $category) + { + if ($category->image) { + Storage::disk('public')->delete($category->image); + } + + $category->delete(); + + return redirect()->route('kategori')->with('success', 'Kategori berhasil dihapus.'); + } + + public function userIndex(Request $request, CarRecommendationService $recommendationService) + { + Category::releaseExpiredReservations(); + + $budget = $request->query('budget'); + $budgetValue = is_numeric($budget) ? (float) $budget : null; + $year = $request->query('year'); + $yearValue = is_numeric($year) ? (int) $year : null; + $mesinCc = $request->query('mesin_cc'); + $mesinCcValue = is_numeric($mesinCc) ? (int) $mesinCc : null; + + $categories = Category::where('status', 'available')->orderBy('created_at', 'desc')->get(); + $hasExactBudgetMatch = false; + $recommendationSource = null; + $recommendationMeta = null; + + if ($budgetValue) { + $recommendation = $recommendationService->recommendForBudget($budgetValue, 50, [ + 'year' => $yearValue, + 'mesin_cc' => $mesinCcValue, + ]); + $recommended = $recommendation['cars']; + $hasExactBudgetMatch = $recommendation['has_exact_budget_match']; + $recommendationSource = $recommendation['source']; + $recommendationMeta = $recommendation['meta']; + } else { + $recommended = Category::where('status', 'available') + ->orderBy('created_at', 'desc') + ->get(); + } + + return view('user.cars', compact( + 'categories', + 'recommended', + 'budget', + 'year', + 'mesinCc', + 'hasExactBudgetMatch', + 'recommendationSource', + 'recommendationMeta' + )); + } + + public function allCars() + { + Category::releaseExpiredReservations(); + + $categories = Category::where('status', 'available') + ->orderBy('created_at', 'desc') + ->paginate(12); + + return view('user.all-cars', compact('categories')); + } + + public function budgetCars(Request $request, CarRecommendationService $recommendationService) + { + Category::releaseExpiredReservations(); + + $budget = $request->query('budget'); + $budgetValue = is_numeric($budget) ? (float) $budget : null; + $year = $request->query('year'); + $yearValue = is_numeric($year) ? (int) $year : null; + $mesinCc = $request->query('mesin_cc'); + $mesinCcValue = is_numeric($mesinCc) ? (int) $mesinCc : null; + $availableCount = Category::where('status', 'available')->count(); + $hasExactBudgetMatch = false; + $recommendationSource = null; + $recommendationMeta = null; + $recommended = collect(); + + if ($budgetValue) { + $recommendation = $recommendationService->recommendForBudget($budgetValue, 50, [ + 'year' => $yearValue, + 'mesin_cc' => $mesinCcValue, + ]); + $recommended = $recommendation['cars']; + $hasExactBudgetMatch = $recommendation['has_exact_budget_match']; + $recommendationSource = $recommendation['source']; + $recommendationMeta = $recommendation['meta']; + } + + return view('user.budget-cars', compact( + 'budget', + 'year', + 'mesinCc', + 'availableCount', + 'recommended', + 'hasExactBudgetMatch', + 'recommendationSource', + 'recommendationMeta' + )); + } + + public function show(Category $category) + { + Category::releaseExpiredReservations(); + $category->refresh(); + + return view('user.car-detail', compact('category')); + } + + public function addToFavorites(Category $category) + { + Category::releaseExpiredReservations(); + $category->refresh(); + + $username = auth()->user()->username; + + if ($category->status !== 'available') { + return response()->json(['message' => 'Mobil ini sedang tidak tersedia.'], 422); + } + + // Check if already favorited + if (Favorite::where('username', $username)->where('category_id', $category->id)->exists()) { + return response()->json(['message' => 'Already in favorites'], 409); + } + + Favorite::create([ + 'username' => $username, + 'category_id' => $category->id, + ]); + + return response()->json(['message' => 'Added to favorites']); + } + + public function removeFromFavorites(Category $category) + { + $username = auth()->user()->username; + + Favorite::where('username', $username) + ->where('category_id', $category->id) + ->delete(); + + return response()->json(['message' => 'Removed from favorites']); + } + +} diff --git a/web_JMW/app/Http/Controllers/ChatController.php b/web_JMW/app/Http/Controllers/ChatController.php new file mode 100644 index 0000000..8163980 --- /dev/null +++ b/web_JMW/app/Http/Controllers/ChatController.php @@ -0,0 +1,312 @@ +whatsAppBusinessService = $whatsAppBusinessService; + } + + /** + * Get WhatsApp link for admin showroom + * + * @param int $categoryId - The category/car ID (optional) + * @return \Illuminate\Http\JsonResponse + */ + public function getAdminWhatsAppLink($categoryId = null) + { + try { + // Get admin phone number from centralized service configuration. + $phoneNumber = config('services.whatsapp.admin_recipient'); + $adminName = config('services.whatsapp.admin_name', 'Showroom'); + + if (!$phoneNumber) { + return response()->json([ + 'success' => false, + 'message' => 'Nomor WhatsApp admin tidak dikonfigurasi', + ], 422); + } + + $carName = null; + $carImageUrl = null; + $carDetailUrl = null; + $category = null; + if ($categoryId) { + $category = Category::find($categoryId); + if ($category) { + $carName = $category->name; + $carImageUrl = $this->getCarImageUrl($category); + $carDetailUrl = $this->getCarDetailUrl($category); + } + } + + // Format phone number + $formattedPhone = $this->formatPhoneNumber($phoneNumber); + + // Create WhatsApp message + $message = $this->buildWhatsAppMessage($category, $carImageUrl, $carDetailUrl); + $encodedMessage = urlencode($message); + + // WhatsApp Web link format + $whatsappLink = "https://wa.me/{$formattedPhone}?text={$encodedMessage}"; + + return response()->json([ + 'success' => true, + 'message' => 'Link WhatsApp berhasil dibuat', + 'data' => [ + 'admin_name' => $adminName, + 'phone_number' => $phoneNumber, + 'whatsapp_link' => $whatsappLink, + 'car_name' => $carName, + 'car_image_url' => $carImageUrl, + 'car_detail_url' => $carDetailUrl, + ] + ], 200); + + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan: ' . $e->getMessage(), + ], 500); + } + } + + /** + * Direct redirect to WhatsApp admin. + * + * @param int $categoryId - The category/car ID (optional) + * @return \Illuminate\Http\RedirectResponse + */ + public function redirectAdminWhatsApp($categoryId = null) + { + try { + $phoneNumber = config('services.whatsapp.admin_recipient'); + + if (!$phoneNumber) { + return redirect()->back()->with('error', 'Nomor WhatsApp admin tidak dikonfigurasi'); + } + + // Format phone number + $formattedPhone = $this->formatPhoneNumber($phoneNumber); + + $carImageUrl = null; + $carDetailUrl = null; + $category = null; + if ($categoryId) { + $category = Category::find($categoryId); + if ($category) { + $carImageUrl = $this->getCarImageUrl($category); + $carDetailUrl = $this->getCarDetailUrl($category); + $this->sendBusinessImageNotification($category, auth()->user()); + } + } + + // Create message + $message = $this->buildWhatsAppMessage($category, $carImageUrl, $carDetailUrl); + $encodedMessage = urlencode($message); + + // Redirect to WhatsApp, but keep catalog/detail URLs based on this local app host. + $whatsappLink = "https://wa.me/{$formattedPhone}?text={$encodedMessage}"; + return redirect($whatsappLink); + + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Terjadi kesalahan saat membuka WhatsApp'); + } + } + + /** + * Send a WhatsApp Business notification with the car image to admin. + * + * @param \Illuminate\Http\Request $request + * @param int $categoryId + * @return \Illuminate\Http\JsonResponse + */ + public function notifyAdminWithCarImage(Request $request, $categoryId) + { + try { + $category = Category::find($categoryId); + + if (!$category) { + return response()->json([ + 'success' => false, + 'message' => 'Mobil tidak ditemukan.', + ], 404); + } + + $result = $this->whatsAppBusinessService->sendCarNotificationToAdmin( + $category, + $request->user() + ); + + return response()->json($result, $result['success'] ? 200 : 422); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan saat mengirim notifikasi ke admin.', + 'error' => $e->getMessage(), + ], 500); + } + } + + /** + * Format phone number to WhatsApp format + * Converts various formats to 62xxxxxxxxxx + * + * @param string $phoneNumber + * @return string + */ + private function formatPhoneNumber($phoneNumber) + { + // Remove all non-numeric characters + $phoneNumber = preg_replace('/[^0-9]/', '', $phoneNumber); + + // Handle Indonesian phone numbers + // 081234567890 -> 6281234567890 + if (strlen($phoneNumber) == 10 && substr($phoneNumber, 0, 1) == '8') { + $phoneNumber = '62' . $phoneNumber; + } + // 08xxxxxxxxxx -> 62xxxxxxxxxx + elseif (strlen($phoneNumber) >= 11 && substr($phoneNumber, 0, 2) == '08') { + $phoneNumber = '62' . substr($phoneNumber, 1); + } + // If doesn't start with 62, prepend it + elseif (substr($phoneNumber, 0, 2) != '62') { + $phoneNumber = '62' . $phoneNumber; + } + + return $phoneNumber; + } + + /** + * Build WhatsApp message with optional car image link. + * + * @param \App\Models\Category|null $category + * @param string|null $carImageUrl + * @param string|null $carDetailUrl + * @return string + */ + private function buildWhatsAppMessage(?Category $category = null, $carImageUrl = null, $carDetailUrl = null) + { + if (!$category) { + return "Halo admin, saya tertarik dengan salah satu mobil bekas yang ada di website. Apakah masih tersedia?"; + } + + $lines = [ + 'Halo admin, saya tertarik dengan mobil katalog ini.', + '', + 'Nama mobil: ' . $category->name, + 'Harga: Rp ' . number_format((float) $category->price, 0, ',', '.'), + 'Tahun: ' . ($category->year ?: '-'), + ]; + + if ($carImageUrl) { + $lines[] = 'Foto katalog: ' . $carImageUrl; + } + + if ($carDetailUrl) { + $lines[] = 'Link detail: ' . $carDetailUrl; + } + + $lines[] = ''; + $lines[] = 'Apakah mobil ini masih tersedia?'; + + return implode("\n", $lines); + } + + /** + * Get absolute public URL for the car image if available. + * + * @param \App\Models\Category $category + * @return string|null + */ + private function getCarImageUrl(Category $category) + { + if (!$category->image) { + return null; + } + + return $this->publicUrl(Storage::disk('public')->url($category->image), $this->getClickableBaseUrl()); + } + + /** + * Get absolute detail page URL for the car. + * + * @param \App\Models\Category $category + * @return string + */ + private function getCarDetailUrl(Category $category) + { + return $this->publicUrl('/mobil-bekas/' . $category->id, $this->getClickableBaseUrl()); + } + + /** + * Build an absolute URL from the current local app host. + * + * @param string $path + * @return string + */ + private function publicUrl($path, $baseUrl = null) + { + if (filter_var($path, FILTER_VALIDATE_URL)) { + return $path; + } + + $baseUrl = $baseUrl ?: url('/'); + + return rtrim($baseUrl, '/') . '/' . ltrim($path, '/'); + } + + /** + * Prefer a public local tunnel URL for WhatsApp, because WhatsApp often + * does not turn 127.0.0.1/localhost links into clickable links. + * + * @return string + */ + private function getClickableBaseUrl() + { + $requestUrl = rtrim(request()->getSchemeAndHttpHost(), '/'); + + if ($requestUrl) { + return $requestUrl; + } + + $configuredUrl = rtrim((string) config('app.url'), '/'); + + if ($configuredUrl && ! preg_match('/^https?:\/\/(127\.0\.0\.1|localhost)(:\d+)?$/i', $configuredUrl)) { + return $configuredUrl; + } + + return url('/'); + } + + /** + * Send selected catalog image through WhatsApp Business Cloud API. + * The direct WhatsApp redirect still works if the API send fails. + */ + private function sendBusinessImageNotification(Category $category, $customer = null) + { + try { + if ($this->whatsAppBusinessService->isConfigured()) { + $this->whatsAppBusinessService->sendCarNotificationToAdmin($category, $customer); + } + } catch (\Throwable $e) { + report($e); + } + } +} + diff --git a/web_JMW/app/Http/Controllers/Controller.php b/web_JMW/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..77ec359 --- /dev/null +++ b/web_JMW/app/Http/Controllers/Controller.php @@ -0,0 +1,12 @@ +latest()->get(); + + $summary = [ + 'total' => $transactions->count(), + 'paid' => $transactions->where('payment_status', 'paid')->count(), + 'sales' => $transactions->where('payment_status', 'paid')->sum('total_amount'), + 'today' => $transactions->where('created_at', '>=', today())->count(), + ]; + + return view('admin.riwayat', compact('transactions', 'summary')); + } + + public function create() + { + Category::releaseExpiredReservations(); + + $categories = Category::where('status', 'available')->orderBy('name')->get(); + $transactionCode = $this->generateTransactionCode(); + + return view('admin.input', compact('categories', 'transactionCode')); + } + + public function store(Request $request) + { + Category::releaseExpiredReservations(); + + $validated = $request->validate([ + 'customer_name' => 'required|string|max:255', + 'customer_phone' => 'nullable|string|max:30', + 'customer_email' => 'nullable|email|max:255', + 'transaction_code' => 'nullable|string|max:30|unique:transactions,transaction_code', + 'category_id' => 'required|exists:categories,id', + 'quantity' => 'required|integer|min:1', + 'payment_method' => 'required|in:cash,transfer', + 'payment_status' => 'required|in:pending,paid,cancelled', + 'payment_proof' => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048', + 'note' => 'nullable|string|max:1000', + ], [ + 'customer_name.required' => 'Nama customer wajib diisi.', + 'category_id.required' => 'Produk wajib dipilih.', + 'category_id.exists' => 'Produk yang dipilih tidak tersedia.', + 'quantity.required' => 'Jumlah wajib diisi.', + 'quantity.integer' => 'Jumlah harus berupa angka.', + 'quantity.min' => 'Jumlah minimal 1.', + 'payment_method.required' => 'Metode pembayaran wajib dipilih.', + 'payment_status.required' => 'Status pembayaran wajib dipilih.', + 'customer_email.email' => 'Format email tidak valid.', + 'payment_proof.mimes' => 'Bukti pembayaran harus berupa JPG, PNG, atau PDF.', + 'payment_proof.max' => 'Ukuran bukti pembayaran maksimal 2 MB.', + ]); + + $category = Category::findOrFail($validated['category_id']); + + if ($category->status !== 'available') { + return back() + ->withErrors(['category_id' => 'Mobil ini sedang tidak tersedia dan tidak bisa dibuatkan transaksi baru.']) + ->withInput(); + } + + $quantity = (int) $validated['quantity']; + $unitPrice = $category->price; + $paymentProofPath = $request->hasFile('payment_proof') + ? $request->file('payment_proof')->store('payment-proofs', 'public') + : null; + + $expiresAt = $validated['payment_status'] === 'pending' + ? now()->addMinutes(Category::RESERVATION_MINUTES) + : null; + + Transaction::create($this->transactionPayload([ + 'transaction_code' => $validated['transaction_code'] ?? $this->generateTransactionCode(), + 'category_id' => $category->id, + 'admin_username' => auth('admin')->user()->username ?? null, + 'customer_name' => $validated['customer_name'], + 'customer_phone' => $validated['customer_phone'] ?? null, + 'customer_email' => $validated['customer_email'] ?? null, + 'quantity' => $quantity, + 'unit_price' => $unitPrice, + 'total_amount' => $unitPrice * $quantity, + 'payment_method' => $validated['payment_method'], + 'payment_status' => $validated['payment_status'], + 'expires_at' => $expiresAt, + 'reserved_by' => $validated['payment_status'] === 'pending' + ? (auth('admin')->user()->username ?? 'admin') + : null, + 'payment_proof' => $paymentProofPath, + 'note' => $validated['note'] ?? null, + ])); + + if ($validated['payment_status'] === 'paid') { + $category->update([ + 'status' => 'sold', + ]); + } elseif ($validated['payment_status'] === 'pending') { + $category->update([ + 'status' => 'reserved', + ]); + } + + return redirect()->route('riwayat')->with('success', 'Transaksi berhasil disimpan.'); + } + + public function beginPayment(Category $category) + { + Category::releaseExpiredReservations(); + + $transaction = DB::transaction(function () use ($category) { + $lockedCategory = Category::whereKey($category->id)->lockForUpdate()->firstOrFail(); + + if ($lockedCategory->status !== 'available') { + return null; + } + + $expiresAt = now()->addMinutes(Category::RESERVATION_MINUTES); + $user = auth()->user(); + + $transaction = Transaction::create($this->transactionPayload([ + 'transaction_code' => $this->generateTransactionCode(), + 'category_id' => $lockedCategory->id, + 'customer_name' => $user->username, + 'customer_phone' => $user->phone_number, + 'customer_email' => $user->email, + 'quantity' => 1, + 'unit_price' => $lockedCategory->price, + 'total_amount' => $lockedCategory->price, + 'payment_method' => 'transfer', + 'payment_status' => 'pending', + 'expires_at' => $expiresAt, + 'reserved_by' => $user->username, + ])); + + $lockedCategory->update([ + 'status' => 'reserved', + ]); + + return $transaction; + }); + + if (! $transaction) { + return redirect()->route('mobil-bekas.detail', $category) + ->with('error', 'Maaf, mobil ini baru saja dipesan pengguna lain atau sudah terjual.'); + } + + return redirect()->route('transactions.payment', $transaction); + } + + public function showPayment(Transaction $transaction) + { + Category::releaseExpiredReservations(); + $transaction->refresh(); + + if ($transaction->payment_status === 'cancelled' || ! $transaction->category) { + return redirect()->route('semua-mobil-bekas') + ->with('error', 'Waktu pembayaran telah habis. Mobil kembali tersedia.'); + } + + if (! $this->isTransactionOwner($transaction)) { + abort(403, 'Anda tidak memiliki akses ke pembayaran ini.'); + } + + return view('user.payment', compact('transaction')); + } + + public function uploadProof(Request $request, Transaction $transaction) + { + Category::releaseExpiredReservations(); + $transaction->refresh(); + + if ($transaction->payment_status !== 'pending' || ! $transaction->expires_at || $transaction->expires_at->isPast()) { + Category::releaseExpiredReservations(); + + return redirect()->route('semua-mobil-bekas') + ->with('error', 'Waktu pembayaran telah habis. Mobil kembali tersedia.'); + } + + if (! $this->isTransactionOwner($transaction)) { + abort(403, 'Anda tidak memiliki akses ke pembayaran ini.'); + } + + $validated = $request->validate([ + 'customer_name' => 'required|string|max:255', + 'customer_phone' => 'nullable|string|max:30', + 'customer_email' => 'nullable|email|max:255', + 'payment_method' => 'required|in:cash,transfer', + 'payment_proof' => 'required|file|mimes:jpg,jpeg,png,pdf|max:2048', + 'note' => 'nullable|string|max:1000', + ], [ + 'customer_name.required' => 'Nama pembeli wajib diisi.', + 'payment_method.required' => 'Metode pembayaran wajib dipilih.', + 'payment_proof.required' => 'Bukti pembayaran wajib diupload.', + 'payment_proof.mimes' => 'Bukti pembayaran harus berupa JPG, PNG, atau PDF.', + 'payment_proof.max' => 'Ukuran bukti pembayaran maksimal 2 MB.', + 'customer_email.email' => 'Format email tidak valid.', + ]); + + $paymentProofPath = $request->file('payment_proof')->store('payment-proofs', 'public'); + + $updated = DB::transaction(function () use ($transaction, $validated, $paymentProofPath) { + $lockedTransaction = Transaction::whereKey($transaction->id)->lockForUpdate()->firstOrFail(); + $lockedCategory = $lockedTransaction->category()->lockForUpdate()->first(); + + if (! $lockedCategory + || $lockedTransaction->payment_status !== 'pending' + || ! $lockedTransaction->expires_at + || $lockedTransaction->expires_at->isPast() + || $lockedTransaction->reserved_by !== auth()->user()->username) { + return false; + } + + $lockedTransaction->update([ + 'customer_name' => $validated['customer_name'], + 'customer_phone' => $validated['customer_phone'] ?? null, + 'customer_email' => $validated['customer_email'] ?? null, + 'payment_method' => $validated['payment_method'], + 'payment_proof' => $paymentProofPath, + 'note' => $validated['note'] ?? null, + ]); + + return true; + }); + + if (! $updated) { + Storage::disk('public')->delete($paymentProofPath); + + Category::releaseExpiredReservations(); + return redirect()->route('semua-mobil-bekas')->with('error', 'Waktu pembayaran telah habis. Mobil kembali tersedia.'); + } + + return redirect()->route('mobil-bekas.detail', $transaction->category_id) + ->with('success', 'Bukti pembayaran berhasil dikirim dan sedang menunggu konfirmasi admin.'); + } + + public function confirmPayment(Transaction $transaction) + { + Category::releaseExpiredReservations(); + $transaction->refresh(); + + if ($transaction->payment_status === 'cancelled') { + return back()->with('error', 'Transaksi ini sudah dibatalkan karena melewati batas waktu pembayaran.'); + } + + $confirmed = DB::transaction(function () use ($transaction) { + $lockedTransaction = Transaction::whereKey($transaction->id)->lockForUpdate()->firstOrFail(); + $lockedCategory = $lockedTransaction->category() + ->lockForUpdate() + ->first(); + + if (! $lockedCategory || $lockedCategory->status === 'sold') { + return false; + } + + $lockedTransaction->update($this->transactionPayload([ + 'payment_status' => 'paid', + 'admin_username' => auth('admin')->user()->username ?? null, + 'expires_at' => null, + ])); + + $lockedCategory->update([ + 'status' => 'sold', + ]); + + return true; + }); + + if (! $confirmed) { + return back()->with('error', 'Mobil ini sudah terjual, transaksi pending lain tidak bisa dikonfirmasi.'); + } + + return redirect()->route('riwayat')->with('success', 'Pembayaran dikonfirmasi dan mobil ditandai terjual.'); + } + + private function generateTransactionCode() + { + do { + $code = 'TRX' . now()->format('YmdHis') . random_int(10, 99); + } while (Transaction::where('transaction_code', $code)->exists()); + + return $code; + } + + private function transactionPayload(array $payload): array + { + if (! Schema::hasColumn('transactions', 'expires_at')) { + unset($payload['expires_at']); + } + + if (! Schema::hasColumn('transactions', 'reserved_by')) { + unset($payload['reserved_by']); + } + + return $payload; + } + + private function isTransactionOwner(Transaction $transaction): bool + { + return auth()->check() + && $transaction->reserved_by === auth()->user()->username; + } +} diff --git a/web_JMW/app/Http/Kernel.php b/web_JMW/app/Http/Kernel.php new file mode 100644 index 0000000..494c050 --- /dev/null +++ b/web_JMW/app/Http/Kernel.php @@ -0,0 +1,68 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's middleware aliases. + * + * Aliases may be used instead of class names to conveniently assign middleware to routes and groups. + * + * @var array + */ + protected $middlewareAliases = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, + 'signed' => \App\Http\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/web_JMW/app/Http/Middleware/Authenticate.php b/web_JMW/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..d4ef644 --- /dev/null +++ b/web_JMW/app/Http/Middleware/Authenticate.php @@ -0,0 +1,17 @@ +expectsJson() ? null : route('login'); + } +} diff --git a/web_JMW/app/Http/Middleware/EncryptCookies.php b/web_JMW/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/web_JMW/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/web_JMW/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/web_JMW/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/web_JMW/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/web_JMW/app/Http/Middleware/RedirectIfAuthenticated.php b/web_JMW/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..afc78c4 --- /dev/null +++ b/web_JMW/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,30 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/web_JMW/app/Http/Middleware/TrimStrings.php b/web_JMW/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/web_JMW/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/web_JMW/app/Http/Middleware/TrustHosts.php b/web_JMW/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..c9c58bd --- /dev/null +++ b/web_JMW/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts(): array + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/web_JMW/app/Http/Middleware/TrustProxies.php b/web_JMW/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/web_JMW/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/web_JMW/app/Http/Middleware/ValidateSignature.php b/web_JMW/app/Http/Middleware/ValidateSignature.php new file mode 100644 index 0000000..093bf64 --- /dev/null +++ b/web_JMW/app/Http/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ + + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/web_JMW/app/Http/Middleware/VerifyCsrfToken.php b/web_JMW/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/web_JMW/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/web_JMW/app/Models/Admin.php b/web_JMW/app/Models/Admin.php new file mode 100644 index 0000000..a860a39 --- /dev/null +++ b/web_JMW/app/Models/Admin.php @@ -0,0 +1,27 @@ +image) { + return asset('storage/' . $this->image); + } + + return asset('images/default-car.svg'); + } + + public function getStatusLabelAttribute() + { + return [ + 'available' => 'Tersedia', + 'reserved' => 'Sedang Dipesan', + 'sold' => 'Terjual', + ][$this->status] ?? ucfirst($this->status); + } + + public static function releaseExpiredReservations(): int + { + if (!Schema::hasColumn('transactions', 'expires_at')) { + return 0; + } + + $expiredCategoryIds = Transaction::where('payment_status', 'pending') + ->whereNotNull('expires_at') + ->where('expires_at', '<=', now()) + ->pluck('category_id') + ->unique() + ->values(); + + $expiredCount = Transaction::where('payment_status', 'pending') + ->whereNotNull('expires_at') + ->where('expires_at', '<=', now()) + ->update(['payment_status' => 'cancelled']); + + static::where('status', 'reserved') + ->whereIn('id', $expiredCategoryIds) + ->whereDoesntHave('transactions', function ($query) { + $query->where('payment_status', 'pending') + ->whereNotNull('expires_at') + ->where('expires_at', '>', now()); + }) + ->update(['status' => 'available']); + + return $expiredCount; + } + + public function isReserved(): bool + { + return $this->status === 'reserved' + && (bool) $this->activeReservation(); + } + + public function activeReservation(): ?Transaction + { + return $this->transactions() + ->where('payment_status', 'pending') + ->whereNotNull('expires_at') + ->where('expires_at', '>', now()) + ->latest() + ->first(); + } + + /** + * Get the users who have favorited this category + */ + public function favoritedBy() + { + return $this->belongsToMany(User::class, 'favorites', 'category_id', 'username', 'id', 'username'); + } + + public function transactions() + { + return $this->hasMany(Transaction::class); + } + + /** + * Check if the category is favorited by a specific user + */ + public function isFavoritedBy($username) + { + return $this->favoritedBy()->where('favorites.username', $username)->exists(); + } +} diff --git a/web_JMW/app/Models/Favorite.php b/web_JMW/app/Models/Favorite.php new file mode 100644 index 0000000..33804bd --- /dev/null +++ b/web_JMW/app/Models/Favorite.php @@ -0,0 +1,32 @@ +belongsTo(User::class, 'username', 'username'); + } + + /** + * Relationship with Category model + */ + public function category() + { + return $this->belongsTo(Category::class, 'category_id', 'id'); + } +} diff --git a/web_JMW/app/Models/Transaction.php b/web_JMW/app/Models/Transaction.php new file mode 100644 index 0000000..1b0713a --- /dev/null +++ b/web_JMW/app/Models/Transaction.php @@ -0,0 +1,55 @@ + 'datetime', + ]; + + public function category() + { + return $this->belongsTo(Category::class); + } + + public function getPaymentMethodLabelAttribute() + { + return [ + 'cash' => 'Tunai', + 'transfer' => 'Transfer Bank', + ][$this->payment_method] ?? ucfirst($this->payment_method); + } + + public function getPaymentStatusLabelAttribute() + { + return [ + 'pending' => 'Pending', + 'paid' => 'Lunas', + 'cancelled' => 'Dibatalkan', + ][$this->payment_status] ?? ucfirst($this->payment_status); + } +} diff --git a/web_JMW/app/Models/User.php b/web_JMW/app/Models/User.php new file mode 100644 index 0000000..8e0c5f3 --- /dev/null +++ b/web_JMW/app/Models/User.php @@ -0,0 +1,73 @@ + + */ + protected $fillable = [ + 'username', + 'email', + 'password', + 'phone_number', + 'role', + 'email_verified_at', + 'login_otp', + 'login_otp_expires_at', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + 'login_otp_expires_at' => 'datetime', + 'password' => 'hashed', + ]; + + /** + * Get the user's favorite cars + */ + public function favorites() + { + return $this->hasMany(Favorite::class, 'username', 'username'); + } + + /** + * Get the categories that the user has favorited + */ + public function favoriteCategories() + { + return $this->belongsToMany(Category::class, 'favorites', 'username', 'category_id', 'username', 'id'); + } + +} diff --git a/web_JMW/app/Notifications/LoginOtpNotification.php b/web_JMW/app/Notifications/LoginOtpNotification.php new file mode 100644 index 0000000..5237926 --- /dev/null +++ b/web_JMW/app/Notifications/LoginOtpNotification.php @@ -0,0 +1,41 @@ + + */ + public function via(object $notifiable): array + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + */ + public function toMail(object $notifiable): MailMessage + { + return (new MailMessage) + ->subject('Kode OTP Login JMW Showroom') + ->greeting('Halo ' . $notifiable->username . ',') + ->line('Gunakan kode OTP berikut untuk menyelesaikan login Anda:') + ->line($this->otp) + ->line('Kode ini berlaku selama 5 menit.') + ->line('Jika Anda tidak mencoba login, abaikan email ini.') + ->salutation('Salam, Tim JMW Showroom'); + } +} diff --git a/web_JMW/app/Notifications/VerifyEmailNotification.php b/web_JMW/app/Notifications/VerifyEmailNotification.php new file mode 100644 index 0000000..71f3b4a --- /dev/null +++ b/web_JMW/app/Notifications/VerifyEmailNotification.php @@ -0,0 +1,68 @@ + + */ + public function via(object $notifiable): array + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + */ + public function toMail(object $notifiable): MailMessage + { + $verificationUrl = $this->verificationUrl($notifiable); + + return (new MailMessage) + ->subject('Verifikasi Email Anda') + ->greeting('Halo ' . $notifiable->name . ',') + ->line('Terima kasih telah mendaftar di Marketplace Mobil Bekas!') + ->line('Silakan klik tombol di bawah untuk memverifikasi email Anda:') + ->action('Verifikasi Email', $verificationUrl) + ->line('Jika Anda tidak melakukan registrasi, abaikan email ini.') + ->salutation('Salam, Tim Marketplace Mobil Bekas'); + } + + /** + * Get the verification URL for the user. + */ + protected function verificationUrl($notifiable): string + { + return URL::temporarySignedRoute( + 'verification.verify', + Carbon::now()->addMinutes(60), + [ + 'id' => $notifiable->getKey(), + 'hash' => sha1($notifiable->getEmailForVerification()), + ] + ); + } + + /** + * Get the array representation of the notification. + * + * @return array + */ + public function toArray(object $notifiable): array + { + return [ + // + ]; + } +} diff --git a/web_JMW/app/Providers/AppServiceProvider.php b/web_JMW/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..922235d --- /dev/null +++ b/web_JMW/app/Providers/AppServiceProvider.php @@ -0,0 +1,31 @@ + + */ + protected $policies = [ + // + ]; + + /** + * Register any authentication / authorization services. + */ + public function boot(): void + { + // + } +} diff --git a/web_JMW/app/Providers/BroadcastServiceProvider.php b/web_JMW/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..2be04f5 --- /dev/null +++ b/web_JMW/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,19 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + */ + public function boot(): void + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + */ + public function shouldDiscoverEvents(): bool + { + return false; + } +} diff --git a/web_JMW/app/Providers/RouteServiceProvider.php b/web_JMW/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..025e874 --- /dev/null +++ b/web_JMW/app/Providers/RouteServiceProvider.php @@ -0,0 +1,40 @@ +by($request->user()?->id ?: $request->ip()); + }); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } +} diff --git a/web_JMW/app/Services/CarRecommendationService.php b/web_JMW/app/Services/CarRecommendationService.php new file mode 100644 index 0000000..1dfcaf3 --- /dev/null +++ b/web_JMW/app/Services/CarRecommendationService.php @@ -0,0 +1,161 @@ +positiveInt($criteria['year'] ?? null); + $mesinCc = $this->positiveInt($criteria['mesin_cc'] ?? null); + + try { + $filters = [ + 'toleransi_harga_percent' => self::PRICE_TOLERANCE_PERCENT, + 'jumlah_cluster' => 4, + ]; + + if ($year) { + $filters['tahun_min'] = $year; + } + + $preferences = []; + if ($mesinCc) { + $preferences['mesin_cc'] = $mesinCc; + } + + $response = Http::timeout(config('services.car_recommendation.timeout', 3)) + ->post(rtrim(config('services.car_recommendation.base_url'), '/') . '/recommend', [ + 'budget' => $budget, + 'limit' => $limit, + 'strategi' => 'harga_pas', + 'preferences' => $preferences, + 'filter' => $filters, + ]); + + if ($response->failed()) { + return $this->fallback($budget, $criteria); + } + + $payload = $response->json(); + $cars = $this->mapRecommendationsToCategories($payload['recommendations'] ?? []); + + if ($cars->isEmpty()) { + return $this->fallback($budget, $criteria); + } + + return [ + 'cars' => $cars, + 'source' => 'python_kmeans', + 'meta' => $payload['model'] ?? null, + 'has_exact_budget_match' => (bool) data_get($payload, 'model.exact_budget_match', false), + ]; + } catch (Throwable $exception) { + return $this->fallback($budget, $criteria); + } + } + + public function fallback(float $budget, array $criteria = []): array + { + $year = $this->positiveInt($criteria['year'] ?? null); + $mesinCc = $this->positiveInt($criteria['mesin_cc'] ?? null); + + $baseQuery = Category::where('status', 'available'); + + if ($year) { + $baseQuery->where('year', '>=', $year); + } + + if ($mesinCc) { + $engineTolerance = 250; + $baseQuery->whereBetween('mesin_cc', [$mesinCc - $engineTolerance, $mesinCc + $engineTolerance]); + } + + $exactMatches = (clone $baseQuery) + ->where('price', $budget) + ->orderBy('year', 'desc') + ->get(); + + if ($exactMatches->isNotEmpty()) { + return [ + 'cars' => $exactMatches, + 'source' => 'laravel_fallback', + 'meta' => null, + 'has_exact_budget_match' => true, + ]; + } + + $minimumPrice = $budget * (1 - (self::PRICE_TOLERANCE_PERCENT / 100)); + + return [ + 'cars' => (clone $baseQuery) + ->where('price', '>', 0) + ->where('price', '>=', $minimumPrice) + ->where('price', '<=', $budget) + ->orderByRaw('ABS(price - ?) ASC', [$budget]) + ->when($mesinCc, fn ($query) => $query->orderByRaw('ABS(mesin_cc - ?) ASC', [$mesinCc])) + ->orderBy('year', 'desc') + ->get(), + 'source' => 'laravel_fallback', + 'meta' => null, + 'has_exact_budget_match' => false, + ]; + } + + private function mapRecommendationsToCategories(array $recommendations): Collection + { + $categories = Category::where('status', 'available')->get(); + $matched = collect(); + + foreach ($recommendations as $recommendation) { + $category = $this->findMatchingCategory($categories, $recommendation, $matched->pluck('id')->all()); + + if ($category) { + $matched->push($category); + } + } + + return $matched; + } + + private function findMatchingCategory(Collection $categories, array $recommendation, array $usedIds): ?Category + { + $name = $this->normalize($recommendation['nama'] ?? ''); + $year = (int) ($recommendation['tahun'] ?? 0); + $price = (float) ($recommendation['harga'] ?? 0); + + return $categories->first(function (Category $category) use ($name, $year, $price, $usedIds) { + return ! in_array($category->id, $usedIds, true) + && $this->normalize($category->name) === $name + && (int) $category->year === $year + && (float) $category->price === $price; + }) ?? $categories->first(function (Category $category) use ($name, $year, $usedIds) { + return ! in_array($category->id, $usedIds, true) + && $this->normalize($category->name) === $name + && (int) $category->year === $year; + }); + } + + private function normalize(string $value): string + { + return preg_replace('/\s+/', ' ', strtolower(trim($value))) ?? ''; + } + + private function positiveInt(mixed $value): ?int + { + if (! is_numeric($value)) { + return null; + } + + $value = (int) $value; + + return $value > 0 ? $value : null; + } +} diff --git a/web_JMW/app/Services/WhatsAppBusinessService.php b/web_JMW/app/Services/WhatsAppBusinessService.php new file mode 100644 index 0000000..d7374d2 --- /dev/null +++ b/web_JMW/app/Services/WhatsAppBusinessService.php @@ -0,0 +1,285 @@ +adminRecipient()); + } + + /** + * Send a car notification to the admin via WhatsApp Cloud API. + * + * @param \App\Models\Category $category + * @param \App\Models\User|null $customer + * @return array + */ + public function sendCarNotificationToAdmin(Category $category, ?User $customer = null) + { + if (!$this->isConfigured()) { + return [ + 'success' => false, + 'message' => 'WhatsApp Business API belum dikonfigurasi.', + ]; + } + + $recipient = $this->formatPhoneNumber($this->adminRecipient()); + $endpoint = $this->graphEndpoint('messages'); + + $imageUrl = $this->getCarImageUrl($category); + $mediaId = $this->uploadCarImage($category); + $canSendImage = filled($mediaId) || $this->isPublicMediaUrl($imageUrl); + $caption = $this->buildCaption($category, $customer, $canSendImage); + + $payload = [ + 'messaging_product' => 'whatsapp', + 'recipient_type' => 'individual', + 'to' => $recipient, + 'type' => $canSendImage ? 'image' : 'text', + ]; + + if ($mediaId) { + $payload['image'] = [ + 'id' => $mediaId, + 'caption' => $caption, + ]; + } elseif ($canSendImage) { + $payload['image'] = [ + 'link' => $imageUrl, + 'caption' => $caption, + ]; + } else { + $payload['text'] = [ + 'preview_url' => false, + 'body' => $caption, + ]; + } + + $response = Http::withToken(config('services.whatsapp.token')) + ->acceptJson() + ->post($endpoint, $payload); + + if ($response->successful()) { + return [ + 'success' => true, + 'message' => $canSendImage + ? 'Notifikasi gambar katalog mobil berhasil dikirim ke admin.' + : 'Notifikasi teks berhasil dikirim ke admin.', + 'data' => $response->json(), + ]; + } + + Log::warning('Gagal mengirim WhatsApp Business notification.', [ + 'category_id' => $category->id, + 'status' => $response->status(), + 'response' => $response->json() ?: $response->body(), + ]); + + return [ + 'success' => false, + 'message' => 'Gagal mengirim notifikasi WhatsApp Business ke admin.', + 'error' => $response->json() ?: $response->body(), + ]; + } + + /** + * Build message caption sent to admin. + * + * @param \App\Models\Category $category + * @param \App\Models\User|null $customer + * @param bool $withImage + * @return string + */ + private function buildCaption(Category $category, ?User $customer = null, $withImage = true) + { + $lines = [ + 'Customer tertarik dengan mobil katalog ini.', + 'Mobil: ' . $category->name, + 'Harga: Rp ' . number_format((float) $category->price, 0, ',', '.'), + 'Tahun: ' . ($category->year ?: '-'), + ]; + + if ($customer) { + $lines[] = 'Username customer: ' . $customer->username; + $lines[] = 'Email customer: ' . $customer->email; + if ($customer->phone_number) { + $lines[] = 'No. HP customer: ' . $customer->phone_number; + } + } else { + $lines[] = 'Customer: pengunjung belum login'; + } + + $detailUrl = route('mobil-bekas.detail', ['category' => $category->id]); + $lines[] = 'Link detail: ' . $detailUrl; + if (!$withImage) { + $lines[] = 'Link foto katalog: ' . ($this->getCarImageUrl($category) ?: '-'); + $lines[] = 'Catatan: gambar dikirim sebagai teks karena file katalog belum bisa dikirim sebagai media.'; + } + + return implode("\n", $lines); + } + + /** + * Upload the local catalog image to WhatsApp and return its media ID. + * + * @param \App\Models\Category $category + * @return string|null + */ + private function uploadCarImage(Category $category) + { + if (!$category->image || !Storage::disk('public')->exists($category->image)) { + return null; + } + + $path = Storage::disk('public')->path($category->image); + $mimeType = Storage::disk('public')->mimeType($category->image) ?: 'image/jpeg'; + + if (!str_starts_with($mimeType, 'image/')) { + return null; + } + + $handle = fopen($path, 'r'); + + if (!$handle) { + return null; + } + + try { + $response = Http::withToken(config('services.whatsapp.token')) + ->acceptJson() + ->attach('file', $handle, basename($path), ['Content-Type' => $mimeType]) + ->post($this->graphEndpoint('media'), [ + 'messaging_product' => 'whatsapp', + 'type' => $mimeType, + ]); + } finally { + fclose($handle); + } + + if ($response->successful()) { + return $response->json('id'); + } + + Log::warning('Gagal upload media WhatsApp Business.', [ + 'category_id' => $category->id, + 'status' => $response->status(), + 'response' => $response->json() ?: $response->body(), + ]); + + return null; + } + + /** + * Get admin WhatsApp recipient from the dedicated WhatsApp setting, + * with fallback to the existing direct chat number. + * + * @return string|null + */ + private function adminRecipient() + { + return config('services.whatsapp.admin_recipient'); + } + + /** + * Get a public absolute image URL if the car has an image. + * + * @param \App\Models\Category $category + * @return string|null + */ + private function getCarImageUrl(Category $category) + { + if (!$category->image) { + return null; + } + + return $this->publicUrl(Storage::disk('public')->url($category->image)); + } + + /** + * Check whether the media URL is public enough for WhatsApp to fetch. + * + * @param string|null $url + * @return bool + */ + private function isPublicMediaUrl($url) + { + if (!$url) { + return false; + } + + return !str_contains($url, 'localhost') + && !str_contains($url, '127.0.0.1'); + } + + /** + * Build an absolute URL from APP_URL so the Cloud API can fetch media. + * + * @param string $path + * @return string + */ + private function publicUrl($path) + { + if (filter_var($path, FILTER_VALIDATE_URL)) { + return $path; + } + + return rtrim(config('app.url'), '/') . '/' . ltrim($path, '/'); + } + + /** + * Build WhatsApp Graph API endpoint for the configured phone number. + * + * @param string $path + * @return string + */ + private function graphEndpoint($path) + { + return rtrim(config('services.whatsapp.base_url'), '/') + . '/' + . config('services.whatsapp.api_version') + . '/' + . config('services.whatsapp.phone_number_id') + . '/' + . ltrim($path, '/'); + } + + /** + * Normalize phone number to WhatsApp format. + * + * @param string $phoneNumber + * @return string + */ + private function formatPhoneNumber($phoneNumber) + { + $phoneNumber = preg_replace('/[^0-9]/', '', $phoneNumber); + + if (strlen($phoneNumber) === 10 && substr($phoneNumber, 0, 1) === '8') { + return '62' . $phoneNumber; + } + + if (strlen($phoneNumber) >= 11 && substr($phoneNumber, 0, 2) === '08') { + return '62' . substr($phoneNumber, 1); + } + + if (substr($phoneNumber, 0, 2) !== '62') { + return '62' . $phoneNumber; + } + + return $phoneNumber; + } +} diff --git a/web_JMW/artisan b/web_JMW/artisan new file mode 100644 index 0000000..67a3329 --- /dev/null +++ b/web_JMW/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/web_JMW/bootstrap/app.php b/web_JMW/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/web_JMW/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/web_JMW/bootstrap/cache/.gitignore b/web_JMW/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web_JMW/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web_JMW/build-assets.js b/web_JMW/build-assets.js new file mode 100644 index 0000000..1545765 --- /dev/null +++ b/web_JMW/build-assets.js @@ -0,0 +1,48 @@ +#!/usr/bin/env node +/** + * Build Assets & Upload to FTP + * 1. npm install (if needed) + * 2. npm run build + * 3. Upload public/ to remote server + */ + +const fs = require('fs'); +const path = require('path'); +const { exec } = require('child_process'); + +const PROJECT_DIR = __dirname; +const BUILD_DIR = path.join(PROJECT_DIR, 'public'); + +console.log('=== ASSET BUILD & UPLOAD SCRIPT ===\n'); + +// Check if node_modules exists +if (!fs.existsSync(path.join(PROJECT_DIR, 'node_modules'))) { + console.log('📦 Installing dependencies...'); + exec('npm install', { cwd: PROJECT_DIR }, (err, stdout, stderr) => { + if (err) { + console.error('❌ npm install failed:', err); + process.exit(1); + } + console.log('✅ Dependencies installed\n'); + runBuild(); + }); +} else { + runBuild(); +} + +function runBuild() { + console.log('🔨 Building assets with Vite...'); + exec('npm run build', { cwd: PROJECT_DIR }, (err, stdout, stderr) => { + if (err) { + console.error('❌ Build failed:', err); + process.exit(1); + } + console.log(stdout); + console.log('✅ Assets built successfully!\n'); + console.log('📁 Built files are in:', BUILD_DIR); + console.log('\n📋 Next steps:'); + console.log('1. Upload public/ folder to remote server via FTP'); + console.log('2. Import tamyhost_E31231762.sql via phpMyAdmin'); + console.log('3. Test site at https://ta.myhost.id/E31231762/\n'); + }); +} diff --git a/web_JMW/composer.json b/web_JMW/composer.json new file mode 100644 index 0000000..8a3d72d --- /dev/null +++ b/web_JMW/composer.json @@ -0,0 +1,66 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The skeleton application for the Laravel framework.", + "keywords": ["laravel", "framework"], + "license": "MIT", + "require": { + "php": "^8.1", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^10.10", + "laravel/sanctum": "^3.3", + "laravel/tinker": "^2.8" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "laravel/pint": "^1.0", + "laravel/sail": "^1.18", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^7.0", + "phpunit/phpunit": "^10.1", + "spatie/laravel-ignition": "^2.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true, + "php-http/discovery": true + } + }, + "minimum-stability": "stable", + "prefer-stable": true +} diff --git a/web_JMW/composer.lock b/web_JMW/composer.lock new file mode 100644 index 0000000..73d4416 --- /dev/null +++ b/web_JMW/composer.lock @@ -0,0 +1,8212 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9c491b8531eec05ba41a11d9276a5749", + "packages": [ + { + "name": "brick/math", + "version": "0.12.3", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-02-28T13:11:00+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<3.7.0 || >=4.0.0" + }, + "require-dev": { + "doctrine/dbal": "^3.7.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2023-12-11T17:09:12+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "1b2de7f4a468165dca07b142240733a1973e766d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/1b2de7f4a468165dca07b142240733a1973e766d", + "reference": "1b2de7f4a468165dca07b142240733a1973e766d", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2025-10-31T18:36:32+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-12-03T09:33:47+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:43:20+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.10.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-08-23T22:36:01+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "481557b130ef3790cf82b713667b43030dc9c957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2026-03-10T16:41:02+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:27:06+00:00" + }, + { + "name": "laravel/framework", + "version": "10.50.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "3ff39b7a9b83e633383ec9b019827ed54b6d38bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/3ff39b7a9b83e633383ec9b019827ed54b6d38bc", + "reference": "3ff39b7a9b83e633383ec9b019827ed54b6d38bc", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.9", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.67", + "nunomaduro/termwind": "^1.13", + "php": "^8.1", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^6.2", + "symfony/error-handler": "^6.2", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.4", + "symfony/http-kernel": "^6.2", + "symfony/mailer": "^6.2", + "symfony/mime": "^6.2", + "symfony/process": "^6.2", + "symfony/routing": "^6.2", + "symfony/uid": "^6.2", + "symfony/var-dumper": "^6.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "carbonphp/carbon-doctrine-types": ">=3.0", + "doctrine/dbal": ">=4.0", + "mockery/mockery": "1.6.8", + "phpunit/phpunit": ">=11.0.0", + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^3.5.1", + "ext-gmp": "*", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^8.23.4", + "pda/pheanstalk": "^4.0", + "phpstan/phpstan": "~1.11.11", + "phpunit/phpunit": "^10.0.7", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4", + "symfony/psr-http-message-bridge": "^2.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "predis/predis": "Required to use the predis connector (^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2026-02-15T14:12:07+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.1.25", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.25" + }, + "time": "2024-08-12T22:06:33+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.21|^10.0", + "illuminate/contracts": "^9.21|^10.0", + "illuminate/database": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "php": "^8.0.2" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.28.2|^8.8.3", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.6" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2023-12-19T18:44:48+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2024-11-14T18:34:49+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.11.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/c9f80cc835649b5c1842898fb043f8cc098dd741", + "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.11.1" + }, + "time": "2026-02-06T14:12:35+00:00" + }, + { + "name": "league/commonmark", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.9-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2026-03-19T13:16:38+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.33.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "570b8871e0ce693764434b29154c54b434905350" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/570b8871e0ce693764434b29154c54b434905350", + "reference": "570b8871e0ce693764434b29154c54b434905350", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.33.0" + }, + "time": "2026-03-25T07:59:30+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + }, + "time": "2026-01-23T15:30:45+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-01-02T08:56:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.73.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "<6", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2025-01-08T20:10:23+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.5" + }, + "time": "2026-02-23T03:47:12+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.10", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "2778deb6aab136c8db4ed1f4d6e9f465ca2dbee3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/2778deb6aab136c8db4ed1f4d6e9f465ca2dbee3", + "reference": "2778deb6aab136c8db4ed1f4d6e9f465ca2dbee3", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.10" + }, + "time": "2025-12-01T17:30:42+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/5369ef84d8142c1d87e4ec278711d4ece3cbf301", + "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.4.15" + }, + "require-dev": { + "illuminate/console": "^10.48.24", + "illuminate/support": "^10.48.24", + "laravel/pint": "^1.18.2", + "pestphp/pest": "^2.36.0", + "pestphp/pest-plugin-mock": "2.0.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^6.4.15", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.17.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2024-11-21T10:36:35+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:41:33+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.22", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f", + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" + }, + "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.22" + }, + "time": "2026-03-22T23:03:24+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "8429c78ca35a09f27565311b98101e2826affde0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.2" + }, + "time": "2025-12-14T04:43:48+00:00" + }, + { + "name": "symfony/console", + "version": "v6.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9f481cfb580db8bcecc9b2d4c63f3e13df022ad5", + "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-27T15:30:51+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.4.34", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "b0314c186f1464de048cce58979ff1625ca88bbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0314c186f1464de048cce58979ff1625ca88bbb", + "reference": "b0314c186f1464de048cce58979ff1625ca88bbb", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-16T08:37:21+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "2ea68f0e1835ad6a126f93bbc14cd236c10ab361" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/2ea68f0e1835ad6a126f93bbc14cd236c10ab361", + "reference": "2ea68f0e1835ad6a126f93bbc14cd236c10ab361", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-10T15:56:14+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "fc828863e26ceec86e2513b5e46aa0b149d76b69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fc828863e26ceec86e2513b5e46aa0b149d76b69", + "reference": "fc828863e26ceec86e2513b5e46aa0b149d76b69", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-30T11:18:01+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.4.34", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "9590e86be1d1c57bfbb16d0dd040345378c20896" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/9590e86be1d1c57bfbb16d0dd040345378c20896", + "reference": "9590e86be1d1c57bfbb16d0dd040345378c20896", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-28T15:16:37+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.4.35", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "cffffd0a2c037117b742b4f8b379a22a2a33f6d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cffffd0a2c037117b742b4f8b379a22a2a33f6d2", + "reference": "cffffd0a2c037117b742b4f8b379a22a2a33f6d2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.4.35" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-06T11:15:58+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "4087ec02119de450e9ebb60806d69c6bb8c6e468" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4087ec02119de450e9ebb60806d69c6bb8c6e468", + "reference": "4087ec02119de450e9ebb60806d69c6bb8c6e468", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4.1|^7.0.1", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-31T20:38:11+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.4.34", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "01b846f48e53ee4096692a383637a1fa4d577301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/01b846f48e53ee4096692a383637a1fa4d577301", + "reference": "01b846f48e53ee4096692a383637a1fa4d577301", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-24T09:34:36+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "9c31726137c70798f815fb98293ffb8a2a47694c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/9c31726137c70798f815fb98293ffb8a2a47694c", + "reference": "9c31726137c70798f815fb98293ffb8a2a47694c", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.4|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-30T09:31:23+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v6.4.33", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "c46e854e79b52d07666e43924a20cb6dc546644e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/c46e854e79b52d07666e43924a20cb6dc546644e", + "reference": "c46e854e79b52d07666e43924a20cb6dc546644e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.4.33" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-23T16:02:12+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.4.34", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "5ab3a3e1a03535ec5ca6ce2d39e4369a1096ae47" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/5ab3a3e1a03535ec5ca6ce2d39e4369a1096ae47", + "reference": "5ab3a3e1a03535ec5ca6ce2d39e4369a1096ae47", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-24T17:34:50+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:30:57+00:00" + }, + { + "name": "symfony/string", + "version": "v6.4.34", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/2adaf4106f2ef4c67271971bde6d3fe0a6936432", + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-08T20:44:54+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.4.34", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d07d117db41341511671b0a1a2be48f2772189ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d07d117db41341511671b0a1a2be48f2772189ce", + "reference": "d07d117db41341511671b0a1a2be48f2772189ce", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-16T20:44:03+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "6b973c385f00341b246f697d82dc01a09107acdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/6b973c385f00341b246f697d82dc01a09107acdd", + "reference": "6b973c385f00341b246f697d82dc01a09107acdd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-23T15:07:59+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "7c8ad9ce4faf6c8a99948e70ce02b601a0439782" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7c8ad9ce4faf6c8a99948e70ce02b601a0439782", + "reference": "7c8ad9ce4faf6c8a99948e70ce02b601a0439782", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-30T15:36:00+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.4", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:49:13+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2024-11-21T01:49:47+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b", + "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.66.0", + "illuminate/view": "^10.48.25", + "larastan/larastan": "^2.9.12", + "laravel-zero/framework": "^10.48.25", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^1.17.0", + "pestphp/pest": "^2.36.0" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2025-01-14T16:20:53+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.56.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "f43426bb42a1cb7a51a3861d9138063e54766d28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/f43426bb42a1cb7a51a3861d9138063e54766d28", + "reference": "f43426bb42a1cb7a51a3861d9138063e54766d28", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0|^8.0", + "symfony/yaml": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0", + "phpstan/phpstan": "^2.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2026-04-01T15:17:32+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v7.12.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/995245421d3d7593a6960822063bdba4f5d7cf1a", + "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.17.0", + "nunomaduro/termwind": "^1.17.0", + "php": "^8.1.0", + "symfony/console": "^6.4.17" + }, + "conflict": { + "laravel/framework": ">=11.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.4.8", + "laravel/framework": "^10.48.29", + "laravel/pint": "^1.21.2", + "laravel/sail": "^1.41.0", + "laravel/sanctum": "^3.3.3", + "laravel/tinker": "^2.10.1", + "nunomaduro/larastan": "^2.10.0", + "orchestra/testbench-core": "^8.35.0", + "pestphp/pest": "^2.36.0", + "phpunit/phpunit": "^10.5.36", + "sebastian/environment": "^6.1.0", + "spatie/laravel-ignition": "^2.9.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2025-03-14T22:35:49+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.16", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.63", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "33198268dad71e926626b618f3ec3966661e4d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", + "reference": "33198268dad71e926626b618f3ec3966661e4d90", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.5", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.4", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-01-27T05:48:37+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-01-24T09:25:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:47:14+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "0735b90f4da94969541dac1da743446e276defa6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:09:11+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-10T07:50:56+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/8ffe78be5ed355b5009e3dd989d183433e9a5adc", + "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1|^6.0|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2026-03-11T13:48:28+00:00" + }, + { + "name": "spatie/error-solutions", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/spatie/error-solutions.git", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "illuminate/broadcasting": "^10.0|^11.0|^12.0", + "illuminate/cache": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "livewire/livewire": "^2.11|^3.5.20", + "openai-php/client": "^0.10.1", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "phpstan/phpstan": "^2.1", + "psr/simple-cache": "^3.0", + "psr/simple-cache-implementation": "^3.0", + "spatie/ray": "^1.28", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "legacy/ignition", + "Spatie\\ErrorSolutions\\": "src", + "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "This is my package error-solutions", + "homepage": "https://github.com/spatie/error-solutions", + "keywords": [ + "error-solutions", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/error-solutions/issues", + "source": "https://github.com/spatie/error-solutions/tree/1.1.3" + }, + "funding": [ + { + "url": "https://github.com/Spatie", + "type": "github" + } + ], + "time": "2025-02-14T12:29:50+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "fb3ffb946675dba811fbde9122224db2f84daca9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/fb3ffb946675dba811fbde9122224db2f84daca9", + "reference": "fb3ffb946675dba811fbde9122224db2f84daca9", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.0", + "spatie/backtrace": "^1.6.1", + "symfony/http-foundation": "^5.2|^6.0|^7.0|^8.0", + "symfony/mime": "^5.2|^6.0|^7.0|^8.0", + "symfony/process": "^5.2|^6.0|^7.0|^8.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0|^8.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/pest-plugin-snapshots": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2026-03-17T08:06:16+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/b59385bb7aa24dae81bcc15850ebecfda7b40838", + "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/backtrace": "^1.7.1", + "spatie/error-solutions": "^1.1.2", + "spatie/flare-client-php": "^1.9", + "symfony/console": "^5.4.42|^6.0|^7.0|^8.0", + "symfony/http-foundation": "^5.4.42|^6.0|^7.0|^8.0", + "symfony/mime": "^5.4.42|^6.0|^7.0|^8.0", + "symfony/var-dumper": "^5.4.42|^6.0|^7.0|^8.0" + }, + "require-dev": { + "illuminate/cache": "^9.52|^10.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20|^2.0|^3.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "psr/simple-cache-implementation": "*", + "symfony/cache": "^5.4.38|^6.0|^7.0|^8.0", + "symfony/process": "^5.4.35|^6.0|^7.0|^8.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2026-03-17T10:51:08+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0|^11.0|^12.0", + "php": "^8.1", + "spatie/ignition": "^1.15", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" + }, + "require-dev": { + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1|^0.10", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.34|^3.7", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", + "phpstan/phpstan-phpunit": "^1.3.16|^2.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + }, + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-02-20T13:13:55+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.4.34", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "7bca30dabed7900a08c5ad4f1d6483f881a64d0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7bca30dabed7900a08c5ad4f1d6483f881a64d0f", + "reference": "7bca30dabed7900a08c5ad4f1d6483f881a64d0f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-06T18:32:11+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.1" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/web_JMW/config/app.php b/web_JMW/config/app.php new file mode 100644 index 0000000..9207160 --- /dev/null +++ b/web_JMW/config/app.php @@ -0,0 +1,188 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => 'file', + // 'store' => 'redis', + ], + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => ServiceProvider::defaultProviders()->merge([ + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + ])->toArray(), + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + // 'Example' => App\Facades\Example::class, + ])->toArray(), + +]; diff --git a/web_JMW/config/auth.php b/web_JMW/config/auth.php new file mode 100644 index 0000000..d0f51a7 --- /dev/null +++ b/web_JMW/config/auth.php @@ -0,0 +1,125 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + + 'admin' => [ + 'driver' => 'session', + 'provider' => 'admins', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + 'admins' => [ + 'driver' => 'eloquent', + 'model' => App\Models\Admin::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_reset_tokens', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/web_JMW/config/broadcasting.php b/web_JMW/config/broadcasting.php new file mode 100644 index 0000000..2410485 --- /dev/null +++ b/web_JMW/config/broadcasting.php @@ -0,0 +1,71 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/web_JMW/config/cache.php b/web_JMW/config/cache.php new file mode 100644 index 0000000..d4171e2 --- /dev/null +++ b/web_JMW/config/cache.php @@ -0,0 +1,111 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, or DynamoDB cache + | stores there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/web_JMW/config/cors.php b/web_JMW/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/web_JMW/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/web_JMW/config/database.php b/web_JMW/config/database.php new file mode 100644 index 0000000..137ad18 --- /dev/null +++ b/web_JMW/config/database.php @@ -0,0 +1,151 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/web_JMW/config/filesystems.php b/web_JMW/config/filesystems.php new file mode 100644 index 0000000..e9d9dbd --- /dev/null +++ b/web_JMW/config/filesystems.php @@ -0,0 +1,76 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been set up for each driver as an example of the required values. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + 'throw' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/web_JMW/config/hashing.php b/web_JMW/config/hashing.php new file mode 100644 index 0000000..0e8a0bb --- /dev/null +++ b/web_JMW/config/hashing.php @@ -0,0 +1,54 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 12), + 'verify' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + 'verify' => true, + ], + +]; diff --git a/web_JMW/config/logging.php b/web_JMW/config/logging.php new file mode 100644 index 0000000..c44d276 --- /dev/null +++ b/web_JMW/config/logging.php @@ -0,0 +1,131 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => LOG_USER, + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/web_JMW/config/mail.php b/web_JMW/config/mail.php new file mode 100644 index 0000000..e894b2e --- /dev/null +++ b/web_JMW/config/mail.php @@ -0,0 +1,134 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "log", "array", "failover", "roundrobin" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => null, + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/web_JMW/config/queue.php b/web_JMW/config/queue.php new file mode 100644 index 0000000..01c6b05 --- /dev/null +++ b/web_JMW/config/queue.php @@ -0,0 +1,109 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/web_JMW/config/sanctum.php b/web_JMW/config/sanctum.php new file mode 100644 index 0000000..35d75b3 --- /dev/null +++ b/web_JMW/config/sanctum.php @@ -0,0 +1,83 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. This will override any values set in the token's + | "expires_at" attribute, but first-party sessions are not affected. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Token Prefix + |-------------------------------------------------------------------------- + | + | Sanctum can prefix new tokens in order to take advantage of numerous + | security scanning initiatives maintained by open source platforms + | that notify developers if they commit tokens into repositories. + | + | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning + | + */ + + 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + ], + +]; diff --git a/web_JMW/config/services.php b/web_JMW/config/services.php new file mode 100644 index 0000000..b5f9e06 --- /dev/null +++ b/web_JMW/config/services.php @@ -0,0 +1,48 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'whatsapp' => [ + 'base_url' => env('WHATSAPP_API_BASE_URL', 'https://graph.facebook.com'), + 'api_version' => env('WHATSAPP_API_VERSION', 'v23.0'), + 'token' => env('WHATSAPP_ACCESS_TOKEN'), + 'phone_number_id' => env('WHATSAPP_PHONE_NUMBER_ID'), + 'admin_recipient' => env('WHATSAPP_ADMIN_RECIPIENT', env('ADMIN_WHATSAPP_NUMBER')), + 'admin_name' => env('ADMIN_NAME', 'Showroom'), + ], + + 'car_recommendation' => [ + 'base_url' => env('CAR_RECOMMENDATION_API_URL', 'http://127.0.0.1:5000'), + 'timeout' => env('CAR_RECOMMENDATION_API_TIMEOUT', 3), + ], + +]; diff --git a/web_JMW/config/session.php b/web_JMW/config/session.php new file mode 100644 index 0000000..e738cb3 --- /dev/null +++ b/web_JMW/config/session.php @@ -0,0 +1,214 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => false, + +]; diff --git a/web_JMW/config/view.php b/web_JMW/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/web_JMW/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/web_JMW/database/.gitignore b/web_JMW/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/web_JMW/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/web_JMW/database/dataset_final.xls b/web_JMW/database/dataset_final.xls new file mode 100644 index 0000000..e66eed3 --- /dev/null +++ b/web_JMW/database/dataset_final.xls @@ -0,0 +1,406 @@ +merk,model,kategori,tahun,mesin_cc,transmisi,bahan_bakar,Harga,cluster +Toyota,Kijang Innova,mpv,2018,1998,manual,bensin,179000000.0,3 +Daihatsu,Ayla,city car,2011,998,manual,diesel,88000000.0,2 +Honda,Jazz,hatchback,2022,1497,automatic,diesel,186000000.0,2 +Honda,Brio,city car,2014,1199,automatic,bensin,114000000.0,0 +Honda,Brio,city car,2008,1199,manual,diesel,86000000.0,2 +Hyundai,i10,city car,2015,1086,automatic,bensin,115000000.0,0 +Toyota,Rush,suv,2020,1496,manual,bensin,269000000.0,3 +Suzuki,Ertiga,mpv,2013,1462,manual,bensin,173000000.0,3 +KIA,Picanto,city car,2023,1248,automatic,bensin,141000000.0,0 +Toyota,Kijang Innova,mpv,2020,1998,manual,bensin,200000000.0,3 +Mitsubishi,Xpander,mpv,2023,1499,manual,diesel,208000000.0,2 +Toyota,Innova Reborn,mpv,2021,2393,automatic,bensin,185000000.0,0 +Honda,Mobilio,mpv,2015,1497,automatic,bensin,170000000.0,0 +Nissan,Grand Livina,mpv,2011,1498,manual,bensin,158000000.0,3 +Suzuki,Ertiga,mpv,2012,1462,automatic,bensin,141000000.0,0 +Hyundai,i10,city car,2010,1086,automatic,bensin,99000000.0,0 +Honda,Jazz,hatchback,2019,1497,automatic,diesel,164000000.0,2 +Daihatsu,Terios,suv,2016,1496,manual,bensin,253000000.0,3 +Suzuki,Karimun Wagon R,city car,2021,998,automatic,bensin,150000000.0,0 +Daihatsu,Terios,suv,2010,1496,manual,bensin,240000000.0,3 +Suzuki,Karimun Wagon R,city car,2021,998,manual,diesel,143000000.0,2 +Honda,Mobilio,mpv,2022,1497,automatic,bensin,211000000.0,0 +Daihatsu,Terios,suv,2015,1496,manual,bensin,236000000.0,3 +Mitsubishi,Xpander,mpv,2022,1499,automatic,diesel,189000000.0,2 +Toyota,Rush,suv,2019,1496,automatic,bensin,254000000.0,0 +Mitsubishi,Xpander,mpv,2014,1499,automatic,bensin,169000000.0,0 +Honda,Jazz,hatchback,2012,1497,automatic,diesel,144000000.0,2 +Mitsubishi,Pajero Sport,suv,2011,2442,automatic,diesel,223000000.0,2 +Suzuki,Ertiga,mpv,2012,1462,automatic,diesel,148000000.0,2 +Honda,Jazz,hatchback,2011,1497,automatic,bensin,124000000.0,0 +KIA,Picanto,city car,2008,1248,manual,bensin,78000000.0,3 +Suzuki,Karimun Wagon R,city car,2020,998,manual,bensin,132000000.0,3 +Suzuki,Karimun Wagon R,city car,2016,998,manual,diesel,107000000.0,2 +Honda,Jazz,hatchback,2022,1497,automatic,diesel,165000000.0,2 +Toyota,Calya,mpv,2014,1197,manual,bensin,163000000.0,3 +Toyota,Calya,mpv,2012,1197,manual,diesel,154000000.0,2 +Honda,Brio,city car,2019,1199,automatic,bensin,138000000.0,0 +Toyota,Agya,city car,2010,1197,automatic,diesel,101000000.0,2 +Suzuki,Karimun Wagon R,city car,2015,998,manual,diesel,124000000.0,2 +Honda,Brio,city car,2008,1199,automatic,bensin,78000000.0,0 +KIA,Picanto,city car,2022,1248,automatic,diesel,151000000.0,2 +Toyota,Avanza,mpv,2019,1496,manual,diesel,178000000.0,2 +Daihatsu,Terios,suv,2015,1496,automatic,bensin,234000000.0,0 +Suzuki,Karimun Wagon R,city car,2009,998,automatic,bensin,87000000.0,0 +Toyota,Innova Reborn,mpv,2012,2393,automatic,bensin,162000000.0,0 +Suzuki,Ertiga,mpv,2021,1462,automatic,bensin,193000000.0,0 +Nissan,Grand Livina,mpv,2019,1498,automatic,diesel,199000000.0,2 +Daihatsu,Terios,suv,2023,1496,manual,bensin,265000000.0,3 +Toyota,Kijang Innova,mpv,2018,1998,manual,diesel,192000000.0,2 +Mitsubishi,Pajero Sport,suv,2013,2442,automatic,bensin,254000000.0,0 +Hyundai,i10,city car,2011,1086,manual,bensin,114000000.0,3 +Toyota,Avanza,mpv,2008,1496,manual,diesel,130000000.0,2 +Toyota,Kijang Innova,mpv,2019,1998,manual,diesel,174000000.0,2 +Suzuki,XL7,suv,2019,1462,automatic,diesel,274000000.0,2 +Suzuki,XL7,suv,2013,1462,automatic,diesel,249000000.0,2 +Daihatsu,Ayla,city car,2012,998,automatic,bensin,97000000.0,0 +KIA,Picanto,city car,2012,1248,automatic,bensin,99000000.0,0 +Suzuki,Ertiga,mpv,2010,1462,automatic,bensin,135000000.0,0 +Daihatsu,Ayla,city car,2017,998,manual,diesel,128000000.0,2 +Toyota,Calya,mpv,2013,1197,automatic,bensin,164000000.0,0 +Toyota,Agya,city car,2014,1197,automatic,diesel,129000000.0,2 +Daihatsu,Xenia,mpv,2023,1329,automatic,bensin,206000000.0,0 +Suzuki,Karimun Wagon R,city car,2011,998,manual,diesel,91000000.0,2 +Mitsubishi,Pajero Sport,suv,2011,2442,automatic,diesel,229000000.0,2 +Mitsubishi,Pajero Sport,suv,2020,2442,manual,bensin,259000000.0,3 +Toyota,Avanza,mpv,2008,1496,automatic,diesel,149000000.0,2 +Honda,Brio,city car,2012,1199,manual,diesel,99000000.0,2 +Toyota,Calya,mpv,2013,1197,automatic,diesel,147000000.0,2 +Toyota,Avanza,mpv,2008,1496,manual,diesel,126000000.0,2 +Toyota,Innova Reborn,mpv,2023,2393,manual,diesel,195000000.0,2 +Toyota,Innova Reborn,mpv,2021,2393,manual,bensin,188000000.0,3 +Toyota,Calya,mpv,2010,1197,manual,diesel,160000000.0,2 +Honda,Jazz,hatchback,2020,1497,automatic,diesel,168000000.0,2 +Toyota,Kijang Innova,mpv,2010,1998,manual,bensin,154000000.0,3 +Daihatsu,Xenia,mpv,2016,1329,manual,bensin,158000000.0,3 +Toyota,Rush,suv,2013,1496,manual,bensin,236000000.0,3 +Suzuki,Ertiga,mpv,2015,1462,automatic,bensin,169000000.0,0 +Toyota,Avanza,mpv,2021,1496,automatic,diesel,205000000.0,2 +Suzuki,Ertiga,mpv,2018,1462,automatic,diesel,190000000.0,2 +Toyota,Avanza,mpv,2022,1496,automatic,bensin,200000000.0,0 +Toyota,Calya,mpv,2013,1197,manual,bensin,169000000.0,3 +Nissan,Grand Livina,mpv,2023,1498,automatic,diesel,212000000.0,2 +Toyota,Agya,city car,2011,1197,automatic,bensin,99000000.0,0 +Suzuki,XL7,suv,2013,1462,manual,diesel,230000000.0,2 +Suzuki,Ertiga,mpv,2023,1462,automatic,diesel,188000000.0,2 +Toyota,Calya,mpv,2023,1197,automatic,diesel,202000000.0,2 +Honda,Mobilio,mpv,2008,1497,manual,bensin,149000000.0,3 +Suzuki,Karimun Wagon R,city car,2014,998,automatic,diesel,112000000.0,2 +KIA,Picanto,city car,2009,1248,automatic,diesel,99000000.0,2 +Mitsubishi,Pajero Sport,suv,2010,2442,automatic,bensin,228000000.0,0 +Suzuki,Karimun Wagon R,city car,2012,998,manual,bensin,98000000.0,3 +Nissan,Grand Livina,mpv,2008,1498,manual,diesel,132000000.0,2 +Daihatsu,Terios,suv,2023,1496,manual,diesel,269000000.0,2 +Honda,Jazz,hatchback,2020,1497,manual,bensin,180000000.0,3 +Toyota,Innova Reborn,mpv,2013,2393,automatic,diesel,155000000.0,2 +Suzuki,Ertiga,mpv,2019,1462,automatic,diesel,199000000.0,2 +Honda,Mobilio,mpv,2016,1497,manual,bensin,164000000.0,3 +Honda,Jazz,hatchback,2013,1497,manual,bensin,148000000.0,3 +Toyota,Rush,suv,2013,1496,automatic,bensin,246000000.0,0 +Honda,Brio,city car,2014,1199,automatic,diesel,120000000.0,2 +Suzuki,XL7,suv,2021,1462,manual,bensin,266000000.0,3 +Mitsubishi,Pajero Sport,suv,2019,2442,manual,bensin,255000000.0,3 +Toyota,Avanza,mpv,2020,1496,manual,bensin,194000000.0,3 +Suzuki,XL7,suv,2019,1462,manual,diesel,262000000.0,2 +Honda,Brio,city car,2012,1199,manual,diesel,94000000.0,2 +Toyota,Kijang Innova,mpv,2016,1998,manual,bensin,170000000.0,3 +KIA,Picanto,city car,2023,1248,automatic,bensin,165000000.0,0 +Toyota,Innova Reborn,mpv,2011,2393,automatic,diesel,156000000.0,2 +Daihatsu,Ayla,city car,2009,998,automatic,diesel,104000000.0,2 +Daihatsu,Ayla,city car,2019,998,manual,bensin,148000000.0,3 +Toyota,Agya,city car,2011,1197,manual,diesel,92000000.0,2 +Mitsubishi,Pajero Sport,suv,2008,2442,automatic,diesel,230000000.0,2 +Suzuki,Karimun Wagon R,city car,2012,998,manual,diesel,95000000.0,2 +Mitsubishi,Pajero Sport,suv,2022,2442,manual,bensin,283000000.0,3 +Toyota,Kijang Innova,mpv,2009,1998,automatic,diesel,133000000.0,2 +Daihatsu,Terios,suv,2010,1496,automatic,bensin,235000000.0,0 +Daihatsu,Terios,suv,2013,1496,manual,diesel,248000000.0,2 +Toyota,Kijang Innova,mpv,2013,1998,automatic,diesel,155000000.0,2 +Toyota,Agya,city car,2023,1197,automatic,bensin,159000000.0,0 +Suzuki,XL7,suv,2015,1462,manual,bensin,236000000.0,3 +Mitsubishi,Xpander,mpv,2017,1499,manual,diesel,185000000.0,2 +Mitsubishi,Xpander,mpv,2012,1499,automatic,diesel,144000000.0,2 +Mitsubishi,Xpander,mpv,2016,1499,manual,bensin,158000000.0,3 +KIA,Picanto,city car,2010,1248,manual,bensin,109000000.0,3 +Toyota,Agya,city car,2013,1197,automatic,diesel,96000000.0,2 +Honda,Jazz,hatchback,2020,1497,automatic,bensin,159000000.0,0 +Daihatsu,Terios,suv,2018,1496,automatic,bensin,263000000.0,0 +Honda,Jazz,hatchback,2014,1497,manual,bensin,149000000.0,3 +Toyota,Avanza,mpv,2018,1496,automatic,bensin,182000000.0,0 +Toyota,Kijang Innova,mpv,2022,1998,manual,diesel,192000000.0,2 +Mitsubishi,Xpander,mpv,2023,1499,automatic,bensin,204000000.0,0 +Honda,Jazz,hatchback,2012,1497,manual,bensin,135000000.0,3 +Suzuki,XL7,suv,2010,1462,manual,diesel,218000000.0,2 +Suzuki,XL7,suv,2008,1462,manual,diesel,227000000.0,2 +KIA,Picanto,city car,2023,1248,automatic,bensin,147000000.0,0 +Honda,Jazz,hatchback,2008,1497,manual,bensin,132000000.0,3 +Toyota,Avanza,mpv,2014,1496,automatic,diesel,178000000.0,2 +KIA,Picanto,city car,2012,1248,manual,bensin,108000000.0,3 +Honda,Jazz,hatchback,2008,1497,automatic,bensin,126000000.0,0 +Toyota,Kijang Innova,mpv,2011,1998,manual,bensin,149000000.0,3 +Toyota,Kijang Innova,mpv,2015,1998,automatic,bensin,170000000.0,0 +Toyota,Agya,city car,2019,1197,manual,diesel,149000000.0,2 +Daihatsu,Terios,suv,2012,1496,automatic,diesel,236000000.0,2 +Honda,Brio,city car,2012,1199,manual,diesel,101000000.0,2 +Hyundai,i10,city car,2017,1086,manual,bensin,126000000.0,3 +Mitsubishi,Xpander,mpv,2019,1499,automatic,diesel,197000000.0,2 +Toyota,Innova Reborn,mpv,2009,2393,manual,bensin,141000000.0,3 +Toyota,Avanza,mpv,2023,1496,automatic,bensin,205000000.0,0 +Toyota,Calya,mpv,2019,1197,manual,bensin,183000000.0,3 +Suzuki,Karimun Wagon R,city car,2020,998,automatic,diesel,144000000.0,2 +Datsun,Go+,hatchback,2021,799,manual,bensin,53000000.0,3 +Datsun,Go,hatchback,2018,799,automatic,bensin,67000000.0,0 +Datsun,Redi-Go,hatchback,2022,799,automatic,bensin,63000000.0,0 +Datsun,Go,hatchback,2019,799,manual,bensin,69000000.0,3 +Datsun,Go,hatchback,2021,999,manual,bensin,74000000.0,3 +Datsun,Go,hatchback,2017,999,manual,bensin,83000000.0,3 +Hyundai,Creta,hatchback,2021,799,manual,bensin,67000000.0,3 +Wuling,Cortez,hatchback,2022,799,automatic,bensin,54000000.0,0 +Isuzu,D-Max,hatchback,2019,799,automatic,bensin,73000000.0,0 +Hyundai,Creta,hatchback,2018,799,automatic,bensin,79000000.0,0 +Toyota,Innova,hatchback,2022,999,manual,bensin,82000000.0,3 +Toyota,Avanza,hatchback,2022,999,automatic,bensin,86000000.0,0 +Honda,HR-V,hatchback,2017,999,automatic,bensin,88000000.0,0 +Mazda,Mazda3,hatchback,2020,999,manual,bensin,92000000.0,3 +Kia,Seltos,hatchback,2019,999,manual,bensin,84000000.0,3 +Isuzu,D-Max,hatchback,2016,999,manual,bensin,89000000.0,3 +Suzuki,Ignis,hatchback,2022,999,manual,bensin,88000000.0,3 +Nissan,Livina,hatchback,2020,999,manual,bensin,94000000.0,3 +Datsun,Redi-Go,hatchback,2016,1198,manual,bensin,71000000.0,3 +Datsun,Redi-Go,hatchback,2019,1198,manual,bensin,89000000.0,3 +Datsun,Redi-Go,hatchback,2015,1198,automatic,bensin,95000000.0,0 +Datsun,Go,hatchback,2020,1198,manual,bensin,95000000.0,3 +Datsun,Go+,hatchback,2023,1198,manual,bensin,89000000.0,3 +Datsun,Redi-Go,hatchback,2015,1198,manual,bensin,100000000.0,3 +Datsun,Redi-Go,hatchback,2017,1198,manual,bensin,105000000.0,3 +Datsun,Redi-Go,hatchback,2021,1198,automatic,bensin,113000000.0,0 +Datsun,Redi-Go,hatchback,2018,1198,manual,bensin,117000000.0,3 +Hyundai,Ioniq,hatchback,2023,1086,manual,bensin,82000000.0,3 +Hyundai,Ioniq,hatchback,2017,1086,manual,bensin,96000000.0,3 +Hyundai,Santa Fe,hatchback,2017,1086,manual,bensin,101000000.0,3 +Hyundai,Ioniq,hatchback,2021,1086,automatic,bensin,97000000.0,0 +Hyundai,Stargazer,hatchback,2023,1086,manual,bensin,108000000.0,3 +Hyundai,Santa Fe,hatchback,2021,1086,manual,bensin,106000000.0,3 +Hyundai,Creta,muv,2016,999,automatic,bensin,94000000.0,0 +Suzuki,Ertiga,muv,2018,999,automatic,bensin,106000000.0,0 +Nissan,Magnite,muv,2023,999,automatic,bensin,116000000.0,0 +Datsun,Go+,muv,2016,999,manual,bensin,126000000.0,3 +Toyota,Raize,hatchback,2023,1197,manual,bensin,99000000.0,3 +Toyota,Innova,hatchback,2019,1197,automatic,bensin,110000000.0,0 +Toyota,Rush,hatchback,2016,1364,manual,solar,123000000.0,1 +Toyota,Innova,hatchback,2018,1197,manual,bensin,120000000.0,3 +Toyota,Raize,hatchback,2021,1364,manual,solar,142000000.0,1 +Toyota,Yaris,hatchback,2022,1364,manual,solar,134000000.0,1 +Toyota,Rush,hatchback,2017,1197,automatic,bensin,114000000.0,0 +Toyota,Avanza,hatchback,2015,1364,manual,solar,137000000.0,1 +Toyota,Raize,hatchback,2018,1197,automatic,bensin,122000000.0,0 +Toyota,Avanza,hatchback,2016,1364,manual,solar,144000000.0,1 +Toyota,Innova,hatchback,2022,1197,manual,bensin,106000000.0,3 +Toyota,Raize,hatchback,2018,1364,manual,solar,130000000.0,1 +Toyota,Avanza,hatchback,2016,1197,manual,bensin,126000000.0,3 +Toyota,Innova,hatchback,2020,1364,automatic,solar,148000000.0,1 +Nissan,Serena,hatchback,2020,1198,automatic,bensin,100000000.0,0 +Nissan,X-Trail,hatchback,2018,1198,automatic,bensin,114000000.0,0 +Nissan,X-Trail,hatchback,2020,1198,automatic,bensin,107000000.0,0 +Hyundai,Santa Fe,sedan,2016,1197,manual,cng + petrol,106000000.0,1 +Hyundai,Stargazer,sedan,2016,1197,automatic,bensin,102000000.0,0 +Hyundai,Creta,sedan,2018,1197,manual,bensin,106000000.0,3 +Hyundai,Creta,sedan,2022,1197,manual,cng + petrol,102000000.0,1 +Hyundai,Ioniq,sedan,2021,1197,manual,solar,122000000.0,1 +Hyundai,Santa Fe,sedan,2023,1197,manual,solar,118000000.0,1 +Hyundai,Stargazer,hatchback,2022,1197,manual,bensin,106000000.0,3 +Hyundai,Creta,hatchback,2019,1396,manual,solar,133000000.0,1 +Hyundai,Ioniq,hatchback,2016,1197,automatic,bensin,121000000.0,0 +Hyundai,Ioniq,hatchback,2019,1396,manual,solar,146000000.0,1 +Hyundai,Creta,hatchback,2022,1197,manual,bensin,137000000.0,3 +Hyundai,Ioniq,hatchback,2023,1396,manual,solar,166000000.0,1 +Hyundai,Stargazer,hatchback,2023,1197,manual,bensin,154000000.0,3 +Hyundai,Santa Fe,hatchback,2015,1396,automatic,solar,177000000.0,1 +Hyundai,Ioniq,hatchback,2023,1197,manual,bensin,175000000.0,3 +Hyundai,Stargazer,hatchback,2021,1197,automatic,bensin,143000000.0,0 +Hyundai,Stargazer,hatchback,2023,1197,automatic,bensin,158000000.0,0 +Hyundai,Creta,hatchback,2022,1396,manual,solar,161000000.0,1 +Hyundai,Stargazer,sedan,2015,1197,manual,bensin,110000000.0,3 +Hyundai,Creta,sedan,2022,1197,automatic,bensin,125000000.0,0 +Hyundai,Stargazer,sedan,2022,1197,automatic,bensin,134000000.0,0 +Hyundai,Creta,sedan,2017,1197,automatic,bensin,139000000.0,0 +Hyundai,Stargazer,sedan,2015,1197,automatic,bensin,153000000.0,0 +Hyundai,Ioniq,sedan,2022,1197,manual,bensin,149000000.0,3 +Hyundai,Stargazer,sedan,2017,1197,manual,cng + petrol,138000000.0,1 +Hyundai,Stargazer,sedan,2017,998,manual,bensin,162000000.0,3 +Hyundai,Ioniq,sedan,2015,1186,automatic,solar,147000000.0,1 +Hyundai,Stargazer,sedan,2019,1186,automatic,solar,157000000.0,1 +Hyundai,Creta,sedan,2021,1186,manual,solar,175000000.0,1 +Hyundai,Santa Fe,sedan,2023,1186,manual,solar,172000000.0,1 +Suzuki,Ertiga,hatchback,2021,999,manual,bensin,111000000.0,3 +Nissan,Livina,hatchback,2023,999,manual,bensin,129000000.0,3 +Mazda,Mazda2,hatchback,2022,999,automatic,bensin,148000000.0,0 +Mazda,CX-5,hatchback,2016,1498,automatic,solar,140000000.0,1 +Isuzu,Panther,hatchback,2015,1498,automatic,solar,162000000.0,1 +Honda,HR-V,hatchback,2021,1498,manual,solar,177000000.0,1 +Mazda,Mazda2,hatchback,2021,1197,manual,bensin,185000000.0,3 +Toyota,Avanza,hatchback,2022,1498,automatic,solar,188000000.0,1 +Kia,Seltos,crossover,2019,1498,automatic,solar,129000000.0,1 +Isuzu,MU-X,hatchback,2017,1498,manual,solar,150000000.0,1 +Isuzu,MU-X,hatchback,2022,1498,automatic,solar,159000000.0,1 +Mazda,CX-5,hatchback,2020,1194,manual,bensin,112000000.0,3 +Kia,Sportage,hatchback,2017,1194,manual,bensin,137000000.0,3 +Isuzu,Panther,hatchback,2015,1194,manual,bensin,144000000.0,3 +Honda,CR-V,crossover,2017,1194,manual,bensin,129000000.0,3 +Toyota,Avanza,crossover,2019,1498,manual,solar,142000000.0,1 +Honda,Brio,sedan,2017,1498,manual,solar,135000000.0,1 +Wuling,Cortez,sedan,2015,1498,automatic,solar,154000000.0,1 +Wuling,Almaz,sedan,2019,1498,manual,solar,190000000.0,1 +Mitsubishi,Triton,sedan,2021,1498,manual,solar,176000000.0,1 +Datsun,Redi-Go,sedan,2021,999,automatic,bensin,113000000.0,0 +Isuzu,Panther,sedan,2023,999,manual,bensin,126000000.0,3 +Wuling,Confero,sedan,2017,999,manual,bensin,152000000.0,3 +Mazda,Mazda2,sedan,2021,1498,automatic,solar,190000000.0,1 +Mitsubishi,Xpander,sedan,2015,1194,manual,bensin,114000000.0,3 +Kia,Seltos,sedan,2018,1194,manual,bensin,133000000.0,3 +Hyundai,Ioniq,sedan,2018,1194,manual,bensin,126000000.0,3 +Honda,Brio,sedan,2019,1498,manual,solar,133000000.0,1 +Isuzu,Panther,sedan,2021,1498,automatic,solar,140000000.0,1 +Mitsubishi,Xpander,sedan,2021,1498,automatic,solar,148000000.0,1 +Nissan,X-Trail,sedan,2018,1498,automatic,solar,155000000.0,1 +Wuling,Confero,sedan,2021,1498,automatic,solar,164000000.0,1 +Honda,Jazz,sedan,2017,1194,automatic,bensin,149000000.0,0 +Datsun,Go,sedan,2020,1194,manual,bensin,140000000.0,3 +Toyota,Fortuner,sedan,2023,1194,automatic,bensin,145000000.0,0 +Mitsubishi,Xpander,sedan,2019,1498,manual,solar,160000000.0,1 +Toyota,Innova,sedan,2020,1496,automatic,bensin,119000000.0,0 +Toyota,Rush,sedan,2018,1496,automatic,bensin,137000000.0,0 +Toyota,Yaris,sedan,2021,1364,manual,solar,140000000.0,1 +Toyota,Yaris,sedan,2023,1364,manual,solar,157000000.0,1 +Toyota,Fortuner,sedan,2021,1364,manual,solar,169000000.0,1 +Toyota,Fortuner,sedan,2015,1496,manual,bensin,148000000.0,3 +Toyota,Fortuner,sedan,2015,1496,automatic,bensin,131000000.0,0 +Toyota,Fortuner,sedan,2023,1364,automatic,solar,152000000.0,1 +Toyota,Rush,sedan,2023,1364,manual,solar,174000000.0,1 +Toyota,Fortuner,sedan,2018,1496,manual,bensin,153000000.0,3 +Toyota,Fortuner,hatchback,2023,1496,manual,bensin,152000000.0,3 +Toyota,Raize,hatchback,2017,1197,manual,bensin,124000000.0,3 +Toyota,Yaris,hatchback,2021,1364,manual,solar,152000000.0,1 +Toyota,Fortuner,hatchback,2020,1364,manual,solar,146000000.0,1 +Toyota,Rush,hatchback,2022,1197,automatic,bensin,127000000.0,0 +Toyota,Yaris,hatchback,2023,1364,manual,solar,155000000.0,1 +Toyota,Yaris,hatchback,2019,1197,manual,bensin,137000000.0,3 +Toyota,Avanza,hatchback,2015,1197,automatic,bensin,144000000.0,0 +Toyota,Fortuner,hatchback,2017,1197,manual,bensin,158000000.0,3 +Toyota,Fortuner,hatchback,2022,1197,automatic,bensin,169000000.0,0 +Toyota,Avanza,hatchback,2020,1197,automatic,bensin,133000000.0,0 +Honda,CR-V,hatchback,2022,1199,manual,bensin,142000000.0,3 +Honda,City,hatchback,2023,1199,manual,bensin,173000000.0,3 +Honda,City,hatchback,2018,1199,manual,bensin,150000000.0,3 +Honda,Jazz,hatchback,2015,1199,manual,bensin,164000000.0,3 +Honda,Brio,hatchback,2015,1498,manual,solar,155000000.0,1 +Honda,HR-V,hatchback,2018,1498,automatic,solar,170000000.0,1 +Honda,HR-V,hatchback,2021,1498,manual,solar,179000000.0,1 +Honda,HR-V,hatchback,2016,1199,manual,bensin,176000000.0,3 +Hyundai,Ioniq,hatchback,2020,1120,manual,solar,105000000.0,1 +Hyundai,Ioniq,hatchback,2021,1120,automatic,solar,108000000.0,1 +Hyundai,Stargazer,hatchback,2019,1197,manual,bensin,87000000.0,3 +Hyundai,Creta,hatchback,2015,1197,automatic,bensin,91000000.0,0 +Honda,Jazz,sedan,2016,1199,automatic,bensin,145000000.0,0 +Honda,HR-V,sedan,2019,1498,manual,solar,134000000.0,1 +Honda,City,sedan,2020,1199,manual,bensin,113000000.0,3 +Honda,Jazz,sedan,2021,1498,automatic,solar,164000000.0,1 +Honda,Brio,sedan,2018,1199,manual,bensin,156000000.0,3 +Honda,Brio,sedan,2021,1498,manual,solar,176000000.0,1 +Honda,HR-V,sedan,2022,1498,manual,solar,149000000.0,1 +Honda,Mobilio,sedan,2015,1498,manual,solar,170000000.0,1 +Honda,Jazz,sedan,2020,1498,automatic,solar,161000000.0,1 +Honda,Brio,sedan,2022,1199,manual,bensin,148000000.0,3 +Honda,Brio,sedan,2019,1199,manual,bensin,139000000.0,3 +Honda,CR-V,sedan,2018,1198,manual,bensin,128000000.0,3 +Honda,Jazz,sedan,2016,1498,automatic,solar,172000000.0,1 +Honda,Brio,sedan,2020,1199,manual,bensin,151000000.0,3 +Honda,Mobilio,sedan,2020,1498,automatic,solar,184000000.0,1 +Honda,CR-V,sedan,2015,1199,manual,bensin,164000000.0,3 +Honda,HR-V,sedan,2023,1498,automatic,solar,186000000.0,1 +Honda,CR-V,sedan,2020,1199,manual,bensin,167000000.0,3 +Honda,Mobilio,sedan,2017,1498,manual,solar,172000000.0,1 +Honda,City,sedan,2018,1199,manual,bensin,151000000.0,3 +Hyundai,Santa Fe,suv,2018,1197,automatic,bensin,124000000.0,0 +Hyundai,Creta,suv,2017,998,automatic,bensin,157000000.0,0 +Hyundai,Ioniq,suv,2017,1397,manual,solar,148000000.0,1 +Hyundai,Creta,suv,2017,998,automatic,bensin,182000000.0,0 +Hyundai,Creta,suv,2018,998,automatic,bensin,185000000.0,0 +Hyundai,Creta,suv,2021,998,manual,bensin,202000000.0,3 +Hyundai,Santa Fe,suv,2018,998,manual,bensin,179000000.0,3 +Hyundai,Santa Fe,suv,2023,998,manual,bensin,212000000.0,3 +Hyundai,Ioniq,suv,2015,1197,manual,bensin,138000000.0,3 +Hyundai,Ioniq,suv,2022,1397,automatic,solar,162000000.0,1 +Hyundai,Creta,suv,2021,1397,automatic,solar,187000000.0,1 +Hyundai,Santa Fe,suv,2016,1397,automatic,solar,190000000.0,1 +Hyundai,Stargazer,suv,2022,1397,manual,solar,207000000.0,1 +Hyundai,Ioniq,hatchback,2015,1197,manual,bensin,147000000.0,3 +Hyundai,Stargazer,hatchback,2023,1197,automatic,bensin,163000000.0,0 +Hyundai,Stargazer,hatchback,2023,1197,automatic,bensin,168000000.0,0 +Hyundai,Creta,hatchback,2016,1396,automatic,solar,189000000.0,1 +Nissan,X-Trail,suv,2021,1497,automatic,bensin,150000000.0,0 +Isuzu,D-Max,suv,2017,1497,automatic,bensin,165000000.0,0 +Suzuki,Swift,suv,2021,1497,manual,bensin,180000000.0,3 +Mazda,Mazda2,suv,2023,1497,manual,bensin,215000000.0,3 +Mazda,CX-5,suv,2018,1498,automatic,solar,160000000.0,1 +Datsun,Go,suv,2015,1498,automatic,solar,175000000.0,1 +Isuzu,MU-X,suv,2016,1498,manual,solar,190000000.0,1 +Wuling,Confero,suv,2015,1498,manual,solar,207000000.0,1 +Kia,Sportage,suv,2019,1497,automatic,bensin,190000000.0,0 +Isuzu,Panther,suv,2019,1498,manual,solar,218000000.0,1 +Mitsubishi,Xpander,suv,2021,1497,manual,bensin,190000000.0,3 +Mazda,CX-3,suv,2023,1498,manual,solar,207000000.0,1 +Mazda,Mazda3,suv,2023,1498,automatic,bensin,152000000.0,0 +Nissan,Magnite,suv,2017,1498,automatic,bensin,175000000.0,0 +Hyundai,Creta,suv,2017,1498,manual,bensin,190000000.0,3 +Isuzu,MU-X,suv,2017,1461,automatic,solar,177000000.0,1 +Mitsubishi,Triton,suv,2018,1461,manual,solar,190000000.0,1 +Kia,Sonet,suv,2022,1461,manual,solar,213000000.0,1 +Wuling,Confero,suv,2020,1461,automatic,solar,230000000.0,1 +Toyota,Fortuner,suv,2022,1461,automatic,solar,237000000.0,1 +Suzuki,Ertiga,suv,2015,1461,automatic,solar,237000000.0,1 +Hyundai,Stargazer,sedan,2022,1591,automatic,bensin,190000000.0,0 +Hyundai,Stargazer,sedan,2018,1582,manual,solar,223000000.0,1 +Hyundai,Santa Fe,sedan,2015,1582,manual,solar,247000000.0,1 +Hyundai,Stargazer,sedan,2022,1591,manual,bensin,223000000.0,3 +Hyundai,Ioniq,sedan,2018,1582,manual,solar,252000000.0,1 +Hyundai,Santa Fe,sedan,2020,1591,manual,bensin,245000000.0,3 +Hyundai,Creta,sedan,2022,1396,automatic,bensin,177000000.0,0 +Hyundai,Stargazer,sedan,2018,1396,manual,bensin,155000000.0,3 +Hyundai,Stargazer,sedan,2017,1591,automatic,bensin,224000000.0,0 +Hyundai,Creta,sedan,2023,1591,automatic,bensin,221000000.0,0 +Hyundai,Stargazer,sedan,2017,1582,automatic,solar,267000000.0,1 +Hyundai,Ioniq,sedan,2023,1396,manual,solar,179000000.0,1 +Hyundai,Ioniq,sedan,2016,1396,manual,solar,190000000.0,1 +Datsun,Go+,muv,2016,1461,manual,solar,164000000.0,1 +Mazda,Mazda2,muv,2016,1461,manual,solar,183000000.0,1 +Mazda,Mazda3,muv,2020,1461,automatic,solar,230000000.0,1 +Isuzu,D-Max,muv,2017,1461,manual,solar,230000000.0,1 +Mazda,CX-3,muv,2023,1461,manual,solar,200000000.0,1 +Mitsubishi,Outlander,muv,2018,1461,automatic,solar,215000000.0,1 +Datsun,Go,muv,2015,1461,manual,solar,183000000.0,1 +Toyota,Avanza,sedan,2018,1598,automatic,bensin,167000000.0,0 +Wuling,Confero,sedan,2015,1598,automatic,bensin,190000000.0,0 +Mazda,Mazda2,sedan,2019,1598,automatic,bensin,190000000.0,0 +Mazda,CX-3,sedan,2018,1197,manual,bensin,228000000.0,3 +Honda,CR-V,sedan,2022,1197,manual,bensin,275000000.0,3 +Honda,Mobilio,sedan,2022,1498,automatic,solar,182000000.0,1 +Mitsubishi,Triton,sedan,2021,1498,manual,solar,190000000.0,1 +Toyota,Fortuner,sedan,2017,1498,automatic,solar,230000000.0,1 +Wuling,Air EV,sedan,2015,1498,automatic,solar,254000000.0,1 +Kia,Sonet,sedan,2015,1498,automatic,solar,250000000.0,1 +Nissan,X-Trail,hatchback,2017,1498,manual,solar,275000000.0,1 +Hyundai,Santa Fe,hatchback,2020,1197,manual,bensin,250000000.0,3 +Honda,City,suv,2021,1497,automatic,bensin,181000000.0,0 +Honda,Mobilio,suv,2020,1497,manual,bensin,200000000.0,3 +Honda,HR-V,suv,2020,1497,manual,bensin,222000000.0,3 +Honda,HR-V,suv,2020,1497,manual,bensin,242000000.0,3 +Honda,Mobilio,suv,2017,1497,automatic,bensin,244000000.0,0 +Honda,Jazz,suv,2020,1498,automatic,solar,226000000.0,1 +Honda,HR-V,suv,2022,1498,manual,solar,242000000.0,1 +Honda,City,suv,2016,1498,manual,solar,263000000.0,1 +Toyota,Rush,muv,2019,2755,manual,bensin,284000000.0,3 +Toyota,Fortuner,muv,2020,2755,automatic,bensin,285000000.0,0 +Mazda,Mazda2,hatchback,2016,1194,automatic,bensin,99000000.0,0 +Wuling,Almaz,hatchback,2023,1498,automatic,solar,118000000.0,1 diff --git a/web_JMW/database/factories/UserFactory.php b/web_JMW/database/factories/UserFactory.php new file mode 100644 index 0000000..584104c --- /dev/null +++ b/web_JMW/database/factories/UserFactory.php @@ -0,0 +1,44 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/web_JMW/database/migrations/2014_10_12_000000_create_users_table.php b/web_JMW/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..444fafb --- /dev/null +++ b/web_JMW/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + } +}; diff --git a/web_JMW/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php b/web_JMW/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php new file mode 100644 index 0000000..81a7229 --- /dev/null +++ b/web_JMW/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php @@ -0,0 +1,28 @@ +string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('password_reset_tokens'); + } +}; diff --git a/web_JMW/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/web_JMW/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..249da81 --- /dev/null +++ b/web_JMW/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/web_JMW/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/web_JMW/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..e828ad8 --- /dev/null +++ b/web_JMW/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,33 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/web_JMW/database/migrations/2026_04_12_000000_create_categories_table.php b/web_JMW/database/migrations/2026_04_12_000000_create_categories_table.php new file mode 100644 index 0000000..c33674b --- /dev/null +++ b/web_JMW/database/migrations/2026_04_12_000000_create_categories_table.php @@ -0,0 +1,23 @@ +id(); + $table->string('name'); + $table->text('description'); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('categories'); + } +}; diff --git a/web_JMW/database/migrations/2026_04_12_010000_add_price_to_categories_table.php b/web_JMW/database/migrations/2026_04_12_010000_add_price_to_categories_table.php new file mode 100644 index 0000000..0e7ef4e --- /dev/null +++ b/web_JMW/database/migrations/2026_04_12_010000_add_price_to_categories_table.php @@ -0,0 +1,22 @@ +decimal('price', 14, 2)->default(0)->after('description'); + }); + } + + public function down() + { + Schema::table('categories', function (Blueprint $table) { + $table->dropColumn('price'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_04_12_020000_add_image_to_categories_table.php b/web_JMW/database/migrations/2026_04_12_020000_add_image_to_categories_table.php new file mode 100644 index 0000000..28d8fe1 --- /dev/null +++ b/web_JMW/database/migrations/2026_04_12_020000_add_image_to_categories_table.php @@ -0,0 +1,22 @@ +string('image')->nullable()->after('price'); + }); + } + + public function down() + { + Schema::table('categories', function (Blueprint $table) { + $table->dropColumn('image'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_04_18_000001_add_year_to_categories_table.php b/web_JMW/database/migrations/2026_04_18_000001_add_year_to_categories_table.php new file mode 100644 index 0000000..5226e11 --- /dev/null +++ b/web_JMW/database/migrations/2026_04_18_000001_add_year_to_categories_table.php @@ -0,0 +1,22 @@ +integer('year')->nullable()->after('price'); + }); + } + + public function down() + { + Schema::table('categories', function (Blueprint $table) { + $table->dropColumn('year'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_04_18_164603_create_favorites_table.php b/web_JMW/database/migrations/2026_04_18_164603_create_favorites_table.php new file mode 100644 index 0000000..52536ab --- /dev/null +++ b/web_JMW/database/migrations/2026_04_18_164603_create_favorites_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('username'); // Reference to user.username + $table->unsignedBigInteger('category_id'); // Reference to categories.id + $table->timestamps(); + + // Index for performance + $table->index(['username', 'category_id']); + + // Unique constraint to prevent duplicate favorites + $table->unique(['username', 'category_id']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('favorites'); + } +}; diff --git a/web_JMW/database/migrations/2026_04_18_173350_alter_favorites_username_collation.php b/web_JMW/database/migrations/2026_04_18_173350_alter_favorites_username_collation.php new file mode 100644 index 0000000..ae9a0cd --- /dev/null +++ b/web_JMW/database/migrations/2026_04_18_173350_alter_favorites_username_collation.php @@ -0,0 +1,24 @@ +string('phone_number')->nullable()->after('email'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('user', function (Blueprint $table) { + $table->dropColumn('phone_number'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_04_22_000001_add_seller_username_to_categories_table.php b/web_JMW/database/migrations/2026_04_22_000001_add_seller_username_to_categories_table.php new file mode 100644 index 0000000..3bceb54 --- /dev/null +++ b/web_JMW/database/migrations/2026_04_22_000001_add_seller_username_to_categories_table.php @@ -0,0 +1,30 @@ +string('seller_username')->nullable()->after('image'); + $table->index('seller_username'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('categories', function (Blueprint $table) { + $table->dropIndex(['seller_username']); + $table->dropColumn('seller_username'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_05_11_000000_add_email_verification_to_user_table.php b/web_JMW/database/migrations/2026_05_11_000000_add_email_verification_to_user_table.php new file mode 100644 index 0000000..0f138cc --- /dev/null +++ b/web_JMW/database/migrations/2026_05_11_000000_add_email_verification_to_user_table.php @@ -0,0 +1,32 @@ +timestamp('email_verified_at')->nullable()->after('email'); + } + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('user', function (Blueprint $table) { + if (Schema::hasColumn('user', 'email_verified_at')) { + $table->dropColumn('email_verified_at'); + } + }); + } +}; diff --git a/web_JMW/database/migrations/2026_05_18_000000_create_transactions_table.php b/web_JMW/database/migrations/2026_05_18_000000_create_transactions_table.php new file mode 100644 index 0000000..f3cb64e --- /dev/null +++ b/web_JMW/database/migrations/2026_05_18_000000_create_transactions_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('transaction_code')->unique(); + $table->foreignId('category_id')->nullable()->constrained('categories')->nullOnDelete(); + $table->string('admin_username')->nullable(); + $table->string('customer_name'); + $table->string('customer_phone')->nullable(); + $table->string('customer_email')->nullable(); + $table->unsignedInteger('quantity')->default(1); + $table->decimal('unit_price', 14, 2)->default(0); + $table->decimal('total_amount', 14, 2)->default(0); + $table->string('payment_method')->default('cash'); + $table->string('payment_status')->default('pending'); + $table->text('note')->nullable(); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('transactions'); + } +}; diff --git a/web_JMW/database/migrations/2026_05_20_000000_add_login_otp_to_user_table.php b/web_JMW/database/migrations/2026_05_20_000000_add_login_otp_to_user_table.php new file mode 100644 index 0000000..3007411 --- /dev/null +++ b/web_JMW/database/migrations/2026_05_20_000000_add_login_otp_to_user_table.php @@ -0,0 +1,40 @@ +string('login_otp')->nullable()->after('email_verified_at'); + } + + if (!Schema::hasColumn('user', 'login_otp_expires_at')) { + $table->timestamp('login_otp_expires_at')->nullable()->after('login_otp'); + } + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('user', function (Blueprint $table) { + if (Schema::hasColumn('user', 'login_otp_expires_at')) { + $table->dropColumn('login_otp_expires_at'); + } + + if (Schema::hasColumn('user', 'login_otp')) { + $table->dropColumn('login_otp'); + } + }); + } +}; diff --git a/web_JMW/database/migrations/2026_05_24_000000_add_payment_proof_to_transactions_table.php b/web_JMW/database/migrations/2026_05_24_000000_add_payment_proof_to_transactions_table.php new file mode 100644 index 0000000..edad9b0 --- /dev/null +++ b/web_JMW/database/migrations/2026_05_24_000000_add_payment_proof_to_transactions_table.php @@ -0,0 +1,22 @@ +string('payment_proof')->nullable()->after('payment_status'); + }); + } + + public function down() + { + Schema::table('transactions', function (Blueprint $table) { + $table->dropColumn('payment_proof'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_05_25_000000_add_status_to_categories_table.php b/web_JMW/database/migrations/2026_05_25_000000_add_status_to_categories_table.php new file mode 100644 index 0000000..fe3cd4d --- /dev/null +++ b/web_JMW/database/migrations/2026_05_25_000000_add_status_to_categories_table.php @@ -0,0 +1,22 @@ +string('status')->default('available')->after('image'); + }); + } + + public function down() + { + Schema::table('categories', function (Blueprint $table) { + $table->dropColumn('status'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_05_30_000000_drop_unused_users_table.php b/web_JMW/database/migrations/2026_05_30_000000_drop_unused_users_table.php new file mode 100644 index 0000000..2e058b0 --- /dev/null +++ b/web_JMW/database/migrations/2026_05_30_000000_drop_unused_users_table.php @@ -0,0 +1,26 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_05_30_010000_drop_unused_columns.php b/web_JMW/database/migrations/2026_05_30_010000_drop_unused_columns.php new file mode 100644 index 0000000..785b707 --- /dev/null +++ b/web_JMW/database/migrations/2026_05_30_010000_drop_unused_columns.php @@ -0,0 +1,40 @@ +dropIndex(['seller_username']); + $table->dropColumn('seller_username'); + } + }); + + Schema::table('user', function (Blueprint $table) { + if (Schema::hasColumn('user', 'konfirmasi_password')) { + $table->dropColumn('konfirmasi_password'); + } + }); + } + + public function down() + { + Schema::table('categories', function (Blueprint $table) { + if (!Schema::hasColumn('categories', 'seller_username')) { + $table->string('seller_username')->nullable()->after('status'); + $table->index('seller_username'); + } + }); + + Schema::table('user', function (Blueprint $table) { + if (!Schema::hasColumn('user', 'konfirmasi_password')) { + $table->string('konfirmasi_password')->nullable()->after('phone_number'); + } + }); + } +}; diff --git a/web_JMW/database/migrations/2026_06_05_000000_add_dataset_fields_to_categories_table.php b/web_JMW/database/migrations/2026_06_05_000000_add_dataset_fields_to_categories_table.php new file mode 100644 index 0000000..8826abd --- /dev/null +++ b/web_JMW/database/migrations/2026_06_05_000000_add_dataset_fields_to_categories_table.php @@ -0,0 +1,45 @@ +unsignedInteger('dataset_row_id')->nullable()->after('id'); + $table->string('dataset_hash', 64)->nullable()->after('dataset_row_id'); + $table->string('merk')->nullable()->after('description'); + $table->string('model')->nullable()->after('merk'); + $table->string('kategori')->nullable()->after('model'); + $table->unsignedInteger('mesin_cc')->nullable()->after('year'); + $table->string('transmisi')->nullable()->after('mesin_cc'); + $table->string('bahan_bakar')->nullable()->after('transmisi'); + $table->integer('cluster')->nullable()->after('bahan_bakar'); + + $table->unique('dataset_hash'); + $table->index('dataset_row_id'); + }); + } + + public function down(): void + { + Schema::table('categories', function (Blueprint $table) { + $table->dropUnique(['dataset_hash']); + $table->dropIndex(['dataset_row_id']); + $table->dropColumn([ + 'dataset_row_id', + 'dataset_hash', + 'merk', + 'model', + 'kategori', + 'mesin_cc', + 'transmisi', + 'bahan_bakar', + 'cluster', + ]); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_06_07_000000_add_missing_relationship_foreign_keys.php b/web_JMW/database/migrations/2026_06_07_000000_add_missing_relationship_foreign_keys.php new file mode 100644 index 0000000..cf697a7 --- /dev/null +++ b/web_JMW/database/migrations/2026_06_07_000000_add_missing_relationship_foreign_keys.php @@ -0,0 +1,31 @@ +dropForeign('transactions_admin_username_foreign'); + }); + + DB::statement('ALTER TABLE transactions MODIFY admin_username VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL'); + + Schema::table('favorites', function ($table) { + $table->dropForeign('favorites_category_id_foreign'); + $table->dropForeign('favorites_username_foreign'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_06_17_000000_add_reservation_fields_to_categories_and_transactions.php b/web_JMW/database/migrations/2026_06_17_000000_add_reservation_fields_to_categories_and_transactions.php new file mode 100644 index 0000000..c1e16b2 --- /dev/null +++ b/web_JMW/database/migrations/2026_06_17_000000_add_reservation_fields_to_categories_and_transactions.php @@ -0,0 +1,35 @@ +timestamp('reserved_until')->nullable()->after('status'); + $table->string('reserved_by')->nullable()->after('reserved_until'); + $table->index(['status', 'reserved_until']); + }); + + Schema::table('transactions', function (Blueprint $table) { + $table->timestamp('expires_at')->nullable()->after('payment_status'); + $table->index(['payment_status', 'expires_at']); + }); + } + + public function down(): void + { + Schema::table('transactions', function (Blueprint $table) { + $table->dropIndex(['payment_status', 'expires_at']); + $table->dropColumn('expires_at'); + }); + + Schema::table('categories', function (Blueprint $table) { + $table->dropIndex(['status', 'reserved_until']); + $table->dropColumn(['reserved_until', 'reserved_by']); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_07_01_000000_drop_dataset_tracking_columns_from_categories_table.php b/web_JMW/database/migrations/2026_07_01_000000_drop_dataset_tracking_columns_from_categories_table.php new file mode 100644 index 0000000..5797799 --- /dev/null +++ b/web_JMW/database/migrations/2026_07_01_000000_drop_dataset_tracking_columns_from_categories_table.php @@ -0,0 +1,31 @@ +dropUnique(['dataset_hash']); + $table->dropIndex(['dataset_row_id']); + $table->dropColumn([ + 'dataset_row_id', + 'dataset_hash', + ]); + }); + } + + public function down(): void + { + Schema::table('categories', function (Blueprint $table) { + $table->unsignedInteger('dataset_row_id')->nullable()->after('id'); + $table->string('dataset_hash', 64)->nullable()->after('dataset_row_id'); + + $table->unique('dataset_hash'); + $table->index('dataset_row_id'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_07_01_000001_move_reservation_owner_to_transactions_table.php b/web_JMW/database/migrations/2026_07_01_000001_move_reservation_owner_to_transactions_table.php new file mode 100644 index 0000000..fb118cc --- /dev/null +++ b/web_JMW/database/migrations/2026_07_01_000001_move_reservation_owner_to_transactions_table.php @@ -0,0 +1,72 @@ +string('reserved_by')->nullable()->after('expires_at'); + }); + } + + if (Schema::hasColumn('categories', 'reserved_by')) { + DB::table('categories') + ->whereNotNull('reserved_by') + ->orderBy('id') + ->get() + ->each(function ($category) { + DB::table('transactions') + ->where('category_id', $category->id) + ->where('payment_status', 'pending') + ->whereNull('reserved_by') + ->update(['reserved_by' => $category->reserved_by]); + }); + } + + if (Schema::hasColumn('categories', 'reserved_until')) { + Schema::table('categories', function (Blueprint $table) { + $table->dropIndex(['status', 'reserved_until']); + $table->dropColumn(['reserved_until', 'reserved_by']); + }); + } + } + + public function down(): void + { + if (! Schema::hasColumn('categories', 'reserved_until')) { + Schema::table('categories', function (Blueprint $table) { + $table->timestamp('reserved_until')->nullable()->after('status'); + $table->string('reserved_by')->nullable()->after('reserved_until'); + $table->index(['status', 'reserved_until']); + }); + } + + if (Schema::hasColumn('transactions', 'reserved_by')) { + DB::table('transactions') + ->where('payment_status', 'pending') + ->whereNotNull('expires_at') + ->where('expires_at', '>', now()) + ->whereNotNull('reserved_by') + ->orderBy('id') + ->get() + ->each(function ($transaction) { + DB::table('categories') + ->where('id', $transaction->category_id) + ->update([ + 'reserved_until' => $transaction->expires_at, + 'reserved_by' => $transaction->reserved_by, + ]); + }); + + Schema::table('transactions', function (Blueprint $table) { + $table->dropColumn('reserved_by'); + }); + } + } +}; diff --git a/web_JMW/database/migrations/2026_07_02_000000_drop_cluster_from_categories_table.php b/web_JMW/database/migrations/2026_07_02_000000_drop_cluster_from_categories_table.php new file mode 100644 index 0000000..ea6842b --- /dev/null +++ b/web_JMW/database/migrations/2026_07_02_000000_drop_cluster_from_categories_table.php @@ -0,0 +1,30 @@ +dropColumn('cluster'); + }); + } + + public function down(): void + { + if (Schema::hasColumn('categories', 'cluster')) { + return; + } + + Schema::table('categories', function (Blueprint $table) { + $table->integer('cluster')->nullable()->after('bahan_bakar'); + }); + } +}; diff --git a/web_JMW/database/migrations/2026_07_02_000001_make_category_status_required_without_default.php b/web_JMW/database/migrations/2026_07_02_000001_make_category_status_required_without_default.php new file mode 100644 index 0000000..bd7288f --- /dev/null +++ b/web_JMW/database/migrations/2026_07_02_000001_make_category_status_required_without_default.php @@ -0,0 +1,31 @@ +whereNull('status') + ->orWhere('status', '') + ->update(['status' => 'available']); + + DB::statement("ALTER TABLE categories MODIFY status VARCHAR(255) NOT NULL"); + } + + public function down(): void + { + if (! Schema::hasColumn('categories', 'status')) { + return; + } + + DB::statement("ALTER TABLE categories MODIFY status VARCHAR(255) NOT NULL DEFAULT 'available'"); + } +}; diff --git a/web_JMW/database/seeders/CategorySeeder.php b/web_JMW/database/seeders/CategorySeeder.php new file mode 100644 index 0000000..2ea43a7 --- /dev/null +++ b/web_JMW/database/seeders/CategorySeeder.php @@ -0,0 +1,92 @@ +first(fn ($path) => file_exists($path)); + + if (! $csvPath) { + $this->command->warn('File CSV dataset mobil tidak ditemukan.'); + return; + } + + $this->command->info("Menggunakan dataset: {$csvPath}"); + + $file = fopen($csvPath, 'r'); + fgetcsv($file); + + $count = 0; + $batchSize = 50; + + while (($data = fgetcsv($file)) !== false) { + if (count($data) < 8) { + continue; + } + + $count++; + $this->insertCategory($data); + + if ($count % $batchSize === 0) { + $this->command->info("Batch processed: {$count} records..."); + } + } + + fclose($file); + + $this->command->info("Successfully imported {$count} vehicles."); + } + + private function insertCategory(array $data): void + { + $merk = trim($data[0] ?? ''); + $model = trim($data[1] ?? ''); + $kategori = trim($data[2] ?? ''); + $tahun = (int) ($data[3] ?? 2023); + $mesinCc = (int) ($data[4] ?? 0); + $transmisi = trim($data[5] ?? ''); + $bahanBakar = trim($data[6] ?? ''); + $harga = (float) ($data[7] ?? 0); + if ($merk === '' || $model === '' || $harga <= 0) { + return; + } + + $name = "{$merk} {$model}"; + $description = "{$kategori} | {$mesinCc}cc | {$transmisi} | {$bahanBakar}"; + + try { + $category = Category::where('name', $name) + ->where('year', $tahun) + ->where('price', $harga) + ->where('description', $description) + ->first() + ?? new Category(); + + $category->fill([ + 'name' => $name, + 'description' => $description, + 'merk' => $merk, + 'model' => $model, + 'kategori' => $kategori, + 'price' => $harga, + 'year' => $tahun, + 'mesin_cc' => $mesinCc, + 'transmisi' => $transmisi, + 'bahan_bakar' => $bahanBakar, + 'status' => $category->exists ? $category->status : 'available', + ])->save(); + } catch (\Exception $exception) { + $this->command->warn("Error inserting {$name}: {$exception->getMessage()}"); + } + } +} diff --git a/web_JMW/database/seeders/DatabaseSeeder.php b/web_JMW/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..fed7ef0 --- /dev/null +++ b/web_JMW/database/seeders/DatabaseSeeder.php @@ -0,0 +1,40 @@ +updateOrInsert( + ['username' => 'admin'], + [ + 'password' => Hash::make('password'), + ] + ); + + // Seed default User + DB::table('user')->updateOrInsert( + ['username' => 'user'], + [ + 'email' => 'user@example.com', + 'password' => Hash::make('password'), + 'phone_number' => '081234567890', + 'role' => 'user', + ] + ); + + // Seed sample categories if CategorySeeder exists + if (class_exists(CategorySeeder::class)) { + $this->call(CategorySeeder::class); + } + } +} diff --git a/web_JMW/database/sql/add_reservation_columns.sql b/web_JMW/database/sql/add_reservation_columns.sql new file mode 100644 index 0000000..1540860 --- /dev/null +++ b/web_JMW/database/sql/add_reservation_columns.sql @@ -0,0 +1,88 @@ +SET @database_name = DATABASE(); + +SET @sql = IF( + ( + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @database_name + AND TABLE_NAME = 'categories' + AND COLUMN_NAME = 'reserved_until' + ) = 0, + 'ALTER TABLE `categories` ADD COLUMN `reserved_until` timestamp NULL DEFAULT NULL AFTER `status`', + 'SELECT ''categories.reserved_until already exists'' AS message' +); +PREPARE statement FROM @sql; +EXECUTE statement; +DEALLOCATE PREPARE statement; + +SET @sql = IF( + ( + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @database_name + AND TABLE_NAME = 'categories' + AND COLUMN_NAME = 'reserved_by' + ) = 0, + 'ALTER TABLE `categories` ADD COLUMN `reserved_by` varchar(255) DEFAULT NULL AFTER `reserved_until`', + 'SELECT ''categories.reserved_by already exists'' AS message' +); +PREPARE statement FROM @sql; +EXECUTE statement; +DEALLOCATE PREPARE statement; + +SET @sql = IF( + ( + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @database_name + AND TABLE_NAME = 'categories' + AND INDEX_NAME = 'categories_status_reserved_until_index' + ) = 0, + 'ALTER TABLE `categories` ADD INDEX `categories_status_reserved_until_index` (`status`, `reserved_until`)', + 'SELECT ''categories_status_reserved_until_index already exists'' AS message' +); +PREPARE statement FROM @sql; +EXECUTE statement; +DEALLOCATE PREPARE statement; + +SET @sql = IF( + ( + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = @database_name + AND TABLE_NAME = 'transactions' + ) > 0 + AND ( + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @database_name + AND TABLE_NAME = 'transactions' + AND COLUMN_NAME = 'expires_at' + ) = 0, + 'ALTER TABLE `transactions` ADD COLUMN `expires_at` timestamp NULL DEFAULT NULL AFTER `payment_status`', + 'SELECT ''transactions.expires_at already exists or transactions table not found'' AS message' +); +PREPARE statement FROM @sql; +EXECUTE statement; +DEALLOCATE PREPARE statement; + +SET @sql = IF( + ( + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = @database_name + AND TABLE_NAME = 'transactions' + ) > 0 + AND ( + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @database_name + AND TABLE_NAME = 'transactions' + AND INDEX_NAME = 'transactions_payment_status_expires_at_index' + ) = 0, + 'ALTER TABLE `transactions` ADD INDEX `transactions_payment_status_expires_at_index` (`payment_status`, `expires_at`)', + 'SELECT ''transactions_payment_status_expires_at_index already exists or transactions table not found'' AS message' +); +PREPARE statement FROM @sql; +EXECUTE statement; +DEALLOCATE PREPARE statement; diff --git a/web_JMW/database/sql/tamyhost_E31231762.sql b/web_JMW/database/sql/tamyhost_E31231762.sql new file mode 100644 index 0000000..eb3f9f6 --- /dev/null +++ b/web_JMW/database/sql/tamyhost_E31231762.sql @@ -0,0 +1,208 @@ +-- phpMyAdmin SQL Dump +-- Database: `tamyhost_E31231762` +-- Server version: 8.0.30 / MariaDB 10.4+ +-- PHP Version: 8.2 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; +SET FOREIGN_KEY_CHECKS = 0; + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `admin` +-- + +CREATE TABLE IF NOT EXISTS `admin` ( + `username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `password` varchar(255) NOT NULL, + PRIMARY KEY (`username`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `admin` (username: admin, password: password) +-- + +INSERT INTO `admin` (`username`, `password`) VALUES +('admin', '$2y$12$0B05s6Jg4jP.O3PzBUpb2O3yQ0LvhxW92C9yB0Z5uX.R71E7K1Fny') +ON DUPLICATE KEY UPDATE `password` = VALUES(`password`); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `user` +-- + +CREATE TABLE IF NOT EXISTS `user` ( + `username` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `phone_number` varchar(255) DEFAULT NULL, + `role` varchar(50) DEFAULT 'user', + `email_verified_at` timestamp NULL DEFAULT NULL, + `login_otp` varchar(10) DEFAULT NULL, + `login_otp_expires_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`username`), + UNIQUE KEY `user_email_unique` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Dumping data for table `user` (username: user, password: password) +-- + +INSERT INTO `user` (`username`, `email`, `password`, `phone_number`, `role`) VALUES +('user', 'user@example.com', '$2y$12$0B05s6Jg4jP.O3PzBUpb2O3yQ0LvhxW92C9yB0Z5uX.R71E7K1Fny', '081234567890', 'user') +ON DUPLICATE KEY UPDATE `password` = VALUES(`password`); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `categories` +-- + +CREATE TABLE IF NOT EXISTS `categories` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `description` text NOT NULL, + `merk` varchar(255) DEFAULT NULL, + `model` varchar(255) DEFAULT NULL, + `kategori` varchar(255) DEFAULT NULL, + `price` decimal(15,2) DEFAULT NULL, + `year` int(11) DEFAULT NULL, + `mesin_cc` int(11) DEFAULT NULL, + `transmisi` varchar(255) DEFAULT NULL, + `bahan_bakar` varchar(255) DEFAULT NULL, + `image` varchar(255) DEFAULT NULL, + `status` varchar(255) NOT NULL DEFAULT 'available', + `seller_username` varchar(255) DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Sample data for table `categories` +-- + +INSERT INTO `categories` (`id`, `name`, `description`, `merk`, `model`, `kategori`, `price`, `year`, `mesin_cc`, `transmisi`, `bahan_bakar`, `image`, `status`, `seller_username`, `created_at`, `updated_at`) VALUES +(1, 'Toyota Avanza 1.3 G', 'MPV | 1300cc | Manual | Bensin', 'Toyota', 'Avanza', 'MPV', 145000000.00, 2018, 1300, 'Manual', 'Bensin', NULL, 'available', 'admin', NOW(), NOW()), +(2, 'Honda Brio Satya E', 'Hatchback | 1200cc | Otomatis | Bensin', 'Honda', 'Brio', 'Hatchback', 135000000.00, 2019, 1200, 'Otomatis', 'Bensin', NULL, 'available', 'admin', NOW(), NOW()), +(3, 'Mitsubishi Pajero Sport Dakar', 'SUV | 2400cc | Otomatis | Diesel', 'Mitsubishi', 'Pajero Sport', 'SUV', 450000000.00, 2021, 2400, 'Otomatis', 'Diesel', NULL, 'available', 'admin', NOW(), NOW()) +ON DUPLICATE KEY UPDATE `name` = VALUES(`name`); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `transactions` +-- + +CREATE TABLE IF NOT EXISTS `transactions` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `transaction_code` varchar(255) NOT NULL, + `category_id` bigint(20) UNSIGNED DEFAULT NULL, + `admin_username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `customer_name` varchar(255) NOT NULL, + `customer_phone` varchar(255) DEFAULT NULL, + `customer_email` varchar(255) DEFAULT NULL, + `quantity` int(10) UNSIGNED NOT NULL DEFAULT 1, + `unit_price` decimal(14,2) NOT NULL DEFAULT 0.00, + `total_amount` decimal(14,2) NOT NULL DEFAULT 0.00, + `payment_method` varchar(255) NOT NULL DEFAULT 'cash', + `payment_status` varchar(255) NOT NULL DEFAULT 'pending', + `expires_at` timestamp NULL DEFAULT NULL, + `payment_proof` varchar(255) DEFAULT NULL, + `note` text DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `transactions_transaction_code_unique` (`transaction_code`), + KEY `transactions_category_id_foreign` (`category_id`), + KEY `transactions_admin_username_foreign` (`admin_username`), + CONSTRAINT `transactions_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL, + CONSTRAINT `transactions_admin_username_foreign` FOREIGN KEY (`admin_username`) REFERENCES `admin` (`username`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `favorites` +-- + +CREATE TABLE IF NOT EXISTS `favorites` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `username` varchar(255) NOT NULL, + `category_id` bigint(20) UNSIGNED NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `favorites_username_category_id_unique` (`username`, `category_id`), + KEY `favorites_username_category_id_index` (`username`, `category_id`), + KEY `favorites_category_id_foreign` (`category_id`), + CONSTRAINT `favorites_username_foreign` FOREIGN KEY (`username`) REFERENCES `user` (`username`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `favorites_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `password_reset_tokens` +-- + +CREATE TABLE IF NOT EXISTS `password_reset_tokens` ( + `email` varchar(255) NOT NULL, + `token` varchar(255) NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `failed_jobs` +-- + +CREATE TABLE IF NOT EXISTS `failed_jobs` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `uuid` varchar(255) NOT NULL, + `connection` text NOT NULL, + `queue` text NOT NULL, + `payload` longtext NOT NULL, + `exception` longtext NOT NULL, + `failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `failed_jobs_uuid_unique` (`uuid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `personal_access_tokens` +-- + +CREATE TABLE IF NOT EXISTS `personal_access_tokens` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `tokenable_type` varchar(255) NOT NULL, + `tokenable_id` bigint(20) UNSIGNED NOT NULL, + `name` varchar(255) NOT NULL, + `token` varchar(64) NOT NULL, + `abilities` text DEFAULT NULL, + `last_used_at` timestamp NULL DEFAULT NULL, + `expires_at` timestamp NULL DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `personal_access_tokens_token_unique` (`token`), + KEY `personal_access_tokens_tokenable_type_tokenable_id_index` (`tokenable_type`, `tokenable_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +SET FOREIGN_KEY_CHECKS = 1; +COMMIT; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan.docx b/web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan.docx new file mode 100644 index 0000000000000000000000000000000000000000..a6007863591a381cccadf77f6d14867c7bbcedf8 GIT binary patch literal 45075 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 literal 0 HcmV?d00001 diff --git a/web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update.docx b/web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update.docx new file mode 100644 index 0000000000000000000000000000000000000000..3a54a41823cf7e07283bc1ee2ce5fdb72f48317c GIT binary patch literal 46823 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 DH%TrE literal 0 HcmV?d00001 diff --git a/web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update_Centroid.docx b/web_JMW/docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update_Centroid.docx new file mode 100644 index 0000000000000000000000000000000000000000..e09749f829e7c4d533d606551fe990cff8c4b357 GIT binary patch literal 48198 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�#ID5gyauB&)$EjE$-cH=BL=Jm0dAw}0vX_bv z2lMVM(j~QSK&wLmucW{;Ju}ZjGOh@4i>q$ za1Fo+n~HHY`w$4l=FAoZXPiV3PN~?M>nN$C8Isuv1^ofmTLu1@^9*FQ%avk3X6lqD zDMt4DU{Zc_Z1c44CRrlsa#PYOTWoUV6^%gQLw+F{p7fCkmZoIJ-mfM~4PquqlZs_H zwFW{~qT}wY`O>3frf4K@re^G#Qie4`OBNMe@MFppNSlIn1O>ybz?5-LCAngWp1wj8 zNVeo+K9-g8tGYaI->l@yHG^lzIB8X^y}m5>vd5;@u^P#rOX!>OrH$U^85^->Fpi-2 zGTze5vyu}yTAM7Nn9Z~{1+S7HN{J}2$)K{G%)+kM&!4j_b3BSJXVYM`wm{VojXqbe zRqdNff!vie@m=IK?OOFEk;@~+eHRk6EX#7=9PIsr-`aJuaLW7fEA+^bew zJD39B-X;C0CtpEVS$}Fui&BAu@PGpct}H<;aKZ-+NHn!j64^>8R_!%J)jjQYBbKFg zr%Z)3098Kp3X=QZF!hZB)kuDmtzL7iOSptWvPe0FT4Ar+*RcszN$X2_d&`pglAY6I zY>Gv`mD*6y#%iM#dQR6$&ef5~zdfD<&8_T#+%-05T;<(8_PhAL!MOu9sdc`wNJ62O zET5#>9d0_Z>PP1pZV;9UxFfY0q&;X4(wHc}4?!*AA!naLCS^mZ1op+?n`0?W?81?@ zk~dV@1F5JcNmW%*Q0f|uFiNtH<^n|;V_>_5^yX)F1oS-Fs=`a|43Ik{|GGOO4JgPl zw;}jVSEd97Y;7=k1^bG?#Um&z&AL*t;ru1`7IR#IuT5OP9XF*w`$Y3<=~Uh-cH(!O zc89$4!)BS1@MTfLGM?r>yelf_k<825xGejL-d9Qd3^4E)UZyMP_N7&|1!>EMz54LjUz%SEq2oTxI=7n@sS&Zq4nd{g|u8&jIV>g?GA@r_cne>MMS2SWb_TVO3B`&5vmR=Gk81L=8+~$v7xVO@f=e>LX3VRG!F*vb z1X?Xnt3_NMm+x`LHpq6H<2%%^Qhi$J3+uQf&)2ad>aJ`!q%BLFXH_{1X9^6X?xEXs zDp|sBj&67-QP&Fwy&=36upmXHY9lP~fMRgzd)^sAdl<)Zg#ep2g=sfdZGBWBJ{+Zv zUPIYI&A`}lnxaihDJ}MbRphR4&gQFC3AR%5{wUeoaRjE?j)Lz-X&(#ia1A^x7a#FQ zS_6Es2hS2>PC0cJ+a|WBHIjd@z*(0Zk<>4_7Txylbx(zQ0+3dEs4ad2ff9Q z3UJ@Xc0bs8aa5J5%50nxPQrGeTJ=ILvrh<~(6)!QqPE9n^>djra%$vlwgt!xPlMmr zvbB{^OMz-|U?qRct7Jzl_6g#I*jO@@p}*&r(bkr_d)+RcB!r*#-T`1WyZ0^7@ruJ?h$dn9u78W zJZUFdBx_lEhc9p=|AG1P$W}M4$@3v1^OT-@3PjV6vq>d!ywb(3v168{X+p#&1puLCGvB_-Y#RoOSPEX!buiQ&*D6)f6=A@cb>a^zw zQ-QT7`b377&6SZ^^LhgYaTm4=%3(cY^n|#=Nv@xM)xq2FvwMVTOP!DH?br~!9l#fB zLe(r`zblR+7=Lv#-X;mE!V! zhZ5qpclP5QEZ2)0qBK)R?`Vb1yh=+m^i>VZwRDt~WA#x}cA7Ih`eZ5B@v|BgIUs6p zTIwZf&ZiVJHo6&mO1M9zvh;L}xr0cjg`5YWybv7=97BBeDXY%EOu@l_$-W71ER3;_ zuoXJtzJ;#o5$hB|}bTLYr+w?(K6|c%jk)tKY$H-8@c_by+h0ohd)fzIB*innsIdE=H^OAQ~ zR@j%x9doyY3F<+7HF{!j$7v)m13Z$C+Q3Ars-aMlygSt%# zWqdQVYi?M=JhdREhDjRp44@LvP>9+c=ZUeU;etx($uThKURZIQ&B4cCGIh~vcRXyk z3fTSJgd-Dst7n(T1%2#R^5fNdjmZIwDN7`=FMvxgJT{eXl#!{?OKOQxB|_vl-l$67 zcF}sO>H$$az9QHzt6f~z1m%YPVfSDG9-$T;j(9x0<~|OTERYmY>X##Rt#suBGwWEo zWN30$hJGwP#1h5WIzq7WOaSLJX(8pWO+r+s;H!wFPfGegZ%8lb5NN@2_)FVp&enl=s^We zLX{mP&9Dq_sJ$;>i=A)ju#6%UvRz7lrHf=)*U;2s;$G4>#hH$utNTJL;@`jjxETO$%--;V&>F$9<+HYjj?z>Wy6LZ*g`7n z8TTxooKfsmbxx31g%v(PA8RJjtH45sAG$gAwnC$HM~J*=Rj=g{E%14XskO)G<>QR8 zKH?8u)n-HO3z55&cA0KQl{q*PBX6T7@54AIxMrf#tn&BTbmkY_4miDnrWPHjp|hl; zQa8FPX8=u)&j8}HY51fbKKV)?ZBuFu-2ME?HkO<`Mnx+~p+x~GTPn;=PSg2WpUzF| z-)9PQmfW8z;an~JpZ$-ysWXM?64#qj_2|uMP=6Luhw)(R5#8MqT}0U@yF)~{S-Ix#BO01 zM-TUd(+v0)3M4w5_4W{IHV0j&fh@+QAK>sQY|y|m zz@Wd16BKaV6?~@wt)Z-z-@SKz@nTsix&R;ht(Nz_sQiP=)}?zm;Vhzq`1;Xmc_)sC zjisds33s^5)d5r$O2{d5VmyYOC7fy2bvoV>mUPZ9k%R)5MLH!dDqn_)yR;@>6xwg> zp+s;&KoXVt6CTv1?r;v;5XVQf`MbHL`}n%w>}XMS0?$6+I?;|lj9vpKIJN5uolxPE z`xrNU8zjPEZ=QX}3FCDrfYtKS1Dxo#grflI%#FDE*^rLGcCd}atCzMXXyf>(7tqOz z0=b9X(3w#@5fwhxF#4ZIMBr)+E-mrYUv{d{NMD+L-pNkUmt-SjnuU$BVC|dkYB{{= z*2}hV&*yWgOv#!eyfCZL%aU0Gka>lAwS1Hpz;c(CviL-oli&G2M6adG&R-#t|I!%Y z#6mhvQ|SOY`SA1Uo9A(%F!8rcpMr^V{zx^fmdV!g`I>YtqWnEzH_91dCOh4 zkX&%z?&}Ue2eTHp8RNI|Rq@j&-W)-ZA_+>x)QJEO8ea{~GM`U6FbFu;dNNQ2+ZI_ZQoxlV?#!S(~My19yE5Y!1iTc2O=|9@)ffA6f;|CLiq>3~tCq0(DemOuOodR#ji zVut^xG&w~sq(yBz`2+reiowTYv9Q*#bC)zQtOmZ0t(|A)$Nl+>D;Gr@4Li3HxiZ(` z{n@j83@e{OJARY{ZO6}aIIenv@+% zoNU7GM@!^NM#&3o-Q|sLO0}f)DJ~Ub$ZelK;tW(y92Vbx_uk>OIN^s=y{_wr9AbnN zR)jFb6C1M+u*U|UT7-vFoQ^u2!G{-v;J#Ox-Z-s%<|Y}&Xrn}U;Q;YLo3YxMmhSlt zJB=G9l@jnYos3*=O2L>KW6Ed`WlATu~ufHFTkEE(VhyytUpCGw@y zY9$(`Fe~kX40yAd!J5u(4f#Cj*-J>YjRNm7yiP&<)WoU6Tw%6o6=$bst=VtPmL`6c O{?Fc@U9t+LPyY+etlKL9 literal 0 HcmV?d00001 diff --git a/web_JMW/docs/append_code_usage_explanation.py b/web_JMW/docs/append_code_usage_explanation.py new file mode 100644 index 0000000..c12b260 --- /dev/null +++ b/web_JMW/docs/append_code_usage_explanation.py @@ -0,0 +1,305 @@ +from pathlib import Path +from zipfile import ZIP_DEFLATED, ZipFile +import tempfile +import xml.etree.ElementTree as ET + + +SOURCE_DOC = Path("docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan.docx") +OUT_DOC = Path("docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update.docx") + +WORD_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" +ET.register_namespace("w", WORD_NS) + + +def qn(name): + return f"{{{WORD_NS}}}{name}" + + +def paragraph(text="", style=None): + p = ET.Element(qn("p")) + if style: + p_pr = ET.SubElement(p, qn("pPr")) + p_style = ET.SubElement(p_pr, qn("pStyle")) + p_style.set(qn("val"), style) + + run = ET.SubElement(p, qn("r")) + t = ET.SubElement(run, qn("t")) + t.set("{http://www.w3.org/XML/1998/namespace}space", "preserve") + t.text = text + return p + + +def code_paragraph(text): + p = ET.Element(qn("p")) + p_pr = ET.SubElement(p, qn("pPr")) + p_style = ET.SubElement(p_pr, qn("pStyle")) + p_style.set(qn("val"), "Code") + + run = ET.SubElement(p, qn("r")) + t = ET.SubElement(run, qn("t")) + t.set("{http://www.w3.org/XML/1998/namespace}space", "preserve") + t.text = text + return p + + +def page_break(): + p = ET.Element(qn("p")) + r = ET.SubElement(p, qn("r")) + br = ET.SubElement(r, qn("br")) + br.set(qn("type"), "page") + return p + + +def code_block(text): + return [code_paragraph(line) for line in text.strip("\n").splitlines()] + + +def new_section(): + items = [] + items.append(page_break()) + items.append(paragraph("17. Penjelasan Kode Clustering dan Kegunaannya dalam Sistem", "Heading1")) + items.append(paragraph( + "Bagian ini menjelaskan fungsi setiap blok kode clustering K-Means dan hubungannya dengan fitur rekomendasi " + "mobil berdasarkan budget pada sistem JMW Showroom. Kode clustering digunakan untuk membentuk kelompok mobil " + "berdasarkan kemiripan harga, tahun, dan kapasitas mesin." + )) + + items.append(paragraph("17.1 Import Library", "Heading2")) + items.extend(code_block(""" +import pandas as pd + +from sklearn.preprocessing import StandardScaler +from sklearn.cluster import KMeans +from sklearn.metrics import silhouette_score +""")) + items.append(paragraph( + "Kode ini digunakan untuk memanggil library yang diperlukan. pandas dipakai untuk membaca dan mengolah dataset. " + "StandardScaler digunakan untuk menstandarkan nilai atribut agar skala harga, tahun, dan mesin_cc menjadi " + "seimbang. KMeans digunakan untuk melakukan proses clustering, sedangkan silhouette_score digunakan untuk " + "menilai kualitas pembentukan cluster." + )) + items.append(paragraph( + "Kegunaannya dalam sistem adalah menyiapkan alat utama untuk mengolah data mobil sebelum data tersebut dipakai " + "sebagai dasar rekomendasi." + )) + + items.append(paragraph("17.2 Membaca Dataset", "Heading2")) + items.extend(code_block(""" +df = pd.read_csv("dataset_final.csv") +""")) + items.append(paragraph( + "Kode ini membaca file dataset_final.csv yang berisi data mobil. Dataset tersebut memuat informasi seperti " + "merk, model, harga, tahun, mesin_cc, transmisi, bahan bakar, dan atribut lainnya." + )) + items.append(paragraph( + "Dalam sistem, dataset ini menjadi sumber data utama untuk membentuk cluster. Jika data mobil berubah atau " + "ditambah, proses clustering dapat dijalankan kembali agar hasil rekomendasi mengikuti data terbaru." + )) + + items.append(paragraph("17.3 Menghapus Cluster Lama", "Heading2")) + items.extend(code_block(""" +if "cluster" in df.columns: + df = df.drop(columns=["cluster"]) +""")) + items.append(paragraph( + "Kode ini mengecek apakah dataset sudah memiliki kolom cluster. Jika ada, kolom tersebut dihapus terlebih " + "dahulu. Tujuannya agar proses clustering tidak memakai hasil lama, tetapi menghitung ulang cluster dari awal." + )) + items.append(paragraph( + "Kegunaannya dalam sistem adalah menjaga agar hasil cluster selalu sesuai dengan data dan proses perhitungan " + "terbaru, bukan hasil clustering sebelumnya." + )) + + items.append(paragraph("17.4 Menyamakan Nama Kolom Harga", "Heading2")) + items.extend(code_block(""" +if "Harga" in df.columns: + df = df.rename(columns={"Harga": "harga"}) +""")) + items.append(paragraph( + "Kode ini menyamakan nama kolom Harga menjadi harga. Penyamaan nama kolom penting karena kode clustering " + "mengambil atribut dengan nama harga, tahun, dan mesin_cc." + )) + items.append(paragraph( + "Dalam sistem, hal ini membantu mencegah error ketika dataset menggunakan nama kolom dengan huruf besar, " + "misalnya Harga, sedangkan kode membaca kolom harga." + )) + + items.append(paragraph("17.5 Memilih Tiga Atribut Utama", "Heading2")) + items.extend(code_block(""" +fitur = df[ + [ + "harga", + "tahun", + "mesin_cc" + ] +] +""")) + items.append(paragraph( + "Kode ini memilih tiga atribut yang digunakan untuk clustering, yaitu harga, tahun, dan mesin_cc. Ketiga atribut " + "tersebut dipakai karena berhubungan langsung dengan rekomendasi mobil bekas. Harga menentukan kesesuaian " + "dengan budget, tahun menunjukkan usia kendaraan, dan mesin_cc menunjukkan kapasitas mesin." + )) + items.append(paragraph( + "Kegunaannya dalam sistem adalah menentukan dasar pengelompokan mobil. Mobil dengan harga, tahun, dan mesin " + "yang mirip akan cenderung masuk ke cluster yang sama." + )) + + items.append(paragraph("17.6 Standarisasi Data", "Heading2")) + items.extend(code_block(""" +scaler = StandardScaler() +fitur_scaled = scaler.fit_transform(fitur) +""")) + items.append(paragraph( + "Kode ini melakukan standarisasi data. Standarisasi diperlukan karena nilai harga sangat besar dibandingkan " + "tahun dan mesin_cc. Jika tidak distandarisasi, perhitungan jarak pada K-Means akan terlalu dipengaruhi oleh " + "harga, sehingga atribut tahun dan mesin_cc menjadi kurang berpengaruh." + )) + items.append(paragraph( + "Dalam sistem, standarisasi membuat proses clustering lebih adil karena semua atribut berada pada skala yang " + "seimbang sebelum dihitung jaraknya." + )) + + items.append(paragraph("17.7 Mencari Jumlah Cluster Terbaik", "Heading2")) + items.extend(code_block(""" +for k in range(2, 7): + kmeans = KMeans( + n_clusters=k, + random_state=42, + n_init=10 + ) + + labels = kmeans.fit_predict(fitur_scaled) + score = silhouette_score(fitur_scaled, labels) + + print(f"Jumlah Cluster: {k}, Silhouette Score: {score}") +""")) + items.append(paragraph( + "Kode ini mencoba beberapa jumlah cluster, mulai dari 2 sampai 6. Setiap nilai k diuji dengan K-Means, lalu " + "hasilnya dinilai menggunakan silhouette_score. Nilai silhouette digunakan untuk melihat seberapa baik data " + "terpisah ke dalam cluster." + )) + items.append(paragraph( + "Kegunaannya dalam sistem adalah membantu menentukan jumlah cluster yang paling sesuai. Dengan cara ini, jumlah " + "cluster tidak dipilih secara asal, tetapi berdasarkan hasil evaluasi." + )) + + items.append(paragraph("17.8 Membuat Model K-Means Akhir", "Heading2")) + items.extend(code_block(""" +kmeans = KMeans( + n_clusters=4, + random_state=42, + n_init=10 +) +""")) + items.append(paragraph( + "Kode ini membuat model K-Means akhir dengan jumlah cluster sebanyak 4. Angka 4 disesuaikan dengan konfigurasi " + "pada sistem rekomendasi yang mengirim parameter jumlah_cluster = 4 ke Flask API." + )) + items.append(paragraph( + "Dalam sistem, model ini berfungsi untuk membagi data mobil ke dalam empat kelompok. Setiap kelompok berisi " + "mobil yang memiliki karakteristik harga, tahun, dan mesin_cc yang relatif mirip." + )) + + items.append(paragraph("17.9 Menambahkan Hasil Cluster ke Dataset", "Heading2")) + items.extend(code_block(""" +df["cluster"] = kmeans.fit_predict(fitur_scaled) +""")) + items.append(paragraph( + "Kode ini menjalankan K-Means pada data yang sudah distandarisasi, lalu menyimpan hasil cluster ke kolom baru " + "bernama cluster. Setiap mobil akan mendapatkan label cluster, misalnya 0, 1, 2, atau 3." + )) + items.append(paragraph( + "Kegunaannya dalam sistem adalah memberikan identitas kelompok pada setiap mobil. Label cluster ini dapat " + "dipakai untuk memilih kandidat mobil yang paling sesuai dengan budget pengguna." + )) + + items.append(paragraph("17.10 Menampilkan dan Menyimpan Hasil", "Heading2")) + items.extend(code_block(""" +print( + df[ + [ + "merk", + "model", + "harga", + "tahun", + "mesin_cc", + "cluster" + ] + ].head(20) +) + +df.to_csv("dataset_final_clustered.csv", index=False) +""")) + items.append(paragraph( + "Kode ini menampilkan sebagian hasil clustering agar peneliti dapat melihat apakah setiap mobil sudah memiliki " + "label cluster. Setelah itu, dataset disimpan ke file baru bernama dataset_final_clustered.csv." + )) + items.append(paragraph( + "Dalam sistem, file hasil clustering dapat digunakan sebagai dataset yang sudah siap dipakai untuk proses " + "rekomendasi. Data tersebut berisi informasi mobil beserta cluster-nya." + )) + + items.append(paragraph("17.11 Hubungan Kode dengan Fitur Rekomendasi Budget", "Heading2")) + items.append(paragraph( + "Secara keseluruhan, kode clustering ini berfungsi untuk mengelompokkan mobil sebelum proses rekomendasi " + "dilakukan. Ketika pengguna memasukkan budget, sistem dapat mencari kelompok mobil yang karakteristiknya paling " + "mendekati budget tersebut. Setelah cluster yang sesuai ditemukan, sistem menyaring mobil yang harganya tidak " + "melebihi budget pengguna dan mengurutkan hasil rekomendasi." + )) + items.append(paragraph( + "Dengan demikian, K-Means tidak hanya menampilkan mobil berdasarkan harga terdekat, tetapi membantu sistem " + "mempertimbangkan kemiripan karakteristik kendaraan berdasarkan harga, tahun, dan kapasitas mesin." + )) + + items.append(paragraph("Kalimat Ringkas untuk Laporan", "Heading2")) + items.append(paragraph( + "Kode clustering digunakan untuk mengelompokkan data mobil berdasarkan atribut harga, tahun, dan mesin_cc. " + "Sebelum dilakukan clustering, data distandarisasi agar setiap atribut memiliki skala yang seimbang. Setelah " + "model K-Means dijalankan, setiap mobil memperoleh label cluster. Label cluster tersebut digunakan sistem " + "sebagai dasar dalam memilih kandidat rekomendasi mobil yang sesuai dengan budget pengguna." + )) + + return items + + +def append_section(): + OUT_DOC.parent.mkdir(parents=True, exist_ok=True) + + with tempfile.TemporaryDirectory() as tmp: + tmp_dir = Path(tmp) + + with ZipFile(SOURCE_DOC, "r") as archive: + archive.extractall(tmp_dir) + + document_path = tmp_dir / "word" / "document.xml" + root = ET.parse(document_path).getroot() + body = root.find(qn("body")) + + sect_pr = None + for child in list(body): + if child.tag == qn("sectPr"): + sect_pr = child + body.remove(child) + break + + for item in new_section(): + body.append(item) + + if sect_pr is not None: + body.append(sect_pr) + + ET.ElementTree(root).write(document_path, encoding="utf-8", xml_declaration=True) + + if OUT_DOC.exists(): + OUT_DOC.unlink() + + with ZipFile(OUT_DOC, "w", ZIP_DEFLATED) as archive: + for path in tmp_dir.rglob("*"): + if path.is_file(): + archive.write(path, path.relative_to(tmp_dir).as_posix()) + + print(OUT_DOC.resolve()) + + +if __name__ == "__main__": + append_section() diff --git a/web_JMW/docs/append_initial_centroid_calculation.py b/web_JMW/docs/append_initial_centroid_calculation.py new file mode 100644 index 0000000..5c679d2 --- /dev/null +++ b/web_JMW/docs/append_initial_centroid_calculation.py @@ -0,0 +1,183 @@ +from pathlib import Path +from zipfile import ZipFile, ZIP_DEFLATED +import html +import shutil +import xml.etree.ElementTree as ET + + +BASE_DIR = Path(__file__).resolve().parent +INPUT_DOCX = BASE_DIR / "Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update.docx" +OUTPUT_DOCX = BASE_DIR / "Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update_Centroid.docx" + +W_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" +ET.register_namespace("w", W_NS) + + +def qn(tag): + return f"{{{W_NS}}}{tag}" + + +def paragraph(text, style=None, bold=False): + p = ET.Element(qn("p")) + if style: + p_pr = ET.SubElement(p, qn("pPr")) + p_style = ET.SubElement(p_pr, qn("pStyle")) + p_style.set(qn("val"), style) + r = ET.SubElement(p, qn("r")) + if bold: + r_pr = ET.SubElement(r, qn("rPr")) + ET.SubElement(r_pr, qn("b")) + t = ET.SubElement(r, qn("t")) + t.text = text + return p + + +def table(rows): + tbl = ET.Element(qn("tbl")) + tbl_pr = ET.SubElement(tbl, qn("tblPr")) + tbl_style = ET.SubElement(tbl_pr, qn("tblStyle")) + tbl_style.set(qn("val"), "TableGrid") + tbl_w = ET.SubElement(tbl_pr, qn("tblW")) + tbl_w.set(qn("w"), "0") + tbl_w.set(qn("type"), "auto") + + for row_index, row in enumerate(rows): + tr = ET.SubElement(tbl, qn("tr")) + for cell in row: + tc = ET.SubElement(tr, qn("tc")) + tc_pr = ET.SubElement(tc, qn("tcPr")) + tc_w = ET.SubElement(tc_pr, qn("tcW")) + tc_w.set(qn("w"), "2400") + tc_w.set(qn("type"), "dxa") + tc.append(paragraph(str(cell), bold=(row_index == 0))) + return tbl + + +def append_to_docx(): + if not INPUT_DOCX.exists(): + raise FileNotFoundError(f"Dokumen sumber tidak ditemukan: {INPUT_DOCX}") + + shutil.copyfile(INPUT_DOCX, OUTPUT_DOCX) + + with ZipFile(INPUT_DOCX, "r") as zin: + document_xml = zin.read("word/document.xml") + files = {name: zin.read(name) for name in zin.namelist() if name != "word/document.xml"} + + root = ET.fromstring(document_xml) + body = root.find(qn("body")) + sect_pr = body.find(qn("sectPr")) + insert_index = list(body).index(sect_pr) if sect_pr is not None else len(list(body)) + + content = [] + content.append(paragraph("18. Perhitungan Manual Centroid Awal Sesuai Sistem", style="Heading1")) + content.append(paragraph( + "Pada sistem rekomendasi mobil JMW, centroid awal tidak dipilih secara acak. " + "Kode pada Flask API terlebih dahulu mengurutkan data mobil berdasarkan harga, " + "kemudian memilih beberapa data yang posisinya tersebar dari harga terendah sampai harga tertinggi. " + "Data yang dipilih tersebut dijadikan centroid awal dalam bentuk vector normalisasi." + )) + content.append(paragraph( + "Atribut yang digunakan dalam proses clustering pada sistem adalah harga, tahun, dan mesin_cc. " + "Sebelum menjadi centroid, setiap nilai atribut dinormalisasi terlebih dahulu menggunakan Min-Max Normalization " + "agar semua atribut berada pada rentang 0 sampai 1." + )) + content.append(paragraph("Rumus normalisasi yang digunakan:", bold=True)) + content.append(paragraph("X' = (X - nilai minimum) / (nilai maksimum - nilai minimum)")) + content.append(paragraph("Rumus pemilihan posisi centroid awal pada sistem:", bold=True)) + content.append(paragraph("posisi = round(cluster_index * (jumlah_data - 1) / (jumlah_cluster - 1))")) + content.append(paragraph( + "Contoh berikut menggunakan jumlah cluster k=4 sesuai nilai yang saat ini dikirim oleh Laravel ke Flask API. " + "Jika sistem diubah menjadi k=6, rumusnya tetap sama, tetapi centroid awal yang dipilih berjumlah 6 data." + )) + + content.append(paragraph("Contoh data mobil yang sudah layak dipakai clustering:", bold=True)) + raw_rows = [ + ["Mobil", "Harga", "Tahun", "Mesin CC"], + ["Hyundai Ioniq", "122.000.000", "2021", "1197"], + ["Toyota Avanza", "125.000.000", "2019", "1500"], + ["Toyota Innova", "250.000.000", "2020", "2000"], + ["Toyota Fortuner", "500.000.000", "2021", "2500"], + ] + content.append(table(raw_rows)) + + content.append(paragraph( + "Dari contoh data tersebut, nilai minimum dan maksimum setiap atribut adalah: " + "harga minimum 122.000.000 dan harga maksimum 500.000.000; tahun minimum 2019 dan tahun maksimum 2021; " + "mesin minimum 1197 cc dan mesin maksimum 2500 cc." + )) + + content.append(paragraph("Hasil normalisasi setiap data:", bold=True)) + norm_rows = [ + ["Mobil", "Harga Normalisasi", "Tahun Normalisasi", "Mesin Normalisasi", "Vector Normalisasi"], + ["Hyundai Ioniq", "0,000", "1,000", "0,000", "[0,000; 1,000; 0,000]"], + ["Toyota Avanza", "0,008", "0,000", "0,233", "[0,008; 0,000; 0,233]"], + ["Toyota Innova", "0,339", "0,500", "0,616", "[0,339; 0,500; 0,616]"], + ["Toyota Fortuner", "1,000", "1,000", "1,000", "[1,000; 1,000; 1,000]"], + ] + content.append(table(norm_rows)) + + content.append(paragraph("Contoh perhitungan normalisasi:", bold=True)) + content.append(paragraph( + "Harga Toyota Avanza = (125.000.000 - 122.000.000) / (500.000.000 - 122.000.000) " + "= 3.000.000 / 378.000.000 = 0,008." + )) + content.append(paragraph( + "Tahun Toyota Avanza = (2019 - 2019) / (2021 - 2019) = 0 / 2 = 0,000." + )) + content.append(paragraph( + "Mesin Toyota Avanza = (1500 - 1197) / (2500 - 1197) = 303 / 1303 = 0,233." + )) + content.append(paragraph( + "Maka vector normalisasi Toyota Avanza adalah [0,008; 0,000; 0,233]. " + "Vector inilah yang digunakan sistem untuk menghitung jarak ke centroid." + )) + + content.append(paragraph("Perhitungan posisi centroid awal untuk k=4:", bold=True)) + content.append(paragraph("Jumlah data = 4, jumlah cluster = 4.")) + centroid_rows = [ + ["Cluster", "cluster_index", "Perhitungan Posisi", "Posisi", "Centroid Awal"], + ["C1", "0", "round(0 * (4 - 1) / (4 - 1))", "0", "Hyundai Ioniq"], + ["C2", "1", "round(1 * (4 - 1) / (4 - 1))", "1", "Toyota Avanza"], + ["C3", "2", "round(2 * (4 - 1) / (4 - 1))", "2", "Toyota Innova"], + ["C4", "3", "round(3 * (4 - 1) / (4 - 1))", "3", "Toyota Fortuner"], + ] + content.append(table(centroid_rows)) + + content.append(paragraph( + "Berdasarkan perhitungan tersebut, centroid awal yang digunakan adalah vector normalisasi dari data pada posisi 0, 1, 2, dan 3." + )) + final_rows = [ + ["Centroid", "Vector Centroid Awal"], + ["C1", "[0,000; 1,000; 0,000]"], + ["C2", "[0,008; 0,000; 0,233]"], + ["C3", "[0,339; 0,500; 0,616]"], + ["C4", "[1,000; 1,000; 1,000]"], + ] + content.append(table(final_rows)) + + content.append(paragraph( + "Setelah centroid awal terbentuk, sistem menghitung jarak setiap mobil ke semua centroid menggunakan Euclidean Distance. " + "Mobil akan masuk ke cluster yang memiliki jarak paling dekat. Setelah semua data masuk ke cluster, sistem menghitung ulang centroid baru " + "berdasarkan rata-rata vector anggota cluster. Proses ini diulang sampai jumlah iterasi selesai atau posisi cluster tidak banyak berubah." + )) + content.append(paragraph( + "Dengan demikian, centroid awal pada sistem bukan angka yang dibuat manual oleh pengguna, tetapi berasal dari data mobil yang sudah dinormalisasi. " + "Pemilihan awalnya mengikuti urutan harga agar centroid mewakili sebaran harga dari rendah sampai tinggi, lalu atribut tahun dan mesin tetap ikut mempengaruhi " + "jarak dan pembentukan cluster." + )) + + for offset, element in enumerate(content): + body.insert(insert_index + offset, element) + + new_xml = ET.tostring(root, encoding="utf-8", xml_declaration=True) + + with ZipFile(OUTPUT_DOCX, "w", ZIP_DEFLATED) as zout: + for name, data in files.items(): + zout.writestr(name, data) + zout.writestr("word/document.xml", new_xml) + + print(OUTPUT_DOCX) + + +if __name__ == "__main__": + append_to_docx() diff --git a/web_JMW/docs/append_k_determination_explanation.py b/web_JMW/docs/append_k_determination_explanation.py new file mode 100644 index 0000000..62da03f --- /dev/null +++ b/web_JMW/docs/append_k_determination_explanation.py @@ -0,0 +1,206 @@ +from pathlib import Path +from zipfile import ZIP_DEFLATED, ZipFile +import tempfile +import xml.etree.ElementTree as ET + + +SOURCE_DOC = Path("docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update.docx") +OUT_DOC = Path("docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan_Update_K.docx") + +WORD_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" +ET.register_namespace("w", WORD_NS) + + +def qn(name): + return f"{{{WORD_NS}}}{name}" + + +def paragraph(text="", style=None): + p = ET.Element(qn("p")) + if style: + p_pr = ET.SubElement(p, qn("pPr")) + p_style = ET.SubElement(p_pr, qn("pStyle")) + p_style.set(qn("val"), style) + + run = ET.SubElement(p, qn("r")) + t = ET.SubElement(run, qn("t")) + t.set("{http://www.w3.org/XML/1998/namespace}space", "preserve") + t.text = text + return p + + +def code_paragraph(text): + p = ET.Element(qn("p")) + p_pr = ET.SubElement(p, qn("pPr")) + p_style = ET.SubElement(p_pr, qn("pStyle")) + p_style.set(qn("val"), "Code") + + run = ET.SubElement(p, qn("r")) + t = ET.SubElement(run, qn("t")) + t.set("{http://www.w3.org/XML/1998/namespace}space", "preserve") + t.text = text + return p + + +def page_break(): + p = ET.Element(qn("p")) + r = ET.SubElement(p, qn("r")) + br = ET.SubElement(r, qn("br")) + br.set(qn("type"), "page") + return p + + +def code_block(text): + return [code_paragraph(line) for line in text.strip("\n").splitlines()] + + +def new_section(): + items = [] + items.append(page_break()) + items.append(paragraph("18. Cara Menentukan Nilai k pada K-Means", "Heading1")) + items.append(paragraph( + "Nilai k pada K-Means menunjukkan jumlah cluster atau jumlah kelompok yang akan dibentuk. Dalam sistem " + "rekomendasi mobil JMW Showroom, nilai k digunakan untuk membagi data mobil ke dalam beberapa kelompok " + "berdasarkan kemiripan harga, tahun, dan mesin_cc." + )) + + items.append(paragraph("18.1 Pengertian Nilai k", "Heading2")) + items.append(paragraph( + "Jika k bernilai 4, maka sistem akan membentuk empat kelompok mobil. Setiap mobil akan masuk ke salah satu " + "cluster berdasarkan jarak terdekat terhadap centroid. Semakin tepat nilai k yang digunakan, semakin baik pula " + "pembagian kelompok mobil yang dihasilkan." + )) + + items.append(paragraph("18.2 Nilai k pada Implementasi Sistem", "Heading2")) + items.append(paragraph( + "Pada implementasi sistem, nilai k yang digunakan adalah 4. Nilai ini dikirim oleh Laravel ke Flask API melalui " + "parameter jumlah_cluster. Dengan demikian, ketika fitur rekomendasi budget dijalankan, Flask API akan membuat " + "model K-Means dengan empat cluster." + )) + items.extend(code_block(""" +'filter' => [ + 'toleransi_harga_percent' => 10, + 'jumlah_cluster' => 4, +], +""")) + items.append(paragraph( + "Parameter tersebut diterima oleh Flask API dan digunakan pada fungsi apply_kmeans_budget_filter(). Jika " + "parameter jumlah_cluster tersedia, maka nilai tersebut dipakai sebagai jumlah cluster. Jika tidak tersedia, " + "sistem menggunakan nilai default 4." + )) + items.extend(code_block(""" +model = build_kmeans_model( + cars, + cluster_count=to_int(filters.get("jumlah_cluster"), default=4) +) +""")) + + items.append(paragraph("18.3 Pengujian Nilai k Menggunakan Silhouette Score", "Heading2")) + items.append(paragraph( + "Agar nilai k tidak dipilih secara sembarang, jumlah cluster dapat diuji menggunakan silhouette score. " + "Silhouette score digunakan untuk mengukur seberapa baik data berada di dalam cluster-nya dan seberapa jauh " + "data tersebut dari cluster lain. Nilai silhouette yang lebih tinggi menunjukkan hasil cluster yang lebih baik." + )) + items.extend(code_block(""" +for k in range(2, 7): + kmeans = KMeans( + n_clusters=k, + random_state=42, + n_init=10 + ) + + labels = kmeans.fit_predict(fitur_scaled) + score = silhouette_score(fitur_scaled, labels) + + print(f"Jumlah Cluster: {k}, Silhouette Score: {score}") +""")) + items.append(paragraph( + "Kode tersebut mencoba beberapa nilai k, yaitu 2 sampai 6. Setiap nilai k diuji dengan K-Means, kemudian " + "hasil cluster-nya dievaluasi menggunakan silhouette score. Dari hasil tersebut, peneliti dapat melihat nilai " + "k mana yang memberikan kualitas cluster terbaik." + )) + + items.append(paragraph("18.4 Contoh Hasil Pengujian", "Heading2")) + items.append(paragraph( + "Misalnya hasil pengujian silhouette score menghasilkan nilai sebagai berikut:" + )) + items.extend(code_block(""" +Jumlah Cluster: 2, Silhouette Score: 0,2281 +Jumlah Cluster: 3, Silhouette Score: 0,2345 +Jumlah Cluster: 4, Silhouette Score: 0,2294 +Jumlah Cluster: 5, Silhouette Score: 0,2394 +Jumlah Cluster: 6, Silhouette Score: 0,2570 +""")) + items.append(paragraph( + "Dari contoh tersebut, k = 6 memiliki nilai silhouette score tertinggi. Namun pada implementasi sistem, k = 4 " + "digunakan karena sistem ingin membagi mobil ke dalam empat kelompok utama yang lebih mudah diterapkan pada " + "fitur rekomendasi budget, misalnya kelompok mobil ekonomis, menengah, tinggi, dan premium. Pemilihan k = 4 " + "juga disesuaikan dengan konfigurasi yang sudah digunakan pada Flask API." + )) + + items.append(paragraph("18.5 Alasan Sistem Menggunakan k = 4", "Heading2")) + items.append(paragraph( + "Nilai k = 4 digunakan karena pembagian empat cluster dianggap cukup untuk merepresentasikan kelompok mobil " + "berdasarkan harga, tahun, dan mesin_cc. Dengan empat cluster, sistem dapat memisahkan mobil ke dalam beberapa " + "kelompok karakteristik tanpa membuat pembagian terlalu banyak dan sulit diinterpretasikan." + )) + items.append(paragraph( + "Secara sederhana, empat cluster dapat diinterpretasikan sebagai kelompok mobil dengan karakteristik berikut: " + "cluster harga rendah atau ekonomis, cluster harga menengah, cluster harga tinggi, dan cluster premium atau " + "spesifikasi lebih tinggi. Nama atau karakteristik akhir setiap cluster tetap perlu dilihat dari rata-rata " + "data pada masing-masing cluster." + )) + + items.append(paragraph("18.6 Kalimat untuk Laporan", "Heading2")) + items.append(paragraph( + "Nilai k pada metode K-Means ditentukan dengan mempertimbangkan hasil pengujian jumlah cluster dan kebutuhan " + "implementasi sistem. Pada sistem ini, jumlah cluster yang digunakan adalah k = 4. Nilai tersebut digunakan " + "untuk membagi data mobil menjadi empat kelompok berdasarkan atribut harga, tahun, dan mesin_cc. Pemilihan " + "k = 4 juga disesuaikan dengan konfigurasi sistem rekomendasi pada Flask API melalui parameter " + "jumlah_cluster = 4." + )) + + return items + + +def append_section(): + OUT_DOC.parent.mkdir(parents=True, exist_ok=True) + + with tempfile.TemporaryDirectory() as tmp: + tmp_dir = Path(tmp) + + with ZipFile(SOURCE_DOC, "r") as archive: + archive.extractall(tmp_dir) + + document_path = tmp_dir / "word" / "document.xml" + root = ET.parse(document_path).getroot() + body = root.find(qn("body")) + + sect_pr = None + for child in list(body): + if child.tag == qn("sectPr"): + sect_pr = child + body.remove(child) + break + + for item in new_section(): + body.append(item) + + if sect_pr is not None: + body.append(sect_pr) + + ET.ElementTree(root).write(document_path, encoding="utf-8", xml_declaration=True) + + if OUT_DOC.exists(): + OUT_DOC.unlink() + + with ZipFile(OUT_DOC, "w", ZIP_DEFLATED) as archive: + for path in tmp_dir.rglob("*"): + if path.is_file(): + archive.write(path, path.relative_to(tmp_dir).as_posix()) + + print(OUT_DOC.resolve()) + + +if __name__ == "__main__": + append_section() diff --git a/web_JMW/docs/build_kmeans_detailed_doc.py b/web_JMW/docs/build_kmeans_detailed_doc.py new file mode 100644 index 0000000..04dd9ea --- /dev/null +++ b/web_JMW/docs/build_kmeans_detailed_doc.py @@ -0,0 +1,598 @@ +from html import escape +from pathlib import Path +from zipfile import ZIP_DEFLATED, ZipFile + + +OUT = Path("docs/penjelasan-lengkap-kmeans-rekomendasi-budget.docx") + + +def paragraph(text="", style=None): + text = escape(text) + style_xml = f'' if style else "" + return f'{style_xml}{text}' + + +def code_block(text): + rows = [] + for line in text.strip("\n").splitlines(): + rows.append( + '' + f'{escape(line)}' + ) + return "".join(rows) + + +def table(headers, rows): + xml = [ + '' + '' + '' + '' + '' + '' + '' + "" + ] + for row in [headers] + rows: + xml.append("") + for cell in row: + xml.append('') + xml.append(paragraph(str(cell))) + xml.append("") + xml.append("") + xml.append("") + return "".join(xml) + + +def bullet(items): + return "".join(paragraph(f"- {item}") for item in items) + + +def build_body(): + body = [] + + body.append(paragraph("Penjelasan Lengkap Metode K-Means pada Fitur Rekomendasi Mobil Berdasarkan Budget", "Title")) + body.append(paragraph( + "Dokumen ini menjelaskan tahapan metode K-Means yang digunakan pada fitur rekomendasi mobil sesuai budget. " + "Penjelasan disesuaikan dengan implementasi sistem, yaitu aplikasi Laravel sebagai sistem utama dan Flask API " + "sebagai layanan pengolahan rekomendasi." + )) + + body.append(paragraph("1. Gambaran Umum Fitur Rekomendasi", "Heading1")) + body.append(paragraph( + "Fitur rekomendasi budget bekerja ketika pengguna memasukkan nominal budget maksimal. Laravel menerima input " + "tersebut, lalu mengirim request ke Flask API. Flask API membaca dataset mobil, menjalankan proses K-Means, " + "memilih cluster yang paling sesuai dengan budget pengguna, kemudian mengembalikan daftar mobil rekomendasi " + "kepada Laravel." + )) + body.append(paragraph("Alur sistem secara ringkas:", "Heading2")) + body.append(bullet([ + "Pengguna memasukkan budget pada halaman rekomendasi.", + "Laravel memanggil endpoint Flask API /recommend.", + "Flask membaca dataset mobil.", + "Flask membentuk cluster dengan K-Means berdasarkan harga, tahun, dan mesin_cc.", + "Sistem menentukan cluster yang paling dekat dengan budget pengguna.", + "Mobil dalam cluster tersebut difilter agar tidak melebihi budget.", + "Hasil akhir diurutkan menggunakan scoring, lalu ditampilkan oleh Laravel." + ])) + + body.append(paragraph("2. Atribut yang Digunakan dalam K-Means", "Heading1")) + body.append(paragraph( + "K-Means pada sistem ini menggunakan tiga atribut numerik. Ketiga atribut tersebut diambil dari data mobil " + "dan digunakan sebagai vector fitur untuk proses clustering." + )) + body.append(table(["Atribut", "Nama di Kode", "Fungsi dalam Rekomendasi"], [ + ["Harga mobil", "harga", "Menentukan kedekatan mobil dengan budget pengguna."], + ["Tahun mobil", "tahun", "Menunjukkan usia kendaraan; mobil lebih muda biasanya lebih menarik."], + ["Kapasitas mesin", "mesin_cc", "Menunjukkan karakteristik performa dan spesifikasi kendaraan."], + ])) + body.append(paragraph("Potongan kode atribut yang digunakan:", "Heading2")) + body.append(code_block(""" +def car_features(car): + return [car["harga"], car["tahun"], car["mesin_cc"]] +""")) + body.append(paragraph( + "Kode tersebut menunjukkan bahwa setiap mobil diubah menjadi vector berisi tiga nilai, yaitu harga, tahun, " + "dan kapasitas mesin. Vector inilah yang kemudian diproses dalam K-Means." + )) + + body.append(paragraph("3. Membaca dan Menyiapkan Dataset", "Heading1")) + body.append(paragraph( + "Flask API membaca dataset mobil dari file yang tersedia di project. Setiap baris dataset diubah menjadi data " + "mobil yang memiliki atribut merk, model, kategori, tahun, mesin_cc, transmisi, bahan_bakar, harga, dan cluster. " + "Untuk proses K-Means, atribut yang digunakan hanya harga, tahun, dan mesin_cc." + )) + body.append(paragraph("Potongan kode pembacaan data:", "Heading2")) + body.append(code_block(""" +cars.append( + { + "merk": row.get("merk", "").strip(), + "model": row.get("model", "").strip(), + "nama": f"{row.get('merk', '').strip()} {row.get('model', '').strip()}".strip(), + "tahun": to_int(row.get("tahun")), + "mesin_cc": to_int(row.get("mesin_cc")), + "harga": price, + "cluster": to_int(row.get("cluster"), default=None), + } +) +""")) + body.append(paragraph( + "Data dengan harga tidak valid tidak digunakan. Pada pembentukan model K-Means, sistem juga hanya memakai data " + "yang memiliki harga, tahun, dan mesin_cc lebih dari 0." + )) + + body.append(paragraph("4. Normalisasi Data", "Heading1")) + body.append(paragraph( + "Normalisasi adalah proses mengubah nilai atribut ke skala yang sama. Pada sistem ini digunakan Min-Max " + "Normalization agar nilai berada pada rentang 0 sampai 1. Normalisasi diperlukan karena harga memiliki skala " + "ratusan juta, sedangkan tahun sekitar 2019-2025 dan mesin sekitar 1000-2500 cc. Tanpa normalisasi, atribut " + "harga akan terlalu mendominasi perhitungan jarak." + )) + body.append(paragraph("Rumus normalisasi:", "Heading2")) + body.append(code_block(""" +nilai_normal = (nilai - nilai_minimum) / (nilai_maksimum - nilai_minimum) +""")) + body.append(paragraph("Potongan kode normalisasi:", "Heading2")) + body.append(code_block(""" +def scaled_value(value, minimum, maximum): + if maximum == minimum: + return 0.0 + + return (value - minimum) / (maximum - minimum) +""")) + body.append(paragraph("Kode pembentukan vector normalisasi:", "Heading2")) + body.append(code_block(""" +feature_rows = [car_features(car) for car in usable_cars] +columns = list(zip(*feature_rows)) +ranges = [(min(column), max(column)) for column in columns] +vectors = [ + [scaled_value(value, ranges[index][0], ranges[index][1]) for index, value in enumerate(row)] + for row in feature_rows +] +""")) + + body.append(paragraph("5. Contoh Data dan Perhitungan Normalisasi", "Heading1")) + body.append(paragraph("Misalkan terdapat data mobil berikut:")) + body.append(table(["Mobil", "Harga", "Tahun", "Mesin CC"], [ + ["Toyota Avanza", "125.000.000", "2019", "1500"], + ["Hyundai Ioniq", "122.000.000", "2021", "1197"], + ["Toyota Fortuner", "200.000.000", "2020", "2500"], + ["Toyota Innova", "250.000.000", "2020", "2000"], + ["Fortuner Baru", "500.000.000", "2021", "2500"], + ])) + body.append(paragraph("Nilai minimum dan maksimum dari contoh data:", "Heading2")) + body.append(table(["Atribut", "Minimum", "Maksimum"], [ + ["Harga", "122.000.000", "500.000.000"], + ["Tahun", "2019", "2021"], + ["Mesin CC", "1197", "2500"], + ])) + body.append(paragraph("Contoh normalisasi Toyota Avanza:", "Heading2")) + body.append(code_block(""" +Harga: +(125.000.000 - 122.000.000) / (500.000.000 - 122.000.000) += 3.000.000 / 378.000.000 += 0,008 + +Tahun: +(2019 - 2019) / (2021 - 2019) += 0 / 2 += 0 + +Mesin: +(1500 - 1197) / (2500 - 1197) += 303 / 1303 += 0,233 +""")) + body.append(paragraph("Jadi vector normalisasi Toyota Avanza adalah:", "Heading2")) + body.append(code_block(""" +[0,008, 0,000, 0,233] +""")) + body.append(paragraph("Contoh normalisasi Toyota Fortuner harga 200 juta:", "Heading2")) + body.append(code_block(""" +Harga: +(200.000.000 - 122.000.000) / (500.000.000 - 122.000.000) += 78.000.000 / 378.000.000 += 0,206 + +Tahun: +(2020 - 2019) / (2021 - 2019) += 1 / 2 += 0,500 + +Mesin: +(2500 - 1197) / (2500 - 1197) += 1303 / 1303 += 1,000 +""")) + body.append(paragraph("Jadi vector normalisasi Toyota Fortuner adalah:", "Heading2")) + body.append(code_block(""" +[0,206, 0,500, 1,000] +""")) + + body.append(paragraph("6. Menentukan Centroid Awal", "Heading1")) + body.append(paragraph( + "Centroid adalah titik pusat cluster. Pada implementasi sistem, centroid awal dipilih berdasarkan data yang " + "sudah diurutkan menurut harga. Cara ini membuat centroid awal tersebar dari data harga rendah sampai harga " + "tinggi. Jumlah cluster default yang digunakan adalah 4 cluster." + )) + body.append(paragraph("Potongan kode centroid awal:", "Heading2")) + body.append(code_block(""" +cluster_count = max(1, min(cluster_count, len(vectors))) +sorted_indexes = sorted(range(len(usable_cars)), key=lambda index: usable_cars[index]["harga"]) +centroids = [] + +for cluster_index in range(cluster_count): + sample_position = round(cluster_index * (len(sorted_indexes) - 1) / max(cluster_count - 1, 1)) + centroids.append(vectors[sorted_indexes[sample_position]][:]) +""")) + body.append(paragraph( + "Secara teori, centroid awal dapat ditentukan secara acak atau menggunakan strategi tertentu. Pada sistem ini, " + "centroid awal tidak dipilih acak, melainkan berdasarkan persebaran harga agar cluster awal lebih stabil." + )) + + body.append(paragraph("7. Menghitung Jarak dengan Euclidean Distance", "Heading1")) + body.append(paragraph( + "Setelah centroid awal ditentukan, sistem menghitung jarak setiap mobil terhadap seluruh centroid. Jarak yang " + "digunakan adalah Euclidean Distance." + )) + body.append(paragraph("Rumus Euclidean Distance:", "Heading2")) + body.append(code_block(""" +d = sqrt((x1 - c1)^2 + (x2 - c2)^2 + (x3 - c3)^2) +""")) + body.append(paragraph("Keterangan:", "Heading2")) + body.append(bullet([ + "x1, x2, x3 adalah nilai normalisasi mobil untuk harga, tahun, dan mesin_cc.", + "c1, c2, c3 adalah nilai centroid untuk harga, tahun, dan mesin_cc.", + "d adalah jarak antara mobil dengan centroid." + ])) + body.append(paragraph("Potongan kode jarak:", "Heading2")) + body.append(code_block(""" +def distance(point, centroid): + return math.sqrt(sum((point[index] - centroid[index]) ** 2 for index in range(len(point)))) +""")) + body.append(paragraph("Contoh perhitungan jarak:", "Heading2")) + body.append(paragraph( + "Misalnya vector normalisasi Toyota Avanza adalah [0,008, 0,000, 0,233] dan centroid C1 adalah " + "[0,000, 1,000, 0,000]. Maka jaraknya:" + )) + body.append(code_block(""" +d = sqrt((0,008 - 0,000)^2 + (0,000 - 1,000)^2 + (0,233 - 0,000)^2) +d = sqrt(0,000064 + 1,000000 + 0,054289) +d = sqrt(1,054353) +d = 1,027 +""")) + body.append(paragraph( + "Jarak yang lebih kecil menunjukkan bahwa data mobil lebih dekat dengan centroid tersebut. Mobil akan masuk " + "ke cluster dengan centroid yang jaraknya paling kecil." + )) + + body.append(paragraph("8. Menentukan Cluster Terdekat", "Heading1")) + body.append(paragraph( + "Setelah jarak dihitung, sistem memasukkan setiap mobil ke cluster dengan centroid terdekat. Tahap ini disebut " + "assignment step pada K-Means." + )) + body.append(paragraph("Potongan kode assignment cluster:", "Heading2")) + body.append(code_block(""" +for index, vector in enumerate(vectors): + nearest_cluster = min(range(cluster_count), key=lambda cluster: distance(vector, centroids[cluster])) + if labels[index] != nearest_cluster: + changed = True + labels[index] = nearest_cluster +""")) + body.append(paragraph( + "Variabel labels menyimpan nomor cluster untuk setiap mobil. Jika cluster sebuah mobil berubah, variabel " + "changed bernilai True, sehingga proses iterasi akan berlanjut." + )) + + body.append(paragraph("9. Menghitung Ulang Centroid", "Heading1")) + body.append(paragraph( + "Setelah semua mobil ditempatkan pada cluster terdekat, sistem menghitung ulang centroid. Centroid baru " + "didapatkan dari rata-rata seluruh anggota dalam cluster tersebut." + )) + body.append(paragraph("Potongan kode update centroid:", "Heading2")) + body.append(code_block(""" +new_centroids = [] +for cluster in range(cluster_count): + members = [vectors[index] for index, label in enumerate(labels) if label == cluster] + if not members: + new_centroids.append(centroids[cluster]) + continue + + new_centroids.append( + [sum(member[column] for member in members) / len(members) for column in range(len(vectors[0]))] + ) + +centroids = new_centroids +""")) + body.append(paragraph("Contoh perhitungan centroid baru:", "Heading2")) + body.append(paragraph( + "Misalnya Cluster 0 memiliki dua anggota dengan vector normalisasi berikut:" + )) + body.append(code_block(""" +Mobil A = [0,008, 0,000, 0,233] +Mobil B = [0,000, 1,000, 0,000] +""")) + body.append(paragraph("Centroid baru Cluster 0 dihitung dengan rata-rata setiap atribut:", "Heading2")) + body.append(code_block(""" +Harga centroid = (0,008 + 0,000) / 2 = 0,004 +Tahun centroid = (0,000 + 1,000) / 2 = 0,500 +Mesin centroid = (0,233 + 0,000) / 2 = 0,1165 + +Centroid baru = [0,004, 0,500, 0,1165] +""")) + + body.append(paragraph("10. Iterasi Sampai Stabil", "Heading1")) + body.append(paragraph( + "Proses menghitung jarak, menentukan cluster, dan menghitung ulang centroid dilakukan berulang. Iterasi akan " + "berhenti jika anggota cluster tidak berubah lagi atau jika sudah mencapai batas iterasi. Dalam sistem ini, " + "batas iterasi default adalah 30." + )) + body.append(paragraph("Potongan kode iterasi:", "Heading2")) + body.append(code_block(""" +for _ in range(iterations): + changed = False + + # assignment step + # update centroid step + + if not changed: + break +""")) + + body.append(paragraph("11. Menentukan Cluster yang Sesuai dengan Budget User", "Heading1")) + body.append(paragraph( + "Setelah model K-Means terbentuk, sistem harus menentukan cluster mana yang paling cocok dengan budget " + "pengguna. Untuk itu, sistem membuat data target dari budget pengguna. Nilai harga target adalah budget yang " + "dimasukkan user, sedangkan tahun dan mesin target diambil dari median mobil yang harganya kurang dari atau " + "sama dengan budget." + )) + body.append(paragraph("Potongan kode penentuan cluster budget:", "Heading2")) + body.append(code_block(""" +def predict_budget_cluster(model, budget): + model_cars = model["cars"] + target_year = median([car["tahun"] for car in model_cars if car["harga"] <= budget] or [car["tahun"] for car in model_cars]) + target_engine = median([car["mesin_cc"] for car in model_cars if car["harga"] <= budget] or [car["mesin_cc"] for car in model_cars]) + target_features = [budget, target_year, target_engine] + target_vector = [ + scaled_value(value, model["ranges"][index][0], model["ranges"][index][1]) + for index, value in enumerate(target_features) + ] + + return min( + range(model["cluster_count"]), + key=lambda cluster: distance(target_vector, model["centroids"][cluster]), + ) +""")) + body.append(paragraph("Contoh:", "Heading2")) + body.append(paragraph( + "Jika pengguna memasukkan budget Rp200.000.000, sistem membuat target harga 200.000.000. Tahun dan mesin " + "target dihitung dari median data mobil yang harganya <= 200.000.000. Setelah itu target dinormalisasi dan " + "dibandingkan dengan semua centroid. Cluster dengan jarak paling kecil menjadi cluster rekomendasi." + )) + + body.append(paragraph("12. Filter Mobil Berdasarkan Cluster dan Budget", "Heading1")) + body.append(paragraph( + "Setelah cluster target ditemukan, sistem mengambil mobil dari cluster tersebut dengan syarat harga tidak " + "melebihi budget. Jika ada mobil dengan harga sama persis dengan budget, mobil tersebut diprioritaskan." + )) + body.append(paragraph("Potongan kode filter budget:", "Heading2")) + body.append(code_block(""" +same_cluster = [ + car for car in cars + if model["labels"].get(id(car)) == target_cluster and car["harga"] <= budget +] + +exact_matches = [car for car in same_cluster if car["harga"] == budget] +selected = exact_matches or same_cluster or [car for car in cars if car["harga"] <= budget] +""")) + body.append(paragraph("Contoh jika budget Rp200.000.000:", "Heading2")) + body.append(table(["Mobil", "Harga", "Keterangan"], [ + ["Toyota Avanza", "125.000.000", "Lolos karena di bawah budget"], + ["Hyundai Ioniq", "122.000.000", "Lolos karena di bawah budget"], + ["Toyota Fortuner", "200.000.000", "Diprioritaskan karena sama dengan budget"], + ["Toyota Innova", "250.000.000", "Tidak lolos karena melebihi budget"], + ["Fortuner Baru", "500.000.000", "Tidak lolos karena melebihi budget"], + ])) + + body.append(paragraph("13. Scoring Setelah K-Means", "Heading1")) + body.append(paragraph( + "K-Means digunakan untuk membentuk kelompok kandidat mobil. Setelah kandidat diperoleh, sistem masih melakukan " + "scoring untuk mengurutkan hasil rekomendasi. Scoring ini bukan proses K-Means, melainkan proses tambahan agar " + "hasil rekomendasi lebih rapi dan relevan." + )) + body.append(paragraph("Potongan kode bobot strategi harga_pas:", "Heading2")) + body.append(code_block(""" +if normalize_text(strategy) in ["harga_pas", "harga pas", "spesifik", "specific"]: + return { + "budget": 0.70, + "preference": 0.15, + "year": 0.10, + "engine": 0.05, + "cluster": 0.00, + } +""")) + body.append(paragraph( + "Pada strategi harga_pas, bobot harga adalah 70%. Artinya hasil rekomendasi lebih mengutamakan mobil yang " + "harganya paling mendekati budget pengguna. Tahun dan mesin tetap dihitung, tetapi pengaruhnya lebih kecil." + )) + + body.append(paragraph("14. Kesimpulan Tahapan K-Means pada Sistem", "Heading1")) + body.append(paragraph( + "Tahapan K-Means pada sistem rekomendasi mobil sudah sesuai dengan konsep dasar K-Means. Sistem menentukan " + "atribut, melakukan normalisasi, menentukan centroid awal, menghitung jarak, membentuk cluster, memperbarui " + "centroid, dan mengulang proses sampai stabil. Setelah itu, hasil clustering digunakan untuk memilih mobil " + "yang paling sesuai dengan budget pengguna." + )) + body.append(paragraph("Kalimat yang dapat digunakan dalam laporan:", "Heading2")) + body.append(paragraph( + "Pada sistem ini, metode K-Means digunakan untuk mengelompokkan data mobil berdasarkan tiga atribut, yaitu " + "harga, tahun, dan kapasitas mesin. Data terlebih dahulu dinormalisasi menggunakan Min-Max Normalization agar " + "setiap atribut berada pada skala yang sama. Setelah itu, sistem membentuk cluster menggunakan perhitungan " + "jarak Euclidean. Cluster yang paling dekat dengan budget pengguna dipilih sebagai dasar rekomendasi. Mobil " + "dalam cluster tersebut kemudian disaring agar tidak melebihi budget dan diurutkan menggunakan scoring." + )) + + body.append(paragraph("15. Catatan Penting untuk Demo dan Sidang", "Heading1")) + body.append(paragraph( + "K-Means pada sistem dijalankan oleh Flask API melalui file flask_api/app.py. Laravel hanya memanggil hasil " + "rekomendasi dari API tersebut. Jika Flask API tidak aktif, Laravel akan memakai fallback filter harga biasa. " + "Oleh karena itu, saat demo atau sidang, Flask API harus dijalankan agar fitur rekomendasi benar-benar memakai " + "K-Means." + )) + + body.append(paragraph("16. Kode Program Clustering dengan 3 Atribut", "Heading1")) + body.append(paragraph( + "Berikut adalah kode program Python untuk proses clustering K-Means yang disesuaikan dengan tiga atribut utama " + "pada sistem rekomendasi, yaitu harga, tahun, dan mesin_cc. Kode ini dapat digunakan sebagai contoh implementasi " + "pada laporan karena hanya memakai atribut yang relevan dengan fitur rekomendasi budget." + )) + body.append(code_block(""" +# Import library +import pandas as pd + +from sklearn.preprocessing import StandardScaler +from sklearn.cluster import KMeans +from sklearn.metrics import silhouette_score + + +# Membaca dataset +df = pd.read_csv("dataset_final.csv") + + +# Jika masih ada kolom cluster lama, hapus terlebih dahulu +if "cluster" in df.columns: + df = df.drop(columns=["cluster"]) + + +# Samakan nama kolom harga +if "Harga" in df.columns: + df = df.rename(columns={"Harga": "harga"}) + + +# Pilih 3 atribut utama untuk clustering +fitur = df[ + [ + "harga", + "tahun", + "mesin_cc" + ] +] + + +# Standarisasi data +scaler = StandardScaler() +fitur_scaled = scaler.fit_transform(fitur) + + +# Mencari jumlah cluster terbaik menggunakan silhouette score +for k in range(2, 7): + kmeans = KMeans( + n_clusters=k, + random_state=42, + n_init=10 + ) + + labels = kmeans.fit_predict(fitur_scaled) + score = silhouette_score(fitur_scaled, labels) + + print(f"Jumlah Cluster: {k}, Silhouette Score: {score}") + + +# Membuat model K-Means akhir +kmeans = KMeans( + n_clusters=4, + random_state=42, + n_init=10 +) + + +# Menambahkan hasil cluster ke dataset +df["cluster"] = kmeans.fit_predict(fitur_scaled) + + +# Menampilkan hasil clustering +print( + df[ + [ + "merk", + "model", + "harga", + "tahun", + "mesin_cc", + "cluster" + ] + ].head(20) +) + + +# Menyimpan dataset yang sudah memiliki cluster +df.to_csv("dataset_final_clustered.csv", index=False) +""")) + body.append(paragraph( + "Pada kode tersebut, data terlebih dahulu dibaca dari file dataset_final.csv. Jika terdapat kolom cluster lama, " + "kolom tersebut dihapus agar hasil clustering dihitung ulang dari awal. Setelah itu, sistem memilih tiga atribut " + "utama, yaitu harga, tahun, dan mesin_cc." + )) + body.append(paragraph( + "Tahap standarisasi dilakukan menggunakan StandardScaler agar ketiga atribut berada pada skala yang seimbang. " + "Hal ini penting karena harga memiliki nilai yang jauh lebih besar dibandingkan tahun dan mesin_cc. Setelah data " + "distandarisasi, K-Means dijalankan untuk membentuk cluster." + )) + body.append(paragraph( + "Bagian silhouette score digunakan untuk melihat kualitas beberapa jumlah cluster. Setelah itu, sistem membuat " + "model akhir. Pada contoh ini digunakan 4 cluster agar sesuai dengan konfigurasi sistem rekomendasi yang mengirim " + "parameter jumlah_cluster = 4 ke Flask API." + )) + + return "".join(body) + + +def write_docx(): + OUT.parent.mkdir(parents=True, exist_ok=True) + + content_types = """ + + + + + +""" + + rels = """ + + +""" + + doc_rels = """ +""" + + styles = """ + + + + + + + +""" + + document = f""" + + + {build_body()} + + +""" + + with ZipFile(OUT, "w", ZIP_DEFLATED) as docx: + docx.writestr("[Content_Types].xml", content_types) + docx.writestr("_rels/.rels", rels) + docx.writestr("word/_rels/document.xml.rels", doc_rels) + docx.writestr("word/styles.xml", styles) + docx.writestr("word/document.xml", document) + + print(OUT.resolve()) + + +if __name__ == "__main__": + write_docx() diff --git a/web_JMW/docs/flowchart-sistem-user.jpg b/web_JMW/docs/flowchart-sistem-user.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de9840c70180fe7a6f999734149d3ae2099f3798 GIT binary patch literal 331484 zcmeFZ2UwHawk{k*q=|r3K>;b!L69OfA_4*eA_7vQfKnnLQiVVi6p*SQpdhelB2psK zq(*uNsi6mg^p;RUAnpIw{qH$@-?h%Y&%WpE`#=9ZXC=(%2_wmuImS2VDDN0!QYWbM zAT}d?Lwyhp4Gri%@B~q(LAoH?6DNNE10E-VKRO0Fx|1jAnCR(GF`Q;PeVUnxnVIFx zSvHn4>}Qyn*|^!*IXJnvxK6Y3@N#qVp5^4?{QV*{w7_>x(lOG}F>tewUJ(_Wnb9ZeD)Dr^3%gU%pjTR#n%0udQooZENr7?CS0r9vK}QM@>vlEnpUZ zEiJFCuC3#C_x2C)hlHc!-}#~e(f+?|{VQjG;ENsL>%_^Ev?u9*=Zoe>pz+{NKgdzcThW zzNSE@X=#9)N6QWZgUA-SF%qD^#$Ph{YYqGtTLZO&yd(o`TI+Yu0vsep336J`ukWjN z#b;f&3ij~k({c6DT?1OsG%6@EgP=tP=|O%_K?L(jDhSuZT~9mWJG@$E-HhfUvE$Ax zW6&*43O_YXd>)4z<_;a)l$#S1r+Kg6_T228@(MSkdayav0CP5o58V;w8Ury`H=2My zoQs=f)T|JE|6ua4L)B{ObYiQE{_-^Mph2TZ^8k1U=s zm|mGfXq3V5R@V0JO7Anx&u_dQO+7FFaRDSgmFzBEo&?Q=tWC%Ef!)g;9 z&J4d?0DbJW96{7xM?cm{3G_-ArB5|~?%N+cW*3{V`brf4K#%k8J5F;w(BFoQwgfKV z)qK3LiFI4>c;;{JKHu`t9%<&&*Gf8>m}{9BHEFWkXl-Nm$l~~y1RI1$K%LhIoP6_f zLY}{HtGBy5!nRjtppz*&_M%K17IaSeXV76MMSuWV(9&(2lN!4};*P zu(SrnEtE$@gg@~?TVDNMuOvEJbqf&M+gF_C*XaH@xLRsD6C>RbnT$=sLFWGDzW6Jj zGQB43kBHSrj*jH%Ls-4fM_kPI=d~vr_jA8Hz!#CNW=v33KK&XTYfHLH>Er8z4?aT! zewwihvGJ)s>A5MitIqDw^Y!6LHl1JWbD5RMYa0*Ta$~OjO@x0h&c9y&d*l)p0B?3e z{<0vrQ$Y|E@>os^J2(lYFpf|`EYjF4bO#dq6~1tO&uh7g$cmSrDqnh|>P@`vKWNfm zT}uW1;k!r9^Wr2K}A9U7<=a5#MFq6!>u?m`6(FL0(LXN)3g7#6jC zfeTwh;!MW3qMDfP)~Fy>5=S8U14h>I=PcS|NDyr^eMM2KojiHIm_)uSXMI{%J{%@W z1%E0{d@c<@2~G43a*!s1ZWqGKCVbz&EdIP zm!aprw@;*Oce+fye5XBvS|W$JZisOm(G%6eMzYVsfr%!XljL#B2>+5GN7QYHGkd0W z-`y9>`BOx)#%8>3j(XmYVCw2zVhLA7&KDwCA7SaYz~a%R?DN&Q3m^I3SxB?LUOXYG zlGVmLgq-)!dwI90o>(zS(Flejz28Zyd`hp(t2>&8L*%F+@Fbr!CUH7#@uP28OS)sR z>rOj@cH+SGIhWY-PTltH~oZ8x!~o!g+vZN=LU5j zwmqhyg1qN4)#d!9EP|iT!iHCqv%03g{@}Yt*HRH@E z?Y(I7*|DPqEQG??zBo8#-BJ$I!=VzFhUAnd7V9cgDRU-P$J@f+Z63LPPzldrBJ~-) z&HN4`-_Sk*6|C^y6vKry2P2}B+p2%A9T#+D`o-X0)`UC>;C=r!?kLNd%j&_NtD3VJ zyUF!;quC9q=t2aE-Td>?oiozlwUNk8;Ht}pOT4?I#{4wWX-grNkq$e%U+7b7s^Bc6|yrkVAt zMk+UZ_E#;0Jh!PSP87KlIZJd0}rRYI{_)jw)r!J0>K2PE) z8a@OR1|04uC`g%uRG#PNLq?CAK+VsZ$Q}?CB0I(y18zEB;0nA@UPdFHq-cxuAz3Wc z3-S_Nt$zAnZP?PVs7f7J2JaXMb3HiXfJ9S4=irY9W2m6=8bBe`$a36?G8rk;?7z}s zd;RP4A`Od>GFaNX?H?DhnYWXAAHV!kD?-uBf9yT?l+a2s{$Keb} z>?019L%-5mvpM|8)^|_W%T}3)ZRR{2?7LMY)5fOG5~ZD28v0@pG8w}fFZeAxlEO>K zTK8nW^KE#O)4|U3{gk5)Q<+gjwI2Nwktbc^r_V4P@#8}P)&9-nHsqcglE?3}+@^iL zEXMPa$oZiF#X&E{Z%=hD$-W0I@XlKg31ZDN9Xs0u%gv&dO%%8J$?A9$70lH7Y-^{I zr!R+e@fil8aMnh5$dvy1ig7t};?Bb(w1v86Qnr$xJGc%7Pf3WyYm;O55tHgDNGh1! z3={8qPa(f19*V!07pa+|7aOvd>U6Js5JVG^owu>4OJS5Qrh;0)^YFO3-(HlNB-z>@ zF+3T59J5fJ=o@F`1x z>@k&OCPiwGtC0O` zyI?~%L^t>xyjcYnh|O4_8*Ep`t;Ti)E7#!r2h!YWJ7p^_&Mj-Sr(L=$sB-=ES0UBw zVHv;s7-6G)hn<2ap^m(`(7p96VJs@iX|zzNKhSOd%ZD>hcSSDJ4a%Hj6#I5d%CJbH zXIlfY8)}44T}rk!cBMdb@bO#(>5@T=G<=%pUUG|6BIfNP^liawPQ}>dV2q;9B2Ba= zu2a*xB5WF2o|X{C5#%(8v3^YvF~RZe?k>q3NFs!i)I1&Dy>Gd4lZff^KYt0G#vC57 zoZI+Os^+2m_&AAF7pUY(G#obC1{drcJ`SE9jN0E_L6B-)=PyOUL)RXa%YYTZmhUO3vdR8Oyi(^U~ z#uML!YhPcwbTV=j(eAsG?^XAmrcr^LF3Jlha!;L1HywMDyW;>54fHD zRM1mpVzwRPPznt05gjCN*Bp!+EEH}XP(k8}I1UO@7P+6wL~i>A_-I$b8-O*EB59DD zkiT#gVK{23hLY3_$$?|d2NNA72_jexy{Hz|J8QPt(Oylhmr7~cs=r3ZUX4e-ntp!% z>2C_WS1?vZ6lPknU&ULoyZ|m2M z$jK%Ye6C|bu3h2DQf<9*Uxin2$5kjSkwlMG-r0;Ns;}F^<27&8;j{my4$k_V-<(EQ(|N9ttnHI0iplJ{SE+=GhHiE0PT%6emt$EX0Yore$&Be${>Y zP+U|;b1?*JHy*u}#Ge6C82e$P&+jAhOv>`Pl742br9sb94Fp*|*feGD75Ee%yt_jM z(IR#6Mlpn5{5)ba3U1AK0OiqOf;vkDE znHcyhG)tL<@kmv++#Y1KFmwLJ{dmzEkv8l$)oO1e+pXj~^v9eyC5=q;gWIQfy|+!s z%~G!=jPp~dAPu;q>vkyDJh)u-2bhgAAb83J8}+)Za(dR7cqgP;B}FFby7~BJH9!5q z9^YLQ^6r3?+)&_o(O(ELPrzLs1p?ymmKcfOPW(0gT{2)D7$nG8lVad3;Em%$01aw) z1me1r)l^Wj84!hT$^w=*CuS4;7&6I0;Ttr>_NS4=vax`(;54W-=Zg29*4$CJ>n!j% z#HR+WR#tDs)V^PN=IA|TRyI4Wg_|m75i{dpN}7ZNTHvCS@JiH2k$NEJfQ#9nv^Ya^+Cs6u=O+qYn2@tVM~x*K=A1DhGd^vKQUz!kU6K<@=6VSFeJP|-Wdci zzDH&gzCQ#jWLm98;s>K)cA_UF{Tpw}IrqE}s)^SZwi3!R*5)mGDm@ye3X`cIOkxY$ zni!gDRc=F7KGFDz?43S)f=^B5m)F#KXPB$cX7n&(&j-zG_GK0(&0RSWQiICtF%QGtp9AcWdX9M^Ef4y#z(sWt}eCrI%Sxw7rdvHSpem0e)l)J4tBF3tHak zL}QaPB_Cd%fIG$Bb_trgyhJ+EUUl-RDO2M`=#$HlPQ8$+ev$&1BqoTBaa;}e+v~{0 z4{EEaT*!Y`zBOf`wz9*wnqtZHZe2IbReTS)c=G<`yB`yJTt%1>?Pj8<)hk*3K<`8atvo%2pacXze@#Qe(=`* zz&7z)yw=^bj&&LoxCVdAuD_Vp`ROB%(xWhOX`&Fx7K>_6eBQ*C-Fi5_3rx(RG$E(3 zQ}{#4rv!y_hHOuNdp}VmS>m$4L7H8=6@b$ z)hapltd(}I$zU8jpTGw@E*MR>Znw*jRnEUOH@A1)?scAN^Dn#T*6b&-**Xv-k|sGp z2_1>9;CbD|wl*hL|J|F-Zl++o!vAr;=*W%oihQY729eP<;$ZB%P^77f;6q9m@lsz`A~G=hQrNP>3sfnTG64iR)+FUmISWt(;TCd% zi_#i{(aN5LKi(saoEw0x;um`l2SS`G5myKN?8Ev2o0tqwzZ7RLVrjeu7@Q>Fe@ziH zLO%iq%qrZLU|@^wqk^2rcO3R70eHFIzIn-QwH5OV1w}3=BVO<~o*M$exsL9Y=pV$ZiI6LJTol zmv{v(joy#iOs2o0)GY(8#j9UA?eg{NFSeVA_kM!}kxx;qug`|+V!U$ve`EZR-Z6di zrdOQ(mbqHW=;cM(rTg=wJWY#_j>087I4!}4g=WYdvFk?hSMjrfXvFN{vuqC4D3bJo z*%Zonh{XP-zbweAvt7js&lk6wU-~3g^M2F5r4?PxgLfc(h64l=K99)W)rDOEIOYSO z6Q%tvAo{V()5FCKc4!OYO2Pz(9{V#J_d-}Zb3fcLq)#JOsMXTNK66QvPP&(zjG9G4 zcP4!)d=)>YRHNVvm#CnZ5Tb@TU({4sGk)+2yJm>WQTgJ|ikg?6V*`4 zU~k^UIQvrR9jk9pGg1a==obWQ7(E7llxd!F?Gf%mw-dei;pH>X;okwP%UYeAAvktt zhd!aIr&ki_W<;~Q_*TI#gOf@|21XwuiLMh(-SKODo0H3iBaeKu z$X5|}ao(@|5a$WbmRNj^Tg|b4p{H2ESVhvww{>q?MczCK5_$9N{7{@nvDbyPxg_#! zY+zo`%1{lVIt)Mxn*|OujN#E>w#|pNF&e$`DpU9FyVCr+n{t?P;m2I<{*3g2!0`7-lxOc{;@@VkQnRWfOq{FA$D8rUZ3K9 zh6-#J&-i9tmmg^iJ-`xMva#VotgTu6L~9^Q*xv|Yt$G#)$z0MeLVB6bYz-*-WPPeC zzIrz%DY#Vj5V@;Zc+MijL7;}1h5>hGNk{z%W5ChB_7Vyy4iz-}J}Me6OxsniKX8|$ zBn93dLcVcXZj;r8)u|-!;|q$zlAWR61iJ%m8*)<)L5ruu zZLo#W@9-N`S^bNf%LQexr#`==$w)|S*PrKds;#c6&*Pyrb zyh3pi``KH9SZ={YBwdwYRO<1UAji3-(zrl#8^&R}$h%K+g;o__PPd*8<1KwO>Lz6# zc$iCBfupwd%}p&E^HWmNkE*;0@GBTJK~z5nnolspY#k7zH$6?>jnv+0cD}dGd>&*t zF90g_ew~fIwG)NpTd2nsHp2z(P1vBHjTpGZ)lAt9cAQnq^ZY4vfBMDQ6xrurcsxT8 zn+W1rU7`vB(rJ5PFisSwg^bBfV04K!#Bl9V(3;o<3soM*#0SNxV$EObVtmR_*!iiA#1eud6?7-VxPIh*-Ia+X=H+FyICIa=+;3iv zwTl8PfV-9OV%m^kcNsD(a~#7xc-?B|#WCM82i}?dqJfsE;^7k%E**>DB(z^tV1eAW zyt&nVQmy8d@6tB?$qEgcH@v6rhl=B)$(bZsqHz!d!MP3awO%;Acd$WEUbfkK1d8wd z&ZcuR^3G+Q&1=Ha-G&xRW1WFjR8T2gHr`Fnu)mSR%oJrtp`QsVByn&!j=&d^D&NPG zzjeERnY9}zm5Sg@GI>8#yO7a$>kKhc9kqfYaq_qFI0}#v4esRpB)e%33p=#Vyx1NA7f#=^Lu_fA@)w zAV2l10}Nda3oq!5vUE*I^4i#fOd|0?Kar2%QH3qRr*b}fqz=z2 zZ=(2;^&LLB=y~RFT`%lnpci%B;Tsw?{?OqVGfN`N8HgO-&4Yu@2r6JvO^*LDI|R7O z%@*Kaqu$_6g@-^iq3o+JPU27{3gTZyVWLPfi5k5)4k#5g37N3-&4^GF+{z zU2picjeW+uPXo?BfKJ1H4`+e_%MHcRQ(Ca_)$}883KNix5ckK(ALD?)Vu%@%k1pTY z%mm_=>;(kd8sIWD^`a&7k~Iv}acna48>fRMJBiP8jm{D)!LQcZ}n zX5cu?7RvWHoWIv!l-ts&q@<8nYP~h-8htup%9|kK;;9rV9~<|UTa1gOTKjyHk;hpa zO}l3F5&86U?YObVfPwGLS0h^^|JoAYOQ2D^Q_cX78 zG^W|4nK8LolfTgIujZ=POj_CN1zl*!RY#9EvrbCbwn#SXJaon$7I#!zH`a)a{kH^n* zCr#V715Y~p{EBk?{#gl35J|}JF1GD1f!(cd8sXaW@pR59tsIumH5%z+Bfj%42<^mr z&m&(_XoCb$ElsQ=P0gQLI&56t*7W-;fRu)jIF0+kK&c)bh$;C_j{2RH=^^)OG!}Ls zcB%M!zBAOjj7SCj0J8$yJ3?EKu!p;#DN+`+&Pvno&q^}h-hTY5#bL(lcJ-oS2iJtc zboY$@PeuK(Ho)J1QwNXo>pr+(z35r}p>Vovt!zhAyIhZVKyd)|oF<80yfH+u6G0Fg zeBLAz6uHwTz&l>nKv(QIxZ=>t@@;maRwMS?b(?eN-bb`$=$~P8Rc;|jQy9oOtCWj1 z4LH`eMqTTXg(FJuCwEC_$tOA%%bFFZU7o7A9LJ0+J1g@yIg;Us)?d1x=4TtXXTgXK z->>Aa6h77nB-Yd&#;q*B^&+<{6N=vv>E0`Uc5b%9*K=dU2cZc#>1z6Uw+OjJ{XLbe zg7N{C8K3Nqrap2()2YNMk@@A~d4*DVi?)1zO)^n;6X`y=Wc1CsckaW$Oz1+~O8NrW zIeX%ea!zifoekb%M+Grj<7ZNL>WQkGVP@|{f#j9LrOl(PiB8zK-xnKe-{4*x0p6WZ zpe514d=pT7K=>FcsK;ro_VeFUAMn?A{;Dha&$0%%qA+N_)j7KI$_A8Ne@f}>R#PTt z)2$?0&0PkJMY-wEfu8ydCPhU(FKb5JNV6hIkD!MsJuykDCuZ=3NUCh_Zs)bV(bmep z0e*EW|F_zLZ|D)kz%&Ir@j zI(dS}V=qtJdf&f zl)ycOd5riA#s%M>L$dB?^53o$KK<_d>;*~z+qr?T{$CvikKc~EcyDNHj?0i}aTyq7 zB%h&oRcXLT>#^2SrMX6@tGA4mz8k5vJUZR326Fl3fa(KZyQ^1;2#oc}@;m>%Mly%u za%1}B6l$k9HOtTrwXI!*I(QG$$nj9G>gmGcxrZH$%0c#DB%L_Vo_cb%n@ccKQ^y-K z$l|WPlxuw9Q=vP{rsUNVdWLN3k)StccwJADp)1l3((T8*I9uI?!Siku=I_|}V>Gtb;xX_9InA8P~FCdA4N=z8O~Q3SFE3Aarp~vE|N9+E-E6 zAkh?V0u3CoK1Cio7>w~}HuMrg?Ud%bwFSSmsFQpb#m}Xi_)$XY%&<;$nV0n(YPYfS zz#2s=4e=T<-^@4w0tObPo$3TUQ8?zvx;;JZHOU8Of#H5xC*P)}YlfW(s0&D#JA>NV zAFWO@w){}`ND*z<*!L>)+F6-$8lLMmd;6-bA&Kk`FfjI4lYF%?n6oLHW=tq9=WgAE z=1&!Fd#}M+(O?b}>CTLi?Z6t607@qy6N%WU$vc`G(X=esP+zXdo1A?%m5?wbwy$l6 zNOCb#RQUd!UrOi5uoK2Nj!4xO-r$+Kfa)Y0+-mwhvh8^w$SOazCFYi;@NK$}e>7ZM ze|!+qbplqobX6 z5X73mgF{N)#DUQYOmH!lm0!D|TEYH?pXVJ<;l(Yc;<|fd=RRESl#b#Rr$?MjIfFy$9 zorCRy#0v<(=e6fDH>nAGO#?V8zo^ER z`W=jkjoi9(io37*YiF)n#H+O=j=J z*trHaw`YDVdMTi*f(oPjGzR1N%-UEvq1y5|f%q?Lbpr*T+`q0K_qWG4C0@t}yy}|x zRLR+|mzhFgHl0~04uJ`54b^Q^PnmnGU5@QnzMwy?U!P{0zN}yS;%ibz zuaeuj8n%SO?Qo-1tK0UwiRtzGPu`_bk`eQBOLt*k98J-Fi#$hbgo$IGMpIgJP-dpXrJ$~;@iLU9h{;r!Ee294}=={B)$%Ccx7>r1sN3uJQpqr(` zaL4Dq?npKJtIb!ng1Gkj1Y}Ttk!h`Of@1F?NA|%nd;zggxYlT*kL<^{x>u(96*LMN zh8tXJovwd&x+!`bxJjmh1i_r}%>W>T8hT<**B?0CkElzAyhQhA1|Mq>ntFIn2(+vXH?yM=28=W;~K1n*cLjn=FpK? zJVA&stQb@3{qDWLF>&X=7kxaY{g;{#*qVPXq1T>Vs4Zg`WYA`75S3+i#;tr%t}w4V zY^#2&`Lv#w@Vy?=OkLL*gWhJAPWLd4hS3HdtVQ$OIqb^o1?*V=r@T`+pMqSiBAJge zOdmeKQ8R1|jqb}Rkmv8%W&`Eev@4aBq9_7@+exXEGaarmBQR1*jx##Ku71TTx|PDY z+FC8gWcQ=B2fj={{1B6;a_@o8`M1fdEPj?aDk$E&!Dm4*iqEeO@rtAukRI5^&qz|s zhpMMk&6WCkT=Ne%9L88WT~f@gOyZf~2)MZtqKC3JCzyZQNNWE^EnT02@570V2|(x=kzHYybaDmVCuZtfU3H;PxN%8pl_AG zeTyEf{fLqHaoenaP#gp@6grI>5M-tZn0$fRjIzdTk}|zJ9T^%&m3!TV|?f5Otm-kt$ZH&R!Z*Ks+4O#^1yw0i{ zQ}B>;rKuFC_$>2)1WFkmc)I`0s5LUuaO?)sSq5o4Pd$(1Kj3Alpt#CV`F2}_$Zc=U zMyORJ1~V{vV{6&q%%E~C$nx4A#}0eujBEN7B9lTB)FGb$=Trtqzlk5`3yj>K6+j){ ze_Z=rud%`Y*PCl0dLq?R$HE_fTX5?Q^**c*T_0R#Pg5!O1dG9IXJO$n5}#%M)&TJL z%>aMB{y!m?Uz+0Bv=;4C*yZxyR&8a}!`>Fp%*>)~^Xg@W2Pw6$ABlRcJ-D10 z_~gnD$1|gT8I95g-=p0YDPpM>>uG`9RxA~d2(m6IIWgA@Uie+>4EeY;t(~Z6eWh^+ zaX|6j5l^ulry%p27GI8pF$NhJ<1~YJZP!(;f6nwi^A^Y{nVX%OHoNGw+v=&*e_DR; zI}4vA&BW;wdfI#Qh=?7SU}4bxwHoeY{Y*dal2=)IzMei%HCJcRK=!V0c^onk7dy{b z=d=fM-o-n_Z1}#y88n+Q1tG0sEgK{5R*jts7D|fU~vUfs+u zCG^WVu3-}YmmnLZioo3UT<l-nB6|b9RRuz?D++ zEH#;^Led=a*HS!2-T1D!W)1fm5&k~rEgoT-CSx}F;F;}J&KZ7%FeWJ%?{ zEkE#?8Qs8w$#$8T>fN^XyvLEfY=+`K8m~o{>zO1y31R%9vl_I9t5i_&&SBOwjM;PT zQ@BU9@Gt9pmV?_VSRv%ps=ADe@$(E!)4(uTQB-1v*6vk2Pu!}h2DfnN&0;~47@rGe(A{bZCFNW zr+n5y=V6gSiJmOJz}No?$}P;$CCi4-@a7MY#^shTiy)d0#gxIOljA$ec14x3v4F8Z zmNi}2C!1~$dj4|unAQ8$lXYt;%qmr@Y%x;iDnjqSEiykKL4PRM@{Q62|9u_o)e8cZ zCO?iHlS|g{ww_z>g4?hT=$UDc!}8e~voo5t=}V6|o@GmjwQf5nwf#cr&Lg6xcv?4% zzbo0f4|W0D&1v(533%6Oj$SBNSs)rZc5rv@*XFfzagC6!Fbz z^<8KVlBYClCf)o5uOt`xh{Xz`VG{%3DE^?bo)`{~@wKl?nbR9UKEOqg$=#qm7UK-$ zCpfCUsXwXP6QpSMg&CpyXEHvR zt4OmMGQY^;1R09%8kVKU7@HuA>ye!h2c7&wN@dMbVNNdzOmJPuewA*yoU!03r6t_6 zi}%zIN-}^eVk|zKPjhdCuZG(8Ev2W7exffv{c%5#CsfM(KwPz+0` zAbKjO=O#rOK2b|gi5Y>e8|}pNUi~!Ss^*ZbOa-<6)aHi&r0ozS&;y&lTM7OLg7SU= zmt)5Xe3CZscGPb$87k;E`ZzH53<^j#y8W31T{DuvUuJa|Sw<3q>01VmK|!rl5NHd2 zbSd$Vgr;}7iO!(EF8!|(`b!{xSTcVJI zB2J$!mwStE-muSjwiTn*=o29~5pTfrKttf}H2@1Ho+|_Irw%tE%gz;?Q%Z=gF9!Oo zZ{If8;{^RR{wXq`!9@Y3AWNcfF65>?@Ji3U>Oc%u0|1RjhJx+hL>?gk614RUHFPY| z=34b>oG{npa$=Imeg4lJzbor-2%yhT0BU;k(RZK=+0N*g(sb?LBscUR`PFl%OVL zPB6!sU^Q!WgGec)r0GPKv4gZ}e9mj_&d-Lf7y3M0m@YK@ta#4*hT*pQ3&<^0PcX7| zl5#1Ch>stxJfdr=ryG9-v^Z&0AMs#qWU6FpWjT z>%;0h6KhkfFU$6|R5~y!5GjhW^Q8jeZQAXcG?16?lD7I-sfyeFASkSBs&u-vDboud zushTBYMM4wgmjs!|7yfgIpVAjXzc3E9LJF<;{v9VY>-elxv z%&HxY(W|-IM~)ssJFeq~i0sO^+bek$lS&lF{_bo;0vO1+Hux4hy4!m8Z}L^;OZv)X z7Q3g}dj5R%+A_tdHbK>8hGFivvY-KvsOI9#vpY9XVn1OPC4_Gi8)>~-9aUGl#j0Am ztL@wlbJ;l`GkpdCH~>6qe^5|;Oh zFWa1(I1QUn^J>Lw0mWP#Kz<6Z4$VHcI=Jm&O9cg(ZKne*(Hk}?BNf|7UX_q4PV-xU z9{FFMMMDd?hGJ9@>5VL$(g95*i&Y{J8^2ipOzSJgReTX-0u`FD&6N>?B=1|R_)YH{MOU{Zqc)5mue(F z9SlWIpGQYE@dfF&+?ndlAz0iPa;Y>FsR;#}M$$5M>Abz28=n(XbYK0=mEkJCP}*DA zO%9y`_wjU>E2f8vovtU^5Ym~0B6J{b=Wge2Ee|p$Q!^0AUjA!S{KppU|A~CT-(U0J z+!Q8+6f9~H@e(+^fePY>=@WeCGr>UT_Gam(aK@d+7tU^N+&NvkKKzkqbrOO)g49kS z;4Ke`58y+R*lfxvJ-`DySZgs~vi%sZ(a2gPfk>r-7A}*&B3IuL%z#EzphM%=G5AlE zrl7;?6`P@kdaxS6ZbWUpqJnM|w!jJJcz}Z5p?`xkD6lF+6ue^&0n%H4`2GDqPH5k^ zvyNH2bM&2cFC6ytR*WiOc-@2bmT=iTTtN(lVIv_OhA6`ppi?eju&g({i<4L#$ek^}1rVUiC z|L8&Xi1M(PuBCRC)asQW@H_$K!2U=U1ff%ejeUS<>^pxH>K0@MI2?m(K z2rz?xC`X678D6_kyI%R%lh99+hu6pPtNebZKVU=Oo7ENzfffgZN}j1_-X}gi!1~&x z{%0wW{J)J4*b5>jpvFVVh2YIc5VF+h?>CYbFA2b(M4~Btq7Qj&`PmwEPzs6NCPhaA zw%$q)z*PQxcHLjJ{~yW3dMRy78V6m3{6NR?twh2X?nB{|^^~zsJ-d>7vM!>X19L{Z zfbM(7;?AI+(Dm9l&0=+DqL5;|v!w@f_^5?^>apgzoF&PmE~`6ZTqyYvN%(m{4Quul32B!Iq`dEU#`; z@Q-N*`(M&mcOH~(SU~3@&w#$E-`C9)6GcToFYK?b9vZRX+$XvVh zBrVznS29Qw@Bp3%AW6vve4z!Af65~%g-GJh1RZK4bAJaR|A9o38{T3Q@IFJ~daxHjv(+_% z4Ha~al@~t$d#SA`-~|7Pv{^Wzwm5T4i8-SEV;U^)PlSIFH|zt@$;t6M_P|WPU=)Nj ztwEOt+4&7W7F4P>NmL5i6fzvVCOBU7r%ahL3!21vK^u`n~=0z$^^ z$N*?4jYwsUyR4^8tZGKx6V1Mpw~91Rtt|gIhX0Y_(hbS}N!inD-`hR@!MnQ*+yLlb z3+E3B)x3XMIRD6|{{Ld1suEani`U3G4Hutbz-MgMt*lgP1`8X4^UXUizI9Hxe$BwA z<}3pCOF%1BxWc{g(Vaj5PkZwh%>U1X`5S<^TvGJ!Vg8M!L^>evZm9jYynAq6J>tfb zUJOv)VkP>|_7DZHz?%&Ekn)rNhNKrFQZ@giAlBEn8`)ds zUjvHZUedof%{reQ$l)!^E5LocbSc@(=i>>V?3P+^1ehJU;6;+fqT`Si$Zzm!Pdd~@ z18}NbcejWaxwyX2A-68{5qIs-POeT`5+j#E?H%bZAWFHUPfiQFAf?{Dw3e$P@sw8j z>w|-n>;y{#OO5>{(lf-7P}*coCg2C!g%vtu5f}(brWej>OwItFuQANC%mVO?mC($V zBcy-8_CUa1qJ={vEFzDf(MC}qnBXq4o}MZzl!DzF-6>PD@n-oLy!0_pu&HA2>s^`e zQh~52I=gTW2q(-6+xbG97G~2(@SdLxI~O#lZx`Zerst{1f38$CRfjWB$NAE^Q{!)w zEJZKtB*$4)&8N=|jWmw>?|V-7cJuTSJLzha(h3`fAx|BfyjD<3);+ol19>^?0t}{Ta(UP&B3NTzd-wX zDC=n85?-745c+M5M6IesoDRqr-!SHVYmk$?-e%ME!8 zOE1y=XVLq4P4g6{LXV&7~Gl{bCuWaxNa-4Gj_2)~zP zH@j>HWbk4k@fkA({Ef#2hs6~7>3!=S+w7PAtQTNz1l9+*vm*gtvRFs+$M-wlx`eMk zsg9MgI4LF;SI;fECn=>Kll=oiM-mAk-hi268|M-|L*`2_P2U=QtSRPuwmaW;*1l6H z-EHgUZc6ma`&&oG-Em&ZrraB7tY?@?E#s`}6gmcy48`qh#V#V-OpF)cFSZUcrI_tv zixTh6N2>}d&bq>v6eF5=P~L`2lDYioS=CH>uQWGjDrd0PrHRlRO7faTn_Php5w(_ z?R`%MxkhWzeh&9)71KPsk!sz!3Z~M;VZ&g<>nH#wZ8%N{HZnf4K$7c#HXi3SzCC0D z6~wMA|B6CiGw%0U)=MsbY=29$0CPn=%_opk?nz1E6Khf5xJ9A;GRW@-`o1MDCXy2b ziOx_*uD}2+rK4kciXQn^`{J{=I?NL8(YQ0$i=24Ge-nK%D9ZG{px>l1Tja>FV*__S zB@Zn3@K6%4=t-=vB(Y%ne$myLT$-EeAR3ul}2%oUM%pkQ8S z^MrYYdDmIndoeah$&4ikI8Y^=!tIV`-GsF9>Doc}=JIXHTa9heiTG$tjG4kEn|rF6 zPwmMo4l|beJnx*2cS*Hb=?6#NrDav_tNBF8N>3G~QQq_aVeh@8n(WqfZxj^;0cp~S zN>i$WhzbM|0TC5ZIzpsL6Qa@r1cFEhK|nx3iGuVJ5CQ@rp(7x@Nhl$q_kf%l5SR5B6&NG(scn#5FoCH-nG@CM&vq!L@>I5 z^cHO?eW$y?^YUXus9I)I$9m$cg9ZQ|f089Pc6;(oM z`_z;5Eu{SS&aoepmuLA=SF5Rsxo`!tesDH5mgoJr*r1Z0C8rU&Ud5axKjN15gHHQr ze0(x@^&c|UqOMXka;X9>_lGblP;zAe7hJQVJG!C@@?+vgbw&M3ymabw+bXTsd8?Nn z=}y?^H`$Q`UXs{{6}Ox!2QJ=Gx&IY>y64I5A+NZ$nQ^_)b?f$n@QT{e8n!D(%A(~j zR$bA6XP%PcO&J-five#p>d|Dwxi2f2C55$jEYu;KEbl%$odU?$S-4#Rcf0} zsj``MY;wIv3$qh#BHrpqjOL84T$}1YJFYr3zO|zg5Q`(EKi{@YTOdU0Z(3Gu4UOca zNB$jK^?R4}-(h$5pV%ew%rH&dHn(ri!tztHBWQw|3lCa7pM9QNGeZ}rT)&Ot#mi>K zb56zIxEslr#Bf1u*PokhpY0S}qPQ0>oC$;0SC!{aq~1}my~s7!+ay+C3YgF1ZQt3C z+dZ~DQz9GMNleNAOk*c+mZy@U{GC>4mY$^WBvyxegVB#&z8Nv=aGd!3Ed5Lgv#8co z(sYFF+{FjJtPIF zdsGG;>-3_DlUMJMq2U;df?<76*`Ww%M!!6#_x-qUuf zi0t~(RrY6PQShsMaLq{qGqrri?{h!qitvM3P&z?ud`vm4n9yoGd2R>5?!!l}S zSS_H4P=0D^U5Z=w({1mo+OM~uF0+*qW}>_&dokjzV&U(2RRfPn)M!V_yC5u~I}0lB z6T2GJir;A-{l=6;rWdLx{)f z$EdNjX=3D8n}Y?r`r)eA#zis1Pb1{h`aX9ET-GR8`^K~#D9QSs196ASQXb z0kGdssP~nx_XCA_d7BrQA5O|kDLd}Qk!{AgWGTgKcjeB6yr>s})YV~Cp>^ylejM_$ zYOl(RX%!&v3uSj4eXuoT_6FbCSSZ|Byr!?n(^74t=6QW5ff9iFO!Zp9uj_oNsxCif*M0s%bY@jqgX8eK=xFW_ znYt1+&5>Ns&{Y8`sOoH&YB$z(z!7gSiDs0rYX3v}C6Mo~L$JeKNVo{_X|q(^a*gk} zwBOq_txNO8XOdreO`A17TTzLDqbF>t+s?@f|B}zK8@VC-RQHJ9wE(yS7b~ZzVPCry zO;Fe}FJ*X&d~7|_GUFL^p5qxaZRFmpU}{22CwaTplqL#2^6nFCvMEJB1jES`09!h1~HC;kI1D;8@Vq@_ox~ULf0UJ{+Jce}`R- z0;)^Z=K`@4x=6BaLrp0Hs$N*BQWra?)utf()|`^u!xU1WjXpM6jjGk)oHL-vUm?*mOkY-7GM^gfdeBYU#Q%-DnlKejh}xgB(Q6X#*klnx71S*-Coi4Mj0QkuZ@N=p_9+R}lNavHD(BD5w*f9YH^5h2MkDoK@!AisMP2i^g*nL3O zk!6*byw42*`ekAb2oOXSuu~tQUZ`(~BBp_-BT%3NxaRLax2%3OyS*ra&P!;J-#v>3 zK1SU%3Q+aw(ByHUkPU-h@ZHOH2wkrDPd%hVJ8x2p+~vTnp%6bATISH;CAHrj_TRt5 zra{Aqt;bXs3Kwa+#geNLEJ*L}Q&lR8Qj=h>c-XY%7|;Vt^%jeSOov`b7NgbpT-jCs z`$4&RKjd=trN-RyA}D|r{$T_Iblo3E<{;A_hRUC&%$?kA+ut+ff2~))mz4hzOUlGw zDHqj=hOXevw(t0eft-^3`xMTc9Fr~q$vB>8yFA}oRR3lwQ=+Gb z$No`zq|`4R$=?Nne*gaePk(@~?MEV}u=GCUmZCg8(V1s+|F59RK~&Rrzzt2{tNN`% zJow+f&XY7!{RBpeofciCPG@QYwwCvpz5~?=Y01Bw!<&H(S8w5UEDjZ=Zj0b?ta509 z;BWbL*wpv3pg5T-lKkFiy$cu!cpm)zd;^`?ZP}1Ec}Tx07OOr^u%vtjQ`Gk0Exp@=-0_p4b=sTR%KjiD0XVBSB8C= zwdiXkp;3Lz{p*1qI|E3O5fM?YU#CvBL>~53(Yve)6qUWwU)GT!vvx{_1X|6SX51TL zcg9EWh&fzd7o`m1?gLxy56D9}A_RU8!Mkv2PYK1noT4^46WQuM&F(t&?(zb&uSqSg z)TFMJewk+7qpDc)lcBU?KmS1@Y;D>0RBM;b=qdH_XOOb3q}M;p8(dvEHK5Eg&zkt^ z(_aLB^kO(}a`%ka!<@D^z6roktM&L-Lpq0lBjEoK0uB;^>jMRL6-Vej0n$_#GNC?A zkiyVY__5j`K;#N0D`;%&9e(EGWuIDx;}bD#$8r!vH~J6I#w{8M&@r6@ssS^{{wY>c zwV~_O-C*LcpRE3;tN+}x8xv^)X$wQSPj^u*aOF(vl?eT^B!{i?!Z{KtJxd$?A zp#I{EN{#m|3r;L|Xh)JO5Kq{5#RJ%ZEdLw8uptEWrxt%5Eos!W=1}F@EKQa$!bp#R z0EP}^arGT*oj*1}40^PN);|8e_P@Fxrg0^>mRE?aP^xV%HMY^q*EMmos6;L;ZvL6B z&|{_0V+T%;buP7yQ35Y-ZvR5T|3Zk>oPNty^k#Jvuppbg`CstW@1OtqDgw=tj)7D`&s+9X!Usk@&QP(DSequ2GTD7$DFmd(q$F9(t%y91~`S{vvDrBs{WB z^7U(5hvSzHVqW{&RHbC45O(KoIW6ydGD{_vS7wbnSEN{CKe>Rj?c!QJ?Sv!wr>UlWlSforpS(E?-4F%1}kl|GX`eNZ3S!bVe$=BWARwDDf-Q?en zoXQc30mQ`(NMTa|qLK?E)yN5^`m30t^}e0K7?~yV*)cJHKd{TS`N_EmS2#3BpK$9W z4C(BmFn~#5E!}I=FSJo#(r*0u$dOzJrP}w1LR1_m=ODsV1kOcxV_~I{A?u;|g zKifL|h1J6Xz@p~B&jLf@TXFio?;gSM`|tm*yT;%4596f#;XhL7JGOt`8fEtN@X3AB z;x>H4v(6rhxl=^{W?Yr@YLcDJ(gnl@x?j~Vi*fnb>?YD7C*kwXQ_y;^>4#pz)g$+h z+cHd<^tEKd=p~tOn?agl9?WJ1bVOHp!`&2!Ti#Bt(3Kj&nsi=8yf$n*u@*FS&h2?d zU{Rl&)XIp5pHo1p{KDiH=Uy+9ox)98^CDn=kCxc~NavsP1s8JDd4@LB^zXepWjYlz z*L>>y%`cD2FNkuW1Fy`gnn;svNp~|S%8dz41@K$Q2D(ylf0iDgEP~jUhMW#k-Z2#G z_RqW4{l;D4mWg~^;H4qWblQO`a&|18i{NBZtVaZNKQOP=8wty9^$U;VPMeNO74^|` zqn=-g3-mLgDAyDCX{JLoo@b zo5uglJ8S286Jv2Sb$pt?H(i}hHpQgT-~Mpn3gTflG^oBPb# z-BzeqHIykv#VN^N+a3L~`DX1YTS+Bv?qnBv2yz^iiRvFlcM{$QtXLvM@XOsZv(!=& z;IeIXm8#@IeC0sr_`uQ(=EDpsDOs30q_O6@eY1Ar2#hng{8(()z-dr?!M5HT!3o!( zcsJwNiZBRwwpYY&%SuNvny%TytX9)*2AHp6V+YEaUkQEwQp+Ef+(s;&Gp}g)VEceN zG=bx<8Hh5Q+m)pwVNo?=@lN>BeC@Z7xVGirW3_e0r~1>lsouGc5CNM1Bum6HV1u+& z*6w1O;iV{QAya>SB8LH_^ej}3?HNIPGDB|%2iSv<(U|CXuf%ceGIkC~{J7x=l@GRH zl;+Y&$YEy#Smcb#vbV+{Y6D2ilQ>wiD&D5I83Y(Tz7rBetB$B;eDRW^--uOAm|O)M zNshq0Ap$3(3Y@Nf7|fM2*SxrJ`ux$U;BN&dui4d(@}F<~a_PubB#@nBL(7L<8dr$D zpEl?<2sg-a@d8Rrcs(laB*sCW7YQBs#xD}wgQBVQqaiVACn%pE;ER$!I|+m$Rppi> zog`uW%na4HUT`_cu!}NmB^G=nxcd8m=wsAGS?=D|>}>U)3}<}0f>-Eb06eq$DnQs0 zMxPNDY>2}^Y28qU#cjFiDRz{vo6xXneiFXp`Jc zvjbHbNv!PmzLut}-W%Aoye?Vp?Kr5C8X+Ei!Jg@<$${ddOqV4Kc?56WRavX{9kbBK zO`SDsQ^qgQlf3uA4obF^P{%Y(hy>miTAl{H9p{WQcJG0 zlCeE8GS`Uzbf|aTYE%`rWKusI%ULH3_Y)whhkqx^t!Bph%2soe0j>hty_wKuJpp;bxPbeE4S3 z_r<3il)7PDMCBM)tSq2$ZXQ2Z)7?f*&_VYt%UrA!e`aH|j_|Uad~k*~vGewRQ|i<` zhHR@&qbrx-goNpe{PMwt8Y98AKKHTbgjIn4kzPeK=$|j8Mp3L9w)A?zidL|Z<&;fy z@YU#Dj=n;!JJ^c#YiF((@3c#656cRLe+oRn(CN=>KBVeNZfGR1dJ4NVb1rUKogEm` z9`NvyaZN8POM=M>aL-ER9q zo6>NWMW>l^`?&PeahAmQ`K}B{4&_)eRFk`5GcA+I78L?Z!>7fQ3NGcZJ2Dq}6HNK0 zPM(~)ozQZ8=i8$!MZUSC&w{db8bPJ{;Y!G0d}pd$Vb&Ox&}b!EN)ajXr9UyYCVdV0 zej-{WIOeSJ#j$pdgo?}jz@$ocU3P>Fd{w5pL$Yexa=r4zYi6N(y7JBA{$=8zHE#%q z`jW;MAfg+UGNJxh9Yl>HK>@dqFcB82f9@;MTV#4NFbR+8NA&Vd!|ZJv`A!hN0BR zu}cFaRH%p$`A7+oRZ|yDeUa{zga=o<%B*E2qs%1@;~KRFZ?s!5_;ui3o#=8MlGA;jg_PJ9*9_`<2%Ej$n=6VN79wuI`&&frD_r9JgX&=H~g0(k+4^f#4VUHKOZuF}{b4HqSTExGm z9S|Ju5DPrAQ(TZ5%CCz*@PzAwiheMG6E5pOVb=ocBk@^)_?(r^^A?jU6jN)iTD+}| zWBnSKS$qAfwn9s@Lbe+V?FyN(@v3@Iz#+$VE2meU6Dr?Ul$2x4m~ZDhT@<@^`%%f5 z6!NV+!}i4MVR!GanVsZx{Jysa7*mtIBWJR(y;7Buq8|>|n_!Pkkqq*L@{Ch)+LV(~ zp8l?Kg-$L!1DQ=_aVrOwKZOV=>-s8iGC%!sxe$V{px?QDC`=9Mr?zCY-nFO}OCQiX@SFQl3drcM_IBtznHlkVSCb&II0M9Bu! zVHjzU1TDx|aZ;*3w^2>$W$Ho_@m=9-G8E*^8I07-Ol z0x2e+7&R*3amhZ1gDc%@?A;aWCjt- z)s@RxebW`ujhTm@ev^!TiEEeT82jqB^W~}(`kWr^enn;?PHxG7f7xdDZ`WtJ@acy)Ive_pQy-<4@`|xkabNqK`lFgZ{H0 zYkiM>II8(XK*wyYa!O~MKS_e3u=sp|p_K;%#Izj?`-G0Rnnbh#@-qs6BGkQ;a7*?%=DKDesxsV-QJ(VJE zW_$K04W!%@d)P7~FN5Kc`GLRIqCdH>Npg4r7N>GGR6%1>P0*Br3S(u?1-xg`@;Ope zm!esCdaQc2nUS&kSte^0a&0$IbQj4x4@BmdM3``c7Xg;&gnZ=WP*y*8s}PsAl6aNv z3lXC>#(inIey4w4BrmysY?YYAP`?4%T8(N*VR(=edJ4FH4HU zx*jwsxkzl|=p%wOR0qD!!AJbd-SONuLYUm%X64HXc`jI315OaG3vjDe6ycUgnS>ia zjfrI)gNlmK8F44OP{+@gC{2QA?TjB3pC7GFcoBPnBH5xBd)SH!HS7VOT|jbtOtmcS zQ@WYaZR2`4p4j;OsC;4J^%k+mTJ}1XaiN#WN$yq|lk!0+VbKBSU`Px9>nyUo=44H( z1ze_ifj`YhsEyZc?2{eePH9}9&=4aD5(MJGSdd3*=|_|FnSeA|sC-%L=d`wk8RLFp zS={-9N>x#|Xys*AIn%?V`SFIrqe9jByYAKdJ$fC4D%+fbtc>B2p*V}xgn(Q44|lVR zsDvg+88RHsl?}^+u*1x|8j`L?>DfEDijO{MRbAZ6N>MhzXe&ca7$msQxi&y2^j~?_ zI2co35cN+iAVyMRgVCRCMe+vc4^{f`OU7n1dFJgNe+X7~RCLusP{w8b5k zTbO<{OK@3nX~>G4oY-a4NiCW0{(*;j$_qGMhfn4dff^tJ@N*>OiIF+uz6CFVn(y*z z=&XwL@pq8KW=zlsrt+9 ztV`E+jJ5e#5=O3Yt9x4R(#kov%dA4nUry8rHe4;Q$(=7pJjM>W8Lt~8cX+Q)n+}RU zxo|q*hCv9!v-b`X<%>y3Qf$cb27+awFfZQ}mg3^)f5wy)M;}~24GYT4J;if4;?cpt z=UO%k5D&>ri;4_al|Rz< zDkC~_R)=wmpIHMAg9#d1gMr5|54)dA9o8dFqyR1{B0KSug={5 zgJuB(a%tgpp1?Qy`QyJA^+c&t_b39}MEQDo4l3$SS&lIS zWR+K+aIED{d7`f6tQ1<;lqZdo#J*O%JN{ftDpcqGdBc}=hn~IE9mlg?OnI`SPSVBo zg2A*yFDNVG!P0Z_hi*6}vP~PzbV)369utkkFUJlCD8jNQ zW|Nk!C)qij=u+nscSLGGB~cMoeP)N;uIy>6M=5QDh5%uOG+r049t;n0>~!G@c<5M3 z@5kV#OTB5%%Nk+$TPs2nalIAxYB{I_-`V-t9tiHs4skHL=wg!~O3X>uwfpij0QQXp?AYw7PlQ8&|tc4S!ra!1Ax5_Gx+FL}3>iOkL z>e|P@HkcHIQy&mR)p(cn{FF z*1l{gMNOwB>&;J9`|qY{<+k+&^g$TK+>;T^&IN#3CmNL@t%Onf49>RBDNnTXWI1Xz z-nlfAo$AVE`&^sab`D<&I7`Le>Me8-mj%25_?36xUS|{B3Ex9)KJnGE~aPw6xh$T>IwijYeC1x45aPy}EI{Kppm1TB$) zEy&a7qLa`+zH{s!8-QDhb>5TzdWC~hL6edP5Q@m`UkC-i`VK_rj|~vJ9v!rQ@~BWa zb%f5ty9_8uv>wy}a*yLk8Y<&YEvPS!8F*~_3fm31>rV#es4al$PS2eHgeph$=_Y^- z4T=@*w?RG_B zgy9$WcI2NtGM!HNo}$`l+!65*=nmMqI;*RbKv(?f-O+zGHLdJ_mKcAdS=ri#d@g#C}$ zfI?0p>TU%bL)7a}M6rkax?-1gG@8mk6~lYYs^JCx@Jhk8xQKa((;!n!k?IxR5YMx! zCO*~Jq{yexI;eYe(_5xxEPn#^ zBdm_VM&qZfH>HI9WO!Ak($Xs)-_r0(34a=6(&@(Kb--GLmr=EPml2Y&P#1VAi2YQ| zW>5GBytZLtViTbMc|8g&X8&>l{qNWO&-N*16>z>{Ax{!b8UbqBrHvlJt*_Thf!u59rK{l2NPnePB-7r6G)qZ#ER472a|Xw90dBxniG`s7qtt zGlV;}Qh1|02q9If1mAX@nQ4uU3ngwJq8sMT{Vri;kIh;tfpaLRM#3@L<+45f2%1io zqd{Dy)@Gabiu#Z1-WRs+xy(X&07dl;_{o$Py_mzqeRq;b(ePSENx7rV>%Ef?B&Yea zsfzSt>*Pso484b<)tNt8XwH$Rh(?!}tZE@Eul!6EYTZ^a7}{D|oh1;0YXDO02)jySG~UUB4E18|DpY z7_!2`jn*@#~)+g);s;6Vt-=u1T}H*0i5>`EV*6)+9Z5NzQ!*D zULnKu@s*~>$|H4is}A*$Fhz@ur8ep5Re(CG(*z5+BqN6Dl3_+?JvG#D#lwvrEtb*?9c-?ElZs z{{O`P&+{!WvHobP=buZka2hl?-sK-mCRgYX9dI9~| zFndl7=i6i}sy=4ppZDfr`E^&>uJrjYH%mlSif`Q0QxsxQy90MdIHK@^lOkNiq52;* z$;?||OGx95q>@yGHHq?sT1)?Om@I)aNJFEMMCyv&gHlcDN>t>{AbB1FSLx6?xQfEG{Lm_nCM zX-qF5vJ|`-%E{t5c)8p6Fv9_3$MlbXMO8DVP_i53kI}TtF3}~)GpR*7ukwb<+g6Y( zm4a{fa(UK=B7lfe8l7DrVgSQPQu8Lx6jiQ$E~#`%kDX8AWUs%qn-`gRPUo>+q#yDW z3k2UVfx1*trPEY+@^qs&AFqbm`t&yo`eDgQb37A`TUoOgeRKmE0pM*+4a+7OfOnIl z_GQ_i+*6<%P!wuF=>rPpu1mR_wk0r_?2!KhH(rjd(9MA66`#pZktbcBc6n@1WtxXFQBBPqz1#2XF_v-MkReC42Dy3fR zfn>MOinNwj9-?aO-G=j@#&A(Mhe&J*ykmW;8jS@iXB84&j6@{Q&sCnG^KOSsRp<=& zo3t3?DiGmx5q%zHGkeI@u29qRhTQoatFf-Ug13j*x9p&lZBQ5j&0D`3c}A=oW1Eeh zdV8>WlivQ+qFYCzw`G4c);IaC-pBp~wflh0a@&6tga7^ae}N)hI+Xf?(o(C=Vh|e% zH_LM3%;_4od#_d}lFr?ZtaF*|fYOcEEJo;u!l zFp-SZezSh~1;}~iM^MP9kk>lboU}_llB^G5w19ljZ^n0`DU2r11M3O7n`ZtVI2;Zk~LBZ-6z{tpJ#)Yrbwg-NVZRy`(Nh=_-27Eii(s6Km8_$g|{bQ5nR zmqra7k?zvErOiL5T7TPak4b68IQc1LMCX~yMej>%a#Kl?$79qqggC4o05|MFwWnxy zBtXcaNZG0P=*@INmmvS!am#>%_X|6daLa)D-R*{vcTnsJ_=7==^f{H#4~Wx#KI|D6 zVTTYkg1yr(hkwY6S8iGIP*P}i``O^*AFzt#!^lS0GpE-V%$c}~g)KN3Ul87!EY1&8 z+3C!z!0PruHVyp@F;R0{IQB^C6L|4{%iGjIk(HAP*|LM5I;)Vkd(6^ADB7{4_%S(pFmbde>@cHK~g#6rSJYOruxqe)_?!ne8R%XDx>!m-WBJE@r}y5YK<>Am~w4v zKeBL}bOA=u>Tbwj5Ig(_jtI=b;P_oIxc#HfuTaj&!*CpBcU^lwhkk_ykx&N?%Eutu zeV_MIy22xvP4*UX?fSL+(pq=*?+e9k8Js$(TPxh*BiX2r#}Q2$7-h`6qMz8;#9k@s zGac)y-pjNdEB?uVHO45?`PoU?O{Ft5OKP>B(q~L-`rH-MqiR)Rk7AGusf&vXzzTt| zMFiv6j^7`q-X|DgW9bm3jI9>QAs1St|A3Z>%*hq{3m>((>1|Mja&&-r+aQi903iCv zHb$P7mbWZ&=hqLZFik3K%-=%>fy%;~Z>z@!NHk1*kkhZpguw#H@*dE$A4T`)MX)uY ze9NSp=~|Iu2aHZw8?pr+=zcK2o=N^Vja}O5ss$D6)FTd8JtWL0gJt^}A@PeYut-B{qiibZusCzLPd!e!i=e%!) z|H)udSwS91ZrJFbLC1UV$=t2zWkR-hj*ajhE_r|4AiLVT3P;!L*kRt)Es7!RD8$aJ z__^}TVh>ZXbnw@{%r9h}g*%IVq3-fzGOQK`{-C~@6J^V^|wr;IP5 z_jDbrTwE%=tb{4-;i^i+ofKBv#wx>;tF|_Ch=8L$Nluu!@1aLOvjknSw`a}zkcP}g zLElPb<_&FbtgflKMXsU3k!8stU?Iqym-nUJBJ`!oEd4wur%(8(@*30c8a5G(Za!j) zS+xiFM$O(FANmM;&t)7PLb^pR4y!3jgui----l$0jTBqLA73_LL#`0hp&A-WxRCcgO^ zjB2|n9^gC&=cj<~P&!LU9hd4^zB-Txv-cBWLud28=uNfA&5;`uN2H=(vuR9La$?7E z$vY^FU^yL$+)@9!kb}BZy#Em+?oI}Fy)DVl$L7shKP)!`8(f!{9;+8kWL?ps(Us5F zycO>Z32x`C(I3XPa2-o>t zF7Fnt9`BPO&X;2^!v}p3Ei|aV>;M#mXr<`T zn??xxoC7?d(wE3Y`szZH#<^CV-J#veMQ)Qfc(`GoD&qu%!ReI)0tJgQ>60D0+wBqF zv$Aqs6ZCfSyGP9B?(?!@F_8*Ko?lY|=>7IASZSj#Ds*+D=0QDJvhS2d>xQe(X*2VI zuNH5oLUm6ksSV%1uZeyW%KYp@Hk;Wk>CB%DtiYLIOCflN$nUL38KE<|W79D@hWq&& zvdVS4v9CnQ$&s7v48tul8BNAsNy{!zbJ#nCw4XgUc>jcx?}m>`)X}v~Hv|ury$Qk_ zz~jt&Rqm5~l#(U$_Wf@8;qn$I=bm~8T_bzEWzx;s9SGlL>v7SOgw0{}jz50q>YFzv zn`4qY`@24AEn2Wb%5aCN0bw3~5eBJC3^VlzHrC+dzDvmz>cE8Sg z9ppCFmib1c6X2o%{I^;E*j!5g)s+IQ@YfffEIwtf=CgXd990Kn)~-?713!Pr3~b$b z^ZGn`dS*U*bQ9t`QmLE2wo4b>?+R#vYQbWcN=YiKoK7N&@vML=i6!|CE?lyL+?=0x zcUy6EI4}F{jTOBv&d$fCQ#OrxvG0mm{X8!fLN5Z!ITRA1@Suj43UUACu^RcmH~dp@ zPjXZpgzNMLYDR;=eV(7BiJ?$)g=!gy zlb@fIy~R!V@_?vp6JFnWTy%vw2KD|IuXxuEX3v%M~^TujbnW&C>qxy zF$?DokZ5e+?1@(ff^heFWtpD*-K7LEe~zTYkF=NLRt^IfO`4_2t6QI`vRxq<7i)^j z&2U=z)mh%-Ou30K*;I}Jp{t5)Iw5)d7$){EwUXRoN%m}Y4cZ!16yp?`l6esT**2T^ zQ{M7q^BmG#x+>j47YXPgum+slaU$aQ<|~r#+q%B#^-r5ZYH+`JNN0%Li0sI!IH$4% zWHwL#-E-r&H_Jcd&GP?}kZ=Sbo@E{?@T}pg$FXjVNpzV~S|a2#EJS6b)`lB!P98Q2 zsRWj^)Ei-FfBPaAV=KWP=%(u}qN~RqpU4c!d#|K9((LU%gA(N@!%|{80q#fbAa%tC zoC>;8YKFW`9xI#NzkSVBMtw}PR5YkpZ`8PKW1DbY995;IPUAAs>nXfgs8cVZGN`Id zYCmf$?`x>X(#d_qj-_PsxI67mps&al1Xz=>ER0+G^1wXE&>D16mHlB=dzhmV3W?Xx zU4+;h=;K>y=3!?nKoT%uF0f9#Q(|923C;P=HjG)G7Y{Q)JK0|M4q&53 z5fS0W2xmYmdvW>s35Dk7Y4LOPwU>$DM&6^i^` z)lTfixXdE>fr+b17g`uX;;p!=2WW@$Pmgiqjrvq?j#mpMfwVl+$pIRx@{053(o>2P z?D*`7y0MS2Y&~jWMkCnb4rIFOkxGK7w1Y^3a^Ik<%GNfR0~>XliXzWK$VwEIfZo^d z9=VSNK7CcOKen+WNcCj1AJSZOmJXsKD2v3^CJsJwOO!{)U6Mv(={h_gxwp0l`N<$$ zv{mX<*jBRztV4eX4TDtXtVDb0hiQIPr2H#S7X9OnSh=JYqh8O#yUz|MHncoBl`{IB zs`c)+b@|D5X}jY`8hy34LMSYgpcuL+FE5U@03%d&s0#I_%PH5!DZA3e8?xEc{Pz0% zYtz@C6O}gXxjjtg3fC&+r$2g^cVyA;=;^0auA%BJJz#nyR0!=fxrKBa!3`FCIASTg zl`?d1;Xcfs!)(I7CVYjXlsn|i`%>2jW$%SCI(22e7$$P(cCGq}0A;{Pfo-z}Orj6& zHB=O4)K+k`s}@L9>=`ArKTVKcVJq5s{D@7PY4oCza>r+MRVlV&h|Y?}O^H={^%-ug z8SlUgcL*~U@`s$j?E9Yr4$fUVvaqfX=&th`tS^1W&7Zz!)?6^@Ox(I~$n~LJG+W|E z&xFuMdZf6dxC0g!{T_GUmggjXjm8Q2w00zfBr91vewkbbVx)^{k~+97hIscL5L>@S z(ww&XPPoZgx9n;~Hidb`XqLiLpMDNeLj=MRM8ZoPFZldCSYc2WuI8V=_PRr5~azPsRbGh zW~YXckU>cST!T+AhCsFi?6bPz6TdLtx9xs7#_V3AF6fz5aOi2i$%EM3^gIQFXMI}Y z^3?#25C@4+jEYb8IVYbmg9uaH?6aN3orGWSLs#P>fd>I6#;I_AcQDS+--!s|XpZ>c zswdkg)9(AH!EDMej9R^W+L7cP;jP^ENtYYWwFjJ+kR>he_PVGk7W;HxrwUVAvAWdW zt;o0F8<_VXU2I`oEj)SD`HlX=?>`qv>rdK+N#sQY0=L=!4ZM2&JW zy`|1%{9statoi#m*DNcal3Q3mWD@t=6Q4#H${ukloKv-aLMUTu>VOzi{r%W7KF_Be z8n|dcQn^I1cSpcXT7%Bj4a+Bq%1yHzlHm!reX*%@>E4VoN21wzuOxnkt#9ADX3dS9 zGe;mD&^^BtI*zM+Ohu(hY#!gWgIKe&K+H?+ZSKHd=E9$lU!j&PbEtP#PDeE-f!UI^ ztI5vpx%h`VjyB2uCHti25WROtM~dA#j~1%4B3hmIfug2M*Rg;M(obqbo}21GA~dld z9;K>7(B#-q8BYsa`+OJQOZlGuD%ZamTSHxB3vRtSC9dIwY-fFcQwQ9T35YJ`k{z;IAC6hbCUWphU<0Og_}bx!B9#4(N~w31?f*+hKPgs0G*fg z??>~=E-i=79>y4u6dKvGmrJ9Owag^U;Un*IfMrnmVw69kQJ?590y!>Y;#*suG&gb` z;`H6%^~%wmTe(64yW^1!OP7oCq=7+lCqP-*{EmJpz%JINAVMNVK%w;`8htjs>5;4# zWHT&G3rTAkH-lcic);k$5`Fxc$y|Eg-Q_Pfl{Oi_j)q$QAGmMmt$c6TqE)Ri_YlXc zE|~%zL*IB9_W^MpBJu>z6%veKSN%3aQT1J3aMJqTw=G=Voz zKScd#k?a$3k{Yz}M!{{|_`|n-qTMR{tmeUKpRb7d`&(H95usG7ExDm1)`}9EmK;YO zyyWIqbYSB`%U2YQnw?Ma0C9vAP{ms=g4*dJ3dVYcitB0GlM<}BWbYnZfeYx%JwQH=-=hxo2v zIf+7-Cf4dl{hNH>y}tRIN?Zf2-b_5aS_{RiOxAoZ2V`~_?`#-IqmnOKyT=ANhb@d8 zJ+9)e=&u&gUS1yBd2}L3EQqhUKSqf;PmMuX%3LiI%PmwfhE$}f0(Axb;9_L`@tN zC-vVuu77aHWej>nv(18o$uTI>oyX6hSx!k^?kd}-b(qym-!rJh9~OME&a~Vz`RYNl zKynEEF!k1TAfORB8)K=_{gWZ5?D$RAn8pkhL@CFD05*l{KjE)PL}4)Zj8wd zyOO%b;r_GGt#=VN{-#5KkEi5Iw0wA)I0e#zI(bbUjnR1~CUDy|UUvD-vQ6dkTEQ(} zk_3Iz|Al#%o`whQTMU-`zd3LtPc^A_^DpsT_ez84y#`?wl@WHYT0R*c5{ne*r2_UgTi@AZ{G8J?p3Y}3DGnjSIcI~5%y-4bw`{ta>r zD;{CjPXjsF`$_1Jl*MgbsX)MXU?%FTp?Nbe$4q6#OVx~o?e4W{p5s3x6m-sI$_ZhE z3WuA2Pe1p#Wbf$dnSJ~=y;IX(oOpa~QI*ojoP`};s(iNpO#o$NZI2j!v15R8u zcgwXe7}oL09;@?rI@_l2D%C0&d#~-L5}TY#dV;=92e-k^e-6gy`A!`oc?V;K@cS8! zbkRPKi_Oy(BZ)eQZ7!A6xsN?xg_U^LP!YI^k95w2d#=*J9fqP;!+k5iMXCszgq{Px zdvN+E1I{x=d_SLl5g2UcJ#9Giz$oR02Z-B$yLkU{nAhiK;mb%+p_`4mxC z{NwTp1I5^_%qw0r-AtJL`E6v}x&YjCKZ~v~0aGL{BO7WYAl13l;2C?Sj00!+nNTMx zh6X#bmq0}{jjxg0B*5AB4z%e$F~4Se_{nTST*>JaWRAO**B(#x-6F zzjJMHToMjEHl_WWqmaq!T=Vg8FC`Is5-a%i^TSZg5;%U=|E%;s3XymUyFuNCAVp3yn7cA$LOMq zbfy|x+|rj@_Aj~sc1C-IzO}o%8;QR1E8XtU44qU5&WPnY;i}SEaKj!FNNFavsr|r@ zqXUp^cNTwtU-l!wR!bv57&vhbk4u*gV3_hxkH`pQ=BwWP$uKq^SiJj1*5B+QA(}1- zdq9#!4rBC*W6GA{aszvwc{jhQ58EhYr+s{B(#1=W|7z^=7?@FlRKJ!>2e%ulW{^eZ z&)#|Ly?JNyV_A~v$GU~lI#VPN7yJO|*ncwYJ*Z7tsU)wP-hP|ex02%cdN=U980|Ap z5L|7~g!cci_uf%WrS0A@h>D1a(v%vd2vRK+krGj9A|jw5AOuB3YNVrt1VMTSff0mA zmm2BP66sB(gVaFiJ)wj^Lj1P#KHqa@oO#cgImh>`Q~bvjSz#~sweNl3SNRo=+V_2% z5h0hwO;1;yGPU0l3YLeGc#zk0;-nt)bT~wyo}gk}AS4lv_>{%t3lP?7CLD9XZpvhW ziCdiH6gzX%=|hAK)Utf*B$)~Jhk;T&#B?~6LEU-MTIVB1 zt%3mL(#Fp~Nu!V6EvH11Qsz3rvO$#dVZNw69uL-__DC1FON9 zEL+!vy;)dZT;eCOVn227f&Y2GFg9Rx_mSoRY>LbTJ6(l0tWQL8l0sal=LqST;rN)( zn3{X{;=(ky>^n{`w0px>yu^&PQGRwo!Hc^q?e{V)s6UdLN zIpEyL(d>*APj@Bd+jG{S)i&%6@`bby<-x1;{vJI~?z4ML-)^h#@*OB4#*?BH%Z8G# z;mJVD+LR#Iu6?43%cB}bYYCt2aq`-yRqpte#+|=LuNsOIUN*!B;J}GMXZt}nD!rBb z*dJ^0R7bxM;igk{8YPSvqQhb9?ziJ(a4Wq=>YtuV1=2q8<_%!x6sA^W4J5rKx@|GG z0vn?kbr?|Ma?inaz{xkpH9jXs!xsZSdhR^ zf^QM1At>P?4dMpFd8;oPRGn)(Uv5T8dP8#ABW(y>Ahj-3-gb?#dy-iVXtsxAX*6@|43||+vt^JqW z=|`_4je7um-2_rLSrDzQkIQNR9rM`GrFV~=D>;YCnF*-?t-jj5>y$w_?<`kzSqDTN zM=(^gtwAkw?|T&Arneb+@|5#VIdr`6j=eWwD~k{Q9YS%Iozxg3aoJbE6#^Uy{5` zngxA9G+|jEYoUNbeM{T^q`#Mdnvg`_){d69FaD*M?J%4V-ikR4=X|DT&3CjgnW%W& zD?7Ui>Aw9U<}@?;h3(*zY*)d}4}E&a?}*UQ&`i({#|4XB08lbNX;eQn24bD?(-dv! zK98wdW7ki^UU30AfHsnHh8KMNURn6~mrp$M=I<^jKl~W_+%?Ty>2PopzB!Zvp0ek$ z8Rs2z8S}g$-Xc}f{$bU86ypKCYAEoblf4t%xW?q+TWcmfP|b-mWo*1KKcKH8OthpJ zMm6#`eGUG6Ri^k*=m|XyF6C^*gM|zqHDvk6*;^ z8VOC=R@w|JjocHTT?b1P+-;LST^w=lLeZuLvN}1V<#aLnj#uZ5Igcwc2!9>TL1vK-3UwERu zL~rUZ6mt5fjKlGlUMRd6JT;5n#Rt>_mTDAmAsOUf!X$UK?9@SR<^I#y)y6C0UZ1sX zjGhd`Upu-gC54ryZ)>A*_fFrjP86JJ;k1ZTMCvaYiq6T&-h7w}oI#I&dJ+D)uiy{y zTQuy%mN?{2?lI!lY9+K9W(2xdWF*wAC9Q6b3|9_C$K2F86gXny`Shh2%lW8HCbnlO zGA`YO_=b5aQicVg-jw9ly$I*%6W`RbP25wKt19i!@Nu^#2Js85oH8!DPBqy_KJuWb z8fv}mrmRpy5DpfHi;%>cF5dGHxZOKlh&Ko)w!Ob(7_xG~t8C)zRn$yVt;t+GFBck> z`YK*p=s>^Bc4H%@wA;nda4|Q*CDfGJGNvo)4AWH`6|g0w-#VL7$Oq_VwxXD z)q8Stn`+(ppyg@x!LNH9biU>GjF7?MTlWq&kIA%uFW*vUBwV#u`NZuL^^+KUn6_N`5fcQxQGz}?^zh`~t(!02!*{9-0RA@qWshEOhlr^7ZSM`;F_KYQCc>17h2!f`# zGF)Gxm`A+5B&j>*qhsw>hO&59QX8(5pz_M=>TH!=#e%2{m*V71^4cUcTvl10^hr^EvcvE?f!;47fZKp8Io_#U za8zP2x^*_~)$oaTO)6`{RiHyKUA$ETcVZQS(WB}rL7eC<^T}8(gQ@o_!>JR;3&o-j z&2kJc6+=#B20VBRuP=))lYL+7p{RTCo#cMoS&8n!zGt0}g@^$@QDaEgSi!F7B9* zmQ%@>bVkx}9cz9tT8jxV(;BjgPwp4%xc48i)f${WE$S&=?I*v|cm>pyEJ@o}Wsc^8289eZTb3R4grl(bHE&D`Okj`i;?w?d)&-E}#l)y;F#MxzgSr7lwo5=dm$+_Eq zgC(FrNJt`}Tb2F5zf22t|Ke!of5`Wq?nX50_z$b4I9qrT80*Rm2Z~BqNABAibhjP} z)_CM9dHDS|mTvH>*hc#V^5fcmm=%dkRsnWWi&TUi;xQ=!0tf_WbkfJqnwmks(%e~k zvtvDYshL;X`ebIJ*O56%{belaiH;v~Q;!0OqWCUBsPgI*Y2mug-Lu~;cxty$Uuk$y z0>F5I=bK~1RYU4sD2B8J!q)?qU-LHr4V8RgbkCQ%N%>ThyZn6a55Jp6GnyDCg#CrFK~`>$$+u&a2nXFNj06*j3UA+c;j)*E;LVh3ai0^OP zOdTizcj2}&3K#BQS7XI~PgytqsBSg~7qXg!x~FdWqcSW_r@ z(?r{Jz*5N0lxuxkVmiz)PJGBSv?w9HmA5XXIo7I*-jRB2IZK!v)tX#-KH_3wnwz2g z+EDzhioJBi6A&xKX~5jItEA#+>}1HZc<;BztLescgOtiYeIb_;{hY9jR6c9uVHj(mI z_VW<_mO}n#WqS9}G5~wkwt1YTpCX@2QN_b{9kT6+#aYCyOt<$<>T8!C^zk*&nR$Mf zyZj+DDwqUP+?j|k%^$}Z@K(+Co+gBdFp9(hq@SgSbj7NS=c8b%n|Q9{aVdY*D<%SI zm)-RtZxP?8WdCLcT;Tk2Y^*ix*4;-xEDZxfE%q~U{cXPfGpG1(kW(nX#A8BBn7J3$ zAs){6dtJ#VXU-{oj(6w%WP6I{mH12Vj~Cv!)-xM_`BM*rj7#gSX&zO%K(FlfZJ?L? zLwfW76|Q60h$#Yn^M^N~HbM6)F{qMU9CnDAs+C2{4+90Opwv}>5)jV3Csc_lUBX3>&Z<))YZ$3bm%y8Gi|E08 zY%S<@w^nvME&`A=KZ>8tDp)KIv6s757QKkmr-%gKo9df*s*tb)Cd%T+QwRtgU@rsq zNZwbp=-g^CNq+W>EK`{j+CJj9@07Zp5OqtFZ0(V&OG=vpGr;!YOQs>V#m&$1J3*f$ z^6#wPo^Ycz);r4F3fj(HL>}@myoHzZD?u?Y9AmV~pS7UDbzwHrJvh#QOjWzJf@0%<_Gp8=-1lx}^jw{DVKMp`q)1I4A5T5Tl03 zAKZWatM;EufSmZ}FaHDmKT#owN8oQ7p5=R?Sh6buV*UMFkS~DO+Fg8L_{hshmCbZ5G3CN<9u3H(Sv$D&x~uMr zq*ioX{gYYsUo|YLtU_IX+KvMt(*}aTe)~gvzJJ|g!;~E^>sJ3i!DPd*15_T-tfW5C zT(@#wnsLekr){DeXmTT9RwKnSPObT=M%bbG>o4!BN#1JF9x_F0b(=Zk>86wu2~(4C zuW^Y?QTH_zL&!4nvgJ4EUxRuh+dOm6u9<~tW+we2>;*jO^mE^KsQ=hoWf(ybA9R(t zHid1fQC_-TS@FJiRobt(G~uyFzV8=*M=sWvqoZ$VV_H$>s6<6xf(SI+$1=Zd#;mi$V64NN9c)T$-VWhnmwY7PP+N70zl0(W=;I=Z4!~K?0?Y`m z8x3CdxyxgaZAT`@xbF0%kr@ZRXw@QG0hEm!{heC;Luxa*+Jn zRjR9t`X9Y7D+O74x?92+B#*U6X86?ClubEhThjL{%HWg~8mWA}t{wafP?vnQafMuy zm-`v`U617Z&~om7s;26Zwfs34Ll3jL>TS|6&M)|)Z?Eh@=d>7vDD8$Aa-J-FERHC$ z;1pIoXfAd#eG=XVEUJClfXYi>g|*nT4#b3n(9WV8Rf4dZGTEVP=d!lnBc}1zsS_+6 z>5LkafgI+!=vmycRk!mae7Lj&g%!@z0Dl+pBsUj2`=OXXn2Om-lvvTT6zAgz-w{RlvL zt0Ha#`mXwF}HCUJdffUVMI&dg8s$$nAbtvE1n@CkOi1 zOpOiE(vdU4{(6R@BTn*yy*CVuhYi-PA%qol`EV0k^i$s$stIKVTE96~H8Sp?EH`g} zrE6|fE9uh-2#>C89(w7xhibJva>8LR5&s<8T;pCAFXm~@RJV`ijuD&O?L#dcuxmI( z2;g6jFc0ZGD6`%^WvWmgk_I7JA9UrGPaR?Fl%|^t7p%1qp!qP;`RO9D0Lb4?DJf8E z(!SDksoLtD*F#FSE-auZw33!5ogLN?@lrd*?WN4a(0XFBA{y_744~-bFU4IhxqP?p zvRZ<@sQS<=~>a5;5?RcMz?$RoE&nsYY_JWeLtrxq}D!qM0ZP5w*&E1K{FP z(rW-p5-8j1CF;|o!Pp@emvV6KakM$j1dGN&76#f zXfbfr&*@-4Y)pq=Hy=@tpXEuuV?NbEBx-k0wy z&#|Poik!b>>1q&E57ires)1~Jjtrv;QyVdC5?etrjfQT~9S7r4_wMb`nHKutBFzNP zM)@~*v+dkFB^K%Ao)ev|xAu6;s{l9`yw*@=p>Je!!Un>zs9RY4r|lK}DW-Bi3h#ql zQh>^Ubl45*q@A5KgK~#*3gT(~bhwa@wSdt3TQ|K$_E%hCVDT`SIuH>k<7IUn)9nh7 zI6|~aO?FDWOwBK9+6*x&>g+FSm^U)I1k05?DX9iCnF=qpz>PsBwi}?#q`G^Q1@X1R>b}*wQxZCj2|A6QYe5OKiEl?2 zW~Pw05(dV{9~+9US=w{0NgNX`82b3|;04>{tSZhM!v)aTIHYIkS_U#wSM%MO?eZxx zaJ@tM=%O+!wdXQ(ll_e*Z2d5OkapNWLS@i^gUeU~Oxz7wR6W_2=*_FCI!Z6#rb1Uu zKm^U<%aHqtl?U^2TG?~Q)GgA|)vme~b66#4Ood(1-%xn>na%RG$_DDoY7e*65Mna# z>GeW^C-}Cz2WcO-pWlrWMCR-5r72p!BiWka`I5jvS$H`gSI@)`GFX<8z%*N!3N?Z@ z`Oc$qmI~;&`8kn&MKK8jC3kEtJFY>ScTLHrF`66AuZft+JvXz!#S&0(8J}Vq0UkX3 zIAe0{_>)LP)|27N`njg)2II5Wt_em}o@4R}2ewrou}|>*Fq0l-Ug~G$0hibL&{EW~ zrApHpbW*CdNQA3$-$BiDtASB(XOf1l@UCAeu$suHzVIYpr91>U`^MzEeVan~rsVh7 zMdPsk-LXiAi-H$NHC6gyHi+E_rrWli=N9Me* zl>ZFf@nH>*d&^1T*Syc4-kX$XQk71k?7%k{#b7JD&<7ndsbkJ?QD!`5a?vYb0vnhB z4VOW%TMwKwy#@}Dky@@Qb_!;nSx<{Uzhd!Ccj^s~Z?kjrBB%u8CynuQrd+8k?dR_@ z?@v^Zg#~_U7ajMCM0b%ycsN=VfFt85+!%-Eqg=xe)}ewC9Dv&;`;x(Pp{C-z`uqj{ z#VeTMxSru_T#5HLo|17cXHPyJ^QLVmshon>{YQ5Q?dCDF?La_1R5b; z9W~BcdbEuNpVa|uG&R2w+_8JqZ21vc4lr3pwO(9UQJ8W~M_=fsDCCkX8kA4Q+-F5R zg4lF@lvo><8P|nnC*hp=?h7t(Ke%UpPRuOAjFqgZARGbTANw$i%6grXo`+i@(snGz z#c|ejn8Lb;pj8rr3Vx;Gz+3^?PinssSOMwuJo=e%v}V4INP+Xa@B1+S z=l>tpLcr`4CA>wg99ozl^rgJ0oZBMksb$40-!hTGDp}_DG%?-`Ok(rC7PH_301`w~ zSq$-|f}R@OYrFWIBu7*xr92}biFE{Q=-SG|q7VJjocBzwIu)wL7&UXvRU8Utm=YGI zyM(IFSrXF}9^zpdD+7XJe(E3H4!S0=owmL{KuEAcu#V0T=M#h8?ZoM-A~Hv%PaIpT zesMA_`+%l_KzPGI^YX$}2mqUd$@*i>oW@1*TMd;Q6;<+bZqs6#F|90;ttzX6>@Ubq z5UmxY7%I91yLZWC@Bjg@>L7q$P=&^ZNXp}P%SaXWe7??(b|0vp`&ege>zvLf3Y?!x z8fdebgd4I~Cu;SJjC3oME_NGei){|h46YWzgGQXnYmq_JQ=~Am31l%WA1mjxrNa!- zOr57Xhv*+DU6x&Potd+K#_Mp%&f&`)7t|wyRdXQhX#B8$=>&%D3(2@?X?ajtD4JW> znq|l5;`xvjkoCGR2z|O1^2SobqV~x+Pa)oY#dp%4@rJj_0+35++DoL;(7cQ9%86(( z^rPG%y~rYAh&BX(d>5{0m5-&|_K;jj$7}niNMsRJj7AT5GCK2-^e*J}-VdUsIX3Di z@ge7_?VXq{>svRdHM?TF{I8xZN^e$0v=Mah)VLL|7~EQjtTGqjC~|TItkJJ%gcBPv zz(i=nX$-qKDWmXu^z?PE5irj@U53F&~ z`(9~MLwWqR)VrH3Ck0wY=aSQDXa&758ssVS&qI!Z?T|;n0Z@wpmv#uf4UNr!_UzE- z6<25l|7*DBVSDZ}7Pj~F`;RFiCc|ph>cY%6rkM8f#zla=#cKc)f zUuQK5Rbwi=u9`>I@~O=!Zk?iG5Ts4my{0zc0;ptK8&oF8dP1|U2OWd#S676L9>y}O z8R)6d_ZilMkJzul*=)9vC!s5k3F^MflxwJk%FrXpkH)#fN;%yj#!brWa+)759H8;J z!@i$=@k5Oyk{S!@w5>t8J1SXc@tXEm?+qd9hoD9MX-m9_DPD9$zV+?_r2iJ?m`A~E z2XwAWy4c1++*}d*AzHI%|4xxNgXY7dUA3CrNM`tHYX}QPX)iy6G4Q%`tF^o3Gf=#v zr8DP^&N4*9cTrngLWjocYdP8LS3AZV-4Pj-Mb2nSJe0832~6*tkIu%1N{MyE?TGv^jWhTu(K~XJV|+dzL0oq zL~}YcJKk(BH48au7H^q`Xe=F+)^@5_CHRH9;oIf>#W#Y4!(|O4mZ$gMn-l3?iBY;U zsp703yp%&;)Pks%$E~I486X`$#h2jMj#X{bEKhe+W4ti=wZT(?hmY-htC4y)Z3TOIuek z@p)s`)u^imJt{|**G`EyJLQFJAo8Z@K2sRpdFUZVSnJM_zzxQj5b>D01n-JLDVfAD zy@5rD?2){SngY#H-lh)@2OFu;o;35Fgal>aB{RrZ=HpPd!V$;@uDGf+68zb|QApFk z(-Ic-84nC!5y%(TT17t$|eit zyP_oDTC^~}AU1DY{eflPBEeXqs^bhS)+Ky$?q!P_eIko_B)2uLBJA+>0Ae2@J^I{r z$o_>-pPFfCT^*yfVcP`mCNmy_R6RJLGK6wvP|=lea2wJ!(}xSui!$$-W^J4mYJ7P> zV#Vi!2-?oVkujeg@BC z(_MlD?pg{>yP93uA5FV1bqMB+hX;@qhDgS{_f}x`nNQB9c1&DNU+i>?!-4q~RLDbg zZ`fV+GPvEY`lu^SXmiaGT?nYUsx`h*6~GjPbU;x?w$KF-nA=l*teJ53v9R5PK6`_Q z?4eiaq7Rt7d^QTr*!0?r*&OH|*@=&xk)6n}w_B~UWnan|K};@WuTT$>)-r%Dwq(kL zRhR1+UBj^3o66Xk%>4Z~-Z%Bw-DOc1OMe+EYa#xN9mf$)Lkrwoqt}Uva-S@MP9O_m z^PQx`$_)7kzY$xzXcM=C$|;WhQ^GV8tlqGYkIAwm2qTw~Nd1@;@yu;|4m`BX@0~##?WVOQ~kRfY_$KT|SMiHkR zdfrtE0Zm5lvv501F12S@-QRUdi5r4P1xrh)-wnfF^O+rBFfp>U%i$I~@`r72EEPMuY5-%FfmCo__9858d#L#~(^ax!q0 zuYP*z$NfU^@R*uteq6Sk)!3z5#D#7p@at!svSVVUxnpi6DI1GxnB$nGrEoPsxZpaXvd@==nKSK~^o+g5{KvGcyivAF)nsZ!5Fb;3JkRoG0ur zEUDpNjh_uSyLX5~90 zxig<^Omj~IP3wpi0HRKdKGV#Xp}@>wt13|{C_M9WZrh#ad5SQ2x!CoT;nF9)bV7Pm zWh=LL+oID+zL#8-mn3#Fhez+!_DcXrC)f=r=+@sjA!UPwChLm0)`CT^*Qe37^4e~; z6W#Ij!Eg?WR4+^dSL4tNsqA%T${)+Qyi!hM7gp|c!|5$y-R~qW32v~OoSNln1du7% z3{QXfHi`UxTKVso*`F;6IR7Cur`5OQeG7e=nwoXr?f!mmLIj(KEv~r%dvKJbZdQgz z`rDOiSy<&P87pTydn#OQGk9>IB(6}DlU9`R2AR%^<#;E``ni2sSf;Tx(NUbkEi(OB zL(Osat2q&GY3?S7CQ=ZnCF&t1`~3v36toxJ#htw(m(_PmDenD0WDfTH{CUjc3WaU=_|9c%=B zUuBzMe83k|<8K3ih>LIktbm?H3&2#n;OrjY+XSf~DT8LMV(m}O@lhCmX$a0uk#_Hb zEl__F!}n5M*Mkxta^ZYH1ZSG<7| zK5zZ(=@%oX1x2UY6}gt*PLz+w>%~lc+u$N*u{z0>wt**n3yPBy89-t8I9-Zv~HRCLD;<#9JWPfEXR$H8S}Em1OZDQWb2 z@#VBnpI1%aq#p63RU1XBrv}?^9?b`84%G0}LA<`<7wD7eKKZ#BjlyPw>^T=V9Hch)ddDFCcu>77*bUycbjg4$x^UTFgbT zAY5;5B!d}Z*4c^dwuU&nK-g(ue6RZJ_#S3L1~$}Iue}V+GT^{5lDkX3ftJ{d{7N&8 zruJZo7ZEG{d)6Qy$e{k=DuKl|k<|C{K7WEA*!Kf|#vFs0$N;Th-IOAq1PC`hCOKp? zG|+nUd4*_Y?7}Qt05cs;huoFtW0d1NNoSFg6PDn*D8$>mENKy4P2`1FW z7VxG)B1C_%osaP=&8ujb0dQJ5G4HWw4)$%yxSIt|$2Zgg354cv7xs_%{J-?&0BDiQ zO88?y4q`z)tV-C|yQ-2;g3C`q437^Ng5Nk%U5V^4Pl6ovYy?T9vtHsltZWw@Ae0x7 zIXC3;77oAb23_xoQ2;X4rkS1;k4#r=L+48J#F*O5>u>c4q z1A-tVfPa5oGk~ghWE-IB1^sGBe+{7OH38*@zvnlq-u2#E0QYpd6rk$47z0c^;ZXp1 z`}>;$y2Zb{JU}_H!T|I}?Qfp%KHLzhoI2$q7N9qtNoEGlJtovw8t&9SO8t=XT+|PX z7$0Cx8A0Wa0GNqKF*`TDVPmBc-#v{QXDa6!K#XM7p$8Oq{DFrQ2K?=Rxb;$iilTkj9y{*$F50kH96Rsm|_?^eQ-@2?Ng^}Y{y+8=M-2L9l`^DIbEB{=B>5-UA&@L~|S#`g9i~S0xA`QJwfibLlIAo~mOYirA{dYgOMEwoW&z10x zjqK-!^ZUK_f7gZsv|~m*iQy!70%B4vCe1^=0X#hXifh!+NrfmD=+^N5mS4Fhm+!{q zP%FjFB}h8^9Kav{Zl|r;7j&uQmGc)kbn#Pt&^If=_)73Z z$^bqB`vl7@U9)^Sr9uF}*Li3H$2m5_hRk1@9HqMx#cN{qu@ch=VT7Fmjyqq9&H&6b z2k~g3cs_0*s+0Ka@tBy3`J`J@o_brTbExBB#`EppZ{M~fGJp&~GA+R%UpYIU1gd}D zl%dQBx-WNP*j`kz}cwQ}(GZ=4Qa7lFkAxD@EX6-KVN3T8;hfUMnx=UWt+|Qw5JeG5D@UW8D!&fsM zXF70sc|c=OMdi<0J^zha9rOrhmynIYY234T|0LZGNF#LLQEZoTpG{Tz$fueUG*bElo~o(jTjEtC(PuRO z+06T!d>lRm8DR6Z?jyy2rFr-n7EKnlHlZBOb0>dIaUV)_M43ut3m z=>t7EBeBk}H0G!s=`}jU$Tl^8)Bv--Hmg3Y?ETLM%73I2SX`}%GWIa6AI>a=Q%%E@ zY$c}G_P$JAT}GU;RYL=j@bM?oCr@L!_7DkPrw@OY(x=H>`!w3fBP* zBq|%e=$(=Dn6gOLNOzWiOFpUPGlFZyx?@ALP}S%jFh}t5`HQ#490`7i{KjFM+Y4<6 zCW*#=UI@r3cq4cng0Su+a{}?cQF?fnTAEAn!bTnYX1mk!{!fxqn*X6cqnl$UiAaX+ z<&q^y;pSBdb+e!65!lU8YBbkYr_XLDMG!(yVb0+g9ZcYTwTu{katt{r(+Tg}l_PF1 z&jB{{+`;pMCr()?HlTr?Mwb{jQEUKFj<5t~g7+OpAC^S-ZS=M!Yj{&44XS!~qKFap z|K7#P4F0#)zu{YW7iRqm8rb2!6lVi$Ch=IH5P5G%NpOFGSpk}PTB~A^9rq1^70{J` zI==izHZ7pH?bh4`9)V6qc*k$=8v3PN9#2iW`v`ZtK*5KL$R_~(+EiW{js&`M7g7B=y_1CAbmli2E z{oP>wT<(9YD}Vdy(s4H>$Wa8%jt;scRiUvDlnSt>grcb})En?bqH!k?xjZ3JZbeqO zS6SAadEE(cv@zaIMJodvnCDlThVYFk&`atXQ7*`2nz}kAXbN7zZsuFywWhC;qKHg? zRV*GjK>ul=!v2|Zz2CKi@#F4z#$=5$uZc-kMzT!v zxX@l#>5yTY`D{e8Ksd^j(whEi`sk$#$4LglE4@H}nVq>Qx2l~RAy!Wn7<)Hle^O&w zc$>hyeSa0ucV;tWAj`mb6Q|;vn3(GoKx8?@aOqk72+4s9N8S)6>ge|7*cU{4pVpMf zOGyH-HK6xw^_2$X5rB)Y>kw#!3-(BqDCFOfX{<>qzDVnU=&#~f{pbK%E*ea`BO4d_ z#kk(yo<#+ESlqGkWL@eD@3(F=NAC2`)|dt80dttYujBliBZ2wk-h1?EL|xflQuTv( zjZ(3m?)H1HZB*)?#URCFm2>h|fDI}e0ICOI@cCdX6uq^R`po#KF_YTzasLe~WoxF@ zlvwZt`xK-sSFRBpiZ}#kzS1~>K~o3%rhvm&oGq3fA0`mEtf#dx6HK0EB!;E(gHALuDz>X zA$WMNn8b`v?VLc><Rq>fzx@P*>ch9RG)`KZvWI6a;M0dDS>|LXM?#0XzxHQw*T>Xo*uIi&-1rrRJ-%(tEUb@W*Svl;nYB5VMTQL=- z(xy^-p2(JTe|5cy+0{TZ{rFRl9HWA+F> z#D%Hr1P0CrO2x#a0^!Gy4VMjEdBx9E*qBaVala0J*7-}~E9NyjrQ84@-#}>Nv6FK3 ziJiwhe4CXydaHF&ts5hzOS0V^w)UL-mxheiGs5Qtx-y@!F96;4-wVxtC&=2LRn^|= zcB_0=>BmT)<|=ErTRLm}7@@kfXx=YBul3hOgn!2C?};w|XT;0w1q5hvlx;6h;nybV z>%xSM@DTx+BGw{zJeCG98luANYzd+l92UMor@r%; zx-Zo%1wz%Wy;PPUXg-Zz7=}eSn4~26x2R7EoT6A~xSN03X(oDg0;MMyhinkuBgRiQ zaPcL~t@?MyRxnrAiy=m!&&mAgr+eO%edCOKNiMk~FZqEAMvi51INWLB!H3P_%lN7p1z~V*9gwX82>2-?rY> z|H$c((h~R&BFcs>m6$pdBMbuUUcgMPyV^7Zu!pdI|0HhEv6dM0U_`Xm{6)E1n@-#E z`8UqJ--c?x6I9Mk8)_7Cv;4ICJ_X_?88dSM2(>|B{NizvdoQB5|55T<0 z?m!|Df@A&&WoM4GP8MVo*!7jD{zdsq5ayzBFDdUjvEpBPq3i_cGEmM4Z4&|2l|mp% zazHJuh?2^Q03#`yOx8kt=>X3($;Ay{k z2=P1snoTdiORNz^9)Uk#`T`6HUcCD)567?tgTI~cuw>R%O^?Uih~df#*?JfC$~iD9 zR&8=&R*Tz;`Wks-cM&buqeGDdFwT$DJP?R9m|_pLlXKC3+9&<^-lX6N|>eZr?xBLYUP~1F@Gxl`YxAHl!AZzcV`y=r56AHA3XF; zAd8K&j&Q`Y-t2qO){$vD&>KX5_n?L(V$Y5??&xBB3o)!>ZF~(H!p%<*l3Q?mI_yeO|ppbONSiR9cEs%~%cg zYOy-hP~$E);1Hv47IM2k$-fkM2lP(<75>^LG3w2>djBh3)$<4b=FIu8ejgcID6EISspi1lclU@TD*005+x4DTjaX7qNSlmzbP&MTlk`gLk! z?m=$ah15e2+A50-Bx`Kehz_l0oy*)7O`e)yDTOCZCUi#dcUuvokhZwRODk>2B2 zzb;kP5WX9hC()hmyX+&ect|`%!6Gv6%Umv@+}8yaXvWfCEmL5Um@j;%+|%|KUv{CB zuKS%1EgqV`f?^7RkY12wY^Xdv)jGNL1bV>m{hdncu&v?Y(*v8WLiTY>Pw7`z(@v^h zpebTmZs4K0FB6M2G3fxREqe(`6p(8Np(+h1&%Fkfd?(!-@}+QCUkR9Y znyTwjq@zs3q4;;%XCAzse0a6^2uEmC=hch8jjpcv=K7Ejs4w=t0cI+KVSX1LiyLBE zN$Fo+#%U$x=V%_js98RHJlFCXZ<_i10e3C@-0iL{=KYHxW;C-cm5spUpKIp|K4xZS z&3Gp3;qrlrnmDn!xamsd#aTn;hhj&#dSm6CHY*{B`4T%Jj}5RqVj447q@16Men@i0 z$JAku!!J^v$2S_Qq5@acs;u|Ra;0DO^x!5dv-C7`TN>!`Nc}=%CqgqwJF(`MAQyQBAM(W@X%=)EX1+$K-2)L$D?q{&z5MM#2VHkM4A~h}LrE z2;g*#8JInv5PPZ5)E=4u-K3Tw?hGc7kT|pKRLXNa*vH(bdo$npW*^kyan#Ar5zraC zL)Q+_?1a6^o&RQkY&$w_%oIv@$`gs z`TV$jA$6%Ni_0qFnw#93idW%a7%i0JiUj4hA}ELH)~Q8O1%vJE`pfK{;%!a7SJ5T$ za$4B0G&C_3uEFWc5pfr^Ff*4>jdCR9t!~IMisJjkDQI23eq%y&9rCzGTGQ_GV6?GE z<@l7QkxPX@^7S&UvuCQqZ7sc1@$X(%Rvpt~@lrSL6CjwPykVSE-~bNnF#v56(5qYB zD`Rx(vO)5vZdIAa`obt$$vpPdU@MwSx7mM*iCy0A)rooZFCx{+JK|Hs~Yhc&tG zX`?|=lp-Qsq$nK(M0$;=bZMf1w1|L|2$9|bQIOsQ1ePEmARr(hT_6xT0@9n*kRZJ! z)IdV~UiY4TzCCNLIeX@ueXjHEYvzw!fhUkWdFrp-_r1FtY|wMFHM^Q=aU@x{zh91| zIC-=Q{Zb&1Q`=x|F^ykE+*uP5#j5bOObtXfom*+T1~7o37-r#S$f}z0k|v&BuiTQ3 zzJ)X1PqQ}Xd?sggH5ZwiBZD{Cnu$*)e+2lZ*)ixCvflEjF8|sG6_U478IL~(s2XAx zWcbo1e}W+6jl@ev5OxwT?(EwF0!>#I^LEMdI9v~-2kl_B<_ayf*Lqgd_uTSaawi5c^XSwYpytBId{YKsS|m2IWS|i zD#*z4+;8G7G3SDpw3~)t)9-n#c-X$#ioYt z({sb+<6CL4qE_^JiKA*k<`1LJ3+i@fKeCMkU1k4mJHf29gaBbSg*3*kuH|k5@zK6 zTHQstnCV`tg6yKkvOASP9=^6YP!JQ}=E8v`Cv)~~$5$x;{A?H3FMq1N)XPs|$kzQW znLVnDE%?!?A|a4Q$U9?gh^alW<9|$$m@`_?cBQkM%g`Y4gMHPe9ONk#gf>3DODv$P z)<=hYk>K&Z8Y!nn!_!a~>nfgiU-3JsS2_afg zm!N>rXh>r)_O2%JuA4efg1{p)xeRy9lV!abBevO23Eiqj@hOP^m>=bbHN85
b|q^P{T+>q^ppAtay}{UBO=mY{_x`n(yN=znTU4bTPq!f$ ztI=%0y^fiN-zRv8XPlbWX1cL<$=5S`T8T#3?M>42gr#r~3f6BoC|Jw3t73Hlk$P62 z_c}={#sq_hiLF|PE>QQB{F`zfhi(&D<~((2K(2K4rvJ%Q;M%Hlk?I37crMs zASZB1r~K`b{`Cw8JPS$`;AWgD0}6ur+yMK&CVBq^{_;nm5G*hQ zkt9gj%HXU(Hnw=6)>%(_aV!rlN(v!pJPlIKOkR0ltXC2Wee)Akv3bI=n@bc&51|z6 z)LCupjLE&Vd$9iajRu4UX>F0oDm201uP=lD^0&orjJ#PiRlL}uFhfBr$`2ksA(B-W zkH`EcpFMq^#ZDFkx0aooUNf0;U#m|h=R!YxH`fIxFwR)&@ZRD3%_ZWdHV@;=k+h^X zf1mbry(dE?wK9U~!{N7PmM!@!KC)7|E=M|Ahe@JzGZ!EFDh#kG0yAhDM&>0vS#IMJ zDX$&fi`6|ea8OF#WrHu+P~Nbq`YfWx;eM{ew==|Tf&K-81>R(B+JM4*uGVjzDq2TyBhM5NPFv$$ zv#{IrP;=J=Ms~i+vCTOt+18@6*YANbBc_CW`9aR?5xq!G}BA+jovzzVsnXq zM)v)X3I)z7ho%xPlm}&(mxS}w-4nF1(zfMIro2=#Ys0=Y*b68;tl3(mVGu5iiH6aa zjFn8Uns0Xem@si~eP9tW)yX_nab5rBcMg3jnaTU-AEue}3v$;99+#;c4wG<62W~JQ zCV(5WWIcChdT~V#&4xUkuLq@Dj#E}}k{R8xu;@}PagCM!NVZIPFR^+_?ZT!uy0<*Vr2MPuLq{yw1C!7tiN zyi>EgUmq)FHez{zIt1?^b}ILGq?4*o>{3tahe@!VT~$wCs+%qLk*RgB3ig^(9&jBKi7G94T(K5PK3lxls3{X z%{X-*fl&#lA)ruahIo0{qJ~iRQ3LMcPoxT6Ux=i+#nLtT^HcolbYT4w-J;FxGV56(%ZO>Y}(aU&zMJ%e*uv zHd;-`dhnXi@X_hqj&lu)jwf@7m)Li+*VB+bu=!yCVEhu)Q1h8Sl1P(ECn&XwhNb2ocw};)`^46KZm3FD)FQj7ixacgjMnCOa ziC}cw0__#`D5K6(78i<=A@iOE^0$LxX<%__^ zhai1x56G{o zDIJHfs!gw?SaZjO42K1bAn?i^AS}^Ldvr>jC^}`eqFB?1U&0`w4@d4s@g~9VpXMArcZnza z(Ur4c;nOl)Sw+4L_fJa5yn6YLid>CuxvPqHmmvpRl`1c*tKM=hIx>qn&@JhFP=Xg6 zYANK1zSSH+h)KYPi89_bpH;3PYj(#cNHCZ2$gQ_~(oGVBj|Vqp3cVT?Rk(J$iL&nx z-J<& z=bCx&B)kD8K2n(-N7a68T{Yz$d$w|+4*){zRSv>F)al(6-Y(J2(ZaQ=T{@}&U8HDg zD#AIuP?o{1>nOs)q&dO2DxT8wnFm(f<`2yFX&RKP1KFqZEhOpjVSk)}&ou^0z$E3I zfJI`0OkJ=e#R7UpAAs1u5U4;S`-7qXr8BZw^v9zB_}cI+>c9$>8{~gBfK7k-8V|QWJqezvKgGdYSfW!-}p{zuZ67J zbc;L6-Myv;cNB-*+|_-de~T_yMLdcnZvA+7f0uC#sI@m$KHv^MxC{`>#O~8cSdZ@o z>UN~oOojF>z8j1bvwz8ZcjwOC-l~XZ``7Z1&A2XzOuTAhn)dbRU?ij)O~}Ald=qsI zK5G_1!49Uu)6YFGPORV>%D%oBpY#;7# zxsxvueDVo$?bc%B&kE{O*4t}`)>tEz3blS{UAo9ip+-|9qnzk&pi<0zmmrwE0zNNe z5bk|w9)dt0-p4`Lrs*rOJfe&=UBUfcU5$<4=N?k5O9 zcSL4jO3tEN=dKJ_S!gEeS}6{T%4a^IsnB@IR1P}z{OofoK!=DQx2=bRMIbFcO&WNK zO+>J~}v?g1zQqVHl(E;DllP=2G_B=KT! zWnwCqV9^;QfP0!zIHNM#pYTB?ed=gSJ4LIbqpIw@yY@8!^#Pt!+9gCFTC4|TS?Otg zTXlh?>81p|+05!e`P+~#K97jDx4OdKHjAYfFr&)~rJYg9TT`>(9&}R0=Aeu9;X2ue zG&Ud+Juj^&bMTSO0&qGb*$bR~=zTmsIMF{nXbMQQPn2|X5pA_h)QU{-_zK7|{{%&; z(oU|=35+Of=M%!MfNk~c*@e`Tf;>Ii3QO}X+G}rJbKdf`!CRuXD6`U&tV7f}_!N0UtIM#+;`CfqDzLo>Lv zzF%Ct*~|0X=X2-C%UVqQD-%VD2v?F?@%rVg7_aqc-u&1*mMkqfRbqATwKg$PJfF}~ zoT2F;79NmNy$~>#B(Wo>)%S=tvK(oDe{=^;4?h#%dgD&MqqRK#X%fbfpPoLP=Swxz z(RSwiOMw9IdMyI6SYG4;)5m76Jawk6&Bryh3SbaPdN_#77hyQ`$r^jmb4=bfdJF5( z(w*rU{`yWN_N_aJ=be{eiH9l|frk6l6B3(3QOt z$@$P@=VA!R=Aq`Z3I31d?lgghT;Bk#ab{9pp$F}UcUQS^{ zl~U|%!b&=cdI7P_mILYOrCDKUAN}@8i`0Bn+)og~dO3?wi;)?KF7q;w>dF)zsR}f@ zZMBke|Ix|YkzTV|hPlb*2*om0%i`c~z15L2(ulK2CFlY@6(P9W^*SFe|E+3L{&$O; z(e|~;w)fd}Quy!cu+l0m%gh>St6HH-E|b#t8aNJXfgDE;5s(9C3j6z@-hbQZA-rWC zeRh&yYju*d|LYdDiZ`sNPv-HfCaxyvI>`>hB$3}@F!4PD4;X1xbNsfsHQ32J%U}QXn$syzj$V2*=q%`=n8&EKUg+COO*@Vfk9LFPPDmrlo7&>$H@H7<|di-u7xLAUVb-)-dvxEFv`C5xja#8 z;J4dXL{q*`&hd`HHEnSY3(H|%6%LorbiAx8w+ae$*=+BoEIEg)*UE#}exuA?oYUBR zZ@Ur!c7TPC2QecqJX)dBA5MRuI4qDA=;3mmwE#3gJM^{UcDoy~#+v3rjE7iwGd;y> zJ$Hm>gtRP?HNsq21}1xq)rQ%{fGV^_wXCuhDVsLG`90At(jTf#gt$kc=85F%ks6!R z(C(8hgB@t?55WAYTq+F2GaBOQ@WlmT1a2KHpU>1utAu5NL0K%}ki#}OsvmE>3M6?UOM_j}HRUbtCt z>iXz*BOuG@hJc1O^!|w$s@LxK8|5(?(KUlIFEf!qEo?zbOiRW)HK<~dRM~L#A#er! z&SQyhFQ~ed1MJ4;l=AAb zL!zZb&*}2k7iX!MhlezE;Z2ZX$n#?~00wuU&xJGLo`(NQ?VNA>ATtpLGqp?8$n#U# zEE2SfQkWg*%2dUn-?7P;f z1+u>-|F!=-^OTYPrczYTxI!Z%W*{7{gy}O-8`%Scmgej{x86LZ&?fz{y<6B4A zlD9l1MW*D#GBT5|sWHI|IVdDFhLODIAkM)S$P0dlUQYy2$U{*Fs;EzBXHhU0TyL;2yEW!!bImplXz4YECO~tcccKhYq?z;J2@oF^8H4C7mwX? zlBL(c#t?38Yl_@&MeRKdyVv&%s_rX2=H$`1PvCow~hkot7(fWF-eZv2YZB zOstaEgUyGBRR0)6ZmMqeFWjjjp3Mr#TTAt3HJsjjxC1BfYqQ@d-l@E(HDK*b$8mtb zv4-u@!PJMPc|WX9^^Ka=CVaP^xwWYrAgdFXNEO=>dts#~u?fW?y49k_x4@S+ zigO6@M1(i7jKCEzMDS4cD|J2s z$?bq4Y{F$&-q(Ndhs!aF@b~l!n%w8+IS+dLVsnA5iy3XC9ngR}KT7yuLy8nxa(G@Fb;) z-MKy}JAano@3a>%k@!g3XG{WIxsa%FefSP^+3$v`?nV5y&oke71sctxWXVm4-$*|} zC9*f{aRTAsDCu|xmAFk??W(lap5^|eLqi?IujxK6&yJjWPie^W3PdALt$1h3BJrLk z7Rq=0?71>jmeZC4k*@ubmEJ93-U_FcccA`JK8T5o?ZerV4HJ{v{d}}n>Wn?1pmoY1 z7O8^BhSpqMOH(IlaHQ*o_GlFxU3{)~C76Pe!O}aGsOrnAJ+T+)<=N1?3DZpY@OiY_ z%6jK`3GL~^uAbO7&chJPDQ8nC{{o~b z!=nVPTOhr3=cG3$QWFgj!1QE|`p z_Q*O%B+-fYb*F(64fB9}pVywz5YHOgBQ_n_g0Hrag4|(So~vcj9~z^LuC0-=PCx46 z9wzfA`n>MtrBYY$R-mT%%2wJFB@CQbjTb)wYvmi@=-&AYfh`=oZhV5dSI|bT2G223 z3=OF>_dEZ+ar5hE56C5?0s>g8Am0#;;cAN#`iG4bDWWPm{U&i1PCZ%T>h?Ui?|cpk z33Et^dxTku*i;R?*ep3acg6Y=?j4y2FXHsghvrb5hvgf}+d#A%i4c3qF@8<+R8!12 zYR(>djA^SJ~-wEp$ilV?nk1QCz99fUKk3kvV$KAswz*2iP1z za=s#+jxu7rYIxbVAGJJBV4bP{`#)M47(1?i{#L^IDa4OfY$<{MH?{sT-Zkpo0ctn} zPBTPiQ_f7(5zzc&X>M~z4JH?ocEZ&CxeKnr1SWR64 z!Qr5YkWlPg`+D`*J~eo+Av(Qq`k9+XEo&{ zvF%vk;~Z<#^BTpqE-&w(J_TTPRJ~P_3!VGmUa0gSd|+{_7m_kRhLK1mzp2_m1%)?S z1P#_Rq3QRwS$aP}Q@oEm2CD}5rlTD@$e;VZY0NQPy=n*geDgQl`^pVSS`DBP?A+CH znOyiDvZ|Q%ilkm(k+(5rQp0merr1ubRT~g8#Bb3S&?k%Bp-9NeBn!gtjF3ekBz{6t z4z#{DjHHB_y-gly_juGogZB0Id%V+9AMBW~6|5-jy7fw=`^&`wFRvTEN^K}caguQn z!4x~Y-Hu=_2!&NyIE^ppr;LxeYCKSyw9v@@mQYABEl+!^Q>&0zq$gIEzpd_7bLibL zHK6`Jw>TxvXd^7`bUr=|(zV%f4cD{rlo zmLH*=B-zgy$bFq8J(}E|@SERenPBYA zx?6%84(0fSsoQ<$^6-stk0T#U(=FbVcYzPGKo)>~Hl^PH5u^M!q;x#zAsKB#*g z+i-ScKB`h8HZIEzhic0d#lHi5Ve*w3g23bpKPsfS*6%^2R5T5>Udll&>qYs{)8h?T_QV1-Y|TBqWr4onGkZZ>D; zvi$N_{o^t|uKGubSWa4YG0a|h$^HiSFogH!>*io+El#jqMYa=0K@iXqk1PJ@YcHdf z{{V9JNvMqmt&i)>z2X;4F{i(7?<~CxunE9%A5;bMtrcj?$sz0&zfD}4sYf_;QpQZs z4u5`rTG%5o&)<`)Ah5&?u1rYAIdqV(HAHLS+UG82X#`qtzVfa))UO%ttkn5#*7ixC zshnLj>NoS_m9&tcQbwQ#N}vMrd@(4kYN<)b&;Zwf@LLPIPT0&LXb`(tl2+@hH^>)< zua0kz_p?p+)h6}vsMo92y}A7(Y)UeQ(EwlDg`go^;6B~=QDziJXg#K(lhxH4S3moh zTKnpZB=@)Xp9kiyT;7!kox3(f79tO4v0d)<+6r~UoLuV@Z%v@vyKCi|$g;}k5Fq5$ zQ!}i_dlp&Nta^ToEaJ=EF~?jVI$}(4!K`PUUmZ}DJjqEFFw3)yabwPVIUBzqzx|t@ zx`%-aS-S^tKR`m?}xI_u%-Vnc+(7jCu3rRauV~e~|N{>glOlS?sE+R_ESWYGXOH<}Bggq6;jN zslKzqzD;DT1YI3QGAzJoT5!hL>#8C{UL`JwYE>?FEb4L~vYma)rfYj6<+@UpJ7@Zj zPNvuSPQK#3@q8QkC774|>FSI1B^(#|hOQ5>LIlC|! z7e!IEQ$jIXi!9KH#dPO{Bqmp>WXg()xURN2o)M(!`_<#|B+t|->ulFllUm8;XXW)_ zChW_vHL22$3_2herB9x2V>3|gKz*{w<^H6A0H^o9jGCkTBMx7xcak=C)tSrV0!GBy zEBf)`OGgicdA}p@@Whee`<{FAq-8> z^Gx2M+5{@Mnb4b|L@*TXvsrt|DWK6qBpRK$kpB38`{Ym5A_@$aZE!a{xD`d``CB!Z zaXqD8>{Vs7-Iuy2%pXL)vA*zYl_ZINEQ5OO%fG+ve`xhe<;QOau zf-~YpTLBHk5kmy+x=H=0H)CMt;-XkxxA)@F_g5$yGV`CnzXIqzU5lHYxB~ z;F({O_BR{Wg9XK?ED^8}c&7yi^{((uH+W$=>l9^>PHT6SRzosIm-}Q-^gZzz_wE=% zk+A%Svi_RqI-SlMe==3#cU5f>f1RPVnp_X2nhvA3D{*J+hBSprfe$zPXMt<}dxB~J za1B6EHlGbhDDc)0^suOglX$G%2_P1ACaLVCf&8mFvjMm&xrR{H;HM4g84ak)Y75;@ z$97c;KS5tnC4n^aVh-d>;M2Z7CbOu`W3TG*Z7aN}!+weVC)RJFcqwmSc}7$J5ngtX z3}?)PtDNKpF_5eY0A({T<{+tfHB)550ja&OyY5lX;HK36HD~Q+L&_5^o6L8#m*-N{Yu z3&bFJ*Zf5n;|Y4;XW(OgRp9b({(?GE{X;_>MCLH`f4csUMxD1E%!Gm(P_JChtSy4y zz-5%a&7bP^^8!y9k-pg8-kLTcC57I9P9gaD6L4?9-A)RF1by|p+UM8_FpP@s-KJgD z0k7qAwHpb!uoT@zn=p+lFGq&stZUT}yc_>BQNPYTRN-&XRSLi) z`U(0t!oEF(E>a0(Xk*;2AGadJi2=5Q%$#Unj~ukL5MrbYk_#e-Fz8w;8N-J@C#3;>3ZWhN+PIA5>{*b#RNS`h?R)}J6jpcL}= zO~e0laQ^F@`Pld~LBJeVq1yEj?Z<-QP29c)hNC1IuLBixI{awTcH!i*- z>uk`)wPV2;&#a9={XlQ%*LmVS%%J9} zliQJwsMRXzD^YXU^KTTCe^-+Ce@RsS2W=F9BUmLtdMy!&IJmxsIM(I&1E??o1f@X6 zJd79wu$dF1_UNZr$y%)KC?bm&_=GmvR^AbZOQN2f5!>gx6jVKEB-ba< zD$>*P_s;F#oZSD+GyEkHC{hG8BMZPAPa!8FqW~Gn(dh%AND&~{&_{g#hB|)u5!fUp zkmxN^L>TZn|NDmi&*K08)&GtzQ6^0`cJ$^Akskkx&>sc_fsNQa!s)I|_JqhJE&TN! zwYAe4kt8f^yr~i3wXmZn6d;_yQ@m{ji>71aWTviJW0{r(TryZ>988%&kJX&m`xo8; z3kVKG2jE`@za&7^xKTr7?$w{5DO1rg^%fc)o9!lDBOoIP4xgCH%!B2w*7_VKM!1OC z_$?*WUlU1r67=Hok;DOLq!ex=*N%$5{N`S5knnh>5<;rz_N%Wgh{;(Y2+@A?ul(gs z+>rk_0Z6K^+~o$ORP>YwxzipvAxdulg?Ho+bpGaJgr@DU5zm1A@>goy|KJSzM`zT( zK}6E3X;0%Xkp)sw-5H4biTizBuwmPPE#Z`qGjebwt|u8QtU zu;um(KBT^B@L3?Xc^T{oIpTo;_x8r4(Vw8b6rEiFjVnslQ))&ZoB)aphs;Y^EI&ao z#4EBS!FWOCw0^^wh2fZ|#WaU~VoUP9isqHK3iI~iGTme#DN|F>X7DPD0x5|BU$k;I zT02HeA@^%5oG$vM8tZ&{>~~}Z%}umSsWle2@2fj(WbT3s5di7}dmLO<0JmdJC*Wi) zWQTmwI=mtO)X+e*K{V^3YV!ASItvZx7hv7I_(wO$?_WPUJlG(F`~;n&-@st`q71|j zEroNNDSjN)?P{JJKSD@aZEtMjh-79U0!l@2TG%Nqxz4ba#MaUNHqquMD6oOPwFx-A zfhpV$8s|P2#3s01bt2PWSNMKWCl~_2c$#^55EB5IBUg3GYu%;W<9a}1`Tr?I8Ipji z24L&RhqyZn`o;NE>&NZpXMr#)Bj@$#Rqs#Y`nKG1xEuCemS!ci*{>+nXltcU_i5}Fnp1soX)im_6Hb0r;OxUj@;D1bV69mvO#nhWN`gds+PL77ngotu_-u9ScF{bAVCmQD5AX+Ht*$Nw~q zMDb_shO<+55Kx)wZ`vxzuS4BTAtGxU)Cn^e-HZWWJ_=G*)-u_2mh^Z+SqkWFrO!#R zUh>hdm>pl&fIBi9Ja@;kpbZRK12Z85vI)l8mT2cx(Nj$~d9BNUFJS*birZf17)V{6 zVf>{(L_>wq@kQy^qDy=&JcplgOV{YdO9yQ5Xb;@t9tX@m^7*$o-HrO7V!V=Z?a5;Q zrjpj2q6Yo;BDVLOQnpUO8#bwNMpLgQAGJJJMdRBZ=?6E%a zfvwA!fs`$0C<@ib)S@MZ&cXnF6VwOF+I)D7jxrE5Z8_eCH+ zLweGs8v+}pz7D?#&RC%bQG_sm&;9VG)THGEFK6$Um9GO?k|zKs zEUpygz)d~f&6*rgbk{53UCgBsQg_1l2qbVcznG|hIO>z~s^bx0ay|NYTn0?0J!ocx zi;GV)f}Ny>+XbS<)H2*0bE^z(QhoUlEjz~_VZt=OB~INg%D1=t5wno*W|oDU2DUb0 zWeN^}MF9QnBkJl0`C}WJ$_C{^Wk7*7rj{)56Esvss3enT5j)J>fB5^Ximb=Wkq7+D zcr-~CfFq!fWwTfi=;<=@Z9rNVfrXuL7(|1&Hz$6At{QC=d{@8*MykVo02UM!pz|DC z(2;d`unwT?0037QngAr5HAb)lM4}fE%YP6cd~m@x>xmJB6F{%RNC4U)*9q@%a#9b( z%SFJy?;BT7U`VFm_cx|ph(Gi)p5Ou?I8b{os@H#lP_+A3SPB6r%CBgRvh9F%M5sPs{j0Mh__d58DRWRc06~|;Iqenn|>n^ z2auEZD9i`=>5snYL@F`^y29Dr32jewn5uP&5|-QA8DZabi$Ty^`yNnt7qC9P?=uD* za{pna!=GMJe|ByCpU?)8N3^JU!Zsn3KJ6Z7X2w}%eeRF}wi$=L*Aqkgi$EDm>`5b0 zfpoXJ6I(CS@s({rQX&n!NBu=f`=))7gEr0wIG|reV+4b}^rmB%BJH2+2UMLiSkv=n z#%7g=Rh~2uZ}^^?uUX(snmSQ_`yrZ}uoz$^EUKMd@~gsw_a8^D%47-QL`{+m!Ne}U zJ@dxMv#o{xbs;;V`d8I3p|%^OTTH{Sy8@eatJ0=jY2llPh=qVUX`oLCS}!!4W!QI^ z>w;tp`@SgG7I@CCC>%4esg2KF!kfl!sIoiV%t~v!vxK48la$3uejgxsm8hgcSYGWG zl<#xLsfrMkFeSBF*sM#dX_ps7Qd31Lz{J9gzCAGXsW(g3(Kp|o+fb;|7HYO{4D`*zWSV%xWc#7sbuI@IQJn72dag}YgTDA#- z4+A2fJia4(dP()U+pzLjAUy`a*(neeR!xq5UU`YpUYkCo4B+vGMR4r@ZRMcQYT~F=GF^4^nQL>Izte4iDtx< z;5@nycZiJ%k{Hh67Ei!l-F4ZBUV<5_j4hBv%n&ZyS4cOK#hN7He4~4gEfo8KOsutn z1wB{ZfM0d3YF5H9J{O>_feGpWUsKz_)HDX%juuf7?PM{T7=C`;>-Mvy*^@!OW)CvP zd4KSG4ubk17F-yh!zRJym<)(G7qFI5vyW(zr+atq|wN9!Tt_L z?Z57m8{PV6clw|5ezv|NK()=Q=$5Iiq*|Zp4Z-T^^(I-%pz2D1rVDUMDd)x!K*h)R zl3&_uruEgG{tk9u{#x;&3*iAgAXP9{Q?8SnIuN~qU_^DtH+(@NhYq`zAwxm5dch&x=1&$kx%+I)@gP3pYl*2?P94mPjE>s`Um5eGbW;|LEbch z7fxSe*(6R(y$UFV<=v0Tt6+3;4dlI-=D3;dXP@vSlBrVZoyg14M1N|+WRq&p5SsmF zCWzob73^6Uv{Zs+e0%D^Yxnjk`YPD|hxh}2d{+Bv%K8FpM}~#<{X4SBA0&0XRD$j= zJSJV^HXoUs#(E2;5qZC>UJIH;og;Jjm0SB(piP?M!7JuGM7vjU#dWIcs^40Xk*H_! zQ4kjTWLz|c?ng}`t!4@I$V^LxAk4;Fc07LUPvmYxPa0z&ZBk72;E)ab#&}AIvxw{R z?8*GFgUwISb20y~AP}gTGgPVNSt(1>Y!)~7WWho~=M`-{7(1G#njzG?(!@zA4B1j0 z5R>1(W>8qBPVggMfb$Xp7Xjbx+#!k2r*L4ZdR28Ki)jCnm8@WWq%L^h;u*D2aGOE( z@aDDZikh(D@vAlRJTcdJ_Ne8VRhS<9du@wJUhQ1RABHQ<#iF#q^oHt+Q6PL-1O)IY zTVau0cB$k`)gxsP!Ob-A@s+pW_S-gQ#EP^XH6j=M9zh?De#OmNO(W{qEx9taWscsX zV;3aX(U%0iR5yQ@@=87*{wk|#psOr|5RY|e4Z+gMN`;NX~4kwoc=kIy}aZh@% zE3gu|z>;?aBRJYv`)?6tQLK~A;Qdj?i`=HnTVuftOIu&{GZD5k22rv0thote*E z!7_9sbuUhw0;I_-SNdGzD}~BZ;Xv)q89D;A)G9-%9p~IcIcB(#!f8I1$&c9DzNK|s zUlPcGfnD}RbY1ps!X4BWtf#<(hz51qqYmXF`t;==-|%w|X&01N18D}@-$$_i_WNRx zi0>SC7@7{Li;cvY>U>UHeORv?RqzDSobE`10{-iKX4AR!Hqc-| zC2G*8yglCV;ocvvM9t@L3DhTHP+?8ntD4?r3o1`Iv@iq5Ul;7<7szSV0BOYhHtiHa zwAEZ9d_&{;-nSK_S7J1)0*peO^C*jz5dzQs7gAe}WeIvY1gDmO!{o-KlzC z1z!FKW^Akbt1B_AhB;9pI{(-z`mg2uRG$JdR>&`rUclYmcnTa(!xlQf!mEGUoKx1> z6W;nO$r%05?#TaN@29GEk_N`6om7y)j%uVbj=HnL{^l!UUNQ^6Y|#O!_USB@ zE@9On=;eI%{n7-Qbx~2fz}eE}b~!LmH3ygaf+RODN?-2laeJgn$rbH-A>tI!Ulf}>4g>bmdp8ZJj!0QdR*|7z@Pu!&DDda_ylrIPNl?a&`Z}PT8i4N@$Jb!)^QO(d+hRtbEJPPT8eCBRN zF@JO2OV{0|a=x{#8_V*eh-w2~JM%t3VCn}ehH6s^=Rnm0W)KVFagq!KxR=H8SgA=#N^>$x+iT*{oVb1etSyIjfU9)O;Y!vZk$Y^`rIdK+&h)DCrOE zU-6DAICI6J!Pf$a`_Wjjv&&!DpMS#uu7O?sL zEoRHCX+2&7XalS%R_|s0(gsL1?gq30bR|hI-_s{l12;NN7MYs8U@{)D7IM-fr*8Ys?_C+(=3%Mn}Ph;^#fvnhp z7oH`8UG>}T;0uJ5wROEO_2bg=^HmoTq!aq=17Hr6QglN%FLD{)v9qO|xHq3{s^{tb z6C|;IY>7|u9Mc?w;7rM=dC2OT=rWpSjr(Gd0NjXBmn#uhij;Xz2zXFaJ)EvPvN4CT z+E_>!*2rXM&N*#Jqng@x#9#rCHCPCAl7v=vt9-(R#k3PKDce6sgrHQnSUHy2ZF zd&_m7#n`8xmOourMuCU5LoWLkU<+C^SX<3U6)!|$%jm70)1rHwuI${65_`)R?hl}F zPu(wW5Te<#3vAFYDT_iH;C8W9nbcz>Z4YcC*mTgfI#$AHRLms@S)B&Rpa5s9L!A8V zxnxd*6gJN06t=dH@2+j<9-?+E04^?VyOzRg7t;oyT*DllrYMP@)(z3Y(Jf^IPW8o= zO5a{X^0&&7eI@?jwPC9Yx#N4!j?^OJ^}3Q5G8HAx!|#s3?XeOpE8~V%>Ry=Ql|5ot z1`}VR^7$K*uiKNSuf^R`po-hyWwO3Gu6h*?K6!)G#L^7Zt}Dhz+GMUR_h^y2WNYsz z8J^)(1c|uFVKehE12HIeW%l{6V*3&iQ$Ilw?_E@8-c6i z!;OZ$q&RX1Z1cbO7DH1h-=Cs^RratyC_kCGAw}v=IkG@xIw81_20l2N1(!YZl5apC zg1HXplpdjmn>u_%XuQ(S3s$G_JxuV~LWef*>l8h=7O)5mc%W5s@Y!B0Uh5CS5>4K!`K}DG_PX66qbJODCcC zgc3H8#JhiI?#!H-bKZH*oICe@@7yzgCS3-67|?#CzzAx&+i4TuQ}sNjT=@> z2~yEEDp1G5FNYKY)0@jDRJH2e$0mJHTh6%RM7bISZ335JK+J@f7uvF)hX}&r1rnbb0hpTarafx@aICvwnoQ*evjBr1&MA8Jd&p z6y@?x-^6@NUIqibs#hI=lT@Y@j$tRm}RiCS(|M z6Ys+{#_^Nul}-LOmcTM$lhwbhGDM81|GCKNsr7XuhbPHqd+Sp#zGNMrv3YI&n77p3 zaJd_}pu7+J-Vw2Q_r+=_P=;Q>(iU@&ia=m4(wGR|>FehO3;b0~DtRwz`-YcF$KB+U zxkw+~Gy=DR9P)uDqKKmMo9?R-YDwQ1EARbfK#!ze6olsTKrmaiJAR&SOy}t@+LbeS zaVI#}USMqD>Dv=@Tv6Pf*ahcCmxRm=qq~-ZT88myQr+Y`yDKvD&SJB_=^{PY-UOTk zLgff@70CqSexz~4lXDgY3eU+QGp(YV!3mV)+r<;MuV)_lHn&FX);W=bLmN|U_ePPI zKG{3xIa%981vhs$u9pXuUa%dD)j#*kN zKMky(B}Hd_(#=@Cm1zEGaNP9rhk^MM;U7*rPjo4K|9tWYz4CTt81&jhZ|S{8-_Kzr zo%=x4@v-&vcTNvvY;H2j?%d9I2n%1EnsMJkk6a;EI~#Rxeip~@tq)x_k$ z+;uiH;M%m|o8AtMZv@?39dPi`$1hU#S7u+E>6g<>P&eyzQYkpmSv#l+b-LvtZe+@r zw-NI8npd+c-BP-IzjbxxfQO%(`*D-J0>ylB>o=uz-fQ|VRg!dV?9{tny$`t@`)2nn z^T&V(+amQab~A5xvNC{hL(Tr837eOHwBBV;+;qEg)aYy_XF*2nTl%9{`GRd9v@_SB z8L%>r0b=0KJmw_AvAP0ho4s6d5EYU`VBy{=x}M!GT5HtcJj2XA+fm(8#TJvwU!)*2 zS{*L(l)Ue>A7B+^J+0O1iKk zQt?>uQ#vZc!H}g5=tj<@=n^;I*u7cbwS3XPLLRg4yK^e>P$g6%@F=pmg=^=kC>BXg zN2-u`R>}8?A?3N=^JS{5`WzDdJARhXVN0lK7JrmWS4mk<|B-FJoVQYsxNP;*Cq-Jr zNGh|HYgEEe;98a`F`&TrrybPd+E}9D%8|ArJ8ppTim_|Ci`Vu|KIrRAJ&R_1Y7|6HrN>)A(dK(Wpu*1xvrfbU|4IVo>KsKf3ZI} zxjB*XY>>RB+yod1v0KHd1dTJ1ss(y304zv4K{=(|1{CQT{l;WS%QO zeG?zk716z4e62`6#69C~7rdhC@ULc6&RKnuCQ> ztOcP06tGbc)cm7-1mn&=M&L z*e=Wq?Q`D$I`RwJ!|*}piJI?L@FzZZK%vrN z3{*Cer5p~(#FNMba zvV8owsAh8*%xu(SZLPa+Kb?5MN9W6Ej$B4cU3IO2dIP9KdZYwVRR#PaD4dN;|dtFmAPbUNfi=s60t1=y|7qwgayhQRjJ1mV;<;n&vAF>D!SrfzgD| zMt5UWh0glaa$u9og6dA2(@> zi5d^_4Mw{0kjDnfG!EpQN}zNm&*N9&`Tk-ff}h|z)XPj@c!fdWLe>;c=GD?Kw?^hO ztbt}4&EM-r_Q$tZmnZpeIvPeM_U@WcqI<%n^8P|W9lbCn*e3plAfC=}#3WjqxlsL- z8i$nxiHR%==#V(O;!sS@nN~R1v!AJJk!4A)vEonClTV=yjo8L|XJHMptt1OP*GMAA^MjGlFoj@|reBIT zb$4XZ8vWS1OicQ3y3&BcZoNF?RBd~ z2d@*bd7(?6{|>5CoUns4_@fJ8Vtqb|TErReYBmY!@DO z1$eZ*gGbgN7^Het;vt^CS>37OTl{y2kuBcJcL$erUg;e6)ybQxr@h(I8GUKeVlykb zewAo9PeQ+vrHMHxu%#OP3^1EuE!4U`%xX$5 zo99P_%f+rcL9eo=rHam^qE)B%_Q458LtTSLp`v5m$dr;r6bn>n#fpX0+En+H>}TeT z)GKJrGs|Xeo{f?_7Zi5n?lG6BnB$Qgy^afNl0^8!pQxuX>=f1S)dSP!gU;n29;aVD zGk&2a5l@(CK1O%Evxf1xMvHfEd7oK_^xZi>^J(#-1A!I;#RZG$)J4obS_VKjLZyk* zEnt$hxmB>oXCZfOVn_xv(TX41?ki?-WiF!25PPvTA>PJWn&IZ0NzT$VbFDrB@>U=w zTJ7oBgY;aU`128&O9$G6m6yqGx*;hJl5tnM;%==3zI`u!RzyKO=0+XSDk{$#cZa0i zj7~0It{4~vtFU6V@1LcfSiV}ns*o#w8f@Y#SDNb|-Z~sVoZi0_@42t)PgV@_Pu=s} zLv1|}43Pd!hqhUSvj+48Nc7Q!DW`sZ#`dRd{_xHAs!nZ{{d_gnI{DPA5A`<5CYvYt z=+S1oxKZE5rs|OD%2X%0)^TcGKXTo@Qj*PpnpW!uX^e^XH7GB%PpaOFSxEO&jj)zACi*0H zp3Z)iVSCEN<>uA{4YfF#<=fJ>o9EH@N7`#}tq9;mk$`^+N~sXX0#k>d2YQJ~CO`zy zOP`pY>TY{7%h@BRXKV7-DuaasA?`Y3)|puTR-s!xGQ;+n`RyHhE93h$kUkE+ys^pC z2np1-T0DNULEokU#XzyfM|7t0Lv|ymPgkaHiMyXJn&_|9Xuqy;RHKG&CNOds9u{zN zb*y(SHw&p4vT0!H+iB2WB>p{4_e8#**;$8EkAlBy=~vG4x3vk?wS*fYYfvEc6|ci7 zreJBVVC%aS6+4&G+Ze;;eUDI4FpD`FC3e@9-NItr$@hGvhup^(YK*HaT_zmO3MP#8 z{LD`-(rp-BT|{btG2m8mL{xJ@x6$Ek@cx-?HAj#i8vb~4crx{<*7EVAM%X84rRYuh z<_U|pgLE>}_W2H1wy?wdu+_OTb9*Caz0?8X_!iY`kSJ$?M>UHGP_C2!&IFlW7ESzK zxS$ZC$=7439*Zr#uF@)$b>lR@I3vf$o|&U-obL+y%_-*wpJA1Oq~>>eHo_5k-p1n^ z7moJ*dixLH&b3O|{!VISm-%XMJOwF071~~(zk-5ogNUA7Pta!Eg^m+6`?BX=o z`)^#=!Ncog7`%0iQ-)`a`ehTxe4eGH@I2D(NPHmfKEb#s4;A*FZh-NCoDz;f8$W40 z-u%uCG-ZP^ZsYp7ov!?0w@=~U!TIS?iRNN8&nLH^_(^chOJ1$QR^qx0!-MYgbnd9B z;Nffgc}uWTGLE>~k`k4U@hI%hPfcCrIw$0k<8|8koafgmLHjoPSGV}Vu@OJ?-8BIf z0*(#nG_R~Bg@(_5k9ja$*4_0<>FC($;33nsF!q_(+dRANd(zSZ`nMrp3>Ib8Fb)2T({ zyK(cVSDEkSI{Vv^X(I&WBtB+zwwcC2w5#{}ioP*OffH#=sXm1e`KRG6>n>tjlW}fL zYA#uVrcLgN$C($Z*^VO5le#OLF(SZtvr08T;@-IE z5i4$D8af22jkn*({obEDw5u1vl*+ddJ9kmdZTwED^rf^yVa1zAj`2f>982ZOZs7a% zUcI_SI;ZutRs4eZ>-46NzA16xsmqvMs{dwD=PGIyu}T3Oeg7hWIkw>Xhsc@oP7XzD zaf+czlwmNdb8LTcY(<*#EDtI5Z<}I&gNEjB(b@bTdd;x~#JJ#$NE0f0>}HxRzRseN zv^?hAzrt=lsVU1F@FEMsx$)9^n=>k`N6{M-Nim#(pIH)?qxDfUYE@=8PuuqiHEhBM zdAvn;_lcxeI>dq&Zwk&VuL%F3*}Ub&8<)j4ROw<9dNkmtd2ZlrU+pDue(Is8h%^aq zO%97V>Yu3D?Qgv~~Fm+MDpBt#DD$4c{z>3I+x~le_D@BP;dNpEL(M-r(g0|;cs!f~Y7YC2L+j&X0;f)ZBp*u*Ek5TN z(AzMaeuWrPh40)yAKq$GlHTAW_e(b7Ov(GlL2r)HwelagE5TeVr>4~t=P@DWh_~2F z!;}jrzKvdvkR=sA=M(IA<^sF6HazH=6_aNx4l&$PNb2~wtTlA}%>Y?hg zIiy(+{&r+ag2ellVsR2JpXjP=HnTPNdejt>z^u@cdi$e~WAa2ZNCD=RrC9Q$7sMwZ zHw%`_!&018T_&l5=u7(++9Q7HdWR6e~8mxk-dKq^aQ7BY+4UCs%g3{~74ny2`3JrTBG@ zX0A7;3%dU@e9>f(2YpP*3BnFkkmYpl(OO7|4+p&=X&L^|6|-}uPm(@FwsnPn3QD*? ztLhXphS-wPG zP?5BYB^NL47|EYJFf<`8)8YtoLX&`i)zxu5;c1l3$y^&ZJCD=7&TfL5;2<&~KI_-y zvnfD-tI?orz!66gx-2ZH(a9lkdNWQrXLnLlB{yjUG1>#8`^)b!Wd%K8b*<(72>Bco zujfI3sp(SFs2?Al#*D&UVNWOa$6;PIo|iw`)M+_)Z$8`GSH%p&$lJCR>)sm``^z+= z?fF~VD88jB7E)-8iyCJJMXZl@)=8LWpm42NUhNJ^Guwe@BTnsNmYREYN5>JUepQ>o zrd#=SQfiuw(GbkqLeJmWBysjODF>Ut=a=|>ix6mWYc}#$N8w61_mM{oj8}x{hXlY% zYFr)Ol2RE~hUW5)XfPS;;;>jDEyY_Dn!jmb%z~vcM+pW=sI{4^v|MdFZtZ~k77C{J z29{8iN^6GC5!cMWt&pm!qBc%zSMy4zjwv$I->rQ!?pxtgbfG;zA6{#*dru!%Opq9PSwln1Z+$w z-Z)C6X&uoDk?1-|&(GG(oG`!BHvIY2oY(R56C3Am(#vY_&6qIx9A2WrWh^C>p<;`=;M}x6W$dWoMEfpaNW`Yn28kFq5O zRah{xGMzbQl|vlCPsI>(>&;z*cf{YDnr2YfyFzqxV?UI|wJmO{)?8B9m84^4%*sc~ zSJo1BLTeQqFsow{pTma(^rzyzia9kA5A|$*Ie^XcP};LiawTp{Yybw!rAF` zpBVBmCxPHYSEMN5x6m{tj$oh4rBp9nAZMc1KZ!!RS9?at9{@ZFH3uMwah5U$?~y4Z zVSHZ{(X*Bml~R=$z)MnmRaHQ;Vr3 zps>6tcg>GvLTHfysz|=1wKxI8u2c6ALXC+IdGc|w~nI#xFQjv&jl7W?b+cgPzR-NLvv3U{q{x_YEMhE)w z2}f_tk0~M28o$HdKxUZd}ErQS3me@D|`vFeRkd;FW@VRsK>n zGxc`0gXqoOUvpm%WQtVl_vveEdvo$I@5XU!Q?@t#*EX#en9`bvaeS+eq6aZPTM#@Mp3SXDz0YimUGu5 zVZbh^t$!QoZ3C+KbKTB%jP7F}^iuczF~8}eNBqpnhUcvg|G;Gp|LN;l<~^yk*_9rt zT)7Qy50;m-_$EpwC%$ydQa{kP1L*pk*62;NkvRkrKnfDFSSa>WSC~}POl{Br^AejF_xD<+iFesTph8ub1&%pdT^=&4&~eQgL(8EDy8NpS zJ~?LLF@R)DaB=yGp#V{!00D#*#3u`E&Ci4#zI)ycHezsr%Lq+C5U&#$AYkDG?K?Op`i_fhQ;Nx(Z8o2M5eQotqMWS-i3zG@u_l5BwT%@4Qg_3#p9Jl8 zzKydm^Ge&p<11FzYGUpJH6%?-QqasM&*c|iq%_HzpN%k(DiA|I`7$ouqU#O#Iq(jhT2cZ{oW^3fFh-L|ItZei>&4S zO?N>YC;~zCoXCNUJ|=&44jm@KLc0d&kiU{Dn_NSo3ELI&;4HwE)fAL(7)Nni# zq{8vtTAXh&(k}2FxPep7qbo$Hr_l_ca`qvDg0@W5mosh=`23$pCR%>6kEw;s{q12_ zeVq$fA})4UoqMbG-@m`kUmSp>95&E&26s$4MTjW@zfe23k&+-o>4w_!|BC}>uuhvy z`y%)H5VEKSheJ?))^~x3rk!X8>yMqkJn|3t!AUxAaG+9i3_&=LBlvSRPP2jhv}1rk z^`UUl$=`G`YXh#ampA-|*tRv#cASP<)kc#4VwG7hPkyR9_@7n&_aSco-LGpu8UqSs zahX8TVhDruw#>F2lar)2+PgkGII<}Ox+FuLMdSGR2^=q(3 zba)scO+cXwHY{NuIlzvwztoyh~*QO|I15sagcfJS1(z5bbd75X+> zg6r+eErh=Kom3(Q0r(wSP^5r_dF{{M)jd7r8(e0N*`u8`hgn?>RiLe=+|MSnEywhv zG2hw9H!`izbF?-Qh5(8EZ;n>%r6qMpbj32=A1`n1Yye#@NM#cx;gvt^BP(sIq9I27 zx7yCmap)mLI}f>$nt*9HtbQ}1Iy&`e#nO(m7sM4vVBuG<3MJ*C$wAalP*xT+2aTJJ z(;@cxSZ^pFb!vl#_>i^KDFoG`@jhRuSOS%b``e)Ca($E-)2e+A{V={^uQkvaqdiCG zN890v43LE;Y?`~|+ZK-M_~cI3`#VT=z@4Sr1!L}Z+)`$hSIvxvKkohyowLJ+z6Ra6wGwlb?eAQtQi! zixqu{vtSRHFw$JxOiaSFEdI(SsJk{D&lVS+eILm&LbdUi)}|(4FC(o^!oyKK^8-rz z0kjBw^EpQJjB}>a>|i1Ko=LlF*spY_wU`%RrFILc3_P@rX@Wuqii$x~tDq0G?*&^% z_{A<5JAIwE$H@9n0dTOQ#}))*D(~gJ!#aTS;g6oWv{J8v#BE+P`Akuzh6b=BRk!Bh zEReUZ_e7R`52<+{y|&soj%}Q->+k89HYg7t>pxZGoM~Co$aq{!_!TQ%PWOp#-_7p; zq=3@_1Hb9`zfM6&lQE5!q6l2By_iSCvB9V3+l8t=Qe`ki2!(SN?;7I5b7&c3NUF#) z*q0o3fhYE^&VT-?Q<{YNyp+A7XZz`e{AWZcQYI77G_YV{x>eHm%p|7*{p{UM*o-t? z(e3{ijU>?Pf06L=*K);%G0l4cTAGhC!(~MOBmDGlYLWjm82+y<2>*9~7B(now1!cx z0bj(SlEmoL{D-=GnB!LZy;NEZ==z);nz@Fda00+>vLzh!*ZQOCd7Cy4l}h;^xl{Yw z3@d)q)e2*AnMDSMqj7{}QasR0&IjaT32cnZIBq3x?CwHLbLWvIu?GQZU2?m-OKO6k zGwkFa6%on~6muFA&liS1`?`|YMG^x=IKD?4SK7*Vo!zaJ04F^B?J&xg1PgsR>3O!s zWPP|@?Cftk>$e^0zWFCH=@0_qdEs!ET`+h;*PU1FfepDjFw-yFluRIo(nWFyV` z9xt=>9bJOF(Bqqv+wp;>Gzdiwz>*C#s?_}$Noq>VIe^!T$zB}JHz7EHEYD4<14VSu&=8?UjFm15W-d?|pl% zW=@+G{p@G+xt$a5+xKrezPFW&mDhFghu>GOL+KHR)Az=(ISx6dxzkm3Y1UBzg-u5g zQu6s=S?n-QW`W!SojslXPF;dUbz6M5@VFTcs*d@aND>R?}}f^8>^WkrPM;Vub{P z5iq&amwimcK7?+BSzW-mvy#wKcthx=>X++RHg<`}Qt`%NdYM+WEXlq92e3hw@?tM)6Grnk9%70d%w z{7tuPoPj_Lmj^&lKMr7yNP z6EBhDflJ%ooCNjCn3o@VJ9B_nkBwBN6cgz@3HJ|t8Hk|s{R_|oBV>^bl8BgF?~&wc zn95n<6`Q94X_1{fJBNzl17p~>bS-50OfSeaG^U9X9ig(dLlnP)tCO;0IRiSJmBmfx zV*1hwme7o#Ap?8-E05KgpJnT;1Ch;O^uxKjo}Y^Ty~-rM;9ZrJcw-w*qYS__tq4Wj_WJ^z=*KK3lJhk9egzEhVKhGIX+W2HB;F`U9i z)zk*UD-su0yw{5emjBYqz%T(3U>`#SKz?h4gk_Of2ya-@-=Ll3))$V7lIz{fHB(ba zS{=isFu8zJ6uCN}m!xx@n2OtkGR zvx)uAGp3mOJxV7ZQyU;m`w3&kN}n2O6ow2a3noL?lat!PS_-G=jG}l}7SBsogxp_? zUAk|m{X#JK-)R&7TUWOKfB7!l9p1A9Odu$I@S$BG$tPzNE9U#WC;&lcb@Ift_DQT4 zNr%Fv)9_-2B?qZS#MY76Ow?{BdUi9z$Hk=k(T97$P|NAWwj}XNXlWsi!#npTG5X`) z!A6lymTB%(74G{j&`W;)tVvt9|Dh?xu`OIk3@;xBx%o`+GrYCyoeEya-X8QGquExj zy&b}edp9D0-~wUGViy6v)IrXwY*=7S4nh>c$$QC9EDMaU;}XN$1?OHi7at3a@=){? z7f>$Q>Ld%>tkbW&UX5~%M3gPIppxpbM@j*=>^o3>J*x!|`m7^T{PY-hbdkT^2Zy_1EF>o8Va6PCP2%{OcL&HJP@3i`DEy{WfT(t_lcae%uls zS}rqkkMEx~yj7I%;A!6dKG8Qgn|C-aQjJ$ZHun3D^p8MLzIu$z3Fypz+t$p`#YYU! zJ+xQc|5p|Sp6SvJ#QIL3pG*uE!5g~u-ZL2^j%4*&`6^A%lN zF`?)R`UXUp)qQiXh_y8c;@Fxw_SyUdD#+)9F>IsM5q^(ar_5 z!x#f3e7-pbaFmwTz0k$>zb;Mn+KWkgwMZon&9NNvBQ*fi-aoM*=?RQ!eM<*@5EuBN zwnikn5Ek`MvTTd2wK17lZE6=^@*=+vs;pGy1zk6j3E@?sPfIGU53BR|# zN{ncImbiCqaEc4(!cu`_d-rLNx+KR3vfLM;lMdHjm=|d#i)i&dP%5%&wJZtW)32)> zl%3~~CJaAF1j9VuzjK`Y#|sty>pkVEVt|e-$0FDuU+|wZp}Yx;CDFp*PZ9 zk~*?u5{A^GmV%?4E^j}sCD~$&{Do0J%QVRC3_>O^km3Hx!9JV;qas{bSrHjLZ-ZdF zvp8Rj`N-DScYZ{pi#mwiqMhBod+|$paXO<97N*%jCk~hwh-2)E1>#!-oYN+JCT*F~ z_Eq#hoB5uKygiEbftA8r;gMJ338?0LCI4%NNqxv`r;KnD{^{m!D_ZD#RuN#qbOz8N z9(E+rI5vS>oA=P=PW}G5FmmTn2<1gVqKwxb)f$r z&sg(O3rz`6I_WLpF*yAe0Mof@u*1S*kiKG~B6=g|&9Hm!di!3Hqx8d%mA2x4Le7!@ zoDcKo&oXa-*F;|YW;4e*5-g~!+kl`EQoB`KfIg(8f)uxKF*%&m$=ZCeT_AUjQBBfc zKA)IHkjKq9ZEyRheRi<^6WQ?w6y9M!39C}SV3|l5Z#zApDC-8)sZQ$gQr;3>q|Bnw z9~8&ILHIx#F2cx%SD!7J0ygGOumN5LRxB#b!`E=HJf5i9hTf}iczknbD)9NiHz`ae zQew831t9;h0$i;I%Ezs?miKfoBA$+cIXDZYNE_lN*rsNGM(ZRX*p{o;&RT0zzumq^ z9Tt=Jum6J|Frjdc|JYtRcAt2&vWNm5`WeqP=HID*#%}PW^;wEIR}uZ3@YXi8EEB6} zDMH2oGJ&601>ntTJo4`lk1U;qbY%@Y{l(*#obD-M1tWDi!45zWW#p!f2by@ynQ*zcvP_n^)eQ`@LqBz zLVpOT9Lvna-XnQYxb%K_RyN-GBmRZ*=kYI0m=CB^y}))i0W(%JYuJ*I<$z!)GxLQb zk5rFOu;VArcyZ(om*1Zsxp5Ud@l+?P0X3D}c2vR2G#9AKc(+ zfbLALpA(D0YV+7D)f3pzBe6`L)YbJH>VqILG$}#@yUVtqNC6v!WD*q-ZTByTN}96jGm-`zvUZZ{&4 z)GVx`t=bV{58Lr&BWkxrlceH_wbg~7<0AIctGXg89uX^v1=>fyp3j&J<1I4vsc^gxe0uuGwEQ2B!_RflI1Rsp>KpANLu#?}W zjseMRQ9F6GjRXS6VMARkvVZ2tz$4HMV8BSqxkJIg)pC?)>*V{s4fUZn z{W`VBV)YPwY@>pN$_C8^aLcIk5&HPBHFI^}o=&J*?MZCwLC!&RKV)5>)QUeT24oQv zcKxrN+g`O263;_yRt$*R{rUigMO%SgGp6tE7BBsiw7uyYapPz_eG^0)0_f6*LO`=_ zl4Stw+bnHt4(#X0jMV&^9(PQPwKSX1_HvS%JVU(l(rtzBxswX-pK`<=hfC%2{eK4} z{GR|O|5fklhTsm62T(K9p$Kyl`=EAQ;I`@V_QO~H{IR!lhembklrWhr(Zk_@YBP*@ zj|t7blAlGnM)dz){T(IGw8@3gaphO9JnQj*Vk=bO%k~;w#@2f3^lB@b8&4b#dyx^6 zj1R1NA%Z_I7yjcQDXyHXk2L4s&aKGpN3#d0Q`7*{Z){xNHFpN&*`JK@*N&qbxF!~9 z`xv?*P_^>uE09Ukm%+mu>rk!culAAT;LKq7)3MjTFo)yN%xW~4Zu-@$0dcI%ebRp0 z`wP`a<=WcRi}>li+dPVwsPmFjb=$gqYf6HAYh|5+&ewX*1yz=XJ&uBge>$S`y|#4| zCN}q(h*>uy70_Fd&L4*lAL*CtKYDMO?Zk;;NSz39( z2v20SECSjggXHylRs%|xzgg-TmJN)N@y>GEgR30h(_YJP`MsT(yU-9BAK1$6TdP9O z1n)3#zK{s{ZrL=I+f5Jb)`mkBfwWn)po109klKX|NU$<&ZM4k)afegq;U_MYG5)No zh&59C_b*Scx__;JPqH$l!A$lfgaYZxI@v1@7L3siq$d-(xw;W%Hrbc;#LpJ1*z-)d*-b0 z#PuC;_#UJkL7X@+s`>>z=N+)vx@W}@b9a*9XQ{5NTZl|PId11J(2jFyOg#SRvVVyg zj>#q9?39CVa4RSWWLqAIn=Jihw#2Eg66<)MTX*XEu{*3Y&2;x(hcD7MMNhB4Ze2O)X{=wKIxTnMar5IXMuQs{x4C3<_cTxZ`m`;^Z=Dr* zZ*J8S2kLypY3p|e3A4TZBNQX5$#hPyYi6xETX=vx(JR^mM(_P&sXC1^#@$nsxpJWW zark-9S7)z4H+Lxcu`fiX zGJu+_uCh3lwN_P>wBH`!_B6sw$^%6dnHTp<0CiujuV-2Akprpd&;8|ff^c4=6(e(r zg;?dbH?C`BMWs}itnK^x=k7m~_K~H^tf<;1%Vk=GowoQ3lT)ss91`>!-j6S@aDZXK z+*%s|)-nc(c{!d+W!zgIPTWfpKz{Rq3y;pkW+hx)VHjI!6bp=eqwQkSAyR5Vxjm#N zIC~2z0|`}Pl7aC$6`W|Pu~k2GR1_RF#Xn9L5mgqKCp?k$LWXm>uDyhh=^2p}DUyE9 z(gX0Mrm=NeXwhg-_odNpCzjR^C0C@`HXq@W4esyIe@Ym1t}#UUB7&zo^#YN_CZksa zcqz|tm!|V1>EeHyd|UwsQt!&J#n6O^O3%%OBn^K;Jj^~naaFesvFEr^v7T`&;TvQ8 zyQ@O`BFso#Fx<#OdkASc1Jqu%!Tb3Yr21dFGgKs*vT3U4W2F+menC+#FE%#e5_9u) zRxdmI4*fhZae>;6>Gs`~!9Xl>_6le^h2CP|(ty23Q}39@O5B)$@0Z;iNduykw;sU;_`xfxNnR1cD?QDwqu9=;CGBdZ5AX0YuL@u$ zjB?tUs@!9jS_$x`m{SyQqRK1EEj5*br76+!LHX#)oL>`Ww*;mntWUk(kYLof3aP84 zr<3OD+%Y&)E^(r-d`||~SUjn6>7IeKWk1UA8zsQWD`TU~q<0v>7jVw|us&t4336f_ z@Iju-)qU}DUDBvL#bVM$(9SkRyGnORuC`II@KG~F`zgL6T7-}krlvs>nPpoWCBPY1 zQyzpQ7fbAtlZ3Of^rf8G>k>@bczv<+lBozmVNyLC_ zFXH=}eP+1!pEJwCu3+qe8{kCJ>56Z%Vjn0jo;w`*szdgR^S@J)U=wrW7KXW&8l((6 zYNeY;5e3l2-q4v6cU!M>aSUu(N`3)WXdhv04cN)o(*ryCTZ|NAY95x^8fi8Y!4{Ts z2jTmhPLqItwc4cjPGO=R7_ppj1*8yQZF>44lL)(zUcEqOWsuiFb4lmyft^O+BLQaAx=`PWCeTz8+ z0utK2vsz(gp=&iZq7PyO=uX0fX~C-3d%tPKFB?#k8BrA%g%Tc5TZc6n4?~r~BAeo zgJ7c_*N}#&7r6Yo0Jz<-;e4$_5WcSZ6#3<{U2i`5(F*2i_=jps80qEh86TP--yO|bn_sZM*>H6;BKiN3MhLSGxt+YkuM18u{e85NMW8ZXN+rlO0PD2`4PRHJH>CvZ29=Cl}2vgoQu zr-0SfzuW*a9ng#3B39o?xo^}^c)tfjy9j3GK@|ZRgLj}~vqQS0M3qvYSmyR^L%Qfq zVdqB>>_nwFeR^3!NSO*F#6&@riTB5HgIv}4@i9y*5yg7caxW)|`Q3hPX^k_w4oYn$ z`SE_G-z6C{Ziz?h%;FmL@6Ae#>sS-3_ZqQk-|Fu7(Zq77k-D~LUR1PGeicK9+aB9N zHE-P9t8Y=O-|6NWn0F|S{!OQ@OgYVIQg>)EUz}FtIfaYe)`_AW9sh-VL86b^6$w7D zYwi|os_=}3JImDtC5_n*RV(?;S`0^D;tDJE96feYW9!`ud0-PS(NaY;5|XK(W?oZc z@lXkS*{!=H2r03^#h+MX6Cd!Ao7>!)m2|B6c!Dl|D<(59Q_-!wT8XykvG3pT{yt`* z2zWt5yfukn3rz>*O(Ah4OgIWm4IpUd0oO)um)C4(QRh40s!Dz;E_|%HZglP=MSl9+ zr^6FzPMi7xcgofQSXJ(U$Tf4&?EVn(H3F&XEF-J{W%q|1s;qOMTHAy2V!Ed1cdzuU z`HiU0iU7CO#7LVnw;jx-odlxMc$V98nzs*)w3T9|O3iq9ZRV3TozJRDU+!lrc1IYS z$b3Ow8SrooyT%*!Iep#3QlMoOUKuQ;#Uj+G)$@>h!j#X1@6pw(^pVazlO~3{H7J0& zpYp_Jtv~xywRjTk1P@qtq`T*O^ERQl0%RWoy-i~hy@4;IR5icJLbu`uN~nlhL5 zaH4ZgEmkz@?b|mxl1>Wa?_|1=Ix{g5Mzr?IX?ms2(Dn0mb~z}U&z0x%pH_RU*FNJ? zgVk*ZeY<&*$8`3A#J5>Gm61VX|EtE+L<`Cs?KhpCV_Ht{2<<2$^RN!i4wTQpIdlo= zAmNLBWx5niNZ>{>bTZp)LW8?27XI`n&)cqLK`!U)K+!onevDH^LT*L4N$`5w&r6yY zj7V`;@0G>I4!qIHP?q2}(4V4i+zt=deQA7%q1knT?%sO@bbZ~i7J&zgjZ8QWre1c( z>d#Trr2r!N~lBB!{SgBi^My0!{$#`KH?R;k5`n?({<- z#&}>o*Yx!6CX(ct*nNKJ1oY=^pWtJs_Qwq92i_YQv|D)CZW&k365_{FQ5x@9#KFQ9K32TPOId8(J znUo-J5yz1nZp4Mg`T_3{8NrD6KWlGSlJg(QEhNlEtlMuz1le~5n`(0esq#TZ;QaxFVEnlKuRL&t&XJD_fYDAre%{Kxa4l-`D5W2dR6=7lCcUe{zmdU4| zgj+5^E*?7*&fk!hqbKL&G}aqdd+*Q;DO5eAcF7GNB`*Yfxb+OP_{M2{O6!KM?V(y+ zQ*2z{7s3tQ$#=EKHia(}{d*(U3we5*4yJ?U3pb!YlYGVB(Z@@*fzwdJO|x%^TzPWE z*65Vzw^|`$Vrv6UyqY9OEBOMHHgk?sBM$8>ypg}0zX`U5Ul9%G`}r+IRgAgyM1-{) z2BtQVL*1k#E9Z9aZu`BPwa>#q>ZcKa;8J>MFZL)kt*kd#KzlJn88iBu?iP^fT)ZJZ zPz!f*$Z8ug-nzXhU@6!xmLMK^@y3HEC+@TB?(1YDjR4nzQSXSEy)X&{Z@MW*;dXys zDJvdLC~Y9>{E_qujQoKOg8PPyl_A59YNJ#YtH7(3$P zgP3~7)zfB^JzFcM9Sa=C1lnEN`ju`syXe_!@RD-iz?}JRNW;}U}a;(sCm>=jd%~?LS+1@Zu+KK+0`7#V^WJgxDLS)|A!;ar{ zx3PLigQjhS%@RtO;y{Eno=OIdU`3a7Vs8fYD&cd*2DPf(feV#7tPp5{QTJO*Mxx4cCpkGuE4!N<{z6ve$$n!xfMB~*~`7^6P<4^XN0wF2HQw3 zo)Z~a`EtQe_vO#4y!XT14~AUp5buQ1doYtru)bzcU->4`JAL~uF(xR0&%QU!uBE!xm}a_o zF)Np4i5bJto2ioHuYzY|1|>-i)zH_u#hpU({W4c>Ds0_+tpTMNVywjr?a!bfEHsVy1L;y?91=Q|_fhEN5@X$-5x0m~YJ&=A`pHKu}d5UvC5 z0VPLT&6zmp+fKw?!}~c>Ywd1u_t|^IUUD`7+4i<+0aI3mL?JacMaW87`uy0ymur%+ z+i|Vrts3HkIdiXOOo;E^o8shJT!jWl+>|DD=FElhk&R0`n369Q8M)?;!!O1V=8b+1 zQsd&h9ARQ^OZSORaC>x9aK~`hHY#+wOcJz?h$<7OBg)2ClNBm@bdeEpsMYtW4{1m1 zSV4MBWKEJ7NH~&cOC%A8w&$n?*W=fILHizo{CTv=N0qg9(kz}1LhL29kCgq|*B5MZ zyv0OqnqH73sDWHcM452!CR4jhOz{%t|6=bwpqg6Obzu+@0Tq!dT>(L9Dotu^G!YO` z5D=muT|nt25R@ieKtO7wqm)REv_yK7UP2F{cM?hn5aK^Q_ndRrUTfWZ);|B<_aFbh z4o8NQIWi&n=KQ|zeV_Mvp7$NYdH`M)D|ZcIM!W;HwdXx&FMq~t!p|~Gh&&dZmsdzq zKKkOv1W~`%{A_02RDKty+*)YWeIJIU#zpwXM+(u3sb(jw4eDFOT#9@i8IVQM(cyej z>7>-kn>T+K{k{{=8&(dcSzd=0uMp&=V|Ty)q~ZLaKz?`)R`$e@>8Nn6jfp2(Z#k&7 zRAdNENplJiV4o_Wb2b}l{6G7!TizxsrRI} zzzt~pR`1C(L$zDr4*H^Jv`i!VtE7`G%MYtEE5V+| zI_^NKRI=IZ6n-OdX0iFOr7SK<3e0c}U=r~BMy0<9sPx0JsCY40;QFrp640q++XVE& z+1DM_mN)s(5TX0;Z0YOl7L`F4!=%Fm9(;a#^)t;)ilxgtx<>E+5lg_Y-|@twg_pMx zSBCWnB^k-^_JRZkrv?B+Y zM|)}xn_B;k{Ioi#uT>P-?*rq~IXp|8#YRNC;5=rgK4rF4J@1#!G@FbDfA}a2W!EvQ zpoe%IW%`{a0W}=9*4fkI7q;!lTtctRHl`lC@!pOhvk)9u;N?y;hC&JByiz34Q7sS= zO!iN08^RirUn^)KYZ%@GM5vX72!_2Rzxd5$)v~-*0wdVgV|Xn7eb%*!vHPU}89`O= zRFO-bZvO`bKp%Sp86(<}wSe|hKvd$% zpbL_HZ)Ka|q|)*JC2EuHKz9Sgx0jf->&CK0i5FTo!GWnB;|TG1uv+-$ljRR=Drz^6 z9d~|(>43tE7Xv}l89bDzIu54@*DmXC^40H38$X#ymGFBz-m3LAmS#RmSq323yg^q3 zhCqlf7S8+lsI1YOkXCHMP)lIDEZ$>9=bSe(J-lmO@*j51KV6Ie=gSMxBr$de3vZYe z^}B%gOLOqx@pwGmP6&VJdrCL>8PQ*9wXygIg<~DK6`}VS@B%R{_N;#C?u*=#MLCHVk3ikBfu>9J2#?V-xiUNnUVhchCqyj z)83?*ngT4;h!O_FNZyqt4;7g-=YhK+XnUX#y3v+(;8KL;9Yai)h-KSX8#YIB@HZnr z-mDgxh@I!Xu_g%3fR_muJ<@O+j8f?(ZfhK&))i&*FU8}3mQ#UNoS%FLE(GNSl?;8U z=VJKTiW38&!Z&^cF*8E3YyiEg;C>^>GU{m}K(7M-q*u)v_3mI8ZMPn;jQJMlSqNb& zYlEyJk)OW>fI*O3N3WI7c}`9(wBD=2MP+JZT{3j$g&i@~Pupk?KckF20x&m$&^b5*>#=$L^QcaE-4nO@NXH*o|`Qv+659CD03 zDpqlJyJW0WOVvEF4-ki0{uGA|W4=}Yn>g(D--^SOQmdD^03VaN?N)pGE~!vvb$Z39 z`bRfcG?b`4;Y||b5?CPIl@Won+$sdCwT|rEBD4y9oj}#-uYDKk0>I8^PAnw#q~Ger zVt=C-OQ@^CF0R1=#*csGjt-6Ox@T(m`YmPj4dsmaNnqux2{W6SoRGNWd5=5{V?~ND zfC6DBi@V;ZsudCa*8>A4oMYa||DY&z%27v^B3dxvqj58^<|@}NdEMlj_&;Kh}*2L_EZE19tgb zcyO3U;MbDUSN7?93~#Z#dw8_+C|vp|K$%O{A7$Njmbh+H}@ClvQ# zh;wBD=|5OrAZ9f(ZpZ4rH#`@7b)u>ClG>d&CqK=E@`dt80(}FhAKvo+=t|+v0vV3J zEHga2^xxTSlBBLp+{NDu7jUF2z0vm6`;EfD(np2}l({K`R>&-{mU8ti6Y__ZFPzsbD);4P7Y((8NxyrWeE{=E+!QrUc5L@5Tap8MXNohh2?Yt@{Q`Ky1g~gZyzPCB$jl9$?yp{Nw@O`Mdi-ihKh~6+TVM z{Aj=H%SgUnMU9-LWPvTgI+C7k8{urEGVLiF^RL#|OFZJ)3n;knT#qStt+sAnS7-#7 z6x!jL%Sa*oa7F&oOS`K^s)U~WlxrLe<&#~CeYe@mgyrJI=PQFL-`bi&0D==v05gY@ zEoFif_w?Xw{T%%0-MxocwgGJmJj^&fXL|Fk{OmGP0I!HA4wJik)E=Ck6Xp;+OQ{&j zrO9J*A??A_>C}jJyu}O&=oQV0KjC{FV+_d3%GrXaHahVAoa3?{p?!e~Th-TV9Z%ZK zJ$rMj{uD)gzn{j@GHB@BTs%NScd_5GM(RFs3h@(Oo)X1R)nJP*H9n||zH?0B$nnN3 z2gFeA_!x~u)xx6-A1<=o_y5iwRNRqx_b_p|{%?|n-zE;fj{j#8_5X4#o~Q+qdChG7 zq=rdGaJyc6F9UkN%^V}A2^oWDZy7Stb8 z&I7~m*Xq8?vSl;yR*m!}uvgH|8JM)p%~LELTXWPQl{5E4&oPw&87mmQ;QhaMGx=YC z4VsYXlf)DqJX?!{w4#EWhs8|W*rE2&%-2d*AiOTis612*>kl>1!k=SE&_8}|8gInI zfrCaMnTgSjJOY)tNOV}nSDaNEc3oeqe`9U7_Dfa8)XMaP7PGVJl>MjiOSc~JU6li8 zEakDzBAz34^)zvDBx=Df6l`YZ2gMC|)Be34Y)F#|P8ohwg0A##Zr1;SMjXH_DCxJ_fUp&DOZ4;MP46KmuN=b^wqcP}xgvtMH7&omXT6fICCoqVZzFwgv8+#R)h z1T~HtcEq58yzzAIYZYd_UtHloH6i^+afq2IXTcSlO(^0cXxUy^g?i3b1^ri0*^9R~ zoaCM2_$MC%f}?MjQ6+ngI>bk?vdtjZ(PzM0MnL78x7eNJA-}eA@|0>NhW0X6s$6!!l3hRHn#W9hM z06+Sqe4Ru=M0jNyn=QjXnzkUSpA6V`eD6h2(_1H~opgMhFkorr@2tZ$R`;ev%~JUPVF6 zD(aotb;x4uEBn(; zp+q0W4tA$a6(#0phRw?U-Fx&;Qu4pbi>IVi-tNXz6j`xvO>ENl@t~ zdp?Tyq6yDWP`;lnKDi68ESQNVUP6)H)p?Lx05^}FgyD+F_fL|mA~kM|wZKR+KPZ|o z2Qn~LC}tc^zMVzpgw8k}aq5JFHrLUBFS6mlpx$Ei7THR<-?Zlg6pJ8V0t^bviDhK+ zBy@{~7dQTcf(g1b1~K|U0d+*}(;?F{qdWo0#RAW-3x18#uSet8eE8$4@c<2S+T`}M z(1hs^L#^Rwm*rn@LdH8++p)n)-&s5qjQp=RQO33N84guoK?q(FP*aDlcLG$YqLnP+ z4h?7Wvvt9Vy`B&x5LyLpe^chb%Z~ar9+l;q*nup!6?=rbL!Xb#9c=%}IsLrJm*sFOVmB;i4blTWtVsUDdm-wQEWvFzF6=9;#2pOfNUVkM)J zn$4k&P9&`#6j`=->!Txp9XWTU=nr<`CK@d=PwLKSXlqosEbtN?eo%y>b{v#N0do)p zm=vV;`<(!um;dSK!f#H9-GDR#0VfJCOODKIhV2nn0nTMUKmo)MQ-D&|z)a8Kp&QW8 z`O(fUvrFqf^y;rG{?CuqCr+Sp|KVG}p_J#Bfcg`f>CmlvNZ4<-;_l7YJmPrpHz#gl zV^g*D+WgFTm2?%|=y>Uq7O8Rb`LW|prQFk%Q!j6*u&?M;0Z;GmpQ!`yFvrhvHPH)# za$=0z48MP1{+FSH#joe#|NQgt51*eeQNW6}P7N#s{L|cbnlK|ET+~sVew;SY&s2G+ z=7p{X$|K=JPfCOZ(R;h~i(wltPV)!FKA-UqilYcL?}4T*7~H2T+@9^GGIUFM~(TY;)zcC0!H~XH(T_IyMkJ6NRrY1YS7>|4E zYbP5$nZ78NY8gtP;K1>YXgAExfFhNJAvS}VmMP%D^hTX+4q<;T6C|}2cN!f8Th@midfS4hc8n~?^UBKXFSH|xiL0Hp=$p$uXNo3v|Df-T@kf+sR(IJZ!>639MO9VX5i9{4! zc<9D^)hYFyJbDyX2J?3ypNBBwLP9>;WZU~N$9g?`+Ogf9BzPf2w{D!KmyV}TK=o+i!mh(HLp#Z?DY0U+Y0zE7*+-hH;@_3m2-ql?;VzOuG z-ern!RC0S#6^m&Xem80~EoSsTDBj0H41iU|nc;{f7d^PU)%phD!U@1wP-{;BUX_Y% z#jcX6DLV6pCH^X4BYf`mKe*!h*ZaQ|hoLwXp5Z?JOPU!Yg#rE!u%NcnqoHdSu%CAG z_Uqn%T=$FEaPwPoD?7?1z%Wpy0!5|&6y0s3&O=lNYnAYc*q*?mj}^YMO)poRO*^k# zOFCVyTkB_ZilW^mHDH{*sLp2w^#&q}5G(R*z1hz?JZIGHw5!g?sIC8N{iN5W`HPrQzzjma@G1>`C^ZI#Qzgm;07{Dy6sG zE4Mn>Xck1Tr4IW=;$`c}7x64pud|8pJA=F9K<;7FzqZS6RUKmC;ENYwH7&d;$Hf!? zKEHbHan~UyF+{CS#Qx(5N!3@*A~HhL$ws&K$qx$a9~6_2 zyTo}WQfxG9VGw8V$zhps6P^$n8l*`5uEK{39ios^lSqmho6NSIcXnSp?}c|O8}%WT za-Z&zkaiNA^FJtL98Ts*rB6(t4h;8st%&-~2SQPVG1Cr?zr56Ccdl}b~loTs7^ zf|->8?g#3i3Gh4^WSh(r{>g6=XoZJ-bAHzsR9|`Bmh2?Px*GmI;Vw;iaPc)S{D}^Ulk~^{G2`p)^3 z;tg%j@kd8GO&n(7w$#HJpNvL~dqiKVD1Be$&=3d|wJB^m_FbLgj0PXwKK*RaR|N7X z|Ao|J27(1qyJhb|*c528II~lRaD#oSSM>hW$7A;WP}@k=A-{7ZrLHFEvfpLg*7&<` zp*mw0&_wjS0qBd!B9#7)5hiuu8y`=rNNP(urCC;eqMJbCy^h!+4PMb7(TP#atReTA}WYl>s zXr*!1O2u8_wcuC9SC5g@XIH@$h-TVdbyAn6N`HBQDR1{;M_H0UtabPRB+H)h2ZiFG zb%m!#q-6!pEa}ip11oBzLP!&RqMQ_T)vGtZ&TYKUKi2BTqTJ>^dcO@>Q=~8)Z8-4o z5nP&A3b_kicAGfpQkI4&#qK>Q)8X;7EZ&(>S)(sBNfLV-W3Ftz+2MyDQhovXPNPR{ zPeinuao|qBmrWPKpNYqI%4Khve;tCGS43ituN%bp3sIz=d3oBCVLb>7qP2yV&Zp&6 z#79;n#CzqOKF#>>WXk$AK1QDp5lO8Nv;?EFW)3&UR%h-eJHF0XMHtJ(=b9|T#;XU1 zPYe$~_lW=aup(79>B_tHE!ZUALP5MzwG46&hABq(*%vpdOes!j9Bp6*RuM_dP)?8y z0|NwTmGo*h&LhwMtOlKC&bW9Em&j+Fd}LO`G5#C0d9gZpq_&x4XTHbiIxueD-s2^2WF8TViPiF zJEcwwJey+IR_qg*=A-iU4FD!0&pYT>R7ZTG*pafakduO4h?tzi6j;Hyr_<*{^=1<< zy{9QW(FiXdlU)&^J7F5WO3aYKw>9&7$zB~R{PsD{U!Bk8foH)?NC1THMQbR;B*W8l z>XXm2&npkcy;iQprdyo;=ExPX%TqC9h&fGC!ZQ)t@b^4ZG|SQDhZ3~5vAHSv-^#|y zi(a`G@T*Q2Trb9DN6D6~hP4ruKoJ#AJP@1ea$I7t^lH|O(T?pLT6%PCA*w<6or#I4 zh^72nMTEHWQ}(t+hx>-tb&66Bb2|4U3uNc|4`;i`(ATTH?1~PBp5PWRooIPMpM!NV z@$CraV<>M=z?#Q7>ds?^3z26Y2DCn5G9~#5_vPZ5tB-rvg|B}3CZ63tJb$|Xw)XL0 z(T$TjoNrs~=NNd1k~1_7(BK~wR3wlkYxHMgk0xGeW?81lOEkeQxPQMW<9fNx_jA`n zJMtAMI-);l$`s@*!%94wc+Yu)bO#slk$AvH1)*Q3BVic4*`>aDye;qQhfG_Ui==#i zmTnEH%v4Lq=xtqukKoX%{r)7Y<4e37&9 zymj|LtMb$FM7!m*6>~#zy6HKK2(BTZ4ZIpIF))2yx`)}OT4YR(3qhZ6clO&e4fetp zha(QBI_fo69=`6c^&zC-T7zAkMnw$6)ha4V%lbs0*5K9>gg=g(@=J`G9aCOSw4{7L zx2fd8)jVByM(hru1?}dmH^ggFf|E()X#2)Quc_3Ug6NI)f9~G4sdmMAewV}q%`Gr7 zwcAjW{hEg%%^-eIAj&r_hAY4k%Ex-k(7im+JD6~K5X@rjItA(|+nhX?Qs>3`h zz-ZXox+tYOipCllT#oKwOncaJ%QG=oIO1WfJzNARL&ib9H5U$9hf))_wxM&V_}xt> z$#n^O;%1|nZ2#h5t-=hq2zcP53o|0wbj|Q;%k+sW-4QqW&Z-M#(9~H;v`A1YXXPxf z&O*;flMA?^ z8Lc)fgp4ITd`Z~)>Z48}ocpL-qw#gGVf<1$bH6K4D!lY$^>hS(7w&y>R>@7H;x}I5 z*FaMS568Uy!)R{l?LV}X?H}{5@{6h7MSK`^x>4_jLBX04%quVICW)$tuB4MA_|=&R_it5c=3IRA`ndz;kQq)fr+Ph4C24g|ZBOgh z8-9}l;;Yx6R~~Z^si6pHae0!P=<|bu)@fY?H>KpO)#RQ|}H5l-~_z<=)889%nzL!3m1u?@dwY2cz8XYCaAXNuSwRaZSmTj2SP_KOZJ>%fvU($+2i+#3yu z8rgSYtaiL~%Iu!$1WW^xp^vx8`}l!G@XnHD^2Vs?>_~yTKq&LR1D{RogulQ4oQqis zp6MfJz&*J4iOUBstkTB!{jTZk9(e$$K-quFKSUa!j-Y*M6bF#FC6W_O z&^3mEUd4W-q-0^3Coiq!KeQ3slc*{6y1B2IY=aN?6ypjU;; zAd=VA^MsN-y-^|#E_Z9HzfYT@uh>!@EvY8 zgQ`b1qSD;joL=*%njaQA)_-6Rvln{(V(?)T=!6vUn&4Xcjq+-BO3pE1hYcP> zsy@RwqBmM-=98kz;dMJ@1-uqHAkPzxg}s&5{k(!W+c|Gn{WRvTvs2hji|W_M?lOz; z`?t>XS$$5{Gw{XC(@ThrBgf9zPCEafxI$Wlr?;E9`z-#YFmSM+h`JSUr+hePcxP$H zr$=aQEPS#>Y;jwi@kN}1iI*jPz&0y;xBX(8!b7}!4$zrOHRXPxSo&4m`k>tLfp70=^nnmNqMUDr7%e z<0Zl3(FG%RMbBOiCz`j+Uy|8|Plah^uf2+izro+1?-?=!3ak~_vn}?_Qt316zcK&S z^v;7|DmwLM3+t&y8!H1k9lh)`?*Y>oB2^>!OnFu=5qxW)oc_|&Eft`V!$rd}HlKAW zpLZvWO10&r=Ztv*p7|U)65)^1M+H$|aE@s#<=?NHpPQK29A8pbIlt4kd9S@o#fwaf z>g9=XUUzEFIY>|YOnQc64a#0l&dmWf4ch~&{6Yd7!nmUL!Q|)JSD~Zd-kpkw7dp?< zXJ6p(rYl|%Qj3T}nANSsCjW@l1I?+t5 zb|72tb;xK0<2`eVo!fg%GJP#i@MgELz82tNKTdK-vZ8^E{8ZX2>5aqFW(S&@nn`Q3 zub#(tl-&1w5V4YboxZ8=+9UQ)0%$Wsz>xY9c_*=pz-izN?gRk6Sh69yuC}LCs)u)p z=Q^$>=QB~iNgn)GtSI5Gthd&jp|0AM-1VGyUnVH^14g2aw*bwqES@)-dq^G+9)&m$nnKG!X71>QpB(SMfLlMwI*4L5UL`hGMq$|$xJtVw#Y&gw-{1>2tU=8 zgBe>oXxi&H>xkl+GGwr&pl0r=r=_7p&lp%wHnLao& z4w3o%VV`ZE*1^~{XwVp{i)S7y5lQd{MIx`d(YQ+W~xKVpd{FW zqsC!MQxYMNYW)RnT!mMSw8jp=C+rAUZEjP#x@m~(I@}d_uCWk@cy^q7wB@vC-Z$78 zTR47pcDS4nqwy)tak%Y?{F_dO5wQ=MalMjf)w$h^{g#RufR;)pYpHNruK5r-+nMv? z%KTGAk30S1maK#l5Fs%3wo!-1e74E?`iJIp;(e)%j8FOk4K}Vqy~7U2ZIAXg^!xRE z<+72QNk{EMM>f6^z?4yD#Mh;*V?rSMnX81#$A=FO%(6~*+L~a0i53&Exb)Z1ETdC#ZB~?|Z&3!I*?rZQ^59Wh4ki0p8_O$D z>{DFF2Vxhd_Po8*!o08Q+#nva(q^ebR3^h0z-xXSzQ?}la z?jS*kwx3BlIMbZmARi0+B3tkH$`VVSBBpi=7pc>A7r#EdP+NJU{Rv>!#bsWrGb_=8 zVYCAu_mi?6@U*Sv#M3ucCdAmCw)7Ogn9$*Mujo6Q@aIEFh5|(!hvH7Rz4T`%I7tTO zgK)E7Gme~RuKq!hhUzq}s9fwjU~9tAcxIW^_U<^b+IS-?thgqYD>>dvPSlsYQ6>(B ziw|GWRy*!*$L#|I?W8M?pvqcn>=EzU-m!is#LBx{^Y|Be9ESxTCmOUiROiGW1#P6vD5N9?4=EdEMuFCr8fl+d>CyW;(=I0?aFUJ2 z&wo&Gp=`MIOoXkFRl`N1f(ds|8B;!^@&d&4wBk)sB=1LGSNfM=-Q6Pdepc0EllR}3 z>uoxo6!g)McsNbJELHTSI%tyM06Ay7ZJO;TL ztZ=enV$6Q)-gj9^PA^A(L?;()vXGH_XXKhGI%roUQh&C!zUbb5JM00`%XMAkrQrLD zxUa`|72~45E~J|0h(9{=DUJO>(f{J%QS%VB z*hC~C{YHJ47Yi(+e3Opchv9PTOq6AY4#cLHb=w>nq|xXO=n2yK%n844==tws5J_%pW4s8M&CF_4sx3*$??Dz%h=9xE zj(b=1d{kujq)>WUJk~6eIeU3zwZ7|+d$>R|aWEY!to$zi&ePM373?a@9ZtMoCs7-a zNqLw4LL$6{%!T6)^q9JY-a(xi)!+*fce5W^x3K1Wmy!LH{wY&bEyq5fE*47!1h!9k zkJ}l@EVJyU8lR|PX;Fq&)(w@_HdiNF@XwdUeT_ip61mih{DuJ{o8a&}&HSZmv&1uR z;@}4y78r#>bY>hRNX-g#VF-O<|F{KxwG z3ACgZx*JpYLhZ%#LdUn9eW2k;Zd@zyWuL9)@1*$n_;7NcnL1QUpzfrfEm>bs&k7e@KUAs^_2+#yOE7aM|OlQGG^vPEuJ{lZ*L4bVnrS5^?}Ai6+l5~u>ivH>#dkya2n zc5FDD=)BLh>&^SPPle@m_it;Y=630HeHCzK8$bTqvh9jAM#pmvi(PJ8cUKC8$Jj+2 z>9Q7R*k_q-laB7hIt@% z7ok1i2g<%jAN|fO4}+=maGOCSS?Tr4teGN^e%(Mulu6Hx_WWkS!HA--Yy3V}4?kM_ zi}XPhaFX@uYd_ysy*{ot^0I7{o8my-Ev5+p^wT9 z1dAnR=iXGp&0P;)6i^!DOqG30ru9^4HWT=YhL^8?*wxI}o7yq~en*!?=Kb}kg&UT4 zzdm4(xK}6>TX&;?L!y531QGg;&FtitUa@DmwB9t!ehuru(4=$~%1}O5Ko&tg>v;9r zNT2>d;>V3mzg!^Z7Rnofem&fu?OEj`htei=FF3QxJ&WPE3TZw4CGs1#l!6MGnc{%7{+bZhY4HIE zZv>t4lxRd(Uy9GZo9sp^?SUj}@9CMfOB|rT#_IJ*UY#zFX!1YtlA`z?!)O4u{Oa;M zWQd#BiFid>`4_Td&FkO2U7E17hu7OBPcpMSFu3};{`R|@$LjRLAYID#t7H@3`u<7K z_c=uiTuP&|{7~VpgLeN0w^{!sM2LQWg-DwG+TAABw_Oebj(xF|Bae%{TI|KgvG4#t zrX^+Z!5uKIhI4Xce&WM{LdN2p!9ZP>v5PTpV^vMRMU_gP8&3*V4pGtmBvl=CklPch z2*#B)fElHf6zZpr<6z+fU9}b0%{-$phLvA>U(9@s(l8s9=2DG%bV@y;GxZvc9ToVl zXD3!RSkdG2s2vbPd^fI3bvVV5o0$J(86C>x+~-B;SGy3A?#?Qb{wjHOsld5^%7b+7 z2z2em<`EQ(J7b2yCI)}RS?&crABZG`_?70&aYQyDoK3x8kWSIUe)ZPF?@bY>7+*&+ z(0c0V0J1CAxLl=eqb7}8`F65w{lYujLLR&EtCqJaDg^ zF6Zz)1FMPzNpTDoQ{!}_#U7EFFuX-ZJ=k14@_RcE#(D$`1T^4flHTLGTE}+an9dKE zwx%R6D3tND#B4pEjBSq6k!m9|dm2b^*iDH<-`m|hd&dE*K`IbrXzECYU?XpHpLKB`4S<*_l0umuZ*2*)XL8g4mhU_YW$ ztLMeRMQhKvvX3{)i1PIJ<-V^g3lSFxGoP|kKmQ@b;8fLg*oN?@Whb3Rr<%NH7!#oB zW-2V$kCg~*a5n3-kyfbMyl|*kwsO$5kRu!(SHiPkbe=gb_N>49all1fnVDz|3bw{> zEqmf#f04H)c#H`Gl`!*~dtNEE-67{EVcx64xw~4*DD(;$FUF1DJu>oby)Xj~oMOd0 zCT5PT$h)SvK7m?Ij85s;dsqjK9u|BswY(4S063vnSCb2{J#TpEaK#lKg^z9gR}w2} zv}$W>tCLqu+UOHS6z;8AnQPM{7x<{Vdnq<-GB?2>G_+P;aC~RTPd;56WEmZ-dRm#* zl|H4$LB?}KYSq5ZoZ#uY7ug6Ojad+(=qNV0`q7{HO|8LZsPajoPIGd_5jpQn0lyu! z)_OL_I*HZLM^~T8xb=D?pKw^=`IAqtj7~t^vlN5T#c$kxWfmxq#=jVBxSa zq^~A(yk7Xh62IQrH~iY4UqxL5Jiv6_e^9_-3nBnDMg2eb!QZoi>c(n?2!JFv&IAuX zssbuib+$UQW*@y5*8sVZ06jMEC|ur}9NTL4+6;QA1Z_V?wEaP0-kk*OJSFIl`Uz{B zCcy941Lz0B6u)`>chRrMe%EoTA$TfPc{5aAZibbB(QK!b^PMZH*(K_Mih7slJJ9&S=|wc>iY1t<@{CSoZ(L{r;OU8E<5JLWZm|<5_p2|ITu|P z=v(xODZ75~lQBC(d%;;SGR>t3qnRhQaOZ-{^8rriZipw385QK)bE}$zE5#dWgfo#I zat!AomvF67yC!0W4@;}U4a*`k0v`77(x=JeFFG1aD37VnU5o2(Xm;tAyq^L%wFYj~ z3h@SSxGuw`vg^WiFRqYhZ0D+?9>ojBdc5o8r%{n}m!qR>V=wLq)2Kk~qPGWm0Ah_P zh_6u7iF#?+?-~mKP{v1kb@j#zad8q_VLCJ|ODk}l{kmKmMe3F|wL_ogcf|8Lx931-B#zf#aofJlIHd6 zVjQ-b<2RgV)N{oavR@~?b$i;GezJHbOx|PwH@>kv;sFH1!+AnjSP+sImzr2Qc3OMG zr_HZN^Z;4r_37Tlxiz(_1XUG*xj?>ilyZFLInnhx)XUWp0Xr!UoSg$C{+9@2QIOq- zqu2+xaTWzyv9=oiGATmF1qMU$vo*@H918Id<=trW2Dz3W-Zs+X)8--Vl$JY*8 zZkv+!4WvU&PN{=qn4jI`vOeEl?5FcOohGHhI3yT$+n^6#abDW%+2Q^1Vf@^-vFAKy z;qD>%scxbZZlY$JSY2W-7FmJKZg%#+BSb@vK@k`g1*Zy)W{2yk?Tn8 zAcsLg0sF}<`o5LomfwJL28;d zRQ&5JreUG3_PW9@>z-*tRUI3)Cj_E^?b5k5umfmFm*rE@hHUO+NaTW2r)0N>Br9jq z$n@D0p3ScBAC@QE?)KVNl(d6MLb&2Q+zR?zqP$@e*5t8RQN{qdPk5Z`R3zR0YeZVE z)Lf;uT(=gFBvBs=)8s<_x(lvaq`=?H`-W+ z`yP%vuJ4l$Lv0G9t}_IrpF!Z1ORy(*9&)gjmPTsxE9TlSyf-(xl!{0Zh`4cGGVunl z?6FcQ_-H4V5bl%HW1D%OufLdj0hX)zX|glVs9Un~@r!hQC(bwD?}$DP77V8C@_xj8 zS!yFaqq?LA+JNi@VZ{d_x&#Jd`U;1)t%t0cE3CFs)#@?9aqOyT)J>Z7x+~BVp0a90 zAFP9HV>)ly;fct+yL=Uu+h#gql-;s&qTag#!$Zt)OQ%)%KB_Kw;|B#=XAA5MRA1f! zi~7xn4%|I#QMkT^4m) zVxF&2_^Hx=81Y-m+RtNR=N}4I$j84Y=oS=I@2H(ZUIKDVbM=4lH>TW{C7t_0K~`r4 z2)P#0tw3gLh~C|z`ID10Jp1 zVt^J}Lc-C_)~R3X`bo2EoOkFbG&@4vEgVPcxrTeg-wP!EBs{6TS3 zf)zT={gb^8APB!d_0Z=sL9VCJ1|EmP&hwr^Em6<(kfh@8GD0PN+gKb#oV z`2ye~U?FH@hw^!7FMTtNNCT{I?aY5T0Sp1vDu>A2Cecf+QQ`nF#s-?Wu0!`PM*rc2 zrSdmm*8jz^)m_UQVfZz)zlQdo_|)QHB^k^BUnem!PxO2NX^?Ehh{5t<%fJvd0y=n1YQ1gsh9Vq-|w~$mPH`+ z`Ws!PH?_6c=u{;TM`ZtJ;`tvi?w|46aqwtm*(ET=4+px&PNzfWo8qhv$CH)~sI(;m>X7 z*B;gjJ zc|jEI4~jJ-K!&2S;#Q=D$+~FD0AI=sYy0vW{Oz|`+&}A>YK~zfkF2@5E(e6>Kp?kl zknwLHvP6fJh#7Msw*UcVf6;9us>qH6_L#dX1MCNXZtDE|wBy&$|3f(>GRF`K5C$=U zK<+IH6#FuFGLUo&V647Ke! zJP&-Zdlhs)KjTptbPh=#fDt4m$nkb8yGQnhGl!^)7ry*UR%QR0Rb?x zC7>1bi0#u5!?*?EHL>JSnb>*{)`&KsX-KZ+{VK~U!hh%GhjXeXO7#Zk$=eKAc*HJr ztg-cAv3Z?g=Fw2|YrJZ-)v!#d*hj{bAMT%g-c8%wlzOBjQk-^Kx@(fX+l~OT%7?#3 z0Zg5-IKX>zGu+)+aB?BJnmXIT=X2MY^v?|}(|j**-OYw*>bJ{a2wHJ^daa9JP|y`f zyKe!|&u?78|GCFBZM=V2XW;KZ=CFMURQcjjL?;mP8VC78jfaTH&9=8c&1wJjV1d66 zYyoIifR29^Cqxc`k+Q)*DDYwb-eqEmP6UYIiB90xpdCeEi@Esooe=;e@VD=V#H}@V z@htW-8v<()ZVGh_y5t2=oK=3ln;kHMKu_x&F@W~f0jOq{*;%LTjLn|1ehzXO07zrQ%v_k)XC)eiMfPfL<4(BS8Q2f7slT-gGE0>8VOD{ieZS*hov zFdPPW=-2rj|3T3UT=pKwV#wFjes}d8%!;dT!)3ySmsP#65$$ATC=qlKwwU?mS5C|^S0pQ~Xva;^?ZM-vk!BNOQ~Vj0hexX^yM zEO3h9+QC!n;_&y5$yYyFf3_Y4eX*{W0L*fz*DDkbp(0H@mqznV9ocQLts56XDuQh* zry>*#``xw=$Wzc`%oK_*DYz)4!pWd5>OVX{#kQ)>9=0h$%te3o?xkxGEdKAf*Z+6S zsvaBx^=zhy>i+Of6?rJv&Y;B1xThrUd+^;ekrn>@SH4aAtGzO2q5dx;@BboF{}t~1 zeS18Z5^!w*DWCTQwLni)q+rf^>fb>-S)dmH@}`nJXDI76rx&+RxCsc0wsHf)NZ~Rq2~u;>mXVHFAhZmM>sWmz!?$P z_~@7b6q^YSEa}rx05tu!cq2@_p$!ZAOMgH7OX&?A;sY1}nWuRIQTlNJ2nX=$3;=8H zlLs=olj~4o*v3-kn&_{O`Cs47U!(c2{cN(#@>YTxK*xv{gqL{tyexnYIi{UMGeRop zot;aqGv?pCt|RgiNE zR^3a@3eJCjBW#X{veB5i-gP04Drm$d#;Iv_mR=$xk+z6*8)$GBunSv1smFWHc)5VP zLiI)k2V~CQi2hYLJ1DcFQ!=BSdUvt>V zc#+ejki^w8D@1kbV=7UoY4a_T506?~pV5+N23vf^GXyEV%3U%{PDl+B+ZSRC`d+URISY<$sbV0k`c*E*amKvcux zD|jyBwZpMlZZ!aBbnGBP2I)TGIJ$6kG9qF&SFPwJ44?u?P#^yEx)dOr3v#XsMKrL zcF77v!h^4%YtJGUklv+(5U}sz6Ovk-RJYxd8e=Bp@(tux3RJBQ9o6_WxrAR z^5Vf*?J{ii=w7q2P?&>jim8Yhek#q&KHFxm)by6MgNv`jLIXE8aJtR%#c>L!Op&D4 zZcIchq9~12i2jhhufGL8bdm-vY`rE9!nKG+(`i;(W=fzIdFq{HMJMs>%CYQooXqz_ zZ2c|fgX-H~SkOrOH2BHmFwrk8>u^19UEz$Q%|da4Epa~FgEmAOTbmL8m$&K{W6T8c zv-R>kpYQ_&XxQw1gpI|Z#Ps7g6v4uU-}_n&GakjVf4Iy}ttw)#{%8R70>gOcMW*ns z&hgPH(;)V3%djn*n4V83o1MK{l!U{y@^?K*Odk6=2(_Uo!!V}`7)IO#l8#uZ<{xp3 zbkV}?W=`5w2NfsT^=Du7X-^Qiu5kSBMAPZ-O~TxO<4;>3@{%X0$?RfHuM~`B$veHq z7PZb{nx1tE{b0=jjubTStawYq|K_EAJJ1v1&_@L2-(UX;6rZPAY)k8W*x~RN)4;XC z6`iOU^?q~AUSptEZWff*SvF~A88cwA3;Ysf8$-f(gaLmX; z@Kr*F_1J}`_})+(;6csN$32A}hTq4tMbv^m+DY=oDk$kcd^2W!Tm2N{$T`~M$7mkd zH<6i0Qn<}9B#2~(cI&#-V^TW+xnmk=DO7X!`^#`HMzCND&ker7Mt#NE0c7^b(a00@5Tv zAPUl(fPjD!5fPLU=~6>S1f;i66Qs8UDS?D|o_)@B=FIGOfAj7=bLM<)|G@=Zc|smm z?yPl}UzyVN1aGnVXs(<={KO~W$Ux3x z6GlWG|5FOf_Pw=o&(4@cO~$y`On7W;*Tv|e&79n`pYDw8U~oO_jcbLQ!D=`V!1*PG zdPIiT8^0sH#JZEU_B3;uXH)8w{SO{JS#q;eeH?u0TH{6d<;iw8TtGeSZ9Cr4FU}eL zu|=ARW2*2++HCTBmaF}X^;j4!LT!vH1!rnk3Yr;OhR$|pML<-xp%TgyqM(>D>;oZfW_h2B*TsDS~K?>4;rs5KW`@*@@Cc(nB<}R5e5+z0#`0nNv8l}73N+PB% z6uq75`CgJsq1^55=Vn+8uAAyK9{3xjm-G*m-nidWdfi@-Ean@`Y=~R!lTvnu7IJ+c zH^WKuNbPwmXXZH8&yqAE9{!I?MVw0Ly?6mC(m7K49g?5hdy-i*gyS=z zFkBzX2;xwTk#it4^YBg#3vp^KO;GEe^fhenu60_XS|Lh=rFgjvc>|E!p>4y5TN`{c zE9s?EH{;%N8ZEaSqdgu+OtMw{gdLxujsi3u&->vBXddY%P}GAgj~^SiWqKYzBmaGn z*!=nO2^0H=S2NN0I;9;9wx=#6-|MV(%p9ZNlQc441f2)^bCz*W3AR(b+^tJ}AZ*{;@lWO&ZQ&h&kB^?E<5;N|*R zZp`^Wd_WLUTXp7C=ox0q!4Ofn7K|tg$OH6oIAM2_WbzU1Yr)q1eI5yL%Pd@+pN9vzxqLqe7E(6cU<5)&74 zK2D6Qu1D~h)O^wIZ4JL{s@mq^{;Bs_O1RitbO!aT4Qb4Z^o;lkP^ih~Au_L#GJ}Qi z?m@QMgTAE+a-4g3(X!V8qWoVDnjDk5EIY;^Y_lZ0R%m%&sET71Z&U^G^*5g_UqGGWlwdcBHG~RP!$aEN?;eLD{B3L)#NK}Uv*on+KXI^7{IGw~{NY`Y- zeXJZscs=GwT^w5p+8OYx(ZzfH)ZI!{q%iqStw87~Fn|FyG1NkpCxzj4nRqNC!^yM9(pay| zb zZI@>3B}I}5ih{7L0gMiV`NY#MdQ4WjPPjhyWmdpU3s1XoUD8gray)ZZYM{|@0Ty67`K&jY6*N}XGuhq2H z9pdr3Q|DWthbj!;UOcP&hIkbG#l7gU+Ypt8Vpu`k58L!r+JUR^;W4M_2X_rlKjM?? zGVu~r zSlv{op&vt=j-}bXBe&^J_g~imf4hw{KXwMhF+8B9i?nZu*zUB0omej%a+*cf8BR1)5x~HAjuEu zCAV$edFfknm-1JKq_B6d>-fWIew;RQ&`_>K@6P@lHZ?F7E(WNx#4`iS|Z;~W54R|rJ8rdp04+B@+0~Rp~E$V`a zjvFXM%4?@8uXcdf=Z-9yeKAuDU9+MF9%jpvE#S6m9Wcg+gT=nlm3@jfgS(!(i4$UV^sjTw88CkdVR-zppy_g5z zXg1_Jdx?_kd;l-mj`2c#%$vqEh#rOrxn)f6RpVz@AO2aU|EnE$Lo)=H!LNlcL)BBCJLBrjnS8U-1p6Vr=Rwc)q&LGSoTV8)+ ze&f!PPnYahi@c<)MVV`o1|mzDtEPqhpd91^M0rfM!GvTxig<;>mlCy_Wo0u_$5Y~r`jdm z8lyW~tS+Y5>=dNiCztAri)sN5GQFn@j~4tyuI!)4X$1N&AKU_;#0M0PTe|VS@NvlR z^N#lNWpU`an^Lovpx^)a`iQOdjQ#r>-*JqW=ed#k&$sK|CEdQh#B=<9Ob21>S%vf| zl1yJqphp&a$hnG2@@Y#%d%l4%AEN3f6BoD0xwfSSj{)Ope=5e*%xN6xP@X|B5Imo6 zJ#re7^3%@wjFjoq&$7W}w@lPbE?{+(Z#?sU5`Kd%{!3GF0fZOsI9+d~nZjO(k5-v} zcx@stfmoj!xu_|6V|&2t6phkKvYzj-;jSq_9kgfC@;gGBsq9nPxt;;Ii!%fDSA6So z^Oj3Q27g>Ho~Rr8+5zeFUpyev&{&H+bw3E%;wZ%#gwOC2tSw&+?i@e{KHZ1S&P?|P z1U=!nU68iu6kvTRnO*k9Tb!4T3HxNj))*2Bs|jwgw46S3-QYQdH47I?Q3)1>=ry2U?66m!3v2&49sRTC$ZODR&kul#s| zK_zDDUBo1!FPIwK(skK33z5CH=p`URlEy*VNilkXc!2L}F!~|-KEO#;AK8+tDY+Z6 z+A~_#;lM;u-gjT(?zKUN&u}M$nA)(8#;uBAw?Pc@^8KuCcu$+q<3|E3!kUlePs=sm|Qh89Ea&VWty^h|Bf-5#zRJP^0Vw~Go%K1Y?W`e zkIJ{LazLeppRGUtmgK0)scR#B<7IE2eBMzHm+56)&a2k%L+!usF@U}*sd(wUrO*(# zA{>dw4?~_mtRd2;kITDdNPCE89!jGwSP0zgS?YQ8RsUyFniBWUCGpi+n7Z0gK2)kQO_$yT{`fh}XkItw06)8!r;x!0PCVGM9C zbpn0(LRy%^9+O-5#4gWJZ-C;|orMKN9ji>+>oW}ZB?4pokz=z5s}j;{o0K>`<7P{R zN_;%1%`7eCN%=de7IW)^l1A+}CJub+^zO~~5KZ&^4-2L!R|q40Z4xm4bE-K+y@rov zTzmV*>WfX@h?*pRk#CG&StZ;B&xX?b$r%B00|h)d6!#-m-U3kAe@Q+51X<1m9L>7t zRPtw-4L;pZ9{nM+f%Y$;-~L9g{Y3}QKP15Y<5=l`0tME1|ED|4zxRC(=`4L9I19AF z*R6+~-_F7d0mVI_-v+954NQm)a&bGcYanAG=%+E&Mw=#R|3X#I&O-6F z&J)LBUX%N?eh1kX$$T?TR1+BZH@o1$x_(pJBq08tK*^3#$AF_3_R1gJk+y)viQCNv3m4tF!8x@o! zml(x+2E`e#l6VOxx#>PQL$JSMdi6!hWxg%-?H?~d8hB_}dZ1aG!85v6UZX@NxZJFo z@0z5`o^xhf>sf3MPqzXsma(gA7k$(H`ggO5%7e9i3s|AI(!~n}1&yWdhm)SKOEw0- zHh|is`4D%Aim^o$TE)nnH)5?^o_V@Rw0Uo!AJeXei*WqIZ0QS1`nPtDau+F(_MfOaJm>;jVbGaPo4siiD>4J_^ zZV)SH&;&OCIjB-&6OaPy#Qh-pITfG)z`{s}JXe9#&RIA=K8hmlP3 z%*wcIln?IBvDMYJyQHA}%GX{+DQ&lmFI`K(>Igk-3vF`Lywr0;EK}h}{Ndz}!vpN$ zlgWD}vv(?97cY70qg3nn2O2m#TR@3}@Ff^=EYg0oULIeEK7(xz_C&)i00?0TJ{A1K znX(e2oyd1W!0s52LHA&ds_;CzU3qI_uydZHJwLp-NN~u^xPh=garw@^;rX6H4WFfr zr)4L^Lpt=uoQfmpN=d zNq#ExbX`rZ8x{_^n7GI58QGgR-@eph@B!%*{7#y5aFv5`(PR7YwbK*Tm22|)#=0|Q zWjj8U!T6(K?qvP<5B5B^_SJViH+Qc~b0HoKZ#Ig+fu0>NrhiA`jlXuVBePW-i|Vld zsguXBOum_HBJUMnX{RihKqZ_cRw4X)wo;rE@+(Cpeh$YC6y7kk(!J?C9ksq*!>z2V za7NR>a$A}YZsUhO=9~=z(&;r!RG_t`Ms0fKm!asY+Ou-r;$)3BDZYY^iH9PTC3>$u zI|5%bcK<1aZJC!L+K+R1H%RFR>+PY6ML8Fq+{oTXT-yW5s%@v&i|yalBrnhQnR(V& zxa7{3)U|YF6NTvpDo+}=sLtRGCR=Q z3_i+-t~wl&A=RzHh1#{;$T||Dl!m zfAjPItVDwiJ7DJ&mtXsvOV7X2Ecz>ujemOWKfsj!(TMF6lvQ-S&-y4E^Wzyp4rp;X z-2tM{e63%i53rv39rk1?ZGGZ55`%WjziQbW`-?w={(v9>`vdw;Wg#(mHi_jopw$0y zR@pyY+5gIS?e~8h9gP5{_s6%1kztbdWk6lj+3Rz&ELmN4(j|?}s$-Ca*83xz_92I6 z;2h{S*)`_N_q*fi?E4U)`y3(on@_5i6yTG(>j!+0E0C=$2tB~AH4U(9J*)*(6tHC0 z7>pYP|09|>OS#Gb7;<0p1Pr+g(Nw)$Dt8!Q$jx637;=vQ_|pqx<1g=SI89v>LI6$d z(`tYzYl0PE%DTD+D0eykb9SW@ z`rdDwp$&7OVz2Uc0s!p;yG?FKo;5xan+CGtC&*_kZje zKEFu@0*S*(@Kc054pkXkN9MazHPkq=a1i33!rF=P(4X4)F5{K`q4tz`k^jFKZ~RA- z$3IF_{&1FKiQ$?)ILjOgSfa)P1w<4e zNkXXQFQ&A|{{MXaA4mb9jYySb7y?QX z!!Hq*VysLmhi_ec9Kpw#d`{k z9(OWuuzg;BweQp?Cbn@p*p1Q4mz6UwWCIoHKMKnIM~{?0^Sr;0o&Vw^6av(zq0zso zxrB!i@>F2?R$HU>QnfA$piHX^otdh8EFw#9L2IzIR5H=uh54vxbnL3g-cMmI5u?+E zAGt4SJyvTEfg)}nrB^0`s6(x|kW@B6uze)>vOj&~_=T z)mnon!kxZQn8VO6EE@X;vvt|u1*=IMyn;lEAAUXwBD0>^-GB3tB++u+|0zQBJ={k- z^6QXqoqgpq<&C>>C{tCPO&$44>+*D!EX9}wQy{@87ymP{^uOzxzhm;hBqobCg4zNN z!YlSMqkhV&LhX>F-rW{;-Xn`BcG_GG#K`Nl&LUo;M=1wb#Mob@PJ6^+|pZy;cB>FF1u=Z>Ho zNprE2KNO9_Rt5Ch4ai^eyXot`*xn(U9ic;{5mr4&#t@dNP6x5GYqo+Sx4t2x>^r#y zeG;#d9|!#aOjlqPkx`XoPk~i1>yEB8-^8u{@#b@1uBx+b52Uedocl6dJEs?#=%K;GLWY0Q_suwL^f znI3&nz)~PL!)Ev2R@@IZ2fOaq&NT`m=t)7uTiOT%oRqBbmlqGvD(Fi~0Oaig(6#6+ zs25n@qXrsh+D5k_i-e#FsyG98E!ruzvYPKrg7 zcqx=wr+`dz>pi2dcdLHUG&H^yP(J$9$V5cLopedXxi=wh4dM@%3zli(B$m$gNbT<0 z_CmuWWvz18zey~hP9U4rspnS5!t{vl3FtW~3;l@)!yB2}Nezl`ryxbKuv;YE&Jcd$ zM&u+yv1A3ife!E`zkDTK?k>hK{`0Q*ZRMPgVx@J!>GhkI=%0pO{YS6;qlD;>c8$OL zy#I^B^~b$!vo{p=qnr?agaoT}bUp0D%Kp`(HIel1HQ>Dt)xJYxordrrfoKgx@F!&R z4SQnndaY9nECRb9?|E;7d~bkzPW=d9a1MyLdZUj}0OI1B7=H~SMD)laRBL5zSvXUs z3Lp^*QbVP$f+Y+b$J%pL);{Eq2*?Bd9cUyc%7qAx+UY$dqbS~3qdnb8KB>P5`NoXc zz+*__iJ?P=*Ug^RLrW0qBa@JOPZWAj8-X8wv!~<&jb9*QAtC(EV<;>{yk-R9_o-%9 z5?kCY;_-`SX8ifpL*>d~Mw}--9NBaTFD2|n=Py4A1J?{~By&KPoOvKinNLE0f&vb} zQVMlsGm5KH+2_F!*5%}1G~HHDnFsXeB3QNgmXnS&tos2vJ1S7Kyg;iEp-03-K?GgH z(%7u!?(**%>8d;rJ{J<&SpE)G;fCwK#$}_g*n~V$4)ScwMi+q&)@)wO?)Hl>)HFS2p z3D8vCC)~n59Z@-3yoLl-`iitGyzw5=;@PErr441I57yH#dYM};+OFF7f=lbDka}uv zrM4r5=%f+*o@<=TO3O%>-FsF?o&2Do3%W5Jfl>{-x^- z2hld8NV^s481uNACh(Qj87N1|Ort$cMx`UA0}$;3>SikbEV-p22{G72JG77rd08Vw<=PMbQLQyGY}UyV zGDW>ia+ASQ9+313;fP}#l{V*fCrekhBbBueZ;xzXKv37da2Q*C!Hy^QxK<#kJ>gx) zVDRiT(}n4!qp9IqZ_9C4o$N{t!E5Z58UI!4OMh4L|Cvhu-mbfoLBFI(Fy1Ttf6%whM`JV0A4!x0VY`iB; z+;6|eIzP|V-e6!Bov<`0XJjkO*xI7Ia1*tEYz%$rx#6c{1>7{g>__coUn~utAVOx# z(Vbgy>c}=!44}A?u#(JQm5A%tG$SW29JnIcM1cth2=l<;c?jJ_IV>9~`yfE^`VPkV z`2JBp6A#z~YI%4nM&EnF`ILC^hn2KI)z?qbIA54!Z(Vs|rCHh$)-O(Ts$7GE{?86W zPiLOod;tFt?-1Q=s%2;r`B-huR+`APCr{EP^7STfwS0Er8bo$4Mul|D9d5v;OZOe* zH++rtik}Y#p}^?%c%l`KM}{IyY6v*@8qxV~ZLWgmOlxFZveGXaQw&TCy`e|!#GMc( z7U-hjjmBsp043#W7u!>+92m8|W-}(2TxH3MVU3GojD?A5w;;M*YlrUo;4(C5urAO@MibLj!k0`RrT3D6uRLKuyJ=>aT&c#R3-nu?(-IdQM3^O507RWG~#Ox9~psEH;=uVMn!6%%h^18U8LwY=el)%kro zJx#Bw#(Dxljxs~T4D##2grBWoP*Gzy4h>qt@*k&Z>6j3brV{BSgS#%&@*)Ocr^qe6 zn|;Z0nDMhJCP>bYL^J#a%zPp7XTUMX7!K7jpLBQ3=K989!xjz@n@2{@GNsAl5*b}G z?U%1yZiBe@&C4$I9qrmIu)qGXZ+BN4Xe)$<#yGSQEt^GtYL}|>rU&rjOm1|E?9rH| zAx@BXxjM$>-yKS3()XscdbxW_b-wo4S$i(+0zcD^6*WPoyvaM+l_N1T4MndlO+?pu z1Xgk^2uP4B@j;$(NCLWE3TGp1UZ=+>KjG;Y{KV?`J-5inZj*#TZ~c4xul@EGv(w49 z0%ll989pCL-hkc!2DGu5Wzru%o_x`Z&VZ@eo5eHco-KDrQU3WC_Z{3BAkm83`hCRy z_gScNtK~*_n~>9c*CoKs*}ydNIi~rLvu+PrhIBPo3)%}NQ_wQM;Eoz(gL>{Tw>zhGcW=)U9`W?g+SMv2W)+d}b>HRlyFr4M2ts$W86N4zeQZQ1$59&6GbOTL8KpV@c#u))62Z zcrr4@>!^4St-L|?U`W~v#?(!|ncV*w_b|Nhvnt2;m>4`n362M5o&b-4hlJLRnF-d? z94wJ8#@CrTTg>15#xHSEBI)}{$nG#agsNwzHstAOV&UPQo6&NNozqZXb~2N*db@fa zxqW}98ZcjALS}>jed`B*Wl2$Aec@7{|kPWq#H5`#2-l$ zS{l-I^cFP<#m@L=>`4`4)@NV>Pd2{HZqHxauoeqzl!B+UQLm61a@BIjS6N90cdN<< zi|12|<2$q5`1AWxW1rGp>%L?!jx#4{6jM^EYtkbjLLR*VD+ic?>^hBr$Ox*$S~O8+ zvS~(!Fp?1dY4!S}+UyLU+||BJb#dKTP+={Xs~5AlM>otM;TXZkjErGy-VHr-1o9x=fBqo z4OMTk=vEAe+bqcMzE1qcWn1Tzeo%%3c%N`2AqU;CBbaSACK25rvj#6o;bmYAZLgZzeE% zqrIBmmZ|wGUE#hl{D|Y=Wn+!n^74^WRJdQuN*HC!0CmB%x*UQy~v zib%2w32YqGhxZRvF?bJub7ti|(MYwoRuR$8no?(QBpKS_3?8T1tIE?^wOY4>e;BSSYebA0bSX87^Yl z8={tW?B@8IoqIR!s{Q?GWyZcilmi()O}elr1#C{OszJ^E8ugeewXPK_@7bnLy zWq0zv&bDlt$*kqQhg z^R0pP`)NPM;s z$>t;67{}F_$PG{199?Ulk?i+)UmvSKy{D^mzcg7%3hzYw{uC3NF#SxAe%p#|D?_V| z0yqXV-|81|q3rOIvmT#JzzL35Jz(b>{%LmKy%KR-mf5m|%KQYC^CfU^s?NL8k#(of z*}6}dggPZ1xN`)bHeKyd<5_pR_F>suD@Z4J+mlk?>rzoj)~du)m)k>J4j%27#uMzQ z+WXIt>vRtQYseK_rg`vlUg-`LcB$h!I3{Eu0OvqRNR^*SrSGZg4iK!Z+ph17PK`M~ zHR%&N$w;o;>5GtKLY{(q>I_H;SV+lDY8T-GqAqvw9ye;EVQh(;1LfI`Bb0`G0U@AF zOoCnZMy0!fUe(}Y_!~rc43DVqr8@r;7aY4JHEEj89lGl2p55RaOCb+c;|IELvqqdV z4#G-o0^Zjt5E!A&6vbKZPP~caLI{me#nj%r?L&A6hau^rA5vY8Y32y()_uvoW{tX< zXVNt-z`xG@ow%1z1mX5urJpI<3K14R;=#PjGZz~;5ATe9?hOv+wS)z~(z&FZ^P+uW z^ZcviGjvy*4|VU6z>g3%pWrF2wwH(u&nnNs++1UGvUCI+lkQ#mMzpc|9xG@Fp!aoY z6g`^SkBo6=GK#C8{lJXKyLF=&VSqT3>w&Ls80msAH8DeNMz=(78AnOPRhtx{ss-fuX`6n$ay@bi0FR-N&6&Td2s>4ajkfTy<~K4%W#OvEo+s`|9dwfPoy zS=?@Dj_Yg?bx?BDG90IW_8>FYldQN>X6|yRP>$bXCjpj@2x6ZbuGn&Qx|pjwnD9PX z>zK8E(u*%T3rYGTGknL2yP%QNlM4&m(@6QFwPV)Bu$kGVAkV|S<%}gxf#U;I@sKeA zp{#a*n2?uA;?hpGVKYqZEl)Q4^5uNqv+a_v_co@^47SDb_K?m4~bwQ+S6B+$zY@tdw;;)l6&!@b9@rx^tFSO)5kPr!?_P-T5%m&`II{&6d(S5_d>v= zvMOCpa_xttVV6XX$>f)-vI;s6ubiOS%sxqS{{TPnv)%tXV&6vxuV<;}xNcqhStna* zUP54m`_8R;{?{peA3V(~D)#Nu3*U@Ub^VYplD$Uv{Sz8*b0Xs_4p8SO5L#mt2SWOu zJE0@rt_WUkK$NllQ0?%*=ah{ralEZrFj+VHp{CABkWj_b+KzAjCj<{s&k(}Ja2VdP z#s{|*Q5)Hcj0}v76yrLy-d-ui0-+-;ovNa+=PwiP6jfX2ZZl))Byws?3h9VCHG#NF z7z>@N8_6+XzT;65>>-h=r}@qMJ7COPz=E2QNwpXM_V`;%Z6Y%TQa|t=NWbD$H1O4R zVe8-g>|A)8B9*JO+&xcmUIWV(UTLCv_QJJpY43GIK%>8&bS*UosPudX!y+BJNw<&x@>XCvsYSIL}Ey$OD1 zc^Y~Q)Z$P#Y!G=S0V|D-D?LJYi5pgJWGT+=P9(ajXc3^=V{9$^oPj09xQ(Dz(_b|9 zLzNqsv^B6zckkl8Bt6*+aQ9N-U+L9s-aA&j9{%*rs$*YwK@^$dg%lkTKB?C6(r$DV ziGbl>ruX#_r|DW7IY?q;D^lZ{f%XoR*^;7cqwmId-*mK@b5C75#xl^*n7z%SJEXS zWhc;e*?I>Jyw!S}_vU*yBpW4;C`r2AL9+{X$)rgf4u^`lz8}{pNKx{P!7%3yz14LQ zia4ifz+A>s{<$=ZM@NxSz}a7kh0;oM7HQZxunWcd&&e-E=IQM4P(%xL^1FH5i#?3` zJ2W>#Hm?KCuRI{FeeQ32rC|io2Zp2d1}Zfe{d2~5blHAmboTkXodYqXvU%%K5rDX!fB{oXhhal=oLcv9qC5GXo?eyslDCta@- zZ;B>#?YyLNFZFyBN_`lf`t*^2%*j2pYQ@p33iwVhSgnBwi}6FzugGf1qr>I-zKE1T z%&v-*oz!R>$bInK`%YJ?;k{4cY~TvC%KB?zNrzh3(*>>utfI3Qw5A<31>AlkL3~hi# za3`StQf?L{r>cGjLnw~3y*}6(?!N058}xC#NZ_!)m1o;ARYBu?(p|;ZLIun8!HW3V zFjL5R;`0#6!OCf;<{2^am9j6xJ7QsqPv(+KdpX)rF;7B#z)aTb{6M8obgO2jOM5ou6 z48Hudcgg53)Mh(vh@KI-KV||7uaJHYu0)0IpieB1+HwyfbaB1fu9iLa&YExvfXaJ-HS}i z>x*q>1{K_)q38VHJpB=ac|M2eJhKF!VmiI zPvS(@D^}bBoQE*DYWuO&E?d3*2Fk8pNZmn6Ev1#L2A|XgGePL#>9`Xq=cZGuqp|Z^ z1M`)>0uR;v7OetQWKthoTDJ{%f{qP!RGy`l$1B;#hStM3QBHHc24ve7C9%_vUnInzym@1R^2*eD zcv3XM2V0Mx2d^vVk^0&!XX7bicqxO{Y-n9QZ+yeVD<*iJ`N$J-jnmI!Jf_p`_jJDS zvTSd^c2KXteLXdhIITZ{ATVM%>^h@Q6o2>je^@xxfX-211cO#_O9OUz?wtYi%Q*V>mV+MXM3loM;Y1^H3_ADL z@&dY`>pex50E>d0U;T0r((BRR7R*O$c_;X8NabzTw6EzR)ev-%G|z7dDBpl%db?#> zdcKR%MYHP_1D)()wUj019rUaJK3$bNyI0r?#$AXOUl44yd8v9eOgQ2f%`+{lY%ZX6 z0*A}3GJPVE+bs9n^sMK5lc_5?(S5cz?8IOe%x02iZB(3(VwsBKJUSYHx1iZ=x&Upa zQ>%evQA?siNcyHxXBb*bz$(~O?9(hQgg0b()ZYsle!0@~B-{tN=}vj@L?lA#XUi** zo72igx*IV^bOf_jX-0%nIax8B0+bzh-LW0tChYvd8(;WdkxMVsx_T6+CX>5?z}&hMPG@u=2eS4FIj6t44wfRwiir{r5`yKZ0ZYjc5O7 zz%F!w%V=%!>#Fps{u#?}3SIPV4+c7OjGGJD4H^1o&q9F-ADHD%igaXR1R8~^bY>0C zVxZRCZ~sM;V3vhh?;_6PXk-vFq|bgE3J_xrqEJdW70>mPjVJ&k9i?bEf6{SQkAcWS zD}ia**7LS@A`-`Zlvf02b-T{c=K)o4?t<u;r2Je2w8Zw1PKr)c4Z9xY){or z!P_2a0Z2c$TQ72(novJ>^0>fB)wQpULLpt4Qz2pjWv*0EY3QE5-rg&WJ<5MSI+3=I zjQdpccHea8H$anq!mUjCWQ8+vbP^Z83hoFF75)goJOuGkWRf-^AcXaZulCrYp0K6p z#`x|*%&|z~^Ier;v3c|c2f^nDDU8qvWKPN5r;}?xrLdU$@MG>=V#Lc71kh2t(pTb#f#I@>=s2x4VkkPh; zT)5Dc;Mkb$?mjFGztkylu>v4I&7OF@Tpjh$-MC#M%O&?g*ml*|zH`;k{w0ojAdz); zxPbn!G#o-hipI^x2=G>o)nEOj_Gu+0K_rUub$VcUJ5ITf#w`VylIl^ek{&E}qT#Iu zx?f3de2R)@G>6>tQ)X29XRx#I#62cb7Y=;f72B9qXfZWqQv+l=tq_5lG^oPW{B|*Aa8zLv>LGoWaw}UG8U{>$E79x<8)3%7c2_6Q@7~X#K{f~(LQYW!f6?%$ zdGaCD%Si!wy89IvQ2dbi=KD5HwUwUUon1037Rx6ApR0}*43$5XbSuY1>n+{WOO}0D zE1ZV+>=VSuoHR*ns|Ce)M_N8ed5dS&ek&;6<3}0SCZYoS9;`LJi_Vb)Gp|56h6Y_S{7*rYzvr@lbuRml*VDEjZjd;DWD=i= zp@>3QhvZ#e-Je#0*fa@*+P8%fTo1_Rz)6k3lH3e~jd8FxFbf=H2vtm7lIyR2w{Tkt zyv22BHulow<2Pj)YvU^CI3Wa&9_ z?k$zJv60$COvorA(V5-kH1|_BO%t)3^k$x49VkE-NuY?4ty`xlYNcdwv@f%wO*Kup zF4;casWy$rc=L+u0iG(l&y-r6VbB7B5XKUVLMCtxLHc7-kuyO|FVmgM>8}~DKXwZQ zz*UhHHcXS^7zP`{G~$PfJghx8p!Z>_qV)VOb_u>jE)y^Dt3OXRrErN>#0T9bmF8*; zPTm!?;n>viPS96oge?a(nq$I`a6O~T0G{GNLgxrmjF1n>gtbdYQUwVD??PZ#ng&~D ziX%?WA#1^Fw&Xc*f&eY)?Qi2hOsrh5r6Uhn(&zXWy5Sa*7pYi`QOj3e=d~i3P6giO{P{&CPts{*xXb#i&B-Mj zc}US1MfW}2SU>2;6z#_TBGD(@0nREQ5 z^mssG1^AOk5gG&(Ybq7Y28Mc80C$6;Mg*C3_U*++L2JMvZ^tGNRM3jcp*G_V2UT~y_wDVX? z5r6uuaX0lGwFh|`!g*i>M>b=9&62jO$6WTZUIgDt_5f^sp1x2m1X8zh_l9peQlX6@ zM>#;-Mh`T9u7#AMR_l2Zp;jqmU1rP^if zLXlePsrLhppB*+6CK}+x!W(7bwl)mymiB?+Sq|^gH+ww*aT*J@UDG4b&68iz$#(T5 z6qz1Yr1)?N4{r8PVU$VSc_XE>LhZDT+wYya9Y3kW4P--gTwyY$N%;$`D>mf z|3u7-Udry)P`&yC(S*VWZXYLf_BYVyE$lo$eHI++n`MFCH+Y_{7;yPfMInmO^|Zg# z_wZ}c>Q9b_PQ-y6Ob*8ehD|Oit+xUAFUo>P53V$~RLV5#=+W|nMDfsizr}i{{ zDn4Z>NP?bvgsiHLZ{)sHHOt+|x?0P7jAPgRobKdR046F5!d*Qyo2ck|sDp>+X(THe z6(z`U3%pIhSL~&eQo9zadWh)A*-9X5iw?OLXb`)8zafRjeD#j|h3TVyktQE1&UN># z8co=XpqOpxC{!uB1sZ+9!V^$o%$tQEhkRi>*J!E4dk5U)vdnFUqxcYUgc!uX1r$40 zwO9I6AQrvwR$z)DE@kM*=qMQEwZ6`kJPo$J3j?FDy7QRkbuFSYPIfKu5fW)hSP`M8 zlGlH-5g;~!T&=T{={T-7&?R9!8?J7w^H8AyJn{4wO;ycRVySoZBj$F}wwzcZ6;X_MjgWVepS^C9Cf#zww_ zq*-{`q)`JvSITjoT}ftJzU{zHmObU7_&H10XJQ%sf??wsQ5iq59l}C6kEyLp5mI%s zJrIN@nKy%XhmTZkQRU!HWGrAm;n^P1Uomkln6LF|9C{z@l!l7_32ix$A}X`>1}ANS zS&+`2kzl6!HlkSU&Lm&K&)RR-5abuZ_(Y$?HnVUTb;c}Pp*}^Qq(kVlCFb?JM{MJT z`Ol)ZSe_-!pn_A11EpL0#tm=`tv}g&ar1bqAI)S_j2PBC7~ce(O#JA;&qKw&g-XSe z#X04bQSJ#$@D?G^jofFtnM@9k_fbj2Ws(Eg2;sz6Z!j;Vj0;J+cu?dE%Uqz{xmxPk z)JHNinM)*z<+rLHTO+HtmAPhLAF-+Kf)x99^Fd3#eid6@AK9g6f1~rL;*7>{C!sT} z0!;6M?`%E1jLMlHlH(y0g6auB#Caf#Re$8(d`Y6v+_N~ZswP4?HsD34h)jXKpD?|) z3X7JV(ZCHbKSk##6=6bfYWoRb^HE!T26g1a$mjO%qhrozZg;$&OTg5LoJ}cxIcJtn z?E_b$BOyvB20R~nGLcrtyls}b+H%X$vscoZ?_cqLf5MtSj=6Js?ebDft<>UM=}oyH z#;s?k0T&I;muLGog;h)w5Z?xc)B4nn0J3ZMKd*ECIobMe0_(rX1OI1;wjc?@e&;l_ z4O$@+a6npQu2xCxB^9S#3APulD?LjCA9l@DS36Wo>!8uIjb|9x%z-S%ajU760xKD;(s z>s_Y1>+_L)i0Ux(zC<6rtxf?&gp`GbD=Y&6r&k?(qoyuZN{k#V{FDy^V-1p>W5Dc^F z`9;HC&*MISobY<)a{oi3@r%No#{83wA|-_5^wrxKMg7-1==6HMd2~dGa6iVWn5{*2 z+y=Hhb7}CQ&GlYIYv*smzRAj|bbfWL3NK$s$X=Y=5V4~;lH$3d<-i0b@3<&NR{3RN)-eY1XM~;q=|qa5PGDG2%&d~f{64cpdg?iO-iJ9klsXk3nlbk z5^8`Df6IOLJ$LVK?{juJ`}f>^@ALgZS@TI&nRBi=<~zna-l5^Eg|(8x;2{Io9Eh7N zhBJ0|w(*^dRmWpJZ%vf@KT@%<3W(L2@3_EsBoSiHc1!s?>ra-q`YLNuYo(SCj#YZ_ zg!I7x{$il~0kit3&CvcdY4hQzw6MQ~w=vz*&vE+6$_}5PPgW>ieps%J6w@skyE$p9 zqFEdCXlQ%haBF+Z+VD!U6f0CkNAW80rMpce4G>&uj;VA9l4Jd({sZc$MT6ggZl|?| z>Mh^$d!`vns@5=xl_rXpJl{YfFD9O(uy6Fz8x7T|d^UQPtaMP3lWp40S5a4*VEx)k zj+Ir77_4n5Vu4OSI3lEOCx)&kAy-b^4@|F3uM1|x{B%qEA8UVv?)*R*PV#oS;HE?7u#IV)X@L-*`@(BKtLOwTfv@}d2`)*J zp$~p#+5Zdk6wMxEhZY<&F%WfAM;P(C882oR(J^uuFD`+i-r{|Jj)Kt7>yyygqgH9f zzX_0!Tk-sWzf3DKjV0OylbxMZfxmXRv)lJ<(ZB2Qm-PMv;wbxyPuXRbQ-CK@;h#y7 z{5?JL&vD#8g#~pS;F_k^H-iw*B%v>+MMB^E?U6mnzRTtLoKj&r!s;c|z76rTXFPyo z+DmJ`REbAv&iB2DyK=DljUmUkDxwPObb1x>tvTKbhNFag^wKt^a#SCQshwmj@&bu%yRzIOr$5>`_u9hev{iajGbJ;^N8|?a$y!*)8FdFoo5ey_krX_e1Eku1W$e@Tur>fV{s!** zUp~#h`B%fukT!N${CblbPI@*)A9H64L|=Xr)yCq^iX6V;IK<%_ zJxmcA5zvn)=?j*J7>KkDrZTtbcgwdSCyMwZqV!Chm$~Iai4hk~l1J3k)y@_T3oU%* z7_reW0eX-adqD3DZyAQUBgM|~W*1FTwijyZX7Tr+m&-BYv(E9+H@v2DWb!vPBy>wh z%Qo!K0Ifq9qO@|b(s42;qV~Dbpc5=F{OT? zqUFnec+m-)lMR-I*)tsG@EzLD&(G_+zRb>!T+1(bs#6?maFr_ol} zbh9^1Fyr&T?6vyiG$SF6lD+uRPYp9Y`f}b>lnVBs8Z1}eyh2)fl_Q_}I~h+gGFnoM zq61$en@DoY@HdO`gKyeyNC~MVP ze-ir#a1%Omh7PwfmoVxloLktPdw#jwgs(R%O`Bdv$`($nU^|;G1g+>@1G~X*UR~rh&3=C zzyArkz>5Ra)X0*eH|r4DlbeHh#nY7Oprxn-=DhvAOSV&)X$L2^CZrwF!AuCY21ffC z`kL{$nR`Zqp5S#+=yK?p6AQ?BM4kGe@b>P5MNQf6j`<4#!GIrLLjIzElGaFoz%w8l zrmlKA$Bw;2wdo9>x&DnCvZ*RF);dFhgBIcX=2Jsnn3wxHxGX%n<2RsME%m+Ne!;@P z`C72GQ^lGbp;eKF%I&^esgr&*}l)rsfDu1rpxO))q@Vrn^=*~q=@mcEXv-u-xGRcL; za^zN_|2!=0jtKIFyGR2Urf}D+!;_vfIT8h~L)2eleRM}^SvIih0LXh1Y}~q-jq`2R z!1QQ^jXfGY&{adCo{nl;lDJe6U*dDQC8y`&#itQq5A_$k>bu1;6mPa}yWPMnf3A=RFbuP650$#$`HjAjMQqk(w3yW|jbB?nJ0u>hZNr-IH!-J-4 z(5>=ch+Yy}L+S&9$2e7Y)iN{0m!W{i>F-k)`khenUy(;}k$~laM-#+wsaT4ZbQ(PU zoT*1gb4}}sZO z^7M!2U|TxQxUqutjINOskiB?-*lmvfZ9_w5M$yKx_MIbnfZQHjd-?=1AdEo}h;x2| zt^rKZ-?Rv?-w~`K=(7F(>HpnJ|Bih^*N?w(s*3YnkT1pF>6-%whlEP1BTBmqJ!vZ= z<`mV~{A-0aFOkSZdCxlD-benGNs$ug`&rmHZ+8VRf}SKIgu(!_28IuEY_9U#2AKB1 zgN@@y2itztKw78g;WvO<3%L%w4kW#z4KQW9))pgo2U+w zR?iR}W4RwC9CrpX_a#8)o(GI0_8-&%UwL^0D0=^EZ39<;&*+f97Q2TC{8!|c z)gpLN&oOj?V1tH6d-&x6v(fSppoM4X{b7Pe{{$s6AezU|070MC1TV->(0R+Bprv4c zs1n#TX&2dnZ&}A~|Gn4B+$bUF0U_~s{$_F$yE%A~=t&wvDD>Bh!w>n7SK+r8XFM=v z@b`dqH-h(Q@;hqfb%7PP_!Mxg4+#BQggXHJBJ#g{(1!es=>K>u^8>FV+wOEs1>`y8 zgwG6MIedHf6ZD6d^v^F29dXk>m_P{O5#QyJT${&_|4O(2m200Ag~`{7Ey1FXLq-;+ z(}n&@UxEMP;xN4dl`(64KH%fNep2UKx}^2nfyw;Ks|&B!2%c;Y(P2uABo*2LCg_b8zY_tQw9}ke+Sn17htY_;5)X;22$lRfY+8vuR zYMQUf1O@qbZ2=kDy2S@fUBC&|o13=L2fGmAI@Z%GgnqMgSey8HIdBs}IVamBYos<+ zzq4rRb_)$8L5^(uBIAMdZ-?$z?_Kj(gERgb-D@}Xd;k8Pc>Kp+NB%y%e>%MXZ@!7k z02nx4Ktvl!xAuh}nO(%_2Nie)9zp56;zkdx4K|DXHZn`DIK~Ut=Ws}1!uwozAe4=E z>5+7Vfiwo39af+@fE|Mwb;zkRf5N3!mlZe{n=rb3pVfWJ}PAh!W}aG2m{e0up0C1kQ1H*J1`Ci72b(gr1fvacm!g4x^||5*0_ z-&2=^Xc;^nL{QJ!68Qx*=q^Lpnuh_wGcC5iL7px6;{#+auI{#$c!Q}JvWHg`t5(m0ER4Fh6If`zL8 z_LJwoLSz3(`|lI*znNHn??nB50{-(gApY?QSkOqfdgQYmcbI6j1xV94vL*x*-X-pc zzwicWF%-}4-@fNhR`@`WXeB*(G))Q%k8a>ull}=}tb6nvf1{wu^68c0fsyRULi2aW zIh!1*gV(#a7C4WQYFOJ2Fd0tx(XfN0apWUTNky2+#H#0*N5zwm2(*bJMH?+y_o57? zFv%@qwncejM3)h62UsvgDhVlt`LS4UZSOHjbtv0FCaV@%Jw@FoUnM(EP}5PRbRtm$&8eKKc%7SBCmj(hbeHi6 z)r|DcKpU^Syq75LDv6_YzJA$Y`PR5OOB%z%$_|AhR~{zi5Mo?4>dsb}AMAAF?NHGJ zaIR1e1_>S6-!N=+KvJ8^)oHkbU&0?e)OBR3e?=V-wLl>DxA!FeatARJcdRUnj%vS= z@|NKzs20dFd#Rp8xQI6NdxmiU4$2#uJM!;5^@=0p`G1L%i-m2P|aDE)>Qz->$Chz^d;(PQ7~MOqcY`yLM>;cnKr;(4nItXUa> zFQ`S0w}C^V^X91+W!&?c`{N7`zZYZ$#Rqdxm(N3J{NVF4=wL+2^mKdU7cKXKXU%dC zyx~^14O+$16%+3&tk@GY*=2L(g56NO(CY!i@{(cLO4FQ{R5_dHE28{WQ?BR_V=;zy zCxrY{$$*}U0LJ01eHd+Dz?wP2oivq$o}FU40NObA!5uY@GCI;bI{Nezl*3#zA>` zJaLdQ?)8ko*iLy$ep9ybgwf!j>L9W3ER*x6yh_ zV?#)Lhuzyoy{3~xnR{z{r)NDnxZ~MW38T@Qh%NTXGfUME#%Mc~eyq2@D-p}6M!Vo; zkKMx>8wIKJP3n%fib|UULK-y# zqx4^SbNT)dSihU_=^2lDlDes{a^l(c^Gr43jH#?C7TtH%&U-Ganzu6K_bvT_#4}R9 zqcsF?%6{I{CC5a(H=_4swX7VifnAw5VH<1W6liUr99w1@^C3i&&#djq(mi*$$FdaK z(Y@+q$R!1ees4e&YnCP5ilA;;=#*tW`)Gr`S&_XzJ~`QQM=Xo7?ma%)4BP2F~bq}M(~mmAy`OxM|NUbV=ggV+Z@e#`#bvag@DM6?TDnYx1-zXEs^Z1M6Bgx z-MwNSR`806a<#|G(_6QI(BnC;(k6Xau}13D9?ICuv7;INWLRX$9VTQQ)SWz|;Pb$W zk32T+`z_uGY&u1qbgmtkw$Wx1Ogs5?v~1_xGcF4gqUF1S#*$5amlF)~@JjZb2`ZYW za;K*yK8RW2`~m!o$? zDBCvm>7Bxeu8Ix>ACINKv;92Sz>k9(Vy@r@$4trqtp?*x``5$E2>x3GYBY@j3AU)~m}^gcmR{b`u3lal>KGOO>FPT{%Dd_ji$_0Ne}WoRvb?0jMhSor(5bPB zvEgbmv^_Lyn6JK4nkjMAV$b7vfjT(DFiqOL-itKW5a}~8QR^e-1Guv$ku|6po022P zQ%K{K>zT+{W9&g+P{R!zw8N)(aKEQ^ToO`B(YblxAhe^A>~*mth0dgnHR0U1YcB)0 zO=7ETsaFo)-rn{(8qOr2q|!5CrhGy7HsjcX7_McrVe194O zs>rvcFy5faTdf?e^m$%#4o(}W=3uKj9WQfu`(8Da+@&yD1ZSDcB1?06<(bh0)!evJ zZ(Wka2PLWvqdE`c&{_J^Rv^GZYvO8_gXJ+8bc8%l4?6LqQxYw=%i0h($#B88Vsa8$ z4!fY-0dgCjjGFmcR?7{m_4tz$!*|M#x(lM~Vmls$y1skE4G=E@<>9QdhQ?tLi?F>- zx@Rt{m6;k*2#IdNu^Fw2cHZNQ;!my%sd9&*u+gnM)Hu5J?moSm>Uixs%EJ?n_vX&I zW~$*wpP3G^UHomc%#&qwA7fPex*)9bm+fKn5Gybrsn1L zlR+iX&^wvez6OcY@kRUu5m6Ne3Ufs^BsTU+9~bSY9PNnkS&tqb->f`7G(yVV0W*8$ zH_z}vsLLNk6J}R4&^ZC7!ZYi~B)`Y~F+mx|PQ501@?Tb_c4ZZ8W`PB9H8?2C#%KpJGAME_D7m?8*^n6g*rKfna zmHA#TPS%nB{KX$mH_VnWLknENSbi$`8I*p-SoXm4@}5Xh)z4JK%vY<)JRTK^v#OcB zav`w?l+3|FLGv`5BXbn~zU^E*wV2*T@w3bp+Vam#I_;u-XG3b7HB;}pSgj@erh*dq z?8|UVQmGjGjwz^pKJ_t{xjOGjlY1SW8`)hlAg%#!9s0aXy&YP@}tFA$?8XAje=L zbBZCdTQ`R6#|0-aovfHI&88TzUuHi1o_rLph)X`BnTb%Bg>%@-$>zI<0^5)$W1sPU zfs?w}kZ-hCI$RxRMAYIluL_&HthTHwaG#PVa2YC#qmwTl%jDyc?#oxZZrxU~$=OqT z3X}lh8II=WiwAJ_)*-b_YictlO zExn&VM(fpqh)(;Fc0*N?n#Rf7WV2}BT*aISrnc4!OwGM}fvu|D_vYS!f=q0qmg8t9 ziRPY$R)O^I{QZ6qxL!kI#H^-fR}` z_xfm4rvyY~ii) z*QGYy4~6Vecz21WQ**y-w5fpz>J9C#=!Hk4-_PL{B(>FQvXjlvO(bQ(_F%T@NU0oigx6Y*Y{>6~!LQ*_`Rhs`mJaTiHV+kUU|eDf2f zI$jHVPc_iNxvxGPVUxJb!YRLV7>{84IknHesfbn&ALwCpxVy}>J_T5IF54s7_3|Tn z3YJ)A-za5GAG*4$ZEz7e|HH(38P>}D_=#s{bhQUE>7;%}n7*j;@LryW)%8KpvS3l` zA$NaZ?$=x@7Ah%#-ca65dC5M^NE+x06M4o3!QKn_P7oboZcVOPck)yBB||FhXFT0% ztl)|6f=}Uu%nrf?jgF8(L~Ou zFZ7*B*@FlyMQz-BAa*PXW5x%16&|Wj0LszY=pP>EW ztdq1gf2_r16QW!!tZd8GxPj0Mr(BCR&zLMYiWX_n@?4gz|9p2wW&A~Ph+VQr~;-I74f2MG48}cUm~_dXIXloE?RPF^I^K{Kt5(&{KJtl8SrFJ zD^t>tv0{-Kj=$^X+>P^UjE;_MR?)KYFCr8+U+q6O$%&K~oc1D`XYK$BY%rErj$AAA z=TRHXPE_IVE!Rs_LfnX1Jf`hqejiBwvMk1%RnYYwISSZk?Pr(c>y7S+J&W7&BHV~V zr<>Bt?Xbn{9Q{5Y(9u#9A>te086c0@EIg!>|2*yvTZo4hYrzfrmdIyvv5TT2n2{rqtk zNUE{4b=pX@Jro+GURhFJSrRy1X!Dqt?9Gr6XLn|An#MSU}sBcLe3L%H?6%SS9DzfYdjpLjDP7akZ!D{H-pe3dXZF zof=2jF$!uyy&QoQZ$~C9wd(JNyMORs9kj@}ZRm47GR5xOb9$Imz(}%fn4c}+?6`!N zAK?kttHz|2UekgLLhCB`o_~*Nf?Q#a70;Jqx%wP?lr#wh)#z~2tuXTa+&Y>ZDvAd~ z=Z2R1KS#95C%J-8CcXRd&3YEAJsf?myfaiKCe|K%8zD$SxS-vR>IOfUN z+gK|E!4DYne*ZXiXqT2mcS?6Q&0+}MM9J)W-x)tX>+_v~8$p6Iz?}NF| zCLQ7~ST0kjEOu#XIzZ+L(5*gDAcPPJ@nBD{j(*q&(DFyzmi_5*F=QMa|U%(5XcGr z5?;yn`t_$5>g!5bo^W`_-?^%)o5s)yb)IvvUlxl1Q3AU#yHY()&ONnA)IO>C$y^}G-J^n{J$U_(;p$7{B>Lx5GOyk z@xL*hJ%H&p{tBk+LQzx8R?Z!T`_WsT(oLB5$z@f(-jo$Nq*9)N>R$ix)%&q=Cym;} zSD$pm4MT`y(}d@2UzbyX=cPA?%;#l1*hW)kMO1wL4ASi{>YcKDiOWF*mj@6w(^4B4 z(Q0DQ^zx+ANOeC`8Q*@`sb^yD;VQ%q9CGA*t8xThR8IV#xK95MxQ>b5D=S$t+7`X$_u^>fpuGvO3sGSAL{>n&4W0n55-}B2m zt*ZKX(mVvtcIAZU5sa%`@;J{NFXZEa?d%bGmbC!+M42Ap5$W9ciD^LZt<^WCq;b3H z@~{km2q%*?Up;HMzqy%K>llA9ZM?lF+d z&CHteQp~+M6Omb_Yo%J}ZtYp9zsnT=c_WY05d%fT471hk^r&@=>^$gWE(A z_b~s^zVSxc*Qcg&icS{6b-|R;uj8M6RTfeuj)q|9r~KToke2i}G+40~wg@)Kw#i8Y zJ2S4t=3Se(={S2k%E~?37kb^VAkM0{n)1=5RKayHGTDGGa$!@ioK~&dlZ4`iF(K>v z06pz}#z-adXIjUPJ@zz2wk8gzs%~p)M|&ikJ>J_reZOgT85cR1PT{2qp<6fVEimHf zVK<&`opGw(Be68l6CaXTbkL>jjVIlBcFd3pcvHRn#Vbk1WkZsAqT08;=Dp~9D1EImW8|}II0Xj_<_{|G zoMwsuAn)c6cfB8PZOeyYGe1H3-f1Cugnllv0r#s8V&zo#Mg`%J(xnl;0r>0p90c39 z+Q_=}(g?L(I;(F_bYt!^RxXHz5;!rOBME8w?k*>htG1OxZaox{_jYw*_1u+}QEF0R zpoZy>C4qN&AUuB7xR64;=2>)|~W0GQ2IP|xMYeQu)F1s{Nb>naqh)#XDqWBy=tZTxbX&kUMBX%Sy;=HnJ1hJ^+DX#mmV1?`l! zG;Yi~%>K>IT3_C((mScmpR3DiLo=p$j{gYuF#c*kXy2?~@Qa_<3YCU2yTK=rZO|Hv zHEGWV$w`qq9o8!%9MaB7p`GlR{wc#ip{o$HoDIWYXm3<+eooU&Q+-?YQPRz^4Ez#7 zC5g~OkQ@!T;zx=}e^aOEefFsUtt4S$a;(O*TiThqq@)KHdijl0_;Fh!r|jj~NJZ_k z5l2Y{w-G9YtMw^A(yT|F%!Y5&c8v+j#fxvYQz0%!~`mWc~d89tzbYmA_rt`}U^Q8=|B@~o1%^qfoau~hiw-Gso`HlAtSDlda)qMw8j>eUoAYj^0kJ0ga)4=jV>Ojd>+6cxSnnNki#oQkuHjz}7ZO`_gN# zu#4Odi&yD{wmN^DW9;`z?_d)Pa&%MoH^WS76~eMpa#~}$gteTyzcUc)D4-(LIfP!u zDf#7NU`;3Rb~vEkWX2fXO6Qf)p^c@CQ7nA;HNVHH;_Ft*brlY)g5taj3`AdPKP>Kp z&&gW4o+{z?TFkBtUls<)<|HA9>SZprj-HrJ zTYl1XfQ_mzXTfn&Tdekz6MjnA({Bxoqj0xr6=6X~ax+j6SsCp@?%ss4EYSte)Uy*XE94tMH0M2JkELoIo7&{2y! zkJhCh!ZGMbKNSp*8D_sh6cd%Kf23c6<$Ik!m$wb)PE%XnOP*I6zM^Al>}AOo8SKRk zRm%2yij!VIZ(=_J_M7ICXv*xg&Vc))PfDoI9$!j8tW{6Wop!80`=ogzH(`4)AZmYk zXDy?m2HmM=bf^$%t<{ac>zx4h_vL1Z|>3UVygSXOx!fj)Id7!RS8U8lkNK$2?fFW{~7 zwSRwFXq&L!qg7s7Gt5VCrbR3i?aKY=<>C|ZO-4Nz7bnn`0V=&2D5$bw#-nv=xUI*mogY1H+)377rcC40RKJTm&8FmpyK% zWUS$`#!k-lc%{$Lw5CE@j6@33__0i}lEqJT1g+~+x^A@cCR7By48AZ4@;qOT7rPlm^orWK2eqRG0wDv`Qe^Gkr^FsWFUSS>WT#vBal|i(^ z;B5H-`uot6ux?3pW>ilNBgLB^qvi=6lq#;qx;o>O>WxG=m!BZhc;jjeA<4O*>)CUd zc4D_wmA&hSW-H;Ub{CiT9dg3b_i&1{S`_8APiM$6+cBd@VEb3&Yme?(q}XXmdVFlz z;`5|-Qe883U=Wca)DWH=pifr+t`XB1D5DZ<`Km#Zkd3m7>6J|q@31}JT=HPWwX;d# z!n<9AT`i+VVDwWIhaBB~9gIxnM@@A`1zuCE1V6;IFEZbEkrpb}>m((8+V`Lj3x823 zv2dy?0#tnM6=?P7homsvsgHoFu`jSESm~T=YFBa`P>K02C`&XK4x>h`Uc$Mmh1@HT zwGL8`YUe8t9>KR+y%8O`On9O&SH1Cg-Hf)sJk?%fRFaBWvtgvHxxJmRJa}86Z0h=q zZUhCt0xL?{-YCq|v#OxbGBJKmE6@gOfW4na(+_TKzAHFt{P4vLoT5xRwK6~fWGhD^ z?BYP9Q9ZI%Zs&Gt=&o*%#v+!+DAB?mV@lgO^`#BU&B2)|C$z;-(J$MrkK#(P{W9|` z@x;G?Ep=Umb7a%$OYfbIbP>~UJr}0Ni9c8^6slMPM7P+2;-S;*axtR7zVvGTrg zs1+dp#QTC$LK;gS=Q|q7K)K{6fJtxSI^U3Z)FMv>NVSEC@kMvVEvNzWBX)>;ON1>@ zS>e{&x59dfmJ_pZTgmM7?1^zBt!we>7s@VjxTx_k#ZKsg4By4I?yB*QoCx}C^JTYR z#i)d61vk#I-XTc>Yy>)C5n*{21t~uE{?RAk*jv37p{GGQmlT8-dafBdCr6_qB_fRS z57K;1Q(E@%TDDx6R1*28H|?{Tx7*yx9@o}4_b81oiZ)Q=$WQf#-PO~Hy<8R^4{I;f z*C(k}+7-pNb6UH+clt*8T0m}HiyqI5k&etRPiX~wiHG$f1@|btCFO)D5?|lwye}H^ z?37wKKO^S*B$~>OE!?iqGt1Ca>b+oEYp-MUq1yQb8YUG$X`I!BgHBjAB24hpMpdCj zV)&=E2KK?(A-72Ru?ItiO_wGn?tN`x;f-Tt0Nv)r+=(|c$M!Yf>1!K*jtA8cV{t~i zK%EQ2F;Rg^rX2@{d|_iH7LSB1k4T2Z$VXQ#>tfCwbPJw7FijYIPPmvS% zcFeHn{T|?;-oG^NTJ!n$I$yqWS{LAWO`yHZVTDJ=aky5wLjHoDmv#HrkJT&jQ8|5( zQrH&E4r}A>$1^{vg;NUPvukbh{5*B_jY-Mb@*8RH2&;B)PGx1)6Sg|`!}zlVH)JG6 zsmM+mf{FA~82T31Vp7p9QL-C))l8L`^44*DZfAFz#4PF7<1Z7qkAA|qUV!XDb`)J` zaMvMM^ZebssPH|Sw=y2)yN%De$ende22R5?3VHnvl^FE-(mC)3039#RPw1C44E&5a z4?5z$o6{D3tR~QmJY@nXjsrdk{!kMGbeMd4{vE*GOK|{j@9Oq)0jeP=)BTfOB`PZ_ z$2A9K@=X8yT|4h<bJ0O{JR$`(%&+$4n2hho$#@QxjXQi7zD%NYFHGvSP}Yle zg}w)=b?4?h2W+APf%gk zlCi-uUIjDM%ylDfS;MzEnZJ^+TZLmQcddVlRY$y+t=L^AFv;TM{x#>}ku!m2AFiOe zgMPPOcCDeZn~@o&;)5esD##|TW$>MI^5lqcjo&aT)2Xc#yL-_1IJUom21nD}>xdEy z^t=68vc3Z~C&i{wM{>2|?H=?QrTie&X@xlIbpfssc({hkYR?E)F=-+5&~nO(tpdBR z)9(~5ofNO6R)70(XBMiiByTgl%^Rn$Y$DG%;DEfjQB@XBR#Z0WQCgBJ5+heY`t)hW z6Y)15{CZCEdJ8Wf4&g6sKk8g1&Jvmt&SHL*_6uvD88KS9(a2I3v{UDe{lQx-OZ1 zQN+)_jF~#fJAjZqy)#;#ZO`^PGzYeRVs2@UaJA!zM=`O$g_JMEb5m~dNFtTwZGF+& zhDII2V$IRS8uLx_?`1hZs?D2ozqQxM`Udw5CTIUK*~kr&NDE@DmJiOJ+F+_FL-`lf z6c%Vv)$e`F_Of)z8sLcRF3@v1*MyQ7L~1L|gn!*Ew`O;s&?p^2x~u!kk5XwK@I%y;;+0ug}d`DH)N!){d-pbq^m$&9-kYn%_ z+eBk?zNNFu@;S*$nA?7W3D=$EgpBe=&L=DLtC8oPSMuO}e`Ak+&%8udPaVa>XMq}MS$mj1)Y}+ zyU3O|=;VlO;q@mn*^5}~%7Y&#E4AB6mfSjR3<>}>j+Aritb8M| zR}CNVdLiM~gCZ#V&(0x+CfO#}L6=%r>LCF1C99)Y@Gi8*G6&YlAbadD1x_Dm{Fxmr z%qXqZAG6pj-;;p*No208Je2m)h#VN=qaSB2j3sn&>wKE;JZ8Dd&Dhj*rR+^-MwkZL zNlheLKIqUBr|00wISiq!<76CmI(Y47cCCBd?1V8dzl|PQ!KuR3y)U@}AAc411-JNU zg%}-|6^iyev_DO%ua)vxqpeCUZZMR3S^tB?VDSUBy>ggnbJtTBc|IIu7Q*&yBi}2e zNuG1eT}kh*f8N@46HP|%N1Xi?B$^~%g==`ZtZ92DpE8ug2UOu(I92(643E}%dFd~= z+22ZybP^N2OiTEr#O!NwEe#-p>#zVI=G-oH)9xpTZ}RXhU?E}+NNHZX- zvjSKLqlCMsY=|z8vn4CdH zpIeBf^hqSU(ol_*V8?adg6`CstRgYou9 zc6*A5@B8G!^Jrqc2{wH*XkHz1-p@e7UY_KAT_Jm0EDt0uC_`FDm(rTrP{z@;{800K z9?IUxzx*tCSh@mwqu}e50?;L7oz~_}#GVD~I&KHka_=7{r{~!K0+1T#{|nIrnz%+w ztz%JiSf^I9p#(tn>=7UVrQ>?8p**Ov^C zvioDoUqLz}PD=&b5rTA+^VJH{9fVun=(BgK)(3yToWs|)i>`Hxs;6K7mS#Z2 zXAt-}?ZMKs{C=-j$upCLz^um;rgB9AY1%Mm0OOF8&Np&qwRqXjnw8EoRtO2)(Zg5X zyW$!-WBO_G1BY$@=n-BDfM+LC2$ld(7(Up{c6b9>ibL+n$QNrhF8f<6`K9~>QH5f) z2$AXS;8cK!a#{N?8V>GEH!>2;x7LpEtOp5~9@X+Is${aMtc2pPI z)rc8SX8@ul6L|CEX~Zrg__xQ83n#I#Wv-cYL{qwohWP*dXoxJph@T>8{iMA=;=(mUbO(!)p2s}A!}UGq z%hz?5CqaV^a*5~;*jJkxn~GCd1cB1DFX_#mb2gKlKV$VqGsM5(Zc!jg4-i%><_J2R$Hg0LSeE*vr6 zci!(ZHab}L#;rYf8fw_Y^t53KW#aMoi(k*h72Fl>_$6K9ybZ=sW&Kp$$mztVXWNQ9g%J5 zJ!2Cqkm@$`u-0K}`+HQQ_^0n09gpP1zOi*gH;55XXqr0bLc9=G;N^a=j7Ig)avWiB z?vsh}jCkz>OgpoyCIb+*Zc~X zm&y0o&1~fMpO7KtiClS2YQN}Gd-ZC*`i_KMhpxY{lHc5^bin9EEW38nw+7h~z}5G7 z-ZAZ=#JGvr+oUWNkxO#y9B=oJ-^Qjks*JjXhnI@nJh%(UBS-ur6GC_qs6U4;NknGg zvKp@X(F1;=SDx*oi@lzozuhxlSIh_HEK!ax(R7{#=r5j`E9qLzZ@(J!O}lt1MHoS; zw68ApyNAPZ$^qQtHZoh(i!41Qm>n`lRbq}$$4Lz;-~G3NDmI@Rt+r$qIAXohTapmK z(<^_SKRWi(IM88#5H$L~+NJex=(Zzj1?ZX+@cX!f>^1~k z`j9koAH%LWR@em9H`C)2?&0^L-MhNv8?*vD-}p=e-kf#~77SsZXA=mY6=sa8yg>oa zyE-QgnVuRyHgTG!W-)IlLrUT{Fci&bFrNPe^2VXAHaAEzDvvz6%&=2MPi`1nO+yvc zdR{Uj-lSywbxr1AE;6iv9Uwy@HVfx_V6PEuY3hB{s($q}?FtedOA(-w8;c)jIq(D6 z51%OI`+>S1hbZB2ZyjInM`|3!*MZ_5mtS&RQn}429{y&iS_DYh__Klxz!Lo5%AW&S z41Q;+b;752ah9htra_yix1ba%i)j^<2zVS|19Gi;$+w=Ddk|(Y1qPRZ)uVQO}N3n4x*@M4U=}zEQ@gp%!P2RcuLTuH&+NPy-1={zSZi|)3**^#u<>AQ|qf4Vc$RgBWvRqqaTsx^PEB( z4@a)e4&OY@{r(s=_0eldal}xISPvygG`GWy7shsMYR#+nvExPPap7}iJIfnfjHwf- z5#O3LHIQ43^;?<`;(_+-kRTYlpD=c;*?FUZrGD?Nxnn_g^OTXQ%2cdGhaYW>bCcvu z3?TRvG(Oe|V{NqVy9D^%tvMQ!gTX((GE1IYN>&K&;KKJRL{^2%S3+J8w_ z4_Nkap0wOp7Y2fLwqR5|;35ROO^A>q%)Q#%REKY}$A@0ZYmxPCvg#wPNn@eDc-Y;Q z!)#+@w;mWK`1v}}Aw-Kb<2eNNovqsd*HHW?=$CpCY^)Ppto17j;!0?@{txw{#=>WK znCIesDIf|`a_t}4Tm1gne{5qKH9sR<#T)1~_|#e_nj?(WRJ92x)5}xtXNi@V6$@{) zp<$Z#)5Kkgbp6zI+Uwd>SLVR7SoYwykhm(*vesO8T;`UL(1HM+QS~zH9I!71Qv~#z zF_;=FRP7?o$tzEEzsnEUtdvr(J9$*iE))~fXdvSWvH?AJe!QHoz!hRN5u0GP$;9L% z)eyk)<}G1zmH^8egD>))tCl<3oIHK}w2^budPodlroQs+F!H*ZyDEKKg))Z{OR`wx zlXo10nSTF8Tf3qUkuEhV(gj4i z1fnRtNmme%4nl}@X^C_J0jZ$~AqgD<2{k~7_i>MLzI*rk?(gos&)wfS=Z@_k48~Yl zPg~Ek+WgHqf8-j*ke@VsH-f=+dF18@M~U1%_TEI$wJpAf%{+88ip~dIR}B3IwWl7( ze6jOZJi~aC;cgC2W(f2vQOWOY9{=3y|9hXuzvOr5(t%D;_j%}DWK_pA9l%5a_Eq-p zZv#1{8#q!3NzjrjyxcsrTiBNzodaGbn)(updcwJCj)(72&U=jzxOyup!Usl-g6e&8 zzmT1A+raraV-x7XtY_8JFKc&Sh3wljI_$(8zNM%hTwe^|l;2U0TuoJSYjQ(1y?*s3 zE}H%BX7ntdajfT@`Uzk+avmy2g2GO#DHRXNl1Y5;aOUZUpnGu&H#fW#JC0|3y|D91 zaiCq#M%{z%^I|{Zavtr)lyaGWHX^Oi4}dwRC{m=t7BfCRl741wiuMz^)9ADk>|OaNDX<{J9D3T<6%QZ(Ep(;%6FW;u4xW1ce z6xTgFFfC7P@*<0oUZK~eGN|qhW3hsFRD|$%xsmDYiQ?m(gbClX|}NQ~$9ro%5k4K)RT7&rX$sK@|00VH%6gR;18S z&hS=Aerr4boMmP1S(7k(o=Eb1zag-aJc3hLm6i6#O9soMIf7Ri&|F4RON)hdHs|-t zM#V%eMbh2(;!9N->o1qWPLWZXq=m32)fmR*tIqX$%l>byEo)4|o(2Rnp3px9=owkd z|L;v0pE@2hfyb)1g4iH_4sFw-)ZWomD5}Z=m@BP&DxoeHDFbcY&&mpepYNjqOJs%> zqA)cqi;@Qc5Y0$Z596st8)<-=5d}4@Af1dVbg3~|WZM*~DRkj&bKwuuKhpA<|LU1m z)u&*1Ai$kC&5TVwWJb^dp3Jd8F z$;>}#ZuL_QB>^+&c6WeS@|p~+Id8ADz{moCUkDDU6hcSrp+=xz10*^vAYk5RJe_4P z=^}89%8i}@A2O=%X`_D9;8|d;&ndt~vjI}Z6?VXl{823smAnZBR<$|aSar(z3E*h} z@8>_Bze(+zYH2hh*&XsyeM19v0Z_;srsaG>e#Wt~ASX83`B(j50eQ8YlrY&A~UfD$o_ zdWrxeM@oV#8UKA-%)hV`68n>;(u{BdyJF4V206d&qO0q4mlSiYd!PSt$FXbGm7?dQ zqhCe8_eMDXL+`mD|M*&&ut5{&UO6888gn9dQ;3+_d0Dv6$6^HtmkM-_-p4-qNrNf3 zku14?qW~f!H<4Uc!nIXbWo|0BPiMfrX>l0$4_yg9DkL%Q`h#+K7}jV``{^k5-z8*Gw9c4GuE*?p4uZg*F@>R0L?C%mM}fI+)&4VpmssA}rzYWYFU1eAdq2&I6gmB;g~&hSG5qgdHy`d; z!zVE4w$)_V$9qe^A-Yu+-a;FDTlLnl;lChp7#6^W60s_cvqW)FRCVK+p_dy{dq*hp zqNxdOzTPTtXqF@uXlReqbgnRlfY>O~q}&!c>P2GH{xSwL zAoK3)_`HFtXCn1iMY>!0Uk#s!a8t|VEZjTuMb~Wwxew$Y@WG#aaORR(RXH%*2C^;D zE#hB&p9!Y@II1VJ+M~Y@z>`J4lW zE{7~EDXHJmI)l6fs8=6p|GnVDKl%HSO?e6vuwKz-1C~^_fWAIq0!T%@LHjof2h8ve zPt<;;VSRl6pS;TdYq;d!^jt?aItj-PM3!O1L|_p-Kvo7AMyD3qL`|jp9gfhQEIgdK zv3INXDMs`s4I7=fwfpM$fr(QV7e2jpe+oen0G-<+3}6<0X|jE6II#>}$Nmy})#NxB zfgT*_P`gbb?6YC*Y8(v!(qW0y%&4&xw;zwT36Px90b;LLd7wRO3UK43R59cRm&^UE z8^%{{ZUFFGtBR*;!=90t8%M{%E!PK1yrqS-mB*%$=SE=e7*?nZ@oX*Do!igeMLjCb ziS11{>2h@zKW^@e!ps@$Geok;b-}Y{RJsAu;2~AqFR@ka!mwRaYI{I6$C?DhQ+4Y> zB~_9S2U|&qMA!l9&fJRWfls!b{@#(|iBba}$9yDi+M?u3)R#26or7`$Nr#0qY<5l0b0 zQC05em!A1Q4^8#u{UKcb_`#Uk2mEp0<7fgV8p-CTjN{P*MKns~t-Rx4vY8M}kUS{U zoZAl;U0COVHOo_3{N8s-M9V@>Tk*URbBq4IFm>sS$10~wy)52E##8Cpl=MroIBt@W zk2;N1CGn*kY#kc4$fZ6_92RXZ-~oBOKflZn7y@Ak>dvBPYz9xNcLvcbWsioYV!w&6 z+?svIrdgiEke<%LbYeMZ-7R@n{F!O(wc5vzc71`>!>4n=sCcA{jK|re&hT2cJom{y z@neXbYRsjVZh5hy^GeL@)TR035&|kO^tEwWBxRgLIx)A|3@JP^Q~&u>Rl=#+*e=%m zOXdkeU+fK9wdocG zR!phl`@NE>4b&%wgQgoOywE=1lm>K&d4Jftq^rz| zc?6w8V@ms|MtlZ-%;DR^8_l#nW;pk@bbq7>SqrvAQvvXg+e7<;FWLf^i z!_T9P!HwL-D!KN*-+JAy8MCThMs5t?uNpnmR$uZ#Gwdvd_s8>=oZ4y%ux9`6)s zopF!K64znP)#OQVN4qNbMlIfb)9esja2fGNm^_JtoTM-$>L~T)dcw8vOO14F$kF~H zo6aY-j1g_lr9uY93x`+hr!6)gn#;Pjug@DrnGj;JVp6mQQ&F-FN8x@kYS zLa*cQQ@MN|cWFAG(;&F^ElR@JM3ZL%ULV*E5$D=Nc9q{D)(4bO84AgThcbazG@$V_ zV1^Z>JXx6}*_M_S+h|k>J?Pz%@` zf@@b`Em(2MpET~06j~Un5O2GvCyfIP9XrH*zhsS1Lw0Q9ojwB5E&shu=-wr;WY1&= zMp(I)XKhic-xVS^?WY9e3>xPXt4XvN_Uh$QKjj4XcgeSEdcW(sla3JM4v*~Ny7Hq< zv->{bIN=BU8&sd9i6RcQqIfCXh2%K%OtcPhn2Q=wWbMq<8~AXcs!QhUGBY@Y-~v6Z^xu(0547-X4Kv`?b;$!s?Wz%2 zl?r7K2~8AEog?7g6Eh}beZ4pqA`i1wZhUk^olyaK7cQHnup5!1ZU&nZ3LU4lXX_&# zYufQAKhWkU-rz^4KrP7d0Al}64oS8w?zlQJ-Y=?kUoO7DW|>n@sn1_RQcC<=6YKRZ z&5) zIN=x^3>y8lcB~0_=d`)Owsk=dde8YAr?54*2Q<@Jq)&)9NbkT%rq#3^kZ?8n#wyaK z^j!0?rTzTS3|y0@s^-Q>{wC8s2{znJ)e~FO(}PlmmfSbmg}7^g#mp;L$jZhvnl{fE z1-DMcZ*2Ogg_a56eA`fDGj=|Pr~~-}Eh>}bIZH?LO$wrNuUNnzQ~tnHaEt_BfgKr6Eoxupw0b{Agn<-nWHJVZ_A+ z?^-y7tK9N_OqCzPHdKsOr)TInywQ@1y@!?*xZS#NT+_r7_N~yF;DwgS4Sb(KF#-76 z)tfwrV?8LbteI8n78Sp2(L!>Ml>r}ZF6b?T&~t2alVutVZGAW0>|M(>j|OXkJzpp# zoPbWcl9<8dLOd+op`9zMja!tL`Tl1jHQsKfhu7)hi<=(>>k?emu2p;+WV-qF+j*0q z8+DaEl)G`}u+7Rg#im*(^9z&OdRfceh=B*AYNjtwAoMW|7;xM%u*D!hjqn(BytoQ$v?i z{$ai=5`CHTJ_X%ffbYP6L5Pvl)k9=-Q4C}?%XRMM{d$WY*|<=OY$=3(vT9QRtcD}l zYnj{}WAu0$pFzm@#_pcv1VEFG_p&O{1O{92c~m~e?~di7OtH7_NTP8?1l-VZVC_+g z-dZ%Fn$q#awTDTem%@~=n7(%@72`YKu<`*9dVXcwDR39&lQlQD&P=gr_(V>g0iT4B zVXLXrf`e|=qG1P)uunQi+bnpFw>5Ta62Cy}n)~_UAhO)=5bBOuFU;7P8aI1p2>Log z@ln#{vENe!H*{3yngAA9o`(`M7k z=07e5I3+lWkkFohh%K=!(X@&Z-iAS*0p(g|6mhY**6H<(*2Y zF11>|Ze&rNs_#{z>=fb1l8$1;+vd0U|uXS=v97U%&+lY|B z?SPn*fqj2rOvS(zKiSK*VpUliUKKha`Zd$*X2I2UE+#d@>~v*qj=b#k4#t3vm9DC+ zsQ`6r3FE5hEI0S2OH_gcikV=sq0U8dK~s4t%EKypIL6~Jhaa~Pt$CC8VJ=$26R!Dn zv8UE3ZJKnSbx=J50vv)4vSB!GI_hbPDcSQd3ci9)lZ27BmYEix%M=Yy zo7dsGWW;HBKKRqa_~es~w(UyPVw~i-XS?)ree!gniaK*pFH34-6`V&0u35~LA{b)u z#o!C?aVpw-fJp=(pIn~@%&$u(7#b=%^D=<(~1R%wEsMN;XkhS`~RQA{vb|2Nvfd^$&%U*_?DTb zLyXWpe1G2WdHdRgV^iB&070wHFYHVa6bWK@qIQ}5Ok8elK2T|GaE(_>f0%Ie-KrbT zb>MFLOT!yq`GZea9viI-z`Ul4kgEF<8RJwQ7CP@=%J60&56Ot1-@^KPFqgEs+2|Jc zbd+ZA@ZbH!DacSb0%Yorom$^qU&%R0eek?Q9h|zohg{vv;`L+ipo%Nar#s=rFSWKR zRcTJ^>c%n3w$C+!&&8TVdU!=7ZeDwLAuxaM42?z4a1hO{d@Da?L!xE{RH}?@smsNi z-#&+!B&=0YEtUtjVpTwrlq!)9!8p-b2?& z!f{A8a%T%*^ktpgJCCvxkM@1;7V8RM9l(nwhZM$7Rp=<^H_y;CE_{~>R6h{bE-&9y z!Bk#%>H3njBw8Mi5AayDbA*Y9Y+T#xD-+6d>3gt1? z(7RM+>kcJN8r<~J@j0}FrQ1Ho^kG8adjcJds{@5oWaYMf-nH7N4#N}^^{6MZq6%zR zs(NaY?ZQ7iTAt&4s>AU>dqUbe>-83hZ+!WlF3z39ala{AiuFJ(@q_BC-U~D*lV|I* z_@DXY6bgF2tlCL3(#v-TH(PG#K)QTr*Oifk!?kr1GTr$g({%>%DvKCKQ6Q;@s8>_b zht>Wctq&2alPXy?x`OFG?#ea(Z~HV?eR}OzFhHcN=2yTI@S)vVPu$_=Rq8*mTn(r_ zOvVOIo4u7nb#=(UcU$)8hY#GgjKxd=kZuqN(37Zr*v9l89%SCYNe0{Sr{nc7ZCMO{ zgR0C1S=z6(U9aux9N4`t&r48rx}GL)n`+p=dpcQBf&&iDr}o##r-5Q|B%h*bA+(C? z`I=E#1$fGcAx)^lgPJJGIW4Ag(YlN%rf=WCeB~OFl|4g{_9?1BgWtkyfz^y4%^64cCIN9x;3o+7C9!Nly&eb)O%}nh`3P zhP{oJ~CkkR6ByE+RxC9KdpLTfq@x|Sk^Lt15 z6FeJ;lQWqmGnmLs5z>4uZk}|h5GN{XX%26HQ4>7Y0y%nQUhzKh%kf9wPCc@Y;@Xb9 zvZ=i3jV58%DQmkAhf)hE+*H_Hc_-A2Y-dY?w7|x8eT|lCuUfShIqfHx4ap||kl^D? zy2?*@*c~5C$Gd4IAC5ffSJ?@?mf&h2IqSyYJec0)+;YuMnr7&z51O0x6`jeNo$ZCM z6WHLQA976Nd?Ol{YuUX4i&t4R5%P?7T~w_Xnz^!hFg_R*oIHTud4$SD zE`V_@*~kwzTIM@ZCF8V}VY+ccx%Cc0jGh@9IinOzXTnWmCHW-lc}~nwoMzgdyzf%khjcx) zkNxw>so3m!4+{GRl^?1`Qs3!-VVMWqyy7YjQ>ki=!y(Y#N$OpH^U2V@wOpPp2x}uS z9@8sh3nM5(JL{_$0$k07vBuxVJ#qem^?|&^s)NGUez>=>f!wmFZa>Kt)n4)NpyvH^ zOQMcsvp_$P3?h}voJCL8)uN6Zu>?UDuX3Ss})Sv z3A#)Mb*N9MI{>hxy(pR5KI?V>p0K^$ci3t__3i-vey40YvdqEfpoZ#dPNhlE5gM?Z zMPd6v15|py+%LKxmx7Lwsxx0=T@E7L@I&4VjD#Vlio2_ufw2ZE&f(@!BDy@;ma4{t z(sgEPk54L+fgFHcXYfk{_(1eCQ$`0Cn0p(B%gghD32XlJ4|P=%QejD>`34__Yz1TqV6ogj4HaHGzBa1_)Nrz?5hdhux&U);ldC-K4wi=NAq;;o|n z%3W9P@+-G|Tx*%DHIwu>kT}f6nwHP>lXZa6$I-92QEzAclS5DM#*{y|%5>0L??IRq zfnc+)A$ut;VTtNQb&`_xb~toI&tfovzzkUQ%jD%3VE!AL|L+bP93iFt8Ha|J&!7M= zws!XecK%;(JFbCXvtQ6O=Wl5G@4~(R3ds1s_#DUZk^sf2TSrY4HdaSVjT~}We!h3Q zwS9v9mHJE$h6Mq=0e6~UO-eh_c*V1LO3R&F`{7Xd^}g$3H_JP%jx9lMz*-J|F`P8m z0fv*xFNV{~ors#!dVx>~vvR#CKynJ%1?WzZlE3Iq{=iP9eE=Ab*8xfu3*;B2Y6A!} zN0rt=9_g<|V%4#MlwbU&D1hI@X94h=y#93d#ks&2Yl~&fRCWx&H@b}c#W$Km{G?&m zqDZ0uzL5bG;2XW_flwu4&Bo6DKIiZD{5SiS7%%)y0>}S`*HKeKs;mM1Vs!kL!Tc+w zJpe(QkNWi|4INe3ui~I>`Vz5lC#5!U?l5QNKyyv}K;S-lF4n{#M1$wZ&?ul!CO<#` zbWH)+oXsx^WE}cCi^*n}w{WtL8Vn#zp8mxuy(v#MSqEw!f{4u!fH0{EjN1UwAJ9l4 zK3vYt3>2>MNc-BIQi1`7=6&@)9t^o|prvx~X)exo;ZF|) z4Ele4^#0LE#f7Obu>g=duy#EG{l#?U{z)UU3p_zk+@G7npkHlO(ROSPxJwREfF^qi zvuB0^XtG=KC3K%lVp9U3fy?{_FeqCjEr~#}LNqSntpYnYa_s`>17*9>GLg zn-Y+u@h)g2=-KP{S6k0&6>TFBTPT*r`dPxs^pY`WW|4JAf}5c!{hMny6Fd?WcM;7N zhq}Nb&IbyREJ6Z_`4mXe_m|ut&mVE3lS53GRF19L==(KJ14`ow%Ui5%5LqW zp>a6=^r_x0U=!@S^99)Jn#}+!9y&1fzA3VI+htwa`(j31g(D&cg>|Ejfwt~YKtE|- zUinGWb6WjRC8}9z2knH5fO#p@_0J~+oYyB6GAumw( z-R`M3ecC~Y05uv89>4}fi7@JMV8{^rB?k?^yzGy=Zy3IHC|pN!pQ~gJ2D?3_;Y5`Y{`u}jK@RiCO|TR5Y8oIpCtIRwXb+iCv;f$12e#1?_oo7& zHgPBZA3gi!ogkNW#@{FZ!zc5fZI(vRjy#!!pnk`k@m4=ij_ud0Kvs_m4GpSFToH)w z_|(iVs9ZPo&JuZ*mJdlX5X7zaGS`1L&|nq#tpfQ^NOu1>>KCENEX;4^h0lyw-HSRWc%k#o&Gdu&AW@SN=hJ0j(vlqfR)107#I%9zSXFYLd4P zp)dbtv6l&Xe3CH)AcdH-{VVU{-~C)ryFZ0rAYy+cnT(7~J^zKT13j=@@GqzpLYAc7 z)?}nX-kyOSZ$6Q`WHJA)X!=L*MX3xvO!wHi(9=gYxfPARKZs1nGqzdlVz<#RY==Hn zzXMbmEEbNb5NFLtZ@LpIuem-9`(}H5)_Z0|aIVL_Y86R^eB*nMnKFa<%FjL*V*Tb9 zhD!~m2$W7P?ypB}@v@uNnK+8c^6GQ@&z)&EE_G{u%Xa+CS?zX9fNa<(JHvh1T?LHe z6>UxN)R}GfD6wgG;YQL;zy)aZk0|iWa9K<6K5;WJzeYygcy+64G=Fq!aVwx-cy%Ib zszZEXQya*HqHO7JNB?S*jib+LUpUgsomqBcala|_<0w0WlaH92p{={p;bPu|ekUiV zQLyUeN=9k@$ku=C>YJF5EaoyOgrtkBZcLl1$;MjqFBv%*-F$Raka?UgW7GtsRIXer zeLnW}X{IKO9jsk)SS8LTrw&F3H6fbCAud%BJELV7&rjU|rHgUt7oHgEc-Jw1f9%b* z>s{Nq*5u+D6n&@frApi(txoLV+>wSH((|AkSFg($k;yosBI${NsV_bBL{o{?BXt#{WR!ND`)RBwTmRzxbSV) zqv~fVcL%&+6)r73_bOxHWf%i5P02!N|J!`3K&`~lOsO;{<;nde>LX+-6$NL!mDBjD z1y;5Gs?m%T)kZxMb${Sd-5|1uH{Gkt z_%@phq}Xa#7B2U2*#I+Cqm<>X6IJX9S{yz{j8AA7eBSU#(8)`Mh*HW@mqQQH4o!mx zL$K_XDl;Jj#fB&xBEGe>jp8EvYP~XeZDpxdK? zkd1lN={r$%z@W*wCcaZMx+$P3_SrpY_6(nBcEasYxdhEqk@V71Uue7q2cL_UZ+}`A zO{gI^&FD^<=?#ffT(INY;`%aa9ev`aC({VrLR^B3sYb7YKfHQnT9p-Ha}G_>@y8OR z+bu5TBF5L*l}rk9&(z*~;)*~DJ?g0rrxgf(>NNh7#>O%%YrA-0z-l3iDhMoVN!5H; zNTyNPTe+A9Mxv_{A41oiO~q{Du0-( zTRHqNZJ9Twdbh3A+^3vo_NhLDe_^{My9@OU8Ahsw3{qfDB^W0;Mvp?Lnw^wshp;(a z*J-P_KOReX@Nb%B(;OACoYM#AptcV!`yVA)Cd8Q%4q;}hEs-5W(`=6tviuEXLt<}z z{ioVYC%KRx1g;bXj$?wE$(0uR5=7|J)Q#?2nM5 z2Tjz@tYs^65Xxi-F5uXkg%2}wLpAiKjb&b#L*nn9g`8m4Cucw&{)W*QE^qiWR7V&(Yz3GElpk+cinEZ#cX zW@;9KJnv`Qyg%f^=2Kf+-yF5NRJ3A|KU(a0#=I-`id%ks?oEG@*C+WO^PK*yW}|zU z3ZtZ_Zw`GI`k0IybfTao=iJ}n`9u=iAeEPL@hBF|qLOb+5GVPS30GN(#~Gw)NdX;; z)+KV@N#&w*f;VnfD4Yp0Jn5{eY)taWKd_`|rr-VUrTQGNHR$zK21S^%4>;!HB;&SG zbvh+6bW_NX7in~m$Ad2GCkiyzrd6e)<Vqq>FAAl4=v$vr>tDE$yCt(zmUX zpvg#6oxsWG^1c)K_Hzq+n?T%cGBOMduOk= z`xsxb;3+}PUq3(0-`7Zid)+6&t zVS+qvk8UhMw8@=V`B12LiTUzGM*a__raV3OvxWK2W=h^;5#i$J(ly9pKM1;C(!~u!kRc)qC{SAp1pBOg3jTsY6<*g#I-4M0L&4|TOUx(sdcVDyl#OPnhSl>9FMtAi ztQH(Q{R@EXP&9+v1a>Pfy}7l@oUVDNiO}Lw8w}WGhzz`nh0kDc+1ua5mK` zu(uW5zb>87X#11Kjmoo5K|0P-r11^zVTRC~gH;HI338M!lAL-n21}5@-Eg<#U5#&* z>HH>zN{QD`=t>6Cw9j$QK5=qrn{XhcWA9UROB~tL0Orgq_n@JZuWZE;sa!v950r-L z%u3TxA83h!NR(U!z5(@S_v8JJ2v!mI#AQv;;!|I#m=rr%w795o0k*+?QIB>E+~S4f#F_i0nD*?{9*qk)97BD# zktI7|`@>Bqyp*P*6V=k?C&bF&67yB{)rn4q17P~Rh-5+D(rXHeANfv^C1)^UN;~;* zGE7^}0$F(GDFmY9tFmeR+TPB|LhI3b>XWbIK6t^I2LqUNIQpXtSPv$O$?2AV&19K} z+*;p*wYp*YrjMf~sN(l2;$*Xr%KgQDM)%V2?JBWGcT&4+88eYy9n*JxPmL^rDiby&*UQy&^pV&ml5 ze~$m-ot=sfJNmdJMb}0=rz~`LWNipV&L~4ukERwN?>a%H#%0|#0zrLxm@X(%n-moL z36L$9W2Y|a$N=!6B@{dam&vMl$n>pgB;87o=4oW2^2`|;&sba&1kd^#&&$Wt@-eef;2Q1Qh@C6w0K&0=Hz&<2^c7`Sfo!8hFDiXG@y&N}c%!1N2g3+5 z%h6(5CgsX)fLPHWqO-}O*tG}jiiDMdgotusc>2SWyJi&!)_q~mWqDO8Xz;}u0e+|` z4My}+>toNs@SfCUpCrh~$l!y+QNqG!{Y}rnVdS2o`e7ZP4zZe3-99Jm!Siv->yA=wLCgU4h?z0Lwb^Lf>_`1%HbH|iok_AsjJ3K0M zno`X`odOoX)+VE2!v1*hIll%RI!Z-qrb+txpqmVbSoWw2xa|5am_J3)K5|<5e%hsY zV>RE#WtMKT<~-7EC_BpLFceWqE#Nvop!=69Ie<)atsY6`gLj>Mi+RCQTC zytNZZ)GYRAoobKG->I(DQ*#Ng?jg@M)!rq<5>g(xB|VPAq|U^Dk2e~Fo+R?6&V)CD z9I#{pRF>^Secp4ZJhO;Ucb~ASA&8%j=D`aBo}-iHMp2ji0HQ?)vj)~rt!aqV>lPRP zNpoO|l0&Yg34NhFudF7nw?SUWbGhcRJ)0!IU3&A@mTu0X%TB3LG&cOEaJRx9`(RUT zoB9ULFluE2a!4}*Vj^?jB85<21(b{jmMz?B;)>0rx)jDgJ^x0H^@V%#*ux6NB};iW z(v)S-@sj#0EV*SKZ!}MpItwcqhM567`qA}yW3CYGo*Z4GD^(A~tc&Fp(Er7u`cgA$ z(1ICz>fCaB&&v8;0$Abdf}dO1_alQ%E_k(8do^)pa4PEc^B-AMt0r}PwWS@O~C{In)0~t(JFE!ia^``t@MwoKtx<#fSQ7r<8 z&&japAvkEFqKrNrt`sJEa#iF~O64CYKOLu4iCj+B5NTX-drZ~&Ns|(45M`XCw9y5f zO@PD}CQ$oy`O5MA(e)i4gTburxZBl@ck7C<)S+?oCm6-yj5!g>O7 ze?^aRJbze5&tg+I)9>X8L$m4>>C0Bo>>k$zj;>rIvgnMf?U!?Yd<(6n!Y%i@c#89G z7hI+n3^oxv7c=frSD7)JF{l?x~zM;tDWXYDaovhOPOSMLjrE(P|PiLk4sjcVF6;AiK@NCpu27hGVy@R?u zx$9Trn?(z~P-H>wo5pKz0@-M|aEApCclxJJJr6s?e5Kiw+uxqgr!dEvUkO}K+=@M% zp3-7V`mnEoXa({(CCCKvz`9h3sKa0aZ0inM!(?kp4Wm5-f8r{z0e5|*eId@nwdlhM zPDNpwv(=BPN`w@_~vWxG2-j{}o-|jEe+RP?XDN z_u@KiP7~F`3}vD*eq|Fnl$8|mjbl3{UePB^I={_DxUswU&ZzUKi8y1pP!D-w?WWR8 zX|}8ZdZru(Ww_5$)~7622TM!J&65=D8Iu$`l|Sax)of67qumwSx2Y(^tyK%r;08X$ zK?=QFFAj9N{p0O<%U=8SJDJ>~E*hGTFb)R>_76jjzZMM;TP3p+JVkMR^Y$?l&=@EGaFmm{&(cA79H#&A(zH0pOP9DX*J?TDvK1f8o;63yvRGzPV$CfAS@n+i9cAs@jrEme|09~<^DjrZU zVWn_nE<*4@(-D5=$hsRXhEa8@f?WNk_<7a?&*1waM)<^Lq+RZ z&8eP(Rs7Sw)n~bUcJ%H-AW9l0WD1GPjI~Zo#rp0EEZ%AR2k*{Ik|d0~ls~i1OOYLT z@}W8f-Bw?^BOj+Eo$Xm_T3`)=681@ zNqp%uJuiI=mY)8yNeu}L@%DS8y^|oe(V{j$^MmtN`?dNKwh2Gw^29|LQ_w|co3kWL zt2J9Uy}2t?_hY}U-)1g*4AY?b%ji%Vxy3Jv#~)-Wf6w(w8*d0)k|paL8>rg9L|rM| zlm5PlVEm4}NYMn?t8K6dKCbWmVKT~$^v+i;nm;bfF;8>96e@l8Hu{PO`!~+6Ywk1* zCFK!fB1@Pm_zH!kiX^zt+Jug_8|@D<)2gl$b(JWR&?|3?&da-9oG8e|9t#!{oY3>u z$wymSZtBiAg!UE=RPO>C?_l@YfDzAW5c%Z?zrr?~i{GmNTc>JgBwyNPS!LLz+Xu>D zGaoU0%eEBlGk&8ygH9k1;e^}4A=3h6e}~d8Ecl!gQW#CBiYjSR*Q=`t;9XwrF511e z7g9qhyF(bep@~Ua4dR6Aj;J`1*m0pR15f0c2C)wlN=q}RICL)RxbT!d777>kd?Ocv z=kYBuXqw(Z%>e58F3G+fi*FgF4U?pKKxYk^Tbk0viHk7!FtF+A_o>?B*y_Uc175Q; z-Of81Z`+6a@P_`#%QW5f^GixL@PZ}ZwEX0P!eY)7F-g0p60KRR2mQ76AW` zIDiB~xHwW)i+i}!#-(^fSsd&li5eD!yv3#}SDM4NFci4~o4B^TYe1gzCY>Jje>6lr z*OMof9%P(Ic(#V(Tu^q+#~6C%O`@o}3q+oA8IdM)AmkBI?&;p#pX|Fx^UhN0hs(w=FL4sDN6! zif73K)%q!E+8F$UZsA#0MVn;9sHh|x(xE!yOVUte+Bg-3#s$DxN$aaic+7c<&|zFP zBiAyM6P15RW?|UAW=MQ>w)(y9VeYkt-e*JFr`?1;hqKz`mnUw4TcZ%{%TJq&SJVWF zhzJ?oNsY`=d~3beXsbu_iN`L*qxZWLL%EgCp7nEMbM>L3ZZvV*xCZuhg8gyU0^re7 znE<$H_oUe{n^xtgG%OQt?w;K@kHor`U^;#tU%1GgK&QtPd3h5j**+!pxc)QoQn9=1 zhf^JA-Yk8C7#eRgbGkiLLmKWJZSuqe#x(0kD4bO!)axhk>T!1ouaT;n&wZ0`%N!!E z=3T=^c5Ng)r8^$1P<)3J=Yyu|5m6b`txh2)*&zs0ooSD+R>Q9|0#H_7CtG`B2@dUW zEYKCtET_dF-vv13O<3LX$m@E#{023_XK$Hg_8=Nsr1OL0NVkdJF`QOg9EbuY$6;NW zB+o8BHw)Q5C7wOH&8@i3^-!ql*`B(C4zB0uY6n>AIyZ|zidasRZ>=ts4Mj~t-B6Vc zg2WK^)X}$o6d_c|@<4ttQg2qc%v8|eXiqyI*KoSd@L>Df$!;vu?M!~mwY-RnpG*bI zw1t2%&nvAuD?mMQBfBy5aG$7BhQ&nk$B?+~(x#C;wtf!;n z`(H9c89grmmXw@OCbB9UmLFb&PN1bFRRV5ED z$QF)>v+Fn3#sr6j?ING1Xn$$x;c?EZv3hWFzf$KV!K>u5oppuQX#ok(V3uR1MI}i; z%BI&%Ma7v0L?;*AH?&frLPVQNY*sjo&0F(g|?b|w|heb5q;5D zzwk*%KR~D4r_hlSp=U^PZ)C`>6g|dR38+#2xYZOON{J|9oWZO)n}>=x`|sGHVy`-!JoB7edaM{IJA|g2EvTYLXP=k@PRVK?20u@NMOQ zCN({QdliE+qHjWidzuDlx@HY?H`_T9_Ku$nNAXe!+2586fyVnTo&)+K09 z5rq~ArxIJ+pSOQw^Pt>7tLQr6<_3a>8LGsciEqX3Vz1k8d^kNw!ydrr6P=O8;sjXd z1PM_r$Y40Eg~1aGI1B|C)YlD%mK2#cefO26VJclx}+72I8Exa-OT8T`=7v zUz$wgPhWWeFUc4jVC>$7YdWi^#_M84q|Dzhh%*?N(_Xvy*xMs!ak1NnVCQXTCwRX1 zj+=zImrh`xTo7`3gKrmH;=XRE_dKBg+uj1+AwtC**Uw7futc4lCL8HRb&P^#Ea1JR zXru0nZ(lJ@^j_O@%(?k(wQvpVk)Xa06ecYh3vRP;MSy-X1xnT54NL$?kTcb@hFXuPa1l~;?hKC zR3Q|{p}>KF=2SS7l3?#F=jK-O56|Z$>Wc@a!m_saG8qmoLKR4H0LKOHoOP~rw5P+O zcUaVe>xY*5zG`)qDbX(e-Lu>od2wzPGegyrCaOlx}~n)w2F# zbbsMhYWqF1nqo)o%%-RF>ZT5-wgW`&hP&uZ-E*9snC|zHTZ|z#?4Y=o?~Ra$cG!cSp4SPY z4eA7Ki{2mE_8RwkI8Bedh|9(y0hcqJdTWzBE-dWPK(+ZAoM4Nr9zHf+U$U37nfLWt zcdOH58q#}*6=F34zP+XO&Tm17gy`6V%3|SK z&9ydXzY}D2UCk_q*S+a=24R)j6`d#2S_K*+giO>Pmz*6o+E{bVO(i?wAS`|^_^eJv zVB|YBd>2S6Pbd5m+v`i5(a*iBS{zH6d$hA_nP`qj$9FWmKf@*-{eo_5|8m|G z)f6I>L!li(5>TjnfVKDa|Ik40rBmr(KWPN%A%Jgf8n74AaTQ(J-#hlVN*8}?NdJ%I zEB@`C{THK<|8AR%|IX_lA%fe)%{nose$u#t!`0*m)L6-h9sBmV1(Qz1u7^%fKh?Od zj%V0uKW3=T7P-Ej>DTU+MMP(@08rlq^x;pMLy%NVN^ZX1}o@q)YnY|_3TBBODwdb{`jjFMRuWGeP1q%12zkIH(W5AFgECAoTIe< zuKi!$CN1^Cgeg3jX_+fOHlE0CGvZ!V2aPv?mo7`*#wTm+siRb$Y>O)D}TTBD9d zs9gapU8=~ylzR!ace)B-mj5xMw3(WA!!zpRjx^_g?A054-r9p*Yf4yyS_11(e-fA) zQ`iC8ll@8a)fo1N4=pfXgXcTICszGk`+s%5|Ee}A2Uz?IL^sq-T(HGdT=6p#{%poj`2HkybLX#zr2igZLe z1R^562?z)Xk=}`PX$c(_0V&cU5Q=mXN(iJlkMEo_-#L4qGiRTfJ>SfpdH>)CzZH_F z*6Hvl*)}G6E>(Ie!+N{`VB!{*)R21IUK|2c*k~ zwwTs{4Oo1S^d1PVQ;<8w_y6d}@YkJ-hpPkR8@A4!`BP@|cNRPSuYf~&_N^&*0LW;B zpghM|Hw#!!3gAf2Kq1SnqA>!|ZE`|kyEeWt6FPkhURb^LjLHq0Nv6txf~D}ZYq)^w zS*JnmkBEV>%c}jG9|I-S7?7sZk#~&z?=Gg9f-;2p$m>8BcFg`@qd1eC_lx1~kkS}^ zu<+6KW~HHq^jfHpn<$FRiSFkZWicQ}&h?#GnN}iph40E*v~Ix4myK#2FZ0}@jD2K+ zUOp*20UE|$2I#s>dgR=>DUR0EJBt*9x`#Z(IDuUs4vKW#A6G zyOa9@&dH8RA0_;Y6cSdt3e~=xuUB9bx2m==NN`^K!L9d*>F?dU=YMD1{eRi9MK9df z7CH1qqMAXLXC8F&7lQ*V7{uB*y6eI}I%(0>Qa;E(t=mA!(R>q1+p5M7(kCIxE?u=aZdMo~vq(I`NugJU@RiaM6{hSIJ)1ZccL`ZoA7Y zVvh04+h4^qZi^oEVW}HE>AL4P(kn{Ic{kSKinEH0hAAUu1^ecq`4h_7!JZrd5iY1bUn;sF1xbMD3OVx_wxl^#Ms!R+Npc;UzWQ5 zhgLLW5HS{xC7@eDf)2iqelb`N?MyKrYz_NI&>!_rG-NwHzR@OmMI>m_xD&;^iyFt` z_g+?Ed6#}MoT92Z<*f+2B=YP=*WblFLZ5PGv1;2qD|(a|o9n=Q&weRfSJQ2?9z4fE zz6JCWkw1{02DI_bSFrnsWB+QT`k=8PORWgfmxTdHDzBj=zz!#?6fkZ(0vK_;k^DD? zfH!;~6;L1%9QLu5OXw)* zEC=l)cB%MxCsGCgYM%#O82)kuf|gtQ^W^`$^M5`z|1@F25*@?H>aHMFsZ#G(d-&uK z>&gMgJZ!q`TBhP9SB>758|4f&+;d{Ad))pO=HLAc{JYh?fo_wrb5mY;ueH5d*eUN+ z3Pr~ZLxGRWHNL~+DmH9K7NQL`c(|W4!Awcai}t;pg;S4!1@PAY8#V+bF5KRI*9p3T z7$SRh{*tF96gwpM;MkQl7S4n<$s;xq`+l9k@^`;4#Fy>+N5YV4eoVEoQ(Q~Vc!fsK zGUob;gRJTop?I%#U1D}DtGDt!GCb!_fZ4i3+H0nvJGo(9u1s^LMK4w}1y?gk!kLAp zcDyg9aOStH?M_aK?QtFNXDWPpoo5Ei33bN32604vM2DHR*Y*=hfF`yo2tX&bIRju8 z9#1I8roD%^WHs?4?LB^-UUw!savSrmh(f2>&RWLq8G@%U!t_26JA^k3*A~Dz=vbEB zVm4;Ey>Ww-q}vO583;>a@p`_8ikm5=+@pGtTi#(#BP5)d?j^h)M%=!~{ENX~dEbuA zq4*AIxfu>@vSvL%i+kULmEn6<{Z)b`Oxq{;Md@{*QvV=zh#x|_rQ3gO4#a`A?0b!6 zSFLjdKC5s#4?3uX+WB%qh@a`J)Se;FTKVlax8ph^1#J%(i8SB8#-PIN!NXQtr!D>w z$nHXZ@2otD0HtUtLt(HdrYRc;BQ)veyDV1ekWY^_{8x=481_+JAOZ{*Vj)^bL56nb z&ZHZfeT(rwH~;Pj4N=<*342f%NSGjHk>yytVO^J@r!Kw2Y@o`b9$gV)v~~=PX?5K} zqnAq6vR4ZQBQv+mL)W(p$O0Q`Q2b^an^!B}(KU+4dm9}ej-ryZ0QjEy>J(i#U;xfa zm)dtFyLAdU{g^~~cKSg2Ucf#?TrY85Im9zDJvw3U89zR4*5TzOIU#oOgS+dJ0YTjx z-Y!3ioaJjjC6nKVBE(vJ`Nbe_%8Ih-qE)s4+pS>sq`wSr{5B*k3!?z4RPF)+UvDGX zoM>-ub}tN(Djyao%|{9Uq=gFO9EzkoMHrHG!Z32wvkf{|x;8zq9P!^@s$^Iw!r;5b zJ3AJ=fF|UVo0+?RqPllz8+HN;9644R4C86ZfouO_kTV^noCz9rMoyKJjFr}(!-T#` z$tcQ{UtukaV*aRhT(r~%KUXhxi6jP8r!@YvK@LDYSZDcN#lpjBk=Ic4_%9Yv3Sf8i zrHl-wC<=jE9KTR z*SPWbrd~gi??UaL#d0Fo9t|OPQtxaO2a~sf6IRB{(;`!2=?U7``B5K@si|Ip*mcS; z2AvJ?5;H)oB>^)b;T}PmhD9#>claN&FrX{1cy#^l@M7@0h3Vhb8RY+*&$BQia*$AD zb3#K;tOYUVeRABqQgj-vXhu0RMz#Y+85Q0caCve$>1UxHT*x9|8X`gta+OVP0ZfZb z`yvD{w-nk-KA7StmhoXgHk~uHA!}1~5w_jlBX}NkThDpDZMzK6qP5V_yRgq{S5q(< z^?sKz5>I^^K=;Udb9}EL{MQG(i#x8_M6`Gvmy=`4XrsLgF~>4E{6qmUXv?iCHrRcC ziCJ`z>J1{3q3HaU>^OgHCIeVY^9SFm>GUz$%K%=ok*iOM8Jyg$FX7i$GMR8X;Agk) z2O7xB^nmF)VK{D9S54-Uu3WcPIjq6yiSwIINW=%`0Q@$G&pt?sAL;;#et2X#$P=4>ihzYSP{kS8D?l;B~);v)fPSJuB(SWGr5Xye{r)Ix49_#3N3 zZ4Yb(BMZNIgJ+Si0|ZTJs5apor?$Y4*6LTy?c`%vmzw_yN>4{ zq5v*Dha@?O0;bB4Qx>&L$dDF!P=a56VHFBGEh{|LMOzz*(xz~d+h%imJP1g9FM5{1 zU%%{I$yaOnp4!1U0G$pmUR{wMny;#plR}*ZX2bZcndwtqShmN+-bB#!4}_|#l*PvM z{l^Te-?VpkHV}s>Na}fFT5e5tp}F@hJqb&*)ue@!$~RSqCSN{l;5jh19RDUVs6Gkr*TK1ZC+C=N zlI@Z$CGz8dyk`Qil96`fjG5<)3D~X-5dwSOy_;PsI-EO?ibdyWi!PZ(LG8F|WQ$|8 zj`l!+jBUS1#Q0d#x+&E|da^M31QeB9v$>Yoye^?kj1Z3t_^3*r-;YgCq3i3cl{C9u_1qwe6GiVCXyklT&brfm~ z-xq-cCWC7xL%$eylI{S!?@=UO*Q*6i0v4Ox$`Mb{>@zjp{*5X>TsaC*ul7K)>yX{-(S0j|1eeiWHMt?5 zztMn{v@`Foc3}zk;lUQC-j6MfDAO+veHndYTQlDY|F{jZg&Ir^7iv5hJ5f~&c~?+Y zmRV67?-!o^>UihRBqQb`HEmU9@)YJ0eGq#3BjyCz&yKLIoxHK)3+T)x*P8Dz-dJsy z-QD%T0)5Ek!;(2IsBm&|sdr|}wEH^bW)cylZl?%1LVGHes-V+tRrx3Lt^u16vHV95m3tRQKa>v`%(m^LR5w7pKD z^SI!Q3XRRrr42WhFdN&(A+5{Oa^P#B`4wj&F1O&&jqxsv_C{Z9 z8p(*Swg$-`idn@ z-rS|SybCE4$Pbx4=9kX>ejaduR(Eh|6>KQ{lAWQ@HtWM*FM^fT zE?jm3N5>J@@(Qibutw2(F{N5Q2-FCwJ#N{dHr1+0g2i!3IV>pgOu zlscv+i@7gkMO8MGA2MLqmf)^AJjL@CVU`)Kb9XSNIzRfBL2#LjEaV3$&5P^hH{yA> zb1!d*-(cWeHLY6vo&b9cYy!U>>8qa66{e=D>G)06Fs^eAaBK3LAlA2T->oa8&a82^Jle zj5VIt3-CR!kzplcg8@g6?$eIdXTbh9d-cL)H?mADU6%|48H-b(;Vg-zDcw{xGKH{> z&+1f_$FE=1|MbSnWPjSQkGAg*IGn|dd@$~Vh||L8r&bRZGSJqU(2!~shp-JUb6$N` z>$o6E1;I{6O%(${ujSax;;WLhxZ+*lEB)}{U+s&H+jB0R0LKv-Qc~??vk7}WZO>by zaKpbqJa0G2doEsGHoaBMO_Tw$BA6%`Eer0H#mk?zo6{UoRVpMKZEH9z1?S?@{8jdg z3NQI-Yt)Qu$z7c`IHD`()KI;B2LQj)7H|i{xRlX;3pD`$A3vo&u#084rE?RRLOs?^ z=h{iW!lh5xRvz_PbC;|vWXI_Cf3j+xzQBHiu_1*n<*hi;d1CfzqxpvpeEwPETmJVr z5!&W6$5~t!0-V#YF5i6gb+ri#Sil>wjcs8ffL0vv%ppAszZ|NrCGiMeF1e&9f4QC` zc)i5g=)h*HMyy|3tn^aU#LcpnUcMt&d%OfJ3a!iRYU*Rsy%;m|r`jtgrpCWks9$na zEQ`qrd2n1L=oOpDy@evltiZTQvko5@nN#fvEz)n}rMMOA<6a$CJ*jCQ(xp=|u>N4U zcYsC5s`vBba6LW=2?kbnZD_P<*2~ii5_^1G*O98#-%71c?_ zDXKS0AK|*};|eEN#lOWY9iNXLoq5deCRJwPl{G@}9I4$m*=0m2pTohr4(KJG2FA&@ zDA3N7j{f(vLkK0jJlitn?Aw-X2Z8pJ;?>mGyfGIFFLtwN1*RM&c4|Gi;wUu-Iq8s! z3<;2?_ovnr`>><(#vCpu^C|1s3`HmnX32c>V>qTV*05}ao5Yt;T##f}xPyad@^l(D z1K`YtKwf7xHrxh`j`CJaGXmMOXVIMAF1ke4Jhn3rheZNq(eolzuEE+F4^3~gewK() zycyT_L^p+g`G#AW{dhp&ER@r`f=zgJ?OIZHPM5t%^(O|t$WwiS@fBbx7b!uvmpX?t zcWdEfCyI0JM#G1CU}B<^{WGRemIIPyw>mItSi)jK%{8xAs+#!xlPuvj1L`@?+gUCc z;@n)1d#OBJ*KKFz?OfITh|#OI2Rv+SA9{0O=%P{$$SKk`+O`g0(N@qTC|#*5;969j1BF zv)vO7LiPva!($IRN+-hwL(@$S$Cc^xS~qDk`3pJYW(U*;x@e_ZMZ^{WD%&AB`h*h- zJF->>yp;_xp|C0uIH&$6@dc^b|Aar^^j@#=UE7{~|E0EnH0NnMj)-J$O6e&4V~ zzXOg53cF_9jvnjqa00KN45RAgj+>87Yc5QhOm-EtR* z_%yK9aNW&Z;8ZLCpVymIjH`9U15~7ENTF2}Cxnv>e@J9ZEO@wLEMT59Fg;CsEB9fO zxe~@T@p(coT!Otk4plGB*VN;jM0IiS$1V6f!E}6Zgz8P8b41FrfpNI^@a<4iHQ7}x zij%MH+Td?1GM#7fy6zZ0^3Oanu1%mX459MD;b1uW*$Y{~<3lzJTmm7UcDQbJv{P`V zTOzf z3FkZuvy_R zhRR`Ch*$(yP5kj^&wLKqs3cm!(`e85+3eTnagzhcNSg9@;Rw1X)1xg1b?3 zKQL*?tUT<@<|(q-onaTzj}^ln-le=#iwTfB^_tJOTdg{o(zqVKIb(;fi)IFH!~iiT z{=#keF}rWyx)=_5xW?;>?dmkqjUtnm$&NLV+!s-6y=}v%cr!)p^P3B2O_Ep@F}P0kTR6<1V(Q^h^mF#Y zjQ%X<-&J++L;Nz>o@d2Wy^n-nkL_OaGZ8q4_C(h%knKHa5as=Hqn@( z<{(|O0+0;3md-3c^J$kehs@G8j%#Oo`oQRTsqFaiTu5Z1Vg^mL#O4PQ03^gB{meyY z<-+APlNp!t5kJ4ZQKm9p+oX#GG-FR7oJ6M{+Ic}ZhqR|_uW>Jmvt9+&KmN=_$qcA& zg*L;+m1maZXE?$?k|%UxHsd2K5orjUn+fBVoLeBaf* zq2v-CaB+k#veK2jy&=FKnlQNo^V`?>rU%!5{rZ`6`ek{gyD^!JJ7VNQX(M{MR6_8Dc%H6S= z#NgLnvCZW}W@`yQDVbIip8(UD)CWKP)(m`nh0*E^^Lh_c|ME!@W}*O$k1xO$RTl)L zwS%vDrs&^)F>GDOh$Ba<3z5s05@Dn`vQHr(lvFFVtrrR0t%{$fw}Ru3zUXsNb<43L z*80RcuMr#6irk9^gvt=O1-{zR`+B*{bAmF*v!5R@r7KmM=mPVDU^-!UQ)aiq8dy;JgVP{ctDVNDKdbNpY7warC+?( z73v;_?{74pl@--X+8Wx|J>p}0S)oqz&@KLjGweGmW=w*hFwAKnY%wMPzylw7aS%S@ z0cGwhIA7Y>a1<#9` z7jLmJX+w-Pq8=-re5lM11yWjDUF2M&sYa<2Ve6+B!HJY4XV!kvKJFUJWP#tq+3^ak z;v~kWJYJ#Pq&7WV(3n;YNFAmppYnJrtfhMdv&_ z`)L2e%P|J@H`mXnr_YhM=U@y#XZdmC$N-_yarsE4uuJdcFCkA>uU(E>>1d>p$}hME zR^L~w0m-EqK;r?T0;{U!F9v4M#e=@IeEn*^LP~w~ zkmE-l_jRco)xecwxZ9~G&}iC00f2aLGh`d}abrA!(iahx;J zx|azMbJ}5(4A`dq7I=bcltsztVRD;$X zNwH(h?eCu-lE{_zbmm)K!){q`BFzsw<({wigSSwyBl=6y`>S_od5y++m*eEN_5)Dc z!;Pv~W_#1Hk>%}SAoYxn}vL>#)ef!|f=l&;{`#s&p->bKAEt{+k*Pg8b7OZFP zH4eCxDzTKBwO5#p!yK1ozR32pgvTB4W@63N0$mV2-Sgz?mChID=f-z+k!i{i58j?T z_#(0V44_|BLG4QKlApEFuR)kkA}$WQILSW!;jE;a`d;tRwGN){vEz4+M@3<`2yjbA zNp=HIVF@z22-(`4+yY@C&}zd~Z&=$2(F@P#7Sy1upRfkMmfjXSby4T6hIHiVGlr3h zgfpM1PBZHPo1~+Jk$?NzrCtqc zg;yCzHR|Kdp`9auEYCVOa(o5C()c5=x~?`n%iCFG(2DD$_3ldGzl6vLL;z93(8v>2gu@&FTF+BQprx4BND z(_K8D#Ypj9y^PljH=MfyS1@s_lsM&$A_WrRfe7H}IEA>QgtRbDHcDTQm2ee2Po z?*6<=pZuEOYpKBl?FyHYl3Mw+xfv!9W0`UWGsmQRmP~6yJxrkX{%%IPio~iyh;XDB z#?0%2QrCpFix}i`^7xI3_cK8e+qhRyF2t=F?3hd2G-ngpWsaZf?~q-VZk=5d>^lEQ zh3(_#Ju^husl{XM0~*WKTUal5Fh%Ms%e0+|PrhD2ICZl;TW7peF<`|7E+ODVmtCFr zC6y94CiEa29|@3m8Q_sd<0mxq6DPI)%9@boqw;QU7h-M+#3~pZ)3otC!r=VmCr$t& z*)s>1`QeP<^Fp#s<$k>*t{vrhFZtBt#rx?*yG`K3wkNQ#le)a{%H{P+;?p515tvqz49NNP=LX|Yfsd0h1% zV@#_syU#|D@dnm%-f&pxmM*QAR%78r5@3pQkA`-^8C8|sX8pi4xE`UY<41m&_!uc# z?P zof@8x_Xd|Of@gIv>Q<09=O!BbCEA~_7#{?rI#+|c4a}vjqwa|6m|UM6kRxq#$1@u9 zf9ccJv@b`QeW48|z-4(TXl1w5_<+v)TM?8wZn|%SXTY7VT)=1Ro5#Nl?3l6M{`Tt+ z;Ej-K&)k;)8v62|Rg%AdZ$ZaXh9_pvHYL9HOcI!m_4BwWD04x*(5$hde61kjTh|AM zgyu31d^8Og)riD{(T8zeMR0o%i_3&&kiW>^D)eG;7WiFmw`utT( z{#7me0gwpKeZgdXbnr6-rygKirqk)dbP3@G53@!b(Ej(uyx{^tuMUHy*!asMJ)|L?_{a>^DB=w*Lqp zwKRa)G(h5;se8sza-Do|6$KrW`ZHW!bg0yW1<6`BVA&M2GSwbYd4nzDk^09>j`W7> zDq$ta@Bonk)nj;Fqy_l~Q2<1~S5|E(5Zh*)s`7c)FZWG{q?rbd)>zthssByxQ`Q^s z3`})aMvqcnEfxF4#XtFpxb@fF2?BP1r@DFrF*YYJG!7%?cUmQ%k=N8eMLM-_RB-Z#oMw`)(~tpox)%r6(?Y22FWw$v!9j6l5_`_i#;Lbe_*y%@!joFzbhTX2LixNf(P?{?M#I^_Twu%yiOm4LzLSE&r>oPvTvScYQsUS#a_Aa=&?^oy_Zm9PyMwJ*NWIZK`_k^Fj$ zK|>eRR+j56J?)?Qc?YuV(0(7qKpzxV8=~qGPwA8GvdF33y2*Ebe19mO*#Al*#>^{Y zYurHlbC(B?w%?8z;ii*Nfp7W5uBygU()(iQvOr9d3SHYp+fSb% z8tz4{@BU&qz3dy@TkiSTc0+{Z~s)Kk`ZD@n;C^%{}ZmIdQ2id8kn zCk_{PC?0t?$sU5t(4DpYhF6Wl<;x?-p40EX8>Jj~%GuH|=tc+hU+g1P>QwY&@e>Zda z`>{{PWjPS*wm^X%9L#-`C*F5J$Gt<1iPrIe2QS~Xsl`gyBGW0I#g@bnJ2Bg>3oIpP z^>iegMOnThWQmtBj6(s?r6jb2M66l6KvG?fcYx2~Nw~)F^C~V)&a*ih))RH!pGB2+ z7Pwzv%p?YM0Jq!Z%jqQp`-eRf$1#Pp?qnk57@*ORXZKE+&2O7hry@(qKk>&lu$kS3 z9lW{cT5>;S$ScUnh)B6O@&G{O(`^<|V>_2xP>1QUO`u3)#}Vm!KJ7y7kcWK8caw>` z4-2%dl9o9uuJVhy!FBa+XXT~(DNE$=i-^Gw1+&#Bxv;4V+fdE4A~>E)q%)h1y^3JmO8JiARVG8F2G9T}OH62b0$94n;r zQoI|uheOXkCR%;*HV8rIKl9PM!<;%M ztFp<9*)Uv1$IWFNBbFu1VJE<**zfav^;Q8)ulTF4gg9-wBH9}j*~PAF>#k@`mK?%k zV$fFzOl|8n6I}whm_{?DAn#cHs!-imT{^PjHEGXIHH0NSGw?~7>aKiyBmINqM8eWe z(withI57cPFkSh!VS*3={{ZamtpB{Xga49=W&Y!@_zIFoPW>el3l63KC1K$!s*`r_ z6IBxU^}nGz;s2UrGU{-_PIXAj#MLKSxxQ)MJ?h1S#{q>8OW129m+F`cLfk2L z8VlH?=dZmuLcHgvf0ijE|Fvj(RCJ#0w@uYCo>?U3P*GRz$N z(&?apN$7Emh>sozXDmB#;QG~mS~AGw#Z#aU_Uh!C%X+nnR$0l$xrXYu&M~%v*RJfc zUQy}j7kzc}qQuNEj(3*Z<&7O}3oAN{(&9ej=0KT6f06<}DX7-@ofX#4s(`6gthAi(k@ z3e2;5T?kMb^p>DAA0za&E5jfE=CZv~GIWvCQu2FhX}mL?()FWtkmTY~;8vDD$ZcdC zLN&?q?t<}+vzJ?znt=AbKh|jvE+>jT8?SayZ2dQ$Bvu&za_VAfrZ!Wk(kBG8IQ(fm zcp{C{hnH9VnP#Lfukrn_p7kH6-ZV$d$pmn(9&ARr!%mVnJ9vG!m*lpWO`RiiFlo;O zH)7Agq`$bTbc<+O!_p1C6vnlW`g(9nIAPJN^y6yoe=r;Vola)|?KN-^Igp40cBj@K z33M(buU);>lA;sqv~{mq=H0qq3>b%&YWay-RTJd-WJ3NdE=<)c00LKS?Z253b(6^n zyXjbbKVgh(K5nHO=U&>{8m>3)aX++l<7O|r%IW0gRHFITF1a3$p*_rE|H^y}x~Z zwVHiy=h>5c{qR$iU{8`d4B$hx+@PLdEJ%gF+VOYmIw-E;l2z=_*4%AzZA4{pZdx=D zDEMT6FcQ}XZC$_BI_#`?ex#Z|(}l8AG;oBz6|vqZF#~7!W^Xp}cDp%P1-{GhbZ|ZX zFAFWF1lYl__>zZkHI5ySB6(3Z!Dx=YANQyKF#7SB_}t;yOs zd3g6)Js4&uS0DGe-WCxGOm(uPe5gC^wjGp{dKOJp{SnGuYt(m1XGLqgf}{1~F8V_w z8_}T!#Wll4hPRK~)VO}?aCn|)09x1FOC}z!cj5Fl(;#}jCkbpMSeA@pr)#jazqNY2 zM**r1kZ-+0P-TefZE)M?E5gh_4oxR4jYxDGuOVtD8AvzZZZgdaZ*4=OvM@K1uR&Ft zE$?fC8vU$^qS|4Ide24$mB8;dMq=!fcOe-u)wFsKbm*SmLxcs{tdxB3DNvcTeb{ML z`{tks(_f38^2+~$44%9ikGr*65AJ~o(+7}j5XpV*-_iE+;MA9wHOh+qsq?5C+-WA* z8If4uo%)c}$(+sqrWpA5Nz;baLihSKE8{ol8!TY05DUMQqqadqTBp`B3dk#Bu9=W>b=JCL*!QYNWEU#*|tz|Ec)21P7Yc*)RY7YMV0Th!a^{QQoUZw zY;NkKYF1{Zbx@le7p3!QKTOp+8a`RTth~De#xPKF&L&gK=4;aoG>cIAs=#+CXAa5@ ztsCSX7^o7x&P0s-Nsc7ys!HT`?^Pk$3a4u8p~>a2p{hjEwR4>jVVQawhYOmI45VvT z)wY%h)=r^R5NfnnK*J)=c)xUB7am-UZZB3jBWI8Ho#iyhP-41?a%Vus9n4=+H39aA z^qvh{Uw`^A`^FN_^~0t8CUsYxziP_@aaZAQBHMq&{QQ$Q`ybt*f9Tf@ls%u@^A1dy z-w^6)EUwYAxxO^_J*b68iTltD76@IR08&#Br|K6m!dLGAAdO$xypF8k++2A16#5{f zv6222E)Z}M4+}=}ogcbHuG8gfzy9tAvcBPU-26ds>;5k0i~)hzUZPUY$=JNPeH*0*i-QJ-D%EO^avS&1 zkJ2!79`AZRha!tW|Ue1EaAmY z_teV=it%hZkugg-gQHkLrV{mELxE45!U!vZX4`QSsy;sYqQ-M&{|uj&^iYa|oH_Q` zC9&z2^3i^{gaeXrUr5w+NNfOe+FP_8bkgHS>pQ1$NuQ-r<^ju<$lW4`OgexM3cPUf zU<1eqk&=rlj%TvcKN@_V#m>0Wg}^YIkq$uJmX|-2AxX>+rE)%YLEI``J`n%Vw^_~d zHu#Xvt;OF%Ooc5GjsA=FWR{t7p+!2tLAKE0W!j-ZKmMC)9JBd6t*gXiard z92plOYudTq@)rP|+g2+XN6IG;Fc3ChSK)$FRdJqsCRgk3``?Z*%Xd9~a9}?0i{UX7 z(SQD0atA70;1@&mCif;qOrQV5E!y{9^O|1_^;{TiR&o{c+4XsI57oWdpKBDt>g@gK zMuk}+<$HCp8`D)59(^==f*ZYh$w1GfW_rPN0>HPm{d$RFW$3-O&gsEKh){V z*%V_c57T8jU zfDVY$0{!@*XT;$YAHm}KE0=yM>!U0MA6J0(T1Vn_DbL9$yy})I0z}p;A-~-iRZ`Pt zHp>JuxAO)Zd%5sjH&8jQ1$|@{Dg;qATY>NmdVrB^tN01+S0v6$o^iB1;`5??p>t7( zZ;0A1Vm4}PBLw77!J6Z+p+-mC$W8 zX?RmE8DV1xs6!*>h2MVz3ODQ2V?besPS%?}p*~$~?KdZ@RkQbLc!TAvGa%|La-&ag zmikMn-zt<#<%sjRSS8QCY{54;(55jcvlGcpsTsb!d{k%0kb${BE8_ECOO5{Ddw&15 z2pv1i_8}OzL0MH{b3({l5sPZKI=oQML#aOBA_g`S={KmN7oi~7olVKCG^dp| zKshD#51lIg4axF9{Ph6{yB3kw*Wwb98d6sTpPKT9n-V6sCPuZvs?S$=&*qFVCj{Hg zz9D?Dn)n&-Fj@QsBjYW+hp&x7fU?ZJ{Ri88&lj>|JxV9PoY1!5agiQBYQox(GUk=6 z4wF%Q)$x(VJQulK3}2|<);d$+JOXsWDuOF#Z#i!JMN6~`lqQE#`7U}#wnMH~^oLZI z-lbn^BG7`<%)7ytm)C3iL{Er%?zjy#he|XHts>wAP^?)agA2z^S{BJc+P%4XPN$#69r|6< z^H-JxO^^B+s-GWt>ZNl_pDwUBGeYB*1<@%k^z%)cH%1&0y4fc7hutmrEgJ z&vs(xA{X`p2E{Za@Bd=(F8ZVTSHw26IbJ+x+=C|P>yiz#?_RAO@Tt4+d(zSdF;|`v zkO6QUNL3Q)?n4K~ohUA#)UndHZXrSBP0PG_!mnQi-PNGCs+$>QA!BFRHar6pHhl7J{{VCd$*tHh;Y+ml z2opR`Uba+7>l5`Xoc9yojSsr;Zo|_UgGB!~WabP_AbNvV4jKPt}N#rC< zt^Q)@F2jPx%6F5`%ToiIdK*{q9BZ2d96t6PU6c@#=HtFU<;NYM{spqtRo#czDtZxx z5fkSVN?G<42resr#xs@pO*yF|y1&mw#NBm;|G9k!!o`om1SkJdz?NuV_iL#YuT4`) zx%);7S$~ITA31HDC*J`YkDbAGe<`{~rbz@juo+0S%>PBIg4UIslRCnLZ%xG6CaZ zV+|xhfXpt9IIV&cJ2z~ExX6Su=RG3MXO<-UI}2gy8spU@ldcH*^YpR)7I zw>kSyWBcpD0PC6T8QR8iz)r3OU>sTGzCi3>4pfkapeeKt%C&UtsdeVR=`FENxAsw! z!oB$}?Ub7lWGr1Mlh8&F!pH&;S2vulk^NT#6Zh%Q_LwRQCy0>mSr~a>ueJT%yz|3m zB$A*A1QBrs|HjZCC)TpI;z@;7NuncxNjMH-g)XV!aa7i70FknX{^fvLHOC_Ix!<3c z^5?hm=L7aXJ6GyZ;XonXCDekM478m(Il5{gnY5=pAh$UagI^i#98hPe4>>%^l~d4r z{K|$@QI%Om@{Gj2EaO_d|GGK?Xo7wW`6b``3>}Bv!Qe43OReh6ZcBIoYS;g~>)AhK zIBuw`Z&cndW8F05BD+Jm5@PkKKG8CosnAA*nIInqugz}-9ja_`Dbv9hFU*)Nar&&l zT&Cm8<8~}}iu7LmVRI9f*HB__5@x6uuibnYqXeyrT|Y#OJVBV7H6_FECU2|?pOaAW zyXKQ&ifXaSiyiF)n#dZN&@Uh?hN`ddZzO2;pD;sOupEnq4S+hUNS@^M@I}mL5>SEz z*3VXWNQR?ta^%`3T3>X{^oBA}zhBAW*c*rRf*w2gaa)x+A+OaT1H;qe%PtTL-2$`^{-e}*1)L8E{0q~SSOm*_Hs z(`{x0CDoC9l;IK5vg$MX;pT`kTkIcBFQ^$?qT$SA>mns%#SgGb&y1$~jQ_!WsITJHpg|c|;Pz9WaPugt#ywu2+#G zb6O$h7uyBzHoM=qmN+8lsz{T1p-z?GWU2nc&g)tQt+5&xy2tsD`WX0jy^U^q3hBV2 zni@lY7~N$>Hi(YYBUEVl0esX4TiM@LE%SAJ_sKU3&-+Gm z>zTa$&(2rCh2Sq;4UH)*0L!@qAQuAbM?JntpA-y8296Qs=^g1nNlF_ixzT`;`C(O{ zum(up&0Qbjk%8N^)43o#BGw1!Z2noL^*=){`dj|@6EqgLbu$1Uk&V^@(r1~(X=5fL zg{}o_M^boqshWQBvqB;^l zt)nS`s<7#zW}HSqkIZZtzi$aR*`-Anv0L`rXz)_0J>48U8ybkXF-N=myi|~lRdvTv zy74u#v3Rhc`2O3P+jZh~yHiiRE4wTN2||HQMB#>fTcdYkIt7n%&Nd~xo`$rg?yFUy z$FXxpy7b~4>iK@_pI<7w#%o9|54IQ&8j&~5gn59J$j@6EU|y}mgdFN|?Ly`R>*V`& zwolzwZkE5HD+*w=(BZV!MHeeu??E~C*&KTIOwI z2mg>U(PyCb3#TnNw98^pmyBC6gi624d4FXRqYEEgy$E4Ujz*L5v;ddNoE||*Wc}&x z8r+_zaU&H%K1SG{wT&V_Yc+LFcLhx~D)@{*_YQRX4n~mb5?9qmhaUW`&(dLV@k5u= z`P#Y=l`ye07E%U^A9q9mE7j0;&?pKpG?iC0K`5s3tp22dZz3x$^dV)AoQ5p0`Q>sC zx{m5f)DgGn-O$tYlTTs6P(F!f$E#+fFr)Mypx0fAp|kv)R1>ng zt6J1EE{6bNv391t7}mIW%`0-K8*mFf zNY*^We5zdExaCYgcn%qwggROE4nxWZ*l|fVLZe}U%?GVm({)v#JaX(PSsy^t9U(Ux%&^Y^T3Xgb0E+RyTjKPzLc7qR1Q$KJr`SNC89A= zIS~W@g}wKVYieD$g|Q$gA_CG&P(YNbfFKA&L_kDDP(W%_K$?J3g9M^f=>pPA=p7<8 z^dMakkQzFK-bpASKoY;{-glqhUTd9u_Bs38=lgy4-1P?#GRb7lcfRcz&luw=3iVNkdF#h<5v!2-(e7Sl9p5Y6Ucg4uHZgQ1vjGA0oSr30}Xf~y)$~*rN%(;UerTfCU z^&V{nKfRntNKlF^G$JE=Dw3)2n{^2ou%0D2%<_XlrseeR%TE>g?jw6+!jQ5qa*O(? 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 SNCS`tAPqno__PK-bp8_}0Hg!} literal 0 HcmV?d00001 diff --git a/web_JMW/docs/flowchart-sistem-utama.jpg b/web_JMW/docs/flowchart-sistem-utama.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0613321ecab457c3771d3d0abc2b24aff62165af GIT binary patch literal 240480 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 z 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 literal 0 HcmV?d00001 diff --git a/web_JMW/docs/flowchart-user-sederhana.jpg b/web_JMW/docs/flowchart-user-sederhana.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07914b7ad15c298606f1199c56d350c1955a7246 GIT binary patch literal 151565 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

HAQ5T30driZDQvUB%5L(Q)Wt)d+!;1}I7(g^9 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%0A#NqdCf&r5sU83GS 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%0Ds7aD$@?QQ?6)YzwNiNwDU9KHBuGm- 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%0Dx03N!_a=YQ1!TNn_mSO2zpI3BIN3;j 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 J8~R)C{{w9Nrc(d_ literal 0 HcmV?d00001 diff --git a/web_JMW/docs/merge_kmeans_docs.py b/web_JMW/docs/merge_kmeans_docs.py new file mode 100644 index 0000000..f4ab388 --- /dev/null +++ b/web_JMW/docs/merge_kmeans_docs.py @@ -0,0 +1,86 @@ +from pathlib import Path +from zipfile import ZIP_DEFLATED, ZipFile +import shutil +import tempfile +import xml.etree.ElementTree as ET + + +SOURCE_DOC = Path(r"C:\Users\ASUS\Downloads\Penjelasan_Rinci_KMeans_Rekomendasi_JMW.docx") +APPEND_DOC = Path("docs/penjelasan-lengkap-kmeans-rekomendasi-budget-update.docx") +OUT_DOC = Path("docs/Penjelasan_Rinci_KMeans_Rekomendasi_JMW_Gabungan.docx") + +WORD_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" +ET.register_namespace("w", WORD_NS) + + +def body_children(docx_path): + with ZipFile(docx_path, "r") as archive: + xml = archive.read("word/document.xml") + + root = ET.fromstring(xml) + body = root.find(f"{{{WORD_NS}}}body") + + children = list(body) + sect_pr = None + content = [] + + for child in children: + if child.tag == f"{{{WORD_NS}}}sectPr": + sect_pr = child + else: + content.append(child) + + return root, body, content, sect_pr + + +def page_break_paragraph(): + paragraph = ET.Element(f"{{{WORD_NS}}}p") + run = ET.SubElement(paragraph, f"{{{WORD_NS}}}r") + br = ET.SubElement(run, f"{{{WORD_NS}}}br") + br.set(f"{{{WORD_NS}}}type", "page") + return paragraph + + +def merge_docs(): + OUT_DOC.parent.mkdir(parents=True, exist_ok=True) + + with tempfile.TemporaryDirectory() as tmp: + tmp_dir = Path(tmp) + + with ZipFile(SOURCE_DOC, "r") as archive: + archive.extractall(tmp_dir) + + source_root, source_body, _, source_sect = body_children(SOURCE_DOC) + _, _, append_content, _ = body_children(APPEND_DOC) + + for child in list(source_body): + source_body.remove(child) + + _, _, source_content, _ = body_children(SOURCE_DOC) + for child in source_content: + source_body.append(child) + + source_body.append(page_break_paragraph()) + + for child in append_content: + source_body.append(child) + + if source_sect is not None: + source_body.append(source_sect) + + document_path = tmp_dir / "word" / "document.xml" + ET.ElementTree(source_root).write(document_path, encoding="utf-8", xml_declaration=True) + + if OUT_DOC.exists(): + OUT_DOC.unlink() + + with ZipFile(OUT_DOC, "w", ZIP_DEFLATED) as archive: + for path in tmp_dir.rglob("*"): + if path.is_file(): + archive.write(path, path.relative_to(tmp_dir).as_posix()) + + print(OUT_DOC.resolve()) + + +if __name__ == "__main__": + merge_docs() diff --git a/web_JMW/docs/penjelasan-contoh-input-cluster-centroid.md b/web_JMW/docs/penjelasan-contoh-input-cluster-centroid.md new file mode 100644 index 0000000..7919e7e --- /dev/null +++ b/web_JMW/docs/penjelasan-contoh-input-cluster-centroid.md @@ -0,0 +1,195 @@ +# Penjelasan Contoh Input Harga, Tahun, dan Mesin CC pada Rekomendasi K-Means + +## 1. Gambaran Umum + +Fitur rekomendasi mobil menggunakan metode K-Means untuk mengelompokkan data mobil berdasarkan kemiripan atribut numerik. Atribut utama yang digunakan sebagai fitur perhitungan adalah: + +```text +harga, tahun, mesin_cc +``` + +Ketiga atribut tersebut dipakai karena dapat mewakili karakteristik utama mobil bekas: + +- Harga menunjukkan kisaran budget atau kemampuan beli pengguna. +- Tahun menunjukkan usia atau kebaruan mobil. +- Mesin CC menunjukkan kapasitas mesin mobil. + +Ketika pengguna memasukkan harga, tahun, dan mesin cc, sistem akan mencari mobil yang sesuai dengan input tersebut. Data mobil yang tersedia akan diproses dalam model K-Means untuk menentukan kelompok atau cluster yang paling sesuai. + +## 2. Contoh Input Pengguna + +Misalnya pengguna memasukkan data berikut: + +```text +Harga/Budget : Rp 200.000.000 +Tahun Minimal : 2018 +Mesin CC : 1500 +``` + +Artinya pengguna ingin mencari mobil dengan harga maksimal Rp 200.000.000, tahun minimal 2018, dan kapasitas mesin yang mendekati 1500 cc. + +## 3. Contoh Data Mobil + +Misalnya terdapat lima data mobil yang memenuhi batas budget dan tahun: + +| Kode Mobil | Harga | Tahun | Mesin CC | +|---|---:|---:|---:| +| A | Rp 130.000.000 | 2018 | 1200 | +| B | Rp 150.000.000 | 2019 | 1500 | +| C | Rp 170.000.000 | 2020 | 1500 | +| D | Rp 190.000.000 | 2021 | 1800 | +| E | Rp 200.000.000 | 2022 | 2000 | + +Setiap mobil kemudian direpresentasikan ke dalam bentuk fitur numerik: + +```text +A = [130000000, 2018, 1200] +B = [150000000, 2019, 1500] +C = [170000000, 2020, 1500] +D = [190000000, 2021, 1800] +E = [200000000, 2022, 2000] +``` + +## 4. Penentuan Centroid Awal + +Dalam K-Means, centroid adalah titik pusat dari sebuah cluster. Pada awal proses, sistem menentukan centroid awal. Misalnya jumlah cluster yang digunakan adalah 2, maka contoh centroid awal dapat berupa: + +```text +Centroid 0 = [130000000, 2018, 1200] +Centroid 1 = [200000000, 2022, 2000] +``` + +Centroid awal ini menjadi acuan sementara untuk menentukan mobil mana yang paling dekat dengan masing-masing cluster. + +## 5. Proses Pemilihan Cluster + +Setiap mobil dihitung jaraknya terhadap centroid. Mobil akan masuk ke cluster dengan jarak paling dekat. + +Contoh hasil pengelompokan awal: + +```text +Cluster 0: +A = [130000000, 2018, 1200] +B = [150000000, 2019, 1500] +C = [170000000, 2020, 1500] + +Cluster 1: +D = [190000000, 2021, 1800] +E = [200000000, 2022, 2000] +``` + +Mobil A, B, dan C lebih dekat dengan Centroid 0, sedangkan mobil D dan E lebih dekat dengan Centroid 1. + +## 6. Pergeseran Centroid + +Setelah anggota cluster terbentuk, centroid baru dihitung berdasarkan rata-rata nilai setiap fitur dari anggota cluster tersebut. + +### Centroid Baru Cluster 0 + +Anggota Cluster 0: + +```text +A = [130000000, 2018, 1200] +B = [150000000, 2019, 1500] +C = [170000000, 2020, 1500] +``` + +Perhitungan centroid baru: + +```text +Harga = (130000000 + 150000000 + 170000000) / 3 + = 150000000 + +Tahun = (2018 + 2019 + 2020) / 3 + = 2019 + +Mesin CC = (1200 + 1500 + 1500) / 3 + = 1400 +``` + +Maka centroid baru untuk Cluster 0 adalah: + +```text +Centroid 0 baru = [150000000, 2019, 1400] +``` + +### Centroid Baru Cluster 1 + +Anggota Cluster 1: + +```text +D = [190000000, 2021, 1800] +E = [200000000, 2022, 2000] +``` + +Perhitungan centroid baru: + +```text +Harga = (190000000 + 200000000) / 2 + = 195000000 + +Tahun = (2021 + 2022) / 2 + = 2021.5 + +Mesin CC = (1800 + 2000) / 2 + = 1900 +``` + +Maka centroid baru untuk Cluster 1 adalah: + +```text +Centroid 1 baru = [195000000, 2021.5, 1900] +``` + +Pergeseran centroid terjadi karena titik pusat cluster diperbarui mengikuti rata-rata anggota cluster. Proses ini akan diulang sampai posisi cluster stabil atau anggota cluster tidak berubah lagi. + +## 7. Pemilihan Hasil Rekomendasi + +Setelah cluster terbentuk, sistem memilih mobil yang paling sesuai dengan input pengguna. Dalam contoh ini, input pengguna adalah: + +```text +[200000000, 2018, 1500] +``` + +Mobil yang memiliki harga di bawah atau mendekati budget, tahun sesuai, dan mesin cc mendekati 1500 akan mendapat skor rekomendasi yang lebih baik. + +Contoh mobil yang cocok: + +```text +C = [170000000, 2020, 1500] +``` + +Mobil C dapat menjadi rekomendasi yang baik karena: + +- Harga masih di bawah budget Rp 200.000.000. +- Tahun 2020 lebih baru dari batas minimal 2018. +- Mesin 1500 cc sesuai dengan input pengguna. + +## 8. Hubungan dengan Kode Program + +Pada kode API Flask, fitur yang digunakan untuk K-Means terdapat pada fungsi berikut: + +```python +def car_features(car): + return [car["harga"], car["tahun"], car["mesin_cc"]] +``` + +Fungsi tersebut menunjukkan bahwa proses clustering menggunakan tiga atribut utama, yaitu harga, tahun, dan mesin cc. + +Proses pergeseran centroid terdapat pada bagian berikut: + +```python +new_centroids.append( + [sum(member[column] for member in members) / len(members) for column in range(len(vectors[0]))] +) + +centroids = new_centroids +``` + +Kode tersebut menghitung rata-rata anggota cluster untuk membentuk centroid baru. + +## 9. Kesimpulan + +Berdasarkan contoh di atas, input harga, tahun, dan mesin cc dapat digunakan sebagai acuan dalam proses rekomendasi mobil. K-Means akan mengelompokkan data mobil berdasarkan kemiripan harga, tahun, dan kapasitas mesin. Setelah cluster terbentuk, centroid akan bergeser mengikuti rata-rata anggota cluster sampai hasil pengelompokan stabil. + +Dengan demikian, fitur rekomendasi dapat memberikan hasil yang lebih sesuai karena mempertimbangkan budget pengguna, batas tahun kendaraan, dan kapasitas mesin yang diinginkan. diff --git a/web_JMW/docs/penjelasan-contoh-input-cluster-centroid.rtf b/web_JMW/docs/penjelasan-contoh-input-cluster-centroid.rtf new file mode 100644 index 0000000..321da0c --- /dev/null +++ b/web_JMW/docs/penjelasan-contoh-input-cluster-centroid.rtf @@ -0,0 +1,106 @@ +{\rtf1\ansi\deff0 +{\fonttbl{\f0 Calibri;}} +\fs28\b Penjelasan Contoh Input Harga, Tahun, dan Mesin CC pada Rekomendasi K-Means\b0\par +\par +\fs24\b 1. Gambaran Umum\b0\par +Fitur rekomendasi mobil menggunakan metode K-Means untuk mengelompokkan data mobil berdasarkan kemiripan atribut numerik. Atribut utama yang digunakan sebagai fitur perhitungan adalah harga, tahun, dan mesin_cc.\par +\par +Ketiga atribut tersebut dipakai karena harga menunjukkan kisaran budget pengguna, tahun menunjukkan usia atau kebaruan mobil, dan mesin cc menunjukkan kapasitas mesin mobil.\par +\par +\b 2. Contoh Input Pengguna\b0\par +Misalnya pengguna memasukkan data berikut:\par +\par +Harga/Budget : Rp 200.000.000\par +Tahun Minimal : 2018\par +Mesin CC : 1500\par +\par +Artinya pengguna ingin mencari mobil dengan harga maksimal Rp 200.000.000, tahun minimal 2018, dan kapasitas mesin yang mendekati 1500 cc.\par +\par +\b 3. Contoh Data Mobil\b0\par +Misalnya terdapat lima data mobil yang memenuhi batas budget dan tahun:\par +\par +A = [130000000, 2018, 1200]\par +B = [150000000, 2019, 1500]\par +C = [170000000, 2020, 1500]\par +D = [190000000, 2021, 1800]\par +E = [200000000, 2022, 2000]\par +\par +Setiap mobil direpresentasikan ke dalam fitur [harga, tahun, mesin_cc].\par +\par +\b 4. Penentuan Centroid Awal\b0\par +Dalam K-Means, centroid adalah titik pusat dari sebuah cluster. Misalnya jumlah cluster yang digunakan adalah 2, maka contoh centroid awal dapat berupa:\par +\par +Centroid 0 = [130000000, 2018, 1200]\par +Centroid 1 = [200000000, 2022, 2000]\par +\par +Centroid awal ini menjadi acuan sementara untuk menentukan mobil mana yang paling dekat dengan masing-masing cluster.\par +\par +\b 5. Proses Pemilihan Cluster\b0\par +Setiap mobil dihitung jaraknya terhadap centroid. Mobil akan masuk ke cluster dengan jarak paling dekat.\par +\par +Contoh hasil pengelompokan awal:\par +\par +Cluster 0:\par +A = [130000000, 2018, 1200]\par +B = [150000000, 2019, 1500]\par +C = [170000000, 2020, 1500]\par +\par +Cluster 1:\par +D = [190000000, 2021, 1800]\par +E = [200000000, 2022, 2000]\par +\par +Mobil A, B, dan C lebih dekat dengan Centroid 0, sedangkan mobil D dan E lebih dekat dengan Centroid 1.\par +\par +\b 6. Pergeseran Centroid\b0\par +Setelah anggota cluster terbentuk, centroid baru dihitung berdasarkan rata-rata nilai setiap fitur dari anggota cluster tersebut.\par +\par +\b Centroid Baru Cluster 0\b0\par +Anggota Cluster 0 adalah A, B, dan C.\par +\par +Harga = (130000000 + 150000000 + 170000000) / 3 = 150000000\par +Tahun = (2018 + 2019 + 2020) / 3 = 2019\par +Mesin CC = (1200 + 1500 + 1500) / 3 = 1400\par +\par +Centroid 0 baru = [150000000, 2019, 1400]\par +\par +\b Centroid Baru Cluster 1\b0\par +Anggota Cluster 1 adalah D dan E.\par +\par +Harga = (190000000 + 200000000) / 2 = 195000000\par +Tahun = (2021 + 2022) / 2 = 2021.5\par +Mesin CC = (1800 + 2000) / 2 = 1900\par +\par +Centroid 1 baru = [195000000, 2021.5, 1900]\par +\par +Pergeseran centroid terjadi karena titik pusat cluster diperbarui mengikuti rata-rata anggota cluster. Proses ini diulang sampai posisi cluster stabil atau anggota cluster tidak berubah lagi.\par +\par +\b 7. Pemilihan Hasil Rekomendasi\b0\par +Setelah cluster terbentuk, sistem memilih mobil yang paling sesuai dengan input pengguna. Dalam contoh ini, input pengguna adalah [200000000, 2018, 1500].\par +\par +Mobil yang memiliki harga di bawah atau mendekati budget, tahun sesuai, dan mesin cc mendekati 1500 akan mendapat skor rekomendasi yang lebih baik.\par +\par +Contoh mobil yang cocok adalah C = [170000000, 2020, 1500]. Mobil C dapat menjadi rekomendasi yang baik karena harga masih di bawah budget, tahun 2020 lebih baru dari batas minimal 2018, dan mesin 1500 cc sesuai dengan input pengguna.\par +\par +\b 8. Hubungan dengan Kode Program\b0\par +Pada kode API Flask, fitur yang digunakan untuk K-Means terdapat pada fungsi berikut:\par +\par +def car_features(car):\par + return [car["harga"], car["tahun"], car["mesin_cc"]]\par +\par +Fungsi tersebut menunjukkan bahwa proses clustering menggunakan tiga atribut utama, yaitu harga, tahun, dan mesin cc.\par +\par +Proses pergeseran centroid terdapat pada bagian berikut:\par +\par +new_centroids.append(\par + [sum(member[column] for member in members) / len(members) for column in range(len(vectors[0]))]\par +)\par +\par +centroids = new_centroids\par +\par +Kode tersebut menghitung rata-rata anggota cluster untuk membentuk centroid baru.\par +\par +\b 9. Kesimpulan\b0\par +Berdasarkan contoh di atas, input harga, tahun, dan mesin cc dapat digunakan sebagai acuan dalam proses rekomendasi mobil. K-Means akan mengelompokkan data mobil berdasarkan kemiripan harga, tahun, dan kapasitas mesin. Setelah cluster terbentuk, centroid akan bergeser mengikuti rata-rata anggota cluster sampai hasil pengelompokan stabil.\par +\par +Dengan demikian, fitur rekomendasi dapat memberikan hasil yang lebih sesuai karena mempertimbangkan budget pengguna, batas tahun kendaraan, dan kapasitas mesin yang diinginkan.\par +} diff --git a/web_JMW/docs/penjelasan-kmeans-rekomendasi-budget.docx b/web_JMW/docs/penjelasan-kmeans-rekomendasi-budget.docx new file mode 100644 index 0000000000000000000000000000000000000000..e3ee2e8d9107899dede82469f5fb85c8b94c5d91 GIT binary patch literal 20446 zcmeFZgLh?3w=W!YY;|ngwr$(Copfv`JGO1Jla6iMcGB_9^PcnGd%khb`2K-=*BDh} z?W&ry=B`zS9s6gOAkU&5{gh1Oxb2eJQKtKdwKtL!!kRaN^_I56&b}srV zo(`tYx^y14HUtGfKq&HnK)%QSzw7_v6=+Hxx9ev>6n##4MM!8>H99G%paO~F1JEj+ zLST4wx<%?hDc=l%4X>An43pHb%<5|=L4;wl>O8Muo+1-$(1aRs=5xA`o9vUS5bv}e z!YIM*kAY};s2wOcnMgo*Wde0?pxzvzEx7+$<)S~p6;Le|Ec2t#rpSOzIs*SZ>s?Y zSb^)HkD%FZ#kJoUg>v-9GwT?u5RlrEGAQdSR?D9sJS!_8x~GQX<8$*#GhWVFVy-*M zx;Iz=Rk+A*sHGRZ0qwUg51^Egu3|=yC5JuO%%dl>k1=9N%CVp*O|-~qEbxTC;c1h7 zD2G%cPlu&2mPC}(3&tdkg*lF@%gw|6q3H?cQ%wf(kR z{}`+bUQ6e74#0M+)fecvYU85v`N$6_y>!VEkMJZLuI`#5@0O==H$fsA!oB>X-9I1a z=n$mREy*LXrogZr)Fl!L@&sEEVeaoA`1+9>Z9}fY6?co680qHVbfv0dW2=>o+kUe8 zf6c|_3z&pGRrl1*+1ohZhR^-KT6_Kd(pBec`b@1A5KZsz?wwxGY_?j)Q_;~UU1DJt zqM@0pD@!`8#OEv8%4%vxQ1yLk&Mx|y0!I01&#fXeLqGMR$E+8!9(PLg;e!B+C(OQS zz`^MAoE6&dhd;qR7!Z$%+HS5v8}NX`d-B1qf*SB)$GQy)J0KwWpb>Ewc_pUy2`)W2 zpB>|?-r~E41skq~@9-f`@i@_*p}Ms868$_?7s0GfEqOaB6uM6U^b|X!R-?fOMcw%f zvhHBu2~M}+NVBC&h|t{L3_q?5%9yg&SD~dI&#EfNQ$OzMm!=!@dr_yK!yZvM_%F;) zr@_$wN@ucPo~^#dx1+?7cN^?Bx+(5wO&P1QIXCD?hwatRoTT2P#h=&8_PHk1UcGhw zfM{6bn*~6!Y=H2X{N=rh)QNsSM-1=;V#5r7Lsj&*Nq^#KRhFU?+ znH>xRe@ene(68{`oAYSDR|Iv=w|G}@lnC?MawLxO25dK-Ir^P((u!H_F<}E6;qChY zX1|n*8G!EN>(|L*>cY+hUl$kiWIc=xyOw@O)vD-@2f(zNp6oBQtLJzR(pPm)`$k)O z++KrOm{~;0L(Hixr{TR_=R1_!UA}Q`Oh*e>r$Ot|UIbV5SWEtMo|zQIl0PY!U9|p< z`M$7fULr3q!noNp`~1`JqU`*&k$+I+tuxew%PMykvpF-Ik#6awihu{iuhW_l>ETx1;{02+606j#(uE4B{ADZNSH?aO1PC*k)Z%c z?Y9*E4h2aIv&`;(%I|S zmp)EB@M3jSGHGhFV`yAK*Wl$TngC^nWC>2S7x(&<=lV(pjie)1p;A1z3M`S}^{I;) zH=}4ldzNKj2flAsny)Z{4(gE>HnfB|hhm&hv2ER{!Ov13Y}gx*PoX|_`wDG9Y3=|# zpge;-e&%N90IcwgYVZL#yx&g1x=NdeW6iW9>5LK8E6?9Z;yxjPlk!l2ZXl%%!M=)m;GIm##r&zoth*zr;=$uQoMbw#3AQ_-D^i z<6N%+C}N|?%g%Fd@6xt;S%|+eM`sK6PY$uwpsDi5Gu`x3tPJ-bLzW&(3tpTHe=pSK zP_`2@kQ@rB3#cF{(6D#}nuTw?X1xH~W*9d>rJ%uhVT*L!grS6Yb3&R)^KhstYEVAWO9&C)FU) z-d5L^U!#q;3X2h=09my$P*%F}qRTxSqmGv(*9g25lArt!t^D)PhQ^5YzS1WT=dGq> zc0kzfCi*k4p=A}!I_&RN1vnpfScfi06x4@lytD5wXRvn&Mh7?(O=Fc__o+@ki+oS3 zl8Y^>w=1RAOqu+zrBH)rq1!&&`(Iug`>?(1^ZcX6QnlAe;OO3>-76n*U$jr-d8`@fNdo;dm7{iM?ZTIp@*36jRjo}!B zWZN2TV>8()?%v*@^hJ`#UM4jEH_6PWuE}k0^t{g@TV9*t1TdvMcg2H+0qz4X@x!ED z{J(M;9X*w|^yr`4y8ur(GwztvQc_^-*FLsxm84%LL;?qTKDMfhC?MS7VM{@N@ovt_ zkOe>&g+TC{l9%8@*ntaI`szt7G({hwV83v5>o^_bJ!%RYRZaf%+?ET!nDwvDjsh1& zpmivec8rL^cjDq+J4R?~U~b!^dxo9oHOO4F+9O3n>y-hEM$`u4KQYsCLn5B5d!)%C zbC;lyy!|Y}X-H&)deEUq0uhfQjA)vxrNMeUks5I}ijSu4-U1-KsVpAg$`>3)9-aI# z0K*Gzsbyy)B?hYQmbX``485dz1=`yfSF8|b8FFpocgEW?duY-Xl|CFSp8cKi(#KXOmVqEJdUN+GN zBak76nco6Nz{jg{gG=;BSU`V_mSc zUSzOlxlLqehczZ18#D8ZNvxa0N%vyqVX)!JsRi&TNdqsF(JRd2hJ-?t$mIg)3=|PY zdJo+(DK;1X)2y#@?7TCXSO}u=?kTwRS+8vE(yl+(`}Hv77ibRH;G2#9ldb#mVc&lI zHLzpVX6og-qmOxAp0!s?N;IgWs{kL?__H!ITXRpmjDA-oQx6#WSV+5*9?L{hkUi=MK0vqbfcqf2T-WMx!-Et z*JtJ%^96yO9>SC05e+E{{ex|b2qu8jnmoZcETP4Mg!uI4q<({r)d_3^ur(0eA*9Ng;>^F|@@wo6bSp12m! z2pLdTts@_IIQBBAZ#?h$Pzy{!H(}fNmVK(S9CAGPqXm!@o0^>k!+g-4Zcy${Tpj9q zrxdie>tGT#i4u5<(SFLx3(^xR8THprIfx6B`C!yoeoBP&%7OPznFOz|GS?3F0DuZ1 zG?25vNr->~ECcq>?RLTd_UCC_t3QAsyFNzDAsqL;@({Fwfe;7#*0j?Dh1Hyp_B0hQ zUIfTFq{OC%<#z&F_G1P#V3^t&de^nCc`vm^@&hMx)Lhq7+W0JX#97vVbKL&Awr$Zj_PRLmPspzamrS<4R=5zE@$GNDbQ9GA`Dic=TQ-`z5fpD5v4w&mi zg~`ZQOZ^l)_jt%UfO|=@ZqD!_F(sdDkjXrxM_a9-gHSdq%2{#xDKw?6ry6;ye#?HS z6J6URFHrR!uh6M8WtV*-V?NF^Zonn>EcVfdLPGAR$O0rky66(-6zWB zqi$uQR{O-6Rz-v2H?TFQ$bB%aST~DdZ?BmUL!%HcdkrRDNbw>1DrqS>tdbv?=Xk$l z$sZ>jP0nLT+w0mhefjsGraA*#*VB>!&Fn8Cw`~lFtUgwD*ICa?2;Jo3Fm!I?+7&Bg z3DGo;*->h3zW2#sXluSO$?|2H&$|3%ZH7CeKTNw)GHol)gK1_yi__Gz89TE7m5~cC0`o?$v#g@KZjX}^Gj_CSPyfr-5#`^zb)8m z3492J(x_QygZhevs-p_naDh}M&u~!`l z!9VIS$n@_*vYll6qOi;q3yLJwW%?Bp+5)r1o7Ubrs5c0puDr(BFi@JQY@7wQx$t6x zG*(AHO^A%?ojdhl2j(Q+cQW>u;xvoBud#$k6q~NJf!7A?UH^CA}mo8KX} zW7NjJK}4yLVDr5@hfC9IC?i)d8Aza3>1RIA8-{A$ipcAyQb)*|uW&wz{58r0-5>zEsWXg{uv8L@1CeD~9xyL1# z_i^KNyI@Ds%doYtq{%;#9NSeR!3JyljCr{5nWjK0UY2M*+OOdTXVnaM$5Y7nNAJdF z9n`L(l7*6Zy=C7Odjq+NCDKaB$vEKDb89g>((E&y1RthSPgI&JEW(j}Qc^6Y=R5Fd zKb0@@j2xrH%WJ5&q5n}bDAJ|ICPjg*L!(ID($e}E?e%Kv!JX9)GL!L{T$V?YvI}N~ zfaFgQ3(7u=>2wy}n^L`bIDt^fd6}HWmY)@hrNV5hQuwpmz#ld;H9axK8sb99VUxwR zIi)l{ZT~I?Bl#5zIv>G%fyPzHQhfQ>#N5#!Beaej(!fY?4jXv>^$1fPf`O=o&?{Rk z9Zm@db!3;eXw0i2XN(gB zU;b7G67@H(Jj~9l8_sYD6a6-m3Xq|UKgA^&bG*${J35>EG+5q>J^x#Oc#`bY{%7CX z-Q+>@Fx90!=DtEhEsA^S&MsQ3225G`nLQq^@VeY-OcU=!%Jgvx1$XBK$9U_S_)}yO zBu8npV5{ULDss;&&@8yXI^rBqr#)I=?M{F8+A!IrF8P&TyE$2|KQTgkIA6OBNN)qS z*{HWm6tWMm;2LlpnD*dLu}+@XEbdA%eiFGS*X6xK*sJD9vrJKcJfc7RTj6`rcrHg9 z=hZ>h_)_Sfp&(=ack-F{vv!zw>ZX(TLwnNp6>~GJebM^*Q?GB!CWU#_zouf)s)!8s zMOeMaZVdqqv|rBCi;=tYgQ@1OhJw9EUw5Z9c`*|*g$7kK>q9y#V4bn*^dXmZbY&Qm zR|&)Dq-&4IKQ~P0XS_NP{;J2w9WSEDZqLpsYi9Yf#|Q{goy)-i?jTKXhqp*g=L}31 zYEHD@FWlciZ5_2iCZU_$N54uR1hIbBeXeiL8H*EwNx`_Go~ve>6wT1DZZR`E@gvm* zc^L5SKv+twyS=0K`5Fp-I}=!Q&>Jg-!PTQ)QB@G-g!24nywd&q?#F=yY`D`htm)&V z-JD7HG-+5?Rf#KR(JZ+i`rN~QO!TJ2B_|WjD znNAc(HSA<(mb$V^EAPy&87cdVw{=>@DG{aXZY5P=nb5-O)b19(KLp@CpouIq+|X1f zjjpp9XrZfepjI6riE|DDIM0Tb=|>|MU)3t;*6*A7YN(C*DDvBGq55NyKHYG!9c}{6W~m0rzQ-x@OD!LC z4N6yMBF3&x^C%jupwx>Q2MpIX40F)4lnERUfuQ4>WBgpvnmhJ9CR25Pgjg&q|4l0> zjr-&zgcI!-J|k|)`D>hV%P2)$Fubo2mVSk-GhRX4`!cv0y%a~-lrZBIFj6|G8-uR; zyW$0J>1_obWxExmd$u_6@>bs@zy)XyD&3kI$gv-!IdZnH-)sYH3w7UB{6Onpe9}k3p;6_=QF}#&3jM7eMLanbb)rvXabWvCS zT+BKMQcXE#>=`~uwG%tAFgKem%*A@n+z%QQ;By&1D3|-SYN2Whz^_)h6Kb^v)5QjL z8cr;)1Ui8>y6fKj+|D5lmu3gv~9?@czl{`XTC})k1=G;^1;5TbRK~-vmX&81E2RM z+P_Ai_ZJqb`A7!%ShLq_R^$BK5L;`)UI|RiM2#`X2|Ha4#wMNxP=~bACB| zU}pm!PmCt9L8skyvh9d5(SXKZ+>lpMW`CWx!#l{}CeWh8UAS4j%cOR|RmQ|=iV7OZ z%$TF;c9P50-VRZ^Ty{%BeuqWfIu|2SG}*e2VX3C(;kBs2%e0g7l%+kj#V;s~&FpS@ zw*7jcmL-5;iN>5siTfc(*x^~e(uxvb+akD031*a&^jSpgt8_z~ms`Hv#3R#mkM`$b zis7!f(<@Kd!9%Zn6s{UNWs>w;BV47DlL(8xTjOn5URlsFOnQC|ht;3AjX}Sf{E{G6 z=?S2Pmp8QWvV_$d#ncghFtEB36WI3R#CdK5OkKOXf!#pP2VuJyB80LfsWTt> zKwteW&JHt>_v9XiSDOs|ihi`wzM4Y-TYiusFd4}3N6e2H?Y4k28_=8xQqPyO?t2WVbRx7_e z18^vC-ZiY+nV9FQPR9$+mRNXYAsBGzpMoD8)f&E$f+MVCGj!#Ovx~aY{C;iKm7YMQ zf*2$L)>huibaLA0ZTTdtGjChn3bBJ*#wvE?j1?0G<1tQ}YjPa8bXZyY;0bV@+~P25 zJ`%iDETD6Ox~pzgG=(!lu(-|@{&&?x(?g_Pd0$4d zEtbI~fgm)LMq)t6;fK5=30D*MbX938kyE)zIED|Ckbqc>hXWIywj{)WbgHk1zw;B^ z_~bJL(L)IkPiRR>>UqHQu|n&Mz)9;5G`)kLD|0jQ)bQPiuW~0AcL_2$UPt<|WWW&;Kpf(z7Jc_b zCn9fqQHy96fc=gIyT!vjlENeX*)Hlhx^bTEV&<#!J*9@x24gI9vkQ_ORsqeUk|mFe z&W?gwlZE#j)=d5$8fTD-ynxt+sVEy^QcPdF`n&*JbVlCJ2uAgYZq^k z=TT!wVGJec!2GGOWND16SbWAWA|WKdx}A9441w@D+y_`4gumraM3n;5hMS3Z;Mp)0 zJw&$Z_Mt-c6QHixcJTB_;o@A?+OW@?bC@+611_5;e}gfQ%QbmaAM^r$x+C81Yy{HQ zz82*~Pf&KIG&(!Vc?|QYxI2ex0b2x=(n!b2D5NXOL|KUb{M*86EX1*mHlSw04ZPDY zA7$wI=f>Kg##^OlH=z_kCJ3lcwqNDiN-|`rHaUKqmd<19s6*5&0A|4jrrJcFy1$hx zMJYvE^!4N9hR+lLeFcVg_`q@LgzHo#9LsLzvO_owfE#?W3hrhXLAsNR9cLTY6Z{>PEx7 z)oEBz?@x5WuROla5iKjNZkr1CM%Y~1L-x8VxY2=k7G#6D4vZv`=)2_%uQ|C9yy6&u zeZuQM3WlaE%RNlsw(JH<9sYC(ur%UF^3|ALb%gK&K;`STmJ{5x zaefsxuO*;iiUl1fyKo9o&}j*yzOPKzUl0J*=${B4wH%Z8#SZvJ*}!Ygu7ShDf@qHu ztUk=lHpfBvy5n43`V=$z6HPn=Ts>mO_~Wkm1FtYR63{KE;-jE{9rEa37uB=Np=2|a z1mnKupzkh`=8!T7X%^|}J9XA_r#424MD;XzMV-rsi|+dt2f%WNZ)^1K2VE$^1iN98 z4OF(9#sWJS>lTQyb(`SpW0U4wlPJocVBLST9i(3Tlb!2qgj82;qApe2RwI4cCsg)_ zT>_)otwS`SV-D*ZA7ML9cI ztI0`kv*YZ*BPwqwrokYAKWgSSdaZKKgOcrmSZoDUxXj)TjQK;9+GHkWqTW$UjK*bx zoZaPQYmL+cQt#+0F2%Q!_w%DKl0Sg*M5Sw{76%6VVCjWI(gUHtpbuYu$cFt!^?Bhr zCLKzT)Z{D)?yZi?Pe-hf7aQ`w7l1*c7hb#C5MWk$)(%%WO)m5M{bdI{7kTV5qN>mj zH=4Fo@oAzgf2g*M0jIBoh4~Wfq{3vmK(K&iF&b@QMN#{4^X*{wtejRm1sT95F>uar zQ89{s)MjN^1h6t~?S`U`(`{>3UDFYD|59DVKks86MSQ_)r6G~Th9ytVEZ9z|JCSH7 zB(!&@GWQK+>7;NoU<(5JxlmC%>SWH*2SQuEV5>;1RTv!|*H(VKu5%VyV#GBzP~z{doZ2K=DVl-Lc=~A$9q|OWTp62@&HyfI|6wVL zkI9Yr!+Cwpm6jd94M$}1fHZS8Mgkl#<9To;H@)-TtY7i`(m83ToGTG73#&>i%AdBq z3CL#Y7qfIkp#I@@Y6Df5gSUlA4`;fZUQHQ~S^ONl@SiIE3gh84Wx@IU3dCN#;zg*v z%F4f;eA8flN1<%H2qE6UP3ed1@-YLMdP1yg?*Gw@(e724vlIUIWVIDXTHC|Cs~$37lLde7l3OA zC}1s~o+UDBi;Y#3R4UKa9VCIKO@RTs$mZ>P92jwp>2n1i2m2IJ7nYfF16g$PHMtI} zu-ZTjAw zHBla+t;;Zlf@q|$x@qdxiM!Npi0nPS*v|#O&IA`QXdq}yb$(rawAJrAb$Y_P)hq){ z1VMxl5I1^ydsB7PZsi>Rwc20j6vHg(J=c7HsHj+rnb%ytQ&xW8Xc}9sdSn^CLZYYJ ziuTV^S%v$GSDlYd)O&mV`X3QMOD2tq58uci#&7%_4iF^pzYswG0h9Z$IG}$+=77J^ ztKWS7@4l)M$G;(C-{{Sd&!9A4T5ewjp#vK!!u6#OAW=O2G8(AKhuz*<3CZ&rgN_@g znl$I>Uu^5sza!nF7raaJMw}2&qHDdEsXWT@YOe$lt<|m1aj7s847Bz1Y;tC-wTd z;=POk@F`541lP-D(%99^m=D2Wg|fyAc072-o^z%^K86jBke1K=L+@Af&p zpQbCo#oWcFT$=LWg%~tJk5S1Ett5%0|At><`l((r2MG>%_yO1?81z?g&`U3r{p@2%vjuwyN8>gk~~xS%$WM)$7&M>|<78 zMAt3%A!;4eioRmpg81b|mq_Ax;1fA)0oewm==3L|QM?}##6A+4%%Dw$@=;p#Z!KSr zon>4BZnV?f>5PI6EG1toh7(f??K75zt8=_Myt3S-{-~Rv;NoPJqk?MDAC#Cd9puEIzQ(Z>4Le*bP5Zd;r~Tkv zOr7S4e9?bpkYR4TP_g@bhb+Pz&vR-joA1=pNb`Li`NsF{2wiNnxi#*c?Ab!v$k|c^ zgW)nDP<3L3vJ6hkIN5%$5V@ry4%EDvjHDYFpKg%KK_FF1f**{8m&jP8{@F=wk0JQG zUN`xPTRKoC>x+(`DZzmqzNTVim39lAA&IJuS(tW|;4LA>mKf&D#{x@7;=%PNnX?<| zXFr*9(llJhGU4RPW{>=FeZ)bcjLit|9}T=!(1d5Y;iHD>qmdEaI-Znf}ik) zP_y%phNdnn*?2Os*rp})qX;T5j52L&2$|JX`G13OceK@W03eA?5FAHZZdP+^Npm=* zjQ+G*_AoLEmq4iN+Qg`HWnq*jJGfe0lGsJAtZb`QLm)BrOFf40>K$*~Y_DfA#a#=0KuyX;Bl^;%b5S5Fh#kA(s6<0@Febwv4Bh4 z{>)fa+u+A@&-9yoHsAf&8OQl$<#DCA0!MTw%oacWp;$0}%k%ZFWDczAc$ zP6kPk9wWTlj1$HrTT@HYFxmqXv0+3OQ4u2I%jp3P)!oQ!INMZb zLGh@qc~TpqzT@N+??rUwO-T&N4tbhzr%cuRaFy=umB~11t4_0SO;uyQZy6*)w;_Yv z&JewGr-9FBtk2GziuI68$!58LjX$tV6;X8vo{`3T{9{UI5rS2i#kSq}@92+759rt6 zF_rL8$#LAVko;}(Mw#|_U6KOSlG3@4VG*M%1!Uo><4u92Xzg|-b?npYlJkC@ia%U$0S1eP%mls|F>+bNT>Gtv7-O}mDZt_)BPp!n!N-BzjeA-h zS~%Zfm$aJ*Qnr|dW8p!PC-m|qTJ{DX%lxBm`p2MItk7W*LXWFFx)MrzQTri?VrvPn zzfYGm-!Rqq8+av)YwdBz5!145Cn?{%(1_yrPv$bpp`TW(Ws;Y$Fo7FRl`|V|;#rTj zb$HEZff`FG9j&)UnYf!lBiBOBT!l&&6*rY3g$6HDOp`ynT+(%~q|JvU$9)y<*7X!_ zgM`X=pP}^@snM|fI<+j`{F*oJ$BXSs?+~Mj3fnG9t)F*?`LgNt*3WNa)Sqt~7J3*= z91~8t+R8#6E8m<3JzR5_MyCWOJK=%HdCF8@C#@QlsaYy7{eGXjVTG6}oTGL$=WSiO zgZ9o|@VjIi!#%An_EkP&g=ld?LhDr*ov>$wbf}j%b$fNr-mf8`w}fWX_of~#cF}#n z{7eUDky z6Ilj&5y`)9yB{wNPsdv#mVcy0z=mP2!&9DLo`&)HaG64yLm60sp=+4bXu7n{$zVWK z7t#n_NwFq?tAb4=1`0R8VMle>|ArXA&5@8NpBN*C8J<0|80|JEn)8NCOAv-2r?63` zmr*J0d`_E=#8s^qSBcCrO*HE=#-|Cv1y*LTjMdj)n}XK4k-UAa{mD^8cMtDJuz4mh z@f`ar;YpUCP|zp!8<_D7n#4zg!&BHr>kWG8s@0;LfET)&wZ_K{Q}8{MfcECx6z4vN z_}2s@0ww*vq&$y_g-x=bJ|l5pLw7h)P6yXSt|Y!=xl-z*smoO~NKzC_MFN+s$*{)k zI7SkZF}r~ZY9}LkPnBgO%5DOjdD#}=aZ1H~24$2qG285ccrxw6 z)dD|Ji79sCZApy?Y^RK!rF8NEXXwfHO%?Gv(p~0*Jx0IZ#&36^)cFsYi$7CP-GS3OscB zTVVt_{RLUFt{=djnmW<7V4eX))#6Fy5OZ*^xfSD|E`8K!#zztd$mhwf+9(HTc*&_QMJWU7l8 z5IMDXl5gyChH?%Yo6H}t_(z<2ou`z*ukzl=wW zM{@)CrDxf2z2eI}4@mLYkVqwSCENUnCSFuC?R9>JWpV~;>3z1Ow#W;6!>5N1443fB zkH9CykQRTnorOh@#b6@7M`x5|Hu_-G@<_Eb$4*#Scu?(1_wyaBw+$Ob4dR;ND;T>T zg<_C;c5t6Z#MG>HWX1*aJ2Xg$bipoYH6f|+4O2`%2kWUXOEa|NPiqF0jV$K0<&aJr z^HH}yz2$=v+JXi+?BW1~NY_O)xd@N|3xSQMc=)$bBgMp&0uL6aESFCbP0{g1VfU|s zRj3@-o9$gI&dk~ZZhyX9a=!){C4an7_D?6y?(|T1Nhg%ruT%PhH@xl-^#AF20Cner zS^PdYAYFif5dQ5cJG*$=nEvZ<=*rf0UhhB(z2=_(>YG*dP8hih%kqeI9;#1To97rN zcgnC14<=b4$WKh>e?5o!mHfjKDiX%dH%TM;2{;`68hISyv~@dI8I$*}3z3Q&KY9xv zmMCYC3TgG-=jQ(Nyb~d)j6xH@P|oDX=dnAu^DOWGF>Wt!F8V^`iDW6DmQ{TFVxR~Z zZ``d5N9Qpe^lm;#_j4|}OHO$;<-;$b@zE;zdD7&ZBumbtIba&Xs~jZ%VXoAT|t?9Lb>`l96)# zIJLmrK!MB0Rp(#q1jF$g7#`RF=iVG=Uw9JZOd^#S8OOY9H~i0Tueb_Z=oqyBRsQzSISav>|i$dznKU zDptwqF$wvqk-*7bE&Ti3k0k!}OEZl#ezUpveDTYq7Q2EyYCdCX&7Vi6eyPj!=juD;SvQ#f>kG5`PRV zuzYtsOSb(?ye<$bWe5G)v16CD>12D|S|kCJ%j+U{S4U%)xs8?;nOyjF@0$nx;IXmO zMQM#rDd#F?dYVEhw|56h2*Cby>M|J!2HL_kb)#FxHfkPw*cLA}=1wq4 z@bQd&nJd!!up5dl*_QpqlB*YCyU+H{Z@p3msHXJ$ozD3wQn(Dc?u)uNBZ4}$#m1~& z`?To?y*M+g&Fb>52AAEXD!kunb@EV+)v)9j6-smTwHiNy>`PIf8#W1a#uqyrV-Y)S z^IfFB3)OdlvWPV=DCErXj6U)xp$t^6SYe0B9`!p&zr5V|7!GH+`VFe1Ig4JW2fHNC(|C z2MH>Do-_A0%bc+^YsE!D8A@!GDjRuXk~A}^-UEP$u$>{1h{}edwLA@Dj4a4duKe@3 z!hac+cpPC{WY)h5mgKc7F%hM{XI_SJ{7fHPL*{F)&*)Vh{O5cxg9A$;RzZdsixO*$ zMV}ScY@6zRlGVmPH;XID8 zC$Wb%IgN)zOyn(@^;dkx>n~M_sV6ymX)T0`)#sO}jK>Y4Eoc0B+$>biwjLr+Yd7Jr zExV7cE7f{rnP6+Ivb@Zivg2a&T1w>ea%noMFl(Q7#-?AGEv$X&3Fszl7DLDrJJ)8M z)(1r+KI?i<*DHXWk1hStTnBG1Afui()q09x=^vk$=((TSB|+#NkW+f$Pfvj-5Ah+o(1AfRqDoLmlJv}?WD>FY zfM@wnCRG}F3k!G7T02QfP9(?vIn(A7f*Zh8)c0RE5UWCIuJviqkGc?3%C961rYr}H zSU=d~-by>Jsfak4ABHQMj`1&*mc{0GU+GcY96nMZ)nt7=817RI%-tP6+}$9=n;TOT z(L!$Ygy4=8FRwDhyL&&PdNWFk#>}ZD*?(CRtU}fVmi^BX1 zDtX|et#ULm7I_*ODm={$RqiiNsP-Du^?uCb8sU&EW;w^ZKx9-MoGKmC_!A2GCHPE1 z%EhZSb?Qt`3@}ht+U=1EWH>J*I@Ig#mWg~0mYV1?(~S8cWg(d=QHi?P*?RZYCv-m7 zT*5TU2R>Z&XPYqUQ>5Q)G|GQ!=+etq3^VDuZ@U%FTTa^>^-vU!8acOY4@M(AiPgY7 zW!HVcvBkW!`H7S;UI56AQfj!N@k=o9T@hNCy~sU2R%E4b+(_$DJm(mZTR6Ay+jU8= zMRMGtgKhmzFf4sLP*#t^r~&*ea>4U0FOB85JW1D0wm)qHu`_KmB{D}!C_UELqTH&G zb^p}2YXL2u9%1_Xu;2gPXQaDRW^lVx=6V~8vtV99_@tOfz)fPY_0H@h7uafzI+07i zpH8WmTEEtDIQvvsj?v>V1&hPt6yK!RxirE2;&78=_Y*np+81|`6Yvu$l{tVDFDBtH zcDB1C<|3!$2g$D9K>|*#HsGPt{{1)J28@z$wPKj6FYcrZ=Z1JjECjMi(Yp%u9Wq%_ z&?8=v5X@F3TmT!5=(`7oAxqJaXR3^W?@w7gvXP2};D5A#QxJmuYZ$A8?KK<%6ID@O z3^bBOq0o=DGPmxPfiea>a}^ByZwe^J|JsKbz(ytV&rpiOz#D=>A?UTT|7_CYwZgDd z!H8p~ibnV*3C2KE`VZ0mbE1FA^WQ~mMu+jnKpWbRhTa#BhNdJG3qk$gvi%3iKOaq1 z5b;d@xAfsHFPi!V51VHE{ke}1TlL!?bE=!=_*aD+bZ2GUR-4rPm2ZuZxhY=ZSol0V z4Ub~%;b~I&7nD}hrmm^h_7MWQf8X~TKA`YZx9+7=&&&xgSe1eJudtw|%5hp{J=u{_ zJ%??XH)DQOPVKi`oQnkx>^N%AHTURjCl?@y6SUDza{MNi_t0)}>)%CeJ+vT4jCIg9 za|780YCSY2zae27eQ|w|9CpOAzoG{VZaFYDmAug9 z&wF?~1ErXyq3*)S{){qdi@fkohH z4&{VY8sCITSSq6y<%Gc0tRx1-q5qZNT2YI+qFa#|JRrn!lD{P;9)A z7kly4>|1ba=$F-K*92Bnx@K$#AKleGGnlqHwD|>DD|_R9Hl4rZXsyRxzH9q;;LTn- zsOGL?RxR13n)S50XubuEFA-MI?4R!pb3t63=U+{$sP(3me6@`t!+BKr(^j2X-c3*? z`+X%!dyZGgR~CO2CQgr?ZO#UK3|j|J4t~0?+C!% z)JXZi(x0AmzKfT zl=GM^a$LroO&jO2PP6`uOp!uCC%$$1je0k*65LcmYrms8jA^CUwG2+XUP%z5ogNaE z^620b`tqk3VRxZ7&K5IJYLLJs#_oT90DRtT&WPVHfS`l`0z&@x12Fr3H;am)k&Wp; zDVmKW*|<8wmiFmgQ-F zm=nXkI}gIs`R?v*k*X6ad=V?ys97>ezk{}vGWx;t{gs_8^36oDj3zO((@z1sR(yUQ zm&`FN1gItK6$`!ip*Odrl0NKw%n2K6STgE!mU|9Y*NSv+&L;PbGk|A%s?@7%0V79g9tGi)>fZa~gCY53_2o9J4tc#??LWB2xFC zHizaOX@=rRA%~bT32L>!4p{{JKs6j4Glnz}qEV@baWv)jt7>pGV>$d=(~r(vMoWE#J zFjeE*u$;9rDqxoV+p;C$Mt5ZY_5FPG@AHBu52HW+G|~9H+Nt@Fvbx{qd54vs?_%3O z^BdnCi;p^68=kbkm^44k_;Z`GW$Z#>?=Q+0#`B+abl>spyCCfzurpr&f2Xo@zRLa7 zyFbjWRlXdpzoqERaQi;i4D6I~WU2=+1Lp$MkRWi16gV#$P?TR#te>1;1WrD{qeMpM zMS(%rGbzv?c&g3u`@Vnpyzg({#yrvFwgGSj>k*fpW55w)x6-$>wi*5SmM7e%!EYD$ zZ~yP7?{4L6yBfNM@p))&k&AGXlEI>Br>0m|#hrVs*;Vtv?b9l=35#VbOtkg%jS^?B zkhR%$tBISd=E|&|^h3`wWSdeYsyDKot-U0)j5mDiWt%NawKqO})I7Z**hwwI`N1Ui zKI_CBcI8{zOC_d!yBxaLfs02p!{A`@tbm#nW{bDy&Ay!E4_dupbAgy`3-jKuSq!t6 zdCm&#-}X89&#sD!SK+-=U*@SYh~BN$dUtq{?NhJDJ$FU#ObO6DeAYU=t1sW{Z0OXE zsPrHDcfMNRSn)2lYm0iD(QW;cEzEKbZf^_TR8MvOWVCB{{JFr1lS+gpzn;~o6@HG9gCc`VB)rbWl>9i|H<3pFcA@&xJPE_!Zng(7nRo zgLFbHBm3*_1L~V!ibRATUM3cI!sF$~*{^Rh-C$^le!gXrQqYD!fu8xzy2+nvf@W`F zInd_bAoC_*U$tnz4YOI!Lr2L;2Fqvf?mAK#Sott3sASTO?HeXLJ#M@6Ip{^hfjWj8 zH;!>Sx2##;@j>@ZY~J=q1}?)rL;(^E>Ud-cr=9}`%toi-|P?`@N7sQ#rI zw_W_gx|JI&=Kr+LFs^xfPi_90W+*5+|{clW@-CAhm24(@ITcXx*n+z#%61c%`6?(VL^gHG-@^VR+CTQk$U zdUto#UQey3*ZODIPgMaL1_uHH0s+E3`&gg7w7BK{?};A@0s{N*swd$Ha^w|CEDcZ-z+H$M%5Rjq)8moLu z{5(WVDI0$rbc!*9UxGd&2AJZCLO8{R!%0_irTubE=wEY_)6<4)c0u~^vp#c!Jf_ZG z&N{k&Z9rg24vk&6hyvf>yyG4C#Xn^}T+qjwD`|0{d!Y53j^NhsaN$&J+M*;OiP6OE z7`68B;&3$EBP9I~@Lk{P^rQ4nbl#jP5>oW&MQ*i94D{YoV1~GNo$QB*`N*68bj;q8 z=auSzTo(m##A)5%YXU$*Kp_8Jja)43U0DJDddE+-p@p#Fz-{N2Sx*9B;muIO2Qq#V z`3029MwVkdpNC@qyPoZ+JK6#`hB_ZLJ9BEns1)oz(RPwmEWmd@0zSKm9pp z=FnynU&5Opv;yBK8{`dg? zKQj*Puy9WNTZlne2nh85&e+w>+up+Uzxp;sNd<}>BjV~crqq+Mji4|ryc}^?N~rvC z#la-oZLLv5^y$9oKq83%!D;nG;C51Q5sFcMb9|k~4_xU#S*u1lV zN_#Boswy2D2Y{Is>zc{-oMA~3-F+i!yNyemTre2?$sh&0%+)w8%*)dRb(HAQdpLNr znk7#0{E%vDQ?+1%E35Q^D$XM`(td{5n5P*U9v%Lx*l^brMdLuwjBlWq9z1h2Z8X!# zYgZoP31|DMK0gqRS|aYE3Kd-+gfz#6Q|lg4EkHiF0@W^8*1!3hN+fd_6w-A}J>t?d zwj`YHNJGKQxgx==h4@V$it|Drj`Izlvjf5MMR6Ry?=hWpK*G(AN`Py%fE9wd7{xGN z8Zv_MAa`(Umi%e|!P*PHwJShiiHji-c=J|8#6eTKE1F(~TZw-8hJW^f`rG_8p4zYD z>|rd7^>u6I6DQ-*f%@{1!VhjXC<^ojmpq^M*I4!`L3oV;vhT*o^p-8UPeVRPYMw`*(op5&V*QX|PhGB#Awo&YK5BcsHwKSzIx zC~|?dvhr{&Gy_GqGr3YamWgQSu_xmF?Z+jVvfIr%Swrn%V}1c%;6t&rG7U8x2#N%> z$hY^mzKpT`$vsDcP$0dHQ?$_um2Vumqsz0auAy{DuE=wD(M)c0U0i=|-_VC(1Nt<) z$!+=Y6OPk_i(1rcXv^(WyzFLd6uzK|NUS;8OkL%NZ@5A(&s%%W|v znybaMAW!Gp4Avun!`4J@a{@7zufwKVz2h`#6F(#8C*em4`raI-`qS(Nu~Q+b<Xg zv_w7dB(CUUb>Wb-Iyt#Bq5GU~34$SZ5notpb~Sx2rJL|SnbkyODoHZjJm!QKhKUsg zP}c?}bbn|@QG<(X6}`+iqrA0;Gh~DWI;V?=cktMxfT`cZDj4WASHfrFm|oohJ61vO zGPE&Rq6^SluGSC~^nNiZkcCtf`!N7#!bC6e*W|Kp#E7=*W^HMgo>Dc~;tAX~3&9XE z-t*!=Qq+#mOR&tlOkewJM@T4TVmh9_@3$VxdbW#;jaR+2Q`4jTm_$^eqR2R07FUF1 z9;2On*_{C~JK{BWxg@AUxB`}l?Jc4i))E&0QvCRie$`}sE-E4yjKxD>eCj-#LHGRLS zM7c-dCMwP-fm2g{jZt4SCBzOl_npoe^k`1k$N#o^KgRMCq z+bz|yl#r{V+bd*jckg(T-Cr$K_Cj%vVPYeKiv5$Pzvs6!3!{*Ulm*c0}BwD}~EWHMX*C#nG zgl)jT;%joS7N=3HIS9v(6_iA1WwlG*mr4!_4~93K2}9(~kMiOa+p3W=j(A(7t^q1G z3lZx?)RSNv=+!kxd@bgI;gX4Phsu-QH$|lcnG7i3119OP-bNKbm(gKG&+7ue4MWil zf|N8EZk@^Ztj`zy=h$FY!>w&`wljKPM;Q?$;1rS|6F3j{^q2y{UXhD}t;!-7O1h;q zh~ja+PD^wR5es;U4lH<6`4v@W7*T}KA5MbUBdwxyx@X~$Fz!dxs*}9U3v1@R7Ci}G4{hsS{3BzLP`PnV>P8D#PfbP2pAnZZ zD~e3X{7IPUbSVv|i{TT5t7ctQbTpmKs&35%;i9(ntvlFHp2`V6=lwqYh<+*n69gw& z@F#fhA&S`t)p!>`_h%eif+#vRG;6gUzV^uA(^?Iwctkh&c4&wkxj<^C{AJB<9awj3U!C)U297oSad|N|lr}{E4^pJgaxC}A({09X! z|7LmQub8POGY}q~c!06Yr z&b{~ary!BKNwH=nuA~dzZJm!hd{Hh)$IU&&SOOB}xB@CB@x>MqAT_ z`VvZhiT2Xx%T0LU7#h$Oh%cl7XNl`OmW*P5N0hWGsd24oPog@fkO;|Q2-O>O38m;` zy6||c_uM=aP`z8}lyq;Gfr&YUL_%DfKy_*$wa$(b8dvocM0#p8XiM1~qeW)3;^p8F zG_3|G6~yWx*sPI^6z(xmeT!gy4T06c@LLJMP9;MMep`p}{h{J7@|ssOi&F zEMii|pd<*byT!D>xzble?@Zw^f)j@Kr?%$f??xmIpMacjb1fJO2RK=C4F*I?vBOgy z`WNO@Cwto(Pnu&z#d=!3d5(F)UCp;lTclUW!4*+kS7fF`RqsJ}g@z4Nqd_2wwb}3C zUZy{sjwucL3Oz6@jk@)uz@qN%#+&8wMJ$5S_7U5OZ4?-`2`!`M*}3C9A~ahKi8cV+ zTY&Ar3#Q4=MKYsHyUeGHcRZmPO`ivQ&hx%o4`A-x7!J&MGP>ZO7JMv}h)17o#@&w> zh(xk;!(aZ6dVzXW?_*<3h}{c*sdP7qZy13sM!V?nz9$dck?_9so!~#Lvm|l&Nmo{{ zFTQji0o(7mhn;jERWx!U=Tg@a(18lOju(y!{k+Lwp#$&6M75UY$ILGLp1_jKA1DE9 zo7~~80R{PW36&L29f;I(K4V{68?)yyK&0b(@VAGSQF#o5TgcWzQxAaq$3x4jmGQ1` zbv9$?t6KdgMhTZ5nrpM=fx_#%Nq?I8eLq+oP)Vsgfz#U5llz`R@%=eQ7^L*J1D6~! zoij|O)J|yu_c04mq&hz%&yRchSk$lh3m)3u-X(spweu)bt#Eeb-@yXAMfxcja3>la zPa)b190_>SpNon76k>hlF@oq+=RIru6~f*zMM=8Juf&bL?n>A?_3K~v?cbNn4c*Yd zMup&{`Ll1=XP%mmp8A2EcoVh~{7ktZ1d@nWUtXgHG+w5;j>=Wtwx;iPk#8@&TB}V( ze>XxWt762zn%Xvhc2SZ{M|6^2s%)X@YP5u2rYmIIX|({)8j4-Sp4=Bujw>Or^KRV9 zAI(>7p{BMKz@tGzpO4O5EG9*+GS=wsfWhjs(kGSM79CYd9?;*bQ+XPHK*MEBs)RSJ zXG!0KV+)ZWM2jfU12lQW6NUPAzf=k<307eE6*)BWrXMN)CbZDsZ}Ids;UUO)qt<4r z915s3J^y0h6V0>6eAPE^AkswoFgZLie=jW~%-3CMmtGV#guO5CcaoGHZSSI@<(d3) z5ne!5viGcHbHB=Wz;0)lU(o+uM=Ay`w&7vFfLl;^&LlX{TO=E?YgRdCK*I$m@}b8vUWEL`{hB-G`#~{mjiksqB+l zDNb>08dqsS#6~m0Qq(kBz2ylaK|btP%Fs4U>#1KIU}@hDkluxq9`O>8(svUa{=Api ze(naCp2BX4 zhiW5$0;2CS9Zs)~AFcFZx11Fu<|5-sC=NIxEvNmui)0tHp0-cZ9$XU^mX>jsYft}3 zb~o%j`9sd)H?`B-%TN%MNobURqU^c=neZJ6uwE7gV|}KB`ePen)@h^g4Oe@S9Wg}= zH>M(PF{Rms$K#|99wcQvR#PepRKb6w#SX0$HNy=qK^l5s332pVP9dRFeAV+n&xXW~ z-_c`}t_?M^8fEmyk)<^tfu39(0A+ymq|4`@jBP?-+wz^{!bG0A*dxfcT?m}D?@GJ%qNrE*;EpyT zu}hucQBh%2n|!eAUg`)eK$jwue8vGe-rB}WxW`julNy~og1&8gf)(tw zniE3q)dw^AFY^Ikpt9#ylBKgaUJ9Q z~daKl;IfXYg zLQAdFxRe?KBRrczJD-68W%*Gt8b?^j6W47|CL4Bw9uy@L3umLt%`AacC^+tC|sOy5+UM51GRF5}OLiDTMk8V72#< z&~>&-S2PwWch4k8TS?7^#MfHN>JfHvx}D;_|RwMy7Uhlowd4o2#m>Rk}9f5x_IPG{i*{DCRiX0K)97I!HfOsO+dWXrg3x* zMsR+9SHya&fw2hp&-75?cgC%s!M6N_DvQ&DjS<5x3sN__vU^oJn0C_@Uh|LqlVLVW zinKoDz5|k^AwNUpw)%5z75(VNDp;r$GK|k1EEM5FUmigO5sei{+LyN+nuW`?i{MU;Kt+`d$``sQwN3E!1J`b}nZo;fQwx7X2-D zyJxjqh=n$XXLA3`(RAHbj6tXu-Qqk0bvz}RX4sr`Dqenaj5|H!px{pY9!}W_7bfRLNk8K+~f<#?!EnMYkxr9?O7N`3n{$9i;B-Iz)c>w24{{RhLwc8V=;l04l-zguePtSbDa zZj4;Ccu{~I=1^ZMC5q_<5sNuA8#OD^f^u=!Ez#oT zd!3VG&Jmpk$=X-t?v@T(P<+qB`B(LaymR|KW83caIwvh^ok=ZGX{UFCLh9v&zr|0X@|HuyQuh%dA3=Sfw5pkO< z8_HJ!JN79BQDQ33ehr+1z7QUIml*pI&k**hVL`VgZQ1QE73KIi3R)j`X?7FzARAJZ z(Qf$S6v~3^+|vUY@BP^T!PPKQ;REi&;Q=7M*mx~KESjaLfMmjh2_HtBVf$g3nf&9F zys@}dbJ;Jqvx7y~Td(1p@O{Uc2BwF|`1&Py73J;v^}#CyuloZfIiC&w9=1i?3j{so zOFy~w_7v2`tZ$c4ZGbF>um%1&gU!LDVdt!VWUrB$Q#+1ua}> zhl?qg1%`Mz`!?>6a-ea2$~{*P685wats*S6YyL^(Ly<%>PEOXZS6J`Ny*S^=sxn11_rf}Y^xeX9YZL(b z^ozTJp`^5d$A;O|%IF0Zc6iQ+)4?UqW!6IPV$;`;6H<(KjShA7Zj%1ZE1~0NZ#2R6 zJVXoy4K*{imL)p4mdVp@P~)SmPIJVjW8)Ej$bOJx!EK&L@?|A>GA94T7PDAkulx=S z|MqcSOYhC->}`>JOp}DF4s;kZtOpdO%U!dqvo+K8SX=y&NfC5?;G1hK#_xX8HZGc+ zyunM;O7K1BHpa8cc<u=rbx}urbVTZHu-9P2^v$N}8IXFAJKsz&?}RmY)%^xO>#fe_Hg>NuQh> zNLx?+Rb$D$QE8uoS67O#;OnxiLcxvP_PrJrV1 zLIPx#=c3>tb{Nsuvuk22+_<(&M^K1P-n<^99lD=gDCDQSD-*R+SDFL!LlVdqSMhcy zt2H)sp8_BGlSVeM1573n-eu*+M*()1_oC}R^K8k&*zA90P|If00-e(`h})MT+STJq z02m8)mfp4iTbx2|Qz|`sl&a{7q$TTF?(=!}fi3jm?IMg7wXn`Hkc7mVGK@I6$c zMn_#uYN`DWUNJe@ACwfpNx9Yfo%Q$oBPwOYK8@%Ku+b5yMV$5PmC5;VoXk;hN0b+4 z9lfJr(t3>OuW=eTn~3J2d?GaOwEMa-vKPYg7ct51_Hr6FF-SWXX}c7B7J0K+cW+Ex z%NjApkn5i*^)(LKHlKr6(Y|i0aqY}aGhZ?td`{}d5PH~(YI(rHt#a9AB;ZKxmp5B< zhp5yyD!b~(=k#jrF=P|K0&kV5#Evd496n)zTF`%C&`xFx<{ou#O_8uy(~V=U`He5& z66{v2##qH+q&ijwceFC&S0p*;CiD69UVl@T1&(&hojDzlP#0Mw*K9DuI@qvtqkQ4E zkeenR$yZ6S!>Oh9(uF5@C~w7;v$-x(who+kGe+e+Px*MYI6Q1V$7T51Zl090FW7Z= zmcpcJj4t*;@S5(xcyz60#FTengF?g%wZw4J<6yi}!GIKFQXT+KTb>c*8A-)M?+Jf>N=+oYkV2O z(uftFmK}^o&Oh3-kUzwkd0h_wxNt$-PQJ-GFTQ*(<>#`gr63Bm#WSk!22 zvgIR-T#QE6Los3|yfpuJeX(;)J-N+iw=tFMrxR4~W*G$!mjj=S7jxPSWWz zz`$(T0$q1mgme(6oXBRVE%(AZdc>Vo+C(4*VvtLA&spt8JuV^g0zzq!Bk90;yIF7+ zuy+40j*T_51ZysnMJxwCd4?j@+WoU-r7%YVd!|lO9vlG(Iq_cm@z`l;EZq0RR3%G} z_b_g+`o{V9Kdr3swJ(kyve|}9ctcuOxXf%`dCpQ3mkdz6HEeq}yPmW^^d4?|rru79 z7$A_?v}~Kgqf=%=5)NL1gM6&61cCOlN;Bht)~5m)MR&QLnKRPg%R9W1h^0pQ zc+7aw%;yVVAUAyS?GtmK;-95ip5S^*Gu_>L22#Jvb$rh| zTW?C$^vKPNI7(3cHS^2D+ z2Am41f+kn*SQAbyF{^zI2w}_&$klS{hA%hYZU)AGVnLV7e9GCR{A$|{b%q$Ip4p7yRmK~g+!Civ84uqfs39ccyYjAgm;DfvCV8PwpU4zTu5*&gB+k9{L)qC%& z-TifScXie8oVus){ip9yl7)lE1polZfZ^mr9nPYH=9fPwepmni=g+SF(azS{)Ye&F z#lzmzNteyt#=0VILZOf2ZP2+7%Ge^4!>0dR@En|og&jH^8TpO_xb6;1%y*DR^cykfdCU@ftg3q;yExcT=Q39TaT+xP z#rT*HLnQB{q7MCkzMUZ`#2gW2n*xR*|HMPYO_6t^RkdYS{{76!TpTH-YYp_jqJNjS8SIH8ZD zF`MAe?ZE}X7?uYpIAzdkp<8~x7GjOd3c0(^zNvi86xS0=9)C8q=P z!wCzQ28Y-p{sfU(_LY2QeGCmXFITGa6_N}jb^1bsKZaLPf&fji1r6-UR;lxDU2Q%( zL=kS~TP&We=LqGmT0|}u^4G0(KFa_}dRs)B-+u}kc zcgr@08P2N>UqJUaje8&C2$Ahqjs&hJ1(%O(?JiUqxp43cXNcs}S!IIQ&{90(XYQJ| z=Fw>nK~72%5s_^0v!Y!y8E!MIiJ`AQ?w0ADZ?wpJbNZMenr1D`58s+ z-En+77O6Ls8`3*v6Wq)(x)j;_BTZG3cJNHa&Nh>K{<|$R{oV+q5Q<0uxjvyNUS2*s zHd}3YD)%8VdL{YK++hTeY2@Jp051gq0MZ?vclOm>m`+&u4n zPDNBLk5>kvN;^1vv~x3$otXP|A%A5`9-y31f$h>Q@L-W`9xr}Ou^|8IL0pm#065f( zkYk*m4=K|N#B^fAYGoB{@%R=-oM8F3j~`80c#ttVc>Ge37!s&*Ci3bAW*-}YDZlXE-uyZk---Z!Yd_*cu=bSHYt<=ja`yqko zDJp|ccg%!IOsE1oToDUQ5M*?gM~DLsW@7q25L8WqT-BGi53LS=%a7^joGFgt5qeJ0 z%AmT2WIkOVs|l~zdzxd)24%E%rz)NmrYlt*R1TUR=KiE7==%WiqKWtCq(V`eMgE<5 zABJIDv@C-!qK;i?@9f1EgSZXl$_8wQyOXJ3a*4b*Uag}|=S~~=G@<&U25w;rF#lm^ zf`5Uv+m%i|kN{i=k31o%$t2)Up6Q+;NLTr=2Aelrs+`DyJ72)`2%0GA)h{OYMLg_M zFJ*vHk-rZZf&+YrgK`Vr4U~oNr12_~r4!N68uiK75$pqH6d|H+D9~SaL^HmB~w6 zSnS?jMTyppAb%z$RT3x_CDK1cKKJhpTIElaDwC4`HO_c04>1ys^j_fVaj zKyJV52Z1Gu5`i>h0E z%@AEg&7^N;*`PRIgRskevZR-S0Pje^Kg3&(+7jwn=G^C+oP@G$(6s1-G3Kuoy`GyU z^q_X}eo!+eKg1`CGlY=1oxZ%Gu?v}%!SO%}Twm^TwXj8B^m?-Cu2|!e0aSa#CYV>v zBso+Y;IL=T)Mo8@^9++>HpIg?sRq3@)@2=WGhyX^5-&{)C|Ul&&c?CLbe`E+v~h^( z%D=I{l*waE!A8|Q(%j%=SD6k<6de~q)qR{|l+Rh&o_w1vLz6yL!F`UO6}0EqoM&cUMu8ma}1f$U?oI1tIaG0>;(JUgY%9Ca2A>w0>*L{DPbX5fJ5^J5i?R zk6$T@Pws2=a0{Y0rsqOU&q31EA8egJe;Hr>lY1;=vQ0%3Ql zk56ygKH&_!APOGmyugOhy_MG#WWOJyz<~PcL{V_)9+BkA`aR6$Jr-+t2YNQ&;)T>l zVR*ToNhKb&D2(bQh;HDtt)s~I{n+r=z0R}6`sE!;J>AQ%q$~Db&4AT~c!R75+tx-Cu8|12mfC_Ipk0*&x++S^UdiBiuvyySLPO^rXBTl?De*(8ygx{mua&RJxIA&@EON1_2 zBZ@?)cfc>I?R_?-;t9(^ed1N1|0Qq#fsJ&bG?5A;FY{o<)W3 z^rc6gHO<)bt@RBn`)kwcjnKeRbVwAq&JYS848rhm-w@93(o&)wPIed4fA)!}F?|$X zsZ!O!6Rthw|JvX0gh(GP9+TEOG%ke1b=VAc8|Zx4%cOTKb3clU&RU#A4hnF@8kPz^ zxNt4>{PhL~?vA8$n3)Rn*i+Y8-Q9m#BcAJ1t+ysjil&XQsQMC+hRk(>+FWSk)8vxo zYq-NHF0p_rqfCCja@rp+IfN-orx@}FoK2<_BlTr*6 zSbInAeO2Wn=O&WOO@SngM(4bHr2nNg!{>mZkb#tcJAJ!OZDz53=SkV-MLhca%b#ybIG=| z1rn4_;L3V)n=7i@{_6>6YG!3TK`_9Ldgo0rS05ggivoIG)^({)MO3HUre9k3>krLL zn+YLd=mPMv>{Q;r4Dj){yM6K1Q zxw4Cl^Yy_cDd?@`ODf&(yHgIocHR9LN$sQC!&M}0vreLisaeuYf+V}pmp;}yKLPt! z6k}-h>ky4J)JFXBBb=Y?e$}a+5AH* zp?1KT=a*Hid67(8i_iCqh+ePkKIjQlcVDMJQBVCi^Cte@;wt*9y*z0NC)*dIDW|x_ z^0dOFHniOxuug!4NnSbQ>GsBDi2{S75d|_oC{5eM!d~JdihF@6jch6Iwa)7X*l4yP z%wfM90oGTrVrXLd(;A$4E!tQGZNY#@dvX?%y6-oQ4ZYhSM^Vq{OGW!gFDFVrZ%Gaxtk#`Lsl6A@0%xoI-59(KHPY~|4IX#vOl!Ocya0S z1khj5D!MR`>yN5hnX-wHrnb?Is|6^}NgS2Nns$`Mxx$r~C*e0Q!ocZFDhAg-rAypo zN93cxfFP8ZzNQq0l-ULjOqGf_icIiO^NhRw(KTk_zDe6sz<_m;Z}a(x+r>!g6yrUX^_nsE$rYo)8GDUE3~sHj+hB;&!T9b+q}ZXVv8w{ZC9sX*Y#! ztn5{+25Y4knfT$eT-u#8kcI-GPyO2F?QIdNiv|e& zvyN-7DfNvjd=5-TQj~#5}9K63%Os=S4l-p9(bSc#xqz})4|_e2G{)4KoQfP{N`WI-k{{z{$;TB0<9QeubR4Pt65lzpI)Kt9{N$n~)YShQQtzTi_Gx4@q$O{nHV z@b)U&qjZZ-0`#$#!pm4=c{m1qMh0@3rZvP3@_K8$A~v;&8fin{B-{$Mg-!&8_gvud zL6&+Ho%WWh~FCm9y$+WEMr z+K(tH=Lx9daqyN&!|!8u2C`kg2vMfK+f!=k7%k(0nJ4>Z?dtsVgHEUff!c@z?tKMQ`7S-3View}tN$G3qVPa!< z#2^T6tTWYLAU=0*asG1`HSMDfwYM)>UT0JIp5m99U@-H+@y9#=#zFzuer6`c6(?0> zT`Vq_*psVuoHXM-HyN;fHvgiAxy0F4C~DQ^Qa~cFdKHr~wBe7=NxM-_QFbc1x88E~QY+n7I6)Wadx7e_TJVNzEx8#O~mGx}h{367D>1iJY zvJmwl0HjFIN)nIZ9f?PC8suw6_@nMV(_src*{w4;-qr*a=O`p z`A4{1T}G=02mKyicmtBgvA(cLuP-~8nKuM^k=5a@k4T$tv!5V?l*Po%Of;ene*zMDg zdS$5>?~r9v(QG!p4;Gw?E47=Nz~GE`u+EqOTm9}IEc=Q~(k~sRSZlY=8oEZm0!hOt zFeqsgA&;Te@O28Tx2x0cVMSu5B4q#4klt98gUibXtnDyqvG zC&J3zcqW3=x|FKppuHDyPe<5?Bya5XzWEwQEn<#a>G6Z*)t>vUYJh}kjftZ!<+9kd z;%x*Tg@sm5mMCE6dye`CnC_urM_lKnH0a!!Vg+T0`;&p-N=|ZUnG(|8hrYVB-Ruva zgU(&!>crgZe_<8VUi6mx^lN`TGCr27Ce6}kmQJ9i5$&j(FTT5{H4)mq3D)pIiM=;d z@pZFC{w>ixMlo-XB+W4AB?#gB%>3A8FEf)Bzo};9CW)ZUM)>R|(R>~u*(F^u`DxCC zxV0on)=FJH3Hc6@o?w)R<(m1>_ag7Jq~`ohuopqnWxS=|yCj9ykt0X{Sq`KZ z9k4DobmD=*s<@wIr;hQJjl?q4KSSM|;=FR9*e2Di@Mz~`zi!EIqP?S3HoM5-aqU*; zk&+dpc}lsmmV5Ayjl5=m?Ng&#lxsyw6w-DJ?{hsn1(i^objh+Rj~=Zej2CzF1P`zs zc}QPnSHZvTW%E=azpJd%GXTXaYA$+h<341?LuWX9@ z2EWtG*$~oGVcK}Gt7Z$o6zE+4|%6`kZ&m^S(zPt( zPI#uYlh%cD#@7QwHf{yP{q8xpb+b@9MtB~V2UIZE6!-E~tEbjT4?R=awX$xKP+-pu zn?#rIaK!M1DOBWEhh?3OOZ5;{NWYb&TUS7PX&L`YL<=eCwOPF!;Y9SLuP4wj<)FLo z85O~jQHci;(#OWx?V*P0THJA9u}=KEdM-NyEgq>eaPqY!&Go>OUlv?srxME;)i>rv zj`r$ANq$f`c$Ac(LjT=*y0)FwYoI+cjjpH3zHbeTAR#*^Qkt07G?Z4!(*c+qLL<3x zO?KnxaI~Y;1AKJ|Dbx3813oo`#NQ%h$9t?s(le6)Z)fTGzNDm#<44_?UjrF&W6=)0 z*Mw~X6S_RdS&GiR5StySI=ZIEtB8K+x5O^}hO;H(T!ZzBIW9RSX1)1oq^D+mQp=cS z24;QWcJZOMEK*%(VBOWhD!tnc&xos~)5NE(a4CC%tqv>H#WJ(h*Ie@uFr%phLYrBp zls}YfBprg*PU>mD>{PV$hS~O2Wl*v3V0bcL78?bfyV9w@iRqok@nn+&kTx$Z<3ko>I(zL5iB*~b zuQRVOO0qDpxPbrLN&C~({>SJ4$D#ONeYL+6{M}pnZ#V$p55xY4;@_O6zXSj7-24lO z^2gQt|9qUkGyUCB`4?0BKbijJulybS_m=*@!0zz>6UM(c_?2W45dZoG;m-j55hz9S H*Xh3ifdbCP literal 0 HcmV?d00001 diff --git a/web_JMW/docs/render-flowchart-jpg.ps1 b/web_JMW/docs/render-flowchart-jpg.ps1 new file mode 100644 index 0000000..ffc0a4d --- /dev/null +++ b/web_JMW/docs/render-flowchart-jpg.ps1 @@ -0,0 +1,136 @@ +Add-Type -AssemblyName System.Drawing + +$output = Join-Path $PSScriptRoot 'flowchart-sistem-utama.jpg' +$width = 1800 +$height = 2200 +$bitmap = New-Object System.Drawing.Bitmap $width, $height +$graphics = [System.Drawing.Graphics]::FromImage($bitmap) +$graphics.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias +$graphics.TextRenderingHint = [System.Drawing.Text.TextRenderingHint]::ClearTypeGridFit + +$graphics.Clear([System.Drawing.Color]::White) + +$titleFont = New-Object System.Drawing.Font('Segoe UI', 30, [System.Drawing.FontStyle]::Bold) +$boxFont = New-Object System.Drawing.Font('Segoe UI', 16, [System.Drawing.FontStyle]::Regular) +$smallFont = New-Object System.Drawing.Font('Segoe UI', 13, [System.Drawing.FontStyle]::Regular) +$textBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(25, 33, 45)) +$linePen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(55, 65, 81), 3) +$arrowPen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(55, 65, 81), 3) +$arrowPen.CustomEndCap = New-Object System.Drawing.Drawing2D.AdjustableArrowCap(7, 7) + +$userBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(232, 246, 239)) +$systemBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(232, 240, 255)) +$adminBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(255, 243, 226)) +$decisionBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(250, 250, 252)) + +$format = New-Object System.Drawing.StringFormat +$format.Alignment = [System.Drawing.StringAlignment]::Center +$format.LineAlignment = [System.Drawing.StringAlignment]::Center + +function Draw-Box { + param( + [int] $X, + [int] $Y, + [int] $W, + [int] $H, + [string] $Text, + [System.Drawing.Brush] $Brush + ) + + $rect = [System.Drawing.Rectangle]::new($X, $Y, $W, $H) + $graphics.FillRectangle($Brush, $rect) + $graphics.DrawRectangle($linePen, $rect) + $textRect = [System.Drawing.RectangleF]::new(($X + 12), ($Y + 8), ($W - 24), ($H - 16)) + $graphics.DrawString($Text, $boxFont, $textBrush, $textRect, $format) +} + +function Draw-Decision { + param( + [int] $X, + [int] $Y, + [int] $W, + [int] $H, + [string] $Text + ) + + $points = @( + [System.Drawing.Point]::new($X + [int]($W / 2), $Y), + [System.Drawing.Point]::new($X + $W, $Y + [int]($H / 2)), + [System.Drawing.Point]::new($X + [int]($W / 2), $Y + $H), + [System.Drawing.Point]::new($X, $Y + [int]($H / 2)) + ) + + $graphics.FillPolygon($decisionBrush, $points) + $graphics.DrawPolygon($linePen, $points) + $textRect = [System.Drawing.RectangleF]::new(($X + 28), ($Y + 18), ($W - 56), ($H - 36)) + $graphics.DrawString($Text, $boxFont, $textBrush, $textRect, $format) +} + +function Draw-Arrow { + param( + [int] $X1, + [int] $Y1, + [int] $X2, + [int] $Y2, + [string] $Label = '' + ) + + $graphics.DrawLine($arrowPen, $X1, $Y1, $X2, $Y2) + + if ($Label) { + $midX = [int](($X1 + $X2) / 2) + $midY = [int](($Y1 + $Y2) / 2) + $labelRect = [System.Drawing.RectangleF]::new(($midX - 85), ($midY - 20), 170, 36) + $graphics.FillRectangle([System.Drawing.Brushes]::White, $labelRect) + $graphics.DrawString($Label, $smallFont, $textBrush, $labelRect, $format) + } +} + +$graphics.DrawString('Flowchart Sistem Jual Mobil Bekas JMW', $titleFont, $textBrush, [System.Drawing.RectangleF]::new(0, 30, $width, 65), $format) + +Draw-Box 725 130 350 70 'Mulai' $systemBrush +Draw-Box 725 250 350 90 'User membuka website' $userBrush +Draw-Decision 700 390 400 130 'Sudah login?' +Draw-Box 225 580 350 95 'Login / Register' $userBrush +Draw-Box 725 580 350 95 'Katalog mobil bekas' $userBrush +Draw-Box 1225 580 350 95 'Dashboard admin' $adminBrush +Draw-Box 725 770 350 100 'Release reservasi kedaluwarsa' $systemBrush +Draw-Decision 700 940 400 130 'Pilih fitur user' +Draw-Box 180 1150 430 105 'Input budget dan lihat rekomendasi' $userBrush +Draw-Box 685 1150 430 105 'Detail mobil dan hubungi WhatsApp admin' $userBrush +Draw-Box 1190 1150 430 105 'Kelola mobil, transaksi, dan laporan' $adminBrush +Draw-Box 180 1350 430 115 'Flask API K-Means / fallback Laravel mencari rekomendasi' $systemBrush +Draw-Decision 700 1360 400 130 'User klik bayar?' +Draw-Box 725 1550 350 105 'Buat transaksi pending' $systemBrush +Draw-Box 725 1710 350 105 'Mobil menjadi reserved' $systemBrush +Draw-Decision 700 1870 400 130 'Upload bukti sebelum 10 menit?' +Draw-Box 225 2030 350 95 'Kedaluwarsa: transaksi cancelled, mobil available' $systemBrush +Draw-Box 725 2030 350 95 'Menunggu konfirmasi admin' $systemBrush +Draw-Box 1225 2030 350 95 'Admin konfirmasi: transaksi paid, mobil sold' $adminBrush + +Draw-Arrow 900 200 900 250 +Draw-Arrow 900 340 900 390 +Draw-Arrow 700 455 575 625 'belum' +Draw-Arrow 900 520 900 580 'user' +Draw-Arrow 1100 455 1225 625 'admin' +Draw-Arrow 575 628 725 628 +Draw-Arrow 900 675 900 770 +Draw-Arrow 900 870 900 940 +Draw-Arrow 700 1005 610 1200 'budget' +Draw-Arrow 900 1070 900 1150 'detail' +Draw-Arrow 1100 1005 1190 1200 'admin' +Draw-Arrow 395 1255 395 1350 +Draw-Arrow 610 1408 700 1425 +Draw-Arrow 900 1255 900 1360 +Draw-Arrow 900 1490 900 1550 'ya' +Draw-Arrow 900 1655 900 1710 +Draw-Arrow 900 1815 900 1870 +Draw-Arrow 700 1935 575 2078 'tidak' +Draw-Arrow 900 2000 900 2030 'ya' +Draw-Arrow 1075 2078 1225 2078 + +$bitmap.Save($output, [System.Drawing.Imaging.ImageFormat]::Jpeg) +$graphics.Dispose() +$bitmap.Dispose() + +Get-Item $output | Select-Object FullName, Length diff --git a/web_JMW/docs/render-flowchart-user-drawio-jpg.ps1 b/web_JMW/docs/render-flowchart-user-drawio-jpg.ps1 new file mode 100644 index 0000000..dc0f623 --- /dev/null +++ b/web_JMW/docs/render-flowchart-user-drawio-jpg.ps1 @@ -0,0 +1,138 @@ +Add-Type -AssemblyName System.Drawing + +$output = Join-Path $PSScriptRoot 'flowchart-user-drawio.jpg' +$width = 1500 +$height = 1900 +$bitmap = New-Object System.Drawing.Bitmap $width, $height +$graphics = [System.Drawing.Graphics]::FromImage($bitmap) +$graphics.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias +$graphics.TextRenderingHint = [System.Drawing.Text.TextRenderingHint]::ClearTypeGridFit +$graphics.Clear([System.Drawing.Color]::White) + +$titleFont = New-Object System.Drawing.Font('Arial', 26, [System.Drawing.FontStyle]::Bold) +$font = New-Object System.Drawing.Font('Arial', 15, [System.Drawing.FontStyle]::Regular) +$smallFont = New-Object System.Drawing.Font('Arial', 12, [System.Drawing.FontStyle]::Regular) +$textBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(29, 41, 57)) +$boxFill = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(218, 232, 252)) +$boxStroke = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(108, 142, 191), 2) +$decisionFill = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(255, 242, 204)) +$decisionStroke = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(214, 182, 86), 2) +$endFill = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(213, 232, 212)) +$endStroke = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(130, 179, 102), 2) +$cancelFill = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(248, 206, 204)) +$cancelStroke = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(184, 84, 80), 2) +$linePen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(80, 80, 80), 2) +$linePen.CustomEndCap = New-Object System.Drawing.Drawing2D.AdjustableArrowCap(6, 6) +$shadowBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(28, 0, 0, 0)) + +$center = New-Object System.Drawing.StringFormat +$center.Alignment = [System.Drawing.StringAlignment]::Center +$center.LineAlignment = [System.Drawing.StringAlignment]::Center + +function Get-RoundedPath { + param([int] $X, [int] $Y, [int] $W, [int] $H, [int] $R) + $path = New-Object System.Drawing.Drawing2D.GraphicsPath + $path.AddArc($X, $Y, $R, $R, 180, 90) + $path.AddArc(($X + $W - $R), $Y, $R, $R, 270, 90) + $path.AddArc(($X + $W - $R), ($Y + $H - $R), $R, $R, 0, 90) + $path.AddArc($X, ($Y + $H - $R), $R, $R, 90, 90) + $path.CloseFigure() + return $path +} + +function Draw-Node { + param( + [int] $X, + [int] $Y, + [int] $W, + [int] $H, + [string] $Text, + [System.Drawing.Brush] $Fill, + [System.Drawing.Pen] $Stroke, + [bool] $Rounded = $true + ) + + if ($Rounded) { + $shadow = Get-RoundedPath ($X + 4) ($Y + 4) $W $H 18 + $path = Get-RoundedPath $X $Y $W $H 18 + $graphics.FillPath($shadowBrush, $shadow) + $graphics.FillPath($Fill, $path) + $graphics.DrawPath($Stroke, $path) + } else { + $shadowPoints = @( + [System.Drawing.Point]::new($X + [int]($W / 2) + 4, $Y + 4), + [System.Drawing.Point]::new($X + $W + 4, $Y + [int]($H / 2) + 4), + [System.Drawing.Point]::new($X + [int]($W / 2) + 4, $Y + $H + 4), + [System.Drawing.Point]::new($X + 4, $Y + [int]($H / 2) + 4) + ) + $points = @( + [System.Drawing.Point]::new($X + [int]($W / 2), $Y), + [System.Drawing.Point]::new($X + $W, $Y + [int]($H / 2)), + [System.Drawing.Point]::new($X + [int]($W / 2), $Y + $H), + [System.Drawing.Point]::new($X, $Y + [int]($H / 2)) + ) + $graphics.FillPolygon($shadowBrush, $shadowPoints) + $graphics.FillPolygon($Fill, $points) + $graphics.DrawPolygon($Stroke, $points) + } + + $rect = [System.Drawing.RectangleF]::new(($X + 16), ($Y + 10), ($W - 32), ($H - 20)) + $graphics.DrawString($Text, $font, $textBrush, $rect, $center) +} + +function Draw-Line { + param([int[]] $Points, [string] $Label = '') + for ($i = 0; $i -lt $Points.Length - 4; $i += 2) { + $plainPen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(80, 80, 80), 2) + $graphics.DrawLine($plainPen, $Points[$i], $Points[$i + 1], $Points[$i + 2], $Points[$i + 3]) + $plainPen.Dispose() + } + $last = $Points.Length - 4 + $graphics.DrawLine($linePen, $Points[$last], $Points[$last + 1], $Points[$last + 2], $Points[$last + 3]) + + if ($Label) { + $mx = [int](($Points[0] + $Points[2]) / 2) + $my = [int](($Points[1] + $Points[3]) / 2) + $labelRect = [System.Drawing.RectangleF]::new(($mx - 55), ($my - 18), 110, 30) + $graphics.FillRectangle([System.Drawing.Brushes]::White, $labelRect) + $graphics.DrawString($Label, $smallFont, $textBrush, $labelRect, $center) + } +} + +$graphics.DrawString('Flowchart Sistem User', $titleFont, $textBrush, [System.Drawing.RectangleF]::new(0, 35, $width, 60), $center) + +Draw-Node 600 130 300 70 'Mulai' $endFill $endStroke +Draw-Node 600 250 300 75 'User membuka website' $boxFill $boxStroke +Draw-Node 560 380 380 120 'Sudah login?' $decisionFill $decisionStroke $false +Draw-Node 170 565 300 75 'Login / Register' $boxFill $boxStroke +Draw-Node 600 565 300 75 'Lihat katalog mobil' $boxFill $boxStroke +Draw-Node 600 705 300 75 'Cari rekomendasi / lihat detail' $boxFill $boxStroke +Draw-Node 560 840 380 120 'Ingin membeli mobil?' $decisionFill $decisionStroke $false +Draw-Node 1025 865 310 75 'Hubungi admin / selesai' $endFill $endStroke +Draw-Node 600 1015 300 75 'Buat transaksi pending' $boxFill $boxStroke +Draw-Node 600 1155 300 75 'Upload bukti pembayaran' $boxFill $boxStroke +Draw-Node 560 1290 380 120 'Bukti valid dan tepat waktu?' $decisionFill $decisionStroke $false +Draw-Node 170 1485 300 75 'Transaksi dibatalkan' $cancelFill $cancelStroke +Draw-Node 600 1485 300 75 'Menunggu konfirmasi admin' $boxFill $boxStroke +Draw-Node 600 1630 300 70 'Selesai' $endFill $endStroke + +Draw-Line @(750,200,750,250) +Draw-Line @(750,325,750,380) +Draw-Line @(560,440,405,440,405,565) 'belum' +Draw-Line @(750,500,750,565) 'ya' +Draw-Line @(470,603,600,603) +Draw-Line @(750,640,750,705) +Draw-Line @(750,780,750,840) +Draw-Line @(940,900,1025,900) 'tidak' +Draw-Line @(750,960,750,1015) 'ya' +Draw-Line @(750,1090,750,1155) +Draw-Line @(750,1230,750,1290) +Draw-Line @(560,1350,405,1350,405,1485) 'tidak' +Draw-Line @(750,1410,750,1485) 'ya' +Draw-Line @(750,1560,750,1630) + +$bitmap.Save($output, [System.Drawing.Imaging.ImageFormat]::Jpeg) +$graphics.Dispose() +$bitmap.Dispose() + +Get-Item $output | Select-Object FullName, Length diff --git a/web_JMW/docs/render-flowchart-user-jpg.ps1 b/web_JMW/docs/render-flowchart-user-jpg.ps1 new file mode 100644 index 0000000..520e4fa --- /dev/null +++ b/web_JMW/docs/render-flowchart-user-jpg.ps1 @@ -0,0 +1,159 @@ +Add-Type -AssemblyName System.Drawing + +$output = Join-Path $PSScriptRoot 'flowchart-sistem-user.jpg' +$width = 1700 +$height = 3200 +$bitmap = New-Object System.Drawing.Bitmap $width, $height +$graphics = [System.Drawing.Graphics]::FromImage($bitmap) +$graphics.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias +$graphics.TextRenderingHint = [System.Drawing.Text.TextRenderingHint]::ClearTypeGridFit +$graphics.Clear([System.Drawing.Color]::White) + +$titleFont = New-Object System.Drawing.Font('Segoe UI', 30, [System.Drawing.FontStyle]::Bold) +$boxFont = New-Object System.Drawing.Font('Segoe UI', 16, [System.Drawing.FontStyle]::Regular) +$smallFont = New-Object System.Drawing.Font('Segoe UI', 13, [System.Drawing.FontStyle]::Regular) +$textBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(25, 33, 45)) +$linePen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(55, 65, 81), 3) +$arrowPen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(55, 65, 81), 3) +$arrowPen.CustomEndCap = New-Object System.Drawing.Drawing2D.AdjustableArrowCap(7, 7) + +$startBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(232, 240, 255)) +$userBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(232, 246, 239)) +$systemBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(238, 242, 247)) +$decisionBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(250, 250, 252)) +$warningBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(255, 243, 226)) + +$format = New-Object System.Drawing.StringFormat +$format.Alignment = [System.Drawing.StringAlignment]::Center +$format.LineAlignment = [System.Drawing.StringAlignment]::Center + +function Draw-Box { + param( + [int] $X, + [int] $Y, + [int] $W, + [int] $H, + [string] $Text, + [System.Drawing.Brush] $Brush + ) + + $rect = [System.Drawing.Rectangle]::new($X, $Y, $W, $H) + $graphics.FillRectangle($Brush, $rect) + $graphics.DrawRectangle($linePen, $rect) + $textRect = [System.Drawing.RectangleF]::new(($X + 14), ($Y + 8), ($W - 28), ($H - 16)) + $graphics.DrawString($Text, $boxFont, $textBrush, $textRect, $format) +} + +function Draw-Decision { + param( + [int] $X, + [int] $Y, + [int] $W, + [int] $H, + [string] $Text + ) + + $points = @( + [System.Drawing.Point]::new($X + [int]($W / 2), $Y), + [System.Drawing.Point]::new($X + $W, $Y + [int]($H / 2)), + [System.Drawing.Point]::new($X + [int]($W / 2), $Y + $H), + [System.Drawing.Point]::new($X, $Y + [int]($H / 2)) + ) + + $graphics.FillPolygon($decisionBrush, $points) + $graphics.DrawPolygon($linePen, $points) + $textRect = [System.Drawing.RectangleF]::new(($X + 34), ($Y + 18), ($W - 68), ($H - 36)) + $graphics.DrawString($Text, $boxFont, $textBrush, $textRect, $format) +} + +function Draw-Arrow { + param( + [int] $X1, + [int] $Y1, + [int] $X2, + [int] $Y2, + [string] $Label = '' + ) + + $graphics.DrawLine($arrowPen, $X1, $Y1, $X2, $Y2) + + if ($Label) { + $midX = [int](($X1 + $X2) / 2) + $midY = [int](($Y1 + $Y2) / 2) + $labelRect = [System.Drawing.RectangleF]::new(($midX - 95), ($midY - 20), 190, 36) + $graphics.FillRectangle([System.Drawing.Brushes]::White, $labelRect) + $graphics.DrawString($Label, $smallFont, $textBrush, $labelRect, $format) + } +} + +$graphics.DrawString('Flowchart Sistem User', $titleFont, $textBrush, [System.Drawing.RectangleF]::new(0, 30, $width, 65), $format) +$graphics.DrawString('Website Jual Mobil Bekas JMW', $smallFont, $textBrush, [System.Drawing.RectangleF]::new(0, 88, $width, 40), $format) + +Draw-Box 675 150 350 70 'Mulai' $startBrush +Draw-Box 675 270 350 90 'User membuka website' $userBrush +Draw-Box 675 420 350 95 'Sistem menampilkan halaman awal' $systemBrush +Draw-Decision 640 575 420 130 'User sudah login?' + +Draw-Box 170 760 380 95 'Login atau register akun' $userBrush +Draw-Box 170 920 380 100 'Sistem validasi akun user' $systemBrush +Draw-Decision 150 1090 420 130 'Data valid?' + +Draw-Box 675 760 350 95 'Masuk ke katalog mobil' $userBrush +Draw-Box 675 920 350 100 'Sistem release reservasi kedaluwarsa' $systemBrush +Draw-Box 675 1085 350 95 'Tampilkan mobil available' $systemBrush +Draw-Decision 640 1245 420 130 'User input budget?' + +Draw-Box 185 1445 390 105 'Input budget rekomendasi' $userBrush +Draw-Box 185 1615 390 115 'Sistem proses rekomendasi K-Means' $systemBrush +Draw-Decision 170 1810 420 130 'API rekomendasi berhasil?' +Draw-Box 90 2020 360 105 'Tampilkan rekomendasi Python' $systemBrush +Draw-Box 500 2020 360 105 'Fallback rekomendasi Laravel' $warningBrush + +Draw-Box 675 1445 350 105 'User melihat semua mobil' $userBrush +Draw-Box 675 2215 350 105 'User membuka detail mobil' $userBrush +Draw-Box 675 2380 350 105 'User dapat favoritkan mobil atau hubungi WhatsApp' $userBrush +Draw-Decision 640 2550 420 130 'User ingin membeli?' +Draw-Decision 640 2740 420 130 'Mobil masih available?' + +Draw-Box 1160 2555 360 105 'Selesai melihat katalog' $startBrush +Draw-Box 1160 2745 360 105 'Tampilkan pesan mobil tidak tersedia' $warningBrush + +Draw-Box 675 2920 350 95 'Buat transaksi pending' $systemBrush +Draw-Box 200 2920 350 95 'Transaksi dibatalkan, mobil available' $warningBrush +Draw-Box 1110 2920 390 95 'Upload bukti pembayaran, menunggu konfirmasi' $userBrush + +Draw-Arrow 850 220 850 270 +Draw-Arrow 850 360 850 420 +Draw-Arrow 850 515 850 575 +Draw-Arrow 640 640 550 808 'belum' +Draw-Arrow 850 705 850 760 'sudah' +Draw-Arrow 360 855 360 920 +Draw-Arrow 360 1020 360 1090 +Draw-Arrow 570 1155 675 808 'ya' +Draw-Arrow 150 1155 110 808 'tidak' +Draw-Arrow 850 855 850 920 +Draw-Arrow 850 1020 850 1085 +Draw-Arrow 850 1180 850 1245 +Draw-Arrow 640 1310 575 1498 'ya' +Draw-Arrow 850 1375 850 1445 'tidak' +Draw-Arrow 380 1550 380 1615 +Draw-Arrow 380 1730 380 1810 +Draw-Arrow 275 1940 275 2020 'ya' +Draw-Arrow 485 1875 680 2020 'tidak' +Draw-Arrow 450 2072 675 2268 +Draw-Arrow 680 2072 850 2215 +Draw-Arrow 850 1550 850 2215 +Draw-Arrow 850 2320 850 2380 +Draw-Arrow 850 2485 850 2550 +Draw-Arrow 1060 2615 1160 2608 'tidak' +Draw-Arrow 850 2680 850 2740 'ya' +Draw-Arrow 1060 2805 1160 2798 'tidak' +Draw-Arrow 850 2870 850 2920 'ya' +Draw-Arrow 1025 2968 1110 2968 +Draw-Arrow 675 2968 550 2968 'lewat 10 menit' + +$bitmap.Save($output, [System.Drawing.Imaging.ImageFormat]::Jpeg) +$graphics.Dispose() +$bitmap.Dispose() + +Get-Item $output | Select-Object FullName, Length diff --git a/web_JMW/docs/render-flowchart-user-sederhana-jpg.ps1 b/web_JMW/docs/render-flowchart-user-sederhana-jpg.ps1 new file mode 100644 index 0000000..6d5e7d8 --- /dev/null +++ b/web_JMW/docs/render-flowchart-user-sederhana-jpg.ps1 @@ -0,0 +1,99 @@ +Add-Type -AssemblyName System.Drawing + +$output = Join-Path $PSScriptRoot 'flowchart-user-sederhana.jpg' +$width = 1400 +$height = 1700 +$bitmap = New-Object System.Drawing.Bitmap $width, $height +$graphics = [System.Drawing.Graphics]::FromImage($bitmap) +$graphics.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias +$graphics.TextRenderingHint = [System.Drawing.Text.TextRenderingHint]::ClearTypeGridFit +$graphics.Clear([System.Drawing.Color]::White) + +$titleFont = New-Object System.Drawing.Font('Segoe UI', 28, [System.Drawing.FontStyle]::Bold) +$boxFont = New-Object System.Drawing.Font('Segoe UI', 17, [System.Drawing.FontStyle]::Regular) +$smallFont = New-Object System.Drawing.Font('Segoe UI', 13, [System.Drawing.FontStyle]::Regular) +$textBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(25, 33, 45)) +$linePen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(55, 65, 81), 3) +$arrowPen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(55, 65, 81), 3) +$arrowPen.CustomEndCap = New-Object System.Drawing.Drawing2D.AdjustableArrowCap(7, 7) +$boxBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(232, 246, 239)) +$systemBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(232, 240, 255)) +$decisionBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(250, 250, 252)) +$endBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(255, 243, 226)) + +$format = New-Object System.Drawing.StringFormat +$format.Alignment = [System.Drawing.StringAlignment]::Center +$format.LineAlignment = [System.Drawing.StringAlignment]::Center + +function Draw-Box { + param([int] $X, [int] $Y, [int] $W, [int] $H, [string] $Text, [System.Drawing.Brush] $Brush) + $rect = [System.Drawing.Rectangle]::new($X, $Y, $W, $H) + $graphics.FillRectangle($Brush, $rect) + $graphics.DrawRectangle($linePen, $rect) + $textRect = [System.Drawing.RectangleF]::new(($X + 14), ($Y + 8), ($W - 28), ($H - 16)) + $graphics.DrawString($Text, $boxFont, $textBrush, $textRect, $format) +} + +function Draw-Decision { + param([int] $X, [int] $Y, [int] $W, [int] $H, [string] $Text) + $points = @( + [System.Drawing.Point]::new($X + [int]($W / 2), $Y), + [System.Drawing.Point]::new($X + $W, $Y + [int]($H / 2)), + [System.Drawing.Point]::new($X + [int]($W / 2), $Y + $H), + [System.Drawing.Point]::new($X, $Y + [int]($H / 2)) + ) + $graphics.FillPolygon($decisionBrush, $points) + $graphics.DrawPolygon($linePen, $points) + $textRect = [System.Drawing.RectangleF]::new(($X + 35), ($Y + 18), ($W - 70), ($H - 36)) + $graphics.DrawString($Text, $boxFont, $textBrush, $textRect, $format) +} + +function Draw-Arrow { + param([int] $X1, [int] $Y1, [int] $X2, [int] $Y2, [string] $Label = '') + $graphics.DrawLine($arrowPen, $X1, $Y1, $X2, $Y2) + if ($Label) { + $midX = [int](($X1 + $X2) / 2) + $midY = [int](($Y1 + $Y2) / 2) + $labelRect = [System.Drawing.RectangleF]::new(($midX - 65), ($midY - 19), 130, 34) + $graphics.FillRectangle([System.Drawing.Brushes]::White, $labelRect) + $graphics.DrawString($Label, $smallFont, $textBrush, $labelRect, $format) + } +} + +$graphics.DrawString('Flowchart Sistem User', $titleFont, $textBrush, [System.Drawing.RectangleF]::new(0, 35, $width, 65), $format) + +Draw-Box 525 130 350 70 'Mulai' $systemBrush +Draw-Box 525 250 350 85 'User membuka website' $boxBrush +Draw-Decision 500 390 400 120 'Sudah login?' +Draw-Box 120 570 330 85 'Login / Register' $boxBrush +Draw-Box 525 570 350 85 'Lihat katalog mobil' $boxBrush +Draw-Box 525 710 350 85 'Cari rekomendasi / lihat detail' $boxBrush +Draw-Decision 500 850 400 120 'Ingin membeli mobil?' +Draw-Box 970 870 330 85 'Hubungi admin / selesai' $endBrush +Draw-Box 525 1030 350 85 'Buat transaksi pending' $systemBrush +Draw-Box 525 1170 350 85 'Upload bukti pembayaran' $boxBrush +Draw-Decision 500 1310 400 120 'Bukti valid dan tepat waktu?' +Draw-Box 120 1490 330 85 'Transaksi dibatalkan' $endBrush +Draw-Box 525 1490 350 85 'Menunggu konfirmasi admin' $systemBrush +Draw-Box 525 1605 350 60 'Selesai' $systemBrush + +Draw-Arrow 700 200 700 250 +Draw-Arrow 700 335 700 390 +Draw-Arrow 500 450 450 612 'belum' +Draw-Arrow 700 510 700 570 'ya' +Draw-Arrow 450 612 525 612 +Draw-Arrow 700 655 700 710 +Draw-Arrow 700 795 700 850 +Draw-Arrow 900 910 970 912 'tidak' +Draw-Arrow 700 970 700 1030 'ya' +Draw-Arrow 700 1115 700 1170 +Draw-Arrow 700 1255 700 1310 +Draw-Arrow 500 1370 450 1532 'tidak' +Draw-Arrow 700 1430 700 1490 'ya' +Draw-Arrow 700 1575 700 1605 + +$bitmap.Save($output, [System.Drawing.Imaging.ImageFormat]::Jpeg) +$graphics.Dispose() +$bitmap.Dispose() + +Get-Item $output | Select-Object FullName, Length diff --git a/web_JMW/flask_api/README.md b/web_JMW/flask_api/README.md new file mode 100644 index 0000000..0d941ba --- /dev/null +++ b/web_JMW/flask_api/README.md @@ -0,0 +1,85 @@ +# Flask API Rekomendasi Mobil + +API sederhana untuk rekomendasi mobil berdasarkan budget user. API mencari dataset dari urutan berikut: + +```txt +CAR_DATASET_PATH +storage/app/dataset_final.csv +database/dataset_final.csv +database/dataset_final.xls +storage/app/dataset_mobil.csv +``` + +Jika file final kamu bernama `dataset_final.csv`, letakkan di `storage/app/dataset_final.csv` atau `database/dataset_final.csv`. + +## Menjalankan API + +```bash +cd flask_api +python -m venv .venv +.venv\Scripts\activate +pip install -r requirements.txt +python app.py +``` + +API berjalan di: + +```txt +http://127.0.0.1:5000 +``` + +## Cek Status + +```bash +curl http://127.0.0.1:5000/health +``` + +## Rekomendasi Sederhana + +```bash +curl -X POST http://127.0.0.1:5000/recommend ^ + -H "Content-Type: application/json" ^ + -d "{\"budget\":200000000,\"limit\":10}" +``` + +## Rekomendasi Kompleks + +Endpoint yang sama juga mendukung preferensi, filter ketat, strategi budget, dan bobot skor: + +```bash +curl -X POST http://127.0.0.1:5000/recommend ^ + -H "Content-Type: application/json" ^ + -d "{\"budget\":200000000,\"limit\":5,\"strategi\":\"premium\",\"preferensi\":{\"kategori\":\"suv\",\"transmisi\":\"automatic\",\"bahan_bakar\":\"bensin\",\"mesin_cc\":1500},\"filter\":{\"tahun_min\":2015},\"bobot\":{\"budget\":0.35,\"preference\":0.35,\"year\":0.2,\"engine\":0.1}}" +``` + +Field request: + +- `budget`: wajib, maksimal budget user. +- `limit`: jumlah rekomendasi, maksimal 50. +- `strategi`: `hemat`, `seimbang`, atau `premium`. +- Gunakan `strategi: "harga_pas"` atau `strategi: "spesifik"` jika ingin hasil paling dekat dengan nominal budget yang dimasukkan. +- `preferensi`: nilai yang disukai, misalnya `merk`, `kategori`, `transmisi`, `bahan_bakar`, `cluster`, atau `mesin_cc`. +- `filter`: syarat wajib, misalnya `tahun_min`, `tahun_max`, `mesin_min`, `mesin_max`, `kategori`, `transmisi`, `bahan_bakar`, `merk`, `cluster`, atau `toleransi_harga_percent`. +- `bobot`: pengaturan bobot skor untuk `budget`, `preference`, `year`, `engine`, dan `cluster`. +- `include_above_budget`: `true` jika ingin tetap menampilkan mobil sedikit di atas budget. +- `max_over_budget_percent`: batas persen di atas budget jika `include_above_budget` aktif. + +Response berisi daftar mobil dengan `score`, `score_detail`, `selisih_budget`, `model_cluster`, dan `alasan` agar frontend bisa menjelaskan kenapa mobil tersebut direkomendasikan. + +## Integrasi Laravel + +Laravel membaca URL Flask dari: + +```env +CAR_RECOMMENDATION_API_URL=http://127.0.0.1:5000 +CAR_RECOMMENDATION_API_TIMEOUT=3 +``` + +Alur integrasi: + +1. User mengisi budget di halaman `/mobil-bekas`. +2. `CategoryController` memanggil `App\Services\CarRecommendationService`. +3. Service mengirim request ke Flask `/recommend`. +4. Flask melatih K-Means dari dataset dengan fitur `harga`, `tahun`, dan `mesin_cc`. +5. Hasil Python dicocokkan kembali ke data `categories` Laravel untuk ditampilkan di card mobil. +6. Jika Flask tidak aktif, Laravel otomatis memakai fallback rekomendasi lokal. diff --git a/web_JMW/flask_api/__pycache__/app.cpython-310.pyc b/web_JMW/flask_api/__pycache__/app.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed8800428683ed094e52afe57ca7e9cf2d4fc66e GIT binary patch literal 18472 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 0 + AND year IS NOT NULL + AND mesin_cc IS NOT NULL + ORDER BY created_at DESC, id DESC + """ + ) + rows = cursor.fetchall() + finally: + connection.close() + + cars = [] + for index, row in enumerate(rows, start=1): + car = category_row_to_car(row, index) + if car["harga"] > 0: + cars.append(car) + + return cars + + +def load_cars_from_dataset(): + dataset_path = get_dataset_path() + + if not dataset_path: + searched_paths = [str(path) for path in dataset_candidates()] + raise FileNotFoundError(f"Dataset tidak ditemukan. Lokasi yang dicek: {searched_paths}") + + cars = [] + with dataset_path.open("r", encoding="utf-8-sig", newline="") as dataset: + for index, row in enumerate(DictReader(dataset), start=1): + price = to_int(row.get("Harga")) + if price <= 0: + continue + + cars.append( + { + "id": index, + "merk": row.get("merk", "").strip(), + "model": row.get("model", "").strip(), + "nama": f"{row.get('merk', '').strip()} {row.get('model', '').strip()}".strip(), + "kategori": row.get("kategori", "").strip(), + "tahun": to_int(row.get("tahun")), + "mesin_cc": to_int(row.get("mesin_cc")), + "transmisi": row.get("transmisi", "").strip(), + "bahan_bakar": row.get("bahan_bakar", "").strip(), + "harga": price, + "cluster": to_int(row.get("cluster"), default=None), + "source": "dataset", + } + ) + + return cars + + +def load_cars(): + try: + cars = load_cars_from_database() + if cars: + return cars + except Exception: + pass + + return load_cars_from_dataset() + + +def get_dataset_path(): + for path in dataset_candidates(): + if path.exists() and path.is_file(): + return path + + return None + + +def matches_filters(car, filters): + allowed_categories = as_list(filters.get("kategori") or filters.get("category")) + allowed_transmissions = as_list(filters.get("transmisi") or filters.get("transmission")) + allowed_fuels = as_list(filters.get("bahan_bakar") or filters.get("fuel")) + allowed_brands = as_list(filters.get("merk") or filters.get("brand")) + allowed_clusters = [to_int(cluster, default=None) for cluster in as_list(filters.get("cluster"))] + allowed_clusters = [cluster for cluster in allowed_clusters if cluster is not None] + + if allowed_categories and normalize_text(car["kategori"]) not in allowed_categories: + return False + if allowed_transmissions and normalize_text(car["transmisi"]) not in allowed_transmissions: + return False + if allowed_fuels and normalize_text(car["bahan_bakar"]) not in allowed_fuels: + return False + if allowed_brands and normalize_text(car["merk"]) not in allowed_brands: + return False + if allowed_clusters and car["cluster"] not in allowed_clusters: + return False + + min_year = to_int(filters.get("tahun_min") or filters.get("min_tahun"), default=None) + max_year = to_int(filters.get("tahun_max") or filters.get("max_tahun"), default=None) + min_engine = to_int(filters.get("mesin_min") or filters.get("min_mesin_cc"), default=None) + max_engine = to_int(filters.get("mesin_max") or filters.get("max_mesin_cc"), default=None) + + if min_year is not None and car["tahun"] < min_year: + return False + if max_year is not None and car["tahun"] > max_year: + return False + if min_engine is not None and car["mesin_cc"] < min_engine: + return False + if max_engine is not None and car["mesin_cc"] > max_engine: + return False + + return True + + +def preference_match_score(car, preferences): + scores = [] + reasons = [] + + preference_fields = [ + ("merk", "merk"), + ("kategori", "kategori"), + ("transmisi", "transmisi"), + ("bahan_bakar", "bahan bakar"), + ] + + for field, label in preference_fields: + desired_values = as_list(preferences.get(field)) + if not desired_values: + continue + + if normalize_text(car[field]) in desired_values: + scores.append(1) + reasons.append(f"Cocok dengan preferensi {label}: {car[field]}") + else: + scores.append(0) + + preferred_cluster = preferences.get("cluster") + if preferred_cluster is not None: + preferred_cluster = to_int(preferred_cluster, default=None) + scores.append(1 if car["cluster"] == preferred_cluster else 0) + if car["cluster"] == preferred_cluster: + reasons.append(f"Sesuai cluster preferensi: {car['cluster']}") + + return (sum(scores) / len(scores) if scores else 0.5), reasons + + +def score_car(car, budget, preferences, stats, strategy, weights): + budget_ratio = car["harga"] / max(budget, 1) + budget_gap = budget - car["harga"] + + if strategy == "hemat": + target_ratio = 0.80 + elif strategy == "premium": + target_ratio = 0.97 + elif strategy in ["harga_pas", "harga pas", "spesifik", "specific"]: + target_ratio = 1.00 + else: + target_ratio = 0.90 + + budget_score = clamp(1 - abs(budget_ratio - target_ratio) / 0.35) + year_score = clamp((car["tahun"] - stats["min_year"]) / max(stats["max_year"] - stats["min_year"], 1)) + engine_score = closeness_score( + car["mesin_cc"], + preferences.get("mesin_cc") or preferences.get("target_mesin_cc"), + tolerance=700, + ) + preference_score, preference_reasons = preference_match_score(car, preferences) + + preferred_cluster = preferences.get("cluster") + cluster_score = 0.5 + if preferred_cluster is not None: + cluster_score = 1 if car["cluster"] == to_int(preferred_cluster, default=None) else 0 + elif stats["median_cluster"] is not None: + cluster_score = 1 / (1 + abs(car["cluster"] - stats["median_cluster"])) + + weighted_score = ( + budget_score * weights["budget"] + + preference_score * weights["preference"] + + year_score * weights["year"] + + engine_score * weights["engine"] + + cluster_score * weights["cluster"] + ) + + reasons = [] + if budget_gap >= 0: + reasons.append(f"Masih di bawah budget dengan sisa Rp{budget_gap:,.0f}") + else: + reasons.append(f"Melebihi budget Rp{abs(budget_gap):,.0f}") + + if year_score >= 0.75: + reasons.append(f"Tahun relatif muda: {car['tahun']}") + if engine_score >= 0.8 and (preferences.get("mesin_cc") or preferences.get("target_mesin_cc")): + reasons.append(f"Kapasitas mesin dekat preferensi: {car['mesin_cc']} cc") + + reasons.extend(preference_reasons) + + return { + "total": round(weighted_score * 100, 2), + "detail": { + "budget": round(budget_score * 100, 2), + "preferensi": round(preference_score * 100, 2), + "tahun": round(year_score * 100, 2), + "mesin": round(engine_score * 100, 2), + "cluster": round(cluster_score * 100, 2), + }, + "alasan": reasons[:5], + } + + +def default_weights(payload_weights): + weights = { + "budget": 0.35, + "preference": 0.30, + "year": 0.20, + "engine": 0.10, + "cluster": 0.05, + } + + for key, value in (payload_weights or {}).items(): + if key in weights: + weights[key] = max(float(value), 0) + + total = sum(weights.values()) or 1 + return {key: value / total for key, value in weights.items()} + + +def recommendation_weights(payload_weights, strategy): + if payload_weights: + return default_weights(payload_weights) + + if normalize_text(strategy) in ["tahun_muda", "tahun muda", "kondisi_baru"]: + return { + "budget": 0.30, + "preference": 0.10, + "year": 0.40, + "engine": 0.20, + "cluster": 0.00, + } + + return default_weights(None) + + +def dataset_stats(cars): + years = [car["tahun"] for car in cars if car["tahun"] > 0] + clusters = [car["cluster"] for car in cars if car["cluster"] is not None] + + return { + "min_year": min(years) if years else 0, + "max_year": max(years) if years else 1, + "median_cluster": median(clusters) if clusters else None, + } + + +def scaled_value(value, minimum, maximum): + if maximum == minimum: + return 0.0 + + return (value - minimum) / (maximum - minimum) + + +def distance(point, centroid): + return math.sqrt(sum((point[index] - centroid[index]) ** 2 for index in range(len(point)))) + + +def car_features(car): + return [car["harga"], car["tahun"], car["mesin_cc"]] + + +def build_kmeans_model(cars, cluster_count=6, iterations=30): + usable_cars = [car for car in cars if car["harga"] > 0 and car["tahun"] > 0 and car["mesin_cc"] > 0] + + if not usable_cars: + return None + + feature_rows = [car_features(car) for car in usable_cars] + columns = list(zip(*feature_rows)) + ranges = [(min(column), max(column)) for column in columns] + vectors = [ + [scaled_value(value, ranges[index][0], ranges[index][1]) for index, value in enumerate(row)] + for row in feature_rows + ] + + cluster_count = max(1, min(cluster_count, len(vectors))) + sorted_indexes = sorted(range(len(usable_cars)), key=lambda index: usable_cars[index]["harga"]) + centroids = [] + + for cluster_index in range(cluster_count): + sample_position = round(cluster_index * (len(sorted_indexes) - 1) / max(cluster_count - 1, 1)) + centroids.append(vectors[sorted_indexes[sample_position]][:]) + + labels = [0 for _ in vectors] + + for _ in range(iterations): + changed = False + + for index, vector in enumerate(vectors): + nearest_cluster = min(range(cluster_count), key=lambda cluster: distance(vector, centroids[cluster])) + if labels[index] != nearest_cluster: + changed = True + labels[index] = nearest_cluster + + new_centroids = [] + for cluster in range(cluster_count): + members = [vectors[index] for index, label in enumerate(labels) if label == cluster] + if not members: + new_centroids.append(centroids[cluster]) + continue + + new_centroids.append( + [sum(member[column] for member in members) / len(members) for column in range(len(vectors[0]))] + ) + + centroids = new_centroids + + if not changed: + break + + car_labels = {id(car): labels[index] for index, car in enumerate(usable_cars)} + + return { + "cars": usable_cars, + "labels": car_labels, + "centroids": centroids, + "ranges": ranges, + "cluster_count": cluster_count, + } + + +def predict_budget_cluster(model, budget): + model_cars = model["cars"] + target_year = median([car["tahun"] for car in model_cars if car["harga"] <= budget] or [car["tahun"] for car in model_cars]) + target_engine = median([car["mesin_cc"] for car in model_cars if car["harga"] <= budget] or [car["mesin_cc"] for car in model_cars]) + target_features = [budget, target_year, target_engine] + target_vector = [ + scaled_value(value, model["ranges"][index][0], model["ranges"][index][1]) + for index, value in enumerate(target_features) + ] + + return min( + range(model["cluster_count"]), + key=lambda cluster: distance(target_vector, model["centroids"][cluster]), + ) + + +def apply_kmeans_budget_filter(cars, budget, filters): + model = build_kmeans_model(cars, cluster_count=to_int(filters.get("jumlah_cluster"), default=4)) + + if not model: + return cars, None + + target_cluster = predict_budget_cluster(model, budget) + same_cluster = [ + car for car in cars + if model["labels"].get(id(car)) == target_cluster and car["harga"] <= budget + ] + + exact_matches = [car for car in same_cluster if car["harga"] == budget] + selected = exact_matches or same_cluster or [car for car in cars if car["harga"] <= budget] + + return selected, { + "algorithm": "k_means", + "features": ["harga", "tahun", "mesin_cc"], + "cluster_count": model["cluster_count"], + "target_cluster": target_cluster, + "exact_budget_match": bool(exact_matches), + } + + +def recommend_by_budget( + budget, + limit=10, + preferences=None, + filters=None, + strategy="seimbang", + include_above_budget=False, + max_over_budget_percent=0, + weights=None, +): + cars = load_cars() + preferences = preferences or {} + filters = filters or {} + normalized_strategy = normalize_text(strategy) + weights = recommendation_weights(weights, normalized_strategy) + max_price = budget * (1 + max(max_over_budget_percent, 0) / 100) if include_above_budget else budget + candidates = [car for car in cars if car["harga"] <= max_price and matches_filters(car, filters)] + candidates, model_info = apply_kmeans_budget_filter(candidates, budget, filters) + + if normalized_strategy in ["harga_pas", "harga pas", "spesifik", "specific"]: + tolerance_percent = to_int(filters.get("toleransi_harga_percent"), default=10) + minimum_price = budget * (1 - max(tolerance_percent, 0) / 100) + tight_candidates = [car for car in candidates if car["harga"] >= minimum_price] + candidates = tight_candidates + + stats = dataset_stats(cars) + + recommendations = [] + for car in candidates: + scoring = score_car(car, budget, preferences, stats, normalized_strategy, weights) + recommendations.append( + { + **car, + "model_cluster": model_info["target_cluster"] if model_info else None, + "selisih_budget": budget - car["harga"], + "score": scoring["total"], + "score_detail": scoring["detail"], + "alasan": scoring["alasan"], + } + ) + + recommendations = sorted( + recommendations, + key=lambda car: (car["score"], car["tahun"], car["harga"]), + reverse=True, + )[:limit] + + return recommendations, model_info + + +@app.get("/health") +def health(): + dataset_path = get_dataset_path() + cars = load_cars() + data_source = cars[0].get("source", "unknown") if cars else "empty" + + return jsonify( + { + "status": "ok", + "source": data_source, + "dataset": str(dataset_path) if dataset_path else None, + "database": database_config()["database"], + "total_data": len(cars), + } + ) + + +@app.post("/recommend") +def recommend(): + payload = request.get_json(silent=True) or {} + budget = to_int(payload.get("budget")) + limit = to_int(payload.get("limit"), default=10) + preferences, filters = parse_request_options(payload) + + if budget <= 0: + return jsonify({"message": "Budget harus lebih dari 0."}), 422 + + if limit <= 0: + limit = 10 + + recommendations = recommend_by_budget( + budget=budget, + limit=min(limit, 50), + preferences=preferences, + filters=filters, + strategy=payload.get("strategy") or payload.get("strategi") or "seimbang", + include_above_budget=bool(payload.get("include_above_budget", False)), + max_over_budget_percent=to_int(payload.get("max_over_budget_percent"), default=0), + weights=payload.get("weights") or payload.get("bobot"), + ) + recommendations, model_info = recommendations + + return jsonify( + { + "budget": budget, + "total_rekomendasi": len(recommendations), + "model": model_info, + "preferences": preferences, + "filters": filters, + "recommendations": recommendations, + } + ) + + +if __name__ == "__main__": + app.run(host="127.0.0.1", port=5000, debug=False, use_reloader=False) diff --git a/web_JMW/flask_api/requirements.txt b/web_JMW/flask_api/requirements.txt new file mode 100644 index 0000000..f5405ff --- /dev/null +++ b/web_JMW/flask_api/requirements.txt @@ -0,0 +1,2 @@ +Flask==3.0.3 +PyMySQL==1.1.1 diff --git a/web_JMW/index.php b/web_JMW/index.php new file mode 100644 index 0000000..b6c7970 --- /dev/null +++ b/web_JMW/index.php @@ -0,0 +1,53 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/web_JMW/package-lock.json b/web_JMW/package-lock.json new file mode 100644 index 0000000..edfc76c --- /dev/null +++ b/web_JMW/package-lock.json @@ -0,0 +1,2041 @@ +{ + "name": "web_JMW", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "devDependencies": { + "axios": "^1.6.4", + "laravel-vite-plugin": "^1.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz", + "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.3.0.tgz", + "integrity": "sha512-P5qyG56YbYxM8OuYmK2OkhcKe0AksNVJUjq9LUZ5tOekU9fBn9LujYyctI4t9XoLjuMvHJXXpCoPntY1oKltuA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + } + }, + "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "dev": true, + "optional": true + }, + "@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loong64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-openbsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-openharmony-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "dev": true, + "optional": true + }, + "@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "axios": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz", + "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", + "dev": true, + "requires": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true + }, + "form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "laravel-vite-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.3.0.tgz", + "integrity": "sha512-P5qyG56YbYxM8OuYmK2OkhcKe0AksNVJUjq9LUZ5tOekU9fBn9LujYyctI4t9XoLjuMvHJXXpCoPntY1oKltuA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + } + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true + }, + "postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true + }, + "rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "dev": true, + "requires": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "@types/estree": "1.0.9", + "fsevents": "~2.3.2" + } + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true + }, + "vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "requires": { + "esbuild": "^0.21.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + } + }, + "vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + } + } +} diff --git a/web_JMW/package.json b/web_JMW/package.json new file mode 100644 index 0000000..56f5ddc --- /dev/null +++ b/web_JMW/package.json @@ -0,0 +1,13 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.6.4", + "laravel-vite-plugin": "^1.0.0", + "vite": "^5.0.0" + } +} diff --git a/web_JMW/phpunit.xml b/web_JMW/phpunit.xml new file mode 100644 index 0000000..bc86714 --- /dev/null +++ b/web_JMW/phpunit.xml @@ -0,0 +1,32 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + diff --git a/web_JMW/public/.htaccess b/web_JMW/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/web_JMW/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/web_JMW/public/favicon.ico b/web_JMW/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/web_JMW/public/images/default-car.svg b/web_JMW/public/images/default-car.svg new file mode 100644 index 0000000..b6224c7 --- /dev/null +++ b/web_JMW/public/images/default-car.svg @@ -0,0 +1,18 @@ + + Gambar default mobil + Ilustrasi mobil untuk kategori yang belum memiliki foto. + + + + + + + + + + + + + + + diff --git a/web_JMW/public/index.php b/web_JMW/public/index.php new file mode 100644 index 0000000..1d69f3a --- /dev/null +++ b/web_JMW/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/web_JMW/public/robots.txt b/web_JMW/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/web_JMW/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/web_JMW/resources/css/app.css b/web_JMW/resources/css/app.css new file mode 100644 index 0000000..e69de29 diff --git a/web_JMW/resources/js/app.js b/web_JMW/resources/js/app.js new file mode 100644 index 0000000..e59d6a0 --- /dev/null +++ b/web_JMW/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; diff --git a/web_JMW/resources/js/bootstrap.js b/web_JMW/resources/js/bootstrap.js new file mode 100644 index 0000000..846d350 --- /dev/null +++ b/web_JMW/resources/js/bootstrap.js @@ -0,0 +1,32 @@ +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// import Pusher from 'pusher-js'; +// window.Pusher = Pusher; + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: import.meta.env.VITE_PUSHER_APP_KEY, +// cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1', +// wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, +// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, +// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, +// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', +// enabledTransports: ['ws', 'wss'], +// }); diff --git a/web_JMW/resources/views/admin/dashboard.blade.php b/web_JMW/resources/views/admin/dashboard.blade.php new file mode 100644 index 0000000..eb9f183 --- /dev/null +++ b/web_JMW/resources/views/admin/dashboard.blade.php @@ -0,0 +1,533 @@ +@extends('admin.layout') + +@section('title', 'Admin Dashboard') + +@section('content') + @php + $availableCars = $categories->where('status', 'available')->count(); + $soldCars = $categories->where('status', 'sold')->count(); + $pendingTransactions = $transactions->where('payment_status', 'pending')->count(); + $paidTransactions = $transactions->where('payment_status', 'paid')->count(); + $todayTransactions = $transactions->where('created_at', '>=', today())->count(); + $totalSales = $transactions->where('payment_status', 'paid')->sum('total_amount'); + @endphp + + + +

+ +
+ + + +
+ +
+
+
+ Mobil Tersedia + {{ $availableCars }} + {{ $categories->count() }} total mobil +
+
+ Mobil Terjual + {{ $soldCars }} + {{ $paidTransactions }} transaksi lunas +
+
+ Menunggu Konfirmasi + {{ $pendingTransactions }} + {{ $todayTransactions }} transaksi hari ini +
+
+ Total Penjualan + Rp {{ number_format($totalSales, 0, ',', '.') }} + Dari transaksi lunas +
+
+ +
+
+
+
+

Ringkasan Stok Mobil

+

Perbandingan mobil yang masih dijual dan yang sudah terjual.

+
+ Detail +
+
+
+
+ Tersedia + {{ $availableCars }} +
+
+
+
+
+
+
+ Terjual + {{ $soldCars }} +
+
+
+
+
+
+
+ +
+
+
+

Transaksi Terbaru

+

Bukti transfer terbaru yang perlu dipantau admin.

+
+
+
+ @forelse($transactions->take(5) as $transaction) +
+
+ {{ $transaction->customer_name }} + {{ $transaction->category->name ?? 'Produk dihapus' }} - {{ $transaction->payment_status_label }} +
+
Rp {{ number_format($transaction->total_amount, 0, ',', '.') }}
+
+ @empty +
+
+ Belum ada transaksi + Transaksi baru akan muncul di sini. +
+
+ @endforelse +
+
+
+
+ +
+
+
+
+

Manajemen User

+

Kelola data pengguna dan peran mereka di sistem.

+
+ {{ $users->count() }} user +
+ +
+ + + + + + + + + + + @forelse($users as $user) + + + + + + + @empty + + + + @endforelse + +
Data UserNama LengkapRoleStatus
{{ strtoupper(substr($user->username, 0, 1)) }} {{ $user->email }}{{ $user->username }}{{ ucfirst($user->role) }}Aktif
Belum ada data user.
+
+
+
+ +
+
+
+
+

Manajemen Kategori

+

Daftar mobil yang tersedia dan status penjualannya.

+
+ Tambah Kategori +
+ +
+ + + + + + + + + + + + + @forelse($categories->take(20) as $category) + + + + + + + + + @empty + + + + @endforelse + +
FotoNama KategoriHargaStatusTanggalDeskripsi
+ @if($category->image) + {{ $category->name }} + @else + Gambar default {{ $category->name }} + @endif + {{ $category->name }}Rp {{ number_format($category->price, 0, ',', '.') }} + @if($category->status === 'sold') + {{ $category->status_label }} + @else + {{ $category->status_label }} + @endif + {{ $category->created_at ? $category->created_at->format('d/m/Y') : '-' }}{{ \Illuminate\Support\Str::limit($category->description, 50) }}
Belum ada kategori.
+
+

Menampilkan 20 kategori terakhir dari {{ $categories->count() }} total

+
+
+ + +@endsection diff --git a/web_JMW/resources/views/admin/dashboard_old.blade.php b/web_JMW/resources/views/admin/dashboard_old.blade.php new file mode 100644 index 0000000..a1994c0 --- /dev/null +++ b/web_JMW/resources/views/admin/dashboard_old.blade.php @@ -0,0 +1,394 @@ + + + + + + Admin Dashboard + + + +
+ @include('admin.sidebar') + +
+
+
+

Admin Dashboard

+

Hai, {{ Auth::guard('admin')->check() ? Auth::guard('admin')->user()->username : 'Admin' }}

+

Kelola pengguna, produk, kategori, dan transaksi dengan tampilan yang simpel dan mudah digunakan.

+
+ +
+ {{ now()->format('l, j F Y') }} + Status: Online +
+
+ +
+
+ Total User + 6 + User Aktif +
+
+ Total Kategori + 4 + Kategori Tersedia +
+
+ Transaksi Hari Ini + 0 + Belum ada transaksi +
+
+ User Biasa + 4 + Pengguna Biasa +
+
+ +
+
+
+

Manajemen User

+

Kelola data pengguna dan peran mereka di sistem.

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Data UserNama LengkapRoleStatus
A admin@example.comAdministratorAdminAktif
U user1@example.comUser SatuUserAktif
Z zaka@gmail.comZakaUserAktif
I ifan@gmail.comIfanAdminAktif
+
+
+ +
+
+
+

Manajemen Kategori

+

Daftar kategori produk dan detail yang tersedia.

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FotoNama KategoriHargaTanggalDeskripsi
-Sepatu BolaRp 400.00012/04/2026Kategori sepatu bola dengan desain modern.
-Sepatu FutsalRp 350.00012/04/2026Kategori sepatu futsal untuk permainan dalam ruangan.
-Sepatu BasketRp 1.000.00012/04/2026Kategori sepatu basket untuk performa maksimal.
-Kasur OrbitalRp 650.00012/04/2026Kategori kasur nyaman untuk tidur berkualitas.
+
+
+ +
+
+ 4 + Total Kategori +
+
+ 4 + Kategori Aktif +
+
+ 0 + Kategori tanpa gambar +
+
+ 4 + Kategori Tersedia +
+
+
+
+ + diff --git a/web_JMW/resources/views/admin/input.blade.php b/web_JMW/resources/views/admin/input.blade.php new file mode 100644 index 0000000..b4a44d8 --- /dev/null +++ b/web_JMW/resources/views/admin/input.blade.php @@ -0,0 +1,259 @@ +@extends('admin.layout') + +@section('title', 'Input Transaksi') + +@section('content') + @php + $selectedCategory = $categories->firstWhere('id', old('category_id')); + $categoryOptions = $categories->map(function ($category) { + return [ + 'id' => $category->id, + 'label' => $category->name . ' - Rp ' . number_format($category->price, 0, ',', '.'), + 'name' => $category->name, + 'price' => (float) $category->price, + ]; + })->values(); + @endphp + + + + + +
+
+

Informasi Transaksi

+ Kembali ke Daftar Transaksi +
+ + @if($errors->any()) +
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + +
+ @csrf +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + @foreach($categories as $category) + + @endforeach + +
+ Ketik untuk mencari, lalu pilih mobil dari saran. + {{ $categories->count() }} mobil +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + Format JPG, PNG, atau PDF. Maksimal 2 MB. +
+ +
+ + +
+ +
+

Item yang Dipilih

+
+ + + + + + + + + + + + + + + + + + + + + + +
ProdukHargaQtySubtotalAksi
Pilih kategori terlebih dahulu untuk menambahkan item.
+
+
+ +
+ + Batal +
+
+
+ + +@endsection diff --git a/web_JMW/resources/views/admin/kategori-edit.blade.php b/web_JMW/resources/views/admin/kategori-edit.blade.php new file mode 100644 index 0000000..0bb99f1 --- /dev/null +++ b/web_JMW/resources/views/admin/kategori-edit.blade.php @@ -0,0 +1,123 @@ +@extends('admin.layout') + +@section('title', 'Edit Kategori') + +@section('content') + + +
+
+

Form Edit Kategori

+ Kembali ke Daftar Kategori +
+ + @if(session('success')) +
+ {{ session('success') }} +
+ @endif + + @if($errors->any()) +
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + +
+ @csrf + @method('PATCH') + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + {{ $category->image ? $category->name : 'Gambar default ' . $category->name }} +
+ +
+ + Batal +
+
+
+@endsection diff --git a/web_JMW/resources/views/admin/kategori.blade.php b/web_JMW/resources/views/admin/kategori.blade.php new file mode 100644 index 0000000..9cce623 --- /dev/null +++ b/web_JMW/resources/views/admin/kategori.blade.php @@ -0,0 +1,232 @@ +@extends('admin.layout') + +@section('title', 'Manajemen Kategori') + +@section('content') + + + + +
+
+

Tambah Mobil Baru

+ + @if(session('success')) +
+ {{ session('success') }} +
+ @endif + + @if($errors->any()) +
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + +
+ @csrf +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+
+

Daftar Mobil Yang Tersedia

+ {{ isset($categories) ? $categories->count() : 0 }} Kategori +
+
+ + + + + + + + + + + + + + + + + + + + @forelse($categories ?? [] as $category) + + + + + + + + + + + + + + + + @empty + + + + @endforelse + +
FotoNama KategoriMerkModelKategoriHargaTahunMesinTransmisiBahan BakarStatusDeskripsiAksi
+ @if($category->image) + {{ $category->name }} + @else + Gambar default {{ $category->name }} + @endif + {{ $category->name }}{{ $category->merk ?? '-' }}{{ $category->model ?? '-' }}{{ $category->kategori ?? '-' }}Rp {{ number_format($category->price, 0, ',', '.') }}{{ $category->year ?? '-' }}{{ $category->mesin_cc ? number_format($category->mesin_cc, 0, ',', '.') . ' cc' : '-' }}{{ $category->transmisi ?? '-' }}{{ $category->bahan_bakar ?? '-' }} + @if($category->status === 'sold') + {{ $category->status_label }} + @elseif($category->status === 'reserved') + {{ $category->status_label }} + @else + {{ $category->status_label }} + @endif + {{ $category->description }} + Update +
+ @csrf + @method('DELETE') + +
+
Belum ada kategori.
+
+
+
+@endsection diff --git a/web_JMW/resources/views/admin/laporan.blade.php b/web_JMW/resources/views/admin/laporan.blade.php new file mode 100644 index 0000000..ed36b17 --- /dev/null +++ b/web_JMW/resources/views/admin/laporan.blade.php @@ -0,0 +1,545 @@ +@extends('admin.layout') + +@section('title', 'Laporan') + +@section('content') + + + + +
+
+
+ + +
+
+ + +
+ +
+
+ +
+
+ Total Penjualan Lunas + Rp {{ number_format($summary['total_sales'], 0, ',', '.') }} +
+
+ Total Transaksi + {{ $summary['total_transactions'] }} +
+
+ Transaksi Lunas + {{ $summary['paid_transactions'] }} +
+
+ Rata-rata Transaksi Lunas + Rp {{ number_format($summary['average_sales'], 0, ',', '.') }} +
+
+ +
+
+
+

Ringkasan Status

+

Periode {{ \Carbon\Carbon::parse($startDate)->format('d/m/Y') }} sampai {{ \Carbon\Carbon::parse($endDate)->format('d/m/Y') }}

+
+ Lihat Riwayat +
+ +
+
+ Pending + {{ $summary['pending_transactions'] }} +
+
+ Dibatalkan + {{ $summary['cancelled_transactions'] }} +
+
+ Mobil Tersedia + {{ $summary['available_cars'] }} +
+
+ Mobil Terjual + {{ $summary['sold_cars'] }} +
+
+
+ +
+
+
+
+

Diagram Penjualan Harian

+

Nilai penjualan lunas per hari sesuai periode filter.

+
+
+ + @if($chartData['daily_sales']->isEmpty()) +
Belum ada transaksi lunas untuk diagram periode ini.
+ @else +
+ @foreach($chartData['daily_sales'] as $date => $amount) +
+
Rp {{ number_format($amount, 0, ',', '.') }}
+
+
{{ \Carbon\Carbon::parse($date)->format('d/m') }}
+
+ @endforeach +
+ @endif +
+ +
+
+
+

Bar Chart Status

+

Perbandingan status dan metode pembayaran.

+
+
+ +
+ @php $maxStatus = max($chartData['payment_status']->max(), 1); @endphp + @foreach($chartData['payment_status'] as $label => $value) +
+
+ {{ $label }} + {{ $value }} +
+
+
+
+
+ @endforeach +
+ +
+ @php $maxMethod = max($chartData['payment_method']->max(), 1); @endphp + @foreach($chartData['payment_method'] as $label => $value) +
+
+ {{ $label }} + {{ $value }} +
+
+
+
+
+ @endforeach +
+
+
+ + @php + $paidCount = $chartData['payment_status']['Lunas']; + $pendingCount = $chartData['payment_status']['Pending']; + $cancelledCount = $chartData['payment_status']['Dibatalkan']; + $statusTotal = max($paidCount + $pendingCount + $cancelledCount, 1); + $paidEnd = ($paidCount / $statusTotal) * 100; + $pendingEnd = $paidEnd + (($pendingCount / $statusTotal) * 100); + + $cashCount = $chartData['payment_method']['Tunai']; + $transferCount = $chartData['payment_method']['Transfer Bank']; + $methodTotal = max($cashCount + $transferCount, 1); + $cashEnd = ($cashCount / $methodTotal) * 100; + @endphp + +
+
+
+

Pie Chart Laporan

+

Komposisi transaksi berdasarkan status pembayaran dan metode pembayaran.

+
+
+ +
+
+

Status Pembayaran

+
+
+
+ Lunas + {{ $paidCount }} +
+
+ Pending + {{ $pendingCount }} +
+
+ Dibatalkan + {{ $cancelledCount }} +
+
+
+ +
+

Metode Pembayaran

+
+
+
+ Tunai + {{ $cashCount }} +
+
+ Transfer Bank + {{ $transferCount }} +
+
+
+
+
+ +
+
+
+

Detail Transaksi

+

Daftar transaksi sesuai filter tanggal.

+
+ Input Transaksi +
+ +
+ + + + + + + + + + + + + + @forelse($transactions as $transaction) + + + + + + + + + + @empty + + + + @endforelse + +
KodeCustomerMobilMetodeStatusTotalTanggal
{{ $transaction->transaction_code }} + {{ $transaction->customer_name }} + @if($transaction->customer_phone) +
{{ $transaction->customer_phone }} + @endif +
{{ $transaction->category->name ?? 'Produk dihapus' }}{{ $transaction->payment_method_label }} + @if($transaction->payment_status === 'paid') + {{ $transaction->payment_status_label }} + @elseif($transaction->payment_status === 'cancelled') + {{ $transaction->payment_status_label }} + @else + {{ $transaction->payment_status_label }} + @endif + Rp {{ number_format($transaction->total_amount, 0, ',', '.') }}{{ $transaction->created_at ? $transaction->created_at->format('d/m/Y H:i') : '-' }}
Tidak ada transaksi pada periode ini.
+
+
+@endsection diff --git a/web_JMW/resources/views/admin/layout.blade.php b/web_JMW/resources/views/admin/layout.blade.php new file mode 100644 index 0000000..3a79794 --- /dev/null +++ b/web_JMW/resources/views/admin/layout.blade.php @@ -0,0 +1,276 @@ + + + + + + @yield('title', 'Admin Dashboard') + + + +
+ @include('admin.sidebar') + +
+ @yield('content') +
+
+ + diff --git a/web_JMW/resources/views/admin/riwayat.blade.php b/web_JMW/resources/views/admin/riwayat.blade.php new file mode 100644 index 0000000..9760e67 --- /dev/null +++ b/web_JMW/resources/views/admin/riwayat.blade.php @@ -0,0 +1,113 @@ +@extends('admin.layout') + +@section('title', 'Riwayat Transaksi') + +@section('content') + + +
+
Total Transaksi{{ $summary['total'] ?? 0 }}
+
Transaksi Lunas{{ $summary['paid'] ?? 0 }}
+
Total PenjualanRp {{ number_format($summary['sales'] ?? 0, 0, ',', '.') }}
+
Transaksi Hari Ini{{ $summary['today'] ?? 0 }}
+
+ +
+
+

Daftar Transaksi

+ Input Transaksi +
+ + @if(session('success')) +
+ {{ session('success') }} +
+ @endif + + @if(session('error')) +
+ {{ session('error') }} +
+ @endif + +
+ + + + + + + + + + + + + + + + + @forelse($transactions ?? [] as $transaction) + + + + + + + + + + + + + @empty + + + + @endforelse + +
Kode TransaksiCustomerProdukQtyTotal AmountMetode PembayaranStatusBuktiKonfirmasiTanggal
{{ $transaction->transaction_code }} + {{ $transaction->customer_name }} + @if($transaction->customer_phone) +
{{ $transaction->customer_phone }} + @endif +
{{ $transaction->category->name ?? 'Produk dihapus' }}{{ $transaction->quantity }}Rp {{ number_format($transaction->total_amount, 0, ',', '.') }}{{ $transaction->payment_method_label }} + @if($transaction->payment_status === 'paid') + {{ $transaction->payment_status_label }} + @elseif($transaction->payment_status === 'cancelled') + {{ $transaction->payment_status_label }} + @else + {{ $transaction->payment_status_label }} + @endif + + @if($transaction->payment_proof) + Lihat Bukti + @else + Belum ada + @endif + + @if($transaction->payment_status === 'pending') +
+ @csrf + @method('PATCH') + +
+ @else + Selesai + @endif +
{{ $transaction->created_at ? $transaction->created_at->format('d/m/Y H:i') : '-' }}
Belum ada transaksi.
+
+
+ +
+

{{ $summary['paid'] ?? 0 }} Transaksi Lunas

+

Rp {{ number_format($summary['sales'] ?? 0, 0, ',', '.') }}

+
+@endsection diff --git a/web_JMW/resources/views/admin/sidebar.blade.php b/web_JMW/resources/views/admin/sidebar.blade.php new file mode 100644 index 0000000..92a8b48 --- /dev/null +++ b/web_JMW/resources/views/admin/sidebar.blade.php @@ -0,0 +1,113 @@ + + + diff --git a/web_JMW/resources/views/forgot-password.blade.php b/web_JMW/resources/views/forgot-password.blade.php new file mode 100644 index 0000000..048bb92 --- /dev/null +++ b/web_JMW/resources/views/forgot-password.blade.php @@ -0,0 +1,180 @@ + + + + + + Lupa Password + + + +
+

Lupa Password

+

+ Masukkan email akun Anda. Kami akan mengirim link verifikasi untuk membuat password baru. +

+ + @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +

{{ $error }}

+ @endforeach +
+ @endif + + @if (session('success')) +
+ {{ session('success') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + +
+ @csrf + +
+ + +
+ + +
+ + +
+ + diff --git a/web_JMW/resources/views/grep.exe.stackdump b/web_JMW/resources/views/grep.exe.stackdump new file mode 100644 index 0000000..7b66bf8 --- /dev/null +++ b/web_JMW/resources/views/grep.exe.stackdump @@ -0,0 +1,15 @@ +Stack trace: +Frame Function Args +000FFFFBCE0 00210062F57 (00000000002, 00000000002, 00000000000, 000FFFFDE50) +00000000000 00210065045 (000FFFFC690, 00000000000, 00000000204, 00000000000) +000FFFFC3F0 0021013A968 (00000000000, 00000000000, 00000000000, 00000000000) +00000000041 00210135F9B (00000000000, 00000000000, 00000000000, 00000000000) +000FFFFC810 002101363A5 (00000000000, 00800000000, 000000000B5, 00100437000) +000FFFFC810 0021021D538 (00000000000, 00800000030, 00000000000, 00000000000) +000FFFFC810 00100429F25 (000FFFFCC7C, 000FFFFC848, 00000000007, 00000000001) +000FFFFC880 00100404B11 (0000000000C, 002101FEA90, 000FFFFCB80, 00000000000) +000FFFFCA70 001004294B0 (00000000006, 000FFFFCD30, 000FFFFCC50, 000FFFFCC50) +000FFFFCD30 00210049B91 (00000000000, 00000000000, 00000000000, 00000000000) +000FFFFFFF0 00210047716 (00000000000, 00000000000, 00000000000, 00000000000) +000FFFFFFF0 002100477C4 (00000000000, 00000000000, 00000000000, 00000000000) +End of stack trace diff --git a/web_JMW/resources/views/login.blade.php b/web_JMW/resources/views/login.blade.php new file mode 100644 index 0000000..5a8442e --- /dev/null +++ b/web_JMW/resources/views/login.blade.php @@ -0,0 +1,281 @@ + + + + + + Login + + + + + + + + diff --git a/web_JMW/resources/views/otp.blade.php b/web_JMW/resources/views/otp.blade.php new file mode 100644 index 0000000..2fd77d5 --- /dev/null +++ b/web_JMW/resources/views/otp.blade.php @@ -0,0 +1,183 @@ + + + + + + Verifikasi OTP + + + +
+

Verifikasi OTP

+

+ Masukkan kode 6 digit yang sudah dikirim ke email akun Anda. +

+ + @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +

{{ $error }}

+ @endforeach +
+ @endif + + @if (session('success')) +
+ {{ session('success') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + +
+ @csrf + +
+ + +
+ + +
+ +
+ @csrf + +
+
+ + diff --git a/web_JMW/resources/views/register.blade.php b/web_JMW/resources/views/register.blade.php new file mode 100644 index 0000000..1dce8c6 --- /dev/null +++ b/web_JMW/resources/views/register.blade.php @@ -0,0 +1,178 @@ + + + + + + Daftar Akun + + + +
+

Daftar Akun

+ + {{-- Tampilkan pesan error jika ada --}} + @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +

{{ $error }}

+ @endforeach +
+ @endif + +
+ @csrf + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ + diff --git a/web_JMW/resources/views/reset-password.blade.php b/web_JMW/resources/views/reset-password.blade.php new file mode 100644 index 0000000..b9b09ae --- /dev/null +++ b/web_JMW/resources/views/reset-password.blade.php @@ -0,0 +1,217 @@ + + + + + + Reset Password + + + +
+

Reset Password

+ + @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +

{{ $error }}

+ @endforeach +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + +
+ @csrf + + + +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ + +
+
+ + + diff --git a/web_JMW/resources/views/user/all-cars.blade.php b/web_JMW/resources/views/user/all-cars.blade.php new file mode 100644 index 0000000..9a49e09 --- /dev/null +++ b/web_JMW/resources/views/user/all-cars.blade.php @@ -0,0 +1,544 @@ + + + + + + + Daftar Semua Mobil Bekas + + + +
+ + + @if($categories->isEmpty()) +
+

Belum ada listing mobil bekas.

+

Silakan tambahkan mobil bekas lewat halaman manajemen kategori agar tampil di marketplace ini.

+
+ @else +
+
+

Semua Mobil Bekas

+
+ {{ $categories->total() }} listing +
+ + + +
+ @if($categories->hasPages()) +
    +
  • + @if($categories->onFirstPage()) + ‹ + @else + + @endif +
  • + + @foreach($categories->getUrlRange(1, $categories->lastPage()) as $page => $url) +
  • + @if($page === $categories->currentPage()) + {{ $page }} + @else + {{ $page }} + @endif +
  • + @endforeach + +
  • + @if($categories->hasMorePages()) + + @else + › + @endif +
  • +
+ @endif +
+ @endif +
+ + + + diff --git a/web_JMW/resources/views/user/budget-cars.blade.php b/web_JMW/resources/views/user/budget-cars.blade.php new file mode 100644 index 0000000..2635d3a --- /dev/null +++ b/web_JMW/resources/views/user/budget-cars.blade.php @@ -0,0 +1,464 @@ + + + + + + + Rekomendasi Mobil Sesuai Budget + + + +
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + @if(!$budget) +
+

Masukkan budget terlebih dahulu.

+

Tersedia {{ $availableCount }} mobil bekas yang bisa dicocokkan dengan budget Anda.

+
+ @else +
+
+

Hasil Rekomendasi Budget

+
+ {{ $recommended->count() }} pilihan cocok +
+ + @if($recommended->isEmpty()) +
+

Tidak ada mobil sesuai budget.

+

Coba naikkan budget atau tambahkan listing mobil bekas baru di halaman admin.

+
+ @else + + @endif + @endif +
+ + + + diff --git a/web_JMW/resources/views/user/car-detail.blade.php b/web_JMW/resources/views/user/car-detail.blade.php new file mode 100644 index 0000000..792dd28 --- /dev/null +++ b/web_JMW/resources/views/user/car-detail.blade.php @@ -0,0 +1,685 @@ + + + + + + + Detail Mobil Bekas + + + +
+ + + + + Kembali ke daftar + + +
+ +
+ +
+ {{ $category->image ? $category->name : 'Gambar default ' . $category->name }} +
+ + +
+

+ {{ $category->name }} +

+

+ 1.5 S Bensin-AT +

+
+ + ⚽ BENSIN + + + 📏 55.000-60.000 KM + + + ⚙️ AUTOMATIC + +
+
+ + +
+

Deskripsi

+
+
+

{{ \Illuminate\Support\Str::limit($category->description, 150) }}

+
+ + Selengkapnya + → + +
+
+
+ + +
+ @php + $activeReservation = $category->activeReservation(); + @endphp + +
+
HARGA
+ @if($category->status === 'sold') +
Sold Out
+ @elseif($activeReservation) +
Sedang Dipesan
+ @endif +
Rp {{ number_format($category->price, 0, ',', '.') }}
+ + + + + 💬 Chat Admin via WhatsApp + +
+ + @if(session('success')) +
{{ session('success') }}
+ @endif + + @if(session('error')) +
{{ session('error') }}
+ @endif + + @if($errors->any()) +
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + + @if($category->status === 'sold') +
+ Sold Out + Mobil ini sudah terjual. +
+ @elseif($activeReservation) +
+ Sedang Dipesan + @if(Auth::check() && $activeReservation->reserved_by === Auth::user()->username) + Mobil ini sedang dikunci untuk Anda sampai {{ optional($activeReservation->expires_at)->format('H:i') }}. + Lanjutkan Pembayaran + @else + Mobil ini sedang dikunci pembeli lain sampai {{ optional($activeReservation->expires_at)->format('H:i') }}. Jika pembayaran tidak selesai tepat waktu, mobil akan tersedia kembali. + @endif +
+ @else +
+ @csrf + +
+ @endif +
+ +
+
+ + + + + diff --git a/web_JMW/resources/views/user/cars.blade.php b/web_JMW/resources/views/user/cars.blade.php new file mode 100644 index 0000000..7baf4bc --- /dev/null +++ b/web_JMW/resources/views/user/cars.blade.php @@ -0,0 +1,801 @@ + + + + + + + Marketplace Mobil Bekas + + + +
+
+
+

+ {{ Auth::check() ? 'JMW showroom mobil bekas' : 'Pasar Mobil Bekas' }} +

+

{{ Auth::check() ? 'Selamat Datang, ' . (Auth::user()->username ?? 'User') : 'Jual Mobil Bekas Lebih Mudah dan Cepat' }}

+

{{ Auth::check() ? 'Lihat katalog kendaraan yang tersedia, bandingkan harga dan spesifikasi, serta manfaatkan fitur rekomendasi untuk membantu menentukan pilihan mobil yang sesuai dengan budget Anda.' : 'Telusuri mobil bekas unggulan, bandingkan harga, dan dapatkan rekomendasi sesuai budget Anda.' }}

+ +
+
+ @if(Auth::check()) + +
+ + + + + + Lihat Profil + +
+ @csrf + +
+
+ @else + + @endif +
+

Temukan Mobil Bekas Impianmu Sekarang Juga!

+
+
+
+ + @if($categories->isEmpty()) +
+

Belum ada listing mobil bekas.

+

Silakan tambahkan mobil bekas lewat halaman manajemen kategori agar tampil di marketplace ini.

+
+ @else +
+
+

Semua Mobil Bekas

+

Lihat semua listing mobil bekas yang tersedia di pasar kami.

+
+ {{ $categories->count() }} listing +
+ + + @endif +
+ + + + + + diff --git a/web_JMW/resources/views/user/payment.blade.php b/web_JMW/resources/views/user/payment.blade.php new file mode 100644 index 0000000..f3a934f --- /dev/null +++ b/web_JMW/resources/views/user/payment.blade.php @@ -0,0 +1,78 @@ + + + + + + Pembayaran {{ $transaction->transaction_code }} + + + +
+ ← Kembali ke detail mobil +
+
+ {{ $transaction->category->name }} +

{{ $transaction->category->name }}

+

Kode transaksi: {{ $transaction->transaction_code }}

+

Rp {{ number_format($transaction->total_amount, 0, ',', '.') }}

+
+
+

Selesaikan Pembayaran

+

Mobil telah dikunci khusus untuk Anda. Unggah bukti sebelum waktunya habis.

+
Sisa waktu pembayaran10:00
+ @if($errors->any()) +
{{ $errors->first() }}
+ @endif +
+ @csrf + + + + + + + +
+
+
+
+ + + diff --git a/web_JMW/resources/views/user/profile.blade.php b/web_JMW/resources/views/user/profile.blade.php new file mode 100644 index 0000000..7e5a22e --- /dev/null +++ b/web_JMW/resources/views/user/profile.blade.php @@ -0,0 +1,280 @@ + + + + + + Profil Pengguna + + + +
+
+
+
{{ strtoupper(substr(Auth::user()->username, 0, 1)) }}
+
+

Halo, {{ Auth::user()->username }}

+

Berikut informasi akun Anda. Gunakan halaman ini untuk melihat detail dan kembali ke pasar mobil.

+
+
+ +
+
+ Username + {{ Auth::user()->username }} +
+
+ Email + {{ Auth::user()->email }} +
+
+ + @php + $favorites = Auth::user()->favoriteCategories; + @endphp + + @if($favorites->count() > 0) + + @endif + +
+ Kembali ke Marketplace +
+ @csrf + +
+
+
+
+ + diff --git a/web_JMW/resources/views/welcome.blade.php b/web_JMW/resources/views/welcome.blade.php new file mode 100644 index 0000000..1eac605 --- /dev/null +++ b/web_JMW/resources/views/welcome.blade.php @@ -0,0 +1,380 @@ + + + + + + JMW Mobil Bekas + + + +
+ + +
+
+

Marketplace Mobil Bekas

+

Temukan Mobil Bekas yang Cocok untuk anda.

+

Cek daftar mobil, bandingkan harga, dan gunakan rekomendasi budget untuk membantu memilih kendaraan yang paling sesuai.

+
+ + +
+ +
+
+ 01 +

Telusuri Mobil Yang Tersedia

+

Lihat mobil yang tersedia dengan foto, harga, tahun, dan detail singkat.

+
+
+ 02 +

Cari Sesuai Budget

+

Masukkan budget maksimal untuk mendapat rekomendasi mobil yang paling mendekati.

+
+
+ 03 +

Login Saat Siap

+

Masuk ke akun untuk menyimpan favorit dan melanjutkan proses pembelian.

+
+
+
+ + diff --git a/web_JMW/routes/api.php b/web_JMW/routes/api.php new file mode 100644 index 0000000..6106bb4 --- /dev/null +++ b/web_JMW/routes/api.php @@ -0,0 +1,32 @@ +get('/user', function (Request $request) { + return $request->user(); +}); + +// ── WhatsApp Admin Chat Routes ────────────────────────────────────────── +Route::prefix('chat')->group(function () { + // Get WhatsApp link for admin showroom + Route::get('/admin-whatsapp/{categoryId?}', [ChatController::class, 'getAdminWhatsAppLink']); +}); + +// ── Direct WhatsApp Admin Redirect Routes ─────────────────────────────── +Route::prefix('contact')->group(function () { + // Direct redirect to WhatsApp admin (opens WhatsApp Web/App) + Route::get('/admin-whatsapp/{categoryId?}', [ChatController::class, 'redirectAdminWhatsApp']); +}); diff --git a/web_JMW/routes/channels.php b/web_JMW/routes/channels.php new file mode 100644 index 0000000..5d451e1 --- /dev/null +++ b/web_JMW/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/web_JMW/routes/console.php b/web_JMW/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/web_JMW/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/web_JMW/routes/web.php b/web_JMW/routes/web.php new file mode 100644 index 0000000..777d6ad --- /dev/null +++ b/web_JMW/routes/web.php @@ -0,0 +1,161 @@ +check()) { + return redirect()->route('dashboard'); + } + + if (auth()->check()) { + return redirect()->route('user.dashboard'); + } + + $featuredCars = Category::where('status', 'available') + ->orderBy('created_at', 'desc') + ->take(3) + ->get(); + + $availableCount = Category::where('status', 'available')->count(); + + return view('welcome', compact('featuredCars', 'availableCount')); +}); + +Route::get('/mobil-bekas', [CategoryController::class, 'userIndex'])->name('mobil-bekas'); +Route::get('/dashboard-user', [CategoryController::class, 'userIndex'])->middleware('auth')->name('user.dashboard'); +Route::get('/semua-mobil-bekas', [CategoryController::class, 'allCars'])->name('semua-mobil-bekas'); +Route::get('/rekomendasi-budget', [CategoryController::class, 'budgetCars'])->name('rekomendasi-budget'); +Route::get('/csrf-token', fn () => response()->json(['token' => csrf_token()]))->name('csrf.token'); +Route::get('/mobil-bekas/{category}', [CategoryController::class, 'show'])->name('mobil-bekas.detail'); +Route::middleware('auth')->group(function () { + Route::post('/mobil-bekas/{category}/bayar', [TransactionController::class, 'beginPayment'])->name('transactions.begin'); + Route::get('/pembayaran/{transaction}', [TransactionController::class, 'showPayment'])->name('transactions.payment'); + Route::post('/pembayaran/{transaction}', [TransactionController::class, 'uploadProof'])->name('transactions.upload'); +}); +Route::get('/profil', function () { + if (!auth()->check()) { + return redirect()->route('login'); + } + return view('user.profile'); +})->name('user.profile'); + +// Favorite routes (protected for logged-in users) +Route::post('/favorites/{category}', [CategoryController::class, 'addToFavorites'])->name('favorites.add')->middleware('auth'); +Route::delete('/favorites/{category}', [CategoryController::class, 'removeFromFavorites'])->name('favorites.remove')->middleware('auth'); + +// Support default Laravel /home link +Route::redirect('/home', '/dashboard'); + +// ── Auth Routes ────────────────────────────────────────────── +Route::middleware('guest:admin')->group(function () { + Route::get('/login', [AuthController::class, 'showLogin'])->name('login'); + Route::post('/login', [AuthController::class, 'login']); + + Route::get('/register', [AuthController::class, 'showRegister'])->name('register'); + Route::post('/register', [AuthController::class, 'register']); + + Route::get('/forgot-password', [AuthController::class, 'showForgotPassword'])->name('password.request'); + Route::post('/forgot-password', [AuthController::class, 'sendResetPasswordLink'])->name('password.email'); + Route::get('/reset-password/{token}', [AuthController::class, 'showResetPassword'])->name('password.reset'); + Route::post('/reset-password', [AuthController::class, 'resetPassword'])->name('password.update'); +}); + +Route::post('/logout', [AuthController::class, 'logout'])->name('logout'); +Route::get('/logout', function () { + return redirect()->route('login'); +}); + +Route::post('/whatsapp/admin-notify/{category}', [ChatController::class, 'notifyAdminWithCarImage'])->name('whatsapp.admin.notify'); +Route::get('/whatsapp/contact-admin/{category?}', [ChatController::class, 'redirectAdminWhatsApp'])->name('whatsapp.contact'); + +// ── Protected Routes ───────────────────────────────────────── +Route::middleware('auth:admin')->group(function () { + Route::get('/dashboard', function () { + Category::releaseExpiredReservations(); + + $users = User::all(); + $categories = Category::orderBy('created_at', 'desc')->get(); + $transactions = Transaction::with('category')->latest()->get(); + + return view('admin.dashboard', compact('users', 'categories', 'transactions')); + })->name('dashboard'); + + Route::get('/kategori', [CategoryController::class, 'index'])->name('kategori'); + Route::post('/kategori', [CategoryController::class, 'store'])->name('kategori.store'); + Route::get('/kategori/{category}/edit', [CategoryController::class, 'edit'])->name('kategori.edit'); + Route::patch('/kategori/{category}', [CategoryController::class, 'update'])->name('kategori.update'); + Route::delete('/kategori/{category}', [CategoryController::class, 'destroy'])->name('kategori.destroy'); + + Route::get('/riwayat', [TransactionController::class, 'index'])->name('riwayat'); + Route::patch('/riwayat/{transaction}/konfirmasi', [TransactionController::class, 'confirmPayment'])->name('transactions.confirm'); + Route::get('/input', [TransactionController::class, 'create'])->name('input'); + Route::post('/input', [TransactionController::class, 'store'])->name('input.store'); + Route::get('/laporan', function (\Illuminate\Http\Request $request) { + Category::releaseExpiredReservations(); + + $startDate = $request->query('start_date', now()->startOfMonth()->toDateString()); + $endDate = $request->query('end_date', now()->toDateString()); + + $transactions = Transaction::with('category') + ->whereDate('created_at', '>=', $startDate) + ->whereDate('created_at', '<=', $endDate) + ->latest() + ->get(); + + $paidTransactions = $transactions->where('payment_status', 'paid'); + $summary = [ + 'total_transactions' => $transactions->count(), + 'paid_transactions' => $paidTransactions->count(), + 'pending_transactions' => $transactions->where('payment_status', 'pending')->count(), + 'cancelled_transactions' => $transactions->where('payment_status', 'cancelled')->count(), + 'total_sales' => $paidTransactions->sum('total_amount'), + 'average_sales' => $paidTransactions->count() ? $paidTransactions->avg('total_amount') : 0, + 'available_cars' => Category::where('status', 'available')->count(), + 'sold_cars' => Category::where('status', 'sold')->count(), + ]; + + $dailySales = $paidTransactions + ->groupBy(fn ($transaction) => $transaction->created_at->format('Y-m-d')) + ->map(fn ($items) => $items->sum('total_amount')); + + $chartData = [ + 'daily_sales' => $dailySales, + 'max_daily_sales' => max((float) $dailySales->max(), 1), + 'payment_status' => collect([ + 'Lunas' => $summary['paid_transactions'], + 'Pending' => $summary['pending_transactions'], + 'Dibatalkan' => $summary['cancelled_transactions'], + ]), + 'payment_method' => collect([ + 'Tunai' => $transactions->where('payment_method', 'cash')->count(), + 'Transfer Bank' => $transactions->where('payment_method', 'transfer')->count(), + ]), + 'car_status' => collect([ + 'Tersedia' => $summary['available_cars'], + 'Terjual' => $summary['sold_cars'], + ]), + ]; + + return view('admin.laporan', compact('transactions', 'summary', 'chartData', 'startDate', 'endDate')); + })->name('laporan'); +}); diff --git a/web_JMW/storage/app/.gitignore b/web_JMW/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/web_JMW/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/web_JMW/storage/app/public/.gitignore b/web_JMW/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web_JMW/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web_JMW/storage/framework/.gitignore b/web_JMW/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/web_JMW/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/web_JMW/storage/framework/cache/.gitignore b/web_JMW/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/web_JMW/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/web_JMW/storage/framework/cache/data/.gitignore b/web_JMW/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web_JMW/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web_JMW/storage/framework/sessions/.gitignore b/web_JMW/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web_JMW/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web_JMW/storage/framework/testing/.gitignore b/web_JMW/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web_JMW/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web_JMW/storage/framework/views/.gitignore b/web_JMW/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web_JMW/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web_JMW/storage/logs/.gitignore b/web_JMW/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/web_JMW/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/web_JMW/ta_jmw b/web_JMW/ta_jmw new file mode 100644 index 0000000..e69de29 diff --git a/web_JMW/tests/CreatesApplication.php b/web_JMW/tests/CreatesApplication.php new file mode 100644 index 0000000..cc68301 --- /dev/null +++ b/web_JMW/tests/CreatesApplication.php @@ -0,0 +1,21 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/web_JMW/tests/Feature/ExampleTest.php b/web_JMW/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..8364a84 --- /dev/null +++ b/web_JMW/tests/Feature/ExampleTest.php @@ -0,0 +1,19 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/web_JMW/tests/TestCase.php b/web_JMW/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/web_JMW/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/web_JMW/vite.config.js b/web_JMW/vite.config.js new file mode 100644 index 0000000..421b569 --- /dev/null +++ b/web_JMW/vite.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + ], +});