From 2592a697904b07215c1849b47da0a040e2465e95 Mon Sep 17 00:00:00 2001 From: David Bruno Vontor Date: Tue, 9 Jun 2026 16:18:41 +0200 Subject: [PATCH] Introduce notifications app and integrate emails Add a new notifications app (models, serializers, views, admin, tasks, consumers, routing, urls, tests) with Notification.notify for in-app websocket pushes and optional email delivery. Centralize email sending in notifications.tasks.send_email_with_context and re-export it from account.tasks for compatibility. Update account and commerce and advertisement tasks to use Notification.notify/_notify_order and the new email helper; adjust order/notification tasks to consolidate logic. Wire notifications into ASGI routing, settings and URL conf. Misc: handle OSError when importing weasyprint, add tmp/ to .gitignore, add local .claude PowerShell checks, add social.blog skeleton, and remove legacy ews-component test files. --- .claude/settings.local.json | 4 +- .gitignore | 2 + backend/account/tasks.py | 115 +- backend/account/views.py | 6 + backend/advertisement/tasks.py | 29 +- backend/commerce/models.py | 2 +- backend/commerce/tasks.py | 215 +- backend/notifications/__init__.py | 0 backend/notifications/admin.py | 11 + backend/notifications/apps.py | 5 + backend/notifications/consumers.py | 93 + backend/notifications/migrations/__init__.py | 0 backend/notifications/models.py | 145 + backend/notifications/routing.py | 6 + backend/notifications/serializers.py | 15 + backend/notifications/tasks.py | 119 + backend/notifications/tests.py | 3 + backend/notifications/urls.py | 10 + backend/notifications/views.py | 51 + backend/social/blog/IDEA.md | 1 + backend/social/blog/__init__.py | 0 backend/social/blog/admin.py | 3 + backend/social/blog/apps.py | 5 + backend/social/blog/migrations/__init__.py | 0 backend/social/blog/models.py | 16 + backend/social/blog/serializers.py | 0 backend/social/blog/tests.py | 3 + backend/social/blog/views.py | 3 + backend/social/chat/IDEA.md | 6 + backend/social/chat/chat app diagram.md | 68 - backend/social/hubs/IDEA.md | 3 + backend/social/posts/IDEA.md | 11 + backend/vontor_cz/asgi.py | 3 +- backend/vontor_cz/settings.py | 1 + backend/vontor_cz/urls.py | 1 + frontend/src/components/social/posts/Post.tsx | 2 +- .../ews-component-master/.editorconfig | 15 - .../ews-component-master/.gitignore | 26 - .../ews-component-master/.prettierrc.json | 13 - .../ews-component-master/LICENSE | 21 - .../ews-component-master/LOCAL_USAGE.md | 124 - .../ews-component-master/package-lock.json | 1768 ---- .../ews-component-master/package.json | 53 - .../ews-component-master/readme.md | 105 - .../ews-component-master/src/components.d.ts | 394 - .../components/ews-card/ews-card.cmp.test.tsx | 9 - .../src/components/ews-card/ews-card.css | 136 - .../src/components/ews-card/ews-card.tsx | 98 - .../src/components/ews-card/readme.md | 26 - .../components/ews-hex-grid/ews-hex-grid.css | 240 - .../components/ews-hex-grid/ews-hex-grid.tsx | 193 - .../src/components/ews-hex-grid/readme.md | 21 - .../ews-hex-shape/ews-hex-shape.css | 84 - .../ews-hex-shape/ews-hex-shape.tsx | 56 - .../src/components/ews-hex-shape/readme.md | 21 - .../ews-rib-layout/ews-rib-layout.css | 276 - .../ews-rib-layout/ews-rib-layout.tsx | 188 - .../src/components/ews-rib-layout/readme.md | 21 - .../ews-stripe-bar/ews-stripe-bar.css | 219 - .../ews-stripe-bar/ews-stripe-bar.tsx | 47 - .../src/components/ews-stripe-bar/readme.md | 22 - .../my-component/my-component.cmp.test.tsx | 31 - .../components/my-component/my-component.css | 3 - .../components/my-component/my-component.tsx | 32 - .../src/components/my-component/readme.md | 19 - .../ews-component-master/src/index.html | 327 - .../ews-component-master/src/index.ts | 12 - .../ews-component-master/src/utils/utils.ts | 3 - .../src/utils/utils.unit.test.ts | 20 - .../ews-component-master/stencil.config.ts | 23 - .../ews-component-master/tsconfig.json | 29 - .../ews-component-master/vitest-setup.ts | 4 - .../ews-component-master/vitest.config.ts | 32 - .../test/ews-component-master/spectrum.txt | 8192 ----------------- 74 files changed, 666 insertions(+), 13194 deletions(-) create mode 100644 backend/notifications/__init__.py create mode 100644 backend/notifications/admin.py create mode 100644 backend/notifications/apps.py create mode 100644 backend/notifications/consumers.py create mode 100644 backend/notifications/migrations/__init__.py create mode 100644 backend/notifications/models.py create mode 100644 backend/notifications/routing.py create mode 100644 backend/notifications/serializers.py create mode 100644 backend/notifications/tasks.py create mode 100644 backend/notifications/tests.py create mode 100644 backend/notifications/urls.py create mode 100644 backend/notifications/views.py create mode 100644 backend/social/blog/IDEA.md create mode 100644 backend/social/blog/__init__.py create mode 100644 backend/social/blog/admin.py create mode 100644 backend/social/blog/apps.py create mode 100644 backend/social/blog/migrations/__init__.py create mode 100644 backend/social/blog/models.py create mode 100644 backend/social/blog/serializers.py create mode 100644 backend/social/blog/tests.py create mode 100644 backend/social/blog/views.py create mode 100644 backend/social/chat/IDEA.md delete mode 100644 backend/social/chat/chat app diagram.md create mode 100644 backend/social/hubs/IDEA.md create mode 100644 backend/social/posts/IDEA.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/.editorconfig delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/.gitignore delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/.prettierrc.json delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/LICENSE delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/LOCAL_USAGE.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/package-lock.json delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/package.json delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/readme.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components.d.ts delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.cmp.test.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.css delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/readme.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.css delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/readme.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.css delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/readme.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.css delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/readme.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.css delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/readme.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.cmp.test.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.css delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.tsx delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/readme.md delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/index.html delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/index.ts delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.ts delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.unit.test.ts delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/stencil.config.ts delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/tsconfig.json delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/vitest-setup.ts delete mode 100644 frontend/src/pages/test/ews-component-master/ews-component-master/vitest.config.ts delete mode 100644 frontend/src/pages/test/ews-component-master/spectrum.txt diff --git a/.claude/settings.local.json b/.claude/settings.local.json index b863243..e538a39 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -16,7 +16,9 @@ "Bash(node -e \"const r = require\\('react-icons/fa'\\); console.log\\('FaExchangeAlt' in r, 'FaSyncAlt' in r, 'FaCloudUploadAlt' in r, 'FaRandom' in r, 'FaDatabase' in r\\);\")", "Bash(node -e \"const r = require\\('react-icons/gi'\\); console.log\\('GiStabilizer' in r, 'GiDroneBoy' in r, 'GiCctvCamera' in r, 'GiFilmProjector' in r, 'GiGyroscope' in r\\);\")", "Bash(node -e \"const r = require\\('react-icons/si'\\); const celery = Object.keys\\(r\\).filter\\(k => k.toLowerCase\\(\\).includes\\('celery'\\) || k.toLowerCase\\(\\).includes\\('worker'\\) || k.toLowerCase\\(\\).includes\\('task'\\)\\).slice\\(0,10\\); console.log\\(celery\\);\")", - "Bash(Get-ChildItem -Path \"c:\\\\Users\\\\bruno\\\\Documents\\\\GitHub\\\\vontor-cz\\\\backend\\\\\" -Directory | Select-Object -ExpandProperty Name)" + "Bash(Get-ChildItem -Path \"c:\\\\Users\\\\bruno\\\\Documents\\\\GitHub\\\\vontor-cz\\\\backend\\\\\" -Directory | Select-Object -ExpandProperty Name)", + "PowerShell(Get-Command python)", + "PowerShell(python -c \"import django; print\\(django.__version__\\)\")" ] } } diff --git a/.gitignore b/.gitignore index 8135c77..7d60353 100644 --- a/.gitignore +++ b/.gitignore @@ -88,5 +88,7 @@ venv certs +tmp/ + # large video assets — host externally (S3) frontend/public/portfolio/*.mp4 \ No newline at end of file diff --git a/backend/account/tasks.py b/backend/account/tasks.py index c8427ad..f01d7cd 100644 --- a/backend/account/tasks.py +++ b/backend/account/tasks.py @@ -1,121 +1,80 @@ from celery import shared_task from celery.utils.log import get_task_logger -from django.core.mail import send_mail from django.conf import settings from django.utils.http import urlsafe_base64_encode from django.utils.encoding import force_bytes -from django.template.loader import render_to_string from .tokens import * from .models import CustomUser +# Re-exported so existing imports from account.tasks still work +from notifications.tasks import send_email_with_context # noqa: F401 + logger = get_task_logger(__name__) -def send_email_with_context(recipients, subject, template_path=None, context=None, message: str | None = None): - """ - Send emails rendering a single HTML template. - - `template_name` is a simple base name without extension, e.g. "email/test". - - Renders only HTML (".html"), no ".txt" support. - - Converts `user` in context to a plain dict to avoid passing models to templates. - """ - if isinstance(recipients, str): - recipients = [recipients] - html_message = None - if template_path: - ctx = dict(context or {}) - # Render base layout and include the provided template as the main content. - # The included template receives the same context as the base. - html_message = render_to_string( - "email/components/base.html", - {"content_template": template_path, **ctx}, - ) - - try: - send_mail( - subject=subject, - message=message or "", - from_email=None, - recipient_list=recipients, - fail_silently=False, - html_message=html_message, - ) - if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend' and message: - logger.debug(f"\nEMAIL OBSAH:\n{message}\nKONEC OBSAHU") - return True - except Exception as e: - logger.error(f"E-mail se neodeslal: {e}") - return False - - -#---------------------------------------------------------------------------------------------------- - -# This function sends an email to the user for email verification after registration. @shared_task def send_email_verification_task(user_id): + from notifications.models import Notification try: user = CustomUser.objects.get(pk=user_id) except CustomUser.DoesNotExist: - logger.info(f"Task send_email_verification has failed. Invalid User ID was sent.") - return 0 - + logger.info("send_email_verification_task: invalid user_id %s", user_id) + return + uid = urlsafe_base64_encode(force_bytes(user.pk)) - # {changed} generate and store a per-user token token = user.generate_email_verification_token() verify_url = f"{settings.FRONTEND_URL}/email-verification/?uidb64={uid}&token={token}" - context = { - "user": user, - "action_url": verify_url, - "frontend_url": settings.FRONTEND_URL, - "cta_label": "Ověřit e‑mail", - } - - send_email_with_context( - recipients=user.email, - subject="Ověření e‑mailu", + Notification.notify( + user=user, + title="Ověření e‑mailu", + text="Prosím ověřte svou e-mailovou adresu kliknutím na odkaz v e-mailu.", + action_url=verify_url, template_path="email/email_verification.html", - context=context, + email_context={ + "action_url": verify_url, + "frontend_url": settings.FRONTEND_URL, + "cta_label": "Ověřit e‑mail", + }, ) - @shared_task def send_email_test_task(email): - context = { - "action_url": settings.FRONTEND_URL, - "frontend_url": settings.FRONTEND_URL, - "cta_label": "Otevřít aplikaci", - } send_email_with_context( recipients=email, subject="Testovací e‑mail", template_path="email/test.html", - context=context, + context={ + "action_url": settings.FRONTEND_URL, + "frontend_url": settings.FRONTEND_URL, + "cta_label": "Otevřít aplikaci", + }, ) @shared_task def send_password_reset_email_task(user_id): + from notifications.models import Notification try: user = CustomUser.objects.get(pk=user_id) except CustomUser.DoesNotExist: - logger.info(f"Task send_password_reset_email has failed. Invalid User ID was sent.") - return 0 - + logger.info("send_password_reset_email_task: invalid user_id %s", user_id) + return + uid = urlsafe_base64_encode(force_bytes(user.pk)) token = password_reset_token.make_token(user) reset_url = f"{settings.FRONTEND_URL}/reset-password/{uid}/{token}" - context = { - "user": user, - "action_url": reset_url, - "frontend_url": settings.FRONTEND_URL, - "cta_label": "Obnovit heslo", - } - - send_email_with_context( - recipients=user.email, - subject="Obnova hesla", + Notification.notify( + user=user, + title="Obnova hesla", + text="Byl vyžádán reset vašeho hesla. Klikněte na odkaz pro nastavení nového hesla.", + action_url=reset_url, template_path="email/password_reset.html", - context=context, - ) \ No newline at end of file + email_context={ + "action_url": reset_url, + "frontend_url": settings.FRONTEND_URL, + "cta_label": "Obnovit heslo", + }, + ) diff --git a/backend/account/views.py b/backend/account/views.py index 1fda2e3..6f3df89 100644 --- a/backend/account/views.py +++ b/backend/account/views.py @@ -237,7 +237,9 @@ class UserView(viewsets.ModelViewSet): def get_serializer_class(self): user = getattr(self.request, 'user', None) + is_admin = user and (getattr(user, 'role', None) == 'admin' or getattr(user, 'is_superuser', False)) + if self.action in ['retrieve', 'list'] and not is_admin: return PublicUserSerializer return CustomUserSerializer @@ -277,11 +279,15 @@ class ChangePasswordView(APIView): def post(self, request): serializer = ChangePasswordSerializer(data=request.data) serializer.is_valid(raise_exception=True) + user = request.user + if not user.check_password(serializer.validated_data['current_password']): return Response({"current_password": "Nesprávné heslo."}, status=status.HTTP_400_BAD_REQUEST) + user.set_password(serializer.validated_data['new_password']) user.save() + return Response({"detail": "Heslo bylo úspěšně změněno."}) diff --git a/backend/advertisement/tasks.py b/backend/advertisement/tasks.py index 30a7527..0f620f8 100644 --- a/backend/advertisement/tasks.py +++ b/backend/advertisement/tasks.py @@ -1,47 +1,35 @@ -from venv import create -from account.tasks import send_email_with_context +from notifications.tasks import send_email_with_context from configuration.models import SiteConfiguration from celery import shared_task -from celery.schedules import crontab from commerce.models import Product import datetime + @shared_task def send_contact_me_email_task(client_email, message_content): - context = { - "client_email": client_email, - "message_content": message_content - } config_email = SiteConfiguration.get_solo().contact_email recipient = config_email if config_email else "brunovontor@gmail.com" send_email_with_context( recipients=recipient, subject="Poptávka z kontaktního formuláře!!!", template_path="email/contact_me.html", - context=context, + context={ + "client_email": client_email, + "message_content": message_content, + }, ) @shared_task def send_newly_added_items_to_store_email_task_last_week(): last_week_date = datetime.datetime.now() - datetime.timedelta(days=7) - - """ - __lte -> Less than or equal - __gte -> Greater than or equal - __lt -> Less than - __gt -> Greater than - """ - products_of_week = Product.objects.filter( include_in_week_summary_email=True, - created_at__gte=last_week_date + created_at__gte=last_week_date, ) - config = SiteConfiguration.get_solo() - send_email_with_context( recipients=config.contact_email, subject="Nový produkt přidán do obchodu", @@ -49,6 +37,5 @@ def send_newly_added_items_to_store_email_task_last_week(): context={ "products_of_week": products_of_week, "site_currency": config.currency, - } + }, ) - diff --git a/backend/commerce/models.py b/backend/commerce/models.py index 9f78dec..c48432d 100644 --- a/backend/commerce/models.py +++ b/backend/commerce/models.py @@ -11,7 +11,7 @@ from django.core.validators import MaxValueValidator, MinValueValidator, validat try: from weasyprint import HTML -except ImportError: +except (ImportError, OSError): HTML = None import os diff --git a/backend/commerce/tasks.py b/backend/commerce/tasks.py index 78d013f..5e78d41 100644 --- a/backend/commerce/tasks.py +++ b/backend/commerce/tasks.py @@ -1,182 +1,157 @@ -from account.tasks import send_email_with_context from celery import shared_task - from django.apps import apps from django.utils import timezone +from notifications.models import Notification +from notifications.tasks import send_email_with_context + + +def _notify_order(order, title, text, template_path, action_url=None): + """Send in-app notification + email for logged-in users, email-only for guests.""" + if order.user: + Notification.notify( + user=order.user, + title=title, + text=text, + notification_type=Notification.Type.ORDER, + action_url=action_url or f"/objednavky/{order.id}/", + template_path=template_path, + email_context={"order": order}, + ) + else: + send_email_with_context( + recipients=order.email, + subject=title, + template_path=template_path, + context={"order": order}, + ) + # -- CLEANUP TASKS -- -# Delete expired/cancelled orders (older than 24 hours) @shared_task def delete_expired_orders(): Order = apps.get_model('commerce', 'Order') - - expired_orders = Order.objects.filter(status=Order.OrderStatus.CANCELLED, created_at__lt=timezone.now() - timezone.timedelta(hours=24)) + expired_orders = Order.objects.filter( + status=Order.OrderStatus.CANCELLED, + created_at__lt=timezone.now() - timezone.timedelta(hours=24), + ) count = expired_orders.count() expired_orders.delete() return count -# -- NOTIFICATIONS CARRIER -- +# -- CARRIER NOTIFICATIONS -- -# Zásilkovna @shared_task -def notify_zasilkovna_sended(order = None, **kwargs): +def notify_zasilkovna_sended(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_zasilkovna_sended:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your order has been shipped", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Vaše objednávka byla odeslána", + text=f"Objednávka #{order.id} byla předána přepravci Zásilkovna.", template_path="email/shipping/zasilkovna/zasilkovna_sended.html", - context={ - "order": order, - }) + ) -# Shop @shared_task -def notify_Ready_to_pickup(order = None, **kwargs): +def notify_Ready_to_pickup(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_Ready_to_pickup:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your order is ready for pickup", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Vaše objednávka je připravena k vyzvednutí", + text=f"Objednávka #{order.id} čeká na vyzvednutí na prodejně.", template_path="email/shipping/ready_to_pickup/ready_to_pickup.html", - context={ - "order": order, - }) + ) -# -- NOTIFICATIONS ORDER -- +# -- ORDER NOTIFICATIONS -- @shared_task -def notify_order_successfuly_created(order = None, **kwargs): +def notify_order_successfuly_created(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_order_successfuly_created:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your order has been successfully created", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Objednávka byla úspěšně vytvořena", + text=f"Vaše objednávka #{order.id} byla přijata a čeká na zpracování.", template_path="email/order_created.html", - context={ - "order": order, - }) + ) @shared_task -def notify_order_payed(order = None, **kwargs): +def notify_order_payed(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_order_payed:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your order has been paid", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Platba objednávky přijata", + text=f"Platba za objednávku #{order.id} byla úspěšně přijata.", template_path="email/order_paid.html", - context={ - "order": order, - }) + ) @shared_task -def notify_about_missing_payment(order = None, **kwargs): +def notify_about_missing_payment(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_about_missing_payment:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Payment missing for your order", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Nezaplacená objednávka", + text=f"Objednávka #{order.id} dosud nebyla zaplacena. Dokončete platbu co nejdříve.", template_path="email/order_missing_payment.html", - context={ - "order": order, - }) + ) -# -- NOTIFICATIONS REFUND -- +# -- REFUND NOTIFICATIONS -- @shared_task -def notify_refund_items_arrived(order = None, **kwargs): +def notify_refund_items_arrived(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_refund_items_arrived:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your refund items have arrived", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Vrácené zboží přijato", + text=f"Vrácené zboží k objednávce #{order.id} bylo přijato. Reklamace bude zpracována.", template_path="email/order_refund_items_arrived.html", - context={ - "order": order, - }) + ) -# Refund accepted, returning money @shared_task -def notify_refund_accepted(order = None, **kwargs): +def notify_refund_accepted(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_refund_accepted:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your refund has been accepted", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Vrácení peněz schváleno", + text=f"Vaše reklamace k objednávce #{order.id} byla schválena. Peníze budou vráceny.", template_path="email/order_refund_accepted.html", - context={ - "order": order, - }) + ) -# -- NOTIFICATIONS ORDER STATUS -- +# -- ORDER STATUS NOTIFICATIONS -- @shared_task -def notify_order_cancelled(order = None, **kwargs): +def notify_order_cancelled(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_order_cancelled:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your order has been cancelled", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Objednávka zrušena", + text=f"Objednávka #{order.id} byla zrušena.", template_path="email/order_cancelled.html", - context={ - "order": order, - }) + ) @shared_task -def notify_order_completed(order = None, **kwargs): +def notify_order_completed(order=None, **kwargs): if not order: - raise ValueError("Order must be provided for notification.") - - if kwargs: - print("Additional kwargs received in notify_order_completed:", kwargs) - - send_email_with_context( - recipients=order.email, - subject="Your order has been completed", + raise ValueError("Order must be provided.") + _notify_order( + order, + title="Objednávka dokončena", + text=f"Vaše objednávka #{order.id} byla úspěšně dokončena. Děkujeme za nákup!", template_path="email/order_completed.html", - context={ - "order": order, - }) + ) diff --git a/backend/notifications/__init__.py b/backend/notifications/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/notifications/admin.py b/backend/notifications/admin.py new file mode 100644 index 0000000..5d34acd --- /dev/null +++ b/backend/notifications/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin +from .models import Notification + + +@admin.register(Notification) +class NotificationAdmin(admin.ModelAdmin): + list_display = ("id", "title", "notification_type", "user", "is_read", "bulk", "send_email", "created_at") + list_filter = ("notification_type", "is_read", "bulk", "send_email", "created_at") + search_fields = ("title", "text", "user__email", "user__username") + ordering = ("-created_at",) + readonly_fields = ("created_at", "read_at", "email_subject", "email_template_path", "send_email", "bulk") diff --git a/backend/notifications/apps.py b/backend/notifications/apps.py new file mode 100644 index 0000000..9c260e0 --- /dev/null +++ b/backend/notifications/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class NotificationsConfig(AppConfig): + name = 'notifications' diff --git a/backend/notifications/consumers.py b/backend/notifications/consumers.py new file mode 100644 index 0000000..293059e --- /dev/null +++ b/backend/notifications/consumers.py @@ -0,0 +1,93 @@ +import json +from channels.db import database_sync_to_async +from channels.generic.websocket import AsyncWebsocketConsumer +from django.utils import timezone + + +@database_sync_to_async +def _mark_notification_read(notification_id, user): + from .models import Notification + try: + n = Notification.objects.get(pk=notification_id, user=user) + if not n.is_read: + n.is_read = True + n.read_at = timezone.now() + n.save(update_fields=["is_read", "read_at"]) + return n.read_at.isoformat() + except Notification.DoesNotExist: + return None + + +@database_sync_to_async +def _mark_all_notifications_read(user): + from .models import Notification + now = timezone.now() + return Notification.objects.filter(user=user, is_read=False).update(is_read=True, read_at=now) + + +@database_sync_to_async +def _delete_notification(notification_id, user): + from .models import Notification + try: + n = Notification.objects.get(pk=notification_id, user=user) + n.delete() + return True + except Notification.DoesNotExist: + return False + + +class NotificationConsumer(AsyncWebsocketConsumer): + + async def connect(self): + user = self.scope["user"] + if not user.is_authenticated: + await self.close(code=4401) + return + self.group_name = f"notifications_{user.pk}" + await self.channel_layer.group_add(self.group_name, self.channel_name) + await self.accept() + + async def disconnect(self, close_code): + if hasattr(self, "group_name"): + await self.channel_layer.group_discard(self.group_name, self.channel_name) + + async def receive(self, text_data): + data = json.loads(text_data) + msg_type = data.get("type") + + if msg_type == "mark_read": + notification_id = data.get("id") + read_at = await _mark_notification_read(notification_id, self.scope["user"]) + if read_at: + await self.send(text_data=json.dumps({ + "type": "notification.read", + "id": notification_id, + "read_at": read_at, + })) + + elif msg_type == "mark_all_read": + count = await _mark_all_notifications_read(self.scope["user"]) + await self.send(text_data=json.dumps({ + "type": "notification.read_all", + "marked": count, + })) + + elif msg_type == "delete": + notification_id = data.get("id") + deleted = await _delete_notification(notification_id, self.scope["user"]) + if deleted: + await self.send(text_data=json.dumps({ + "type": "notification.deleted", + "id": notification_id, + })) + + async def notification_new(self, event): + await self.send(text_data=json.dumps({ + "type": "notification.new", + "id": event["id"], + "title": event["title"], + "text": event["text"], + "notification_type": event["notification_type"], + "action_url": event.get("action_url"), + "created_at": event["created_at"], + })) diff --git a/backend/notifications/migrations/__init__.py b/backend/notifications/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/notifications/models.py b/backend/notifications/models.py new file mode 100644 index 0000000..78aac18 --- /dev/null +++ b/backend/notifications/models.py @@ -0,0 +1,145 @@ +import logging +from django.db import models + +from account.models import CustomUser +from vontor_cz.models import SoftDeleteModel + +logger = logging.getLogger(__name__) + + +class Notification(SoftDeleteModel): + class Type(models.TextChoices): + SYSTEM = "system", "Systém" + ORDER = "order", "Objednávka" + PAYMENT = "payment", "Platba" + SOCIAL = "social", "Sociální" + CHAT = "chat", "Chat" + ADVERTISEMENT = "advertisement", "Inzerát" + + title = models.CharField(max_length=200, help_text="Předmět oznámení.") + text = models.TextField(help_text="Obsah oznámení.") + + notification_type = models.CharField( + max_length=20, + choices=Type.choices, + default=Type.SYSTEM, + help_text="Kategorie oznámení — používá se pro ikonky a filtrování na frontendu.", + ) + action_url = models.CharField( + max_length=500, + null=True, + blank=True, + help_text="Volitelný odkaz na detail (např. '/objednavky/123/').", + ) + + created_at = models.DateTimeField(auto_now_add=True) + user = models.ForeignKey( + CustomUser, on_delete=models.CASCADE, null=True, related_name='notifications', + help_text="Příjemce oznámení.", + ) + bulk = models.BooleanField( + default=False, + help_text="True, pokud bylo oznámení vytvořeno hromadně pro více uživatelů.", + ) + + is_read = models.BooleanField(default=False) + read_at = models.DateTimeField(null=True, blank=True) + + send_email = models.BooleanField( + default=False, + help_text="True, pokud byl zároveň odeslán e-mail.", + ) + email_subject = models.CharField(max_length=255, null=True, blank=True) + email_template_path = models.CharField(max_length=255, null=True, blank=True) + + class Meta: + ordering = ["-created_at"] + + def __str__(self): + return self.title + + @classmethod + def notify(cls, user=None, title=None, text=None, *, users=None, + notification_type=None, action_url=None, + email_subject=None, template_path=None, + email_context=None, attachments=None, bulk=False): + """Create an in-app notification and optionally send an email + WebSocket push. + + Modes: + • Single — user= → returns Notification + • Bulk — users= → returns list[Notification] + + notification_type controls the frontend icon/colour (default: system). + action_url is an optional relative path the bell badge links to. + If template_path is set, an email is dispatched (Celery if CELERY_ENABLED, else sync). + """ + if users is not None: + return [ + cls.notify( + user=u, title=title, text=text, + notification_type=notification_type, action_url=action_url, + email_subject=email_subject, template_path=template_path, + email_context=email_context, attachments=attachments, + bulk=True, + ) + for u in users + ] + + if user is None: + raise ValueError("Notification.notify() requires either 'user' or 'users'.") + + notification = cls.objects.create( + user=user, + title=title, + text=text, + notification_type=notification_type or cls.Type.SYSTEM, + action_url=action_url, + bulk=bulk, + send_email=bool(template_path), + email_subject=email_subject, + email_template_path=template_path, + ) + + # Real-time push via WebSocket + try: + from channels.layers import get_channel_layer + from asgiref.sync import async_to_sync + channel_layer = get_channel_layer() + if channel_layer: + async_to_sync(channel_layer.group_send)( + f"notifications_{user.pk}", + { + "type": "notification.new", + "id": notification.pk, + "title": notification.title, + "text": notification.text, + "notification_type": notification.notification_type, + "action_url": notification.action_url, + "created_at": notification.created_at.isoformat(), + }, + ) + except Exception as exc: + logger.warning("[Notification.notify] WebSocket push failed for user %s: %s", user.pk, exc) + + if template_path and getattr(user, 'email', None): + try: + from django.conf import settings + from notifications.tasks import send_notification_email_task + ctx = dict(email_context or {}) + if 'user' not in ctx: + ctx['user'] = user + kwargs = dict( + recipient_email=user.email, + subject=email_subject or title, + template_path=template_path, + context=ctx, + attachments=attachments, + ) + if getattr(settings, 'CELERY_ENABLED', False): + send_notification_email_task.delay(**kwargs) + else: + send_notification_email_task(**kwargs) + except Exception as exc: + logger.warning("[Notification.notify] Email failed for user %s: %s", user.pk, exc) + + return notification diff --git a/backend/notifications/routing.py b/backend/notifications/routing.py new file mode 100644 index 0000000..2b20823 --- /dev/null +++ b/backend/notifications/routing.py @@ -0,0 +1,6 @@ +from django.urls import re_path +from . import consumers + +websocket_urlpatterns = [ + re_path(r"ws/notifications/$", consumers.NotificationConsumer.as_asgi()), +] diff --git a/backend/notifications/serializers.py b/backend/notifications/serializers.py new file mode 100644 index 0000000..ab6092a --- /dev/null +++ b/backend/notifications/serializers.py @@ -0,0 +1,15 @@ +from rest_framework import serializers +from .models import Notification + + +class NotificationSerializer(serializers.ModelSerializer): + class Meta: + model = Notification + fields = [ + 'id', 'title', 'text', 'notification_type', 'action_url', + 'is_read', 'read_at', 'created_at', 'bulk', 'send_email', + ] + read_only_fields = [ + 'id', 'title', 'text', 'notification_type', 'action_url', + 'is_read', 'read_at', 'created_at', 'bulk', 'send_email', + ] diff --git a/backend/notifications/tasks.py b/backend/notifications/tasks.py new file mode 100644 index 0000000..5f8c766 --- /dev/null +++ b/backend/notifications/tasks.py @@ -0,0 +1,119 @@ +from datetime import datetime + +from celery import shared_task +from celery.utils.log import get_task_logger + +from django.core.mail import send_mail, EmailMultiAlternatives + +logger = get_task_logger(__name__) + +from account.models import CustomUser +from django.conf import settings +from django.template.loader import render_to_string + + +@shared_task +def send_notification_email_task(recipient_email, subject, template_path, context=None, attachments=None): + send_email_with_context( + recipients=recipient_email, + subject=subject, + template_path=template_path, + context=context or {}, + attachments=attachments, + ) + + + +def send_email_with_context(recipients, subject, template_path=None, context=None, message: str | None = None, attachments=None): + """ + Send email using component-based template system. + Uses base.html with header/footer components and includes the specified content template. + """ + if isinstance(recipients, str): + recipients = [recipients] + + if not recipients: + logger.warning("No recipients provided for email. Skipping sending email.") + return "No recipients provided for email." + + ctx = dict(context or {}) + + # Add current_year to context if not present + if "current_year" not in ctx: + ctx["current_year"] = datetime.now().year + + # Add AppConfig data for footer if not already present + if "company_name" not in ctx: + try: + from configuration.models import AppConfig + config = AppConfig.objects.first() + if config: + ctx["company_name"] = config.company_name + ctx["company_address"] = config.company_address + ctx["company_ico"] = config.company_ico + ctx["company_dic"] = config.company_dic + ctx["contact_email"] = config.contact_email + ctx["contact_phone"] = config.contact_phone + except Exception: + pass # Gracefully skip if AppConfig not available + + # Sanitize user if someone passes the model by mistake + if "user" in ctx and not isinstance(ctx["user"], dict): + try: + ctx["user"] = _build_user_template_ctx(ctx["user"]) + except Exception: + ctx["user"] = {} + + # Render HTML using base template with content include + html_message = None + if template_path: + ctx["content_template"] = template_path + html_message = render_to_string("email/components/base.html", ctx) + + try: + email = EmailMultiAlternatives( + subject=subject, + body=message or "Tento e-mail vyžaduje HTML podporu.", + from_email=None, + to=recipients if len(recipients) == 1 else [], + bcc=recipients if len(recipients) > 1 else [], + ) + + if html_message: + email.attach_alternative(html_message, "text/html") + + if attachments: + for filename, content, mimetype in attachments: + email.attach(filename, content, mimetype) + + email.send(fail_silently=False) + + logger.info(f"Sent email to {recipients} with subject '{subject}'") + + if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend': + logger.debug(f"\nEMAIL HTML:\n{html_message}\nKONEC OBSAHU") + return "Successfully sent email." + except Exception as e: + logger.error(f"E-mail se neodeslal: {e}") + raise # Re-raise so Celery marks the task as FAILED and can retry + + +def _build_user_template_ctx(user: CustomUser) -> dict: + """ + Return a plain dict for templates instead of passing the DB model. + Provides aliases to avoid template errors (firstname vs first_name). + Adds a backward-compatible key 'get_full_name' for templates using user.get_full_name. + """ + first_name = getattr(user, "first_name", "") or "" + last_name = getattr(user, "last_name", "") or "" + full_name = f"{first_name} {last_name}".strip() + return { + "id": user.pk, + "email": getattr(user, "email", "") or "", + "first_name": first_name, + "firstname": first_name, # alias for templates using `firstname` + "last_name": last_name, + "lastname": last_name, # alias for templates using `lastname` + "full_name": full_name, + "get_full_name": full_name, # compatibility for templates using method-style access + } \ No newline at end of file diff --git a/backend/notifications/tests.py b/backend/notifications/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/backend/notifications/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/notifications/urls.py b/backend/notifications/urls.py new file mode 100644 index 0000000..0ed9a0c --- /dev/null +++ b/backend/notifications/urls.py @@ -0,0 +1,10 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from . import views + +router = DefaultRouter() +router.register(r'', views.NotificationViewSet, basename='notification') + +urlpatterns = [ + path('', include(router.urls)), +] diff --git a/backend/notifications/views.py b/backend/notifications/views.py new file mode 100644 index 0000000..7212840 --- /dev/null +++ b/backend/notifications/views.py @@ -0,0 +1,51 @@ +import logging +from django.utils import timezone +from rest_framework.decorators import action +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.viewsets import GenericViewSet +from rest_framework.mixins import ListModelMixin, RetrieveModelMixin +from drf_spectacular.utils import extend_schema + +from .models import Notification +from .serializers import NotificationSerializer + +logger = logging.getLogger(__name__) + + +@extend_schema(tags=["notifications"]) +class NotificationViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): + serializer_class = NotificationSerializer + permission_classes = [IsAuthenticated] + + def get_queryset(self): + return Notification.objects.filter(user=self.request.user) + + @extend_schema( + summary="Unread notification count", + responses={200: {"type": "object", "properties": {"unread_count": {"type": "integer"}}}}, + ) + @action(detail=False, methods=["get"], url_path="unread-count") + def unread_count(self, request): + count = self.get_queryset().filter(is_read=False).count() + return Response({"unread_count": count}) + + @extend_schema(summary="Mark a single notification as read", responses={200: NotificationSerializer}) + @action(detail=True, methods=["post"], url_path="read") + def mark_read(self, request, pk=None): + notification = self.get_object() + if not notification.is_read: + notification.is_read = True + notification.read_at = timezone.now() + notification.save(update_fields=["is_read", "read_at"]) + return Response(NotificationSerializer(notification).data) + + @extend_schema( + summary="Mark all notifications as read", + responses={200: {"type": "object", "properties": {"marked": {"type": "integer"}}}}, + ) + @action(detail=False, methods=["post"], url_path="read-all") + def mark_all_read(self, request): + now = timezone.now() + updated = self.get_queryset().filter(is_read=False).update(is_read=True, read_at=now) + return Response({"marked": updated}) diff --git a/backend/social/blog/IDEA.md b/backend/social/blog/IDEA.md new file mode 100644 index 0000000..8ce8856 --- /dev/null +++ b/backend/social/blog/IDEA.md @@ -0,0 +1 @@ +# editorjs.io - základ \ No newline at end of file diff --git a/backend/social/blog/__init__.py b/backend/social/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/social/blog/admin.py b/backend/social/blog/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/backend/social/blog/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/backend/social/blog/apps.py b/backend/social/blog/apps.py new file mode 100644 index 0000000..7930587 --- /dev/null +++ b/backend/social/blog/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + name = 'blog' diff --git a/backend/social/blog/migrations/__init__.py b/backend/social/blog/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/social/blog/models.py b/backend/social/blog/models.py new file mode 100644 index 0000000..897b03a --- /dev/null +++ b/backend/social/blog/models.py @@ -0,0 +1,16 @@ +from django.db import models + +# Create your models here. + + +class Blog(models.Model): + title = models.CharField(max_length=255) + content = models.JsonField() + + authors = models.ManyToManyField('Author', related_name='blogs') + + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.title \ No newline at end of file diff --git a/backend/social/blog/serializers.py b/backend/social/blog/serializers.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/social/blog/tests.py b/backend/social/blog/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/backend/social/blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/social/blog/views.py b/backend/social/blog/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/backend/social/blog/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/backend/social/chat/IDEA.md b/backend/social/chat/IDEA.md new file mode 100644 index 0000000..eb2dadb --- /dev/null +++ b/backend/social/chat/IDEA.md @@ -0,0 +1,6 @@ +# Notify requests for chats + +# Notify @mentions in chats + +# Add requests before filling chat (maybe add chat type request and allowed and archived for advanced filtering) + actions + diff --git a/backend/social/chat/chat app diagram.md b/backend/social/chat/chat app diagram.md deleted file mode 100644 index 2dc7be6..0000000 --- a/backend/social/chat/chat app diagram.md +++ /dev/null @@ -1,68 +0,0 @@ -chat app diagram -┌─────────────────────────────────────────────────────────────────┐ -│ CLIENT (browser) │ -└────────────┬────────────────────────────┬───────────────────────┘ - │ WebSocket │ HTTP REST - │ ws/chat// │ /api/social/ - ▼ ▼ -┌────────────────────────┐ ┌────────────────────────────────────┐ -│ ChatConsumer │ │ REST Views │ -│ (consumers.py) │ │ (views.py) │ -│ │ │ │ -│ connect() │ │ ChatViewSet │ -│ ├─ auth check │ │ ├─ list / retrieve (GET) │ -│ └─ membership check ──┼───┼──► IsChatMember │ -│ │ │ ├─ create (POST) │ -│ receive() │ │ ├─ update/partial (PATCH/PUT) │ -│ ├─ new_chat_message │ │ │ └─ CanManageChat │ -│ │ (text only) │ │ ├─ destroy (DELETE) │ -│ │ └─► _create_message │ │ └─ CanManageChat │ -│ │ (DB INSERT) │ │ └─ add/remove member & moderator │ -│ │ │ │ │ -│ ├─ new_reply_message │ │ MessageViewSet │ -│ │ (text only) │ │ ├─ list / retrieve (GET) │ -│ │ └─► _create_message │ │ └─ IsAuthenticated │ -│ │ (DB INSERT) │ │ ├─ send (POST) │ -│ │ │ │ │ ├─ IsAuthenticated │ -│ └─ reaction │ │ │ ├─ DB INSERT Message │ -│ └─► _toggle_reaction │ │ ├─ DB INSERT MessageFile(s) │ -│ (DB UPDATE/ │ │ │ └─► group_send(chat.msg) ─────┼──► WebSocket push -│ DELETE) │ │ ├─ update/partial (PATCH/PUT) │ -│ │ │ │ ├─ IsMessageSenderOnly │ -│ typing / stop_typing │ │ │ ├─ message.edit_content() │ -│ └─► group_send only │ │ │ └─► group_send(edit.msg) ─────┼──► WebSocket push -│ (no DB write) │ │ └─ destroy (DELETE) │ -│ │ │ ├─ CanDeleteMessage │ -│ │ │ └─► group_send(delete.msg) ───┼──► WebSocket push -└────────────┬───────────┘ └──────────────┬─────────────────────┘ - │ │ - │ both use channel_layer │ - ▼ ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ Channel Layer (Redis) │ -│ group: "chat_{id}" │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ group_send dispatches to all connected consumers -┌─────────────────────────────────────────────────────────────────┐ -│ ChatConsumer event handlers (push to each connected client) │ -│ chat_message · reply_chat_message · edit_message │ -│ delete_message · message_reaction · typing_status · stop_typing│ -└─────────────────────────────────────────────────────────────────┘ - -┌──────────────────────────────────┐ ┌──────────────────────────┐ -│ Database writes summary │ │ When to use which path │ -│ │ │ │ -│ CREATE Message ← consumer │ │ WS ← text-only msg │ -│ (text only) │ │ HTTP← msg with files │ -│ CREATE Message ← view /send │ │ HTTP← edit message │ -│ (any) │ │ HTTP← delete message │ -│ CREATE MessageFile ← view/send │ │ WS ← reaction │ -│ UPDATE Message ← view │ │ WS ← typing indicator │ -│ DELETE Message ← view (soft) │ └──────────────────────────┘ -│ CREATE MessageReaction ← cons │ -│ UPDATE MessageReaction ← cons │ -│ DELETE MessageReaction ← cons │ -│ CREATE MessageHistory ← model │ -│ (auto on edit_content) │ -└──────────────────────────────────┘ diff --git a/backend/social/hubs/IDEA.md b/backend/social/hubs/IDEA.md new file mode 100644 index 0000000..ec73fc6 --- /dev/null +++ b/backend/social/hubs/IDEA.md @@ -0,0 +1,3 @@ +# Notify on mod ADD + +# notify for Apeal \ No newline at end of file diff --git a/backend/social/posts/IDEA.md b/backend/social/posts/IDEA.md new file mode 100644 index 0000000..57d2162 --- /dev/null +++ b/backend/social/posts/IDEA.md @@ -0,0 +1,11 @@ +# Votes in posts as widget + +# Location tag + +# PFP from hub on posts outside of hub + +# Collab/multiple authors on posts + +# NSFW tag, spoiler tag + +# Notify on likes 1 --> 10 --> 100 -> 500 -> 1000 etc.. \ No newline at end of file diff --git a/backend/vontor_cz/asgi.py b/backend/vontor_cz/asgi.py index 1399313..f46695a 100644 --- a/backend/vontor_cz/asgi.py +++ b/backend/vontor_cz/asgi.py @@ -18,9 +18,10 @@ django_asgi_app = get_asgi_application() from channels.routing import ProtocolTypeRouter, URLRouter from social.chat.routing import websocket_urlpatterns as social_ws from thirdparty.downloader.routing import websocket_urlpatterns as downloader_ws +from notifications.routing import websocket_urlpatterns as notifications_ws from vontor_cz.middleware import JWTAuthMiddleware -websocket_urlpatterns = downloader_ws + social_ws +websocket_urlpatterns = downloader_ws + social_ws + notifications_ws application = ProtocolTypeRouter({ "http": django_asgi_app, diff --git a/backend/vontor_cz/settings.py b/backend/vontor_cz/settings.py index b7c83ce..4494613 100644 --- a/backend/vontor_cz/settings.py +++ b/backend/vontor_cz/settings.py @@ -348,6 +348,7 @@ MY_CREATED_APPS = [ 'social.posts', 'advertisement', + 'notifications', 'thirdparty.downloader', 'thirdparty.stripe', # register Stripe app so its models are recognized diff --git a/backend/vontor_cz/urls.py b/backend/vontor_cz/urls.py index bb01ba1..21018e6 100644 --- a/backend/vontor_cz/urls.py +++ b/backend/vontor_cz/urls.py @@ -43,6 +43,7 @@ urlpatterns = [ path('api/configuration/', include('configuration.urls')), path('api/advertisement/', include('advertisement.urls')), + path('api/notifications/', include('notifications.urls')), path('api/social/hubs/', include('social.hubs.urls')), path('api/social/posts/', include('social.posts.urls')), path('api/social/', include('social.chat.urls')), diff --git a/frontend/src/components/social/posts/Post.tsx b/frontend/src/components/social/posts/Post.tsx index 5bce603..084da92 100644 --- a/frontend/src/components/social/posts/Post.tsx +++ b/frontend/src/components/social/posts/Post.tsx @@ -165,7 +165,7 @@ export default function Post({ {post.content && ( -

+

{post.content}

)} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/.editorconfig b/frontend/src/pages/test/ews-component-master/ews-component-master/.editorconfig deleted file mode 100644 index f1cc3ad..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -# http://editorconfig.org - -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[*.md] -insert_final_newline = false -trim_trailing_whitespace = false diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/.gitignore b/frontend/src/pages/test/ews-component-master/ews-component-master/.gitignore deleted file mode 100644 index c3ea58a..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -dist/ -www/ -loader/ - -*~ -*.sw[mnpcod] -*.log -*.lock -*.tmp -*.tmp.* -log.txt -*.sublime-project -*.sublime-workspace - -.stencil/ -.idea/ -.vscode/ -.sass-cache/ -.versions/ -node_modules/ -$RECYCLE.BIN/ - -.DS_Store -Thumbs.db -UserInterfaceState.xcuserstate -.env diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/.prettierrc.json b/frontend/src/pages/test/ews-component-master/ews-component-master/.prettierrc.json deleted file mode 100644 index 7ca3a28..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/.prettierrc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "arrowParens": "avoid", - "bracketSpacing": true, - "jsxBracketSameLine": false, - "jsxSingleQuote": false, - "quoteProps": "consistent", - "printWidth": 180, - "semi": true, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": false -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/LICENSE b/frontend/src/pages/test/ews-component-master/ews-component-master/LICENSE deleted file mode 100644 index c13f991..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/LOCAL_USAGE.md b/frontend/src/pages/test/ews-component-master/ews-component-master/LOCAL_USAGE.md deleted file mode 100644 index 486de7a..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/LOCAL_USAGE.md +++ /dev/null @@ -1,124 +0,0 @@ -# Cara Menggunakan Komponen Secara Lokal - -Ikuti langkah-langkah berikut untuk menggunakan `ews-card` dan `ews-hex-shape` di proyek lokal lain. - -## 1. Build Library -Pastikan library sudah di-build di direktori ini (`ews-component`): -```bash -npm run build -``` - -## 2. Link Library (Development) -Gunakan `npm link` agar perubahan di library ini langsung terlihat di proyek tujuan. - -**Di direktori ini (`ews-component`):** -```bash -npm link -``` - -**Di direktori proyek tujuan (misal: `ews-concept-new`):** -```bash -npm link ews-component -``` - ---- - -### Framework: Svelte / Vite / Vanilla JS -Tambahkan loader di file entri utama (seperti `src/routes/+layout.svelte` atau `main.ts`): - -```javascript -import { defineCustomElements } from 'ews-component/loader'; - -if (typeof window !== 'undefined') { - defineCustomElements(); -} -``` - -### Framework: React -Untuk React, panggil `defineCustomElements()` di file entri utama (`index.js` atau `App.js`): - -```tsx -import { useEffect } from 'react'; -import { defineCustomElements } from 'ews-component/loader'; - -function App() { - useEffect(() => { - defineCustomElements(); - }, []); - - return ( -
- -
React Card
-

Konten di React

-
-
- ); -} -``` - -### Framework: Vue (Vite) -Untuk Vue 3 dengan Vite, cara paling stabil adalah mengimport komponen secara langsung (menghindari error "Constructor not found"): - -1. Konfigurasi `vite.config.ts`: -```typescript -// vite.config.ts -export default defineConfig({ - plugins: [ - vue({ - template: { - compilerOptions: { - isCustomElement: (tag) => tag.startsWith('ews-') - } - } - }) - ] -}) -``` - -2. Register komponen di `main.ts` atau di component yang membutuhkan: -```typescript -// Mengimport dan register secara eksplisit (lebih stabil untuk development/npm link) -import 'ews-component/components/ews-card'; -import 'ews-component/components/ews-hex-shape'; -import 'ews-component/components/ews-stripe-bar'; -``` - -Atau jika ingin loader otomatis (namun kadang terkendala `npm link`): -```typescript -import { defineCustomElements } from 'ews-component/loader'; -defineCustomElements(); -``` - -### Plain HTML (Tanpa Bundler) -Jika ingin menggunakan langsung di file HTML tanpa build tool: - -```html - - - - - EWS Component Demo - - - - - - -
Vanilla HTML
-

Berjalan langsung di browser.

-
- - - - - - - -``` - -## Alternatif: Install Langsung -Jika tidak ingin menggunakan `link`, Anda bisa menginstall langsung dari path folder: -```bash -npm install ../path/to/ews-component -``` diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/package-lock.json b/frontend/src/pages/test/ews-component-master/ews-component-master/package-lock.json deleted file mode 100644 index 9cb9a72..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/package-lock.json +++ /dev/null @@ -1,1768 +0,0 @@ -{ - "name": "ews-component", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ews-component", - "version": "0.0.1", - "license": "MIT", - "devDependencies": { - "@stencil/core": "^4.27.1", - "@stencil/vitest": "^1.8.3", - "@types/node": "^22.13.5", - "@vitest/browser-playwright": "^4.0.0", - "vitest": "^4.0.0" - } - }, - "node_modules/@blazediff/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz", - "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@emnapi/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", - "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", - "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", - "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.120.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.120.0.tgz", - "integrity": "sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.10.tgz", - "integrity": "sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.10.tgz", - "integrity": "sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.10.tgz", - "integrity": "sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.10.tgz", - "integrity": "sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.10.tgz", - "integrity": "sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.10.tgz", - "integrity": "sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.10.tgz", - "integrity": "sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.10.tgz", - "integrity": "sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.10.tgz", - "integrity": "sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.10.tgz", - "integrity": "sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.10.tgz", - "integrity": "sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.10.tgz", - "integrity": "sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", - "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", - "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", - "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", - "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", - "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", - "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", - "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", - "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@stencil/core": { - "version": "4.43.3", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.43.3.tgz", - "integrity": "sha512-w41W6txhGULvvEfa5AEgwfNGAbK3YGowQYMTWuRvXSIbnkiyRDGLogsYSYtHDlz1JJe645JJIK9Lvh5uquFiSw==", - "dev": true, - "license": "MIT", - "bin": { - "stencil": "bin/stencil" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.10.0" - }, - "optionalDependencies": { - "@rollup/rollup-darwin-arm64": "4.44.0", - "@rollup/rollup-darwin-x64": "4.44.0", - "@rollup/rollup-linux-arm64-gnu": "4.44.0", - "@rollup/rollup-linux-arm64-musl": "4.44.0", - "@rollup/rollup-linux-x64-gnu": "4.44.0", - "@rollup/rollup-linux-x64-musl": "4.44.0", - "@rollup/rollup-win32-arm64-msvc": "4.44.0", - "@rollup/rollup-win32-x64-msvc": "4.44.0" - } - }, - "node_modules/@stencil/vitest": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@stencil/vitest/-/vitest-1.8.3.tgz", - "integrity": "sha512-ia6RvLnx/ADuRD5sWpJcdTnNodtc+bzJsq+vEEHaRWY08e2zU3O8RmRiNqjSoiJcytyK9soUt6eHLfkB1WHFuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jiti": "^2.6.1", - "local-pkg": "^1.1.2", - "vitest-environment-stencil": "1.8.3" - }, - "bin": { - "stencil-test": "dist/bin/stencil-test.js" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@stencil/core": "^4.0.0 || ^5.0.0-next || ^5.0.0", - "vitest": "^4.0.0 || ^3.0.0 || ^2.0.0" - }, - "peerDependenciesMeta": { - "@playwright/test": { - "optional": true - }, - "@stencil/mock-doc": { - "optional": true - }, - "@vitest/browser-playwright": { - "optional": true - }, - "@vitest/browser-preview": { - "optional": true - }, - "@vitest/browser-webdriverio": { - "optional": true - }, - "@wdio/globals": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "playwright": { - "optional": true - } - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", - "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@vitest/browser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.0.tgz", - "integrity": "sha512-tG/iOrgbiHQks0ew7CdelUyNEHkv8NLrt+CqdTivIuoSnXvO7scWMn4Kqo78/UGY1NJ6Hv+vp8BvRnED/bjFdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@blazediff/core": "1.9.1", - "@vitest/mocker": "4.1.0", - "@vitest/utils": "4.1.0", - "magic-string": "^0.30.21", - "pngjs": "^7.0.0", - "sirv": "^3.0.2", - "tinyrainbow": "^3.0.3", - "ws": "^8.19.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": "4.1.0" - } - }, - "node_modules/@vitest/browser-playwright": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.0.tgz", - "integrity": "sha512-2RU7pZELY9/aVMLmABNy1HeZ4FX23FXGY1jRuHLHgWa2zaAE49aNW2GLzebW+BmbTZIKKyFF1QXvk7DEWViUCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/browser": "4.1.0", - "@vitest/mocker": "4.1.0", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "playwright": "*", - "vitest": "4.1.0" - }, - "peerDependenciesMeta": { - "playwright": { - "optional": false - } - } - }, - "node_modules/@vitest/expect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.0.tgz", - "integrity": "sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.0", - "@vitest/utils": "4.1.0", - "chai": "^6.2.2", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.0.tgz", - "integrity": "sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.1.0", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/pretty-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.0.tgz", - "integrity": "sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.0.tgz", - "integrity": "sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.1.0", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.0.tgz", - "integrity": "sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.0", - "@vitest/utils": "4.1.0", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.0.tgz", - "integrity": "sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.0.tgz", - "integrity": "sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.0", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/confbox": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", - "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/exsolve": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", - "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/local-pkg": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", - "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "mlly": "^1.7.4", - "pkg-types": "^2.3.0", - "quansync": "^0.2.11" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/mlly": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", - "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.16.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.3" - } - }, - "node_modules/mlly/node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/mlly/node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/obug": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], - "license": "MIT" - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "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, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", - "pathe": "^2.0.3" - } - }, - "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "playwright-core": "1.58.2" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.19.0" - } - }, - "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", - "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" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, - "node_modules/rolldown": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.10.tgz", - "integrity": "sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.120.0", - "@rolldown/pluginutils": "1.0.0-rc.10" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.10", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.10", - "@rolldown/binding-darwin-x64": "1.0.0-rc.10", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.10", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.10", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.10", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.10", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.10", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.10", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.10", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.10" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/sirv": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", - "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", - "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyrainbow": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", - "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, - "node_modules/ufo": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", - "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.1.tgz", - "integrity": "sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lightningcss": "^1.32.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.10", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/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, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/vitest": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.0.tgz", - "integrity": "sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "4.1.0", - "@vitest/mocker": "4.1.0", - "@vitest/pretty-format": "4.1.0", - "@vitest/runner": "4.1.0", - "@vitest/snapshot": "4.1.0", - "@vitest/spy": "4.1.0", - "@vitest/utils": "4.1.0", - "es-module-lexer": "^2.0.0", - "expect-type": "^1.3.0", - "magic-string": "^0.30.21", - "obug": "^2.1.1", - "pathe": "^2.0.3", - "picomatch": "^4.0.3", - "std-env": "^4.0.0-rc.1", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.0.3", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.0", - "@vitest/browser-preview": "4.1.0", - "@vitest/browser-webdriverio": "4.1.0", - "@vitest/ui": "4.1.0", - "happy-dom": "*", - "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser-playwright": { - "optional": true - }, - "@vitest/browser-preview": { - "optional": true - }, - "@vitest/browser-webdriverio": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "vite": { - "optional": false - } - } - }, - "node_modules/vitest-environment-stencil": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/vitest-environment-stencil/-/vitest-environment-stencil-1.8.3.tgz", - "integrity": "sha512-YcigEK43Asfg6vKthpQY6GEiXuYakhIcJHuwkf+iyPa9cW4Rnq4gpT/TrH2lZDmwUz0RmeUM43atJFpI7mELHA==", - "dev": true, - "dependencies": { - "@stencil/vitest": "1.8.3" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - } - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/package.json b/frontend/src/pages/test/ews-component-master/ews-component-master/package.json deleted file mode 100644 index ccd9fd0..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "ews-component", - "version": "0.0.1", - "description": "Stencil Component Starter", - "main": "dist/index.cjs.js", - "module": "dist/index.js", - "types": "dist/types/index.d.ts", - "collection": "dist/collection/collection-manifest.json", - "collection:main": "dist/collection/index.js", - "unpkg": "dist/ews-component/ews-component.esm.js", - "exports": { - ".": { - "import": "./dist/ews-component/ews-component.esm.js", - "require": "./dist/ews-component/ews-component.cjs.js" - }, - "./components": { - "import": "./dist/components/index.js", - "types": "./dist/components/index.d.ts" - }, - "./components/*": { - "import": "./dist/components/*.js", - "types": "./dist/components/*.d.ts" - }, - "./loader": { - "import": "./loader/index.js", - "require": "./loader/index.cjs", - "types": "./loader/index.d.ts" - } - }, - "repository": { - "type": "git", - "url": "https://github.com/bagusindrayana/ews-component" - }, - "files": [ - "dist/", - "loader/" - ], - "scripts": { - "build": "stencil build", - "start": "stencil build --dev --watch --serve", - "test": "stencil-test", - "test:watch": "stencil-test --watch", - "generate": "stencil generate" - }, - "devDependencies": { - "@stencil/core": "^4.27.1", - "@stencil/vitest": "^1.8.3", - "@types/node": "^22.13.5", - "@vitest/browser-playwright": "^4.0.0", - "vitest": "^4.0.0" - }, - "license": "MIT" -} \ No newline at end of file diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/readme.md b/frontend/src/pages/test/ews-component-master/ews-component-master/readme.md deleted file mode 100644 index 8e3aa1f..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/readme.md +++ /dev/null @@ -1,105 +0,0 @@ -# EWS Component Library - -> A collection of StencilJS web components for the EWS project. - -This library contains reusable web components such as layout managers, charts, and UI elements designed for high-performance and framework-agnostic usage. - -## Installation - -To use `ews-component` in your project, install it via npm: - -```bash -npm install ews-component -``` - -## Available Components - -- `ews-card`: A versatile card component for displaying content. -- `ews-hex-grid`: A grid layout with hexagonal cells. -- `ews-hex-shape`: Individual hexagonal shape component. -- `ews-rib-layout`: A responsive "ribcage" layout for hierarchical data. -- `ews-stripe-bar`: A striped status or progress bar. - -## Local Development (StencilJS) - -To start developing components locally, clone this repository and follow these steps: - -1. **Install dependencies**: - ```bash - npm install - ``` - -2. **Start development server**: - ```bash - npm start - ``` - This will start a local dev server with hot-reloading. - -3. **Build for production**: - ```bash - npm run build - ``` - -4. **Run tests**: - ```bash - npm test - ``` - -## Usage - -### Framework Integration - -Since these are standard Web Components, they work in any framework (React, Vue, Angular, Svelte) or with no framework at all. - -### Lazy Loading (Universal) - -Include the loader script in your HTML: - -```html - - - - -``` - -### Direct Import (React/Vite/NextJS) - -```tsx -import { defineCustomElements } from 'ews-component/loader'; - -defineCustomElements(); - -// Use in your component - -``` - -## Documentation - -For more detailed information on specific components, please refer to the documentation in each component's directory or the official [StencilJS documentation](https://stenciljs.com/docs/introduction). - - -## Contributing & Adding New Components - -To maintain consistency, please follow these steps when adding a new component: - -1. **Generate Component**: - Use the Stencil CLI to scaffold your component: - ```bash - npm run generate - ``` - *Input the name with `ews-` prefix (e.g., `ews-new-button`).* - -2. **Naming & Directory**: - - **Folder**: `src/components/ews-[name]/` - - **Tag Name**: `ews-[name]` - - **Class Name**: `Ews[Name]` (PascalCase) - -3. **Code Style Guidelines**: - - **TypeScript & TSX**: Always use TypeScript/TSX for component logic. - - **Styling**: Use a dedicated CSS file (`[name].css`). Prefix all classes with `ews-` (e.g., `.ews-card`) to avoid global style collisions. - - **Reactivity**: Use `@Prop()`, `@State()`, and `@Event()` decorators for state management and communication. - - **Documentation**: Write clear JSDoc comments for props and events; Stencil will automatically update the component's `readme.md`. - - -## Support Me! -[![Support me on Sociabuzz](https://img.shields.io/badge/Support%20Me-Sociabuzz-orange?style=for-the-badge&logo=buymeacoffee&logoColor=white)](https://sociabuzz.com/bagusindrayana/tribe) \ No newline at end of file diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components.d.ts b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components.d.ts deleted file mode 100644 index 7f82b02..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components.d.ts +++ /dev/null @@ -1,394 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/** - * This is an autogenerated file created by the Stencil compiler. - * It contains typing information for all components that exist in this project. - */ -import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; -export namespace Components { - interface EwsCard { - /** - * Custom color for border and content (red or orange) - */ - "color"?: string; - /** - * Additional CSS classes to apply to the card wrapper - * @default '' - */ - "customClass": string; - /** - * Inline style - */ - "customStyle"?: string; - } - interface EwsHexGrid { - /** - * Additional CSS class for the container. - * @default '' - */ - "customClass": string; - /** - * Gap between hex cells in pixels. - * @default 4 - */ - "gap": number; - /** - * Height of each hex cell in pixels. - */ - "hexHeight": number; - /** - * Width of each hex cell in pixels. - */ - "hexWidth": number; - /** - * Hex orientation variant: 'pointy' or 'flat'. - * @default 'pointy' - */ - "variant": 'pointy' | 'flat'; - } - interface EwsHexShape { - /** - * Whether to clip content within the hex shape. - * @default false - */ - "clipContent": boolean; - /** - * The color variant of the hex shape. - * @default 'orange' - */ - "color": string; - /** - * Additional CSS classes for the component. - * @default '' - */ - "customClass": string; - /** - * Whether the hex shape has a flat top. - * @default true - */ - "flatTop": boolean; - /** - * The padding inside the hex shape for content. - * @default 10 - */ - "paddingContent": number; - } - interface EwsRibLayout { - /** - * Optional renderer function for the connector content. - */ - "connectorRenderer"?: (item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) => any; - /** - * Function to get the href for a node. If provided, nodes will be rendered as tags. - */ - "getHref"?: (item: any) => string; - /** - * Array of items to be displayed in the rib cage layout. - * @default [] - */ - "items": any[]; - /** - * Maximum number of branches to display. If not provided, it defaults to 5 (responsive). - */ - "maxBranches"?: number; - /** - * Optional renderer function for the node content. - */ - "nodeRenderer"?: (item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) => any; - } - interface EwsStripeBar { - /** - * @default '' - */ - "color": string; - /** - * @default 10 - */ - "duration": number; - /** - * @default false - */ - "loop": boolean; - /** - * @default '' - */ - "orientation": string; - /** - * @default false - */ - "reverse": boolean; - /** - * @default '30px' - */ - "size": string; - } - interface MyComponent { - /** - * The first name - */ - "first": string; - /** - * The last name - */ - "last": string; - /** - * The middle name - */ - "middle": string; - } -} -export interface EwsCardCustomEvent extends CustomEvent { - detail: T; - target: HTMLEwsCardElement; -} -declare global { - interface HTMLEwsCardElementEventMap { - "toggle": void; - } - interface HTMLEwsCardElement extends Components.EwsCard, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLEwsCardElement, ev: EwsCardCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLEwsCardElement, ev: EwsCardCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLEwsCardElement: { - prototype: HTMLEwsCardElement; - new (): HTMLEwsCardElement; - }; - interface HTMLEwsHexGridElement extends Components.EwsHexGrid, HTMLStencilElement { - } - var HTMLEwsHexGridElement: { - prototype: HTMLEwsHexGridElement; - new (): HTMLEwsHexGridElement; - }; - interface HTMLEwsHexShapeElement extends Components.EwsHexShape, HTMLStencilElement { - } - var HTMLEwsHexShapeElement: { - prototype: HTMLEwsHexShapeElement; - new (): HTMLEwsHexShapeElement; - }; - interface HTMLEwsRibLayoutElement extends Components.EwsRibLayout, HTMLStencilElement { - } - var HTMLEwsRibLayoutElement: { - prototype: HTMLEwsRibLayoutElement; - new (): HTMLEwsRibLayoutElement; - }; - interface HTMLEwsStripeBarElement extends Components.EwsStripeBar, HTMLStencilElement { - } - var HTMLEwsStripeBarElement: { - prototype: HTMLEwsStripeBarElement; - new (): HTMLEwsStripeBarElement; - }; - interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement { - } - var HTMLMyComponentElement: { - prototype: HTMLMyComponentElement; - new (): HTMLMyComponentElement; - }; - interface HTMLElementTagNameMap { - "ews-card": HTMLEwsCardElement; - "ews-hex-grid": HTMLEwsHexGridElement; - "ews-hex-shape": HTMLEwsHexShapeElement; - "ews-rib-layout": HTMLEwsRibLayoutElement; - "ews-stripe-bar": HTMLEwsStripeBarElement; - "my-component": HTMLMyComponentElement; - } -} -declare namespace LocalJSX { - interface EwsCard { - /** - * Custom color for border and content (red or orange) - */ - "color"?: string; - /** - * Additional CSS classes to apply to the card wrapper - * @default '' - */ - "customClass"?: string; - /** - * Inline style - */ - "customStyle"?: string; - /** - * Emitted when the card toggles open/close state - */ - "onToggle"?: (event: EwsCardCustomEvent) => void; - } - interface EwsHexGrid { - /** - * Additional CSS class for the container. - * @default '' - */ - "customClass"?: string; - /** - * Gap between hex cells in pixels. - * @default 4 - */ - "gap"?: number; - /** - * Height of each hex cell in pixels. - */ - "hexHeight"?: number; - /** - * Width of each hex cell in pixels. - */ - "hexWidth"?: number; - /** - * Hex orientation variant: 'pointy' or 'flat'. - * @default 'pointy' - */ - "variant"?: 'pointy' | 'flat'; - } - interface EwsHexShape { - /** - * Whether to clip content within the hex shape. - * @default false - */ - "clipContent"?: boolean; - /** - * The color variant of the hex shape. - * @default 'orange' - */ - "color"?: string; - /** - * Additional CSS classes for the component. - * @default '' - */ - "customClass"?: string; - /** - * Whether the hex shape has a flat top. - * @default true - */ - "flatTop"?: boolean; - /** - * The padding inside the hex shape for content. - * @default 10 - */ - "paddingContent"?: number; - } - interface EwsRibLayout { - /** - * Optional renderer function for the connector content. - */ - "connectorRenderer"?: (item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) => any; - /** - * Function to get the href for a node. If provided, nodes will be rendered as tags. - */ - "getHref"?: (item: any) => string; - /** - * Array of items to be displayed in the rib cage layout. - * @default [] - */ - "items"?: any[]; - /** - * Maximum number of branches to display. If not provided, it defaults to 5 (responsive). - */ - "maxBranches"?: number; - /** - * Optional renderer function for the node content. - */ - "nodeRenderer"?: (item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) => any; - } - interface EwsStripeBar { - /** - * @default '' - */ - "color"?: string; - /** - * @default 10 - */ - "duration"?: number; - /** - * @default false - */ - "loop"?: boolean; - /** - * @default '' - */ - "orientation"?: string; - /** - * @default false - */ - "reverse"?: boolean; - /** - * @default '30px' - */ - "size"?: string; - } - interface MyComponent { - /** - * The first name - */ - "first"?: string; - /** - * The last name - */ - "last"?: string; - /** - * The middle name - */ - "middle"?: string; - } - - interface EwsCardAttributes { - "customClass": string; - "color": string; - "customStyle": string; - } - interface EwsHexGridAttributes { - "customClass": string; - "variant": 'pointy' | 'flat'; - "hexWidth": number; - "hexHeight": number; - "gap": number; - } - interface EwsHexShapeAttributes { - "customClass": string; - "color": string; - "flatTop": boolean; - "clipContent": boolean; - "paddingContent": number; - } - interface EwsRibLayoutAttributes { - "maxBranches": number; - } - interface EwsStripeBarAttributes { - "color": string; - "orientation": string; - "loop": boolean; - "reverse": boolean; - "duration": number; - "size": string; - } - interface MyComponentAttributes { - "first": string; - "middle": string; - "last": string; - } - - interface IntrinsicElements { - "ews-card": Omit & { [K in keyof EwsCard & keyof EwsCardAttributes]?: EwsCard[K] } & { [K in keyof EwsCard & keyof EwsCardAttributes as `attr:${K}`]?: EwsCardAttributes[K] } & { [K in keyof EwsCard & keyof EwsCardAttributes as `prop:${K}`]?: EwsCard[K] }; - "ews-hex-grid": Omit & { [K in keyof EwsHexGrid & keyof EwsHexGridAttributes]?: EwsHexGrid[K] } & { [K in keyof EwsHexGrid & keyof EwsHexGridAttributes as `attr:${K}`]?: EwsHexGridAttributes[K] } & { [K in keyof EwsHexGrid & keyof EwsHexGridAttributes as `prop:${K}`]?: EwsHexGrid[K] }; - "ews-hex-shape": Omit & { [K in keyof EwsHexShape & keyof EwsHexShapeAttributes]?: EwsHexShape[K] } & { [K in keyof EwsHexShape & keyof EwsHexShapeAttributes as `attr:${K}`]?: EwsHexShapeAttributes[K] } & { [K in keyof EwsHexShape & keyof EwsHexShapeAttributes as `prop:${K}`]?: EwsHexShape[K] }; - "ews-rib-layout": Omit & { [K in keyof EwsRibLayout & keyof EwsRibLayoutAttributes]?: EwsRibLayout[K] } & { [K in keyof EwsRibLayout & keyof EwsRibLayoutAttributes as `attr:${K}`]?: EwsRibLayoutAttributes[K] } & { [K in keyof EwsRibLayout & keyof EwsRibLayoutAttributes as `prop:${K}`]?: EwsRibLayout[K] }; - "ews-stripe-bar": Omit & { [K in keyof EwsStripeBar & keyof EwsStripeBarAttributes]?: EwsStripeBar[K] } & { [K in keyof EwsStripeBar & keyof EwsStripeBarAttributes as `attr:${K}`]?: EwsStripeBarAttributes[K] } & { [K in keyof EwsStripeBar & keyof EwsStripeBarAttributes as `prop:${K}`]?: EwsStripeBar[K] }; - "my-component": Omit & { [K in keyof MyComponent & keyof MyComponentAttributes]?: MyComponent[K] } & { [K in keyof MyComponent & keyof MyComponentAttributes as `attr:${K}`]?: MyComponentAttributes[K] } & { [K in keyof MyComponent & keyof MyComponentAttributes as `prop:${K}`]?: MyComponent[K] }; - } -} -export { LocalJSX as JSX }; -declare module "@stencil/core" { - export namespace JSX { - interface IntrinsicElements { - "ews-card": LocalJSX.IntrinsicElements["ews-card"] & JSXBase.HTMLAttributes; - "ews-hex-grid": LocalJSX.IntrinsicElements["ews-hex-grid"] & JSXBase.HTMLAttributes; - "ews-hex-shape": LocalJSX.IntrinsicElements["ews-hex-shape"] & JSXBase.HTMLAttributes; - "ews-rib-layout": LocalJSX.IntrinsicElements["ews-rib-layout"] & JSXBase.HTMLAttributes; - "ews-stripe-bar": LocalJSX.IntrinsicElements["ews-stripe-bar"] & JSXBase.HTMLAttributes; - "my-component": LocalJSX.IntrinsicElements["my-component"] & JSXBase.HTMLAttributes; - } - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.cmp.test.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.cmp.test.tsx deleted file mode 100644 index 20e65bd..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.cmp.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { render, h, describe, it, expect } from '@stencil/vitest'; - -describe('ews-card', () => { - it('renders', async () => { - const { root } = await render(); - await expect(root).toBeDefined(); - await expect(root.querySelector('.ews-card')).not.toBeNull(); - }); -}); diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.css b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.css deleted file mode 100644 index 9cefdff..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.css +++ /dev/null @@ -1,136 +0,0 @@ -.ews-card { - --ews-card-color: var(--orange, #fa0); - --ews-card-radius: var(--gutter-size, 8px); - --ews-card-border-width: 3px; - background-color: black; - transition: 0.3s; - - border-radius: var(--ews-card-radius); - border-style: solid; - border-width: var(--ews-card-border-width); - border-color: var(--ews-card-color); -} - -.ews-card.ews-card-red { - --ews-card-color: var(--red, #f23); -} - -.ews-card-header { - /* padding: 6px; */ - color: var(--ews-card-color); - position: relative; - border-radius: 10px 10px 0px 0px; - border-bottom: var(--ews-card-border-width) solid var(--ews-card-color); -} - -.ews-card-header .ews-card-text { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - display: flex; - justify-content: center; - align-items: center; -} - -.ews-card-header button { - cursor: pointer; -} - -.ews-card-footer { - /* padding: 6px; */ - color: var(--ews-card-color); - position: relative; - border-radius: 0px 0px 10px 10px; - border-top: var(--ews-card-border-width) solid var(--ews-card-color); -} - -.ews-card-footer .ews-card-text { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - display: flex; - justify-content: center; - align-items: center; -} - -.ews-card-content { - color: var(--ews-card-color); -} - - -.ews-card-content::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); - border-radius: 10px; - background-color: rgb(61, 61, 61); -} - -.ews-card-content::-webkit-scrollbar { - width: 12px; - height: 12px; - background-color: rgb(61, 61, 61); -} - -.ews-card-content::-webkit-scrollbar-thumb { - border-radius: 10px; - -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); - background-color: var(--red); -} - -.ews-card-content tbody { - font-size: 10px !important; -} - -.ews-card-float { - transition: all 0.3s ease-in-out; -} - -.ews-card-float .ews-card-content { - display: block; - max-height: 45vh; - overflow-y: auto; - overflow-x: hidden; -} - -.ews-card-close-button { - font-size: 24px; - color: #e60003; - padding: 2px 4px; - background-color: black !important; - right: 10px !important; - top: 10px !important; -} - -@media (max-width: 768px) { - - .ews-card { - --ews-card-border-width: 1px; - } - - .ews-card-float .ews-card-content { - display: none; - padding: 0px; - } - - .ews-card-float.open .ews-card-content { - display: block; - padding: 6px; - } - - .ews-card-float { - margin: auto; - right: 0.25rem; - left: 0.25rem; - } - - .ews-card-float .ews-card-header { - border-bottom: unset; - } - - .ews-card-header { - cursor: pointer; - } -} \ No newline at end of file diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.tsx deleted file mode 100644 index c7565b0..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/ews-card.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { Component, Prop, State, Event, EventEmitter, Element, h } from '@stencil/core'; - -@Component({ - tag: 'ews-card', - styleUrl: 'ews-card.css', - shadow: false, -}) -export class EwsCard { - @Element() el: HTMLElement; - - /** - * Additional CSS classes to apply to the card wrapper - */ - @Prop() customClass: string = ''; - - - /** - * Custom color for border and content (red or orange) - */ - @Prop() color?: string; - - /** - * Inline style - */ - @Prop() customStyle?: string; - - /** - * Tracks whether the card content is toggled open - */ - @State() open: boolean = false; - - @State() hasHeader: boolean = false; - @State() hasFooter: boolean = false; - - /** - * Emitted when the card toggles open/close state - */ - @Event() toggle: EventEmitter; - - componentWillLoad() { - this.checkSlots(); - } - - componentDidLoad() { - this.checkSlots(); - } - - componentDidUpdate() { - this.checkSlots(); - } - - private checkSlots() { - if (!this.el) return; - const headerSlot = !!this.el.querySelector('[slot="header"]'); - const footerSlot = !!this.el.querySelector('[slot="footer"]'); - - if (this.hasHeader !== headerSlot) { - this.hasHeader = headerSlot; - } - if (this.hasFooter !== footerSlot) { - this.hasFooter = footerSlot; - } - } - - private handleToggle = () => { - this.open = !this.open; - this.toggle.emit(); - }; - - render() { - return ( -
- {this.hasHeader && ( -
- -
- )} - -
- - -
- - {this.hasFooter && ( - - )} -
- ); - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/readme.md b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/readme.md deleted file mode 100644 index b5f7a83..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-card/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -# ews-card - - - - - - -## Properties - -| Property | Attribute | Description | Type | Default | -| ------------- | -------------- | --------------------------------------------------- | -------- | ----------- | -| `color` | `color` | Custom color for border and content (red or orange) | `string` | `undefined` | -| `customClass` | `custom-class` | Additional CSS classes to apply to the card wrapper | `string` | `''` | -| `customStyle` | `custom-style` | Inline style | `string` | `undefined` | - - -## Events - -| Event | Description | Type | -| -------- | ---------------------------------------------- | ------------------- | -| `toggle` | Emitted when the card toggles open/close state | `CustomEvent` | - - ----------------------------------------------- - -*Built with [StencilJS](https://stenciljs.com/)* diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.css b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.css deleted file mode 100644 index a4470f7..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.css +++ /dev/null @@ -1,240 +0,0 @@ -/* ============================================= - HEXAGONAL GRID STYLES - ============================================= */ - -/* --- Shared hex clip-path (flat-top orientation) --- */ -.ews-hex-clip { - clip-path: polygon(24.96% 100%, - 0% 50%, - 24.96% 0%, - 74.87% 0%, - 99.84% 50%, - 74.87% 100%); -} - -/* --- Shared hex clip-path (pointy-top / rotated 90°) --- */ -.ews-hex-clip-pointy { - clip-path: polygon(0% 25.13%, - 50% 0%, - 100% 25.13%, - 100% 74.87%, - 50% 100%, - 0% 74.87%); -} - -/* ---- 1. Basic Flat Hex Grid ---- */ -:host .ews-hex-grid-flat { - display: flex; - flex-wrap: wrap; - gap: 6px; - align-items: center; -} - -::slotted(.ews-hex-cell-flat) { - position: relative; - width: 80px; - height: 70px; - aspect-ratio: 584 / 507; - clip-path: polygon(24.96% 100%, 0% 50%, 24.96% 0%, 74.87% 0%, 99.84% 50%, 74.87% 100%); - background-color: rgba(255, 170, 0, 0.08); - border: none; - display: flex; - align-items: center; - justify-content: center; - transition: background-color 0.25s ease, transform 0.2s ease; - cursor: default; -} - -::slotted(.ews-hex-cell-flat:hover) { - background-color: rgba(255, 170, 0, 0.18); - transform: scale(1.06); -} - -::slotted(.ews-hex-cell-flat.ews-hex-danger) { - background-color: rgba(255, 34, 51, 0.15); - box-shadow: 0 0 12px 2px rgba(255, 34, 51, 0.3); -} - -::slotted(.ews-hex-cell-flat.ews-hex-warn) { - background-color: rgba(255, 170, 0, 0.15); - box-shadow: 0 0 10px 2px rgba(255, 170, 0, 0.25); -} - -::slotted(.ews-hex-cell-flat.ews-hex-safe) { - background-color: rgba(0, 200, 80, 0.12); - box-shadow: 0 0 8px 1px rgba(0, 200, 80, 0.2); -} - -.ews-hex-content { - position: relative; - z-index: 1; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 2px; - color: var(--orange); - text-align: center; -} - -/* ---- 2. Honeycomb Offset Grid ---- */ -.ews-hex-honeycomb { - display: flex; - flex-direction: column; - gap: 0; -} - -:host .ews-hex-row { - display: flex; - flex-direction: row; - gap: 4px; -} - -:host .ews-hex-row-offset { - margin-left: calc(72px / 2 + 2px); - margin-top: -14px; -} - -::slotted(.ews-hex-hive) { - position: relative; - width: 72px; - height: 83px; - display: flex; - align-items: center; - justify-content: center; - transition: transform 0.2s ease, background-color 0.2s ease; -} - -::slotted(.ews-hex-hive.ews-hex-danger) { - background-color: rgba(255, 34, 51, 0.18); - filter: drop-shadow(0 0 8px rgba(255, 34, 51, 0.5)); -} - -::slotted(.ews-hex-hive.ews-hex-warn) { - background-color: rgba(255, 170, 0, 0.18); - filter: drop-shadow(0 0 6px rgba(255, 170, 0, 0.4)); -} - -.ews-hex-hive-inner { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 1px; - text-align: center; - color: var(--orange); -} - -/* ---- 3. Animated Status Hex Cells ---- */ -::slotted(.ews-hex-status-cell) { - position: relative; - width: 90px; - height: 104px; - clip-path: polygon(0% 25.13%, 50% 0%, 100% 25.13%, 100% 74.87%, 50% 100%, 0% 74.87%); - background-color: rgba(255, 170, 0, 0.06); - display: flex; - align-items: center; - justify-content: center; - transition: transform 0.25s ease; -} - -::slotted(.ews-hex-status-cell:hover) { - transform: scale(1.08); -} - -::slotted(.ews-hex-status-cell.ews-hex-danger) { - background-color: rgba(255, 34, 51, 0.12); - filter: drop-shadow(0 0 10px rgba(255, 34, 51, 0.45)); -} - -::slotted(.ews-hex-status-cell.ews-hex-warn) { - background-color: rgba(255, 170, 0, 0.12); - filter: drop-shadow(0 0 8px rgba(255, 170, 0, 0.4)); -} - -::slotted(.ews-hex-status-cell.ews-hex-caution) { - background-color: rgba(255, 255, 0, 0.08); - filter: drop-shadow(0 0 6px rgba(255, 255, 0, 0.25)); -} - -::slotted(.ews-hex-status-cell.ews-hex-safe) { - background-color: rgba(0, 200, 80, 0.08); - filter: drop-shadow(0 0 6px rgba(0, 200, 80, 0.2)); -} - -::slotted(.ews-hex-status-cell.ews-hex-pulse) { - animation: hexPulse 1.4s ease-in-out infinite; -} - -@keyframes hexPulse { - - 0%, - 100% { - filter: drop-shadow(0 0 8px rgba(255, 34, 51, 0.3)); - } - - 50% { - filter: drop-shadow(0 0 22px rgba(255, 34, 51, 0.85)); - } -} - -.ews-hex-status-inner { - position: relative; - z-index: 1; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - text-align: center; - gap: 2px; - color: var(--orange); -} - -/* ---- 4. Hex with Strip Decoration ---- */ -::slotted(.ews-hex-stripe-cell) { - position: relative; - width: 110px; - height: 127px; - clip-path: polygon(0% 25.13%, 50% 0%, 100% 25.13%, 100% 74.87%, 50% 100%, 0% 74.87%); - overflow: hidden; - display: flex; - align-items: center; - justify-content: center; - background-color: rgba(255, 170, 0, 0.05); - transition: transform 0.2s ease; -} - -::slotted(.ews-hex-stripe-cell:hover) { - transform: scale(1.06); -} - -::slotted(.ews-hex-stripe-cell.ews-hex-danger) { - background-color: rgba(255, 34, 51, 0.08); -} - -.ews-hex-stripe-bg { - position: relative; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; -} - -.ews-hex-stripe-content { - position: relative; - z-index: 2; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - text-align: center; - gap: 1px; - color: var(--orange); - background-color: rgba(0, 0, 0, 0.55); - padding: 6px 10px; - clip-path: polygon(0% 25.13%, 50% 0%, 100% 25.13%, 100% 74.87%, 50% 100%, 0% 74.87%); - width: 88%; - height: 88%; -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.tsx deleted file mode 100644 index a0f0ce4..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/ews-hex-grid.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import { Component, Host, h, Prop, Element, Watch, State } from '@stencil/core'; - -@Component({ - tag: 'ews-hex-grid', - styleUrl: 'ews-hex-grid.css', - shadow: true, -}) -export class EwsHexGrid { - /** - * Additional CSS class for the container. - */ - @Prop() customClass: string = ''; - - /** - * Hex orientation variant: 'pointy' or 'flat'. - */ - @Prop() variant: 'pointy' | 'flat' = 'pointy'; - - /** - * Width of each hex cell in pixels. - */ - @Prop() hexWidth: number; - - /** - * Height of each hex cell in pixels. - */ - @Prop() hexHeight: number; - - /** - * Gap between hex cells in pixels. - */ - @Prop() gap: number = 4; - - @Element() el: HTMLElement; - - @State() containerHeight: string = 'auto'; - - private ro: ResizeObserver; - private mo: MutationObserver; - - componentDidLoad() { - this.setupLayout(); - } - - disconnectedCallback() { - if (this.ro) this.ro.disconnect(); - if (this.mo) this.mo.disconnect(); - } - - @Watch('variant') - @Watch('hexWidth') - @Watch('hexHeight') - @Watch('gap') - onPropChange() { - this.layout(); - } - - private setupLayout() { - // Delay initial layout to next tick to ensure styles are computed - setTimeout(() => this.layout(), 0); - - this.ro = new ResizeObserver(() => this.layout()); - this.ro.observe(this.el); - - const slot = this.el.shadowRoot.querySelector('slot'); - if (slot) { - slot.addEventListener('slotchange', () => this.layout()); - } - - this.mo = new MutationObserver(() => this.layout()); - this.mo.observe(this.el, { childList: true }); - } - - private layout() { - const container = this.el.shadowRoot.querySelector('.ews-hex-honeycomb') as HTMLElement; - if (!container) return; - - const containerWidth = container.clientWidth; - if (!containerWidth) return; - - const slot = container.querySelector('slot') as HTMLSlotElement; - if (!slot) return; - - const childElements = slot.assignedElements() as HTMLElement[]; - if (childElements.length === 0) return; - - const isFlat = this.variant === 'flat'; - const w = this.hexWidth ?? (isFlat ? 83 : 72); - const h = this.hexHeight ?? (isFlat ? 72 : 83); - const gap = this.gap; - - if (!isFlat) { - // Pointy (Variant 1) - const rowOffsetTop = gap + -20; - const itemFullWidth = w + gap; - - let maxCols = Math.floor((containerWidth + gap) / itemFullWidth); - if (maxCols < 1) maxCols = 1; - - let isOffset = false; - let currentCol = 0; - let currentRow = 0; - - for (let i = 0; i < childElements.length; i++) { - const child = childElements[i]; - const colsInThisRow = isOffset ? Math.max(1, maxCols - 1) : maxCols; - - let x = currentCol * itemFullWidth; - if (isOffset) { - x += w / 2 + gap / 2; - } - - const y = currentRow * (h + rowOffsetTop); - - child.style.position = 'absolute'; - child.style.left = `${x}px`; - child.style.top = `${y}px`; - child.style.margin = '0'; - child.style.width = `${w}px`; - child.style.height = `${h}px`; - - currentCol++; - if (currentCol >= colsInThisRow) { - currentCol = 0; - isOffset = !isOffset; - currentRow++; - } - } - - let totalHeight = 0; - if (currentCol > 0) { - totalHeight = currentRow * (h + rowOffsetTop) + h; - } else { - totalHeight = (currentRow - 1) * (h + rowOffsetTop) + h; - } - this.containerHeight = `${totalHeight}px`; - } else { - // Flat (Variant 2) - const colAdvanceX = w * 0.75 + gap; - const rowAdvanceY = h + gap; - - let maxCols = Math.floor((containerWidth - w) / colAdvanceX) + 1; - if (containerWidth < w) maxCols = 1; - - let currentCol = 0; - let currentRow = 0; - let maxBottom = 0; - - for (let i = 0; i < childElements.length; i++) { - const child = childElements[i]; - - let x = currentCol * colAdvanceX; - let y = currentRow * rowAdvanceY; - - // Offset odd columns down - if (currentCol % 2 === 1) { - y += rowAdvanceY / 2; - } - - child.style.position = 'absolute'; - child.style.left = `${x}px`; - child.style.top = `${y}px`; - child.style.margin = '0'; - child.style.width = `${w}px`; - child.style.height = `${h}px`; - - const bottom = y + h; - if (bottom > maxBottom) maxBottom = bottom; - - currentCol++; - if (currentCol >= maxCols) { - currentCol = 0; - currentRow++; - } - } - - this.containerHeight = `${maxBottom}px`; - } - } - - render() { - return ( - -
- -
-
- ); - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/readme.md b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/readme.md deleted file mode 100644 index c24838d..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-grid/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# ews-hex-grid - - - - - - -## Properties - -| Property | Attribute | Description | Type | Default | -| ------------- | -------------- | -------------------------------------------- | -------------------- | ----------- | -| `customClass` | `custom-class` | Additional CSS class for the container. | `string` | `''` | -| `gap` | `gap` | Gap between hex cells in pixels. | `number` | `4` | -| `hexHeight` | `hex-height` | Height of each hex cell in pixels. | `number` | `undefined` | -| `hexWidth` | `hex-width` | Width of each hex cell in pixels. | `number` | `undefined` | -| `variant` | `variant` | Hex orientation variant: 'pointy' or 'flat'. | `"flat" \| "pointy"` | `'pointy'` | - - ----------------------------------------------- - -*Built with [StencilJS](https://stenciljs.com/)* diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.css b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.css deleted file mode 100644 index 7def295..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.css +++ /dev/null @@ -1,84 +0,0 @@ -:host { - display: block; - width: 100%; -} - -.ews-hex-shape { - position: relative; - width: 100%; - aspect-ratio: 0.866 / 1; - background-image: url("data:image/svg+xml,%3Csvg width='115' height='133' viewBox='0 0 115 133' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M115 99.1859L57.5 132.25L7.62939e-06 99.1859L7.62939e-06 33.0641L57.5 3.05176e-05L115 33.0641L115 99.1859Z' fill='%23fa0'/%3E%3Cpath d='M113.69 98.4426L57.6307 130.678L1.57149 98.4426L1.57149 33.9776L57.6307 1.74199L113.69 33.9776L113.69 98.4426Z' fill='black'/%3E%3Cpath d='M111.071 97.0671L57.6309 127.796L4.1913 97.0671L4.1913 35.6145L57.6309 4.88519L111.071 35.6145L111.071 97.0671Z' fill='%23fa0'/%3E%3C/svg%3E%0A"); - background-size: contain; - background-position: center; - background-repeat: no-repeat; - --polygon-shape: polygon(0% 25.13%, - /* top-left point */ - 50% 0%, - /* top center point */ - 100% 25.13%, - /* top-right point */ - 100% 74.87%, - /* bottom-right point */ - 50% 100%, - /* bottom center point */ - 0% 74.87% - /* bottom-left point */ - ); - - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - -} - -.ews-hex-shape.clip-content { - overflow: hidden; - clip-path: var(--polygon-shape); -} - -.ews-hex-shape.clip-content .inner-content { - --ews-hex-padding: 10px; - width: calc(100% - var(--ews-hex-padding)); - height: calc(100% - var(--ews-hex-padding)); - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - clip-path: var(--polygon-shape); -} - -.ews-hex-shape.flat-top { - aspect-ratio: 1.1547 / 1; - background-image: url("data:image/svg+xml,%3Csvg width='584' height='507' viewBox='0 0 584 507' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M145.77 507L0 253.5L145.77 -3.05176e-05H437.28L583.05 253.5L437.28 507H145.77Z' fill='%23E60003'/%3E%3Cpath d='M149.046 500.648L6.92932 253.5L149.046 6.35181H433.253L575.37 253.5L433.253 500.648H149.046Z' fill='black'/%3E%3Cpath d='M155.007 492L18 253.5L155.007 15H428.993L566 253.5L428.993 492H155.007Z' fill='%23E60003'/%3E%3C/svg%3E%0A"); - --polygon-shape: polygon(24.96% 100%, - /* 145.77/584, 507/507 */ - 0% 50%, - /* 0/584, 253.5/507 */ - 24.96% 0%, - /* 145.77/584, 0/507 */ - 74.87% 0%, - /* 437.28/584, 0/507 */ - 99.84% 50%, - /* 583.05/584, 253.5/507 */ - 74.87% 100% - /* 437.28/584, 507/507 */ - ); - -} - -.ews-hex-shape.orange { - background-image: url("data:image/svg+xml,%3Csvg width='115' height='133' viewBox='0 0 115 133' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M115 99.1859L57.5 132.25L7.62939e-06 99.1859L7.62939e-06 33.0641L57.5 3.05176e-05L115 33.0641L115 99.1859Z' fill='%23fa0'/%3E%3Cpath d='M113.69 98.4426L57.6307 130.678L1.57149 98.4426L1.57149 33.9776L57.6307 1.74199L113.69 33.9776L113.69 98.4426Z' fill='black'/%3E%3Cpath d='M111.071 97.0671L57.6309 127.796L4.1913 97.0671L4.1913 35.6145L57.6309 4.88519L111.071 35.6145L111.071 97.0671Z' fill='%23fa0'/%3E%3C/svg%3E%0A"); -} - -.ews-hex-shape.orange.flat-top { - background-image: url("data:image/svg+xml,%3Csvg width='584' height='507' viewBox='0 0 584 507' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M145.77 507L0 253.5L145.77 -3.05176e-05H437.28L583.05 253.5L437.28 507H145.77Z' fill='%23fa0'/%3E%3Cpath d='M149.046 500.648L6.92932 253.5L149.046 6.35181H433.253L575.37 253.5L433.253 500.648H149.046Z' fill='black'/%3E%3Cpath d='M155.007 492L18 253.5L155.007 15H428.993L566 253.5L428.993 492H155.007Z' fill='%23fa0'/%3E%3C/svg%3E%0A"); -} - -.ews-hex-shape.red { - background-image: url("data:image/svg+xml,%3Csvg width='115' height='133' viewBox='0 0 115 133' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M115 99.1859L57.5 132.25L7.62939e-06 99.1859L7.62939e-06 33.0641L57.5 3.05176e-05L115 33.0641L115 99.1859Z' fill='%23E60003'/%3E%3Cpath d='M113.69 98.4426L57.6307 130.678L1.57149 98.4426L1.57149 33.9776L57.6307 1.74199L113.69 33.9776L113.69 98.4426Z' fill='black'/%3E%3Cpath d='M111.071 97.0671L57.6309 127.796L4.1913 97.0671L4.1913 35.6145L57.6309 4.88519L111.071 35.6145L111.071 97.0671Z' fill='%23E60003'/%3E%3C/svg%3E%0A"); -} - -.ews-hex-shape.red.flat-top { - background-image: url("data:image/svg+xml,%3Csvg width='584' height='507' viewBox='0 0 584 507' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M145.77 507L0 253.5L145.77 -3.05176e-05H437.28L583.05 253.5L437.28 507H145.77Z' fill='%23E60003'/%3E%3Cpath d='M149.046 500.648L6.92932 253.5L149.046 6.35181H433.253L575.37 253.5L433.253 500.648H149.046Z' fill='black'/%3E%3Cpath d='M155.007 492L18 253.5L155.007 15H428.993L566 253.5L428.993 492H155.007Z' fill='%23E60003'/%3E%3C/svg%3E%0A"); -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.tsx deleted file mode 100644 index e937578..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/ews-hex-shape.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Component, Host, h, Prop } from '@stencil/core'; - -@Component({ - tag: 'ews-hex-shape', - styleUrl: 'ews-hex-shape.css', - shadow: true, -}) -export class EwsHexShape { - /** - * Additional CSS classes for the component. - */ - @Prop() customClass: string = ''; - - /** - * The color variant of the hex shape. - */ - @Prop() color: string = 'orange'; - - /** - * Whether the hex shape has a flat top. - */ - @Prop() flatTop: boolean = true; - - /** - * Whether to clip content within the hex shape. - */ - @Prop() clipContent: boolean = false; - - /** - * The padding inside the hex shape for content. - */ - @Prop() paddingContent: number = 10; - - render() { - const classes = { - 'ews-hex-shape': true, - 'flat-top': this.flatTop, - 'clip-content': this.clipContent, - [this.color]: !!this.color, - [this.customClass]: !!this.customClass, - }; - - return ( - -
-
- -
-
-
- ); - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/readme.md b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/readme.md deleted file mode 100644 index 524b245..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-hex-shape/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# ews-hex-shape - - - - - - -## Properties - -| Property | Attribute | Description | Type | Default | -| ---------------- | ----------------- | --------------------------------------------- | --------- | ---------- | -| `clipContent` | `clip-content` | Whether to clip content within the hex shape. | `boolean` | `false` | -| `color` | `color` | The color variant of the hex shape. | `string` | `'orange'` | -| `customClass` | `custom-class` | Additional CSS classes for the component. | `string` | `''` | -| `flatTop` | `flat-top` | Whether the hex shape has a flat top. | `boolean` | `true` | -| `paddingContent` | `padding-content` | The padding inside the hex shape for content. | `number` | `10` | - - ----------------------------------------------- - -*Built with [StencilJS](https://stenciljs.com/)* diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.css b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.css deleted file mode 100644 index 4932f18..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.css +++ /dev/null @@ -1,276 +0,0 @@ -:host { - display: block; -} - -.ews-rib-layout { - display: inline-flex; - height: auto; - justify-content: center; - gap: 1rem; - width: 100%; - padding-left: 1rem; - padding-right: 1rem; - position: relative; - box-sizing: border-box; -} - -.ews-rib-layout__branch { - position: relative; - padding-top: 1rem; - padding-bottom: 1rem; - display: flex; - flex-direction: column; - gap: 1rem; -} - -@media (min-width: 1024px) { - .ews-rib-layout__branch { - padding-top: 2.5rem; - padding-bottom: 2.5rem; - } -} - -.ews-rib-layout__spine { - position: absolute; - height: auto; - left: 50%; - top: 0; - bottom: 0; - width: 0.25rem; - transform: translateX(-50%); - z-index: 0; - background-color: var(--orange, #FC8416); -} - -.ews-rib-layout__grid { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - position: relative; - z-index: 10; -} - -.ews-rib-layout__node { - display: flex; - align-items: center; - position: relative; - text-decoration: none; - color: inherit; -} - -.ews-rib-layout__node--left { - flex-grow: 1; - justify-content: flex-end; - padding-right: 0; - grid-column-start: 1; -} - -.ews-rib-layout__node--right { - justify-content: flex-start; - padding-left: 0; - grid-column-start: 2; - width: auto; -} - -.ews-rib-layout__node-content { - position: relative; - display: flex; -} - -.ews-rib-layout__connector-wrapper { - width: 6rem; - display: flex; - position: relative; -} - -.ews-rib-layout__connector-wrapper--left { - justify-content: flex-end; -} - -.ews-rib-layout__connector-wrapper--right { - justify-content: flex-start; -} - -.ews-rib-layout__connector-line { - height: 2px; - width: 6rem; - z-index: 0; - background-color: var(--orange, #FC8416); -} - -.ews-rib-layout__connector-text { - font-weight: 700; - font-size: 0.75rem; - line-height: 1rem; - text-transform: uppercase; - position: absolute; - top: 0.25rem; - z-index: 10; - color: var(--orange, #FC8416); -} - -.ews-rib-layout__connector-text--left { - left: 0.5rem; - text-align: left; -} - -.ews-rib-layout__connector-text--right { - right: 0.5rem; - text-align: right; -} - -.ews-rib-node { - --bg-url: url('data:image/svg+xml,'); - background-image: var(--bg-url); - background-size: contain; - background-position: center; - background-repeat: no-repeat; - position: relative; - z-index: 1; - width: 6rem; - height: 1.5rem; - display: flex; - flex-grow: 1; - flex-direction: column; - align-items: center; - justify-content: center; - margin-top: 1.5rem; - margin-right: -0.5rem; -} - -.parent-node { - transform: translateX(0px); - rotate: -21deg !important; - transition: all 0.2s ease-in-out; - margin-left: 0px; - z-index: 1; -} - -.parent-node.flip { - margin-left: -0.5rem; - rotate: 21deg !important; -} - -.ews-rib-layout__node--left:hover .parent-node { - cursor: pointer; - transform: translateX(-20px); -} - -.ews-rib-node.danger { - --bg-url: url('data:image/svg+xml,'); -} - -.ews-rib-node.flip { - --bg-url: url('data:image/svg+xml,'); -} - -.ews-rib-layout__node--right:hover .parent-node { - cursor: pointer; - transform: translateX(20px); -} - -.ews-rib-node.flip.danger { - --bg-url: url('data:image/svg+xml,'); -} - -.ews-rib-node.slide-fade-in { - opacity: 0; - transform: translateX(-20px); - animation: slideFadeIn 0.5s ease-in-out forwards; -} - -.ews-rib-node-flip.slide-fade-in { - opacity: 0; - transform: translateX(20px); - animation: slideFadeInFlip 0.5s ease-in-out forwards; -} - -.slide-fade-in { - animation: slideFadeIn 0.5s ease-in-out forwards; -} - -@keyframes slideFadeIn { - 0% { - opacity: 0; - transform: translateX(-20px); - } - - 50% { - opacity: 1; - transform: translateX(-15px); - } - - 100% { - opacity: 1; - transform: translateX(0); - } -} - -.slide-fade-in-flip { - animation: slideFadeInFlip 0.5s ease-in-out forwards; -} - -@keyframes slideFadeInFlip { - 0% { - opacity: 0; - transform: translateX(20px); - } - - 50% { - opacity: 1; - transform: translateX(15px); - } - - 100% { - opacity: 1; - transform: translateX(0); - } -} - -.fade-in { - opacity: 0; - animation: fadeIn 0.5s ease-in-out forwards; -} - -@keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -.animation-delay-5 { - animation-delay: 500ms; -} - -.line-node { - width: 0%; - animation: slideWidth 0.5s ease-in-out forwards; -} - -@keyframes slideWidth { - 0% { - width: 0%; - } - - 100% { - width: 6rem; - } -} - -.line-central { - height: 0%; - animation: slideHeight 0.5s ease-in-out forwards; -} - -@keyframes slideHeight { - 0% { - height: 0%; - } - - 100% { - height: 100%; - } -} \ No newline at end of file diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.tsx deleted file mode 100644 index 8019469..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/ews-rib-layout.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import { Component, Host, h, Prop, State, Listen } from '@stencil/core'; - -@Component({ - tag: 'ews-rib-layout', - styleUrl: 'ews-rib-layout.css', - shadow: true, -}) -export class EwsRibLayout { - /** - * Array of items to be displayed in the rib cage layout. - */ - @Prop() items: any[] = []; - - /** - * Function to get the href for a node. If provided, nodes will be rendered as
tags. - */ - @Prop() getHref?: (item: any) => string; - - /** - * Optional renderer function for the node content. - */ - @Prop() nodeRenderer?: (item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) => any; - - /** - * Optional renderer function for the connector content. - */ - @Prop() connectorRenderer?: (item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) => any; - - /** - * Maximum number of branches to display. If not provided, it defaults to 5 (responsive). - */ - @Prop() maxBranches?: number; - - @State() branchCount: number = 5; - @State() windowWidth: number = 0; - - componentWillLoad() { - this.handleResize(); - } - - @Listen('resize', { target: 'window' }) - handleResize() { - this.windowWidth = typeof window !== 'undefined' ? window.innerWidth : 0; - this.branchCount = this.getBranchCount(this.windowWidth); - } - - private getBranchCount(width: number): number { - let count = 5; - if (width < 768) count = 1; - else if (width < 1024) count = 2; - else if (width < 1300) count = 4; - - if (this.maxBranches && this.maxBranches > 0) { - return Math.min(count, this.maxBranches); - } - return count; - } - - private get chunkedItems() { - if (!this.items || this.items.length === 0) return []; - const count = Math.max(1, this.branchCount); - const result = []; - const itemsPerBranch = Math.ceil(this.items.length / count); - - for (let i = 0; i < this.items.length; i += itemsPerBranch) { - result.push(this.items.slice(i, i + itemsPerBranch)); - } - return result; - } - - private renderNodeContent(item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) { - if (this.nodeRenderer) { - const content = this.nodeRenderer(item, props); - - // Handle HTMLElement return (common in plain JS) - if (content instanceof HTMLElement) { - return
{ - if (el) { - el.innerHTML = ''; - el.appendChild(content); - } - }}>
; - } - - // Handle string return (simple HTML) - if (typeof content === 'string') { - return
; - } - - return content; - } - - // Default rendering if no renderer is provided - const isDanger = item.type === 'danger'; - return ( -
- {item.label || item.name || item.value || 'Node'} -
- ); - } - - private renderConnectorContent(item: any, props: { side: 'left' | 'right'; branchIndex: number; index: number; delay: number }) { - if (this.connectorRenderer) { - const content = this.connectorRenderer(item, props); - - const renderWrapper = (inner) => ( -
- {inner} -
- ); - - if (content instanceof HTMLElement) { - return renderWrapper(
{ - if (el) { - el.innerHTML = ''; - el.appendChild(content); - } - }}>
); - } - - if (typeof content === 'string') { - return renderWrapper(
); - } - - return renderWrapper(content); - } - return null; - } - - render() { - const chunked = this.chunkedItems; - - return ( - -
- {chunked.map((branchItems, branchIndex) => ( -
- {/* Central Spine */} -
- -
- {branchItems.map((item, index) => { - const side = index % 2 === 0 ? 'left' : 'right'; - const delay = (branchIndex + 1) * (index + 1) * 10; - const href = this.getHref?.(item); - const Tag = href ? 'a' : 'div'; - - return ( - - {side === 'left' ? ( - [ -
- {this.renderNodeContent(item, { side, branchIndex, index, delay })} -
, -
-
- {this.renderConnectorContent(item, { side, branchIndex, index, delay })} -
, - ] - ) : ( - [ -
-
- {this.renderConnectorContent(item, { side, branchIndex, index, delay })} -
, -
- {this.renderNodeContent(item, { side, branchIndex, index, delay })} -
, - ] - )} -
- ); - })} -
-
- ))} -
-
- ); - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/readme.md b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/readme.md deleted file mode 100644 index d1ce473..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-rib-layout/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# ews-rib-layout - - - - - - -## Properties - -| Property | Attribute | Description | Type | Default | -| ------------------- | -------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------- | -| `connectorRenderer` | -- | Optional renderer function for the connector content. | `(item: any, props: { side: "left" \| "right"; branchIndex: number; index: number; delay: number; }) => any` | `undefined` | -| `getHref` | -- | Function to get the href for a node. If provided, nodes will be rendered as
tags. | `(item: any) => string` | `undefined` | -| `items` | -- | Array of items to be displayed in the rib cage layout. | `any[]` | `[]` | -| `maxBranches` | `max-branches` | Maximum number of branches to display. If not provided, it defaults to 5 (responsive). | `number` | `undefined` | -| `nodeRenderer` | -- | Optional renderer function for the node content. | `(item: any, props: { side: "left" \| "right"; branchIndex: number; index: number; delay: number; }) => any` | `undefined` | - - ----------------------------------------------- - -*Built with [StencilJS](https://stenciljs.com/)* diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.css b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.css deleted file mode 100644 index caf21d6..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.css +++ /dev/null @@ -1,219 +0,0 @@ -:host { - display: block; -} - -.host-wrapper { - overflow: hidden; - width: 100%; - height: 100%; -} - -/* Strip Bar Styles */ -.ews-stripe-wrapper { - width: max(200vw, 2000px); - height: 30px; - overflow: hidden; - white-space: nowrap; - margin: 0px !important; - padding: 0px !important; - display: flex; -} - -.ews-stripe-wrapper.vertical { - height: 100%; - width: 30px; - display: flex; - flex-direction: column; -} - -.ews-stripe-bar { - width: max(200vw, 2000px); - height: 100%; - display: inline-block; - flex-shrink: 0; - margin-right: 0px !important; - margin-left: 0px !important; - --ews-stripe-color: var(--orange, #fa0); - --ews-stripe-size: 15px; - --ews-glow-color: rgba(255, 94, 0, 0.8); - --ews-glow-size: 3px; - background-image: repeating-linear-gradient(-45deg, - var(--ews-glow-color) calc(-1 * var(--ews-glow-size)), - var(--ews-stripe-color) 0, - var(--ews-stripe-color) calc(var(--ews-stripe-size) - var(--ews-glow-size) / 2), - var(--ews-glow-color) calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(2 * var(--ews-stripe-size)), - var(--ews-glow-color) calc(2 * var(--ews-stripe-size) - var(--ews-glow-size))); - background-size: 47px 47px; -} - -.ews-stripe-bar.red { - --ews-stripe-color: var(--red, #f23); - --ews-stripe-size: 15px; - --ews-glow-color: rgba(255, 17, 0, 0.8); - --ews-glow-size: 3px; -} - -.ews-stripe-bar.vertical { - width: 100%; - height: 100%; -} - -/* Include the legacy combined classes just in case */ -.ews-stripe-bar-red { - width: max(200vw, 2000px); - height: 30px; - display: inline-block; - flex-shrink: 0; - --ews-stripe-color: var(--red, #f23); - --ews-stripe-size: 15px; - --ews-glow-color: rgba(255, 17, 0, 0.8); - --ews-glow-size: 3px; - background-image: repeating-linear-gradient(-45deg, - var(--ews-glow-color) calc(-1 * var(--ews-glow-size)), - var(--ews-stripe-color) 0, - var(--ews-stripe-color) calc(var(--ews-stripe-size) - var(--ews-glow-size) / 2), - var(--ews-glow-color) calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(2 * var(--ews-stripe-size)), - var(--ews-glow-color) calc(2 * var(--ews-stripe-size) - var(--ews-glow-size))); -} - -.ews-stripe-bar-vertical { - height: max(2000px, 200vh); - transform: translate3d(0, 0, 0); - --ews-stripe-color: var(--orange, #fa0); - --ews-stripe-size: 15px; - --ews-glow-color: rgba(255, 94, 0, 0.8); - --ews-glow-size: 3px; - background-image: repeating-linear-gradient(45deg, - var(--ews-glow-color) calc(-1 * var(--ews-glow-size)), - var(--ews-stripe-color) 0, - var(--ews-stripe-color) calc(var(--ews-stripe-size) - var(--ews-glow-size) / 2), - var(--ews-glow-color) calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(2 * var(--ews-stripe-size)), - var(--ews-glow-color) calc(2 * var(--ews-stripe-size) - var(--ews-glow-size))); -} - -.ews-stripe-bar-red-vertical { - height: max(2000px, 200vh); - transform: translate3d(0, 0, 0); - --ews-stripe-color: var(--red, #f23); - --ews-stripe-size: 15px; - --ews-glow-color: rgba(255, 17, 0, 0.8); - --ews-glow-size: 3px; - background-image: repeating-linear-gradient(45deg, - var(--ews-glow-color) calc(-1 * var(--ews-glow-size)), - var(--ews-stripe-color) 0, - var(--ews-stripe-color) calc(var(--ews-stripe-size) - var(--ews-glow-size) / 2), - var(--ews-glow-color) calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(var(--ews-stripe-size) + var(--ews-glow-size) / 2), - transparent calc(2 * var(--ews-stripe-size)), - var(--ews-glow-color) calc(2 * var(--ews-stripe-size) - var(--ews-glow-size))); -} - -.ews-stripe-wrapper-vertical { - height: max(200vh, 2000px); - overflow: hidden; - white-space: nowrap; - margin: 0px !important; - padding: 0px !important; - display: flex; -} - -.ews-stripe { - background-color: black; - width: 100vw; - border-top: 1px solid var(--red, #f23); - border-bottom: 1px solid var(--red, #f23); - position: fixed; -} - -/* Animations */ -@keyframes loopStripVertical { - from { - background-position: 0px 0px; - } - - to { - background-position: 0px calc(-42.4264px * 47); - } -} - -@keyframes stripeAnimationVertical { - from { - background-position: 0px 0px; - } - - to { - background-position: 0px calc(-42.4264px * 47); - } -} - -@keyframes stripeAnimation { - from { - background-position: 0px 0px; - } - - to { - background-position: calc(-42.4264px * 47) 0px; - } -} - -@keyframes loopStrip { - from { - background-position: 0px 0px; - } - - to { - background-position: calc(-42.4264px * 47) 0px; - } -} - -.loop-stripe-vertical { - animation: stripeAnimationVertical 15s infinite linear; -} - -.loop-stripe-vertical.reverse { - animation: stripeAnimationVertical 15s infinite linear reverse; -} - -.loop-stripe-vertical-reverse { - animation: loopStripVertical 15s infinite linear reverse; -} - -.stripe-animation { - animation: stripeAnimation 10s infinite linear; -} - -.stripe-animation-reverse { - animation: stripeAnimation 10s infinite linear reverse; -} - -.loop-stripe { - animation: stripeAnimation infinite linear; - animation-duration: 10s; -} - -.loop-stripe.reverse { - animation: loopStrip infinite linear reverse; -} - -.loop-stripe-reverse { - animation: loopStrip infinite linear reverse; - animation-duration: 10s; -} - -.anim-duration-5 { - animation-duration: 5s !important; -} - -.anim-duration-10 { - animation-duration: 10s !important; -} - -.anim-duration-20 { - animation-duration: 20s !important; -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.tsx deleted file mode 100644 index ee1ec1c..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/ews-stripe-bar.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { Component, Host, h, Prop } from '@stencil/core'; - -@Component({ - tag: 'ews-stripe-bar', - styleUrl: 'ews-stripe-bar.css', - shadow: true, -}) -export class EwsStripeBar { - @Prop() color: string = ''; - @Prop() orientation: string = ''; - @Prop() loop: boolean = false; - @Prop() reverse: boolean = false; - @Prop() duration: number = 10; - @Prop() size: string = '30px'; - - private getStripeClasses() { - const loopStr = this.loop ? 'loop-stripe' : ''; - const orientationStr = this.orientation ? `-${this.orientation}` : ''; - const combinedStr = loopStr + orientationStr; - - return [ - 'ews-stripe-bar', - this.color, - this.orientation, - combinedStr, - this.reverse ? 'reverse' : '', - `anim-duration-${this.duration}` - ].filter(c => c.trim() !== '').join(' '); - } - - render() { - return ( - -
-
-
-
-
- -
-
- ); - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/readme.md b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/readme.md deleted file mode 100644 index e71d4c9..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/ews-stripe-bar/readme.md +++ /dev/null @@ -1,22 +0,0 @@ -# ews-stripe-bar - - - - - - -## Properties - -| Property | Attribute | Description | Type | Default | -| ------------- | ------------- | ----------- | --------- | -------- | -| `color` | `color` | | `string` | `''` | -| `duration` | `duration` | | `number` | `10` | -| `loop` | `loop` | | `boolean` | `false` | -| `orientation` | `orientation` | | `string` | `''` | -| `reverse` | `reverse` | | `boolean` | `false` | -| `size` | `size` | | `string` | `'30px'` | - - ----------------------------------------------- - -*Built with [StencilJS](https://stenciljs.com/)* diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.cmp.test.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.cmp.test.tsx deleted file mode 100644 index a3a2076..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.cmp.test.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { render, h, describe, it, expect } from '@stencil/vitest'; - -describe('my-component', () => { - it('renders', async () => { - const { root } = await render(); - await expect(root).toEqualHtml(` - - -
- Hello, World! I'm -
-
-
- `); - }); - - it('renders with values', async () => { - const { root } = await render( - , - ); - await expect(root).toEqualHtml(` - - -
- Hello, World! I'm Stencil 'Don't call me a framework' JS -
-
-
- `); - }); -}); diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.css b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.css deleted file mode 100644 index 5d4e87f..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.css +++ /dev/null @@ -1,3 +0,0 @@ -:host { - display: block; -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.tsx b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.tsx deleted file mode 100644 index 56d51d9..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/my-component.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Component, Prop, h } from '@stencil/core'; -import { format } from '../../utils/utils'; - -@Component({ - tag: 'my-component', - styleUrl: 'my-component.css', - shadow: true, -}) -export class MyComponent { - /** - * The first name - */ - @Prop() first: string; - - /** - * The middle name - */ - @Prop() middle: string; - - /** - * The last name - */ - @Prop() last: string; - - private getText(): string { - return format(this.first, this.middle, this.last); - } - - render() { - return
Hello, World! I'm {this.getText()}
; - } -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/readme.md b/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/readme.md deleted file mode 100644 index 06b5864..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/components/my-component/readme.md +++ /dev/null @@ -1,19 +0,0 @@ -# my-component - - - - - - -## Properties - -| Property | Attribute | Description | Type | Default | -| -------- | --------- | --------------- | -------- | ----------- | -| `first` | `first` | The first name | `string` | `undefined` | -| `last` | `last` | The last name | `string` | `undefined` | -| `middle` | `middle` | The middle name | `string` | `undefined` | - - ----------------------------------------------- - -*Built with [StencilJS](https://stenciljs.com/)* diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/index.html b/frontend/src/pages/test/ews-component-master/ews-component-master/src/index.html deleted file mode 100644 index 5010d57..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/index.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - Stencil Component Starter - - - - - - - - -

EWS Component Examples

- - - - -
-

ews-card

-

A collapsible card component with customizable colors and styling.

-
-
- -
Red Card Header
-
This is the content of a red card. Click the header to toggle.
-
- Red color -
-
- -
Orange Card Header
-
This is the content of an orange card.
-
- Orange color -
-
- -
- -
-

WARNING

-
-
-
-
- WARNING CONTENT NEED YOUR ATENTION -
-
-
- -
-

WARNING

-
-
-
- Custom -
-
- -
- -
-

DANGER

-
-
-
-
- DANGER CONTENT NEED YOUR ATENTION -
-
-
- -
-

DANGER

-
-
-
- Custom -
-
-
- - -
-

ews-hex-shape

-

A hexagonal shape component with various configuration options.

-
-
- -
Blue Hex
-
- Default -
-
- -
Pointy Top
-
- Pointy top -
- -
- - Red -
- -
- -
- Clipped Content - This text is clipped within the hex boundary -
-
- Clipped content -
- -
-
- - -
-

ews-stripe-bar

-

An animated stripe bar component with various customization options.

-
-
- - Default -
-
- - Red -
- -
- - Animated -
- -
- - Reverse -
- -
- -
-
- - Default -
-
- - Red -
- -
- - Animated -
- -
- - Reverse -
- -
-
-
-

ews-hex-grid

- -
-
- -
- Cell 1 -
-
- Cell 2 -
-
- Cell 3 -
-
- Cell 4 -
-
- Cell 5 -
-
- Cell 6 -
-
- Cell 7 -
-
- Cell 8 -
-
- Cell 9 -
-
- Cell 10 -
-
-
- -
-
- - - -
-

ews-rib-layout

-

A complex rib cage layout with responsive branching and animated nodes.

-
- -
-
- - - - - \ No newline at end of file diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/index.ts b/frontend/src/pages/test/ews-component-master/ews-component-master/src/index.ts deleted file mode 100644 index fc07dff..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @fileoverview entry point for your component library - * - * This is the entry point for your component library. Use this file to export utilities, - * constants or data structure that accompany your components. - * - * DO NOT use this file to export your components. Instead, use the recommended approaches - * to consume components of this package as outlined in the `README.md`. - */ - -export { format } from './utils/utils'; -export type * from './components.d.ts'; diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.ts b/frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.ts deleted file mode 100644 index b1a0b3d..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function format(first?: string, middle?: string, last?: string): string { - return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : ''); -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.unit.test.ts b/frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.unit.test.ts deleted file mode 100644 index 4cc0dde..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/src/utils/utils.unit.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { format } from './utils'; - -describe('format', () => { - it('returns empty string for no names defined', () => { - expect(format(undefined, undefined, undefined)).toEqual(''); - }); - - it('formats just first names', () => { - expect(format('Joseph', undefined, undefined)).toEqual('Joseph'); - }); - - it('formats first and last names', () => { - expect(format('Joseph', undefined, 'Publique')).toEqual('Joseph Publique'); - }); - - it('formats first, middle and last names', () => { - expect(format('Joseph', 'Quincy', 'Publique')).toEqual('Joseph Quincy Publique'); - }); -}); diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/stencil.config.ts b/frontend/src/pages/test/ews-component-master/ews-component-master/stencil.config.ts deleted file mode 100644 index f90bca4..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/stencil.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Config } from '@stencil/core'; - -export const config: Config = { - namespace: 'ews-component', - outputTargets: [ - { - type: 'dist', - esmLoaderPath: '../loader', - }, - { - type: 'dist-custom-elements', - customElementsExportBehavior: 'auto-define-custom-elements', - externalRuntime: false, - }, - { - type: 'docs-readme', - }, - { - type: 'www', - serviceWorker: null, // disable service workers - }, - ], -}; diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/tsconfig.json b/frontend/src/pages/test/ews-component-master/ews-component-master/tsconfig.json deleted file mode 100644 index a3943d2..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "allowUnreachableCode": false, - "declaration": false, - "experimentalDecorators": true, - "lib": [ - "dom", - "es2022" - ], - "moduleResolution": "bundler", - "module": "esnext", - "target": "es2022", - "noUnusedLocals": true, - "noUnusedParameters": true, - "jsx": "react", - "jsxFactory": "h", - "jsxFragmentFactory": "h.Fragment", - "types": [ - "@stencil/vitest/globals" - ] - }, - "include": [ - "src" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/vitest-setup.ts b/frontend/src/pages/test/ews-component-master/ews-component-master/vitest-setup.ts deleted file mode 100644 index 5a42ab3..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/vitest-setup.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Load Stencil components for browser tests -await import('./dist/ews-component/ews-component.esm.js'); - -export { }; diff --git a/frontend/src/pages/test/ews-component-master/ews-component-master/vitest.config.ts b/frontend/src/pages/test/ews-component-master/ews-component-master/vitest.config.ts deleted file mode 100644 index 1a41f9d..0000000 --- a/frontend/src/pages/test/ews-component-master/ews-component-master/vitest.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { defineVitestConfig } from '@stencil/vitest/config'; -import { playwright } from '@vitest/browser-playwright'; - -export default defineVitestConfig({ - stencilConfig: './stencil.config.ts', - test: { - projects: [ - // Unit tests - stencil environment for component logic - { - test: { - name: 'unit', - include: ['src/**/*.unit.test.{ts,tsx}'], - environment: 'stencil', - }, - }, - // Component browser tests - real browser via Playwright - { - test: { - name: 'browser', - include: ['src/**/*.cmp.test.{ts,tsx}'], - setupFiles: ['./vitest-setup.ts'], - browser: { - enabled: true, - provider: playwright(), - headless: true, - instances: [{ browser: 'chromium' }], - }, - }, - }, - ], - }, -}); diff --git a/frontend/src/pages/test/ews-component-master/spectrum.txt b/frontend/src/pages/test/ews-component-master/spectrum.txt deleted file mode 100644 index cda93c8..0000000 --- a/frontend/src/pages/test/ews-component-master/spectrum.txt +++ /dev/null @@ -1,8192 +0,0 @@ -Frequency (Hz) Level (dB) -2.929688 -57.915680 -5.859375 -59.855648 -8.789062 -47.995380 -11.718750 -51.389702 -14.648438 -55.270847 -17.578125 -55.514530 -20.507812 -54.523518 -23.437500 -57.253269 -26.367188 -53.492847 -29.296875 -52.677933 -32.226562 -50.607071 -35.156250 -44.596287 -38.085938 -42.611092 -41.015625 -39.624172 -43.945312 -41.247078 -46.875000 -39.998249 -49.804688 -37.433273 -52.734375 -36.052925 -55.664062 -29.868616 -58.593750 -30.698729 -61.523438 -35.753933 -64.453125 -41.575623 -67.382812 -44.595661 -70.312500 -43.830276 -73.242188 -48.295738 -76.171875 -51.222321 -79.101562 -50.521946 -82.031250 -50.148617 -84.960938 -47.899082 -87.890625 -49.341373 -90.820312 -45.569115 -93.750000 -45.228172 -96.679688 -35.815296 -99.609375 -41.432812 -102.539062 -41.395233 -105.468750 -36.695324 -108.398438 -35.800014 -111.328125 -29.768944 -114.257812 -28.152657 -117.187500 -27.077057 -120.117188 -33.812153 -123.046875 -40.180275 -125.976562 -47.024574 -128.906250 -46.154594 -131.835938 -44.805511 -134.765625 -44.481102 -137.695312 -45.519924 -140.625000 -46.086098 -143.554688 -47.782097 -146.484375 -43.312428 -149.414062 -42.983955 -152.343750 -50.287933 -155.273438 -50.603851 -158.203125 -52.964291 -161.132812 -45.923717 -164.062500 -42.429279 -166.992188 -47.781376 -169.921875 -50.980686 -172.851562 -41.455647 -175.781250 -39.100872 -178.710938 -42.550518 -181.640625 -49.926342 -184.570312 -53.742882 -187.500000 -53.136135 -190.429688 -52.467499 -193.359375 -46.583027 -196.289062 -46.852390 -199.218750 -48.453941 -202.148438 -58.335434 -205.078125 -56.190132 -208.007812 -55.905888 -210.937500 -57.790020 -213.867188 -57.828075 -216.796875 -55.437355 -219.726562 -47.882854 -222.656250 -44.577599 -225.585938 -57.584282 -228.515625 -50.921268 -231.445312 -50.043037 -234.375000 -57.121571 -237.304688 -55.412289 -240.234375 -58.696178 -243.164062 -57.412998 -246.093750 -61.899830 -249.023438 -62.127758 -251.953125 -65.232307 -254.882812 -58.498589 -257.812500 -50.851517 -260.742188 -48.135990 -263.671875 -50.691376 -266.601562 -57.261650 -269.531250 -53.469315 -272.460938 -56.742100 -275.390625 -53.344093 -278.320312 -54.716614 -281.250000 -62.747227 -284.179688 -54.757477 -287.109375 -52.318459 -290.039062 -58.103165 -292.968750 -56.792812 -295.898438 -47.985256 -298.828125 -47.273289 -301.757812 -55.570995 -304.687500 -64.162109 -307.617188 -57.001339 -310.546875 -58.210377 -313.476562 -58.557613 -316.406250 -57.700447 -319.335938 -62.215931 -322.265625 -60.779396 -325.195312 -55.834774 -328.125000 -51.992977 -331.054688 -44.198471 -333.984375 -50.570450 -336.914062 -51.822041 -339.843750 -54.769344 -342.773438 -55.410980 -345.703125 -48.167339 -348.632812 -51.041809 -351.562500 -50.857979 -354.492188 -48.001637 -357.421875 -44.919514 -360.351562 -49.447060 -363.281250 -53.099884 -366.210938 -59.905720 -369.140625 -58.467583 -372.070312 -60.016079 -375.000000 -59.605309 -377.929688 -53.505371 -380.859375 -53.202896 -383.789062 -51.085415 -386.718750 -52.574116 -389.648438 -51.021198 -392.578125 -50.143272 -395.507812 -49.112778 -398.437500 -57.341969 -401.367188 -59.637489 -404.296875 -57.136684 -407.226562 -54.357864 -410.156250 -59.940025 -413.085938 -57.320820 -416.015625 -59.536850 -418.945312 -70.963539 -421.875000 -64.257210 -424.804688 -57.296356 -427.734375 -60.193394 -430.664062 -56.504097 -433.593750 -49.957138 -436.523438 -43.398563 -439.453125 -41.003963 -442.382812 -45.686275 -445.312500 -46.144901 -448.242188 -50.903500 -451.171875 -59.631527 -454.101562 -65.343437 -457.031250 -66.580276 -459.960938 -65.597191 -462.890625 -58.830631 -465.820312 -50.317200 -468.750000 -46.296307 -471.679688 -54.108768 -474.609375 -56.589352 -477.539062 -56.903572 -480.468750 -62.613850 -483.398438 -61.899837 -486.328125 -56.212021 -489.257812 -53.368294 -492.187500 -51.934834 -495.117188 -48.574127 -498.046875 -42.480141 -500.976562 -50.555183 -503.906250 -54.345707 -506.835938 -56.468761 -509.765625 -59.744850 -512.695312 -59.051479 -515.625000 -59.937874 -518.554688 -53.787682 -521.484375 -54.251095 -524.414062 -42.837475 -527.343750 -41.277527 -530.273438 -43.632214 -533.203125 -48.601162 -536.132812 -55.794312 -539.062500 -62.589787 -541.992188 -63.041313 -544.921875 -63.335686 -547.851562 -61.792789 -550.781250 -61.163433 -553.710938 -56.390884 -556.640625 -59.196518 -559.570312 -60.085773 -562.500000 -64.097351 -565.429688 -62.753384 -568.359375 -65.065895 -571.289062 -64.475822 -574.218750 -62.669865 -577.148438 -65.586296 -580.078125 -65.874222 -583.007812 -64.183495 -585.937500 -61.615623 -588.867188 -56.496040 -591.796875 -61.777798 -594.726562 -65.795067 -597.656250 -66.464127 -600.585938 -64.048500 -603.515625 -66.086334 -606.445312 -63.679291 -609.375000 -65.502045 -612.304688 -71.405357 -615.234375 -66.672241 -618.164062 -67.101730 -621.093750 -64.276421 -624.023438 -65.011353 -626.953125 -68.692177 -629.882812 -66.047951 -632.812500 -69.516098 -635.742188 -68.252792 -638.671875 -68.574852 -641.601562 -64.919182 -644.531250 -65.580475 -647.460938 -65.121071 -650.390625 -60.099403 -653.320312 -66.003975 -656.250000 -61.873672 -659.179688 -57.587280 -662.109375 -60.241371 -665.039062 -58.317616 -667.968750 -62.253887 -670.898438 -70.539276 -673.828125 -73.847916 -676.757812 -68.505379 -679.687500 -64.662308 -682.617188 -67.946426 -685.546875 -72.282852 -688.476562 -64.882584 -691.406250 -63.547176 -694.335938 -64.825768 -697.265625 -60.878162 -700.195312 -62.181984 -703.125000 -56.180733 -706.054688 -60.963692 -708.984375 -64.306946 -711.914062 -65.287033 -714.843750 -63.910904 -717.773438 -64.885849 -720.703125 -67.566803 -723.632812 -71.659119 -726.562500 -73.144394 -729.492188 -66.078568 -732.421875 -69.898712 -735.351562 -71.877724 -738.281250 -67.337395 -741.210938 -67.700279 -744.140625 -70.171997 -747.070312 -68.269547 -750.000000 -71.184769 -752.929688 -70.392548 -755.859375 -70.588959 -758.789062 -69.052513 -761.718750 -76.365646 -764.648438 -75.551750 -767.578125 -70.657997 -770.507812 -65.835480 -773.437500 -66.537491 -776.367188 -60.564648 -779.296875 -59.800377 -782.226562 -54.657238 -785.156250 -47.644783 -788.085938 -63.802990 -791.015625 -57.545536 -793.945312 -51.661327 -796.875000 -56.851917 -799.804688 -63.838684 -802.734375 -71.654564 -805.664062 -72.604294 -808.593750 -72.837547 -811.523438 -70.612862 -814.453125 -68.538696 -817.382812 -68.239983 -820.312500 -65.673103 -823.242188 -59.864056 -826.171875 -61.633690 -829.101562 -66.011368 -832.031250 -68.865608 -834.960938 -68.441048 -837.890625 -68.939674 -840.820312 -72.775826 -843.750000 -67.418533 -846.679688 -70.218452 -849.609375 -68.736107 -852.539062 -64.158379 -855.468750 -63.868206 -858.398438 -69.785225 -861.328125 -63.203541 -864.257812 -67.024414 -867.187500 -70.702515 -870.117188 -59.807976 -873.046875 -61.584251 -875.976562 -62.928093 -878.906250 -57.417866 -881.835938 -53.314091 -884.765625 -58.641548 -887.695312 -58.015198 -890.625000 -61.975773 -893.554688 -55.003677 -896.484375 -61.274311 -899.414062 -64.511787 -902.343750 -64.612221 -905.273438 -66.427704 -908.203125 -64.882011 -911.132812 -69.589386 -914.062500 -66.345810 -916.992188 -65.363731 -919.921875 -63.550312 -922.851562 -66.050636 -925.781250 -69.939896 -928.710938 -66.112717 -931.640625 -63.390804 -934.570312 -61.514984 -937.500000 -60.178005 -940.429688 -65.481705 -943.359375 -64.512794 -946.289062 -69.605881 -949.218750 -74.203041 -952.148438 -67.981155 -955.078125 -68.223801 -958.007812 -66.249275 -960.937500 -67.048050 -963.867188 -66.298317 -966.796875 -65.014503 -969.726562 -70.007690 -972.656250 -63.848560 -975.585938 -66.544479 -978.515625 -67.064491 -981.445312 -69.667953 -984.375000 -62.210327 -987.304688 -55.472088 -990.234375 -53.061840 -993.164062 -53.175266 -996.093750 -62.939980 -999.023438 -69.614807 -1001.953125 -67.355560 -1004.882812 -65.410721 -1007.812500 -66.597939 -1010.742188 -64.131927 -1013.671875 -62.753838 -1016.601562 -59.238331 -1019.531250 -53.720310 -1022.460938 -63.834263 -1025.390625 -67.249786 -1028.320312 -69.374603 -1031.250000 -66.167419 -1034.179688 -62.240520 -1037.109375 -62.652760 -1040.039062 -61.958515 -1042.968750 -63.533993 -1045.898438 -58.878891 -1048.828125 -59.708782 -1051.757812 -61.675213 -1054.687500 -58.187931 -1057.617188 -54.709393 -1060.546875 -53.781616 -1063.476562 -59.080425 -1066.406250 -59.371090 -1069.335938 -53.739437 -1072.265625 -44.134502 -1075.195312 -60.310791 -1078.125000 -64.949547 -1081.054688 -69.214966 -1083.984375 -69.640640 -1086.914062 -68.581139 -1089.843750 -64.850235 -1092.773438 -63.767506 -1095.703125 -69.104126 -1098.632812 -66.807869 -1101.562500 -68.532471 -1104.492188 -69.401825 -1107.421875 -63.166492 -1110.351562 -60.661297 -1113.281250 -67.106972 -1116.210938 -66.831474 -1119.140625 -71.835625 -1122.070312 -65.101273 -1125.000000 -54.554157 -1127.929688 -67.810867 -1130.859375 -68.997673 -1133.789062 -74.373459 -1136.718750 -66.519775 -1139.648438 -69.563545 -1142.578125 -69.615623 -1145.507812 -70.324379 -1148.437500 -70.528435 -1151.367188 -72.641319 -1154.296875 -67.146049 -1157.226562 -68.715240 -1160.156250 -72.077942 -1163.085938 -65.406464 -1166.015625 -63.554016 -1168.945312 -65.269249 -1171.875000 -63.314793 -1174.804688 -64.128067 -1177.734375 -60.000198 -1180.664062 -59.243118 -1183.593750 -56.461887 -1186.523438 -61.693489 -1189.453125 -63.669083 -1192.382812 -54.738441 -1195.312500 -59.725220 -1198.242188 -67.267380 -1201.171875 -73.313202 -1204.101562 -72.104797 -1207.031250 -76.119545 -1209.960938 -77.869911 -1212.890625 -69.965805 -1215.820312 -73.862785 -1218.750000 -70.449097 -1221.679688 -65.841492 -1224.609375 -67.908615 -1227.539062 -70.879753 -1230.468750 -71.977158 -1233.398438 -74.309402 -1236.328125 -72.483788 -1239.257812 -76.755669 -1242.187500 -70.170113 -1245.117188 -74.825737 -1248.046875 -73.609306 -1250.976562 -73.782913 -1253.906250 -79.191719 -1256.835938 -75.487854 -1259.765625 -70.074959 -1262.695312 -70.034866 -1265.625000 -69.579826 -1268.554688 -71.061340 -1271.484375 -72.320465 -1274.414062 -74.566711 -1277.343750 -73.368958 -1280.273438 -70.770264 -1283.203125 -69.724731 -1286.132812 -84.474861 -1289.062500 -68.307999 -1291.992188 -76.550827 -1294.921875 -63.401459 -1297.851562 -67.890884 -1300.781250 -59.565258 -1303.710938 -67.184052 -1306.640625 -62.024879 -1309.570312 -62.284580 -1312.500000 -70.837502 -1315.429688 -71.287331 -1318.359375 -66.404716 -1321.289062 -63.773617 -1324.218750 -62.996487 -1327.148438 -56.021667 -1330.078125 -66.891365 -1333.007812 -63.871670 -1335.937500 -63.508633 -1338.867188 -61.905476 -1341.796875 -67.810226 -1344.726562 -76.857491 -1347.656250 -74.226128 -1350.585938 -77.226967 -1353.515625 -72.944771 -1356.445312 -71.239296 -1359.375000 -71.799133 -1362.304688 -84.321457 -1365.234375 -76.318535 -1368.164062 -70.237770 -1371.093750 -70.538155 -1374.023438 -70.780724 -1376.953125 -71.542503 -1379.882812 -70.910896 -1382.812500 -72.230698 -1385.742188 -67.596954 -1388.671875 -72.195953 -1391.601562 -67.514687 -1394.531250 -67.304276 -1397.460938 -66.451385 -1400.390625 -65.848785 -1403.320312 -70.186249 -1406.250000 -71.033936 -1409.179688 -72.067673 -1412.109375 -71.244934 -1415.039062 -72.115898 -1417.968750 -72.197304 -1420.898438 -67.863266 -1423.828125 -68.862610 -1426.757812 -65.983025 -1429.687500 -68.148575 -1432.617188 -68.989014 -1435.546875 -70.756935 -1438.476562 -66.694481 -1441.406250 -73.278465 -1444.335938 -72.019806 -1447.265625 -70.137810 -1450.195312 -70.563835 -1453.125000 -70.673706 -1456.054688 -73.432068 -1458.984375 -74.878639 -1461.914062 -76.222099 -1464.843750 -71.806442 -1467.773438 -75.567993 -1470.703125 -70.421776 -1473.632812 -65.041130 -1476.562500 -69.817459 -1479.492188 -62.630524 -1482.421875 -63.027374 -1485.351562 -65.204132 -1488.281250 -62.876823 -1491.210938 -61.024555 -1494.140625 -67.822464 -1497.070312 -67.831497 -1500.000000 -71.900192 -1502.929688 -75.817467 -1505.859375 -73.200554 -1508.789062 -78.136360 -1511.718750 -70.987267 -1514.648438 -72.105919 -1517.578125 -69.165054 -1520.507812 -75.976082 -1523.437500 -79.916992 -1526.367188 -74.308655 -1529.296875 -76.097801 -1532.226562 -76.800896 -1535.156250 -72.063766 -1538.085938 -73.718948 -1541.015625 -75.985229 -1543.945312 -74.240295 -1546.875000 -69.646721 -1549.804688 -64.856056 -1552.734375 -66.616592 -1555.664062 -66.756378 -1558.593750 -66.040565 -1561.523438 -70.036369 -1564.453125 -62.221466 -1567.382812 -67.982727 -1570.312500 -61.138874 -1573.242188 -59.058720 -1576.171875 -60.073139 -1579.101562 -58.489033 -1582.031250 -61.750484 -1584.960938 -68.279167 -1587.890625 -70.242607 -1590.820312 -70.202591 -1593.750000 -71.244873 -1596.679688 -72.269203 -1599.609375 -73.652649 -1602.539062 -68.947266 -1605.468750 -70.914291 -1608.398438 -81.066010 -1611.328125 -77.007080 -1614.257812 -71.399399 -1617.187500 -77.961525 -1620.117188 -73.432373 -1623.046875 -69.413055 -1625.976562 -75.233727 -1628.906250 -74.042603 -1631.835938 -76.690865 -1634.765625 -71.479630 -1637.695312 -76.460716 -1640.625000 -69.683052 -1643.554688 -61.833527 -1646.484375 -64.289528 -1649.414062 -72.407562 -1652.343750 -67.924286 -1655.273438 -68.063423 -1658.203125 -74.890968 -1661.132812 -71.239792 -1664.062500 -66.497398 -1666.992188 -68.359009 -1669.921875 -73.088013 -1672.851562 -75.024406 -1675.781250 -70.676712 -1678.710938 -69.094139 -1681.640625 -69.833717 -1684.570312 -71.876610 -1687.500000 -70.700676 -1690.429688 -69.089043 -1693.359375 -72.503487 -1696.289062 -64.014839 -1699.218750 -70.871666 -1702.148438 -73.077896 -1705.078125 -75.051666 -1708.007812 -74.402130 -1710.937500 -76.043686 -1713.867188 -73.349174 -1716.796875 -74.150475 -1719.726562 -69.551872 -1722.656250 -75.844795 -1725.585938 -77.091621 -1728.515625 -75.683380 -1731.445312 -79.893234 -1734.375000 -77.117180 -1737.304688 -73.002342 -1740.234375 -75.931770 -1743.164062 -79.035789 -1746.093750 -80.681114 -1749.023438 -71.103638 -1751.953125 -69.612312 -1754.882812 -70.984787 -1757.812500 -66.033279 -1760.742188 -67.685013 -1763.671875 -64.435699 -1766.601562 -61.831715 -1769.531250 -58.921566 -1772.460938 -64.378952 -1775.390625 -69.179352 -1778.320312 -65.296608 -1781.250000 -69.707626 -1784.179688 -67.708725 -1787.109375 -66.033585 -1790.039062 -67.571945 -1792.968750 -72.136879 -1795.898438 -74.952034 -1798.828125 -74.445763 -1801.757812 -71.633224 -1804.687500 -76.975632 -1807.617188 -77.168549 -1810.546875 -69.780830 -1813.476562 -72.522919 -1816.406250 -77.815460 -1819.335938 -74.781967 -1822.265625 -76.645889 -1825.195312 -68.642220 -1828.125000 -71.769852 -1831.054688 -68.950653 -1833.984375 -67.697922 -1836.914062 -75.871712 -1839.843750 -71.237946 -1842.773438 -73.248955 -1845.703125 -77.709167 -1848.632812 -72.557381 -1851.562500 -73.040779 -1854.492188 -74.255737 -1857.421875 -69.982445 -1860.351562 -69.791679 -1863.281250 -69.875732 -1866.210938 -70.010101 -1869.140625 -67.928444 -1872.070312 -70.596840 -1875.000000 -68.376205 -1877.929688 -67.694756 -1880.859375 -72.310036 -1883.789062 -69.466362 -1886.718750 -70.642792 -1889.648438 -72.061813 -1892.578125 -68.628433 -1895.507812 -73.718811 -1898.437500 -74.544510 -1901.367188 -72.315887 -1904.296875 -72.635368 -1907.226562 -69.757843 -1910.156250 -74.898849 -1913.085938 -68.579727 -1916.015625 -66.299812 -1918.945312 -69.732552 -1921.875000 -69.450867 -1924.804688 -79.064178 -1927.734375 -75.024162 -1930.664062 -78.901939 -1933.593750 -74.087120 -1936.523438 -71.542374 -1939.453125 -72.963593 -1942.382812 -70.921356 -1945.312500 -70.128685 -1948.242188 -71.864067 -1951.171875 -70.966492 -1954.101562 -69.796356 -1957.031250 -71.009766 -1959.960938 -66.491226 -1962.890625 -69.426796 -1965.820312 -76.901672 -1968.750000 -74.618271 -1971.679688 -67.852455 -1974.609375 -63.521137 -1977.539062 -63.683292 -1980.468750 -76.669441 -1983.398438 -77.585548 -1986.328125 -68.975449 -1989.257812 -64.862427 -1992.187500 -68.118858 -1995.117188 -69.322372 -1998.046875 -68.478844 -2000.976562 -79.148155 -2003.906250 -68.930557 -2006.835938 -68.299133 -2009.765625 -71.740219 -2012.695312 -71.868378 -2015.625000 -72.607910 -2018.554688 -77.015503 -2021.484375 -75.830887 -2024.414062 -71.350937 -2027.343750 -78.011581 -2030.273438 -77.729713 -2033.203125 -72.425896 -2036.132812 -73.169357 -2039.062500 -70.151794 -2041.992188 -75.999207 -2044.921875 -74.777168 -2047.851562 -73.432373 -2050.781250 -71.653969 -2053.710938 -71.795052 -2056.640625 -73.393417 -2059.570312 -73.994995 -2062.500000 -76.359100 -2065.429688 -78.125435 -2068.359375 -73.932137 -2071.289062 -71.977585 -2074.218750 -68.070984 -2077.148438 -67.023705 -2080.078125 -64.871101 -2083.007812 -66.227768 -2085.937500 -72.884697 -2088.867188 -78.600693 -2091.796875 -69.576630 -2094.726562 -73.505714 -2097.656250 -73.949150 -2100.585938 -69.413376 -2103.515625 -73.254326 -2106.445312 -72.390076 -2109.375000 -68.102722 -2112.304688 -69.683167 -2115.234375 -71.765144 -2118.164062 -65.510506 -2121.093750 -64.756607 -2124.023438 -62.918766 -2126.953125 -68.385208 -2129.882812 -73.581398 -2132.812500 -81.655830 -2135.742188 -72.408310 -2138.671875 -73.144783 -2141.601562 -75.605911 -2144.531250 -71.057732 -2147.460938 -73.246361 -2150.390625 -73.238579 -2153.320312 -76.335968 -2156.250000 -74.892609 -2159.179688 -72.036980 -2162.109375 -77.616531 -2165.039062 -71.285431 -2167.968750 -74.084671 -2170.898438 -77.678558 -2173.828125 -71.233482 -2176.757812 -73.818848 -2179.687500 -76.842751 -2182.617188 -80.487373 -2185.546875 -78.613373 -2188.476562 -75.626022 -2191.406250 -70.711983 -2194.335938 -75.388489 -2197.265625 -73.828087 -2200.195312 -71.808517 -2203.125000 -76.533936 -2206.054688 -75.063240 -2208.984375 -72.974228 -2211.914062 -63.985619 -2214.843750 -69.081215 -2217.773438 -73.745865 -2220.703125 -76.471519 -2223.632812 -70.894180 -2226.562500 -71.397224 -2229.492188 -76.110550 -2232.421875 -76.577942 -2235.351562 -68.954697 -2238.281250 -68.468849 -2241.210938 -69.647095 -2244.140625 -72.786720 -2247.070312 -72.621391 -2250.000000 -79.010925 -2252.929688 -76.082840 -2255.859375 -75.663460 -2258.789062 -79.610435 -2261.718750 -72.549797 -2264.648438 -68.551056 -2267.578125 -68.383118 -2270.507812 -67.365067 -2273.437500 -72.580597 -2276.367188 -70.366844 -2279.296875 -68.760368 -2282.226562 -69.593910 -2285.156250 -69.567749 -2288.085938 -71.755280 -2291.015625 -73.745575 -2293.945312 -69.510468 -2296.875000 -70.411201 -2299.804688 -70.171768 -2302.734375 -75.355812 -2305.664062 -72.469910 -2308.593750 -84.507912 -2311.523438 -69.841713 -2314.453125 -71.771812 -2317.382812 -69.689873 -2320.312500 -73.326111 -2323.242188 -73.485138 -2326.171875 -78.854912 -2329.101562 -82.395393 -2332.031250 -72.291275 -2334.960938 -73.764404 -2337.890625 -70.937805 -2340.820312 -69.117912 -2343.750000 -72.399796 -2346.679688 -67.291962 -2349.609375 -65.604904 -2352.539062 -66.272858 -2355.468750 -65.426277 -2358.398438 -67.640511 -2361.328125 -74.283897 -2364.257812 -69.553658 -2367.187500 -68.249535 -2370.117188 -70.660248 -2373.046875 -76.289207 -2375.976562 -74.909988 -2378.906250 -65.527405 -2381.835938 -71.175323 -2384.765625 -71.207512 -2387.695312 -67.724258 -2390.625000 -73.808907 -2393.554688 -75.524292 -2396.484375 -75.823753 -2399.414062 -74.653481 -2402.343750 -72.526001 -2405.273438 -73.806374 -2408.203125 -75.650589 -2411.132812 -78.999062 -2414.062500 -74.337982 -2416.992188 -72.071510 -2419.921875 -76.527161 -2422.851562 -84.283264 -2425.781250 -77.229332 -2428.710938 -76.455612 -2431.640625 -74.931740 -2434.570312 -79.517418 -2437.500000 -76.505814 -2440.429688 -80.897415 -2443.359375 -74.648438 -2446.289062 -72.972740 -2449.218750 -71.277542 -2452.148438 -72.806366 -2455.078125 -73.617554 -2458.007812 -75.692741 -2460.937500 -73.330574 -2463.867188 -74.559685 -2466.796875 -74.893661 -2469.726562 -84.128387 -2472.656250 -73.903076 -2475.585938 -78.476051 -2478.515625 -70.977226 -2481.445312 -74.714432 -2484.375000 -71.828491 -2487.304688 -69.007462 -2490.234375 -69.757408 -2493.164062 -76.703308 -2496.093750 -80.139198 -2499.023438 -69.963364 -2501.953125 -67.461960 -2504.882812 -69.523354 -2507.812500 -69.893448 -2510.742188 -75.148148 -2513.671875 -77.030083 -2516.601562 -79.896179 -2519.531250 -78.180511 -2522.460938 -80.280373 -2525.390625 -73.317337 -2528.320312 -79.060944 -2531.250000 -81.507019 -2534.179688 -80.885765 -2537.109375 -75.891678 -2540.039062 -76.275352 -2542.968750 -80.423645 -2545.898438 -75.589241 -2548.828125 -73.051025 -2551.757812 -70.805763 -2554.687500 -75.276253 -2557.617188 -72.893494 -2560.546875 -74.193077 -2563.476562 -76.935181 -2566.406250 -73.242981 -2569.335938 -76.820709 -2572.265625 -73.801987 -2575.195312 -75.004417 -2578.125000 -71.583374 -2581.054688 -77.095245 -2583.984375 -73.344658 -2586.914062 -72.288361 -2589.843750 -71.174042 -2592.773438 -72.929588 -2595.703125 -73.176498 -2598.632812 -74.340111 -2601.562500 -73.109444 -2604.492188 -69.380409 -2607.421875 -67.543350 -2610.351562 -68.648621 -2613.281250 -68.683899 -2616.210938 -65.928581 -2619.140625 -67.101967 -2622.070312 -70.282463 -2625.000000 -71.214272 -2627.929688 -70.323196 -2630.859375 -71.506638 -2633.789062 -72.050392 -2636.718750 -76.873344 -2639.648438 -71.400803 -2642.578125 -70.977737 -2645.507812 -67.434761 -2648.437500 -73.070335 -2651.367188 -77.368362 -2654.296875 -69.156998 -2657.226562 -68.686775 -2660.156250 -73.945801 -2663.085938 -70.666428 -2666.015625 -72.112053 -2668.945312 -69.555740 -2671.875000 -70.549919 -2674.804688 -72.359093 -2677.734375 -72.299431 -2680.664062 -69.329460 -2683.593750 -62.859310 -2686.523438 -74.273575 -2689.453125 -74.728561 -2692.382812 -71.048660 -2695.312500 -74.137543 -2698.242188 -73.859192 -2701.171875 -74.562424 -2704.101562 -82.810883 -2707.031250 -79.299278 -2709.960938 -75.790512 -2712.890625 -76.321815 -2715.820312 -73.520462 -2718.750000 -74.943291 -2721.679688 -72.213409 -2724.609375 -81.497360 -2727.539062 -78.586761 -2730.468750 -77.466446 -2733.398438 -83.309738 -2736.328125 -77.249786 -2739.257812 -75.453011 -2742.187500 -76.179573 -2745.117188 -77.002930 -2748.046875 -72.997963 -2750.976562 -71.921104 -2753.906250 -73.999680 -2756.835938 -72.615463 -2759.765625 -66.555099 -2762.695312 -73.976616 -2765.625000 -73.564331 -2768.554688 -71.027618 -2771.484375 -75.689575 -2774.414062 -79.512085 -2777.343750 -78.320061 -2780.273438 -74.714783 -2783.203125 -73.383385 -2786.132812 -70.304329 -2789.062500 -77.248138 -2791.992188 -78.543541 -2794.921875 -76.718864 -2797.851562 -74.824867 -2800.781250 -76.740471 -2803.710938 -81.303802 -2806.640625 -76.613213 -2809.570312 -76.370529 -2812.500000 -74.348000 -2815.429688 -75.005989 -2818.359375 -72.731834 -2821.289062 -71.734451 -2824.218750 -70.426094 -2827.148438 -76.173576 -2830.078125 -73.090828 -2833.007812 -74.650047 -2835.937500 -76.462578 -2838.867188 -74.927879 -2841.796875 -68.625687 -2844.726562 -70.694725 -2847.656250 -68.142639 -2850.585938 -75.946831 -2853.515625 -67.974144 -2856.445312 -76.456688 -2859.375000 -68.839523 -2862.304688 -66.160713 -2865.234375 -68.514587 -2868.164062 -63.254654 -2871.093750 -68.406540 -2874.023438 -73.619148 -2876.953125 -68.561737 -2879.882812 -71.361450 -2882.812500 -72.518852 -2885.742188 -71.885597 -2888.671875 -71.542229 -2891.601562 -69.251701 -2894.531250 -73.731544 -2897.460938 -73.461868 -2900.390625 -71.920616 -2903.320312 -70.440720 -2906.250000 -62.320671 -2909.179688 -65.885239 -2912.109375 -63.863285 -2915.039062 -66.298080 -2917.968750 -57.266167 -2920.898438 -45.429848 -2923.828125 -56.890923 -2926.757812 -64.244011 -2929.687500 -65.265251 -2932.617188 -65.041451 -2935.546875 -65.359451 -2938.476562 -68.201683 -2941.406250 -67.722153 -2944.335938 -66.360748 -2947.265625 -64.688103 -2950.195312 -64.825638 -2953.125000 -64.680565 -2956.054688 -64.229149 -2958.984375 -62.908409 -2961.914062 -60.972202 -2964.843750 -59.466225 -2967.773438 -58.015896 -2970.703125 -49.198669 -2973.632812 -36.711418 -2976.562500 -43.433796 -2979.492188 -50.776867 -2982.421875 -54.012333 -2985.351562 -56.049442 -2988.281250 -56.873310 -2991.210938 -61.606739 -2994.140625 -60.871761 -2997.070312 -61.480965 -3000.000000 -63.220852 -3002.929688 -60.422588 -3005.859375 -63.300068 -3008.789062 -64.367783 -3011.718750 -64.282715 -3014.648438 -64.977310 -3017.578125 -63.877365 -3020.507812 -64.384499 -3023.437500 -57.074356 -3026.367188 -47.317375 -3029.296875 -52.300667 -3032.226562 -60.216293 -3035.156250 -63.021133 -3038.085938 -62.701916 -3041.015625 -66.313202 -3043.945312 -65.900627 -3046.875000 -73.299248 -3049.804688 -74.945908 -3052.734375 -71.239227 -3055.664062 -75.485191 -3058.593750 -68.784126 -3061.523438 -66.268654 -3064.453125 -72.461105 -3067.382812 -75.436150 -3070.312500 -69.111931 -3073.242188 -69.575638 -3076.171875 -65.510292 -3079.101562 -59.367168 -3082.031250 -61.299122 -3084.960938 -70.375557 -3087.890625 -71.553268 -3090.820312 -73.603577 -3093.750000 -76.611877 -3096.679688 -71.894897 -3099.609375 -69.787018 -3102.539062 -71.114723 -3105.468750 -73.320160 -3108.398438 -73.487190 -3111.328125 -69.933914 -3114.257812 -68.125145 -3117.187500 -73.018227 -3120.117188 -75.398331 -3123.046875 -76.652519 -3125.976562 -75.852890 -3128.906250 -71.446686 -3131.835938 -68.718361 -3134.765625 -68.517807 -3137.695312 -70.139313 -3140.625000 -78.037842 -3143.554688 -70.734230 -3146.484375 -70.494133 -3149.414062 -71.601349 -3152.343750 -66.378365 -3155.273438 -67.516533 -3158.203125 -75.480659 -3161.132812 -70.175591 -3164.062500 -70.369354 -3166.992188 -78.530663 -3169.921875 -75.142693 -3172.851562 -76.663422 -3175.781250 -70.539070 -3178.710938 -75.859116 -3181.640625 -69.780884 -3184.570312 -69.303139 -3187.500000 -71.636482 -3190.429688 -72.341957 -3193.359375 -71.139259 -3196.289062 -71.645073 -3199.218750 -74.245834 -3202.148438 -81.657715 -3205.078125 -76.004211 -3208.007812 -75.661575 -3210.937500 -74.574753 -3213.867188 -81.945450 -3216.796875 -82.371872 -3219.726562 -75.123131 -3222.656250 -71.555183 -3225.585938 -71.691734 -3228.515625 -73.313911 -3231.445312 -76.267464 -3234.375000 -74.609413 -3237.304688 -75.203232 -3240.234375 -77.626808 -3243.164062 -79.006416 -3246.093750 -80.778534 -3249.023438 -72.680923 -3251.953125 -71.531456 -3254.882812 -74.863495 -3257.812500 -74.694023 -3260.742188 -75.095917 -3263.671875 -76.450134 -3266.601562 -74.541420 -3269.531250 -85.266060 -3272.460938 -76.063950 -3275.390625 -72.101959 -3278.320312 -73.328018 -3281.250000 -69.548065 -3284.179688 -71.513298 -3287.109375 -76.480194 -3290.039062 -78.176712 -3292.968750 -76.150322 -3295.898438 -72.651688 -3298.828125 -74.890419 -3301.757812 -80.523712 -3304.687500 -80.219193 -3307.617188 -79.718880 -3310.546875 -79.676521 -3313.476562 -77.332024 -3316.406250 -84.700371 -3319.335938 -75.635086 -3322.265625 -74.843086 -3325.195312 -72.969772 -3328.125000 -71.195618 -3331.054688 -69.925423 -3333.984375 -73.449051 -3336.914062 -72.717964 -3339.843750 -74.985794 -3342.773438 -80.252533 -3345.703125 -78.889664 -3348.632812 -78.023453 -3351.562500 -79.269653 -3354.492188 -76.748642 -3357.421875 -80.284470 -3360.351562 -84.221634 -3363.281250 -78.414597 -3366.210938 -81.232056 -3369.140625 -77.651192 -3372.070312 -79.401001 -3375.000000 -80.786682 -3377.929688 -82.938576 -3380.859375 -80.769653 -3383.789062 -77.297737 -3386.718750 -78.851761 -3389.648438 -84.881668 -3392.578125 -80.983940 -3395.507812 -82.022827 -3398.437500 -77.589180 -3401.367188 -75.593849 -3404.296875 -81.840790 -3407.226562 -75.073723 -3410.156250 -77.079391 -3413.085938 -82.558319 -3416.015625 -83.525391 -3418.945312 -76.069099 -3421.875000 -77.567390 -3424.804688 -77.689674 -3427.734375 -75.104233 -3430.664062 -75.255112 -3433.593750 -81.122978 -3436.523438 -74.646385 -3439.453125 -74.663368 -3442.382812 -82.393044 -3445.312500 -75.031029 -3448.242188 -74.438263 -3451.171875 -81.299255 -3454.101562 -80.072426 -3457.031250 -79.376442 -3459.960938 -77.700317 -3462.890625 -81.318993 -3465.820312 -77.915413 -3468.750000 -69.007385 -3471.679688 -71.317795 -3474.609375 -81.124863 -3477.539062 -85.953964 -3480.468750 -79.220978 -3483.398438 -80.262321 -3486.328125 -80.175629 -3489.257812 -86.235092 -3492.187500 -79.071884 -3495.117188 -79.613487 -3498.046875 -81.119995 -3500.976562 -74.700043 -3503.906250 -77.476379 -3506.835938 -79.820831 -3509.765625 -76.673088 -3512.695312 -78.448578 -3515.625000 -72.902672 -3518.554688 -76.318230 -3521.484375 -73.755791 -3524.414062 -80.409370 -3527.343750 -73.802872 -3530.273438 -74.650124 -3533.203125 -71.619705 -3536.132812 -71.910149 -3539.062500 -73.531021 -3541.992188 -74.017609 -3544.921875 -82.740807 -3547.851562 -77.631889 -3550.781250 -72.874161 -3553.710938 -77.350372 -3556.640625 -78.922188 -3559.570312 -76.091576 -3562.500000 -73.099792 -3565.429688 -83.863678 -3568.359375 -74.739059 -3571.289062 -73.198189 -3574.218750 -78.968239 -3577.148438 -84.604988 -3580.078125 -75.468033 -3583.007812 -81.234421 -3585.937500 -75.475746 -3588.867188 -80.007690 -3591.796875 -87.992386 -3594.726562 -71.609596 -3597.656250 -68.484886 -3600.585938 -72.393951 -3603.515625 -78.480774 -3606.445312 -68.436981 -3609.375000 -70.754936 -3612.304688 -78.451057 -3615.234375 -76.778259 -3618.164062 -77.046227 -3621.093750 -78.625267 -3624.023438 -81.077324 -3626.953125 -80.175484 -3629.882812 -81.053352 -3632.812500 -84.642464 -3635.742188 -77.418465 -3638.671875 -81.127441 -3641.601562 -79.715866 -3644.531250 -79.593666 -3647.460938 -79.996582 -3650.390625 -75.291130 -3653.320312 -76.651703 -3656.250000 -80.602737 -3659.179688 -80.493034 -3662.109375 -76.248466 -3665.039062 -72.458725 -3667.968750 -75.575424 -3670.898438 -73.826706 -3673.828125 -76.451782 -3676.757812 -75.966721 -3679.687500 -75.215950 -3682.617188 -77.925529 -3685.546875 -76.552849 -3688.476562 -82.801552 -3691.406250 -78.163589 -3694.335938 -79.160210 -3697.265625 -80.498543 -3700.195312 -77.658150 -3703.125000 -86.466293 -3706.054688 -82.488045 -3708.984375 -78.929367 -3711.914062 -78.069000 -3714.843750 -84.613228 -3717.773438 -78.292778 -3720.703125 -78.093445 -3723.632812 -78.723129 -3726.562500 -72.861382 -3729.492188 -71.855179 -3732.421875 -71.983238 -3735.351562 -71.325203 -3738.281250 -73.834312 -3741.210938 -77.340393 -3744.140625 -76.697777 -3747.070312 -75.800507 -3750.000000 -81.225456 -3752.929688 -84.537758 -3755.859375 -81.957634 -3758.789062 -84.161827 -3761.718750 -80.409004 -3764.648438 -83.688194 -3767.578125 -80.332840 -3770.507812 -74.501892 -3773.437500 -81.125771 -3776.367188 -78.322418 -3779.296875 -80.298897 -3782.226562 -77.409660 -3785.156250 -84.619682 -3788.085938 -81.402344 -3791.015625 -76.378799 -3793.945312 -76.471657 -3796.875000 -78.873581 -3799.804688 -77.652084 -3802.734375 -73.373848 -3805.664062 -76.627800 -3808.593750 -81.374893 -3811.523438 -82.171783 -3814.453125 -76.848892 -3817.382812 -80.160919 -3820.312500 -82.992348 -3823.242188 -89.066193 -3826.171875 -77.278923 -3829.101562 -73.975685 -3832.031250 -73.280022 -3834.960938 -76.018478 -3837.890625 -93.243347 -3840.820312 -79.046982 -3843.750000 -75.667465 -3846.679688 -78.148148 -3849.609375 -78.435669 -3852.539062 -73.933441 -3855.468750 -73.999573 -3858.398438 -75.670799 -3861.328125 -77.695435 -3864.257812 -78.481476 -3867.187500 -87.402916 -3870.117188 -89.677216 -3873.046875 -84.092880 -3875.976562 -88.697975 -3878.906250 -83.669647 -3881.835938 -79.007591 -3884.765625 -81.518761 -3887.695312 -80.335930 -3890.625000 -85.380882 -3893.554688 -80.191040 -3896.484375 -79.130135 -3899.414062 -80.442497 -3902.343750 -78.702377 -3905.273438 -81.541611 -3908.203125 -79.556900 -3911.132812 -79.651749 -3914.062500 -84.296783 -3916.992188 -74.505905 -3919.921875 -74.422379 -3922.851562 -82.721779 -3925.781250 -77.805428 -3928.710938 -79.029594 -3931.640625 -83.058754 -3934.570312 -87.705917 -3937.500000 -77.847580 -3940.429688 -80.910934 -3943.359375 -81.640556 -3946.289062 -78.141853 -3949.218750 -81.007339 -3952.148438 -73.114227 -3955.078125 -77.737610 -3958.007812 -76.286232 -3960.937500 -71.621094 -3963.867188 -73.915100 -3966.796875 -75.479683 -3969.726562 -74.758789 -3972.656250 -78.158089 -3975.585938 -78.157738 -3978.515625 -73.128471 -3981.445312 -78.757614 -3984.375000 -82.838631 -3987.304688 -74.813126 -3990.234375 -79.800270 -3993.164062 -80.767715 -3996.093750 -79.969658 -3999.023438 -76.039406 -4001.953125 -75.942749 -4004.882812 -83.209229 -4007.812500 -79.075256 -4010.742188 -78.671104 -4013.671875 -82.720543 -4016.601562 -81.089462 -4019.531250 -79.274818 -4022.460938 -73.903687 -4025.390625 -76.356049 -4028.320312 -80.732437 -4031.250000 -81.959419 -4034.179688 -80.368286 -4037.109375 -80.076447 -4040.039062 -77.190125 -4042.968750 -75.039398 -4045.898438 -76.882607 -4048.828125 -77.766182 -4051.757812 -78.169960 -4054.687500 -81.613586 -4057.617188 -79.942589 -4060.546875 -80.501015 -4063.476562 -82.976082 -4066.406250 -79.473450 -4069.335938 -84.726059 -4072.265625 -77.567451 -4075.195312 -76.835526 -4078.125000 -76.353813 -4081.054688 -77.240692 -4083.984375 -81.892731 -4086.914062 -82.103867 -4089.843750 -81.696228 -4092.773438 -81.258797 -4095.703125 -85.724678 -4098.632812 -82.832443 -4101.562500 -82.111099 -4104.492188 -81.112091 -4107.421875 -78.537003 -4110.351562 -80.149040 -4113.281250 -82.789658 -4116.210938 -82.213379 -4119.140625 -82.433052 -4122.070312 -77.881256 -4125.000000 -76.088173 -4127.929688 -79.614052 -4130.859375 -82.727905 -4133.789062 -80.969757 -4136.718750 -81.946808 -4139.648438 -82.829895 -4142.578125 -81.047699 -4145.507812 -87.317764 -4148.437500 -82.387291 -4151.367188 -80.508080 -4154.296875 -85.701920 -4157.226562 -78.156509 -4160.156250 -79.406311 -4163.085938 -82.600342 -4166.015625 -82.896576 -4168.945312 -87.889877 -4171.875000 -85.776894 -4174.804688 -81.858215 -4177.734375 -79.252007 -4180.664062 -79.271156 -4183.593750 -78.055901 -4186.523438 -74.641769 -4189.453125 -74.118866 -4192.382812 -74.506660 -4195.312500 -80.157570 -4198.242188 -84.974800 -4201.171875 -82.171562 -4204.101562 -83.728294 -4207.031250 -77.730988 -4209.960938 -78.850533 -4212.890625 -83.447472 -4215.820312 -77.231033 -4218.750000 -81.643570 -4221.679688 -81.553413 -4224.609375 -79.378723 -4227.539062 -80.899254 -4230.468750 -75.613289 -4233.398438 -75.044922 -4236.328125 -73.736954 -4239.257812 -74.356178 -4242.187500 -75.080597 -4245.117188 -86.027908 -4248.046875 -80.585388 -4250.976562 -77.533432 -4253.906250 -77.945389 -4256.835938 -77.033783 -4259.765625 -75.226845 -4262.695312 -74.494148 -4265.625000 -76.461670 -4268.554688 -74.281418 -4271.484375 -71.956123 -4274.414062 -77.369583 -4277.343750 -67.158478 -4280.273438 -69.216362 -4283.203125 -73.266602 -4286.132812 -75.889412 -4289.062500 -78.250221 -4291.992188 -85.107002 -4294.921875 -81.189926 -4297.851562 -82.598564 -4300.781250 -77.600883 -4303.710938 -70.662956 -4306.640625 -69.055855 -4309.570312 -76.637894 -4312.500000 -81.422577 -4315.429688 -82.003448 -4318.359375 -81.869934 -4321.289062 -80.831299 -4324.218750 -77.651497 -4327.148438 -78.718803 -4330.078125 -77.113060 -4333.007812 -74.988289 -4335.937500 -79.029076 -4338.867188 -78.302605 -4341.796875 -75.334999 -4344.726562 -77.396942 -4347.656250 -73.424889 -4350.585938 -74.307861 -4353.515625 -72.807549 -4356.445312 -72.386711 -4359.375000 -75.144501 -4362.304688 -79.579109 -4365.234375 -81.102463 -4368.164062 -81.265549 -4371.093750 -79.620255 -4374.023438 -80.055565 -4376.953125 -85.362572 -4379.882812 -91.147812 -4382.812500 -80.800804 -4385.742188 -86.264076 -4388.671875 -80.191917 -4391.601562 -80.249847 -4394.531250 -92.351990 -4397.460938 -80.076965 -4400.390625 -78.394455 -4403.320312 -78.762939 -4406.250000 -74.647415 -4409.179688 -75.418854 -4412.109375 -75.861267 -4415.039062 -76.974960 -4417.968750 -79.104172 -4420.898438 -75.693298 -4423.828125 -78.404495 -4426.757812 -79.902588 -4429.687500 -83.556107 -4432.617188 -81.276833 -4435.546875 -79.129601 -4438.476562 -75.131287 -4441.406250 -77.290863 -4444.335938 -79.699745 -4447.265625 -83.879547 -4450.195312 -81.615448 -4453.125000 -77.167152 -4456.054688 -73.871307 -4458.984375 -75.096512 -4461.914062 -74.444443 -4464.843750 -71.992928 -4467.773438 -72.322418 -4470.703125 -74.892754 -4473.632812 -81.325645 -4476.562500 -75.562439 -4479.492188 -81.131607 -4482.421875 -77.545868 -4485.351562 -78.121826 -4488.281250 -78.254913 -4491.210938 -76.091942 -4494.140625 -78.712440 -4497.070312 -81.873230 -4500.000000 -81.921562 -4502.929688 -83.266602 -4505.859375 -85.618340 -4508.789062 -84.079376 -4511.718750 -88.677803 -4514.648438 -86.740616 -4517.578125 -86.466774 -4520.507812 -84.822861 -4523.437500 -79.681778 -4526.367188 -83.171989 -4529.296875 -80.342010 -4532.226562 -80.131592 -4535.156250 -79.565727 -4538.085938 -75.484406 -4541.015625 -77.349205 -4543.945312 -78.516106 -4546.875000 -77.696060 -4549.804688 -78.883476 -4552.734375 -76.603516 -4555.664062 -75.524719 -4558.593750 -86.375496 -4561.523438 -85.658058 -4564.453125 -82.018723 -4567.382812 -83.569901 -4570.312500 -83.600502 -4573.242188 -83.539177 -4576.171875 -89.735649 -4579.101562 -88.780998 -4582.031250 -87.721825 -4584.960938 -82.465446 -4587.890625 -83.029869 -4590.820312 -90.356255 -4593.750000 -80.111671 -4596.679688 -80.239960 -4599.609375 -79.057907 -4602.539062 -83.215546 -4605.468750 -83.185410 -4608.398438 -80.998505 -4611.328125 -83.452492 -4614.257812 -80.799316 -4617.187500 -80.898415 -4620.117188 -78.551353 -4623.046875 -77.880035 -4625.976562 -80.515686 -4628.906250 -80.892082 -4631.835938 -80.472404 -4634.765625 -80.705582 -4637.695312 -85.619171 -4640.625000 -87.335907 -4643.554688 -82.419334 -4646.484375 -83.605156 -4649.414062 -82.498154 -4652.343750 -82.428619 -4655.273438 -80.062149 -4658.203125 -82.900116 -4661.132812 -81.029724 -4664.062500 -84.276115 -4666.992188 -83.418785 -4669.921875 -83.786369 -4672.851562 -85.490608 -4675.781250 -83.417198 -4678.710938 -84.036743 -4681.640625 -85.618065 -4684.570312 -83.472008 -4687.500000 -83.325104 -4690.429688 -84.380005 -4693.359375 -77.834518 -4696.289062 -85.201210 -4699.218750 -77.892021 -4702.148438 -76.960236 -4705.078125 -76.779327 -4708.007812 -82.864044 -4710.937500 -84.410950 -4713.867188 -82.195259 -4716.796875 -76.469460 -4719.726562 -76.879898 -4722.656250 -80.554375 -4725.585938 -84.410568 -4728.515625 -81.334679 -4731.445312 -87.585052 -4734.375000 -78.364998 -4737.304688 -80.199852 -4740.234375 -81.451263 -4743.164062 -83.790520 -4746.093750 -91.291420 -4749.023438 -87.713974 -4751.953125 -83.763611 -4754.882812 -80.027481 -4757.812500 -79.286720 -4760.742188 -83.313683 -4763.671875 -82.006577 -4766.601562 -85.074966 -4769.531250 -78.781593 -4772.460938 -80.871544 -4775.390625 -86.884178 -4778.320312 -84.594429 -4781.250000 -86.642639 -4784.179688 -79.264488 -4787.109375 -80.121437 -4790.039062 -85.282066 -4792.968750 -87.585190 -4795.898438 -84.640106 -4798.828125 -90.619064 -4801.757812 -91.433289 -4804.687500 -86.850410 -4807.617188 -83.252869 -4810.546875 -86.389809 -4813.476562 -81.077698 -4816.406250 -84.767334 -4819.335938 -83.235558 -4822.265625 -78.632607 -4825.195312 -78.830872 -4828.125000 -81.757668 -4831.054688 -92.879997 -4833.984375 -82.159653 -4836.914062 -83.819778 -4839.843750 -84.140091 -4842.773438 -81.463127 -4845.703125 -86.806938 -4848.632812 -81.903397 -4851.562500 -80.386604 -4854.492188 -76.731705 -4857.421875 -78.665329 -4860.351562 -80.900925 -4863.281250 -87.738510 -4866.210938 -76.627769 -4869.140625 -77.889526 -4872.070312 -89.579048 -4875.000000 -83.721687 -4877.929688 -77.208000 -4880.859375 -68.955650 -4883.789062 -71.010910 -4886.718750 -71.029938 -4889.648438 -74.833748 -4892.578125 -78.454224 -4895.507812 -81.545891 -4898.437500 -77.390236 -4901.367188 -74.744789 -4904.296875 -76.689606 -4907.226562 -84.063225 -4910.156250 -86.558754 -4913.085938 -80.093117 -4916.015625 -85.137154 -4918.945312 -89.563828 -4921.875000 -85.864624 -4924.804688 -81.244827 -4927.734375 -82.358734 -4930.664062 -86.932770 -4933.593750 -82.155785 -4936.523438 -83.784775 -4939.453125 -88.070847 -4942.382812 -83.995453 -4945.312500 -83.005234 -4948.242188 -83.683586 -4951.171875 -83.700340 -4954.101562 -88.549820 -4957.031250 -81.704399 -4959.960938 -86.702110 -4962.890625 -83.791168 -4965.820312 -83.983170 -4968.750000 -83.968597 -4971.679688 -81.316910 -4974.609375 -81.453148 -4977.539062 -83.159996 -4980.468750 -83.395622 -4983.398438 -83.827972 -4986.328125 -77.902557 -4989.257812 -80.922295 -4992.187500 -86.611923 -4995.117188 -84.175713 -4998.046875 -82.976311 -5000.976562 -79.242882 -5003.906250 -78.142319 -5006.835938 -78.339844 -5009.765625 -86.902992 -5012.695312 -80.354271 -5015.625000 -81.847908 -5018.554688 -75.017464 -5021.484375 -75.678261 -5024.414062 -79.252388 -5027.343750 -85.674103 -5030.273438 -77.982452 -5033.203125 -78.950943 -5036.132812 -78.089081 -5039.062500 -82.667923 -5041.992188 -77.968491 -5044.921875 -85.338715 -5047.851562 -82.019821 -5050.781250 -83.069168 -5053.710938 -80.460953 -5056.640625 -79.542595 -5059.570312 -82.117332 -5062.500000 -84.103569 -5065.429688 -80.765068 -5068.359375 -81.182678 -5071.289062 -82.976669 -5074.218750 -86.541512 -5077.148438 -84.542549 -5080.078125 -82.264488 -5083.007812 -77.755150 -5085.937500 -86.386902 -5088.867188 -88.101868 -5091.796875 -88.562042 -5094.726562 -83.633698 -5097.656250 -83.171410 -5100.585938 -80.094292 -5103.515625 -80.125038 -5106.445312 -81.000252 -5109.375000 -78.261284 -5112.304688 -78.928757 -5115.234375 -84.268570 -5118.164062 -85.884048 -5121.093750 -82.260422 -5124.023438 -80.235359 -5126.953125 -85.371109 -5129.882812 -79.224678 -5132.812500 -80.533928 -5135.742188 -81.582130 -5138.671875 -82.578926 -5141.601562 -79.086426 -5144.531250 -77.102043 -5147.460938 -80.739281 -5150.390625 -77.978188 -5153.320312 -80.322433 -5156.250000 -79.623459 -5159.179688 -80.617958 -5162.109375 -79.791229 -5165.039062 -82.309822 -5167.968750 -79.454742 -5170.898438 -90.098022 -5173.828125 -77.071205 -5176.757812 -81.633163 -5179.687500 -83.667603 -5182.617188 -81.152107 -5185.546875 -81.730789 -5188.476562 -85.158974 -5191.406250 -82.599716 -5194.335938 -85.229805 -5197.265625 -82.981636 -5200.195312 -84.707481 -5203.125000 -82.200821 -5206.054688 -82.342659 -5208.984375 -82.645432 -5211.914062 -78.974533 -5214.843750 -81.513138 -5217.773438 -85.967651 -5220.703125 -82.072563 -5223.632812 -83.820961 -5226.562500 -84.455963 -5229.492188 -81.560051 -5232.421875 -80.303894 -5235.351562 -81.944542 -5238.281250 -87.254890 -5241.210938 -88.184113 -5244.140625 -84.977303 -5247.070312 -83.233109 -5250.000000 -82.250687 -5252.929688 -85.825447 -5255.859375 -83.119522 -5258.789062 -78.275513 -5261.718750 -78.428436 -5264.648438 -89.291786 -5267.578125 -84.918823 -5270.507812 -90.342163 -5273.437500 -85.863670 -5276.367188 -94.846313 -5279.296875 -85.567291 -5282.226562 -83.640846 -5285.156250 -83.008202 -5288.085938 -81.031609 -5291.015625 -79.786118 -5293.945312 -80.507576 -5296.875000 -78.952728 -5299.804688 -82.768738 -5302.734375 -84.297134 -5305.664062 -86.574821 -5308.593750 -88.056572 -5311.523438 -89.058067 -5314.453125 -83.764061 -5317.382812 -81.647110 -5320.312500 -87.390930 -5323.242188 -95.584656 -5326.171875 -82.156822 -5329.101562 -83.060394 -5332.031250 -85.934853 -5334.960938 -92.822159 -5337.890625 -84.821495 -5340.820312 -76.873589 -5343.750000 -79.539169 -5346.679688 -90.626358 -5349.609375 -82.259193 -5352.539062 -87.153519 -5355.468750 -81.443169 -5358.398438 -88.161591 -5361.328125 -89.555618 -5364.257812 -86.075111 -5367.187500 -88.332916 -5370.117188 -79.657562 -5373.046875 -79.870964 -5375.976562 -83.629829 -5378.906250 -81.951469 -5381.835938 -81.039421 -5384.765625 -81.996674 -5387.695312 -78.509781 -5390.625000 -83.233986 -5393.554688 -83.727203 -5396.484375 -77.696579 -5399.414062 -75.912750 -5402.343750 -82.342819 -5405.273438 -85.375786 -5408.203125 -78.940369 -5411.132812 -80.262794 -5414.062500 -85.643364 -5416.992188 -79.438774 -5419.921875 -79.657578 -5422.851562 -81.501762 -5425.781250 -75.441299 -5428.710938 -79.631485 -5431.640625 -79.004379 -5434.570312 -77.202034 -5437.500000 -78.917969 -5440.429688 -80.410652 -5443.359375 -81.402222 -5446.289062 -83.982162 -5449.218750 -82.370659 -5452.148438 -82.755638 -5455.078125 -80.718597 -5458.007812 -82.716850 -5460.937500 -83.620514 -5463.867188 -83.302078 -5466.796875 -82.812164 -5469.726562 -81.148438 -5472.656250 -78.638626 -5475.585938 -79.051575 -5478.515625 -79.480179 -5481.445312 -76.080299 -5484.375000 -79.159706 -5487.304688 -76.681511 -5490.234375 -77.077965 -5493.164062 -79.129883 -5496.093750 -78.377319 -5499.023438 -75.718941 -5501.953125 -75.591293 -5504.882812 -78.914238 -5507.812500 -76.872658 -5510.742188 -77.187233 -5513.671875 -81.345314 -5516.601562 -78.199020 -5519.531250 -85.889305 -5522.460938 -83.082680 -5525.390625 -78.891327 -5528.320312 -81.234207 -5531.250000 -86.634781 -5534.179688 -84.063446 -5537.109375 -79.541191 -5540.039062 -84.569672 -5542.968750 -80.848511 -5545.898438 -81.147812 -5548.828125 -83.988342 -5551.757812 -87.515335 -5554.687500 -87.391502 -5557.617188 -88.731522 -5560.546875 -87.624969 -5563.476562 -91.006844 -5566.406250 -90.437279 -5569.335938 -86.484230 -5572.265625 -86.225861 -5575.195312 -88.264893 -5578.125000 -84.981667 -5581.054688 -82.601387 -5583.984375 -85.589935 -5586.914062 -85.831146 -5589.843750 -84.808517 -5592.773438 -83.894150 -5595.703125 -88.663635 -5598.632812 -88.256744 -5601.562500 -90.228767 -5604.492188 -83.187531 -5607.421875 -86.213646 -5610.351562 -81.432076 -5613.281250 -81.332443 -5616.210938 -80.788719 -5619.140625 -80.485779 -5622.070312 -85.917717 -5625.000000 -83.284195 -5627.929688 -82.763260 -5630.859375 -83.995354 -5633.789062 -76.296402 -5636.718750 -77.676109 -5639.648438 -79.743256 -5642.578125 -77.290199 -5645.507812 -77.222031 -5648.437500 -76.148384 -5651.367188 -77.802711 -5654.296875 -82.426666 -5657.226562 -78.464897 -5660.156250 -78.945534 -5663.085938 -79.964928 -5666.015625 -80.484138 -5668.945312 -80.609329 -5671.875000 -92.805412 -5674.804688 -84.629303 -5677.734375 -84.863556 -5680.664062 -84.706276 -5683.593750 -88.482971 -5686.523438 -84.735306 -5689.453125 -81.516167 -5692.382812 -83.672745 -5695.312500 -80.422569 -5698.242188 -84.564629 -5701.171875 -85.947243 -5704.101562 -87.622864 -5707.031250 -90.658066 -5709.960938 -82.085213 -5712.890625 -90.178658 -5715.820312 -89.962044 -5718.750000 -83.744675 -5721.679688 -89.912216 -5724.609375 -83.996208 -5727.539062 -91.173172 -5730.468750 -83.199356 -5733.398438 -89.062119 -5736.328125 -84.191063 -5739.257812 -87.864296 -5742.187500 -86.663971 -5745.117188 -86.332298 -5748.046875 -88.187042 -5750.976562 -82.009277 -5753.906250 -84.683807 -5756.835938 -87.502510 -5759.765625 -86.195419 -5762.695312 -87.600990 -5765.625000 -84.268219 -5768.554688 -80.879700 -5771.484375 -83.828506 -5774.414062 -83.335793 -5777.343750 -83.880165 -5780.273438 -82.314209 -5783.203125 -87.654343 -5786.132812 -89.286667 -5789.062500 -81.749489 -5791.992188 -83.181419 -5794.921875 -88.575233 -5797.851562 -83.592026 -5800.781250 -83.382385 -5803.710938 -85.606674 -5806.640625 -94.309692 -5809.570312 -82.653152 -5812.500000 -87.407433 -5815.429688 -87.343086 -5818.359375 -80.999809 -5821.289062 -81.175179 -5824.218750 -82.581619 -5827.148438 -80.862549 -5830.078125 -80.133224 -5833.007812 -87.492569 -5835.937500 -79.670998 -5838.867188 -80.067627 -5841.796875 -80.232323 -5844.726562 -78.137054 -5847.656250 -82.115120 -5850.585938 -82.389114 -5853.515625 -79.552795 -5856.445312 -80.427719 -5859.375000 -78.975052 -5862.304688 -80.957367 -5865.234375 -79.588821 -5868.164062 -82.387650 -5871.093750 -83.302773 -5874.023438 -91.340179 -5876.953125 -86.917740 -5879.882812 -85.807770 -5882.812500 -86.376289 -5885.742188 -81.759598 -5888.671875 -83.630959 -5891.601562 -86.584541 -5894.531250 -86.709274 -5897.460938 -83.915306 -5900.390625 -83.897583 -5903.320312 -82.288177 -5906.250000 -78.676964 -5909.179688 -74.328087 -5912.109375 -74.798523 -5915.039062 -79.825516 -5917.968750 -78.014320 -5920.898438 -78.379700 -5923.828125 -79.535690 -5926.757812 -74.731270 -5929.687500 -72.843628 -5932.617188 -76.045113 -5935.546875 -79.157143 -5938.476562 -80.038910 -5941.406250 -82.525322 -5944.335938 -81.424362 -5947.265625 -79.448174 -5950.195312 -84.053581 -5953.125000 -90.104187 -5956.054688 -82.061150 -5958.984375 -79.270195 -5961.914062 -81.040375 -5964.843750 -84.654358 -5967.773438 -91.903740 -5970.703125 -83.619484 -5973.632812 -80.267258 -5976.562500 -79.169632 -5979.492188 -83.485710 -5982.421875 -81.954300 -5985.351562 -84.703995 -5988.281250 -82.536804 -5991.210938 -81.953575 -5994.140625 -88.220055 -5997.070312 -90.548431 -6000.000000 -87.673180 -6002.929688 -85.843956 -6005.859375 -85.130119 -6008.789062 -82.610031 -6011.718750 -81.289543 -6014.648438 -86.882256 -6017.578125 -82.504547 -6020.507812 -89.451202 -6023.437500 -83.275391 -6026.367188 -82.330704 -6029.296875 -84.047844 -6032.226562 -87.965866 -6035.156250 -84.498329 -6038.085938 -81.621620 -6041.015625 -86.647408 -6043.945312 -79.543839 -6046.875000 -86.134537 -6049.804688 -79.800865 -6052.734375 -80.289886 -6055.664062 -79.646919 -6058.593750 -79.560066 -6061.523438 -78.856110 -6064.453125 -79.600998 -6067.382812 -82.287743 -6070.312500 -78.939796 -6073.242188 -84.320084 -6076.171875 -82.301262 -6079.101562 -81.979065 -6082.031250 -87.867081 -6084.960938 -85.965775 -6087.890625 -86.570343 -6090.820312 -86.660919 -6093.750000 -85.716339 -6096.679688 -81.396240 -6099.609375 -81.570229 -6102.539062 -79.029137 -6105.468750 -79.000443 -6108.398438 -81.599701 -6111.328125 -80.854973 -6114.257812 -80.174141 -6117.187500 -84.187004 -6120.117188 -82.409004 -6123.046875 -82.107628 -6125.976562 -81.299500 -6128.906250 -80.502922 -6131.835938 -81.267700 -6134.765625 -80.701393 -6137.695312 -80.770874 -6140.625000 -80.707497 -6143.554688 -85.181908 -6146.484375 -86.796951 -6149.414062 -83.992294 -6152.343750 -81.973770 -6155.273438 -82.118889 -6158.203125 -84.006050 -6161.132812 -83.447105 -6164.062500 -80.335335 -6166.992188 -80.977371 -6169.921875 -80.105095 -6172.851562 -81.544823 -6175.781250 -81.318871 -6178.710938 -79.240112 -6181.640625 -80.053001 -6184.570312 -84.509430 -6187.500000 -80.378838 -6190.429688 -83.362862 -6193.359375 -89.486938 -6196.289062 -87.414322 -6199.218750 -88.598930 -6202.148438 -87.759918 -6205.078125 -84.377869 -6208.007812 -85.997116 -6210.937500 -86.511131 -6213.867188 -86.176201 -6216.796875 -89.353004 -6219.726562 -88.151230 -6222.656250 -85.096703 -6225.585938 -87.265884 -6228.515625 -89.591347 -6231.445312 -86.376282 -6234.375000 -85.560661 -6237.304688 -84.727104 -6240.234375 -86.438072 -6243.164062 -84.275711 -6246.093750 -86.704651 -6249.023438 -86.553635 -6251.953125 -87.057297 -6254.882812 -83.807404 -6257.812500 -89.560104 -6260.742188 -78.707497 -6263.671875 -80.127258 -6266.601562 -79.617790 -6269.531250 -76.932404 -6272.460938 -85.351280 -6275.390625 -81.129295 -6278.320312 -81.097641 -6281.250000 -82.788376 -6284.179688 -82.083755 -6287.109375 -81.107124 -6290.039062 -80.479065 -6292.968750 -85.737595 -6295.898438 -82.078438 -6298.828125 -81.550858 -6301.757812 -82.660988 -6304.687500 -83.179626 -6307.617188 -85.905357 -6310.546875 -83.500992 -6313.476562 -81.626411 -6316.406250 -85.057312 -6319.335938 -93.857910 -6322.265625 -82.729500 -6325.195312 -83.901268 -6328.125000 -89.567406 -6331.054688 -83.953453 -6333.984375 -87.901627 -6336.914062 -88.901085 -6339.843750 -87.586563 -6342.773438 -87.073341 -6345.703125 -90.224510 -6348.632812 -85.802170 -6351.562500 -85.021248 -6354.492188 -81.883942 -6357.421875 -83.193329 -6360.351562 -85.134972 -6363.281250 -84.792564 -6366.210938 -85.919609 -6369.140625 -86.195854 -6372.070312 -84.804482 -6375.000000 -86.160339 -6377.929688 -85.406654 -6380.859375 -86.082947 -6383.789062 -89.622238 -6386.718750 -88.650848 -6389.648438 -87.151855 -6392.578125 -85.093590 -6395.507812 -80.666779 -6398.437500 -90.010902 -6401.367188 -84.382668 -6404.296875 -86.593781 -6407.226562 -82.285492 -6410.156250 -81.984764 -6413.085938 -86.514313 -6416.015625 -85.143143 -6418.945312 -86.482140 -6421.875000 -85.544525 -6424.804688 -86.429321 -6427.734375 -87.290764 -6430.664062 -87.718834 -6433.593750 -85.266701 -6436.523438 -84.214645 -6439.453125 -84.563354 -6442.382812 -86.860329 -6445.312500 -88.439804 -6448.242188 -88.256119 -6451.171875 -89.835571 -6454.101562 -89.881584 -6457.031250 -86.458542 -6459.960938 -91.413185 -6462.890625 -85.400047 -6465.820312 -86.223183 -6468.750000 -90.303329 -6471.679688 -84.620079 -6474.609375 -86.898369 -6477.539062 -89.879204 -6480.468750 -99.587593 -6483.398438 -86.307770 -6486.328125 -83.468491 -6489.257812 -84.966980 -6492.187500 -88.970261 -6495.117188 -90.249886 -6498.046875 -90.941574 -6500.976562 -86.786461 -6503.906250 -87.620399 -6506.835938 -88.560089 -6509.765625 -91.030876 -6512.695312 -95.772537 -6515.625000 -96.481941 -6518.554688 -82.903137 -6521.484375 -85.158768 -6524.414062 -87.101944 -6527.343750 -88.142998 -6530.273438 -82.277542 -6533.203125 -84.478920 -6536.132812 -86.202530 -6539.062500 -84.866402 -6541.992188 -78.422791 -6544.921875 -79.544464 -6547.851562 -79.241051 -6550.781250 -81.407471 -6553.710938 -82.233681 -6556.640625 -83.744370 -6559.570312 -87.886597 -6562.500000 -83.611000 -6565.429688 -84.506073 -6568.359375 -82.047142 -6571.289062 -81.789246 -6574.218750 -79.632698 -6577.148438 -78.591255 -6580.078125 -81.619019 -6583.007812 -78.130836 -6585.937500 -81.105728 -6588.867188 -88.955017 -6591.796875 -82.623550 -6594.726562 -85.755035 -6597.656250 -88.695953 -6600.585938 -91.994720 -6603.515625 -82.015793 -6606.445312 -87.173996 -6609.375000 -86.601044 -6612.304688 -82.651169 -6615.234375 -85.224007 -6618.164062 -83.760780 -6621.093750 -81.517097 -6624.023438 -87.578911 -6626.953125 -84.907379 -6629.882812 -82.508347 -6632.812500 -77.021820 -6635.742188 -83.293739 -6638.671875 -79.376595 -6641.601562 -81.557106 -6644.531250 -77.941719 -6647.460938 -79.212502 -6650.390625 -79.056564 -6653.320312 -84.811310 -6656.250000 -84.285683 -6659.179688 -82.263000 -6662.109375 -84.991249 -6665.039062 -84.445114 -6667.968750 -84.309326 -6670.898438 -83.274414 -6673.828125 -83.931198 -6676.757812 -88.839928 -6679.687500 -86.391098 -6682.617188 -87.838852 -6685.546875 -85.911949 -6688.476562 -83.635254 -6691.406250 -84.433174 -6694.335938 -82.610733 -6697.265625 -90.597153 -6700.195312 -82.750076 -6703.125000 -79.276306 -6706.054688 -83.132706 -6708.984375 -82.205544 -6711.914062 -86.357040 -6714.843750 -90.921989 -6717.773438 -87.601532 -6720.703125 -98.780022 -6723.632812 -92.543808 -6726.562500 -85.524979 -6729.492188 -87.360580 -6732.421875 -85.717781 -6735.351562 -81.755157 -6738.281250 -91.267090 -6741.210938 -82.203934 -6744.140625 -81.082077 -6747.070312 -88.110558 -6750.000000 -85.587189 -6752.929688 -88.967781 -6755.859375 -88.402481 -6758.789062 -85.640198 -6761.718750 -82.321007 -6764.648438 -89.229790 -6767.578125 -82.632828 -6770.507812 -81.551743 -6773.437500 -83.771378 -6776.367188 -85.917542 -6779.296875 -84.001945 -6782.226562 -86.641991 -6785.156250 -87.753517 -6788.085938 -84.328018 -6791.015625 -79.088013 -6793.945312 -79.852036 -6796.875000 -80.945015 -6799.804688 -79.924339 -6802.734375 -80.878349 -6805.664062 -91.281082 -6808.593750 -79.902023 -6811.523438 -80.076576 -6814.453125 -80.651482 -6817.382812 -76.439629 -6820.312500 -79.921310 -6823.242188 -76.112419 -6826.171875 -78.306168 -6829.101562 -76.120171 -6832.031250 -80.407433 -6834.960938 -79.856857 -6837.890625 -78.721680 -6840.820312 -80.712517 -6843.750000 -79.528976 -6846.679688 -80.641777 -6849.609375 -79.086769 -6852.539062 -82.870033 -6855.468750 -86.458260 -6858.398438 -85.186882 -6861.328125 -85.779366 -6864.257812 -86.096581 -6867.187500 -84.554337 -6870.117188 -86.505249 -6873.046875 -85.460007 -6875.976562 -81.585129 -6878.906250 -86.340012 -6881.835938 -88.732697 -6884.765625 -89.973541 -6887.695312 -86.284637 -6890.625000 -89.340988 -6893.554688 -86.046707 -6896.484375 -87.516983 -6899.414062 -85.293304 -6902.343750 -87.556488 -6905.273438 -78.629807 -6908.203125 -77.301964 -6911.132812 -86.428833 -6914.062500 -85.220909 -6916.992188 -77.837593 -6919.921875 -77.783150 -6922.851562 -79.747475 -6925.781250 -81.715355 -6928.710938 -82.020912 -6931.640625 -76.321060 -6934.570312 -77.920799 -6937.500000 -81.199463 -6940.429688 -82.226639 -6943.359375 -82.749710 -6946.289062 -78.987755 -6949.218750 -83.735146 -6952.148438 -76.898720 -6955.078125 -79.262001 -6958.007812 -77.249954 -6960.937500 -73.662544 -6963.867188 -71.569580 -6966.796875 -64.503105 -6969.726562 -68.867279 -6972.656250 -77.612289 -6975.585938 -83.126190 -6978.515625 -79.130325 -6981.445312 -82.131020 -6984.375000 -80.794373 -6987.304688 -78.886009 -6990.234375 -78.135490 -6993.164062 -82.308647 -6996.093750 -79.022484 -6999.023438 -75.406731 -7001.953125 -77.828232 -7004.882812 -73.547607 -7007.812500 -72.709518 -7010.742188 -75.146240 -7013.671875 -67.263313 -7016.601562 -62.508663 -7019.531250 -53.047668 -7022.460938 -55.331413 -7025.390625 -64.537064 -7028.320312 -68.381729 -7031.250000 -71.851250 -7034.179688 -71.128059 -7037.109375 -73.517960 -7040.039062 -71.268539 -7042.968750 -74.666069 -7045.898438 -77.971672 -7048.828125 -75.594124 -7051.757812 -76.351974 -7054.687500 -80.892982 -7057.617188 -76.599800 -7060.546875 -77.026894 -7063.476562 -75.581383 -7066.406250 -76.549698 -7069.335938 -70.750481 -7072.265625 -63.621040 -7075.195312 -65.514694 -7078.125000 -78.895317 -7081.054688 -76.178169 -7083.984375 -82.737045 -7086.914062 -78.261742 -7089.843750 -78.899376 -7092.773438 -74.486076 -7095.703125 -78.162979 -7098.632812 -81.076492 -7101.562500 -86.484657 -7104.492188 -78.389580 -7107.421875 -77.640808 -7110.351562 -81.785507 -7113.281250 -77.000099 -7116.210938 -85.512405 -7119.140625 -81.125610 -7122.070312 -84.378242 -7125.000000 -79.075760 -7127.929688 -79.209656 -7130.859375 -81.568695 -7133.789062 -83.882355 -7136.718750 -85.132820 -7139.648438 -83.821548 -7142.578125 -89.494499 -7145.507812 -83.395164 -7148.437500 -85.663269 -7151.367188 -82.508209 -7154.296875 -81.083084 -7157.226562 -87.291832 -7160.156250 -84.716240 -7163.085938 -83.898285 -7166.015625 -81.426353 -7168.945312 -87.310135 -7171.875000 -85.305550 -7174.804688 -88.603523 -7177.734375 -82.175415 -7180.664062 -85.573654 -7183.593750 -86.690498 -7186.523438 -86.667137 -7189.453125 -85.228004 -7192.382812 -84.509811 -7195.312500 -83.918846 -7198.242188 -90.687523 -7201.171875 -85.913216 -7204.101562 -84.982536 -7207.031250 -88.061012 -7209.960938 -83.992149 -7212.890625 -85.447433 -7215.820312 -86.367088 -7218.750000 -91.832115 -7221.679688 -85.345863 -7224.609375 -84.139084 -7227.539062 -82.879623 -7230.468750 -84.596504 -7233.398438 -86.403061 -7236.328125 -83.137733 -7239.257812 -85.791786 -7242.187500 -91.053093 -7245.117188 -84.149750 -7248.046875 -84.686531 -7250.976562 -83.031128 -7253.906250 -84.791634 -7256.835938 -91.450546 -7259.765625 -85.611763 -7262.695312 -90.137894 -7265.625000 -88.643311 -7268.554688 -88.684418 -7271.484375 -86.785408 -7274.414062 -84.778099 -7277.343750 -91.764168 -7280.273438 -85.979774 -7283.203125 -85.069717 -7286.132812 -91.208427 -7289.062500 -93.116539 -7291.992188 -87.809608 -7294.921875 -87.638802 -7297.851562 -84.951042 -7300.781250 -90.209076 -7303.710938 -82.301514 -7306.640625 -84.142258 -7309.570312 -89.462883 -7312.500000 -82.510223 -7315.429688 -80.414215 -7318.359375 -83.050735 -7321.289062 -80.298576 -7324.218750 -82.449646 -7327.148438 -85.465881 -7330.078125 -77.966156 -7333.007812 -78.345222 -7335.937500 -82.316879 -7338.867188 -80.589729 -7341.796875 -79.400932 -7344.726562 -81.848549 -7347.656250 -82.545288 -7350.585938 -83.045181 -7353.515625 -81.051529 -7356.445312 -88.338676 -7359.375000 -86.194611 -7362.304688 -83.655685 -7365.234375 -89.093094 -7368.164062 -86.758133 -7371.093750 -89.879288 -7374.023438 -84.064163 -7376.953125 -89.301620 -7379.882812 -87.742134 -7382.812500 -89.601364 -7385.742188 -88.193481 -7388.671875 -91.793991 -7391.601562 -92.607292 -7394.531250 -85.568138 -7397.460938 -81.298004 -7400.390625 -82.037529 -7403.320312 -84.018623 -7406.250000 -84.353806 -7409.179688 -79.939362 -7412.109375 -81.750877 -7415.039062 -78.415451 -7417.968750 -84.466507 -7420.898438 -84.599129 -7423.828125 -84.721138 -7426.757812 -86.197052 -7429.687500 -82.234154 -7432.617188 -88.824059 -7435.546875 -87.534523 -7438.476562 -84.776970 -7441.406250 -90.613594 -7444.335938 -88.692520 -7447.265625 -83.532066 -7450.195312 -94.270470 -7453.125000 -87.596626 -7456.054688 -89.533768 -7458.984375 -90.291893 -7461.914062 -88.965164 -7464.843750 -89.836891 -7467.773438 -84.383865 -7470.703125 -86.241669 -7473.632812 -85.857903 -7476.562500 -85.689911 -7479.492188 -90.509926 -7482.421875 -91.248405 -7485.351562 -87.077766 -7488.281250 -85.282486 -7491.210938 -83.145554 -7494.140625 -85.149895 -7497.070312 -85.772598 -7500.000000 -85.435349 -7502.929688 -86.937019 -7505.859375 -87.671860 -7508.789062 -95.204208 -7511.718750 -88.629860 -7514.648438 -84.470589 -7517.578125 -85.122025 -7520.507812 -86.242386 -7523.437500 -84.898643 -7526.367188 -88.195259 -7529.296875 -88.313812 -7532.226562 -86.002426 -7535.156250 -85.151443 -7538.085938 -84.809212 -7541.015625 -85.926941 -7543.945312 -83.137703 -7546.875000 -83.377098 -7549.804688 -82.893898 -7552.734375 -79.979980 -7555.664062 -80.451492 -7558.593750 -80.506386 -7561.523438 -80.868248 -7564.453125 -82.175354 -7567.382812 -80.364716 -7570.312500 -81.694656 -7573.242188 -84.283363 -7576.171875 -94.528564 -7579.101562 -84.792862 -7582.031250 -85.270256 -7584.960938 -93.327179 -7587.890625 -91.864143 -7590.820312 -88.644646 -7593.750000 -87.576118 -7596.679688 -89.363876 -7599.609375 -84.038971 -7602.539062 -83.565109 -7605.468750 -90.468643 -7608.398438 -98.279015 -7611.328125 -83.885071 -7614.257812 -82.575394 -7617.187500 -86.346298 -7620.117188 -87.768044 -7623.046875 -88.433090 -7625.976562 -84.290154 -7628.906250 -90.395378 -7631.835938 -88.510948 -7634.765625 -89.391266 -7637.695312 -88.422134 -7640.625000 -91.534431 -7643.554688 -92.423241 -7646.484375 -94.875374 -7649.414062 -87.931419 -7652.343750 -91.376579 -7655.273438 -93.095360 -7658.203125 -92.525703 -7661.132812 -97.066620 -7664.062500 -94.554512 -7666.992188 -90.616394 -7669.921875 -94.395164 -7672.851562 -88.683670 -7675.781250 -91.349937 -7678.710938 -92.875679 -7681.640625 -92.149612 -7684.570312 -89.042114 -7687.500000 -88.404793 -7690.429688 -87.206100 -7693.359375 -92.698334 -7696.289062 -91.367012 -7699.218750 -93.260040 -7702.148438 -88.175323 -7705.078125 -96.881973 -7708.007812 -95.131439 -7710.937500 -92.411179 -7713.867188 -87.402344 -7716.796875 -84.611732 -7719.726562 -84.452103 -7722.656250 -84.561302 -7725.585938 -90.013687 -7728.515625 -90.370308 -7731.445312 -88.134399 -7734.375000 -87.017906 -7737.304688 -88.480263 -7740.234375 -86.225220 -7743.164062 -92.900459 -7746.093750 -95.380028 -7749.023438 -94.202583 -7751.953125 -92.832550 -7754.882812 -90.662346 -7757.812500 -91.570564 -7760.742188 -97.480667 -7763.671875 -88.214256 -7766.601562 -87.935669 -7769.531250 -90.420692 -7772.460938 -91.386299 -7775.390625 -89.944313 -7778.320312 -95.371323 -7781.250000 -95.274216 -7784.179688 -93.447807 -7787.109375 -89.470116 -7790.039062 -90.780785 -7792.968750 -91.303879 -7795.898438 -91.183830 -7798.828125 -93.297234 -7801.757812 -89.408432 -7804.687500 -90.371056 -7807.617188 -89.635681 -7810.546875 -94.113144 -7813.476562 -89.720848 -7816.406250 -86.325172 -7819.335938 -89.434372 -7822.265625 -90.147758 -7825.195312 -90.482529 -7828.125000 -92.543510 -7831.054688 -89.719551 -7833.984375 -91.954048 -7836.914062 -90.151466 -7839.843750 -88.441948 -7842.773438 -89.829659 -7845.703125 -89.551140 -7848.632812 -87.735207 -7851.562500 -91.309341 -7854.492188 -93.678818 -7857.421875 -86.479874 -7860.351562 -87.167519 -7863.281250 -83.516685 -7866.210938 -86.821648 -7869.140625 -85.714607 -7872.070312 -82.491142 -7875.000000 -86.640663 -7877.929688 -90.014343 -7880.859375 -88.548515 -7883.789062 -92.205589 -7886.718750 -86.921593 -7889.648438 -85.073166 -7892.578125 -87.237747 -7895.507812 -89.640236 -7898.437500 -88.791328 -7901.367188 -88.914818 -7904.296875 -94.875977 -7907.226562 -86.367798 -7910.156250 -89.213600 -7913.085938 -93.398956 -7916.015625 -93.183739 -7918.945312 -93.065453 -7921.875000 -88.462570 -7924.804688 -88.848999 -7927.734375 -89.573364 -7930.664062 -89.020340 -7933.593750 -87.353561 -7936.523438 -88.756042 -7939.453125 -89.717300 -7942.382812 -86.823822 -7945.312500 -88.278893 -7948.242188 -89.073685 -7951.171875 -88.142731 -7954.101562 -88.943275 -7957.031250 -93.493553 -7959.960938 -92.840996 -7962.890625 -90.233444 -7965.820312 -90.926826 -7968.750000 -88.403641 -7971.679688 -90.858498 -7974.609375 -87.561974 -7977.539062 -89.820122 -7980.468750 -85.536385 -7983.398438 -87.963120 -7986.328125 -85.122849 -7989.257812 -87.169968 -7992.187500 -83.586227 -7995.117188 -86.017418 -7998.046875 -90.186172 -8000.976562 -89.907181 -8003.906250 -89.792366 -8006.835938 -88.708031 -8009.765625 -85.549644 -8012.695312 -88.147148 -8015.625000 -91.525574 -8018.554688 -95.226471 -8021.484375 -94.271011 -8024.414062 -89.345764 -8027.343750 -92.035683 -8030.273438 -87.403717 -8033.203125 -88.486107 -8036.132812 -88.539047 -8039.062500 -90.895302 -8041.992188 -88.816376 -8044.921875 -92.661171 -8047.851562 -87.411903 -8050.781250 -88.398849 -8053.710938 -88.099792 -8056.640625 -92.924973 -8059.570312 -92.210144 -8062.500000 -91.659492 -8065.429688 -92.641098 -8068.359375 -95.205559 -8071.289062 -91.513756 -8074.218750 -90.656509 -8077.148438 -94.430977 -8080.078125 -91.504463 -8083.007812 -92.389938 -8085.937500 -94.512512 -8088.867188 -92.849182 -8091.796875 -95.606934 -8094.726562 -96.973785 -8097.656250 -96.238869 -8100.585938 -92.988792 -8103.515625 -92.291161 -8106.445312 -87.929810 -8109.375000 -89.836166 -8112.304688 -86.778511 -8115.234375 -89.544266 -8118.164062 -87.790939 -8121.093750 -86.754974 -8124.023438 -89.353226 -8126.953125 -89.033173 -8129.882812 -86.811852 -8132.812500 -90.475311 -8135.742188 -96.724487 -8138.671875 -93.601494 -8141.601562 -90.500732 -8144.531250 -90.432487 -8147.460938 -89.005241 -8150.390625 -86.905769 -8153.320312 -87.478439 -8156.250000 -88.132706 -8159.179688 -91.297600 -8162.109375 -95.158546 -8165.039062 -91.256958 -8167.968750 -92.173965 -8170.898438 -92.667145 -8173.828125 -91.912544 -8176.757812 -86.910454 -8179.687500 -92.852898 -8182.617188 -89.116844 -8185.546875 -90.346565 -8188.476562 -92.443726 -8191.406250 -90.321167 -8194.335938 -93.603264 -8197.265625 -92.435623 -8200.195312 -94.211861 -8203.125000 -89.570473 -8206.054688 -90.276627 -8208.984375 -90.477936 -8211.914062 -90.131615 -8214.843750 -96.321243 -8217.773438 -91.487785 -8220.703125 -87.090714 -8223.632812 -85.699417 -8226.562500 -85.894325 -8229.492188 -87.684059 -8232.421875 -92.098091 -8235.351562 -91.967743 -8238.281250 -90.625351 -8241.210938 -96.293823 -8244.140625 -90.688118 -8247.070312 -88.796028 -8250.000000 -89.859032 -8252.929688 -91.225502 -8255.859375 -93.521004 -8258.789062 -90.132111 -8261.718750 -93.040092 -8264.648438 -92.536263 -8267.578125 -90.549934 -8270.507812 -94.417549 -8273.437500 -92.593407 -8276.367188 -97.644920 -8279.296875 -91.902756 -8282.226562 -93.629906 -8285.156250 -92.745247 -8288.085938 -89.397942 -8291.015625 -88.664864 -8293.945312 -89.394791 -8296.875000 -87.176842 -8299.804688 -90.871246 -8302.734375 -89.666229 -8305.664062 -93.777855 -8308.593750 -87.906212 -8311.523438 -91.250969 -8314.453125 -95.156593 -8317.382812 -87.711647 -8320.312500 -94.853287 -8323.242188 -89.235069 -8326.171875 -90.287865 -8329.101562 -90.475937 -8332.031250 -92.563446 -8334.960938 -96.298912 -8337.890625 -95.109184 -8340.820312 -92.834335 -8343.750000 -92.026749 -8346.679688 -90.608711 -8349.609375 -87.982796 -8352.539062 -87.739922 -8355.468750 -88.645363 -8358.398438 -84.798332 -8361.328125 -93.040001 -8364.257812 -88.389877 -8367.187500 -92.838280 -8370.117188 -96.147896 -8373.046875 -90.328644 -8375.976562 -93.774376 -8378.906250 -92.910500 -8381.835938 -88.269073 -8384.765625 -85.334244 -8387.695312 -87.118179 -8390.625000 -84.923798 -8393.554688 -86.360519 -8396.484375 -86.705017 -8399.414062 -85.729706 -8402.343750 -83.932381 -8405.273438 -87.897537 -8408.203125 -89.192711 -8411.132812 -86.974442 -8414.062500 -91.924316 -8416.992188 -86.866066 -8419.921875 -91.778725 -8422.851562 -93.566780 -8425.781250 -92.171501 -8428.710938 -95.809639 -8431.640625 -99.966057 -8434.570312 -95.364441 -8437.500000 -94.808693 -8440.429688 -92.644371 -8443.359375 -91.101501 -8446.289062 -93.406204 -8449.218750 -91.439194 -8452.148438 -90.632706 -8455.078125 -91.434166 -8458.007812 -89.803261 -8460.937500 -90.175568 -8463.867188 -90.888802 -8466.796875 -88.274498 -8469.726562 -88.231316 -8472.656250 -90.695282 -8475.585938 -93.444862 -8478.515625 -90.157356 -8481.445312 -94.400444 -8484.375000 -94.369705 -8487.304688 -90.831711 -8490.234375 -92.275948 -8493.164062 -96.368431 -8496.093750 -99.496613 -8499.023438 -92.823273 -8501.953125 -95.120605 -8504.882812 -96.836418 -8507.812500 -89.345078 -8510.742188 -91.146736 -8513.671875 -90.958755 -8516.601562 -89.951591 -8519.531250 -92.031799 -8522.460938 -92.425652 -8525.390625 -89.537590 -8528.320312 -92.015869 -8531.250000 -93.250404 -8534.179688 -89.771332 -8537.109375 -89.982117 -8540.039062 -92.917213 -8542.968750 -88.381073 -8545.898438 -88.365601 -8548.828125 -86.305229 -8551.757812 -86.089798 -8554.687500 -86.133873 -8557.617188 -89.016830 -8560.546875 -86.236671 -8563.476562 -86.500183 -8566.406250 -90.068680 -8569.335938 -88.243187 -8572.265625 -87.384804 -8575.195312 -93.368362 -8578.125000 -90.582420 -8581.054688 -93.249557 -8583.984375 -91.484436 -8586.914062 -91.748840 -8589.843750 -93.448471 -8592.773438 -91.647682 -8595.703125 -94.002480 -8598.632812 -92.159592 -8601.562500 -91.327660 -8604.492188 -96.692757 -8607.421875 -90.220039 -8610.351562 -95.395363 -8613.281250 -93.992226 -8616.210938 -92.012184 -8619.140625 -98.318306 -8622.070312 -92.027084 -8625.000000 -96.962242 -8627.929688 -91.099098 -8630.859375 -93.704880 -8633.789062 -93.658524 -8636.718750 -90.644928 -8639.648438 -91.032272 -8642.578125 -93.710823 -8645.507812 -91.432434 -8648.437500 -95.571205 -8651.367188 -94.132118 -8654.296875 -94.297127 -8657.226562 -87.070061 -8660.156250 -87.239746 -8663.085938 -88.962852 -8666.015625 -87.926834 -8668.945312 -87.986404 -8671.875000 -88.986893 -8674.804688 -88.535202 -8677.734375 -90.041534 -8680.664062 -91.463844 -8683.593750 -98.355156 -8686.523438 -94.570343 -8689.453125 -100.348671 -8692.382812 -93.511078 -8695.312500 -98.174217 -8698.242188 -94.594872 -8701.171875 -96.993782 -8704.101562 -92.701134 -8707.031250 -96.859337 -8709.960938 -96.129517 -8712.890625 -92.804001 -8715.820312 -90.436058 -8718.750000 -98.765640 -8721.679688 -88.396820 -8724.609375 -88.477966 -8727.539062 -88.271912 -8730.468750 -84.791061 -8733.398438 -86.398232 -8736.328125 -83.022202 -8739.257812 -87.554344 -8742.187500 -85.434830 -8745.117188 -88.617722 -8748.046875 -87.372040 -8750.976562 -87.354446 -8753.906250 -86.988144 -8756.835938 -89.328018 -8759.765625 -86.918861 -8762.695312 -87.986183 -8765.625000 -89.662376 -8768.554688 -87.924049 -8771.484375 -89.827911 -8774.414062 -91.533493 -8777.343750 -90.111649 -8780.273438 -92.398232 -8783.203125 -88.572090 -8786.132812 -87.553482 -8789.062500 -89.480621 -8791.992188 -90.335030 -8794.921875 -87.239853 -8797.851562 -91.206604 -8800.781250 -90.743240 -8803.710938 -87.338699 -8806.640625 -90.088936 -8809.570312 -91.159447 -8812.500000 -86.089218 -8815.429688 -89.096489 -8818.359375 -89.660316 -8821.289062 -89.351173 -8824.218750 -89.273277 -8827.148438 -88.485153 -8830.078125 -90.132492 -8833.007812 -92.896530 -8835.937500 -90.289894 -8838.867188 -89.240181 -8841.796875 -88.403999 -8844.726562 -89.422089 -8847.656250 -93.802658 -8850.585938 -91.025307 -8853.515625 -92.392517 -8856.445312 -90.563782 -8859.375000 -91.384361 -8862.304688 -92.613831 -8865.234375 -91.536438 -8868.164062 -91.249062 -8871.093750 -96.774048 -8874.023438 -94.194382 -8876.953125 -99.459564 -8879.882812 -93.692688 -8882.812500 -91.839142 -8885.742188 -96.946594 -8888.671875 -90.417839 -8891.601562 -91.300049 -8894.531250 -93.708679 -8897.460938 -92.040321 -8900.390625 -90.558113 -8903.320312 -90.607620 -8906.250000 -93.432259 -8909.179688 -89.840218 -8912.109375 -89.624695 -8915.039062 -92.780510 -8917.968750 -95.072975 -8920.898438 -90.238632 -8923.828125 -93.133423 -8926.757812 -86.854897 -8929.687500 -93.595726 -8932.617188 -88.881020 -8935.546875 -86.625397 -8938.476562 -87.207428 -8941.406250 -86.870087 -8944.335938 -88.417320 -8947.265625 -83.832176 -8950.195312 -89.524895 -8953.125000 -87.407997 -8956.054688 -87.173370 -8958.984375 -89.343567 -8961.914062 -86.992790 -8964.843750 -88.741035 -8967.773438 -92.283737 -8970.703125 -88.456596 -8973.632812 -88.738518 -8976.562500 -87.101448 -8979.492188 -87.288620 -8982.421875 -89.172775 -8985.351562 -86.536484 -8988.281250 -87.488434 -8991.210938 -86.433594 -8994.140625 -87.953224 -8997.070312 -87.289558 -9000.000000 -87.714050 -9002.929688 -88.682816 -9005.859375 -87.092514 -9008.789062 -86.906525 -9011.718750 -87.264458 -9014.648438 -88.671616 -9017.578125 -89.271126 -9020.507812 -91.254555 -9023.437500 -94.763840 -9026.367188 -98.792648 -9029.296875 -93.618927 -9032.226562 -92.474426 -9035.156250 -91.154503 -9038.085938 -89.155106 -9041.015625 -88.395821 -9043.945312 -89.600571 -9046.875000 -88.621277 -9049.804688 -87.752487 -9052.734375 -89.716049 -9055.664062 -88.653580 -9058.593750 -89.944504 -9061.523438 -95.230095 -9064.453125 -94.389389 -9067.382812 -94.341408 -9070.312500 -92.755714 -9073.242188 -88.628395 -9076.171875 -88.239914 -9079.101562 -84.419762 -9082.031250 -86.237541 -9084.960938 -85.325562 -9087.890625 -87.754242 -9090.820312 -88.213326 -9093.750000 -89.175995 -9096.679688 -88.494949 -9099.609375 -91.406792 -9102.539062 -90.583733 -9105.468750 -90.257561 -9108.398438 -91.561012 -9111.328125 -91.549889 -9114.257812 -91.324196 -9117.187500 -90.515724 -9120.117188 -91.620003 -9123.046875 -95.461960 -9125.976562 -98.204445 -9128.906250 -96.968262 -9131.835938 -93.552895 -9134.765625 -93.306526 -9137.695312 -90.670662 -9140.625000 -90.020035 -9143.554688 -90.265327 -9146.484375 -89.180779 -9149.414062 -87.877335 -9152.343750 -87.431732 -9155.273438 -87.616379 -9158.203125 -86.372536 -9161.132812 -88.492920 -9164.062500 -87.705482 -9166.992188 -89.862312 -9169.921875 -91.104286 -9172.851562 -91.483734 -9175.781250 -93.049751 -9178.710938 -91.723381 -9181.640625 -91.527840 -9184.570312 -93.143341 -9187.500000 -91.701065 -9190.429688 -91.475517 -9193.359375 -91.829529 -9196.289062 -91.839508 -9199.218750 -92.509331 -9202.148438 -92.217827 -9205.078125 -93.010735 -9208.007812 -95.081627 -9210.937500 -93.317749 -9213.867188 -95.780899 -9216.796875 -91.458435 -9219.726562 -91.116997 -9222.656250 -87.557762 -9225.585938 -87.968544 -9228.515625 -86.495064 -9231.445312 -86.293289 -9234.375000 -86.384407 -9237.304688 -86.949936 -9240.234375 -87.650284 -9243.164062 -88.341431 -9246.093750 -88.303307 -9249.023438 -88.073517 -9251.953125 -89.744392 -9254.882812 -89.386765 -9257.812500 -92.144287 -9260.742188 -94.959648 -9263.671875 -96.478859 -9266.601562 -100.277649 -9269.531250 -94.046333 -9272.460938 -96.465553 -9275.390625 -92.462181 -9278.320312 -93.320862 -9281.250000 -92.070709 -9284.179688 -94.160873 -9287.109375 -93.075020 -9290.039062 -94.448486 -9292.968750 -94.827118 -9295.898438 -97.931816 -9298.828125 -98.210159 -9301.757812 -97.554512 -9304.687500 -93.302689 -9307.617188 -95.860741 -9310.546875 -96.085953 -9313.476562 -96.177505 -9316.406250 -95.540085 -9319.335938 -92.768456 -9322.265625 -96.224609 -9325.195312 -92.172897 -9328.125000 -94.140915 -9331.054688 -93.088730 -9333.984375 -92.163185 -9336.914062 -91.673630 -9339.843750 -95.581841 -9342.773438 -97.715645 -9345.703125 -102.766304 -9348.632812 -99.146179 -9351.562500 -99.900543 -9354.492188 -98.980591 -9357.421875 -101.834015 -9360.351562 -95.491180 -9363.281250 -96.301865 -9366.210938 -93.759644 -9369.140625 -92.715584 -9372.070312 -93.426308 -9375.000000 -92.638588 -9377.929688 -97.783417 -9380.859375 -92.067322 -9383.789062 -93.868439 -9386.718750 -89.197380 -9389.648438 -88.712677 -9392.578125 -88.957985 -9395.507812 -87.855179 -9398.437500 -89.930161 -9401.367188 -87.486221 -9404.296875 -92.252625 -9407.226562 -91.895981 -9410.156250 -93.761246 -9413.085938 -92.173691 -9416.015625 -95.297485 -9418.945312 -94.713417 -9421.875000 -93.762917 -9424.804688 -91.797661 -9427.734375 -94.683525 -9430.664062 -91.995926 -9433.593750 -93.839943 -9436.523438 -94.786057 -9439.453125 -95.741814 -9442.382812 -94.698891 -9445.312500 -99.798851 -9448.242188 -98.201164 -9451.171875 -97.570633 -9454.101562 -94.120888 -9457.031250 -94.075287 -9459.960938 -91.975639 -9462.890625 -98.163628 -9465.820312 -96.181496 -9468.750000 -95.990364 -9471.679688 -96.530533 -9474.609375 -96.598404 -9477.539062 -101.068115 -9480.468750 -103.467033 -9483.398438 -94.616516 -9486.328125 -94.866013 -9489.257812 -96.328430 -9492.187500 -98.132607 -9495.117188 -99.014832 -9498.046875 -99.006950 -9500.976562 -99.630913 -9503.906250 -97.021919 -9506.835938 -95.461609 -9509.765625 -96.481804 -9512.695312 -92.495316 -9515.625000 -92.827713 -9518.554688 -95.716141 -9521.484375 -93.726318 -9524.414062 -98.375404 -9527.343750 -99.015297 -9530.273438 -95.962784 -9533.203125 -97.102119 -9536.132812 -99.046089 -9539.062500 -98.617119 -9541.992188 -100.792671 -9544.921875 -97.540497 -9547.851562 -102.664726 -9550.781250 -95.201828 -9553.710938 -97.132469 -9556.640625 -92.847618 -9559.570312 -96.213898 -9562.500000 -92.493042 -9565.429688 -92.207832 -9568.359375 -92.231506 -9571.289062 -91.096954 -9574.218750 -90.840057 -9577.148438 -90.001709 -9580.078125 -90.689453 -9583.007812 -90.690224 -9585.937500 -89.055832 -9588.867188 -89.537498 -9591.796875 -90.139137 -9594.726562 -89.697182 -9597.656250 -91.457367 -9600.585938 -92.505806 -9603.515625 -93.071602 -9606.445312 -93.964760 -9609.375000 -91.471283 -9612.304688 -91.915154 -9615.234375 -89.974655 -9618.164062 -92.320457 -9621.093750 -92.525734 -9624.023438 -93.864731 -9626.953125 -95.081932 -9629.882812 -101.992577 -9632.812500 -93.790047 -9635.742188 -94.464378 -9638.671875 -93.946861 -9641.601562 -89.838997 -9644.531250 -90.391136 -9647.460938 -87.217941 -9650.390625 -86.783577 -9653.320312 -86.610634 -9656.250000 -86.266357 -9659.179688 -86.399185 -9662.109375 -87.524620 -9665.039062 -87.150932 -9667.968750 -89.606949 -9670.898438 -88.132690 -9673.828125 -90.346481 -9676.757812 -89.487137 -9679.687500 -91.130280 -9682.617188 -90.801727 -9685.546875 -89.438339 -9688.476562 -89.191010 -9691.406250 -88.690117 -9694.335938 -89.125244 -9697.265625 -92.325966 -9700.195312 -91.602898 -9703.125000 -93.643379 -9706.054688 -89.390839 -9708.984375 -92.113937 -9711.914062 -89.353134 -9714.843750 -92.353119 -9717.773438 -91.529503 -9720.703125 -92.241684 -9723.632812 -91.516624 -9726.562500 -92.866302 -9729.492188 -91.749115 -9732.421875 -95.794624 -9735.351562 -92.711830 -9738.281250 -98.273888 -9741.210938 -95.661102 -9744.140625 -99.525391 -9747.070312 -95.205513 -9750.000000 -97.980293 -9752.929688 -96.035294 -9755.859375 -97.947006 -9758.789062 -97.815933 -9761.718750 -99.617355 -9764.648438 -97.515663 -9767.578125 -99.754196 -9770.507812 -99.404167 -9773.437500 -101.664520 -9776.367188 -100.194252 -9779.296875 -101.055786 -9782.226562 -97.319954 -9785.156250 -103.437256 -9788.085938 -98.227928 -9791.015625 -101.143219 -9793.945312 -98.973709 -9796.875000 -100.677368 -9799.804688 -98.103775 -9802.734375 -101.678444 -9805.664062 -99.070488 -9808.593750 -104.245102 -9811.523438 -99.101089 -9814.453125 -103.731766 -9817.382812 -97.970917 -9820.312500 -98.347153 -9823.242188 -97.159203 -9826.171875 -97.113525 -9829.101562 -97.021904 -9832.031250 -97.973137 -9834.960938 -99.165436 -9837.890625 -102.007523 -9840.820312 -102.471573 -9843.750000 -101.036766 -9846.679688 -105.437561 -9849.609375 -100.092529 -9852.539062 -102.533455 -9855.468750 -101.513588 -9858.398438 -99.344521 -9861.328125 -102.200203 -9864.257812 -98.990265 -9867.187500 -102.012833 -9870.117188 -99.319511 -9873.046875 -100.068039 -9875.976562 -99.145218 -9878.906250 -98.184418 -9881.835938 -99.163460 -9884.765625 -98.930458 -9887.695312 -96.215446 -9890.625000 -97.021980 -9893.554688 -93.838242 -9896.484375 -96.168663 -9899.414062 -95.603149 -9902.343750 -96.513992 -9905.273438 -96.430748 -9908.203125 -96.805244 -9911.132812 -97.170609 -9914.062500 -95.421715 -9916.992188 -94.747375 -9919.921875 -94.127617 -9922.851562 -94.581367 -9925.781250 -96.105064 -9928.710938 -97.804558 -9931.640625 -102.966309 -9934.570312 -103.029686 -9937.500000 -98.311668 -9940.429688 -99.089058 -9943.359375 -96.705254 -9946.289062 -97.779686 -9949.218750 -97.926605 -9952.148438 -98.775177 -9955.078125 -101.261528 -9958.007812 -100.743744 -9960.937500 -102.619957 -9963.867188 -99.446983 -9966.796875 -98.846169 -9969.726562 -96.420189 -9972.656250 -96.038727 -9975.585938 -98.206421 -9978.515625 -99.089661 -9981.445312 -100.253853 -9984.375000 -96.363495 -9987.304688 -96.333687 -9990.234375 -94.722374 -9993.164062 -96.624619 -9996.093750 -98.586174 -9999.023438 -101.963524 -10001.953125 -102.036598 -10004.882812 -101.166443 -10007.812500 -101.346657 -10010.742188 -102.340385 -10013.671875 -103.223793 -10016.601562 -101.880402 -10019.531250 -100.848557 -10022.460938 -100.885689 -10025.390625 -100.654213 -10028.320312 -104.424911 -10031.250000 -101.087448 -10034.179688 -98.583664 -10037.109375 -93.732826 -10040.039062 -93.123055 -10042.968750 -90.572990 -10045.898438 -90.348167 -10048.828125 -89.107864 -10051.757812 -88.775810 -10054.687500 -88.758247 -10057.617188 -89.808197 -10060.546875 -90.710503 -10063.476562 -92.580101 -10066.406250 -93.169067 -10069.335938 -96.494690 -10072.265625 -96.977348 -10075.195312 -97.733376 -10078.125000 -99.893402 -10081.054688 -100.956863 -10083.984375 -103.330124 -10086.914062 -102.954109 -10089.843750 -100.851952 -10092.773438 -102.583084 -10095.703125 -100.017960 -10098.632812 -103.204742 -10101.562500 -103.362030 -10104.492188 -103.022354 -10107.421875 -102.888634 -10110.351562 -102.588554 -10113.281250 -99.221733 -10116.210938 -98.773293 -10119.140625 -97.250351 -10122.070312 -95.349319 -10125.000000 -95.683197 -10127.929688 -96.080475 -10130.859375 -98.158920 -10133.789062 -99.879875 -10136.718750 -101.253296 -10139.648438 -100.138725 -10142.578125 -99.084793 -10145.507812 -99.580246 -10148.437500 -97.704613 -10151.367188 -96.571983 -10154.296875 -96.694099 -10157.226562 -96.588654 -10160.156250 -96.474335 -10163.085938 -96.778145 -10166.015625 -98.370590 -10168.945312 -97.737755 -10171.875000 -99.675720 -10174.804688 -98.442368 -10177.734375 -98.899910 -10180.664062 -100.249397 -10183.593750 -99.889420 -10186.523438 -102.370216 -10189.453125 -101.090805 -10192.382812 -100.551567 -10195.312500 -101.285034 -10198.242188 -100.503769 -10201.171875 -98.825653 -10204.101562 -102.887093 -10207.031250 -97.430405 -10209.960938 -107.665688 -10212.890625 -97.201546 -10215.820312 -101.685928 -10218.750000 -97.115189 -10221.679688 -95.756775 -10224.609375 -95.582542 -10227.539062 -94.162415 -10230.468750 -93.072357 -10233.398438 -95.237495 -10236.328125 -93.112366 -10239.257812 -97.407028 -10242.187500 -95.817215 -10245.117188 -97.247932 -10248.046875 -102.672287 -10250.976562 -101.042290 -10253.906250 -107.017998 -10256.835938 -101.833961 -10259.765625 -102.409889 -10262.695312 -101.689995 -10265.625000 -102.152916 -10268.554688 -99.741516 -10271.484375 -99.667618 -10274.414062 -96.787338 -10277.343750 -97.778732 -10280.273438 -95.349922 -10283.203125 -95.005699 -10286.132812 -96.108582 -10289.062500 -96.662720 -10291.992188 -97.692970 -10294.921875 -99.542542 -10297.851562 -100.760048 -10300.781250 -100.384972 -10303.710938 -105.851669 -10306.640625 -104.299873 -10309.570312 -106.890450 -10312.500000 -101.927750 -10315.429688 -103.227501 -10318.359375 -102.211685 -10321.289062 -101.021378 -10324.218750 -101.449615 -10327.148438 -99.739624 -10330.078125 -98.623833 -10333.007812 -97.486237 -10335.937500 -96.233589 -10338.867188 -96.943840 -10341.796875 -94.254967 -10344.726562 -94.659744 -10347.656250 -94.451263 -10350.585938 -95.238297 -10353.515625 -94.929901 -10356.445312 -93.742378 -10359.375000 -94.644516 -10362.304688 -93.730034 -10365.234375 -94.231506 -10368.164062 -94.638931 -10371.093750 -95.812775 -10374.023438 -96.010155 -10376.953125 -96.449478 -10379.882812 -97.167038 -10382.812500 -96.982658 -10385.742188 -97.508148 -10388.671875 -97.767937 -10391.601562 -101.565094 -10394.531250 -101.675301 -10397.460938 -102.888580 -10400.390625 -102.619003 -10403.320312 -100.559578 -10406.250000 -102.217056 -10409.179688 -100.845428 -10412.109375 -99.855270 -10415.039062 -98.350708 -10417.968750 -101.097679 -10420.898438 -99.672722 -10423.828125 -98.904808 -10426.757812 -101.228378 -10429.687500 -99.889771 -10432.617188 -102.674797 -10435.546875 -98.800514 -10438.476562 -105.189247 -10441.406250 -100.709808 -10444.335938 -101.139130 -10447.265625 -102.500542 -10450.195312 -101.849380 -10453.125000 -103.815865 -10456.054688 -104.238480 -10458.984375 -106.512695 -10461.914062 -101.059517 -10464.843750 -101.309311 -10467.773438 -100.806389 -10470.703125 -101.486633 -10473.632812 -103.327492 -10476.562500 -102.471245 -10479.492188 -101.890999 -10482.421875 -96.915161 -10485.351562 -98.925262 -10488.281250 -96.206909 -10491.210938 -96.921616 -10494.140625 -95.488548 -10497.070312 -91.211548 -10500.000000 -91.452087 -10502.929688 -97.171890 -10505.859375 -95.229469 -10508.789062 -90.916870 -10511.718750 -93.454765 -10514.648438 -97.651482 -10517.578125 -96.035500 -10520.507812 -94.203110 -10523.437500 -102.619041 -10526.367188 -97.976616 -10529.296875 -97.520561 -10532.226562 -98.452553 -10535.156250 -98.117218 -10538.085938 -92.616982 -10541.015625 -87.947365 -10543.945312 -92.760574 -10546.875000 -92.242401 -10549.804688 -92.802322 -10552.734375 -91.132744 -10555.664062 -94.224319 -10558.593750 -92.323967 -10561.523438 -95.838730 -10564.453125 -93.794678 -10567.382812 -96.245117 -10570.312500 -93.403603 -10573.242188 -96.885117 -10576.171875 -90.077713 -10579.101562 -95.176468 -10582.031250 -93.691139 -10584.960938 -94.118835 -10587.890625 -95.846100 -10590.820312 -94.879257 -10593.750000 -99.768639 -10596.679688 -94.250290 -10599.609375 -93.919510 -10602.539062 -92.478477 -10605.468750 -91.779716 -10608.398438 -91.266098 -10611.328125 -92.778893 -10614.257812 -94.473381 -10617.187500 -93.064095 -10620.117188 -91.630669 -10623.046875 -90.830772 -10625.976562 -91.865608 -10628.906250 -94.770409 -10631.835938 -93.269051 -10634.765625 -89.561211 -10637.695312 -95.890419 -10640.625000 -100.395439 -10643.554688 -94.948235 -10646.484375 -95.723366 -10649.414062 -92.075035 -10652.343750 -93.709084 -10655.273438 -95.080963 -10658.203125 -94.559860 -10661.132812 -91.916451 -10664.062500 -97.948944 -10666.992188 -98.198578 -10669.921875 -104.339790 -10672.851562 -92.287460 -10675.781250 -95.344833 -10678.710938 -93.005440 -10681.640625 -91.641747 -10684.570312 -94.833786 -10687.500000 -93.770821 -10690.429688 -93.442421 -10693.359375 -95.786240 -10696.289062 -93.141907 -10699.218750 -94.355179 -10702.148438 -96.256233 -10705.078125 -91.531158 -10708.007812 -95.309265 -10710.937500 -101.112511 -10713.867188 -96.137344 -10716.796875 -91.811638 -10719.726562 -99.442009 -10722.656250 -97.470520 -10725.585938 -94.079231 -10728.515625 -94.289719 -10731.445312 -103.201813 -10734.375000 -97.653915 -10737.304688 -92.726196 -10740.234375 -96.638962 -10743.164062 -100.185837 -10746.093750 -92.512978 -10749.023438 -93.249786 -10751.953125 -99.106430 -10754.882812 -92.007530 -10757.812500 -89.402397 -10760.742188 -95.280739 -10763.671875 -98.591591 -10766.601562 -99.408905 -10769.531250 -93.807472 -10772.460938 -92.947487 -10775.390625 -94.133118 -10778.320312 -99.765541 -10781.250000 -95.044449 -10784.179688 -94.152504 -10787.109375 -93.309250 -10790.039062 -92.502716 -10792.968750 -91.325935 -10795.898438 -95.050301 -10798.828125 -93.360817 -10801.757812 -94.495300 -10804.687500 -99.314018 -10807.617188 -98.311981 -10810.546875 -94.869240 -10813.476562 -96.828896 -10816.406250 -95.974670 -10819.335938 -96.255531 -10822.265625 -99.372398 -10825.195312 -99.181084 -10828.125000 -103.353577 -10831.054688 -102.076813 -10833.984375 -96.109360 -10836.914062 -94.664696 -10839.843750 -97.090363 -10842.773438 -96.463249 -10845.703125 -94.081703 -10848.632812 -97.874550 -10851.562500 -110.834320 -10854.492188 -97.984406 -10857.421875 -95.924316 -10860.351562 -99.109566 -10863.281250 -94.873718 -10866.210938 -95.790413 -10869.140625 -101.144341 -10872.070312 -95.095154 -10875.000000 -93.611740 -10877.929688 -93.059402 -10880.859375 -90.927025 -10883.789062 -96.330429 -10886.718750 -90.226685 -10889.648438 -95.684845 -10892.578125 -93.650787 -10895.507812 -102.359474 -10898.437500 -92.403267 -10901.367188 -94.249268 -10904.296875 -93.836876 -10907.226562 -99.406868 -10910.156250 -98.169312 -10913.085938 -97.255272 -10916.015625 -94.922272 -10918.945312 -93.212914 -10921.875000 -96.923630 -10924.804688 -92.890076 -10927.734375 -90.635002 -10930.664062 -94.766602 -10933.593750 -88.069939 -10936.523438 -87.196754 -10939.453125 -92.213997 -10942.382812 -97.216408 -10945.312500 -93.585594 -10948.242188 -97.398491 -10951.171875 -102.254646 -10954.101562 -97.968323 -10957.031250 -95.393349 -10959.960938 -95.778320 -10962.890625 -89.734726 -10965.820312 -97.869339 -10968.750000 -93.675949 -10971.679688 -94.878235 -10974.609375 -96.674759 -10977.539062 -96.144608 -10980.468750 -95.381638 -10983.398438 -101.481659 -10986.328125 -95.154480 -10989.257812 -94.864258 -10992.187500 -90.029793 -10995.117188 -94.676231 -10998.046875 -91.978447 -11000.976562 -91.955322 -11003.906250 -89.060814 -11006.835938 -91.796188 -11009.765625 -83.638229 -11012.695312 -81.659477 -11015.625000 -84.849686 -11018.554688 -89.338051 -11021.484375 -90.979866 -11024.414062 -90.265961 -11027.343750 -87.637115 -11030.273438 -90.503403 -11033.203125 -86.095169 -11036.132812 -93.317993 -11039.062500 -90.378494 -11041.992188 -90.337151 -11044.921875 -89.049561 -11047.851562 -87.579903 -11050.781250 -83.983177 -11053.710938 -85.104134 -11056.640625 -87.490501 -11059.570312 -80.718758 -11062.500000 -76.118652 -11065.429688 -69.137093 -11068.359375 -69.558052 -11071.289062 -78.605942 -11074.218750 -79.886986 -11077.148438 -87.896492 -11080.078125 -83.753273 -11083.007812 -85.748802 -11085.937500 -87.539948 -11088.867188 -88.997192 -11091.796875 -91.190018 -11094.726562 -90.523865 -11097.656250 -86.699715 -11100.585938 -82.738899 -11103.515625 -92.469170 -11106.445312 -88.924614 -11109.375000 -93.293709 -11112.304688 -92.188339 -11115.234375 -87.768295 -11118.164062 -81.047508 -11121.093750 -79.679832 -11124.023438 -88.567474 -11126.953125 -90.911324 -11129.882812 -91.948051 -11132.812500 -88.470268 -11135.742188 -93.514107 -11138.671875 -90.172897 -11141.601562 -92.193741 -11144.531250 -96.342354 -11147.460938 -90.599564 -11150.390625 -88.122101 -11153.320312 -94.643471 -11156.250000 -91.761810 -11159.179688 -93.027817 -11162.109375 -95.595688 -11165.039062 -94.087753 -11167.968750 -91.631439 -11170.898438 -93.152534 -11173.828125 -94.368652 -11176.757812 -98.855766 -11179.687500 -94.282585 -11182.617188 -94.658936 -11185.546875 -94.215073 -11188.476562 -94.150131 -11191.406250 -93.277847 -11194.335938 -96.916565 -11197.265625 -92.663399 -11200.195312 -94.577721 -11203.125000 -99.170120 -11206.054688 -96.775841 -11208.984375 -99.998047 -11211.914062 -94.656395 -11214.843750 -96.291077 -11217.773438 -95.789513 -11220.703125 -95.042953 -11223.632812 -93.405426 -11226.562500 -92.099426 -11229.492188 -91.356567 -11232.421875 -96.950836 -11235.351562 -98.151939 -11238.281250 -95.695793 -11241.210938 -94.388977 -11244.140625 -95.682877 -11247.070312 -98.071503 -11250.000000 -98.852737 -11252.929688 -99.471878 -11255.859375 -98.523781 -11258.789062 -97.022461 -11261.718750 -97.712936 -11264.648438 -97.993835 -11267.578125 -96.639915 -11270.507812 -97.330811 -11273.437500 -95.175095 -11276.367188 -92.863434 -11279.296875 -92.763474 -11282.226562 -92.224899 -11285.156250 -92.586296 -11288.085938 -95.468964 -11291.015625 -96.818481 -11293.945312 -97.330055 -11296.875000 -99.088547 -11299.804688 -100.547012 -11302.734375 -99.709122 -11305.664062 -100.330650 -11308.593750 -99.360313 -11311.523438 -99.636040 -11314.453125 -99.643990 -11317.382812 -99.501251 -11320.312500 -100.348175 -11323.242188 -99.777496 -11326.171875 -98.607063 -11329.101562 -99.625977 -11332.031250 -99.121964 -11334.960938 -97.289413 -11337.890625 -97.908073 -11340.820312 -100.674957 -11343.750000 -96.838348 -11346.679688 -98.680092 -11349.609375 -96.554420 -11352.539062 -96.816551 -11355.468750 -98.494400 -11358.398438 -97.346283 -11361.328125 -99.456276 -11364.257812 -99.916649 -11367.187500 -97.896225 -11370.117188 -95.198738 -11373.046875 -95.001396 -11375.976562 -94.574478 -11378.906250 -96.119385 -11381.835938 -97.830612 -11384.765625 -99.095116 -11387.695312 -103.195442 -11390.625000 -101.940910 -11393.554688 -99.193581 -11396.484375 -97.782448 -11399.414062 -96.715843 -11402.343750 -99.770241 -11405.273438 -102.306458 -11408.203125 -103.237999 -11411.132812 -100.724236 -11414.062500 -98.460327 -11416.992188 -98.735161 -11419.921875 -97.372696 -11422.851562 -95.488647 -11425.781250 -96.713974 -11428.710938 -96.325569 -11431.640625 -95.405594 -11434.570312 -96.119446 -11437.500000 -96.205971 -11440.429688 -97.126038 -11443.359375 -98.232368 -11446.289062 -98.574142 -11449.218750 -97.724228 -11452.148438 -99.759346 -11455.078125 -96.896828 -11458.007812 -96.946693 -11460.937500 -97.472626 -11463.867188 -97.194061 -11466.796875 -98.082695 -11469.726562 -99.610802 -11472.656250 -99.843910 -11475.585938 -101.292488 -11478.515625 -102.899834 -11481.445312 -103.801453 -11484.375000 -101.875427 -11487.304688 -101.514030 -11490.234375 -103.208801 -11493.164062 -102.556992 -11496.093750 -103.512314 -11499.023438 -102.135597 -11501.953125 -99.550163 -11504.882812 -99.487251 -11507.812500 -97.424171 -11510.742188 -97.108688 -11513.671875 -97.335648 -11516.601562 -97.198532 -11519.531250 -97.194031 -11522.460938 -99.468208 -11525.390625 -97.699768 -11528.320312 -97.693718 -11531.250000 -96.657562 -11534.179688 -96.118591 -11537.109375 -96.795853 -11540.039062 -94.839439 -11542.968750 -94.161583 -11545.898438 -94.576210 -11548.828125 -92.034752 -11551.757812 -91.448570 -11554.687500 -90.999649 -11557.617188 -89.831619 -11560.546875 -89.968857 -11563.476562 -89.883690 -11566.406250 -89.814842 -11569.335938 -89.894798 -11572.265625 -89.203690 -11575.195312 -89.035416 -11578.125000 -89.763824 -11581.054688 -89.526825 -11583.984375 -90.338287 -11586.914062 -91.560074 -11589.843750 -91.196434 -11592.773438 -92.558983 -11595.703125 -93.409790 -11598.632812 -93.329575 -11601.562500 -94.984612 -11604.492188 -95.895676 -11607.421875 -97.530907 -11610.351562 -98.379669 -11613.281250 -98.792976 -11616.210938 -100.036591 -11619.140625 -100.062447 -11622.070312 -100.229858 -11625.000000 -100.770699 -11627.929688 -100.754654 -11630.859375 -100.239342 -11633.789062 -101.458298 -11636.718750 -101.465973 -11639.648438 -101.558365 -11642.578125 -102.098198 -11645.507812 -101.446991 -11648.437500 -101.995911 -11651.367188 -102.310097 -11654.296875 -102.555672 -11657.226562 -103.087593 -11660.156250 -102.920326 -11663.085938 -102.991936 -11666.015625 -103.627151 -11668.945312 -103.584442 -11671.875000 -104.371620 -11674.804688 -104.162804 -11677.734375 -104.941483 -11680.664062 -105.323471 -11683.593750 -104.813591 -11686.523438 -105.185623 -11689.453125 -104.717194 -11692.382812 -104.577797 -11695.312500 -104.273003 -11698.242188 -104.104202 -11701.171875 -103.873299 -11704.101562 -104.292137 -11707.031250 -103.641853 -11709.960938 -103.571724 -11712.890625 -103.843697 -11715.820312 -103.989151 -11718.750000 -103.905571 -11721.679688 -103.916267 -11724.609375 -104.064003 -11727.539062 -104.047768 -11730.468750 -104.407959 -11733.398438 -104.330452 -11736.328125 -104.730858 -11739.257812 -105.285698 -11742.187500 -105.129570 -11745.117188 -104.914917 -11748.046875 -105.035995 -11750.976562 -104.967316 -11753.906250 -105.049522 -11756.835938 -105.238281 -11759.765625 -104.782898 -11762.695312 -105.081619 -11765.625000 -104.754593 -11768.554688 -104.504288 -11771.484375 -104.402695 -11774.414062 -104.291336 -11777.343750 -104.141533 -11780.273438 -104.025055 -11783.203125 -103.937027 -11786.132812 -103.893593 -11789.062500 -103.964920 -11791.992188 -104.118675 -11794.921875 -103.900330 -11797.851562 -104.046196 -11800.781250 -103.932396 -11803.710938 -103.835487 -11806.640625 -103.890388 -11809.570312 -103.979797 -11812.500000 -103.778862 -11815.429688 -103.792702 -11818.359375 -103.713387 -11821.289062 -103.621788 -11824.218750 -103.683716 -11827.148438 -103.507103 -11830.078125 -103.617264 -11833.007812 -103.377441 -11835.937500 -103.549614 -11838.867188 -103.288322 -11841.796875 -103.462242 -11844.726562 -103.393173 -11847.656250 -103.416992 -11850.585938 -103.476196 -11853.515625 -103.410797 -11856.445312 -103.492249 -11859.375000 -103.596375 -11862.304688 -103.802025 -11865.234375 -103.860092 -11868.164062 -104.330780 -11871.093750 -104.006180 -11874.023438 -104.620758 -11876.953125 -104.313370 -11879.882812 -104.652771 -11882.812500 -104.717537 -11885.742188 -104.490883 -11888.671875 -105.131142 -11891.601562 -104.790741 -11894.531250 -105.172112 -11897.460938 -104.989662 -11900.390625 -105.067223 -11903.320312 -105.093193 -11906.250000 -105.128746 -11909.179688 -105.412743 -11912.109375 -105.230614 -11915.039062 -105.569054 -11917.968750 -105.319557 -11920.898438 -105.347321 -11923.828125 -105.486633 -11926.757812 -104.871315 -11929.687500 -105.266220 -11932.617188 -104.809929 -11935.546875 -104.919922 -11938.476562 -105.039444 -11941.406250 -104.550888 -11944.335938 -105.076477 -11947.265625 -104.426224 -11950.195312 -104.786858 -11953.125000 -104.466377 -11956.054688 -104.313477 -11958.984375 -104.465157 -11961.914062 -103.849197 -11964.843750 -104.327011 -11967.773438 -103.836472 -11970.703125 -103.984093 -11973.632812 -103.949165 -11976.562500 -103.619614 -11979.492188 -103.935234 -11982.421875 -103.685097 -11985.351562 -103.969810 -11988.281250 -103.719574 -11991.210938 -103.754883 -11994.140625 -103.534462 -11997.070312 -103.414780 -12000.000000 -103.718254 -12002.929688 -103.570068 -12005.859375 -104.030037 -12008.789062 -103.879318 -12011.718750 -103.892258 -12014.648438 -103.907555 -12017.578125 -103.836029 -12020.507812 -103.935631 -12023.437500 -104.042259 -12026.367188 -104.171837 -12029.296875 -104.116417 -12032.226562 -104.161301 -12035.156250 -104.122658 -12038.085938 -104.035942 -12041.015625 -104.107414 -12043.945312 -104.040962 -12046.875000 -104.148468 -12049.804688 -104.297134 -12052.734375 -104.215340 -12055.664062 -104.343193 -12058.593750 -104.309547 -12061.523438 -104.369827 -12064.453125 -104.410591 -12067.382812 -104.458748 -12070.312500 -104.646294 -12073.242188 -104.505470 -12076.171875 -104.396858 -12079.101562 -104.354149 -12082.031250 -104.396507 -12084.960938 -104.304855 -12087.890625 -104.098595 -12090.820312 -104.073990 -12093.750000 -104.270523 -12096.679688 -104.671684 -12099.609375 -104.529381 -12102.539062 -104.483078 -12105.468750 -104.393562 -12108.398438 -104.158440 -12111.328125 -104.170097 -12114.257812 -104.100929 -12117.187500 -104.353790 -12120.117188 -104.642166 -12123.046875 -104.508728 -12125.976562 -104.237999 -12128.906250 -104.211693 -12131.835938 -104.196228 -12134.765625 -104.211006 -12137.695312 -104.136147 -12140.625000 -104.089691 -12143.554688 -104.337006 -12146.484375 -104.550323 -12149.414062 -104.626160 -12152.343750 -104.569572 -12155.273438 -104.337502 -12158.203125 -104.164925 -12161.132812 -104.146935 -12164.062500 -104.245262 -12166.992188 -104.465485 -12169.921875 -104.568436 -12172.851562 -104.546112 -12175.781250 -104.525665 -12178.710938 -104.529556 -12181.640625 -104.527924 -12184.570312 -104.620346 -12187.500000 -104.604401 -12190.429688 -104.595047 -12193.359375 -104.579643 -12196.289062 -104.564842 -12199.218750 -104.475914 -12202.148438 -104.439835 -12205.078125 -104.350586 -12208.007812 -104.370056 -12210.937500 -104.520279 -12213.867188 -104.557564 -12216.796875 -104.493034 -12219.726562 -104.334923 -12222.656250 -104.237717 -12225.585938 -104.265854 -12228.515625 -104.483673 -12231.445312 -104.736870 -12234.375000 -104.783546 -12237.304688 -104.666885 -12240.234375 -104.539330 -12243.164062 -104.405533 -12246.093750 -104.400238 -12249.023438 -104.505852 -12251.953125 -104.500641 -12254.882812 -104.511673 -12257.812500 -104.613953 -12260.742188 -104.569702 -12263.671875 -104.568619 -12266.601562 -104.576012 -12269.531250 -104.424202 -12272.460938 -104.425339 -12275.390625 -104.579926 -12278.320312 -104.620323 -12281.250000 -104.711533 -12284.179688 -104.699066 -12287.109375 -104.533699 -12290.039062 -104.494286 -12292.968750 -104.513756 -12295.898438 -104.499481 -12298.828125 -104.520981 -12301.757812 -104.514366 -12304.687500 -104.534767 -12307.617188 -104.643242 -12310.546875 -104.764221 -12313.476562 -104.784630 -12316.406250 -104.647873 -12319.335938 -104.486252 -12322.265625 -104.370331 -12325.195312 -104.406799 -12328.125000 -104.558929 -12331.054688 -104.663361 -12333.984375 -104.752487 -12336.914062 -104.722694 -12339.843750 -104.624176 -12342.773438 -104.626175 -12345.703125 -104.597473 -12348.632812 -104.585533 -12351.562500 -104.614845 -12354.492188 -104.578209 -12357.421875 -104.589607 -12360.351562 -104.700226 -12363.281250 -104.731941 -12366.210938 -104.778633 -12369.140625 -104.727631 -12372.070312 -104.538391 -12375.000000 -104.453270 -12377.929688 -104.391151 -12380.859375 -104.484360 -12383.789062 -104.616966 -12386.718750 -104.706627 -12389.648438 -104.657791 -12392.578125 -104.629387 -12395.507812 -104.591972 -12398.437500 -104.666733 -12401.367188 -104.769836 -12404.296875 -104.814384 -12407.226562 -104.809967 -12410.156250 -104.744789 -12413.085938 -104.749245 -12416.015625 -104.749352 -12418.945312 -104.772392 -12421.875000 -104.683945 -12424.804688 -104.585594 -12427.734375 -104.502426 -12430.664062 -104.522034 -12433.593750 -104.626801 -12436.523438 -104.745346 -12439.453125 -104.791733 -12442.382812 -104.736565 -12445.312500 -104.647766 -12448.242188 -104.602486 -12451.171875 -104.625298 -12454.101562 -104.690552 -12457.031250 -104.756516 -12459.960938 -104.788589 -12462.890625 -104.769363 -12465.820312 -104.714119 -12468.750000 -104.666412 -12471.679688 -104.629967 -12474.609375 -104.646523 -12477.539062 -104.696434 -12480.468750 -104.745956 -12483.398438 -104.782829 -12486.328125 -104.779404 -12489.257812 -104.766617 -12492.187500 -104.771744 -12495.117188 -104.816368 -12498.046875 -104.842690 -12500.976562 -104.883842 -12503.906250 -104.867584 -12506.835938 -104.795906 -12509.765625 -104.707687 -12512.695312 -104.627434 -12515.625000 -104.585938 -12518.554688 -104.587921 -12521.484375 -104.630219 -12524.414062 -104.679916 -12527.343750 -104.729126 -12530.273438 -104.736443 -12533.203125 -104.734047 -12536.132812 -104.731827 -12539.062500 -104.741577 -12541.992188 -104.767487 -12544.921875 -104.808281 -12547.851562 -104.848099 -12550.781250 -104.883278 -12553.710938 -104.891914 -12556.640625 -104.878647 -12559.570312 -104.843056 -12562.500000 -104.825455 -12565.429688 -104.842728 -12568.359375 -104.871330 -12571.289062 -104.903641 -12574.218750 -104.856552 -12577.148438 -104.789978 -12580.078125 -104.663086 -12583.007812 -104.585808 -12585.937500 -104.518723 -12588.867188 -104.572121 -12591.796875 -104.680702 -12594.726562 -104.851898 -12597.656250 -104.982117 -12600.585938 -105.021225 -12603.515625 -105.023544 -12606.445312 -104.919014 -12609.375000 -104.854271 -12612.304688 -104.790268 -12615.234375 -104.772041 -12618.164062 -104.687332 -12621.093750 -104.713013 -12624.023438 -104.699104 -12626.953125 -104.673431 -12629.882812 -104.704086 -12632.812500 -104.781036 -12635.742188 -104.834251 -12638.671875 -104.936249 -12641.601562 -105.064796 -12644.531250 -105.086441 -12647.460938 -105.030937 -12650.390625 -104.792023 -12653.320312 -104.569824 -12656.250000 -104.623100 -12659.179688 -104.793053 -12662.109375 -104.787254 -12665.039062 -104.674110 -12667.968750 -104.528305 -12670.898438 -104.447701 -12673.828125 -104.621658 -12676.757812 -104.892738 -12679.687500 -104.926025 -12682.617188 -104.858696 -12685.546875 -104.899918 -12688.476562 -105.107506 -12691.406250 -105.332474 -12694.335938 -105.156349 -12697.265625 -104.612274 -12700.195312 -104.321915 -12703.125000 -104.453575 -12706.054688 -104.754059 -12708.984375 -105.072243 -12711.914062 -105.284729 -12714.843750 -105.231560 -12717.773438 -104.950829 -12720.703125 -104.630592 -12723.632812 -104.535583 -12726.562500 -104.717789 -12729.492188 -104.917374 -12732.421875 -104.930504 -12735.351562 -104.995956 -12738.281250 -105.239807 -12741.210938 -105.302391 -12744.140625 -104.920105 -12747.070312 -104.460503 -12750.000000 -104.387138 -12752.929688 -104.745300 -12755.859375 -105.178955 -12758.789062 -105.294060 -12761.718750 -105.096489 -12764.648438 -104.843056 -12767.578125 -104.746048 -12770.507812 -104.854691 -12773.437500 -104.991249 -12776.367188 -105.046158 -12779.296875 -105.022293 -12782.226562 -104.921402 -12785.156250 -104.912109 -12788.085938 -104.905891 -12791.015625 -104.740494 -12793.945312 -104.705421 -12796.875000 -104.826180 -12799.804688 -104.908882 -12802.734375 -105.036324 -12805.664062 -105.075363 -12808.593750 -105.003075 -12811.523438 -105.072472 -12814.453125 -105.124962 -12817.382812 -105.085136 -12820.312500 -105.107109 -12823.242188 -105.093674 -12826.171875 -105.046181 -12829.101562 -104.983620 -12832.031250 -104.850136 -12834.960938 -104.752991 -12837.890625 -104.771675 -12840.820312 -104.902031 -12843.750000 -105.062263 -12846.679688 -105.142776 -12849.609375 -105.141388 -12852.539062 -105.053223 -12855.468750 -104.916115 -12858.398438 -104.802887 -12861.328125 -104.719986 -12864.257812 -104.714714 -12867.187500 -104.817413 -12870.117188 -104.942070 -12873.046875 -105.041122 -12875.976562 -105.070541 -12878.906250 -105.036850 -12881.835938 -104.990616 -12884.765625 -104.964851 -12887.695312 -104.994865 -12890.625000 -105.068657 -12893.554688 -105.144577 -12896.484375 -105.220917 -12899.414062 -105.265152 -12902.343750 -105.241257 -12905.273438 -105.130562 -12908.203125 -104.955276 -12911.132812 -104.803978 -12914.062500 -104.777954 -12916.992188 -104.902245 -12919.921875 -105.089455 -12922.851562 -105.180855 -12925.781250 -105.095055 -12928.710938 -104.902847 -12931.640625 -104.775406 -12934.570312 -104.787399 -12937.500000 -104.924438 -12940.429688 -105.093239 -12943.359375 -105.208763 -12946.289062 -105.271545 -12949.218750 -105.299049 -12952.148438 -105.285522 -12955.078125 -105.170807 -12958.007812 -104.939384 -12960.937500 -104.706009 -12963.867188 -104.618347 -12966.796875 -104.766029 -12969.726562 -105.117508 -12972.656250 -105.456306 -12975.585938 -105.602592 -12978.515625 -105.473946 -12981.445312 -105.246284 -12984.375000 -105.075623 -12987.304688 -105.023216 -12990.234375 -105.034966 -12993.164062 -105.031799 -12996.093750 -104.975365 -12999.023438 -104.900620 -13001.953125 -104.859375 -13004.882812 -104.886780 -13007.812500 -104.965202 -13010.742188 -105.008636 -13013.671875 -105.035072 -13016.601562 -105.033310 -13019.531250 -105.071899 -13022.460938 -105.189400 -13025.390625 -105.294449 -13028.320312 -105.417961 -13031.250000 -105.346001 -13034.179688 -105.263031 -13037.109375 -105.069702 -13040.039062 -104.999825 -13042.968750 -105.027687 -13045.898438 -105.044128 -13048.828125 -105.170296 -13051.757812 -105.068039 -13054.687500 -105.097237 -13057.617188 -104.957207 -13060.546875 -104.944702 -13063.476562 -104.946266 -13066.406250 -104.957161 -13069.335938 -105.116409 -13072.265625 -105.138458 -13075.195312 -105.313377 -13078.125000 -105.288589 -13081.054688 -105.251457 -13083.984375 -105.163956 -13086.914062 -105.110222 -13089.843750 -105.169067 -13092.773438 -105.251244 -13095.703125 -105.347107 -13098.632812 -105.349113 -13101.562500 -105.259064 -13104.492188 -105.119637 -13107.421875 -105.020683 -13110.351562 -104.929283 -13113.281250 -104.947586 -13116.210938 -104.976677 -13119.140625 -105.088951 -13122.070312 -105.161827 -13125.000000 -105.230797 -13127.929688 -105.256378 -13130.859375 -105.242363 -13133.789062 -105.234589 -13136.718750 -105.197334 -13139.648438 -105.189804 -13142.578125 -105.159256 -13145.507812 -105.135147 -13148.437500 -105.089882 -13151.367188 -105.080559 -13154.296875 -105.103661 -13157.226562 -105.169548 -13160.156250 -105.251137 -13163.085938 -105.311768 -13166.015625 -105.319626 -13168.945312 -105.263222 -13171.875000 -105.157928 -13174.804688 -105.083618 -13177.734375 -105.057541 -13180.664062 -105.120338 -13183.593750 -105.212456 -13186.523438 -105.287590 -13189.453125 -105.281029 -13192.382812 -105.207527 -13195.312500 -105.150246 -13198.242188 -105.115341 -13201.171875 -105.168617 -13204.101562 -105.193321 -13207.031250 -105.256210 -13209.960938 -105.238007 -13212.890625 -105.177193 -13215.820312 -105.092445 -13218.750000 -105.037582 -13221.679688 -105.086388 -13224.609375 -105.177460 -13227.539062 -105.384247 -13230.468750 -105.508339 -13233.398438 -105.546257 -13236.328125 -105.340675 -13239.257812 -105.101852 -13242.187500 -104.924637 -13245.117188 -104.864388 -13248.046875 -104.920547 -13250.976562 -105.017975 -13253.906250 -105.169228 -13256.835938 -105.279442 -13259.765625 -105.428368 -13262.695312 -105.454826 -13265.625000 -105.395706 -13268.554688 -105.251701 -13271.484375 -105.323967 -13274.414062 -105.555717 -13277.343750 -105.655411 -13280.273438 -105.521637 -13283.203125 -105.225479 -13286.132812 -105.039627 -13289.062500 -104.900536 -13291.992188 -104.800880 -13294.921875 -104.813423 -13297.851562 -105.232704 -13300.781250 -105.643333 -13303.710938 -105.475235 -13306.640625 -105.019798 -13309.570312 -104.839523 -13312.500000 -105.086792 -13315.429688 -105.449242 -13318.359375 -105.508270 -13321.289062 -105.318626 -13324.218750 -105.391510 -13327.148438 -105.460083 -13330.078125 -105.346855 -13333.007812 -105.156578 -13335.937500 -104.988022 -13338.867188 -104.943130 -13341.796875 -105.186478 -13344.726562 -105.562286 -13347.656250 -105.807137 -13350.585938 -105.806587 -13353.515625 -105.388695 -13356.445312 -105.095695 -13359.375000 -105.062286 -13362.304688 -105.178490 -13365.234375 -105.202492 -13368.164062 -105.239388 -13371.093750 -105.206375 -13374.023438 -105.155289 -13376.953125 -105.202927 -13379.882812 -105.235054 -13382.812500 -105.247681 -13385.742188 -105.180405 -13388.671875 -105.411667 -13391.601562 -105.491730 -13394.531250 -105.503975 -13397.460938 -105.509674 -13400.390625 -105.362267 -13403.320312 -105.252769 -13406.250000 -105.269615 -13409.179688 -105.324356 -13412.109375 -105.335655 -13415.039062 -105.344765 -13417.968750 -105.254517 -13420.898438 -105.210976 -13423.828125 -105.135422 -13426.757812 -105.132683 -13429.687500 -105.184593 -13432.617188 -105.270432 -13435.546875 -105.444382 -13438.476562 -105.561340 -13441.406250 -105.586151 -13444.335938 -105.565620 -13447.265625 -105.354095 -13450.195312 -105.254791 -13453.125000 -105.261650 -13456.054688 -105.373322 -13458.984375 -105.474815 -13461.914062 -105.503487 -13464.843750 -105.425972 -13467.773438 -105.314430 -13470.703125 -105.266609 -13473.632812 -105.312553 -13476.562500 -105.366135 -13479.492188 -105.421074 -13482.421875 -105.443268 -13485.351562 -105.437630 -13488.281250 -105.427528 -13491.210938 -105.384834 -13494.140625 -105.266678 -13497.070312 -105.110519 -13500.000000 -105.003014 -13502.929688 -105.039764 -13505.859375 -105.248993 -13508.789062 -105.548851 -13511.718750 -105.790512 -13514.648438 -105.813614 -13517.578125 -105.630653 -13520.507812 -105.385902 -13523.437500 -105.231796 -13526.367188 -105.206978 -13529.296875 -105.326805 -13532.226562 -105.488724 -13535.156250 -105.596725 -13538.085938 -105.594734 -13541.015625 -105.475784 -13543.945312 -105.306099 -13546.875000 -105.160805 -13549.804688 -105.095490 -13552.734375 -105.153152 -13555.664062 -105.330910 -13558.593750 -105.564499 -13561.523438 -105.733559 -13564.453125 -105.785576 -13567.382812 -105.645462 -13570.312500 -105.402298 -13573.242188 -105.199341 -13576.171875 -105.098289 -13579.101562 -105.124962 -13582.031250 -105.213852 -13584.960938 -105.298538 -13587.890625 -105.376251 -13590.820312 -105.459679 -13593.750000 -105.565392 -13596.679688 -105.636711 -13599.609375 -105.668358 -13602.539062 -105.638779 -13605.468750 -105.621704 -13608.398438 -105.697838 -13611.328125 -105.762154 -13614.257812 -105.742897 -13617.187500 -105.594795 -13620.117188 -105.269539 -13623.046875 -104.963593 -13625.976562 -104.861740 -13628.906250 -104.978928 -13631.835938 -105.258148 -13634.765625 -105.528183 -13637.695312 -105.671371 -13640.625000 -105.680672 -13643.554688 -105.596710 -13646.484375 -105.485466 -13649.414062 -105.375595 -13652.343750 -105.284004 -13655.273438 -105.253540 -13658.203125 -105.287613 -13661.132812 -105.391685 -13664.062500 -105.531830 -13666.992188 -105.685341 -13669.921875 -105.760963 -13672.851562 -105.745613 -13675.781250 -105.623528 -13678.710938 -105.452332 -13681.640625 -105.299957 -13684.570312 -105.225044 -13687.500000 -105.251373 -13690.429688 -105.332718 -13693.359375 -105.399109 -13696.289062 -105.419724 -13699.218750 -105.390640 -13702.148438 -105.381569 -13705.078125 -105.404297 -13708.007812 -105.482025 -13710.937500 -105.583237 -13713.867188 -105.645821 -13716.796875 -105.626503 -13719.726562 -105.566513 -13722.656250 -105.521873 -13725.585938 -105.510193 -13728.515625 -105.545349 -13731.445312 -105.581635 -13734.375000 -105.587624 -13737.304688 -105.529587 -13740.234375 -105.425568 -13743.164062 -105.316559 -13746.093750 -105.272377 -13749.023438 -105.311081 -13751.953125 -105.415901 -13754.882812 -105.536819 -13757.812500 -105.619881 -13760.742188 -105.641464 -13763.671875 -105.622398 -13766.601562 -105.577324 -13769.531250 -105.543655 -13772.460938 -105.523682 -13775.390625 -105.513550 -13778.320312 -105.526009 -13781.250000 -105.536484 -13784.179688 -105.540154 -13787.109375 -105.537651 -13790.039062 -105.539658 -13792.968750 -105.537422 -13795.898438 -105.529892 -13798.828125 -105.557983 -13801.757812 -105.557259 -13804.687500 -105.562363 -13807.617188 -105.564163 -13810.546875 -105.575752 -13813.476562 -105.586441 -13816.406250 -105.576889 -13819.335938 -105.564888 -13822.265625 -105.554138 -13825.195312 -105.549011 -13828.125000 -105.541443 -13831.054688 -105.530067 -13833.984375 -105.569664 -13836.914062 -105.565514 -13839.843750 -105.552826 -13842.773438 -105.538002 -13845.703125 -105.554001 -13848.632812 -105.600006 -13851.562500 -105.680534 -13854.492188 -105.758331 -13857.421875 -105.787949 -13860.351562 -105.736107 -13863.281250 -105.590981 -13866.210938 -105.409363 -13869.140625 -105.240906 -13872.070312 -105.131424 -13875.000000 -105.114769 -13877.929688 -105.195366 -13880.859375 -105.388512 -13883.789062 -105.663841 -13886.718750 -105.962311 -13889.648438 -106.180183 -13892.578125 -106.224968 -13895.507812 -106.028633 -13898.437500 -105.711555 -13901.367188 -105.410011 -13904.296875 -105.262070 -13907.226562 -105.319382 -13910.156250 -105.545998 -13913.085938 -105.800140 -13916.015625 -105.909256 -13918.945312 -105.785805 -13921.875000 -105.517540 -13924.804688 -105.290413 -13927.734375 -105.237671 -13930.664062 -105.388847 -13933.593750 -105.653908 -13936.523438 -105.860435 -13939.453125 -105.870354 -13942.382812 -105.685547 -13945.312500 -105.456734 -13948.242188 -105.335884 -13951.171875 -105.406479 -13954.101562 -105.616356 -13957.031250 -105.830307 -13959.960938 -105.919098 -13962.890625 -105.844719 -13965.820312 -105.673294 -13968.750000 -105.538841 -13971.679688 -105.482536 -13974.609375 -105.545906 -13977.539062 -105.644920 -13980.468750 -105.720596 -13983.398438 -105.718140 -13986.328125 -105.668602 -13989.257812 -105.625885 -13992.187500 -105.607689 -13995.117188 -105.625534 -13998.046875 -105.631233 -14000.976562 -105.651733 -14003.906250 -105.645378 -14006.835938 -105.627777 -14009.765625 -105.655663 -14012.695312 -105.665077 -14015.625000 -105.690155 -14018.554688 -105.698746 -14021.484375 -105.684967 -14024.414062 -105.660797 -14027.343750 -105.654579 -14030.273438 -105.645226 -14033.203125 -105.664108 -14036.132812 -105.675102 -14039.062500 -105.681892 -14041.992188 -105.685150 -14044.921875 -105.688652 -14047.851562 -105.697083 -14050.781250 -105.704964 -14053.710938 -105.711273 -14056.640625 -105.713928 -14059.570312 -105.700089 -14062.500000 -105.683876 -14065.429688 -105.667244 -14068.359375 -105.657516 -14071.289062 -105.645493 -14074.218750 -105.633018 -14077.148438 -105.625206 -14080.078125 -105.622650 -14083.007812 -105.627487 -14085.937500 -105.641716 -14088.867188 -105.659706 -14091.796875 -105.679123 -14094.726562 -105.697525 -14097.656250 -105.714287 -14100.585938 -105.727417 -14103.515625 -105.737473 -14106.445312 -105.735985 -14109.375000 -105.731041 -14112.304688 -105.713264 -14115.234375 -105.692131 -14118.164062 -105.675865 -14121.093750 -105.672249 -14124.023438 -105.685074 -14126.953125 -105.707031 -14129.882812 -105.728836 -14132.812500 -105.745850 -14135.742188 -105.758575 -14138.671875 -105.756790 -14141.601562 -105.755295 -14144.531250 -105.744438 -14147.460938 -105.726814 -14150.390625 -105.712860 -14153.320312 -105.709473 -14156.250000 -105.711861 -14159.179688 -105.715218 -14162.109375 -105.728699 -14165.039062 -105.732025 -14167.968750 -105.741051 -14170.898438 -105.744377 -14173.828125 -105.745285 -14176.757812 -105.747154 -14179.687500 -105.750870 -14182.617188 -105.757240 -14185.546875 -105.761063 -14188.476562 -105.760544 -14191.406250 -105.757256 -14194.335938 -105.751625 -14197.265625 -105.742485 -14200.195312 -105.733429 -14203.125000 -105.733162 -14206.054688 -105.728561 -14208.984375 -105.737846 -14211.914062 -105.758904 -14214.843750 -105.780914 -14217.773438 -105.806091 -14220.703125 -105.820366 -14223.632812 -105.820580 -14226.562500 -105.810272 -14229.492188 -105.790649 -14232.421875 -105.762260 -14235.351562 -105.734467 -14238.281250 -105.718361 -14241.210938 -105.703453 -14244.140625 -105.697197 -14247.070312 -105.699379 -14250.000000 -105.705177 -14252.929688 -105.713646 -14255.859375 -105.722603 -14258.789062 -105.728233 -14261.718750 -105.733528 -14264.648438 -105.742271 -14267.578125 -105.767044 -14270.507812 -105.801201 -14273.437500 -105.841194 -14276.367188 -105.884743 -14279.296875 -105.940140 -14282.226562 -105.978577 -14285.156250 -105.996773 -14288.085938 -105.986832 -14291.015625 -105.956497 -14293.945312 -105.901619 -14296.875000 -105.819939 -14299.804688 -105.730606 -14302.734375 -105.648430 -14305.664062 -105.587593 -14308.593750 -105.550598 -14311.523438 -105.558228 -14314.453125 -105.593056 -14317.382812 -105.654686 -14320.312500 -105.731361 -14323.242188 -105.821938 -14326.171875 -105.914673 -14329.101562 -105.983788 -14332.031250 -106.030464 -14334.960938 -106.038849 -14337.890625 -106.010895 -14340.820312 -105.971901 -14343.750000 -105.927994 -14346.679688 -105.880814 -14349.609375 -105.828003 -14352.539062 -105.806847 -14355.468750 -105.800827 -14358.398438 -105.795380 -14361.328125 -105.788986 -14364.257812 -105.805695 -14367.187500 -105.829407 -14370.117188 -105.838196 -14373.046875 -105.848076 -14375.976562 -105.853851 -14378.906250 -105.861671 -14381.835938 -105.866020 -14384.765625 -105.865761 -14387.695312 -105.854134 -14390.625000 -105.830833 -14393.554688 -105.776794 -14396.484375 -105.752136 -14399.414062 -105.738953 -14402.343750 -105.745529 -14405.273438 -105.754333 -14408.203125 -105.773232 -14411.132812 -105.829651 -14414.062500 -105.894920 -14416.992188 -105.982941 -14419.921875 -106.064850 -14422.851562 -106.120560 -14425.781250 -106.130608 -14428.710938 -106.112762 -14431.640625 -106.045998 -14434.570312 -105.941704 -14437.500000 -105.831619 -14440.429688 -105.747650 -14443.359375 -105.682205 -14446.289062 -105.612831 -14449.218750 -105.585167 -14452.148438 -105.651329 -14455.078125 -105.751465 -14458.007812 -105.890205 -14460.937500 -106.022820 -14463.867188 -106.118912 -14466.796875 -106.166077 -14469.726562 -106.178154 -14472.656250 -106.202690 -14475.585938 -106.196411 -14478.515625 -106.090256 -14481.445312 -105.919632 -14484.375000 -105.666992 -14487.304688 -105.511696 -14490.234375 -105.434975 -14493.164062 -105.528992 -14496.093750 -105.768364 -14499.023438 -106.038345 -14501.953125 -106.211975 -14504.882812 -106.207474 -14507.812500 -105.997406 -14510.742188 -105.768837 -14513.671875 -105.689056 -14516.601562 -105.758003 -14519.531250 -105.989799 -14522.460938 -106.253990 -14525.390625 -106.391304 -14528.320312 -106.265289 -14531.250000 -106.031944 -14534.179688 -105.699776 -14537.109375 -105.527008 -14540.039062 -105.540810 -14542.968750 -105.742142 -14545.898438 -106.050682 -14548.828125 -106.314865 -14551.757812 -106.364243 -14554.687500 -106.211105 -14557.617188 -105.869720 -14560.546875 -105.664062 -14563.476562 -105.545769 -14566.406250 -105.691818 -14569.335938 -105.879013 -14572.265625 -106.216324 -14575.195312 -106.319511 -14578.125000 -106.263046 -14581.054688 -106.037613 -14583.984375 -105.806053 -14586.914062 -105.722946 -14589.843750 -105.754906 -14592.773438 -105.984749 -14595.703125 -106.051559 -14598.632812 -106.292625 -14601.562500 -106.129745 -14604.492188 -106.077034 -14607.421875 -105.910599 -14610.351562 -105.966515 -14613.281250 -105.845726 -14616.210938 -105.861702 -14619.140625 -105.834854 -14622.070312 -105.798340 -14625.000000 -105.856125 -14627.929688 -105.873550 -14630.859375 -106.033699 -14633.789062 -106.105789 -14636.718750 -106.227379 -14639.648438 -106.258621 -14642.578125 -106.212891 -14645.507812 -106.113739 -14648.437500 -106.066628 -14651.367188 -106.067291 -14654.296875 -106.019592 -14657.226562 -106.037140 -14660.156250 -106.027435 -14663.085938 -105.972816 -14666.015625 -105.896767 -14668.945312 -105.780045 -14671.875000 -105.705521 -14674.804688 -105.681007 -14677.734375 -105.751686 -14680.664062 -105.894623 -14683.593750 -106.361183 -14686.523438 -106.635406 -14689.453125 -106.650368 -14692.382812 -106.503471 -14695.312500 -106.539200 -14698.242188 -106.160637 -14701.171875 -105.845329 -14704.101562 -105.593498 -14707.031250 -105.519753 -14709.960938 -105.568214 -14712.890625 -105.717850 -14715.820312 -105.954506 -14718.750000 -106.146400 -14721.679688 -106.206947 -14724.609375 -106.180206 -14727.539062 -106.232071 -14730.468750 -106.069786 -14733.398438 -106.028961 -14736.328125 -106.036270 -14739.257812 -106.191963 -14742.187500 -106.466545 -14745.117188 -106.345306 -14748.046875 -106.163498 -14750.976562 -105.848244 -14753.906250 -105.631821 -14756.835938 -105.661461 -14759.765625 -105.973190 -14762.695312 -106.420204 -14765.625000 -106.399864 -14768.554688 -106.816170 -14771.484375 -106.924026 -14774.414062 -106.444633 -14777.343750 -105.597786 -14780.273438 -105.523582 -14783.203125 -105.843269 -14786.132812 -105.910080 -14789.062500 -105.983795 -14791.992188 -105.921677 -14794.921875 -105.911179 -14797.851562 -106.022957 -14800.781250 -106.360489 -14803.710938 -106.583344 -14806.640625 -106.765724 -14809.570312 -106.208443 -14812.500000 -106.746414 -14815.429688 -106.549026 -14818.359375 -106.501007 -14821.289062 -105.782028 -14824.218750 -105.380432 -14827.148438 -105.643723 -14830.078125 -105.230614 -14833.007812 -105.827034 -14835.937500 -106.325417 -14838.867188 -106.403664 -14841.796875 -106.126488 -14844.726562 -106.383858 -14847.656250 -106.647240 -14850.585938 -106.545464 -14853.515625 -105.488136 -14856.445312 -105.949402 -14859.375000 -104.976616 -14862.304688 -105.551811 -14865.234375 -104.547279 -14868.164062 -106.760284 -14871.093750 -106.934143 -14874.023438 -106.524323 -14876.953125 -105.649231 -14879.882812 -105.193253 -14882.812500 -106.459236 -14885.742188 -106.365105 -14888.671875 -106.498734 -14891.601562 -105.690697 -14894.531250 -105.576500 -14897.460938 -106.625366 -14900.390625 -105.874039 -14903.320312 -106.259842 -14906.250000 -106.721649 -14909.179688 -105.190331 -14912.109375 -106.731316 -14915.039062 -106.062920 -14917.968750 -106.066086 -14920.898438 -104.900978 -14923.828125 -106.379837 -14926.757812 -106.419792 -14929.687500 -106.452042 -14932.617188 -104.599693 -14935.546875 -107.593132 -14938.476562 -105.206047 -14941.406250 -105.105515 -14944.335938 -106.317757 -14947.265625 -106.202820 -14950.195312 -105.444984 -14953.125000 -106.395042 -14956.054688 -105.730881 -14958.984375 -108.372688 -14961.914062 -107.168297 -14964.843750 -105.786041 -14967.773438 -108.025444 -14970.703125 -107.361877 -14973.632812 -107.289894 -14976.562500 -108.656563 -14979.492188 -108.073692 -14982.421875 -104.360374 -14985.351562 -109.573647 -14988.281250 -100.664513 -14991.210938 -100.627190 -14994.140625 -102.676666 -14997.070312 -100.021881 -15000.000000 -99.809860 -15002.929688 -97.821060 -15005.859375 -103.437256 -15008.789062 -97.703903 -15011.718750 -98.062202 -15014.648438 -103.254402 -15017.578125 -96.292618 -15020.507812 -96.113243 -15023.437500 -98.064323 -15026.367188 -95.581726 -15029.296875 -95.613647 -15032.226562 -98.651886 -15035.156250 -98.870178 -15038.085938 -100.941971 -15041.015625 -101.117668 -15043.945312 -100.016144 -15046.875000 -97.784363 -15049.804688 -98.638824 -15052.734375 -101.872566 -15055.664062 -101.798691 -15058.593750 -98.369415 -15061.523438 -101.274567 -15064.453125 -99.721329 -15067.382812 -100.565491 -15070.312500 -100.101120 -15073.242188 -98.879280 -15076.171875 -101.063438 -15079.101562 -96.792320 -15082.031250 -97.835190 -15084.960938 -101.135017 -15087.890625 -97.604431 -15090.820312 -97.464058 -15093.750000 -94.994934 -15096.679688 -95.703064 -15099.609375 -93.833160 -15102.539062 -96.151711 -15105.468750 -89.640785 -15108.398438 -89.818825 -15111.328125 -90.371078 -15114.257812 -86.754341 -15117.187500 -95.633102 -15120.117188 -95.683624 -15123.046875 -98.156921 -15125.976562 -100.047188 -15128.906250 -93.832787 -15131.835938 -96.319725 -15134.765625 -99.189774 -15137.695312 -97.694420 -15140.625000 -97.686501 -15143.554688 -97.669365 -15146.484375 -96.995224 -15149.414062 -97.655510 -15152.343750 -99.031029 -15155.273438 -100.442841 -15158.203125 -99.396149 -15161.132812 -103.267326 -15164.062500 -102.228043 -15166.992188 -98.493538 -15169.921875 -96.880318 -15172.851562 -101.231750 -15175.781250 -100.619873 -15178.710938 -99.750824 -15181.640625 -99.805458 -15184.570312 -102.527313 -15187.500000 -102.394302 -15190.429688 -104.565239 -15193.359375 -100.372467 -15196.289062 -106.223877 -15199.218750 -105.498016 -15202.148438 -104.375725 -15205.078125 -104.337624 -15208.007812 -104.070984 -15210.937500 -103.236626 -15213.867188 -104.619530 -15216.796875 -105.376602 -15219.726562 -104.449570 -15222.656250 -103.673027 -15225.585938 -103.379074 -15228.515625 -103.511787 -15231.445312 -105.321503 -15234.375000 -106.392715 -15237.304688 -107.821045 -15240.234375 -104.899895 -15243.164062 -101.283920 -15246.093750 -99.964386 -15249.023438 -102.506554 -15251.953125 -101.152504 -15254.882812 -101.220543 -15257.812500 -100.550636 -15260.742188 -99.104546 -15263.671875 -99.695786 -15266.601562 -102.104012 -15269.531250 -104.697388 -15272.460938 -105.458862 -15275.390625 -104.345985 -15278.320312 -102.966476 -15281.250000 -105.166290 -15284.179688 -105.679695 -15287.109375 -105.894218 -15290.039062 -104.185852 -15292.968750 -104.006149 -15295.898438 -105.055260 -15298.828125 -105.334938 -15301.757812 -105.885674 -15304.687500 -104.645119 -15307.617188 -104.561829 -15310.546875 -102.883133 -15313.476562 -103.286247 -15316.406250 -103.433907 -15319.335938 -103.581551 -15322.265625 -103.503090 -15325.195312 -103.410652 -15328.125000 -103.775429 -15331.054688 -103.450500 -15333.984375 -103.720573 -15336.914062 -103.700768 -15339.843750 -104.378769 -15342.773438 -104.714645 -15345.703125 -104.957451 -15348.632812 -105.436249 -15351.562500 -105.708908 -15354.492188 -105.442970 -15357.421875 -104.676132 -15360.351562 -105.777939 -15363.281250 -106.107506 -15366.210938 -106.608521 -15369.140625 -106.200966 -15372.070312 -106.080124 -15375.000000 -106.379120 -15377.929688 -106.665665 -15380.859375 -106.031303 -15383.789062 -104.678276 -15386.718750 -104.720062 -15389.648438 -104.858185 -15392.578125 -104.164299 -15395.507812 -102.701111 -15398.437500 -102.295555 -15401.367188 -101.822853 -15404.296875 -100.859779 -15407.226562 -100.855530 -15410.156250 -102.319969 -15413.085938 -103.446770 -15416.015625 -103.770576 -15418.945312 -104.318123 -15421.875000 -104.994476 -15424.804688 -104.842255 -15427.734375 -105.960785 -15430.664062 -107.635658 -15433.593750 -107.360092 -15436.523438 -107.641830 -15439.453125 -107.793007 -15442.382812 -107.968765 -15445.312500 -107.759583 -15448.242188 -107.699287 -15451.171875 -107.141548 -15454.101562 -106.717117 -15457.031250 -106.125702 -15459.960938 -105.454651 -15462.890625 -105.256226 -15465.820312 -104.658241 -15468.750000 -104.389709 -15471.679688 -104.101936 -15474.609375 -104.172234 -15477.539062 -104.435860 -15480.468750 -104.589851 -15483.398438 -105.072296 -15486.328125 -105.057053 -15489.257812 -105.469215 -15492.187500 -105.514267 -15495.117188 -105.603836 -15498.046875 -105.560371 -15500.976562 -105.724030 -15503.906250 -105.523613 -15506.835938 -105.592056 -15509.765625 -105.539879 -15512.695312 -105.490547 -15515.625000 -105.634453 -15518.554688 -105.564583 -15521.484375 -105.718636 -15524.414062 -105.321915 -15527.343750 -105.828049 -15530.273438 -105.474823 -15533.203125 -105.790436 -15536.132812 -105.599190 -15539.062500 -105.676620 -15541.992188 -105.889412 -15544.921875 -105.676598 -15547.851562 -105.975754 -15550.781250 -105.807434 -15553.710938 -105.925423 -15556.640625 -105.840050 -15559.570312 -105.926941 -15562.500000 -105.912575 -15565.429688 -106.028793 -15568.359375 -105.909409 -15571.289062 -105.925606 -15574.218750 -105.973785 -15577.148438 -105.850281 -15580.078125 -105.974037 -15583.007812 -105.819817 -15585.937500 -106.004776 -15588.867188 -105.967628 -15591.796875 -106.041634 -15594.726562 -106.053703 -15597.656250 -106.038864 -15600.585938 -106.052605 -15603.515625 -106.051796 -15606.445312 -106.017616 -15609.375000 -105.995361 -15612.304688 -106.063660 -15615.234375 -106.024643 -15618.164062 -106.160309 -15621.093750 -106.075378 -15624.023438 -106.180878 -15626.953125 -106.118515 -15629.882812 -106.178535 -15632.812500 -106.125214 -15635.742188 -106.145844 -15638.671875 -106.141472 -15641.601562 -106.026299 -15644.531250 -106.088371 -15647.460938 -106.054710 -15650.390625 -106.139908 -15653.320312 -106.049736 -15656.250000 -106.104355 -15659.179688 -106.113785 -15662.109375 -106.122665 -15665.039062 -106.166138 -15667.968750 -106.117554 -15670.898438 -106.212364 -15673.828125 -106.129128 -15676.757812 -106.209206 -15679.687500 -106.140999 -15682.617188 -106.172997 -15685.546875 -106.151428 -15688.476562 -106.126663 -15691.406250 -106.180725 -15694.335938 -106.124939 -15697.265625 -106.158272 -15700.195312 -106.081902 -15703.125000 -106.162468 -15706.054688 -106.114960 -15708.984375 -106.166435 -15711.914062 -106.146561 -15714.843750 -106.172302 -15717.773438 -106.174576 -15720.703125 -106.192322 -15723.632812 -106.226341 -15726.562500 -106.195587 -15729.492188 -106.216660 -15732.421875 -106.201378 -15735.351562 -106.240456 -15738.281250 -106.208000 -15741.210938 -106.223824 -15744.140625 -106.214149 -15747.070312 -106.209953 -15750.000000 -106.211891 -15752.929688 -106.219604 -15755.859375 -106.213303 -15758.789062 -106.226379 -15761.718750 -106.221252 -15764.648438 -106.211426 -15767.578125 -106.224670 -15770.507812 -106.185730 -15773.437500 -106.231789 -15776.367188 -106.181641 -15779.296875 -106.234398 -15782.226562 -106.258896 -15785.156250 -106.227585 -15788.085938 -106.320923 -15791.015625 -106.222961 -15793.945312 -106.313713 -15796.875000 -106.227577 -15799.804688 -106.211510 -15802.734375 -106.219925 -15805.664062 -106.091522 -15808.593750 -106.239937 -15811.523438 -106.114456 -15814.453125 -106.227036 -15817.382812 -106.193176 -15820.312500 -106.222832 -15823.242188 -106.324974 -15826.171875 -106.225227 -15829.101562 -106.360214 -15832.031250 -106.247726 -15834.960938 -106.304504 -15837.890625 -106.263939 -15840.820312 -106.229698 -15843.750000 -106.270348 -15846.679688 -106.212318 -15849.609375 -106.264595 -15852.539062 -106.225777 -15855.468750 -106.278999 -15858.398438 -106.281242 -15861.328125 -106.263176 -15864.257812 -106.287300 -15867.187500 -106.279526 -15870.117188 -106.290146 -15873.046875 -106.289398 -15875.976562 -106.300507 -15878.906250 -106.298752 -15881.835938 -106.308617 -15884.765625 -106.303268 -15887.695312 -106.313141 -15890.625000 -106.296036 -15893.554688 -106.299438 -15896.484375 -106.296196 -15899.414062 -106.282898 -15902.343750 -106.304192 -15905.273438 -106.299217 -15908.203125 -106.308098 -15911.132812 -106.308098 -15914.062500 -106.311882 -15916.992188 -106.323402 -15919.921875 -106.317635 -15922.851562 -106.318520 -15925.781250 -106.322144 -15928.710938 -106.321846 -15931.640625 -106.331764 -15934.570312 -106.324753 -15937.500000 -106.318527 -15940.429688 -106.322922 -15943.359375 -106.332664 -15946.289062 -106.330292 -15949.218750 -106.326172 -15952.148438 -106.330170 -15955.078125 -106.321571 -15958.007812 -106.332367 -15960.937500 -106.325211 -15963.867188 -106.331482 -15966.796875 -106.331734 -15969.726562 -106.333809 -15972.656250 -106.337212 -15975.585938 -106.347565 -15978.515625 -106.351288 -15981.445312 -106.345940 -15984.375000 -106.346107 -15987.304688 -106.351494 -15990.234375 -106.329185 -15993.164062 -106.352547 -15996.093750 -106.336800 -15999.023438 -106.343765 -16001.953125 -106.374878 -16004.882812 -106.373650 -16007.812500 -106.352936 -16010.742188 -106.362099 -16013.671875 -106.362030 -16016.601562 -106.356232 -16019.531250 -106.371552 -16022.460938 -106.369873 -16025.390625 -106.363892 -16028.320312 -106.373291 -16031.250000 -106.350700 -16034.179688 -106.364876 -16037.109375 -106.380569 -16040.039062 -106.383270 -16042.968750 -106.388618 -16045.898438 -106.395691 -16048.828125 -106.397568 -16051.757812 -106.399681 -16054.687500 -106.388908 -16057.617188 -106.385704 -16060.546875 -106.390213 -16063.476562 -106.386772 -16066.406250 -106.391678 -16069.335938 -106.394615 -16072.265625 -106.389946 -16075.195312 -106.388496 -16078.125000 -106.393387 -16081.054688 -106.397202 -16083.984375 -106.394028 -16086.914062 -106.390686 -16089.843750 -106.395790 -16092.773438 -106.397354 -16095.703125 -106.398628 -16098.632812 -106.401718 -16101.562500 -106.402870 -16104.492188 -106.410248 -16107.421875 -106.405350 -16110.351562 -106.410011 -16113.281250 -106.412033 -16116.210938 -106.412331 -16119.140625 -106.411972 -16122.070312 -106.410782 -16125.000000 -106.416138 -16127.929688 -106.413422 -16130.859375 -106.414070 -16133.789062 -106.415207 -16136.718750 -106.416092 -16139.648438 -106.417557 -16142.578125 -106.417900 -16145.507812 -106.416946 -16148.437500 -106.420738 -16151.367188 -106.421608 -16154.296875 -106.425041 -16157.226562 -106.425110 -16160.156250 -106.425766 -16163.085938 -106.424973 -16166.015625 -106.427620 -16168.945312 -106.428871 -16171.875000 -106.432846 -16174.804688 -106.430832 -16177.734375 -106.435310 -16180.664062 -106.434425 -16183.593750 -106.433342 -16186.523438 -106.434792 -16189.453125 -106.435371 -16192.382812 -106.436539 -16195.312500 -106.440834 -16198.242188 -106.442177 -16201.171875 -106.444260 -16204.101562 -106.438805 -16207.031250 -106.444199 -16209.960938 -106.445206 -16212.890625 -106.450211 -16215.820312 -106.447647 -16218.750000 -106.451736 -16221.679688 -106.449318 -16224.609375 -106.447090 -16227.539062 -106.452652 -16230.468750 -106.451813 -16233.398438 -106.457619 -16236.328125 -106.452217 -16239.257812 -106.457184 -16242.187500 -106.454613 -16245.117188 -106.459740 -16248.046875 -106.461891 -16250.976562 -106.461441 -16253.906250 -106.463547 -16256.835938 -106.464813 -16259.765625 -106.464035 -16262.695312 -106.466988 -16265.625000 -106.467766 -16268.554688 -106.474541 -16271.484375 -106.471634 -16274.414062 -106.472557 -16277.343750 -106.466675 -16280.273438 -106.469337 -16283.203125 -106.475563 -16286.132812 -106.473244 -16289.062500 -106.478264 -16291.992188 -106.475990 -16294.921875 -106.481033 -16297.851562 -106.482376 -16300.781250 -106.485321 -16303.710938 -106.487038 -16306.640625 -106.469147 -16309.570312 -106.480545 -16312.500000 -106.483009 -16315.429688 -106.486099 -16318.359375 -106.483559 -16321.289062 -106.485306 -16324.218750 -106.485733 -16327.148438 -106.496979 -16330.078125 -106.489555 -16333.007812 -106.503983 -16335.937500 -106.485039 -16338.867188 -106.492188 -16341.796875 -106.497108 -16344.726562 -106.499237 -16347.656250 -106.502663 -16350.585938 -106.505173 -16353.515625 -106.498085 -16356.445312 -106.505600 -16359.375000 -106.506500 -16362.304688 -106.505852 -16365.234375 -106.506729 -16368.164062 -106.509705 -16371.093750 -106.509506 -16374.023438 -106.510864 -16376.953125 -106.511497 -16379.882812 -106.520363 -16382.812500 -106.515617 -16385.742188 -106.547478 -16388.671875 -106.584663 -16391.601562 -106.511124 -16394.531250 -106.484238 -16397.460938 -106.504982 -16400.390625 -106.521225 -16403.320312 -106.538223 -16406.250000 -106.529678 -16409.179688 -106.529785 -16412.109375 -106.531128 -16415.039062 -106.540184 -16417.968750 -106.533806 -16420.898438 -106.525482 -16423.828125 -106.536240 -16426.757812 -106.532082 -16429.687500 -106.547768 -16432.617188 -106.541183 -16435.546875 -106.534050 -16438.476562 -106.561317 -16441.406250 -106.530075 -16444.335938 -106.470970 -16447.265625 -106.559113 -16450.195312 -106.561630 -16453.125000 -106.557037 -16456.054688 -106.545189 -16458.984375 -106.561432 -16461.914062 -106.547150 -16464.843750 -106.540001 -16467.773438 -106.530190 -16470.703125 -106.543106 -16473.632812 -106.503952 -16476.562500 -106.537025 -16479.492188 -106.537598 -16482.421875 -106.550362 -16485.351562 -106.551590 -16488.281250 -106.542717 -16491.210938 -106.534981 -16494.140625 -106.550095 -16497.070312 -106.545242 -16500.000000 -106.547806 -16502.929688 -106.550484 -16505.859375 -106.553528 -16508.789062 -106.562996 -16511.718750 -106.559784 -16514.648438 -106.551399 -16517.578125 -106.554642 -16520.507812 -106.562592 -16523.437500 -106.557388 -16526.367188 -106.560425 -16529.296875 -106.563782 -16532.226562 -106.570724 -16535.156250 -106.569748 -16538.085938 -106.562828 -16541.015625 -106.559830 -16543.945312 -106.568977 -16546.875000 -106.564095 -16549.804688 -106.566803 -16552.734375 -106.565788 -16555.664062 -106.590355 -16558.593750 -106.569092 -16561.523438 -106.564400 -16564.453125 -106.569145 -16567.382812 -106.570290 -16570.312500 -106.570702 -16573.242188 -106.575638 -16576.171875 -106.575775 -16579.101562 -106.572617 -16582.031250 -106.576965 -16584.960938 -106.579575 -16587.890625 -106.580811 -16590.820312 -106.580956 -16593.750000 -106.584793 -16596.679688 -106.601883 -16599.609375 -106.594009 -16602.539062 -106.590714 -16605.468750 -106.599648 -16608.398438 -106.547150 -16611.328125 -106.529205 -16614.257812 -106.624390 -16617.187500 -106.599617 -16620.117188 -106.584007 -16623.046875 -106.608994 -16625.976562 -106.600761 -16628.906250 -106.601952 -16631.835938 -106.591766 -16634.765625 -106.597908 -16637.695312 -106.603729 -16640.625000 -106.595940 -16643.554688 -106.602371 -16646.484375 -106.615166 -16649.414062 -106.598083 -16652.343750 -106.599869 -16655.273438 -106.607872 -16658.203125 -106.607918 -16661.132812 -106.615952 -16664.062500 -106.624146 -16666.992188 -106.599274 -16669.921875 -106.616989 -16672.851562 -106.609192 -16675.781250 -106.618721 -16678.710938 -106.620468 -16681.640625 -106.619766 -16684.570312 -106.615135 -16687.500000 -106.618538 -16690.429688 -106.627342 -16693.359375 -106.625946 -16696.289062 -106.616165 -16699.218750 -106.609650 -16702.148438 -106.621666 -16705.078125 -106.618851 -16708.007812 -106.621597 -16710.937500 -106.622360 -16713.867188 -106.624016 -16716.796875 -106.626900 -16719.726562 -106.628716 -16722.656250 -106.629677 -16725.585938 -106.626038 -16728.515625 -106.636986 -16731.445312 -106.638138 -16734.375000 -106.632851 -16737.304688 -106.635132 -16740.234375 -106.637337 -16743.164062 -106.631958 -16746.093750 -106.640892 -16749.023438 -106.633934 -16751.953125 -106.640945 -16754.882812 -106.642944 -16757.812500 -106.627213 -16760.742188 -106.659439 -16763.671875 -106.622543 -16766.601562 -106.643349 -16769.531250 -106.634483 -16772.460938 -106.640602 -16775.390625 -106.652901 -16778.320312 -106.646904 -16781.250000 -106.653023 -16784.179688 -106.656784 -16787.109375 -106.662315 -16790.039062 -106.654770 -16792.968750 -106.658218 -16795.898438 -106.664696 -16798.828125 -106.644455 -16801.757812 -106.653854 -16804.687500 -106.655083 -16807.617188 -106.658043 -16810.546875 -106.657234 -16813.476562 -106.654243 -16816.406250 -106.657959 -16819.335938 -106.660912 -16822.265625 -106.660828 -16825.195312 -106.661400 -16828.125000 -106.659561 -16831.054688 -106.686417 -16833.984375 -106.660522 -16836.914062 -106.668266 -16839.843750 -106.667152 -16842.773438 -106.668930 -16845.703125 -106.665169 -16848.632812 -106.672485 -16851.562500 -106.669304 -16854.492188 -106.684196 -16857.421875 -106.673599 -16860.351562 -106.671417 -16863.281250 -106.678978 -16866.210938 -106.678444 -16869.140625 -106.675957 -16872.070312 -106.676483 -16875.000000 -106.671875 -16877.929688 -106.683418 -16880.859375 -106.697685 -16883.789062 -106.689659 -16886.718750 -106.681145 -16889.648438 -106.663147 -16892.578125 -106.696609 -16895.507812 -106.659241 -16898.437500 -106.679146 -16901.367188 -106.683167 -16904.296875 -106.686661 -16907.226562 -106.685287 -16910.156250 -106.688087 -16913.085938 -106.688293 -16916.015625 -106.693237 -16918.945312 -106.692154 -16921.875000 -106.692078 -16924.804688 -106.692253 -16927.734375 -106.685493 -16930.664062 -106.698845 -16933.593750 -106.697861 -16936.523438 -106.701401 -16939.453125 -106.700584 -16942.382812 -106.700500 -16945.312500 -106.702568 -16948.242188 -106.700203 -16951.171875 -106.701363 -16954.101562 -106.699821 -16957.031250 -106.702850 -16959.960938 -106.706177 -16962.890625 -106.708199 -16965.820312 -106.710220 -16968.750000 -106.698975 -16971.679688 -106.709671 -16974.609375 -106.709366 -16977.539062 -106.714676 -16980.468750 -106.712364 -16983.398438 -106.711021 -16986.328125 -106.715401 -16989.257812 -106.711014 -16992.187500 -106.719894 -16995.117188 -106.714142 -16998.046875 -106.739731 -17000.976562 -106.718903 -17003.906250 -106.717888 -17006.835938 -106.723770 -17009.765625 -106.717926 -17012.695312 -106.719765 -17015.625000 -106.720634 -17018.554688 -106.722069 -17021.484375 -106.724373 -17024.414062 -106.728966 -17027.343750 -106.723343 -17030.273438 -106.732079 -17033.203125 -106.724831 -17036.132812 -106.729576 -17039.062500 -106.731133 -17041.992188 -106.730423 -17044.921875 -106.730385 -17047.851562 -106.729141 -17050.781250 -106.732857 -17053.710938 -106.735291 -17056.640625 -106.735130 -17059.570312 -106.735245 -17062.500000 -106.738205 -17065.429688 -106.737373 -17068.359375 -106.740219 -17071.289062 -106.739105 -17074.218750 -106.741936 -17077.148438 -106.742767 -17080.078125 -106.743614 -17083.007812 -106.743858 -17085.937500 -106.744087 -17088.867188 -106.746712 -17091.796875 -106.747475 -17094.726562 -106.748093 -17097.656250 -106.748627 -17100.585938 -106.749352 -17103.515625 -106.751312 -17106.445312 -106.752075 -17109.375000 -106.750473 -17112.304688 -106.752151 -17115.234375 -106.754181 -17118.164062 -106.753365 -17121.093750 -106.756439 -17124.023438 -106.757431 -17126.953125 -106.756783 -17129.882812 -106.757652 -17132.812500 -106.759003 -17135.742188 -106.760033 -17138.671875 -106.759666 -17141.601562 -106.762375 -17144.531250 -106.762199 -17147.460938 -106.766197 -17150.390625 -106.765862 -17153.320312 -106.764679 -17156.250000 -106.767975 -17159.179688 -106.771408 -17162.109375 -106.770004 -17165.039062 -106.763451 -17167.968750 -106.769096 -17170.898438 -106.772552 -17173.828125 -106.774033 -17176.757812 -106.773567 -17179.687500 -106.776131 -17182.617188 -106.773605 -17185.546875 -106.776649 -17188.476562 -106.777489 -17191.406250 -106.777748 -17194.335938 -106.775406 -17197.265625 -106.780144 -17200.195312 -106.782776 -17203.125000 -106.783264 -17206.054688 -106.787888 -17208.984375 -106.779900 -17211.914062 -106.780464 -17214.843750 -106.789589 -17217.773438 -106.784805 -17220.703125 -106.784737 -17223.632812 -106.784470 -17226.562500 -106.787476 -17229.492188 -106.787178 -17232.421875 -106.787376 -17235.351562 -106.788803 -17238.281250 -106.788811 -17241.210938 -106.791542 -17244.140625 -106.794151 -17247.070312 -106.793983 -17250.000000 -106.794350 -17252.929688 -106.795151 -17255.859375 -106.795578 -17258.789062 -106.796661 -17261.718750 -106.797615 -17264.648438 -106.799210 -17267.578125 -106.799286 -17270.507812 -106.800934 -17273.437500 -106.799553 -17276.367188 -106.799530 -17279.296875 -106.802597 -17282.226562 -106.805405 -17285.156250 -106.811882 -17288.085938 -106.805389 -17291.015625 -106.804535 -17293.945312 -106.811836 -17296.875000 -106.817856 -17299.804688 -106.810303 -17302.734375 -106.807739 -17305.664062 -106.809326 -17308.593750 -106.813629 -17311.523438 -106.813896 -17314.453125 -106.814224 -17317.382812 -106.816429 -17320.312500 -106.816399 -17323.242188 -106.813957 -17326.171875 -106.817841 -17329.101562 -106.819206 -17332.031250 -106.819504 -17334.960938 -106.811378 -17337.890625 -106.824715 -17340.820312 -106.824486 -17343.750000 -106.827469 -17346.679688 -106.824326 -17349.609375 -106.826668 -17352.539062 -106.826477 -17355.468750 -106.829506 -17358.398438 -106.828316 -17361.328125 -106.827957 -17364.257812 -106.827812 -17367.187500 -106.829346 -17370.117188 -106.831772 -17373.046875 -106.830070 -17375.976562 -106.830772 -17378.906250 -106.831589 -17381.835938 -106.832550 -17384.765625 -106.830940 -17387.695312 -106.833496 -17390.625000 -106.837364 -17393.554688 -106.835999 -17396.484375 -106.836266 -17399.414062 -106.839081 -17402.343750 -106.838402 -17405.273438 -106.840332 -17408.203125 -106.840469 -17411.132812 -106.841255 -17414.062500 -106.843353 -17416.992188 -106.843330 -17419.921875 -106.843994 -17422.851562 -106.845146 -17425.781250 -106.845451 -17428.710938 -106.846466 -17431.640625 -106.847389 -17434.570312 -106.849960 -17437.500000 -106.847290 -17440.429688 -106.849197 -17443.359375 -106.849213 -17446.289062 -106.847740 -17449.218750 -106.848717 -17452.148438 -106.848259 -17455.078125 -106.851624 -17458.007812 -106.852539 -17460.937500 -106.858475 -17463.867188 -106.856255 -17466.796875 -106.851730 -17469.726562 -106.864670 -17472.656250 -106.854645 -17475.585938 -106.864716 -17478.515625 -106.856743 -17481.445312 -106.855133 -17484.375000 -106.859375 -17487.304688 -106.864311 -17490.234375 -106.858871 -17493.164062 -106.878654 -17496.093750 -106.874832 -17499.023438 -106.877335 -17501.953125 -106.873337 -17504.882812 -106.845467 -17507.812500 -106.876228 -17510.742188 -106.863144 -17513.671875 -106.863663 -17516.601562 -106.867737 -17519.531250 -106.871773 -17522.460938 -106.866890 -17525.390625 -106.868683 -17528.320312 -106.861839 -17531.250000 -106.883583 -17534.179688 -106.883186 -17537.109375 -106.877289 -17540.039062 -106.880157 -17542.968750 -106.877541 -17545.898438 -106.874092 -17548.828125 -106.875641 -17551.757812 -106.878860 -17554.687500 -106.881775 -17557.617188 -106.884430 -17560.546875 -106.883377 -17563.476562 -106.881729 -17566.406250 -106.881256 -17569.335938 -106.879936 -17572.265625 -106.884148 -17575.195312 -106.886909 -17578.125000 -106.888077 -17581.054688 -106.887505 -17583.984375 -106.888763 -17586.914062 -106.889694 -17589.843750 -106.889641 -17592.773438 -106.888763 -17595.703125 -106.890366 -17598.632812 -106.892296 -17601.562500 -106.887718 -17604.492188 -106.906860 -17607.421875 -106.890533 -17610.351562 -106.912300 -17613.281250 -106.912880 -17616.210938 -106.913750 -17619.140625 -106.897163 -17622.070312 -106.895592 -17625.000000 -106.904373 -17627.929688 -106.904770 -17630.859375 -106.904137 -17633.789062 -106.900970 -17636.718750 -106.901863 -17639.648438 -106.915787 -17642.578125 -106.906830 -17645.507812 -106.905983 -17648.437500 -106.912140 -17651.367188 -106.909836 -17654.296875 -106.913956 -17657.226562 -106.909157 -17660.156250 -106.912560 -17663.085938 -106.912407 -17666.015625 -106.916779 -17668.945312 -106.884865 -17671.875000 -106.913307 -17674.804688 -106.915543 -17677.734375 -106.914497 -17680.664062 -106.914749 -17683.593750 -106.917221 -17686.523438 -106.918678 -17689.453125 -106.916718 -17692.382812 -106.917358 -17695.312500 -106.918839 -17698.242188 -106.919609 -17701.171875 -106.919266 -17704.101562 -106.920822 -17707.031250 -106.923645 -17709.960938 -106.923737 -17712.890625 -106.928566 -17715.820312 -106.927078 -17718.750000 -106.926514 -17721.679688 -106.927612 -17724.609375 -106.930771 -17727.539062 -106.926033 -17730.468750 -106.926300 -17733.398438 -106.927109 -17736.328125 -106.927246 -17739.257812 -106.939423 -17742.187500 -106.929482 -17745.117188 -106.934959 -17748.046875 -106.935234 -17750.976562 -106.933113 -17753.906250 -106.937996 -17756.835938 -106.932793 -17759.765625 -106.937576 -17762.695312 -106.940247 -17765.625000 -106.940910 -17768.554688 -106.938538 -17771.484375 -106.941818 -17774.414062 -106.941551 -17777.343750 -106.945274 -17780.273438 -106.945602 -17783.203125 -106.944298 -17786.132812 -106.945694 -17789.062500 -106.945221 -17791.992188 -106.949272 -17794.921875 -106.946777 -17797.851562 -106.948784 -17800.781250 -106.955544 -17803.710938 -106.950142 -17806.640625 -106.955864 -17809.570312 -106.949448 -17812.500000 -106.952278 -17815.429688 -106.953499 -17818.359375 -106.955391 -17821.289062 -106.953369 -17824.218750 -106.955101 -17827.148438 -106.949654 -17830.078125 -106.952873 -17833.007812 -106.954422 -17835.937500 -106.963638 -17838.867188 -106.952766 -17841.796875 -106.960030 -17844.726562 -106.957481 -17847.656250 -106.963837 -17850.585938 -106.961899 -17853.515625 -106.955826 -17856.445312 -106.958008 -17859.375000 -106.961258 -17862.304688 -106.962685 -17865.234375 -106.966385 -17868.164062 -106.965843 -17871.093750 -106.968079 -17874.023438 -106.968781 -17876.953125 -106.974617 -17879.882812 -106.968010 -17882.812500 -106.974548 -17885.742188 -107.016380 -17888.671875 -106.968269 -17891.601562 -106.926765 -17894.531250 -106.959679 -17897.460938 -106.963356 -17900.390625 -106.990082 -17903.320312 -107.021271 -17906.250000 -106.981117 -17909.179688 -106.980278 -17912.109375 -106.978271 -17915.039062 -106.983902 -17917.968750 -106.980171 -17920.898438 -106.966675 -17923.828125 -106.981102 -17926.757812 -106.978798 -17929.687500 -106.987625 -17932.617188 -106.991791 -17935.546875 -106.973351 -17938.476562 -106.988983 -17941.406250 -106.978210 -17944.335938 -106.872452 -17947.265625 -106.988022 -17950.195312 -106.976440 -17953.125000 -106.976524 -17956.054688 -106.965477 -17958.984375 -106.983528 -17961.914062 -106.974625 -17964.843750 -106.965416 -17967.773438 -106.971916 -17970.703125 -106.981827 -17973.632812 -106.972702 -17976.562500 -106.994843 -17979.492188 -106.987213 -17982.421875 -106.992302 -17985.351562 -106.989525 -17988.281250 -106.986618 -17991.210938 -106.993256 -17994.140625 -106.994064 -17997.070312 -106.996162 -18000.000000 -106.993828 -18002.929688 -106.994087 -18005.859375 -106.996170 -18008.789062 -106.989723 -18011.718750 -106.992882 -18014.648438 -106.998299 -18017.578125 -106.998871 -18020.507812 -106.993187 -18023.437500 -106.993721 -18026.367188 -107.036285 -18029.296875 -106.996109 -18032.226562 -106.988083 -18035.156250 -107.003822 -18038.085938 -107.012344 -18041.015625 -107.026772 -18043.945312 -107.015900 -18046.875000 -107.035439 -18049.804688 -107.050072 -18052.734375 -107.048088 -18055.664062 -106.986374 -18058.593750 -107.004761 -18061.523438 -107.070129 -18064.453125 -107.023155 -18067.382812 -107.031952 -18070.312500 -107.042099 -18073.242188 -107.021072 -18076.171875 -107.029465 -18079.101562 -107.031830 -18082.031250 -107.027763 -18084.960938 -107.047920 -18087.890625 -107.034554 -18090.820312 -107.036606 -18093.750000 -107.032440 -18096.679688 -107.003242 -18099.609375 -107.005951 -18102.539062 -106.990921 -18105.468750 -106.942619 -18108.398438 -107.073952 -18111.328125 -107.235390 -18114.257812 -107.052971 -18117.187500 -107.018562 -18120.117188 -107.048729 -18123.046875 -107.022408 -18125.976562 -107.028625 -18128.906250 -107.027733 -18131.835938 -107.034569 -18134.765625 -107.030052 -18137.695312 -107.034500 -18140.625000 -107.038338 -18143.554688 -107.038193 -18146.484375 -107.031555 -18149.414062 -107.037315 -18152.343750 -107.036606 -18155.273438 -107.040291 -18158.203125 -107.036346 -18161.132812 -107.036949 -18164.062500 -107.039665 -18166.992188 -107.038910 -18169.921875 -107.042564 -18172.851562 -107.039703 -18175.781250 -107.042473 -18178.710938 -107.043304 -18181.640625 -107.045288 -18184.570312 -107.044708 -18187.500000 -107.046577 -18190.429688 -107.043510 -18193.359375 -107.054161 -18196.289062 -107.043274 -18199.218750 -107.044540 -18202.148438 -107.047066 -18205.078125 -107.048592 -18208.007812 -107.052269 -18210.937500 -107.048798 -18213.867188 -107.053482 -18216.796875 -107.049782 -18219.726562 -107.059113 -18222.656250 -107.058861 -18225.585938 -107.052917 -18228.515625 -107.050476 -18231.445312 -107.047379 -18234.375000 -107.057060 -18237.304688 -107.056046 -18240.234375 -107.053726 -18243.164062 -107.054276 -18246.093750 -107.056549 -18249.023438 -107.061134 -18251.953125 -107.058357 -18254.882812 -107.060318 -18257.812500 -107.065704 -18260.742188 -107.058144 -18263.671875 -107.075035 -18266.601562 -107.058456 -18269.531250 -107.065681 -18272.460938 -107.065063 -18275.390625 -107.064377 -18278.320312 -107.071770 -18281.250000 -107.065102 -18284.179688 -107.066269 -18287.109375 -107.065765 -18290.039062 -107.068344 -18292.968750 -107.068726 -18295.898438 -107.072838 -18298.828125 -107.072662 -18301.757812 -107.073997 -18304.687500 -107.071510 -18307.617188 -107.073387 -18310.546875 -107.074890 -18313.476562 -107.073730 -18316.406250 -107.075386 -18319.335938 -107.078140 -18322.265625 -107.072929 -18325.195312 -107.073380 -18328.125000 -107.077164 -18331.054688 -107.075233 -18333.984375 -107.077263 -18336.914062 -107.079315 -18339.843750 -107.079742 -18342.773438 -107.079758 -18345.703125 -107.080772 -18348.632812 -107.080925 -18351.562500 -107.081451 -18354.492188 -107.080887 -18357.421875 -107.087257 -18360.351562 -107.083832 -18363.281250 -107.084084 -18366.210938 -107.087357 -18369.140625 -107.089264 -18372.070312 -107.089264 -18375.000000 -107.077965 -18377.929688 -107.090477 -18380.859375 -107.082176 -18383.789062 -107.085632 -18386.718750 -107.088257 -18389.648438 -107.099297 -18392.578125 -107.092979 -18395.507812 -107.107384 -18398.437500 -107.096535 -18401.367188 -107.097404 -18404.296875 -107.097481 -18407.226562 -107.096214 -18410.156250 -107.097046 -18413.085938 -107.099686 -18416.015625 -107.099594 -18418.945312 -107.100098 -18421.875000 -107.099991 -18424.804688 -107.101181 -18427.734375 -107.101044 -18430.664062 -107.107140 -18433.593750 -107.103073 -18436.523438 -107.100494 -18439.453125 -107.097855 -18442.382812 -107.099083 -18445.312500 -107.101044 -18448.242188 -107.108887 -18451.171875 -107.107254 -18454.101562 -107.110497 -18457.031250 -107.108330 -18459.960938 -107.109406 -18462.890625 -107.109764 -18465.820312 -107.110924 -18468.750000 -107.107094 -18471.679688 -107.114403 -18474.609375 -107.114281 -18477.539062 -107.112473 -18480.468750 -107.109192 -18483.398438 -107.117737 -18486.328125 -107.119637 -18489.257812 -107.117439 -18492.187500 -107.114426 -18495.117188 -107.122589 -18498.046875 -107.115097 -18500.976562 -107.112038 -18503.906250 -107.118263 -18506.835938 -107.120308 -18509.765625 -107.118835 -18512.695312 -107.119713 -18515.625000 -107.119881 -18518.554688 -107.123474 -18521.484375 -107.124672 -18524.414062 -107.121735 -18527.343750 -107.126915 -18530.273438 -107.122406 -18533.203125 -107.126488 -18536.132812 -107.126617 -18539.062500 -107.126450 -18541.992188 -107.127991 -18544.921875 -107.128967 -18547.851562 -107.130470 -18550.781250 -107.129494 -18553.710938 -107.128105 -18556.640625 -107.131668 -18559.570312 -107.132637 -18562.500000 -107.133492 -18565.429688 -107.131676 -18568.359375 -107.132523 -18571.289062 -107.134506 -18574.218750 -107.133530 -18577.148438 -107.134422 -18580.078125 -107.135208 -18583.007812 -107.134491 -18585.937500 -107.136879 -18588.867188 -107.137856 -18591.796875 -107.138390 -18594.726562 -107.137695 -18597.656250 -107.138466 -18600.585938 -107.139320 -18603.515625 -107.140335 -18606.445312 -107.139923 -18609.375000 -107.142395 -18612.304688 -107.141212 -18615.234375 -107.142334 -18618.164062 -107.143303 -18621.093750 -107.145538 -18624.023438 -107.145348 -18626.953125 -107.146347 -18629.882812 -107.147072 -18632.812500 -107.148300 -18635.742188 -107.149025 -18638.671875 -107.146706 -18641.601562 -107.149734 -18644.531250 -107.148674 -18647.460938 -107.151459 -18650.390625 -107.151016 -18653.320312 -107.150917 -18656.250000 -107.150208 -18659.179688 -107.153946 -18662.109375 -107.151871 -18665.039062 -107.155602 -18667.968750 -107.153534 -18670.898438 -107.154900 -18673.828125 -107.157928 -18676.757812 -107.157814 -18679.687500 -107.158852 -18682.617188 -107.157280 -18685.546875 -107.160675 -18688.476562 -107.159737 -18691.406250 -107.158806 -18694.335938 -107.161415 -18697.265625 -107.164383 -18700.195312 -107.162704 -18703.125000 -107.155251 -18706.054688 -107.162239 -18708.984375 -107.161369 -18711.914062 -107.164070 -18714.843750 -107.175613 -18717.773438 -107.167198 -18720.703125 -107.170250 -18723.632812 -107.162796 -18726.562500 -107.167534 -18729.492188 -107.170029 -18732.421875 -107.167984 -18735.351562 -107.170616 -18738.281250 -107.171608 -18741.210938 -107.172249 -18744.140625 -107.172997 -18747.070312 -107.172737 -18750.000000 -107.174164 -18752.929688 -107.173515 -18755.859375 -107.174919 -18758.789062 -107.174507 -18761.718750 -107.174110 -18764.648438 -107.175789 -18767.578125 -107.176552 -18770.507812 -107.176048 -18773.437500 -107.179459 -18776.367188 -107.181129 -18779.296875 -107.177315 -18782.226562 -107.179138 -18785.156250 -107.170509 -18788.085938 -107.181053 -18791.015625 -107.185013 -18793.945312 -107.181908 -18796.875000 -107.185875 -18799.804688 -107.182915 -18802.734375 -107.183197 -18805.664062 -107.184258 -18808.593750 -107.187515 -18811.523438 -107.187706 -18814.453125 -107.185074 -18817.382812 -107.187401 -18820.312500 -107.186783 -18823.242188 -107.191933 -18826.171875 -107.185463 -18829.101562 -107.190529 -18832.031250 -107.191597 -18834.960938 -107.190781 -18837.890625 -107.194580 -18840.820312 -107.192146 -18843.750000 -107.192696 -18846.679688 -107.191971 -18849.609375 -107.192650 -18852.539062 -107.193069 -18855.468750 -107.195335 -18858.398438 -107.195992 -18861.328125 -107.197517 -18864.257812 -107.200775 -18867.187500 -107.198769 -18870.117188 -107.200684 -18873.046875 -107.201660 -18875.976562 -107.201012 -18878.906250 -107.202736 -18881.835938 -107.199623 -18884.765625 -107.201569 -18887.695312 -107.200661 -18890.625000 -107.201416 -18893.554688 -107.206161 -18896.484375 -107.204178 -18899.414062 -107.206116 -18902.343750 -107.205925 -18905.273438 -107.207626 -18908.203125 -107.207474 -18911.132812 -107.208931 -18914.062500 -107.208504 -18916.992188 -107.209290 -18919.921875 -107.211243 -18922.851562 -107.209953 -18925.781250 -107.210159 -18928.710938 -107.211235 -18931.640625 -107.211502 -18934.570312 -107.215553 -18937.500000 -107.208595 -18940.429688 -107.210083 -18943.359375 -107.214157 -18946.289062 -107.206818 -18949.218750 -107.211670 -18952.148438 -107.216560 -18955.078125 -107.214394 -18958.007812 -107.218887 -18960.937500 -107.219261 -18963.867188 -107.218964 -18966.796875 -107.223511 -18969.726562 -107.209023 -18972.656250 -107.227760 -18975.585938 -107.211281 -18978.515625 -107.220123 -18981.445312 -107.224426 -18984.375000 -107.218575 -18987.304688 -107.229057 -18990.234375 -107.215965 -18993.164062 -107.224930 -18996.093750 -107.221626 -18999.023438 -107.213188 -19001.953125 -107.206459 -19004.882812 -107.236366 -19007.812500 -107.213249 -19010.742188 -107.238388 -19013.671875 -107.237480 -19016.601562 -107.235809 -19019.531250 -107.229393 -19022.460938 -107.232750 -19025.390625 -107.230278 -19028.320312 -107.234940 -19031.250000 -107.232025 -19034.179688 -107.226944 -19037.109375 -107.232124 -19040.039062 -107.234428 -19042.968750 -107.232414 -19045.898438 -107.234604 -19048.828125 -107.234238 -19051.757812 -107.235977 -19054.687500 -107.231285 -19057.617188 -107.240540 -19060.546875 -107.238808 -19063.476562 -107.236557 -19066.406250 -107.235489 -19069.335938 -107.232231 -19072.265625 -107.249733 -19075.195312 -107.240860 -19078.125000 -107.242691 -19081.054688 -107.241524 -19083.984375 -107.240105 -19086.914062 -107.241478 -19089.843750 -107.242897 -19092.773438 -107.243126 -19095.703125 -107.243340 -19098.632812 -107.244728 -19101.562500 -107.243355 -19104.492188 -107.235901 -19107.421875 -107.248886 -19110.351562 -107.240845 -19113.281250 -107.250031 -19116.210938 -107.252533 -19119.140625 -107.255264 -19122.070312 -107.250130 -19125.000000 -107.252434 -19127.929688 -107.248512 -19130.859375 -107.248283 -19133.789062 -107.254478 -19136.718750 -107.255646 -19139.648438 -107.255699 -19142.578125 -107.252548 -19145.507812 -107.259644 -19148.437500 -107.256462 -19151.367188 -107.257011 -19154.296875 -107.255905 -19157.226562 -107.258667 -19160.156250 -107.257935 -19163.085938 -107.261520 -19166.015625 -107.258232 -19168.945312 -107.261467 -19171.875000 -107.252258 -19174.804688 -107.265129 -19177.734375 -107.262093 -19180.664062 -107.260292 -19183.593750 -107.263527 -19186.523438 -107.264168 -19189.453125 -107.265770 -19192.382812 -107.265327 -19195.312500 -107.265228 -19198.242188 -107.265373 -19201.171875 -107.269493 -19204.101562 -107.268486 -19207.031250 -107.264381 -19209.960938 -107.267311 -19212.890625 -107.260643 -19215.820312 -107.265770 -19218.750000 -107.264679 -19221.679688 -107.273514 -19224.609375 -107.269669 -19227.539062 -107.269249 -19230.468750 -107.274567 -19233.398438 -107.269333 -19236.328125 -107.278488 -19239.257812 -107.269180 -19242.187500 -107.279503 -19245.117188 -107.271873 -19248.046875 -107.271683 -19250.976562 -107.273895 -19253.906250 -107.273941 -19256.835938 -107.274490 -19259.765625 -107.277039 -19262.695312 -107.276611 -19265.625000 -107.277069 -19268.554688 -107.274338 -19271.484375 -107.277588 -19274.414062 -107.278023 -19277.343750 -107.282516 -19280.273438 -107.281380 -19283.203125 -107.279251 -19286.132812 -107.281151 -19289.062500 -107.280380 -19291.992188 -107.280739 -19294.921875 -107.281242 -19297.851562 -107.282242 -19300.781250 -107.276787 -19303.710938 -107.281616 -19306.640625 -107.286728 -19309.570312 -107.288986 -19312.500000 -107.286148 -19315.429688 -107.286583 -19318.359375 -107.287010 -19321.289062 -107.290596 -19324.218750 -107.290154 -19327.148438 -107.293457 -19330.078125 -107.292313 -19333.007812 -107.293045 -19335.937500 -107.286400 -19338.867188 -107.295700 -19341.796875 -107.291328 -19344.726562 -107.296860 -19347.656250 -107.292946 -19350.585938 -107.293503 -19353.515625 -107.299789 -19356.445312 -107.298058 -19359.375000 -107.297607 -19362.304688 -107.298988 -19365.234375 -107.294327 -19368.164062 -107.295059 -19371.093750 -107.297874 -19374.023438 -107.298241 -19376.953125 -107.301132 -19379.882812 -107.299828 -19382.812500 -107.299683 -19385.742188 -107.307487 -19388.671875 -107.285690 -19391.601562 -107.291939 -19394.531250 -107.312393 -19397.460938 -107.307281 -19400.390625 -107.304634 -19403.320312 -107.300529 -19406.250000 -107.301575 -19409.179688 -107.296700 -19412.109375 -107.299644 -19415.039062 -107.291656 -19417.968750 -107.301521 -19420.898438 -107.311882 -19423.828125 -107.299988 -19426.757812 -107.302666 -19429.687500 -107.292381 -19432.617188 -107.298347 -19435.546875 -107.302811 -19438.476562 -107.275108 -19441.406250 -107.311707 -19444.335938 -107.347580 -19447.265625 -107.287178 -19450.195312 -107.285271 -19453.125000 -107.293655 -19456.054688 -107.308174 -19458.984375 -107.295059 -19461.914062 -107.311066 -19464.843750 -107.316017 -19467.773438 -107.329704 -19470.703125 -107.326683 -19473.632812 -107.382607 -19476.562500 -107.306450 -19479.492188 -107.311745 -19482.421875 -107.305000 -19485.351562 -107.309113 -19488.281250 -107.314865 -19491.210938 -107.330887 -19494.140625 -107.322098 -19497.070312 -107.323563 -19500.000000 -107.323387 -19502.929688 -107.324646 -19505.859375 -107.326378 -19508.789062 -107.318314 -19511.718750 -107.326027 -19514.648438 -107.326294 -19517.578125 -107.326668 -19520.507812 -107.326073 -19523.437500 -107.325539 -19526.367188 -107.353668 -19529.296875 -107.334305 -19532.226562 -107.334915 -19535.156250 -107.337494 -19538.085938 -107.335854 -19541.015625 -107.333008 -19543.945312 -107.338745 -19546.875000 -107.333420 -19549.804688 -107.332016 -19552.734375 -107.328072 -19555.664062 -107.378342 -19558.593750 -107.337868 -19561.523438 -107.323410 -19564.453125 -107.338684 -19567.382812 -107.327179 -19570.312500 -107.323334 -19573.242188 -107.339630 -19576.171875 -107.332596 -19579.101562 -107.327278 -19582.031250 -107.333763 -19584.960938 -107.327744 -19587.890625 -107.335754 -19590.820312 -107.333214 -19593.750000 -107.333374 -19596.679688 -107.320053 -19599.609375 -107.338264 -19602.539062 -107.354080 -19605.468750 -107.368919 -19608.398438 -107.343315 -19611.328125 -107.279732 -19614.257812 -107.321999 -19617.187500 -107.342484 -19620.117188 -107.336899 -19623.046875 -107.348122 -19625.976562 -107.345596 -19628.906250 -107.347595 -19631.835938 -107.340248 -19634.765625 -107.343872 -19637.695312 -107.350891 -19640.625000 -107.344131 -19643.554688 -107.350899 -19646.484375 -107.365532 -19649.414062 -107.341507 -19652.343750 -107.343025 -19655.273438 -107.353638 -19658.203125 -107.349472 -19661.132812 -107.365219 -19664.062500 -107.368332 -19666.992188 -107.334366 -19669.921875 -107.363739 -19672.851562 -107.349541 -19675.781250 -107.364410 -19678.710938 -107.364510 -19681.640625 -107.362831 -19684.570312 -107.355400 -19687.500000 -107.361076 -19690.429688 -107.371422 -19693.359375 -107.385490 -19696.289062 -107.343666 -19699.218750 -107.331825 -19702.148438 -107.351974 -19705.078125 -107.347839 -19708.007812 -107.356735 -19710.937500 -107.350136 -19713.867188 -107.360199 -19716.796875 -107.355362 -19719.726562 -107.370956 -19722.656250 -107.375992 -19725.585938 -107.354111 -19728.515625 -107.363548 -19731.445312 -107.353058 -19734.375000 -107.362938 -19737.304688 -107.361557 -19740.234375 -107.363258 -19743.164062 -107.356812 -19746.093750 -107.363441 -19749.023438 -107.360443 -19751.953125 -107.361183 -19754.882812 -107.365540 -19757.812500 -107.363861 -19760.742188 -107.378090 -19763.671875 -107.366386 -19766.601562 -107.360191 -19769.531250 -107.362625 -19772.460938 -107.359962 -19775.390625 -107.377480 -19778.320312 -107.374451 -19781.250000 -107.368729 -19784.179688 -107.374931 -19787.109375 -107.375389 -19790.039062 -107.374977 -19792.968750 -107.375748 -19795.898438 -107.390160 -19798.828125 -107.362526 -19801.757812 -107.370422 -19804.687500 -107.372139 -19807.617188 -107.376762 -19810.546875 -107.374405 -19813.476562 -107.369553 -19816.406250 -107.373947 -19819.335938 -107.375984 -19822.265625 -107.375359 -19825.195312 -107.374413 -19828.125000 -107.379021 -19831.054688 -107.401245 -19833.984375 -107.373413 -19836.914062 -107.375816 -19839.843750 -107.376015 -19842.773438 -107.379745 -19845.703125 -107.376289 -19848.632812 -107.379074 -19851.562500 -107.377304 -19854.492188 -107.382339 -19857.421875 -107.379440 -19860.351562 -107.377060 -19863.281250 -107.384605 -19866.210938 -107.384285 -19869.140625 -107.383675 -19872.070312 -107.382896 -19875.000000 -107.381859 -19877.929688 -107.388710 -19880.859375 -107.391579 -19883.789062 -107.384773 -19886.718750 -107.381310 -19889.648438 -107.377312 -19892.578125 -107.390663 -19895.507812 -107.376312 -19898.437500 -107.390343 -19901.367188 -107.386795 -19904.296875 -107.387970 -19907.226562 -107.387894 -19910.156250 -107.389565 -19913.085938 -107.388878 -19916.015625 -107.391266 -19918.945312 -107.393394 -19921.875000 -107.393997 -19924.804688 -107.392792 -19927.734375 -107.395683 -19930.664062 -107.396553 -19933.593750 -107.398064 -19936.523438 -107.399849 -19939.453125 -107.407295 -19942.382812 -107.407021 -19945.312500 -107.399673 -19948.242188 -107.395554 -19951.171875 -107.400436 -19954.101562 -107.405479 -19957.031250 -107.399551 -19959.960938 -107.397903 -19962.890625 -107.400711 -19965.820312 -107.399300 -19968.750000 -107.414970 -19971.679688 -107.397972 -19974.609375 -107.400299 -19977.539062 -107.397186 -19980.468750 -107.403450 -19983.398438 -107.404762 -19986.328125 -107.401726 -19989.257812 -107.403152 -19992.187500 -107.401497 -19995.117188 -107.403099 -19998.046875 -107.390648 -20000.976562 -107.406174 -20003.906250 -107.410233 -20006.835938 -107.398239 -20009.765625 -107.420959 -20012.695312 -107.403809 -20015.625000 -107.407944 -20018.554688 -107.409317 -20021.484375 -107.410065 -20024.414062 -107.409515 -20027.343750 -107.412079 -20030.273438 -107.411118 -20033.203125 -107.412964 -20036.132812 -107.411041 -20039.062500 -107.410713 -20041.992188 -107.411003 -20044.921875 -107.412132 -20047.851562 -107.414185 -20050.781250 -107.414597 -20053.710938 -107.416901 -20056.640625 -107.413269 -20059.570312 -107.415771 -20062.500000 -107.415352 -20065.429688 -107.415932 -20068.359375 -107.417068 -20071.289062 -107.417358 -20074.218750 -107.417717 -20077.148438 -107.417435 -20080.078125 -107.418381 -20083.007812 -107.418121 -20085.937500 -107.419144 -20088.867188 -107.419563 -20091.796875 -107.419067 -20094.726562 -107.422775 -20097.656250 -107.421562 -20100.585938 -107.421944 -20103.515625 -107.423256 -20106.445312 -107.421814 -20109.375000 -107.423363 -20112.304688 -107.421364 -20115.234375 -107.421928 -20118.164062 -107.424126 -20121.093750 -107.426163 -20124.023438 -107.426750 -20126.953125 -107.426331 -20129.882812 -107.427216 -20132.812500 -107.427628 -20135.742188 -107.428627 -20138.671875 -107.426163 -20141.601562 -107.429619 -20144.531250 -107.428680 -20147.460938 -107.431793 -20150.390625 -107.429817 -20153.320312 -107.427284 -20156.250000 -107.427689 -20159.179688 -107.434021 -20162.109375 -107.431534 -20165.039062 -107.435562 -20167.968750 -107.430298 -20170.898438 -107.431984 -20173.828125 -107.433540 -20176.757812 -107.434334 -20179.687500 -107.433914 -20182.617188 -107.433853 -20185.546875 -107.435493 -20188.476562 -107.435448 -20191.406250 -107.433334 -20194.335938 -107.436714 -20197.265625 -107.440590 -20200.195312 -107.438278 -20203.125000 -107.425362 -20206.054688 -107.431870 -20208.984375 -107.437706 -20211.914062 -107.439056 -20214.843750 -107.428139 -20217.773438 -107.437225 -20220.703125 -107.439690 -20223.632812 -107.445045 -20226.562500 -107.441704 -20229.492188 -107.440605 -20232.421875 -107.442894 -20235.351562 -107.440872 -20238.281250 -107.442284 -20241.210938 -107.444298 -20244.140625 -107.443962 -20247.070312 -107.444267 -20250.000000 -107.445656 -20252.929688 -107.444466 -20255.859375 -107.444450 -20258.789062 -107.446053 -20261.718750 -107.447083 -20264.648438 -107.447792 -20267.578125 -107.447556 -20270.507812 -107.448692 -20273.437500 -107.446602 -20276.367188 -107.448296 -20279.296875 -107.449860 -20282.226562 -107.449501 -20285.156250 -107.450592 -20288.085938 -107.451416 -20291.015625 -107.448700 -20293.945312 -107.446640 -20296.875000 -107.449921 -20299.804688 -107.451347 -20302.734375 -107.452492 -20305.664062 -107.455009 -20308.593750 -107.452751 -20311.523438 -107.453964 -20314.453125 -107.453484 -20317.382812 -107.456665 -20320.312500 -107.453972 -20323.242188 -107.454918 -20326.171875 -107.455696 -20329.101562 -107.455994 -20332.031250 -107.458542 -20334.960938 -107.461021 -20337.890625 -107.455124 -20340.820312 -107.455048 -20343.750000 -107.456543 -20346.679688 -107.461548 -20349.609375 -107.457291 -20352.539062 -107.455521 -20355.468750 -107.462494 -20358.398438 -107.457535 -20361.328125 -107.461433 -20364.257812 -107.460815 -20367.187500 -107.461723 -20370.117188 -107.461349 -20373.046875 -107.462494 -20375.976562 -107.464424 -20378.906250 -107.463730 -20381.835938 -107.462097 -20384.765625 -107.464745 -20387.695312 -107.464401 -20390.625000 -107.463570 -20393.554688 -107.465881 -20396.484375 -107.467102 -20399.414062 -107.466690 -20402.343750 -107.467186 -20405.273438 -107.468361 -20408.203125 -107.466682 -20411.132812 -107.467621 -20414.062500 -107.470322 -20416.992188 -107.470047 -20419.921875 -107.469810 -20422.851562 -107.469162 -20425.781250 -107.471291 -20428.710938 -107.469902 -20431.640625 -107.471275 -20434.570312 -107.475212 -20437.500000 -107.469185 -20440.429688 -107.471756 -20443.359375 -107.469467 -20446.289062 -107.478920 -20449.218750 -107.478294 -20452.148438 -107.473167 -20455.078125 -107.472427 -20458.007812 -107.472946 -20460.937500 -107.470612 -20463.867188 -107.472054 -20466.796875 -107.474449 -20469.726562 -107.483704 -20472.656250 -107.466530 -20475.585938 -107.483040 -20478.515625 -107.484802 -20481.445312 -107.480217 -20484.375000 -107.474747 -20487.304688 -107.473038 -20490.234375 -107.474449 -20493.164062 -107.476440 -20496.093750 -107.477089 -20499.023438 -107.477325 -20501.953125 -107.519791 -20504.882812 -107.486786 -20507.812500 -107.489677 -20510.742188 -107.482521 -20513.671875 -107.489784 -20516.601562 -107.486008 -20519.531250 -107.477516 -20522.460938 -107.485283 -20525.390625 -107.487633 -20528.320312 -107.489075 -20531.250000 -107.467751 -20534.179688 -107.489075 -20537.109375 -107.487862 -20540.039062 -107.486336 -20542.968750 -107.489105 -20545.898438 -107.490623 -20548.828125 -107.488335 -20551.757812 -107.492493 -20554.687500 -107.482986 -20557.617188 -107.479630 -20560.546875 -107.478271 -20563.476562 -107.485245 -20566.406250 -107.487473 -20569.335938 -107.489754 -20572.265625 -107.502220 -20575.195312 -107.493073 -20578.125000 -107.491386 -20581.054688 -107.491852 -20583.984375 -107.494286 -20586.914062 -107.494652 -20589.843750 -107.496361 -20592.773438 -107.497658 -20595.703125 -107.494576 -20598.632812 -107.498230 -20601.562500 -107.497978 -20604.492188 -107.511269 -20607.421875 -107.486298 -20610.351562 -107.508453 -20613.281250 -107.499641 -20616.210938 -107.499969 -20619.140625 -107.491455 -20622.070312 -107.496025 -20625.000000 -107.503410 -20627.929688 -107.500412 -20630.859375 -107.501297 -20633.789062 -107.497055 -20636.718750 -107.497482 -20639.648438 -107.504707 -20642.578125 -107.500153 -20645.507812 -107.497940 -20648.437500 -107.504158 -20651.367188 -107.503258 -20654.296875 -107.507828 -20657.226562 -107.502167 -20660.156250 -107.505989 -20663.085938 -107.503693 -20666.015625 -107.507622 -20668.945312 -107.475571 -20671.875000 -107.500725 -20674.804688 -107.507233 -20677.734375 -107.507820 -20680.664062 -107.508377 -20683.593750 -107.507866 -20686.523438 -107.514313 -20689.453125 -107.507973 -20692.382812 -107.504410 -20695.312500 -107.510063 -20698.242188 -107.512848 -20701.171875 -107.524460 -20704.101562 -107.485992 -20707.031250 -107.500351 -20709.960938 -107.504227 -20712.890625 -107.497063 -20715.820312 -107.501915 -20718.750000 -107.507835 -20721.679688 -107.508873 -20724.609375 -107.499702 -20727.539062 -107.518791 -20730.468750 -107.519478 -20733.398438 -107.516258 -20736.328125 -107.523155 -20739.257812 -107.495605 -20742.187500 -107.521996 -20745.117188 -107.511467 -20748.046875 -107.512016 -20750.976562 -107.518494 -20753.906250 -107.511391 -20756.835938 -107.519714 -20759.765625 -107.511734 -20762.695312 -107.515442 -20765.625000 -107.514740 -20768.554688 -107.519135 -20771.484375 -107.513092 -20774.414062 -107.520332 -20777.343750 -107.510139 -20780.273438 -107.513329 -20783.203125 -107.520142 -20786.132812 -107.518051 -20789.062500 -107.521370 -20791.992188 -107.520073 -20794.921875 -107.523094 -20797.851562 -107.521133 -20800.781250 -107.527657 -20803.710938 -107.524147 -20806.640625 -107.511177 -20809.570312 -107.517113 -20812.500000 -107.519585 -20815.429688 -107.521164 -20818.359375 -107.520714 -20821.289062 -107.519859 -20824.218750 -107.519714 -20827.148438 -107.525726 -20830.078125 -107.522972 -20833.007812 -107.527100 -20835.937500 -107.520607 -20838.867188 -107.525932 -20841.796875 -107.525703 -20844.726562 -107.530777 -20847.656250 -107.525017 -20850.585938 -107.527267 -20853.515625 -107.529572 -20856.445312 -107.533012 -20859.375000 -107.528046 -20862.304688 -107.531693 -20865.234375 -107.528008 -20868.164062 -107.527542 -20871.093750 -107.532585 -20874.023438 -107.533440 -20876.953125 -107.541290 -20879.882812 -107.529869 -20882.812500 -107.537384 -20885.742188 -107.575462 -20888.671875 -107.506516 -20891.601562 -107.485878 -20894.531250 -107.538948 -20897.460938 -107.534355 -20900.390625 -107.550301 -20903.320312 -107.571365 -20906.250000 -107.539078 -20909.179688 -107.535721 -20912.109375 -107.534576 -20915.039062 -107.530975 -20917.968750 -107.535439 -20920.898438 -107.540558 -20923.828125 -107.529678 -20926.757812 -107.534157 -20929.687500 -107.525078 -20932.617188 -107.532913 -20935.546875 -107.526672 -20938.476562 -107.518044 -20941.406250 -107.538612 -20944.335938 -107.466759 -20947.265625 -107.524223 -20950.195312 -107.522316 -20953.125000 -107.530815 -20956.054688 -107.530121 -20958.984375 -107.536469 -20961.914062 -107.535339 -20964.843750 -107.522919 -20967.773438 -107.529648 -20970.703125 -107.543968 -20973.632812 -107.546638 -20976.562500 -107.536072 -20979.492188 -107.531044 -20982.421875 -107.540596 -20985.351562 -107.539528 -20988.281250 -107.531181 -20991.210938 -107.534241 -20994.140625 -107.541710 -20997.070312 -107.543030 -21000.000000 -107.542107 -21002.929688 -107.546867 -21005.859375 -107.544228 -21008.789062 -107.553406 -21011.718750 -107.541023 -21014.648438 -107.541740 -21017.578125 -107.544662 -21020.507812 -107.549141 -21023.437500 -107.553314 -21026.367188 -107.541313 -21029.296875 -107.547859 -21032.226562 -107.549644 -21035.156250 -107.536797 -21038.085938 -107.537270 -21041.015625 -107.528839 -21043.945312 -107.533424 -21046.875000 -107.528389 -21049.804688 -107.522530 -21052.734375 -107.529007 -21055.664062 -107.551086 -21058.593750 -107.546669 -21061.523438 -107.527863 -21064.453125 -107.545540 -21067.382812 -107.544899 -21070.312500 -107.541344 -21073.242188 -107.549583 -21076.171875 -107.547981 -21079.101562 -107.549988 -21082.031250 -107.544823 -21084.960938 -107.547073 -21087.890625 -107.552017 -21090.820312 -107.549812 -21093.750000 -107.552231 -21096.679688 -107.551155 -21099.609375 -107.550613 -21102.539062 -107.550095 -21105.468750 -107.543922 -21108.398438 -107.562729 -21111.328125 -107.597458 -21114.257812 -107.561897 -21117.187500 -107.553909 -21120.117188 -107.561287 -21123.046875 -107.553947 -21125.976562 -107.556465 -21128.906250 -107.555077 -21131.835938 -107.557747 -21134.765625 -107.556259 -21137.695312 -107.560471 -21140.625000 -107.562584 -21143.554688 -107.563538 -21146.484375 -107.554543 -21149.414062 -107.561836 -21152.343750 -107.557343 -21155.273438 -107.563652 -21158.203125 -107.559151 -21161.132812 -107.559753 -21164.062500 -107.546242 -21166.992188 -107.566872 -21169.921875 -107.559814 -21172.851562 -107.564804 -21175.781250 -107.558350 -21178.710938 -107.561356 -21181.640625 -107.559814 -21184.570312 -107.559311 -21187.500000 -107.558411 -21190.429688 -107.568512 -21193.359375 -107.559402 -21196.289062 -107.562408 -21199.218750 -107.566864 -21202.148438 -107.564453 -21205.078125 -107.562263 -21208.007812 -107.565018 -21210.937500 -107.564873 -21213.867188 -107.563751 -21216.796875 -107.565613 -21219.726562 -107.565201 -21222.656250 -107.562637 -21225.585938 -107.568192 -21228.515625 -107.568382 -21231.445312 -107.570396 -21234.375000 -107.571274 -21237.304688 -107.570511 -21240.234375 -107.567696 -21243.164062 -107.569084 -21246.093750 -107.570404 -21249.023438 -107.570801 -21251.953125 -107.570786 -21254.882812 -107.570770 -21257.812500 -107.573898 -21260.742188 -107.568932 -21263.671875 -107.572990 -21266.601562 -107.573647 -21269.531250 -107.574181 -21272.460938 -107.573593 -21275.390625 -107.571365 -21278.320312 -107.577133 -21281.250000 -107.573921 -21284.179688 -107.574356 -21287.109375 -107.572800 -21290.039062 -107.575302 -21292.968750 -107.575432 -21295.898438 -107.575294 -21298.828125 -107.576660 -21301.757812 -107.578255 -21304.687500 -107.576828 -21307.617188 -107.578209 -21310.546875 -107.578613 -21313.476562 -107.578362 -21316.406250 -107.578331 -21319.335938 -107.576874 -21322.265625 -107.580292 -21325.195312 -107.580063 -21328.125000 -107.583572 -21331.054688 -107.587715 -21333.984375 -107.578316 -21336.914062 -107.580063 -21339.843750 -107.580215 -21342.773438 -107.582054 -21345.703125 -107.579346 -21348.632812 -107.581108 -21351.562500 -107.581810 -21354.492188 -107.582344 -21357.421875 -107.581520 -21360.351562 -107.577751 -21363.281250 -107.583588 -21366.210938 -107.582993 -21369.140625 -107.584595 -21372.070312 -107.584068 -21375.000000 -107.586227 -21377.929688 -107.584648 -21380.859375 -107.582542 -21383.789062 -107.574120 -21386.718750 -107.575394 -21389.648438 -107.576347 -21392.578125 -107.586731 -21395.507812 -107.579124 -21398.437500 -107.589088 -21401.367188 -107.586678 -21404.296875 -107.589790 -21407.226562 -107.589516 -21410.156250 -107.591614 -21413.085938 -107.587578 -21416.015625 -107.589516 -21418.945312 -107.588425 -21421.875000 -107.588089 -21424.804688 -107.588715 -21427.734375 -107.606377 -21430.664062 -107.587112 -21433.593750 -107.590477 -21436.523438 -107.597244 -21439.453125 -107.597580 -21442.382812 -107.605064 -21445.312500 -107.602005 -21448.242188 -107.586746 -21451.171875 -107.588028 -21454.101562 -107.590691 -21457.031250 -107.593796 -21459.960938 -107.596169 -21462.890625 -107.595436 -21465.820312 -107.606728 -21468.750000 -107.616882 -21471.679688 -107.580460 -21474.609375 -107.588585 -21477.539062 -107.587631 -21480.468750 -107.583748 -21483.398438 -107.593384 -21486.328125 -107.586311 -21489.257812 -107.587952 -21492.187500 -107.601067 -21495.117188 -107.573502 -21498.046875 -107.586380 -21500.976562 -107.609093 -21503.906250 -107.607475 -21506.835938 -107.602379 -21509.765625 -107.605446 -21512.695312 -107.597717 -21515.625000 -107.598808 -21518.554688 -107.594925 -21521.484375 -107.595734 -21524.414062 -107.602501 -21527.343750 -107.601707 -21530.273438 -107.604836 -21533.203125 -107.594925 -21536.132812 -107.602493 -21539.062500 -107.603378 -21541.992188 -107.600677 -21544.921875 -107.599297 -21547.851562 -107.598595 -21550.781250 -107.600822 -21553.710938 -107.601021 -21556.640625 -107.603455 -21559.570312 -107.600632 -21562.500000 -107.602310 -21565.429688 -107.605507 -21568.359375 -107.603783 -21571.289062 -107.603348 -21574.218750 -107.605705 -21577.148438 -107.606201 -21580.078125 -107.608032 -21583.007812 -107.608070 -21585.937500 -107.608070 -21588.867188 -107.606812 -21591.796875 -107.607956 -21594.726562 -107.608154 -21597.656250 -107.607353 -21600.585938 -107.609756 -21603.515625 -107.608757 -21606.445312 -107.611000 -21609.375000 -107.606010 -21612.304688 -107.608688 -21615.234375 -107.609711 -21618.164062 -107.607460 -21621.093750 -107.612694 -21624.023438 -107.611198 -21626.953125 -107.608284 -21629.882812 -107.608116 -21632.812500 -107.610245 -21635.742188 -107.607864 -21638.671875 -107.609901 -21641.601562 -107.612572 -21644.531250 -107.611343 -21647.460938 -107.614311 -21650.390625 -107.613083 -21653.320312 -107.613258 -21656.250000 -107.612984 -21659.179688 -107.613396 -21662.109375 -107.613037 -21665.039062 -107.612343 -21667.968750 -107.612595 -21670.898438 -107.614090 -21673.828125 -107.615868 -21676.757812 -107.610809 -21679.687500 -107.615913 -21682.617188 -107.616600 -21685.546875 -107.616600 -21688.476562 -107.616318 -21691.406250 -107.616402 -21694.335938 -107.615768 -21697.265625 -107.614822 -21700.195312 -107.618896 -21703.125000 -107.624489 -21706.054688 -107.619850 -21708.984375 -107.615341 -21711.914062 -107.618813 -21714.843750 -107.626808 -21717.773438 -107.619896 -21720.703125 -107.618874 -21723.632812 -107.616554 -21726.562500 -107.617851 -21729.492188 -107.619019 -21732.421875 -107.620026 -21735.351562 -107.621880 -21738.281250 -107.619965 -21741.210938 -107.618378 -21744.140625 -107.618538 -21747.070312 -107.620461 -21750.000000 -107.622002 -21752.929688 -107.621147 -21755.859375 -107.622215 -21758.789062 -107.622948 -21761.718750 -107.622192 -21764.648438 -107.621971 -21767.578125 -107.623283 -21770.507812 -107.620689 -21773.437500 -107.622635 -21776.367188 -107.625343 -21779.296875 -107.624176 -21782.226562 -107.621742 -21785.156250 -107.619095 -21788.085938 -107.624298 -21791.015625 -107.622696 -21793.945312 -107.621468 -21796.875000 -107.621185 -21799.804688 -107.627930 -21802.734375 -107.627350 -21805.664062 -107.625603 -21808.593750 -107.625366 -21811.523438 -107.629425 -21814.453125 -107.626831 -21817.382812 -107.626778 -21820.312500 -107.626709 -21823.242188 -107.625481 -21826.171875 -107.627602 -21829.101562 -107.627823 -21832.031250 -107.627213 -21834.960938 -107.625786 -21837.890625 -107.630028 -21840.820312 -107.629723 -21843.750000 -107.629784 -21846.679688 -107.630928 -21849.609375 -107.630409 -21852.539062 -107.629707 -21855.468750 -107.633698 -21858.398438 -107.630318 -21861.328125 -107.631111 -21864.257812 -107.630501 -21867.187500 -107.630119 -21870.117188 -107.632271 -21873.046875 -107.631920 -21875.976562 -107.631416 -21878.906250 -107.628128 -21881.835938 -107.630981 -21884.765625 -107.630356 -21887.695312 -107.631142 -21890.625000 -107.631790 -21893.554688 -107.631004 -21896.484375 -107.633873 -21899.414062 -107.633163 -21902.343750 -107.632790 -21905.273438 -107.632042 -21908.203125 -107.634972 -21911.132812 -107.632812 -21914.062500 -107.634438 -21916.992188 -107.631790 -21919.921875 -107.634987 -21922.851562 -107.635368 -21925.781250 -107.636131 -21928.710938 -107.635788 -21931.640625 -107.635963 -21934.570312 -107.637444 -21937.500000 -107.637276 -21940.429688 -107.636421 -21943.359375 -107.636169 -21946.289062 -107.636292 -21949.218750 -107.635963 -21952.148438 -107.633980 -21955.078125 -107.636253 -21958.007812 -107.637177 -21960.937500 -107.640022 -21963.867188 -107.638794 -21966.796875 -107.634087 -21969.726562 -107.642441 -21972.656250 -107.639191 -21975.585938 -107.640961 -21978.515625 -107.639336 -21981.445312 -107.639305 -21984.375000 -107.636963 -21987.304688 -107.636940 -21990.234375 -107.651230 -21993.164062 -107.637764 -21996.093750 -107.648109 -21999.023438 -107.641693 -22001.953125 -107.633606 -22004.882812 -107.634293 -22007.812500 -107.637215 -22010.742188 -107.640381 -22013.671875 -107.643997 -22016.601562 -107.646339 -22019.531250 -107.633492 -22022.460938 -107.639503 -22025.390625 -107.642319 -22028.320312 -107.641205 -22031.250000 -107.645874 -22034.179688 -107.644318 -22037.109375 -107.645332 -22040.039062 -107.645058 -22042.968750 -107.644661 -22045.898438 -107.646782 -22048.828125 -107.644341 -22051.757812 -107.645950 -22054.687500 -107.641029 -22057.617188 -107.644279 -22060.546875 -107.641823 -22063.476562 -107.644310 -22066.406250 -107.644638 -22069.335938 -107.645889 -22072.265625 -107.645248 -22075.195312 -107.646271 -22078.125000 -107.645027 -22081.054688 -107.645882 -22083.984375 -107.650131 -22086.914062 -107.648895 -22089.843750 -107.648903 -22092.773438 -107.649406 -22095.703125 -107.650536 -22098.632812 -107.649239 -22101.562500 -107.648659 -22104.492188 -107.646286 -22107.421875 -107.651001 -22110.351562 -107.642975 -22113.281250 -107.642586 -22116.210938 -107.642204 -22119.140625 -107.648407 -22122.070312 -107.652061 -22125.000000 -107.648712 -22127.929688 -107.649780 -22130.859375 -107.650261 -22133.789062 -107.650185 -22136.718750 -107.652046 -22139.648438 -107.648323 -22142.578125 -107.653557 -22145.507812 -107.656883 -22148.437500 -107.653397 -22151.367188 -107.653381 -22154.296875 -107.650864 -22157.226562 -107.655312 -22160.156250 -107.653435 -22163.085938 -107.654037 -22166.015625 -107.650452 -22168.945312 -107.668533 -22171.875000 -107.653999 -22174.804688 -107.656693 -22177.734375 -107.660774 -22180.664062 -107.652847 -22183.593750 -107.654350 -22186.523438 -107.655655 -22189.453125 -107.656639 -22192.382812 -107.656273 -22195.312500 -107.657928 -22198.242188 -107.658745 -22201.171875 -107.658928 -22204.101562 -107.657257 -22207.031250 -107.656670 -22209.960938 -107.657234 -22212.890625 -107.655563 -22215.820312 -107.656166 -22218.750000 -107.659164 -22221.679688 -107.662056 -22224.609375 -107.653397 -22227.539062 -107.658539 -22230.468750 -107.659668 -22233.398438 -107.660278 -22236.328125 -107.662865 -22239.257812 -107.652687 -22242.187500 -107.661133 -22245.117188 -107.659058 -22248.046875 -107.659927 -22250.976562 -107.660263 -22253.906250 -107.660110 -22256.835938 -107.659058 -22259.765625 -107.658966 -22262.695312 -107.661049 -22265.625000 -107.662102 -22268.554688 -107.660187 -22271.484375 -107.659798 -22274.414062 -107.662560 -22277.343750 -107.660645 -22280.273438 -107.662384 -22283.203125 -107.661011 -22286.132812 -107.663506 -22289.062500 -107.661377 -22291.992188 -107.665131 -22294.921875 -107.659607 -22297.851562 -107.661263 -22300.781250 -107.662468 -22303.710938 -107.657806 -22306.640625 -107.684578 -22309.570312 -107.668724 -22312.500000 -107.668930 -22315.429688 -107.667023 -22318.359375 -107.674446 -22321.289062 -107.672157 -22324.218750 -107.675934 -22327.148438 -107.650681 -22330.078125 -107.673347 -22333.007812 -107.634956 -22335.937500 -107.703529 -22338.867188 -107.679070 -22341.796875 -107.664429 -22344.726562 -107.662628 -22347.656250 -107.654457 -22350.585938 -107.650696 -22353.515625 -107.698143 -22356.445312 -107.668060 -22359.375000 -107.656380 -22362.304688 -107.676018 -22365.234375 -107.663925 -22368.164062 -107.651749 -22371.093750 -107.678879 -22374.023438 -107.677811 -22376.953125 -107.699570 -22379.882812 -107.654793 -22382.812500 -107.676956 -22385.742188 -107.762932 -22388.671875 -107.587196 -22391.601562 -107.576843 -22394.531250 -107.675339 -22397.460938 -107.662048 -22400.390625 -107.687637 -22403.320312 -107.714104 -22406.250000 -107.670448 -22409.179688 -107.669876 -22412.109375 -107.669479 -22415.039062 -107.671509 -22417.968750 -107.665207 -22420.898438 -107.672134 -22423.828125 -107.672127 -22426.757812 -107.669662 -22429.687500 -107.681831 -22432.617188 -107.681923 -22435.546875 -107.673080 -22438.476562 -107.701675 -22441.406250 -107.669113 -22444.335938 -107.669250 -22447.265625 -107.695923 -22450.195312 -107.699150 -22453.125000 -107.692879 -22456.054688 -107.686142 -22458.984375 -107.692825 -22461.914062 -107.684288 -22464.843750 -107.685768 -22467.773438 -107.667282 -22470.703125 -107.673027 -22473.632812 -107.709740 -22476.562500 -107.655319 -22479.492188 -107.663284 -22482.421875 -107.670288 -22485.351562 -107.673454 -22488.281250 -107.672684 -22491.210938 -107.658592 -22494.140625 -107.672752 -22497.070312 -107.667206 -22500.000000 -107.670700 -22502.929688 -107.671349 -22505.859375 -107.672089 -22508.789062 -107.680359 -22511.718750 -107.676407 -22514.648438 -107.667023 -22517.578125 -107.666145 -22520.507812 -107.673546 -22523.437500 -107.670555 -22526.367188 -107.682800 -22529.296875 -107.670967 -22532.226562 -107.676865 -22535.156250 -107.674263 -22538.085938 -107.671089 -22541.015625 -107.669891 -22543.945312 -107.670471 -22546.875000 -107.668861 -22549.804688 -107.668808 -22552.734375 -107.670883 -22555.664062 -107.647545 -22558.593750 -107.676048 -22561.523438 -107.675110 -22564.453125 -107.671143 -22567.382812 -107.677162 -22570.312500 -107.672882 -22573.242188 -107.678513 -22576.171875 -107.675346 -22579.101562 -107.672874 -22582.031250 -107.677269 -22584.960938 -107.687019 -22587.890625 -107.684494 -22590.820312 -107.686340 -22593.750000 -107.686905 -22596.679688 -107.702904 -22599.609375 -107.681854 -22602.539062 -107.656487 -22605.468750 -107.623688 -22608.398438 -107.675964 -22611.328125 -107.821114 -22614.257812 -107.740250 -22617.187500 -107.680496 -22620.117188 -107.696754 -22623.046875 -107.683495 -22625.976562 -107.682297 -22628.906250 -107.681122 -22631.835938 -107.687256 -22634.765625 -107.681122 -22637.695312 -107.685112 -22640.625000 -107.693008 -22643.554688 -107.687958 -22646.484375 -107.673820 -22649.414062 -107.690491 -22652.343750 -107.685677 -22655.273438 -107.684418 -22658.203125 -107.682571 -22661.132812 -107.677155 -22664.062500 -107.660202 -22666.992188 -107.699699 -22669.921875 -107.677650 -22672.851562 -107.688637 -22675.781250 -107.677139 -22678.710938 -107.680359 -22681.640625 -107.680450 -22684.570312 -107.683487 -22687.500000 -107.682022 -22690.429688 -107.679520 -22693.359375 -107.678139 -22696.289062 -107.687981 -22699.218750 -107.693573 -22702.148438 -107.686859 -22705.078125 -107.688431 -22708.007812 -107.688850 -22710.937500 -107.687195 -22713.867188 -107.688110 -22716.796875 -107.687912 -22719.726562 -107.690575 -22722.656250 -107.689682 -22725.585938 -107.688843 -22728.515625 -107.684189 -22731.445312 -107.682365 -22734.375000 -107.689919 -22737.304688 -107.688835 -22740.234375 -107.683868 -22743.164062 -107.686714 -22746.093750 -107.687233 -22749.023438 -107.690399 -22751.953125 -107.687576 -22754.882812 -107.686935 -22757.812500 -107.697868 -22760.742188 -107.685654 -22763.671875 -107.705254 -22766.601562 -107.684639 -22769.531250 -107.692398 -22772.460938 -107.685921 -22775.390625 -107.694313 -22778.320312 -107.697014 -22781.250000 -107.687378 -22784.179688 -107.689774 -22787.109375 -107.689491 -22790.039062 -107.692802 -22792.968750 -107.691521 -22795.898438 -107.701881 -22798.828125 -107.688728 -22801.757812 -107.691025 -22804.687500 -107.690804 -22807.617188 -107.692574 -22810.546875 -107.691521 -22813.476562 -107.689240 -22816.406250 -107.690964 -22819.335938 -107.692108 -22822.265625 -107.692780 -22825.195312 -107.690125 -22828.125000 -107.694847 -22831.054688 -107.684319 -22833.984375 -107.693932 -22836.914062 -107.689766 -22839.843750 -107.693558 -22842.773438 -107.691734 -22845.703125 -107.695831 -22848.632812 -107.691566 -22851.562500 -107.693520 -22854.492188 -107.686264 -22857.421875 -107.694847 -22860.351562 -107.696915 -22863.281250 -107.688828 -22866.210938 -107.690544 -22869.140625 -107.696457 -22872.070312 -107.697098 -22875.000000 -107.703438 -22877.929688 -107.690674 -22880.859375 -107.684456 -22883.789062 -107.699280 -22886.718750 -107.702545 -22889.648438 -107.713867 -22892.578125 -107.683319 -22895.507812 -107.715996 -22898.437500 -107.694176 -22901.367188 -107.694496 -22904.296875 -107.693687 -22907.226562 -107.694855 -22910.156250 -107.696228 -22913.085938 -107.695168 -22916.015625 -107.697777 -22918.945312 -107.694016 -22921.875000 -107.696106 -22924.804688 -107.697227 -22927.734375 -107.702477 -22930.664062 -107.693947 -22933.593750 -107.695267 -22936.523438 -107.693909 -22939.453125 -107.698105 -22942.382812 -107.698410 -22945.312500 -107.693748 -22948.242188 -107.697128 -22951.171875 -107.697418 -22954.101562 -107.698524 -22957.031250 -107.698311 -22959.960938 -107.699623 -22962.890625 -107.699333 -22965.820312 -107.699699 -22968.750000 -107.705261 -22971.679688 -107.695564 -22974.609375 -107.701859 -22977.539062 -107.695282 -22980.468750 -107.691940 -22983.398438 -107.698479 -22986.328125 -107.695648 -22989.257812 -107.691566 -22992.187500 -107.701317 -22995.117188 -107.692505 -22998.046875 -107.700562 -23000.976562 -107.702377 -23003.906250 -107.703865 -23006.835938 -107.699211 -23009.765625 -107.705360 -23012.695312 -107.696556 -23015.625000 -107.699638 -23018.554688 -107.701279 -23021.484375 -107.701691 -23024.414062 -107.700668 -23027.343750 -107.700752 -23030.273438 -107.699287 -23033.203125 -107.700523 -23036.132812 -107.701614 -23039.062500 -107.701653 -23041.992188 -107.701561 -23044.921875 -107.702225 -23047.851562 -107.704575 -23050.781250 -107.701149 -23053.710938 -107.697922 -23056.640625 -107.703697 -23059.570312 -107.702835 -23062.500000 -107.702652 -23065.429688 -107.700569 -23068.359375 -107.700783 -23071.289062 -107.703590 -23074.218750 -107.701729 -23077.148438 -107.702332 -23080.078125 -107.700935 -23083.007812 -107.702309 -23085.937500 -107.702393 -23088.867188 -107.703712 -23091.796875 -107.701157 -23094.726562 -107.703621 -23097.656250 -107.703041 -23100.585938 -107.705551 -23103.515625 -107.700966 -23106.445312 -107.704338 -23109.375000 -107.706467 -23112.304688 -107.701668 -23115.234375 -107.702415 -23118.164062 -107.703156 -23121.093750 -107.706696 -23124.023438 -107.704224 -23126.953125 -107.703850 -23129.882812 -107.703369 -23132.812500 -107.704498 -23135.742188 -107.703751 -23138.671875 -107.704712 -23141.601562 -107.703835 -23144.531250 -107.706451 -23147.460938 -107.699654 -23150.390625 -107.700821 -23153.320312 -107.705452 -23156.250000 -107.699493 -23159.179688 -107.702118 -23162.109375 -107.699684 -23165.039062 -107.711494 -23167.968750 -107.706100 -23170.898438 -107.704727 -23173.828125 -107.704323 -23176.757812 -107.706322 -23179.687500 -107.704041 -23182.617188 -107.704414 -23185.546875 -107.703369 -23188.476562 -107.701118 -23191.406250 -107.702812 -23194.335938 -107.707214 -23197.265625 -107.704803 -23200.195312 -107.703300 -23203.125000 -107.702736 -23206.054688 -107.708176 -23208.984375 -107.710228 -23211.914062 -107.704765 -23214.843750 -107.708961 -23217.773438 -107.710030 -23220.703125 -107.707848 -23223.632812 -107.706001 -23226.562500 -107.709053 -23229.492188 -107.708008 -23232.421875 -107.705269 -23235.351562 -107.705452 -23238.281250 -107.707275 -23241.210938 -107.706673 -23244.140625 -107.709312 -23247.070312 -107.708069 -23250.000000 -107.706139 -23252.929688 -107.707588 -23255.859375 -107.707718 -23258.789062 -107.708038 -23261.718750 -107.708817 -23264.648438 -107.707878 -23267.578125 -107.708427 -23270.507812 -107.708443 -23273.437500 -107.707466 -23276.367188 -107.709488 -23279.296875 -107.707123 -23282.226562 -107.706215 -23285.156250 -107.702286 -23288.085938 -107.710426 -23291.015625 -107.709740 -23293.945312 -107.702667 -23296.875000 -107.706192 -23299.804688 -107.708176 -23302.734375 -107.708740 -23305.664062 -107.708374 -23308.593750 -107.710373 -23311.523438 -107.711372 -23314.453125 -107.709610 -23317.382812 -107.709976 -23320.312500 -107.708115 -23323.242188 -107.711357 -23326.171875 -107.706703 -23329.101562 -107.710243 -23332.031250 -107.709084 -23334.960938 -107.709801 -23337.890625 -107.712517 -23340.820312 -107.710854 -23343.750000 -107.708565 -23346.679688 -107.709175 -23349.609375 -107.709351 -23352.539062 -107.708992 -23355.468750 -107.712563 -23358.398438 -107.710060 -23361.328125 -107.711418 -23364.257812 -107.711823 -23367.187500 -107.711578 -23370.117188 -107.712303 -23373.046875 -107.712799 -23375.976562 -107.710732 -23378.906250 -107.709824 -23381.835938 -107.715073 -23384.765625 -107.712799 -23387.695312 -107.711472 -23390.625000 -107.709450 -23393.554688 -107.714218 -23396.484375 -107.714500 -23399.414062 -107.713226 -23402.343750 -107.711823 -23405.273438 -107.712418 -23408.203125 -107.711456 -23411.132812 -107.713387 -23414.062500 -107.710754 -23416.992188 -107.712799 -23419.921875 -107.713745 -23422.851562 -107.713676 -23425.781250 -107.713608 -23428.710938 -107.712372 -23431.640625 -107.713089 -23434.570312 -107.713089 -23437.500000 -107.712105 -23440.429688 -107.710510 -23443.359375 -107.711296 -23446.289062 -107.712929 -23449.218750 -107.710815 -23452.148438 -107.712265 -23455.078125 -107.711235 -23458.007812 -107.712929 -23460.937500 -107.712593 -23463.867188 -107.713554 -23466.796875 -107.714897 -23469.726562 -107.710052 -23472.656250 -107.716621 -23475.585938 -107.708702 -23478.515625 -107.715172 -23481.445312 -107.717026 -23484.375000 -107.710846 -23487.304688 -107.711868 -23490.234375 -107.716537 -23493.164062 -107.704239 -23496.093750 -107.705742 -23499.023438 -107.700409 -23501.953125 -107.702324 -23504.882812 -107.732307 -23507.812500 -107.705078 -23510.742188 -107.720276 -23513.671875 -107.722267 -23516.601562 -107.717094 -23519.531250 -107.709305 -23522.460938 -107.721596 -23525.390625 -107.716629 -23528.320312 -107.726707 -23531.250000 -107.709702 -23534.179688 -107.703964 -23537.109375 -107.711990 -23540.039062 -107.712402 -23542.968750 -107.712540 -23545.898438 -107.714066 -23548.828125 -107.716507 -23551.757812 -107.715065 -23554.687500 -107.712624 -23557.617188 -107.716690 -23560.546875 -107.718178 -23563.476562 -107.715561 -23566.406250 -107.714302 -23569.335938 -107.712547 -23572.265625 -107.723045 -23575.195312 -107.714462 -23578.125000 -107.716385 -23581.054688 -107.715424 -23583.984375 -107.715034 -23586.914062 -107.714241 -23589.843750 -107.717308 -23592.773438 -107.715012 -23595.703125 -107.714272 -23598.632812 -107.712303 -23601.562500 -107.715759 -23604.492188 -107.694580 -23607.421875 -107.723320 -23610.351562 -107.696838 -23613.281250 -107.708664 -23616.210938 -107.711197 -23619.140625 -107.725883 -23622.070312 -107.722527 -23625.000000 -107.720787 -23627.929688 -107.714470 -23630.859375 -107.714554 -23633.789062 -107.717613 -23636.718750 -107.719566 -23639.648438 -107.711220 -23642.578125 -107.716316 -23645.507812 -107.722176 -23648.437500 -107.713799 -23651.367188 -107.715889 -23654.296875 -107.713913 -23657.226562 -107.718315 -23660.156250 -107.717522 -23663.085938 -107.716148 -23666.015625 -107.711220 -23668.945312 -107.733871 -23671.875000 -107.713326 -23674.804688 -107.716438 -23677.734375 -107.717316 -23680.664062 -107.719810 -23683.593750 -107.719597 -23686.523438 -107.716125 -23689.453125 -107.719559 -23692.382812 -107.719406 -23695.312500 -107.718002 -23698.242188 -107.716545 -23701.171875 -107.719391 -23704.101562 -107.715546 -23707.031250 -107.715279 -23709.960938 -107.715942 -23712.890625 -107.712936 -23715.820312 -107.714066 -23718.750000 -107.715706 -23721.679688 -107.714790 -23724.609375 -107.715111 -23727.539062 -107.720497 -23730.468750 -107.720589 -23733.398438 -107.719139 -23736.328125 -107.718361 -23739.257812 -107.712769 -23742.187500 -107.718674 -23745.117188 -107.716141 -23748.046875 -107.717705 -23750.976562 -107.716499 -23753.906250 -107.716812 -23756.835938 -107.717041 -23759.765625 -107.716072 -23762.695312 -107.717300 -23765.625000 -107.717628 -23768.554688 -107.716797 -23771.484375 -107.716385 -23774.414062 -107.717232 -23777.343750 -107.718605 -23780.273438 -107.718430 -23783.203125 -107.716972 -23786.132812 -107.716202 -23789.062500 -107.716179 -23791.992188 -107.716766 -23794.921875 -107.717369 -23797.851562 -107.716843 -23800.781250 -107.709953 -23803.710938 -107.715576 -23806.640625 -107.721771 -23809.570312 -107.718849 -23812.500000 -107.720032 -23815.429688 -107.717010 -23818.359375 -107.718254 -23821.289062 -107.719894 -23824.218750 -107.720276 -23827.148438 -107.718681 -23830.078125 -107.722473 -23833.007812 -107.715279 -23835.937500 -107.721428 -23838.867188 -107.717216 -23841.796875 -107.716278 -23844.726562 -107.718071 -23847.656250 -107.716492 -23850.585938 -107.715149 -23853.515625 -107.715889 -23856.445312 -107.712639 -23859.375000 -107.715576 -23862.304688 -107.715233 -23865.234375 -107.717186 -23868.164062 -107.720566 -23871.093750 -107.711128 -23874.023438 -107.712372 -23876.953125 -107.704773 -23879.882812 -107.709320 -23882.812500 -107.707138 -23885.742188 -107.613930 -23888.671875 -107.626701 -23891.601562 -107.766769 -23894.531250 -107.772285 -23897.460938 -107.745728 -23900.390625 -107.706421 -23903.320312 -107.663132 -23906.250000 -107.708870 -23909.179688 -107.705582 -23912.109375 -107.713272 -23915.039062 -107.700142 -23917.968750 -107.717148 -23920.898438 -107.712761 -23923.828125 -107.714470 -23926.757812 -107.720085 -23929.687500 -107.705330 -23932.617188 -107.703682 -23935.546875 -107.726639 -23938.476562 -107.690895 -23941.406250 -107.719833 -23944.335938 -107.822739 -23947.265625 -107.698059 -23950.195312 -107.704948 -23953.125000 -107.709473 -23956.054688 -107.724380 -23958.984375 -107.707535 -23961.914062 -107.720642 -23964.843750 -107.732788 -23967.773438 -107.740044 -23970.703125 -107.724258 -23973.632812 -107.706337 -23976.562500 -107.739586 -23979.492188 -107.739174 -23982.421875 -107.735641 -23985.351562 -107.734123 -23988.281250 -107.734406 -23991.210938 -107.737434 -23994.140625 -107.730873 -23997.070312 -107.731377