From 0aab5436266a5cca938c8c67dbbfcb539221fe2e Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:07:04 +0000 Subject: [PATCH 01/48] web: fix stale auth_login url name; drop leftover empty packages KEGBOT_ADMIN_LOGIN_URL and the activation-complete template referenced the url name "auth_login", which no longer exists (the route is named "login"), breaking staff_member_required redirects with NoReverseMatch. Also remove pykeg/backend and pykeg/contrib/{twitter,untappd,foursquare}, which contained only stale __pycache__ left over from earlier removals. --- pykeg/settings.py | 2 +- pykeg/web/templates/registration/activation_complete.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pykeg/settings.py b/pykeg/settings.py index 7a83dbcdf..dae30423a 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -59,7 +59,7 @@ LOGIN_REDIRECT_URL = "/account/" -KEGBOT_ADMIN_LOGIN_URL = "auth_login" +KEGBOT_ADMIN_LOGIN_URL = "login" AUTH_USER_MODEL = "core.User" diff --git a/pykeg/web/templates/registration/activation_complete.html b/pykeg/web/templates/registration/activation_complete.html index 4389ed2a8..8e2c2e176 100644 --- a/pykeg/web/templates/registration/activation_complete.html +++ b/pykeg/web/templates/registration/activation_complete.html @@ -6,6 +6,6 @@ {% block content %}

- You may now log in. + You may now log in.

{% endblock %} From bfaa79ccee07003169a8712a3574f5edd834b1bd Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:11:59 +0000 Subject: [PATCH 02/48] api: add list filtering, page sizing, and a current-session endpoint Adds django-filter with FilterSets for drinks (user/keg/session/username), kegs (status), sessions (year/month/day, powering the date archives), events (since, for pollers), thermo logs (sensor/time range), and users + auth tokens (search, replacing the kegadmin autocomplete views). Cursor pagination now honors ?page_size (capped at 100). Ordering stays fixed at -id since cursor pagination owns the sort order. Adds GET /api/sessions/current, returning the active session or 404. --- pykeg/api/filters.py | 78 ++++++++++++++++++++++++++++ pykeg/api/pagination.py | 3 ++ pykeg/api/tests.py | 112 ++++++++++++++++++++++++++++++++++++++++ pykeg/api/views.py | 23 ++++++++- pykeg/settings.py | 4 ++ pyproject.toml | 1 + uv.lock | 14 +++++ 7 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 pykeg/api/filters.py diff --git a/pykeg/api/filters.py b/pykeg/api/filters.py new file mode 100644 index 000000000..312b166ff --- /dev/null +++ b/pykeg/api/filters.py @@ -0,0 +1,78 @@ +"""FilterSets for API list endpoints. + +These power the query parameters the frontend uses for drill-down pages +(per-user drink lists, keg detail, session date archives) and search. +""" + +from django.db.models import Q +from django_filters import rest_framework as filters + +from pykeg.core import models + + +class DrinkFilter(filters.FilterSet): + username = filters.CharFilter(field_name="user__username") + + class Meta: + model = models.Drink + fields = ["user", "keg", "session", "username"] + + +class KegFilter(filters.FilterSet): + class Meta: + model = models.Keg + fields = ["status"] + + +class DrinkingSessionFilter(filters.FilterSet): + year = filters.NumberFilter(field_name="start_time", lookup_expr="year") + month = filters.NumberFilter(field_name="start_time", lookup_expr="month") + day = filters.NumberFilter(field_name="start_time", lookup_expr="day") + + class Meta: + model = models.DrinkingSession + fields = ["year", "month", "day"] + + +class SystemEventFilter(filters.FilterSet): + since = filters.NumberFilter(field_name="id", lookup_expr="gt") + username = filters.CharFilter(field_name="user__username") + + class Meta: + model = models.SystemEvent + fields = ["since", "kind", "user", "username", "keg", "session"] + + +class ThermologFilter(filters.FilterSet): + since = filters.IsoDateTimeFilter(field_name="time", lookup_expr="gte") + until = filters.IsoDateTimeFilter(field_name="time", lookup_expr="lt") + + class Meta: + model = models.Thermolog + fields = ["sensor", "since", "until"] + + +class UserFilter(filters.FilterSet): + search = filters.CharFilter(method="filter_search") + + class Meta: + model = models.User + fields = ["is_active", "is_staff", "search"] + + def filter_search(self, queryset, name, value): + return queryset.filter(Q(username__icontains=value) | Q(display_name__icontains=value)) + + +class AuthenticationTokenFilter(filters.FilterSet): + search = filters.CharFilter(method="filter_search") + + class Meta: + model = models.AuthenticationToken + fields = ["auth_device", "enabled", "user", "search"] + + def filter_search(self, queryset, name, value): + return queryset.filter( + Q(token_value__icontains=value) + | Q(nice_name__icontains=value) + | Q(user__username__icontains=value) + ) diff --git a/pykeg/api/pagination.py b/pykeg/api/pagination.py index b94a25c0a..2615e6140 100644 --- a/pykeg/api/pagination.py +++ b/pykeg/api/pagination.py @@ -13,5 +13,8 @@ class CursorPagination(BaseCursorPagination): cursor. We can fix the implementation later. """ + page_size_query_param = "page_size" + max_page_size = 100 + def get_ordering(self, request, queryset, view): return ("-id",) diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 2b15ac6a8..674dbc3d2 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -1,6 +1,8 @@ import base64 +import datetime from django.test import TestCase +from django.utils import timezone from rest_framework.test import APIClient from pykeg.core import models @@ -157,6 +159,116 @@ def test_notification_settings_are_scoped_to_caller(self): self.assertEqual([], data["results"]) +class FilteringTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + self.admin = models.User.objects.filter(is_staff=True).first() + self.admin_key = models.ApiKey.objects.get_or_create(user=self.admin)[0] + + def test_drinks_filtered_by_username(self): + drink = models.Drink.objects.exclude(user__isnull=True).first() + username = drink.user.username + expected = models.Drink.objects.filter(user__username=username).count() + + status, data = self.client.get(f"/api/drinks?username={username}&page_size=100") + self.assertEqual(200, status) + self.assertEqual(expected, len(data["results"])) + + status, data = self.client.get("/api/drinks?username=no-such-user") + self.assertEqual(200, status) + self.assertEqual([], data["results"]) + + def test_drinks_filtered_by_keg_and_session(self): + drink = models.Drink.objects.exclude(session__isnull=True).first() + + status, data = self.client.get(f"/api/drinks?keg={drink.keg_id}&page_size=100") + self.assertEqual(200, status) + self.assertGreater(len(data["results"]), 0) + self.assertTrue(all(d["keg"]["id"] == drink.keg_id for d in data["results"])) + + status, data = self.client.get(f"/api/drinks?session={drink.session_id}&page_size=100") + self.assertEqual(200, status) + self.assertGreater(len(data["results"]), 0) + self.assertTrue(all(d["session_id"] == drink.session_id for d in data["results"])) + + def test_kegs_filtered_by_status(self): + expected = models.Keg.objects.filter(status=models.Keg.STATUS_ON_TAP).count() + status, data = self.client.get("/api/kegs?status=on_tap&page_size=100") + self.assertEqual(200, status) + self.assertEqual(expected, len(data["results"])) + + def test_sessions_filtered_by_date(self): + session = models.DrinkingSession.objects.first() + dt = session.start_time + status, data = self.client.get( + f"/api/sessions?year={dt.year}&month={dt.month}&page_size=100" + ) + self.assertEqual(200, status) + self.assertIn(session.id, [s["id"] for s in data["results"]]) + + status, data = self.client.get("/api/sessions?year=1999") + self.assertEqual(200, status) + self.assertEqual([], data["results"]) + + def test_events_filtered_by_since(self): + max_id = models.SystemEvent.objects.latest("id").id + status, data = self.client.get(f"/api/events?since={max_id}") + self.assertEqual(200, status) + self.assertEqual([], data["results"]) + + status, data = self.client.get(f"/api/events?since={max_id - 2}") + self.assertEqual(200, status) + self.assertEqual(2, len(data["results"])) + + def test_users_search(self): + self.client.api_key = self.admin_key.key + status, data = self.client.get("/api/users?search=alic&page_size=100") + self.assertEqual(200, status) + self.assertEqual(["alice"], [u["username"] for u in data["results"]]) + + def test_page_size_is_honored_and_capped(self): + total = models.Drink.objects.count() + self.assertGreater(total, 10) + + status, data = self.client.get("/api/drinks?page_size=100") + self.assertEqual(200, status) + self.assertEqual(total, len(data["results"])) + + status, data = self.client.get("/api/drinks?page_size=3") + self.assertEqual(200, status) + self.assertEqual(3, len(data["results"])) + + +class CurrentSessionTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + + def test_no_active_session_returns_404(self): + # Fixture sessions are long in the past. + status, _ = self.client.get("/api/sessions/current") + self.assertEqual(404, status) + + def test_active_session_is_returned(self): + session = models.DrinkingSession.objects.latest() + session.start_time = timezone.now() - datetime.timedelta(minutes=10) + session.end_time = timezone.now() + datetime.timedelta(minutes=10) + session.save() + + status, data = self.client.get("/api/sessions/current") + self.assertEqual(200, status) + self.assertEqual(session.id, data["id"]) + + class SchemaTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/views.py b/pykeg/api/views.py index e41dc8ff6..19f9d9bab 100644 --- a/pykeg/api/views.py +++ b/pykeg/api/views.py @@ -4,15 +4,17 @@ from drf_spectacular.utils import extend_schema from rest_framework import viewsets from rest_framework.decorators import ( + action, api_view, authentication_classes, permission_classes, ) +from rest_framework.exceptions import NotFound from rest_framework.response import Response from pykeg.core import models -from . import permissions, serializers +from . import filters, permissions, serializers class UserViewSet(viewsets.ReadOnlyModelViewSet): @@ -25,6 +27,7 @@ class UserViewSet(viewsets.ReadOnlyModelViewSet): queryset = models.User.objects.all() serializer_class = serializers.UserSerializer permission_classes = [permissions.IsAuthenticated] + filterset_class = filters.UserFilter class InvitationViewSet(viewsets.ReadOnlyModelViewSet): @@ -131,6 +134,7 @@ class KegViewSet(viewsets.ReadOnlyModelViewSet): queryset = models.Keg.objects.all() serializer_class = serializers.KegSerializer permission_classes = [permissions.DashboardViewer] + filterset_class = filters.KegFilter class DrinkViewSet(viewsets.ReadOnlyModelViewSet): @@ -139,6 +143,7 @@ class DrinkViewSet(viewsets.ReadOnlyModelViewSet): queryset = models.Drink.objects.all() serializer_class = serializers.DrinkSerializer permission_classes = [permissions.DashboardViewer] + filterset_class = filters.DrinkFilter class AuthenticationTokenViewSet(viewsets.ModelViewSet): @@ -147,6 +152,7 @@ class AuthenticationTokenViewSet(viewsets.ModelViewSet): queryset = models.AuthenticationToken.objects.all() serializer_class = serializers.AuthenticationTokenSerializer permission_classes = [permissions.IsAdminUser] + filterset_class = filters.AuthenticationTokenFilter class DrinkingSessionViewSet(viewsets.ReadOnlyModelViewSet): @@ -155,6 +161,19 @@ class DrinkingSessionViewSet(viewsets.ReadOnlyModelViewSet): queryset = models.DrinkingSession.objects.all() serializer_class = serializers.DrinkingSessionSerializer permission_classes = [permissions.DashboardViewer] + filterset_class = filters.DrinkingSessionFilter + + @extend_schema(responses=serializers.DrinkingSessionSerializer) + @action(detail=False) + def current(self, request): + """Returns the currently-active session, or 404 if there is none.""" + try: + latest = models.DrinkingSession.objects.latest() + except models.DrinkingSession.DoesNotExist: + latest = None + if not latest or not latest.IsActiveNow(): + raise NotFound("There is no active session.") + return Response(self.get_serializer(latest).data) class ThermoSensorViewSet(viewsets.ModelViewSet): @@ -171,6 +190,7 @@ class ThermologViewSet(viewsets.ReadOnlyModelViewSet): queryset = models.Thermolog.objects.all() serializer_class = serializers.ThermologSerializer permission_classes = [permissions.DashboardViewer] + filterset_class = filters.ThermologFilter class StatsViewSet(viewsets.ReadOnlyModelViewSet): @@ -187,6 +207,7 @@ class SystemEventViewSet(viewsets.ReadOnlyModelViewSet): queryset = models.SystemEvent.objects.all() serializer_class = serializers.SystemEventSerializer permission_classes = [permissions.DashboardViewer] + filterset_class = filters.SystemEventFilter class NotificationSettingsViewSet(viewsets.ModelViewSet): diff --git a/pykeg/settings.py b/pykeg/settings.py index dae30423a..f6c6cea02 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -54,6 +54,7 @@ "rest_framework", "drf_spectacular", "drf_spectacular_sidecar", + "django_filters", "django_rq", ) @@ -335,6 +336,9 @@ REST_FRAMEWORK = { "DEFAULT_PAGINATION_CLASS": "pykeg.api.pagination.CursorPagination", "PAGE_SIZE": 10, + "DEFAULT_FILTER_BACKENDS": [ + "django_filters.rest_framework.DjangoFilterBackend", + ], "DEFAULT_PERMISSION_CLASSES": [ "pykeg.api.permissions.IsAuthenticated", ], diff --git a/pyproject.toml b/pyproject.toml index 7b10ee324..f1b04b96f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ dependencies = [ "dj-email-url", "django-cors-headers>=4.9,<5", "django-crispy-forms>=2.4,<3", + "django-filter>=25.1", "crispy-bootstrap4>=2024.10", "django-imagekit", "django-redis>=5.4", diff --git a/uv.lock b/uv.lock index 23ef5c6f1..5b7a8c589 100644 --- a/uv.lock +++ b/uv.lock @@ -286,6 +286,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/44/50335d09c4deb70affee0c54feef07ba458df015e32e45490615d9dc5b6b/django_crispy_forms-2.7-py3-none-any.whl", hash = "sha256:42a7ecb05ac3fd050d006dfe7aeceb7f318c30e5b5124ff619e2be252f36f096", size = 31478, upload-time = "2026-07-29T11:12:11.052Z" }, ] +[[package]] +name = "django-filter" +version = "26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/3e/563965173d4cbb5fc308087e7b3d11a115b7b67273d093622480b1e31f78/django_filter-26.1.tar.gz", hash = "sha256:66ea04031b068c77c86e1ac26ced7a3f8f13ce797f5795751707e3deefc58054", size = 144299, upload-time = "2026-07-11T09:27:02.767Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/01/afffed1e3c4540fb75bf550a18b6176a9f6371b5f3e52b69a28995b6480c/django_filter-26.1-py3-none-any.whl", hash = "sha256:7d98ef2899218e6242619b532cb1b95af14e09dfcf74844aecb550ad27b59ff2", size = 94069, upload-time = "2026-07-11T09:27:01.012Z" }, +] + [[package]] name = "django-imagekit" version = "6.1.0" @@ -566,6 +578,7 @@ dependencies = [ { name = "django" }, { name = "django-cors-headers" }, { name = "django-crispy-forms" }, + { name = "django-filter" }, { name = "django-imagekit" }, { name = "django-redis" }, { name = "django-registration" }, @@ -614,6 +627,7 @@ requires-dist = [ { name = "django", specifier = ">=5.2,<5.3" }, { name = "django-cors-headers", specifier = ">=4.9,<5" }, { name = "django-crispy-forms", specifier = ">=2.4,<3" }, + { name = "django-filter", specifier = ">=25.1" }, { name = "django-imagekit" }, { name = "django-redis", specifier = ">=5.4" }, { name = "django-registration", specifier = ">=5.1" }, From 7a2d58aaffff67437101696466caa83f55b17a5a Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:18:23 +0000 Subject: [PATCH 03/48] api: add the /api/users/me boot endpoint; share constants via codegen GET /api/users/me is the frontend boot endpoint. It always responds 200 regardless of authentication or site privacy: user is null for anonymous callers, and the payload is limited to privacy-safe site configuration (plus can_invite, sso urls, and the plugin list) that the frontend needs to render login screens and interstitials. It also sets the CSRF cookie so a fresh browser session can immediately make authenticated POSTs. It supersedes /api/auth/current-user, which is removed. Static constants (choice lists, keg sizes, timezones) are deliberately not served over the API: the new print_constants management command writes them to web-ui/lib/shared-constants.ts, which gets baked into the frontend build. When setup or upgrade is required, /api/* requests now receive a JSON 403 instead of a rendered HTML page, and /api/setup/ is exempted for the upcoming setup-wizard API. Drops django-cors-headers and the hardcoded localhost:1234 CORS/CSRF origins: frontend development runs through the vite dev-server proxy, so browser requests are always same-origin. --- pykeg/api/serializers.py | 51 ++ pykeg/api/tests.py | 70 +++ pykeg/api/urls.py | 3 +- pykeg/api/views.py | 36 +- .../management/commands/print_constants.py | 21 + pykeg/settings.py | 13 - pykeg/util/genconstants.py | 40 ++ pykeg/util/genconstants_test.py | 24 + pykeg/web/middleware.py | 16 +- pyproject.toml | 1 - uv.lock | 15 - web-ui/lib/shared-constants.ts | 591 ++++++++++++++++++ 12 files changed, 844 insertions(+), 37 deletions(-) create mode 100644 pykeg/core/management/commands/print_constants.py create mode 100644 pykeg/util/genconstants.py create mode 100644 pykeg/util/genconstants_test.py create mode 100644 web-ui/lib/shared-constants.ts diff --git a/pykeg/api/serializers.py b/pykeg/api/serializers.py index a39bbdf15..e7193f416 100644 --- a/pykeg/api/serializers.py +++ b/pykeg/api/serializers.py @@ -421,3 +421,54 @@ class SystemStatusSerializer(serializers.Serializer): site = KegbotSiteSerializer() taps = KegTapSerializer(many=True) events = SystemEventSerializer(many=True) + + +class PluginInfoSerializer(serializers.Serializer): + short_name = serializers.CharField() + name = serializers.CharField() + + +class SiteConfigSerializer(serializers.ModelSerializer): + """The privacy-safe subset of site settings, embedded in the boot payload. + + Unlike `KegbotSiteSerializer`, this contains no data derived from pours + (no stats): it is served to anonymous users regardless of site privacy, + since the frontend needs it to render the login and interstitial screens. + """ + + class Meta: + model = models.KegbotSite + fields = [ + "server_version", + "title", + "privacy", + "registration_mode", + "volume_display_units", + "temperature_display_units", + "timezone", + "session_timeout_minutes", + "enable_sensing", + "enable_users", + "google_analytics_id", + "background_image", + ] + + background_image = PictureSerializer(read_only=True) + + +class MeSerializer(serializers.Serializer): + """The boot payload: current user plus always-needed site metadata. + + Served to every caller with status 200; `user` is null when the caller + is not authenticated. Static constants (choice lists, keg sizes, and + similar) are NOT served here: they are baked into the frontend build + via the `print_constants` management command. + """ + + user = CurrentUserSerializer(allow_null=True) + site = SiteConfigSerializer() + can_invite = serializers.BooleanField() + have_sessions = serializers.BooleanField() + sso_login_url = serializers.CharField(allow_blank=True) + sso_logout_url = serializers.CharField(allow_blank=True) + plugins = PluginInfoSerializer(many=True) diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 674dbc3d2..c2a24629a 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -269,6 +269,76 @@ def test_active_session_is_returned(self): self.assertEqual(session.id, data["id"]) +class MeEndpointTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + self.user = models.User.objects.get(username="alice") + self.api_key = models.ApiKey.objects.get_or_create(user=self.user)[0] + + def test_anonymous_caller_gets_null_user_even_on_private_site(self): + self.site.privacy = models.KegbotSite.PRIVACY_CHOICE_STAFF + self.site.save() + + status, data = self.client.get("/api/users/me") + self.assertEqual(200, status) + self.assertIsNone(data["user"]) + self.assertEqual("staff", data["site"]["privacy"]) + self.assertEqual(self.site.title, data["site"]["title"]) + # The boot payload must not leak pour-derived data. + self.assertNotIn("stats", data["site"]) + + def test_authenticated_caller_gets_user(self): + self.client.api_key = self.api_key.key + status, data = self.client.get("/api/users/me") + self.assertEqual(200, status) + self.assertEqual("alice", data["user"]["username"]) + + def test_metadata_fields_are_present(self): + status, data = self.client.get("/api/users/me") + self.assertEqual(200, status) + self.assertTrue(data["have_sessions"]) + self.assertIn("can_invite", data) + self.assertEqual( + ["webhook"], + [p["short_name"] for p in data["plugins"]], + ) + + def test_sets_csrf_cookie(self): + response = self.client.client.get("/api/users/me") + self.assertEqual(200, response.status_code) + self.assertIn("csrftoken", response.cookies) + + +class SetupGateTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + + def test_setup_required_returns_json(self): + self.site.is_setup = False + self.site.save() + status, data = self.client.get("/api/users/me") + self.assertEqual(403, status) + self.assertEqual({"error": "setup_required"}, data) + + def test_upgrade_required_returns_json(self): + self.site.server_version = "0.0.1" + self.site.save() + status, data = self.client.get("/api/status") + self.assertEqual(403, status) + self.assertEqual("upgrade_required", data["error"]) + self.assertEqual("0.0.1", data["installed_version"]) + + class SchemaTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/urls.py b/pykeg/api/urls.py index f7e395d1f..b114e89f0 100644 --- a/pykeg/api/urls.py +++ b/pykeg/api/urls.py @@ -27,9 +27,10 @@ router.register("users", views.UserViewSet) urlpatterns = [ + # Must precede the router so it wins over the users/{pk} detail route. + path("users/me", views.me), path("", include(router.urls)), path("auth/api-auth/", include("rest_framework.urls", namespace="rest_framework")), - path("auth/current-user", views.current_user), path("auth/login", views.login), path("auth/logout", views.logout), path("status", views.system_status), diff --git a/pykeg/api/views.py b/pykeg/api/views.py index 19f9d9bab..7e84b3226 100644 --- a/pykeg/api/views.py +++ b/pykeg/api/views.py @@ -1,5 +1,7 @@ +from django.conf import settings from django.contrib.auth import login as auth_login from django.contrib.auth import logout as auth_logout +from django.views.decorators.csrf import ensure_csrf_cookie from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema from rest_framework import viewsets @@ -275,9 +277,33 @@ def logout(request): return Response(True) -@extend_schema(responses=serializers.CurrentUserSerializer) +@ensure_csrf_cookie +@extend_schema(responses=serializers.MeSerializer) @api_view(["GET"]) -def current_user(request): - user = request.user - serializer = serializers.CurrentUserSerializer(instance=user) - return Response(serializer.data) +@permission_classes(()) +def me(request): + """The frontend boot endpoint. + + Always responds 200, regardless of authentication and site privacy: + `user` is null for anonymous callers, and the rest of the payload is + limited to privacy-safe configuration the frontend always needs (to + render login screens, privacy interstitials, forms, and navigation). + + Also sets the CSRF cookie, so a fresh browser session can make + authenticated POSTs after calling this. + """ + user = request.user if request.user.is_authenticated else None + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + plugins = getattr(request, "plugins", {}) or {} + payload = { + "user": user, + "site": site, + "can_invite": site.can_invite(user), + "have_sessions": models.DrinkingSession.objects.exists(), + "sso_login_url": getattr(settings, "SSO_LOGIN_URL", "") or "", + "sso_logout_url": getattr(settings, "SSO_LOGOUT_URL", "") or "", + "plugins": [ + {"short_name": p.get_short_name(), "name": p.get_name()} for p in plugins.values() + ], + } + return Response(serializers.MeSerializer(instance=payload).data) diff --git a/pykeg/core/management/commands/print_constants.py b/pykeg/core/management/commands/print_constants.py new file mode 100644 index 000000000..9d080721d --- /dev/null +++ b/pykeg/core/management/commands/print_constants.py @@ -0,0 +1,21 @@ +import json +import os + +from django.conf import settings +from django.core.management.base import BaseCommand + +from pykeg.util.genconstants import genconstants + +OUTFILE = os.path.join(settings.BASE_DIR, "web-ui/lib/shared-constants.ts") + + +class Command(BaseCommand): + help = f"Writes all Django-managed constants to `{OUTFILE}`." + + def handle(self, *args, **options): + data = json.dumps(genconstants(), indent=2) + ts_content = f"export default {data} as const;\n" + os.makedirs(os.path.dirname(OUTFILE), exist_ok=True) + with open(OUTFILE, "w+") as fp: + fp.write(ts_content) + print(data) diff --git a/pykeg/settings.py b/pykeg/settings.py index f6c6cea02..3260f7e17 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -50,7 +50,6 @@ "crispy_forms", "crispy_bootstrap4", "imagekit", - "corsheaders", "rest_framework", "drf_spectacular", "drf_spectacular_sidecar", @@ -140,7 +139,6 @@ MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", - "corsheaders.middleware.CorsMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "pykeg.web.middleware.ErrorLoggingMiddleware", @@ -360,15 +358,4 @@ "SWAGGER_UI_FAVICON_HREF": "SIDECAR", } -CORS_ALLOWED_ORIGINS = [ - "http://localhost:1234", - "http://127.0.0.1:1234", -] -CSRF_TRUSTED_ORIGINS = [ - "http://localhost:1234", - "http://127.0.0.1:1234", -] -CORS_ALLOW_CREDENTIALS = True -SESSION_COOKIE_SAMESITE = None - APPEND_SLASH = True diff --git a/pykeg/util/genconstants.py b/pykeg/util/genconstants.py new file mode 100644 index 000000000..feae0f0d8 --- /dev/null +++ b/pykeg/util/genconstants.py @@ -0,0 +1,40 @@ +"""Builds the constants object shared with the frontend. + +The `print_constants` management command writes this to a TypeScript file +that is baked into the frontend build; regenerate it whenever any of the +source constants change. +""" + +from pykeg.core import keg_sizes, models +from pykeg.core.timezones import timezone_choices + + +def sort_dict_by_keys(d): + return dict(sorted(d.items())) + + +def genconstants(): + """Returns the object written to `web-ui/lib/shared-constants.ts`. + + Note on sorting: most values are sorted by key to keep regeneration + diffs minimal; javascript consumers re-sort for presentation where + ordering matters (e.g. keg types by volume, via KEG_VOLUMES_ML). + """ + return { + "BEVERAGE_TYPES": dict(models.Beverage.TYPES), + "EVENT_KINDS": dict(models.SystemEvent.KINDS), + "KEG_STATUSES": dict(models.Keg.STATUS_CHOICES), + "KEG_STATUS_AVAILABLE": models.Keg.STATUS_AVAILABLE, + "KEG_STATUS_FINISHED": models.Keg.STATUS_FINISHED, + "KEG_STATUS_ON_TAP": models.Keg.STATUS_ON_TAP, + "KEG_TYPES": sort_dict_by_keys(keg_sizes.DESCRIPTIONS), + "KEG_TYPE_OTHER": keg_sizes.OTHER, + "KEG_VOLUMES_ML": sort_dict_by_keys(keg_sizes.VOLUMES_ML), + "PRIVACY_CHOICES": dict(models.KegbotSite.PRIVACY_CHOICES), + "REGISTRATION_MODE_CHOICES": dict(models.KegbotSite.REGISTRATION_MODE_CHOICES), + "TEMPERATURE_DISPLAY_UNITS_CHOICES": dict( + models.KegbotSite.TEMPERATURE_DISPLAY_UNITS_CHOICES + ), + "TIMEZONES": [zone for zone, _ in timezone_choices()], + "VOLUME_DISPLAY_UNITS_CHOICES": dict(models.KegbotSite.VOLUME_DISPLAY_UNITS_CHOICES), + } diff --git a/pykeg/util/genconstants_test.py b/pykeg/util/genconstants_test.py new file mode 100644 index 000000000..4a5436cb9 --- /dev/null +++ b/pykeg/util/genconstants_test.py @@ -0,0 +1,24 @@ +import json + +from django.test import TestCase + +from pykeg.util.genconstants import genconstants + + +class GenConstantsTestCase(TestCase): + def test_output_is_json_serializable(self): + data = genconstants() + round_tripped = json.loads(json.dumps(data)) + self.assertEqual(data, round_tripped) + + def test_expected_keys_present(self): + data = genconstants() + self.assertEqual("on_tap", data["KEG_STATUS_ON_TAP"]) + self.assertIn("half-barrel", data["KEG_TYPES"]) + self.assertIn("half-barrel", data["KEG_VOLUMES_ML"]) + self.assertEqual( + ["public", "members", "staff"], + list(data["PRIVACY_CHOICES"]), + ) + self.assertIn("UTC", data["TIMEZONES"]) + self.assertIn("drink_poured", data["EVENT_KINDS"]) diff --git a/pykeg/web/middleware.py b/pykeg/web/middleware.py index 24dd1b4a6..619b06452 100644 --- a/pykeg/web/middleware.py +++ b/pykeg/web/middleware.py @@ -2,7 +2,7 @@ from django.conf import settings from django.db import connection -from django.http import HttpResponse +from django.http import HttpResponse, JsonResponse from django.shortcuts import render from django.utils import timezone @@ -150,6 +150,10 @@ def process_view(self, request, view_func, view_args, view_kwargs): # API endpoints handle "setup required" differently. return None + if request.path.startswith("/api/setup"): + # The setup API is how the frontend performs setup/upgrade. + return None + if request.need_setup: return self._setup_required(request) elif request.need_upgrade: @@ -158,11 +162,19 @@ def process_view(self, request, view_func, view_args, view_kwargs): return None def _setup_required(self, request): + if request.path.startswith("/api/"): + return JsonResponse({"error": "setup_required"}, status=403) return render(request, "setup_wizard/setup_required.html", status=403) def _upgrade_required(self, request): + installed_version = getattr(request, "installed_version_string", None) + if request.path.startswith("/api/"): + return JsonResponse( + {"error": "upgrade_required", "installed_version": installed_version}, + status=403, + ) context = { - "installed_version": getattr(request, "installed_version_string", None), + "installed_version": installed_version, } return render(request, "setup_wizard/upgrade_required.html", context=context, status=403) diff --git a/pyproject.toml b/pyproject.toml index f1b04b96f..e66761cb3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,6 @@ dependencies = [ "coloredlogs", "dj-database-url", "dj-email-url", - "django-cors-headers>=4.9,<5", "django-crispy-forms>=2.4,<3", "django-filter>=25.1", "crispy-bootstrap4>=2024.10", diff --git a/uv.lock b/uv.lock index 5b7a8c589..2757acc65 100644 --- a/uv.lock +++ b/uv.lock @@ -261,19 +261,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/e6/4c34d94dfb74bbcbc489606e61f1924933de30d22c593dd1f429f35fbd7f/django_appconf-1.2.0-py3-none-any.whl", hash = "sha256:b81bce5ef0ceb9d84df48dfb623a32235d941c78cc5e45dbb6947f154ea277f4", size = 6500, upload-time = "2025-11-08T15:46:25.957Z" }, ] -[[package]] -name = "django-cors-headers" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "asgiref" }, - { name = "django" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/21/39/55822b15b7ec87410f34cd16ce04065ff390e50f9e29f31d6d116fc80456/django_cors_headers-4.9.0.tar.gz", hash = "sha256:fe5d7cb59fdc2c8c646ce84b727ac2bca8912a247e6e68e1fb507372178e59e8", size = 21458, upload-time = "2025-09-18T10:40:52.326Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/30/d8/19ed1e47badf477d17fb177c1c19b5a21da0fd2d9f093f23be3fb86c5fab/django_cors_headers-4.9.0-py3-none-any.whl", hash = "sha256:15c7f20727f90044dcee2216a9fd7303741a864865f0c3657e28b7056f61b449", size = 12809, upload-time = "2025-09-18T10:40:50.843Z" }, -] - [[package]] name = "django-crispy-forms" version = "2.7" @@ -576,7 +563,6 @@ dependencies = [ { name = "dj-database-url" }, { name = "dj-email-url" }, { name = "django" }, - { name = "django-cors-headers" }, { name = "django-crispy-forms" }, { name = "django-filter" }, { name = "django-imagekit" }, @@ -625,7 +611,6 @@ requires-dist = [ { name = "dj-database-url" }, { name = "dj-email-url" }, { name = "django", specifier = ">=5.2,<5.3" }, - { name = "django-cors-headers", specifier = ">=4.9,<5" }, { name = "django-crispy-forms", specifier = ">=2.4,<3" }, { name = "django-filter", specifier = ">=25.1" }, { name = "django-imagekit" }, diff --git a/web-ui/lib/shared-constants.ts b/web-ui/lib/shared-constants.ts new file mode 100644 index 000000000..b2246e151 --- /dev/null +++ b/web-ui/lib/shared-constants.ts @@ -0,0 +1,591 @@ +export default { + "BEVERAGE_TYPES": { + "beer": "Beer", + "wine": "Wine", + "soda": "Soda", + "kombucha": "Kombucha", + "other": "Other/Unknown" + }, + "EVENT_KINDS": { + "drink_poured": "Drink poured", + "session_started": "Session started", + "session_joined": "User joined session", + "keg_tapped": "Keg tapped", + "keg_volume_low": "Keg volume low", + "keg_ended": "Keg ended" + }, + "KEG_STATUSES": { + "available": "Available", + "on_tap": "On tap", + "finished": "Finished" + }, + "KEG_STATUS_AVAILABLE": "available", + "KEG_STATUS_FINISHED": "finished", + "KEG_STATUS_ON_TAP": "on_tap", + "KEG_TYPES": { + "corny": "Corny Keg (5 gal)", + "corny-2_5-gal": "Corny Keg (2.5 gal)", + "corny-3-gal": "Corny Keg (3.0 gal)", + "euro": "European Full Barrel (100 L)", + "euro-30-liter": "European DIN (30 L)", + "euro-half": "European Half Barrel (50 L)", + "half-barrel": "Half Barrel (15.5 gal)", + "mini": "Mini Keg (5 L)", + "other": "Other", + "quarter": "Quarter Barrel (7.75 gal)", + "sixth": "Sixth Barrel (5.17 gal)" + }, + "KEG_TYPE_OTHER": "other", + "KEG_VOLUMES_ML": { + "corny": 18927.1, + "corny-2_5-gal": 9463.53, + "corny-3-gal": 11356.2, + "euro": 100000.0, + "euro-30-liter": 300000.0, + "euro-half": 50000.0, + "half-barrel": 58673.9, + "mini": 5000, + "other": 0.0, + "quarter": 29336.9, + "sixth": 19570.6 + }, + "PRIVACY_CHOICES": { + "public": "Public: Browsing does not require login", + "members": "Members only: Must log in to browse", + "staff": "Staff only: Only logged-in staff accounts may browse" + }, + "REGISTRATION_MODE_CHOICES": { + "public": "Public: Anyone can register.", + "member-invite-only": "Member Invite: Must be invited by an existing member.", + "staff-invite-only": "Staff Invite Only: Must be invited by a staff member." + }, + "TEMPERATURE_DISPLAY_UNITS_CHOICES": { + "f": "Fahrenheit", + "c": "Celsius" + }, + "TIMEZONES": [ + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Coyhaique", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC" + ], + "VOLUME_DISPLAY_UNITS_CHOICES": { + "metric": "Metric (mL, L)", + "imperial": "Imperial (oz, pint)" + } +} as const; From cbb89214c8764048129bc1f3f0d4417042c58740 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:20:56 +0000 Subject: [PATCH 04/48] api: expose per-entity stats; look up users by username Adds stats accessor endpoints backed by the existing model helpers: GET /api/stats/system, /api/users/{username}/stats, /api/kegs/{id}/stats, and /api/sessions/{id}/stats. Blobs come from Stats.get_latest_for_view, which already maps drinker ids to usernames. UserViewSet now uses username as the lookup key, matching the public drinker-page URLs the frontend preserves; the lookup regex admits dotted usernames. User detail and stats are viewable per site privacy (like the old public drinker pages) while the full user listing still requires authentication. --- pykeg/api/tests.py | 60 +++++++++++++++++++++++++++++++++++++++++++++- pykeg/api/views.py | 38 +++++++++++++++++++++++++++-- 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index c2a24629a..6b26ca723 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -135,10 +135,23 @@ def test_users_are_read_only(self): self.client.api_key = self.member_key.key self.client.add_auth() response = self.client.client.patch( - f"/api/users/{self.member.id}", {"display_name": "hax"}, format="json" + f"/api/users/{self.member.username}", {"display_name": "hax"}, format="json" ) self.assertEqual(405, response.status_code) + def test_user_detail_is_looked_up_by_username(self): + status, data = self.client.get(f"/api/users/{self.member.username}") + self.assertEqual(200, status) + self.assertEqual(self.member.id, data["id"]) + + def test_user_list_requires_authentication(self): + status, _ = self.client.get("/api/users") + self.assertEqual(403, status) + + self.client.api_key = self.member_key.key + status, _ = self.client.get("/api/users") + self.assertEqual(200, status) + def test_plugin_data_requires_admin(self): self.client.api_key = self.member_key.key status, _ = self.client.get("/api/plugin-data") @@ -269,6 +282,51 @@ def test_active_session_is_returned(self): self.assertEqual(session.id, data["id"]) +class StatsEndpointsTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + + def test_system_stats(self): + status, data = self.client.get("/api/stats/system") + self.assertEqual(200, status) + self.assertEqual(models.Drink.objects.count(), data["total_pours"]) + # Drinker keys must be usernames, not numeric user ids. + for name in data["volume_by_drinker"]: + self.assertFalse(name.isdigit(), name) + + def test_user_stats(self): + drink = models.Drink.objects.exclude(user__isnull=True).first() + username = drink.user.username + expected = models.Drink.objects.filter(user__username=username).count() + status, data = self.client.get(f"/api/users/{username}/stats") + self.assertEqual(200, status) + self.assertEqual(expected, data["total_pours"]) + + def test_keg_stats(self): + keg = models.Keg.objects.first() + status, data = self.client.get(f"/api/kegs/{keg.id}/stats") + self.assertEqual(200, status) + self.assertEqual(models.Drink.objects.filter(keg=keg).count(), data["total_pours"]) + + def test_session_stats(self): + session = models.DrinkingSession.objects.first() + status, data = self.client.get(f"/api/sessions/{session.id}/stats") + self.assertEqual(200, status) + self.assertEqual(models.Drink.objects.filter(session=session).count(), data["total_pours"]) + + def test_user_stats_respect_site_privacy(self): + self.site.privacy = models.KegbotSite.PRIVACY_CHOICE_MEMBERS + self.site.save() + username = models.Drink.objects.exclude(user__isnull=True).first().user.username + status, _ = self.client.get(f"/api/users/{username}/stats") + self.assertEqual(403, status) + + class MeEndpointTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/views.py b/pykeg/api/views.py index 7e84b3226..fb0cb7aeb 100644 --- a/pykeg/api/views.py +++ b/pykeg/api/views.py @@ -22,14 +22,29 @@ class UserViewSet(viewsets.ReadOnlyModelViewSet): """Lists all users in the system. - Read-only view for any authenticated caller; user management happens - in the admin dashboard. + Individual users (and their stats) are viewable by anyone the site + privacy setting admits, mirroring the public drinker pages; the full + user listing requires authentication. """ queryset = models.User.objects.all() serializer_class = serializers.UserSerializer permission_classes = [permissions.IsAuthenticated] filterset_class = filters.UserFilter + lookup_field = "username" + # Default lookup regex excludes ".", which usernames may contain. + lookup_value_regex = "[^/]+" + + def get_permissions(self): + if self.action in ("retrieve", "stats"): + return [permissions.DashboardViewer()] + return super().get_permissions() + + @extend_schema(responses=OpenApiTypes.OBJECT) + @action(detail=True) + def stats(self, request, username=None): + """Returns the latest stats blob for this user.""" + return Response(self.get_object().get_stats()) class InvitationViewSet(viewsets.ReadOnlyModelViewSet): @@ -138,6 +153,12 @@ class KegViewSet(viewsets.ReadOnlyModelViewSet): permission_classes = [permissions.DashboardViewer] filterset_class = filters.KegFilter + @extend_schema(responses=OpenApiTypes.OBJECT) + @action(detail=True) + def stats(self, request, pk=None): + """Returns the latest stats blob for this keg.""" + return Response(self.get_object().get_stats()) + class DrinkViewSet(viewsets.ReadOnlyModelViewSet): """Lists all Drinks in the system.""" @@ -177,6 +198,12 @@ def current(self, request): raise NotFound("There is no active session.") return Response(self.get_serializer(latest).data) + @extend_schema(responses=OpenApiTypes.OBJECT) + @action(detail=True) + def stats(self, request, pk=None): + """Returns the latest stats blob for this session.""" + return Response(self.get_object().get_stats()) + class ThermoSensorViewSet(viewsets.ModelViewSet): """Lists all ThermoSensors in the system.""" @@ -202,6 +229,13 @@ class StatsViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = serializers.StatsSerializer permission_classes = [permissions.DashboardViewer] + @extend_schema(responses=OpenApiTypes.OBJECT) + @action(detail=False) + def system(self, request): + """Returns the latest system-wide (all-time) stats blob.""" + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + return Response(site.get_stats()) + class SystemEventViewSet(viewsets.ReadOnlyModelViewSet): """Lists all SystemEvents in the system.""" From d97c5b52418ffc3ef25e65f36efd627022d0a6f5 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:25:53 +0000 Subject: [PATCH 05/48] api: add keg and tap lifecycle operations KegTapViewSet becomes a full ModelViewSet (admin writes, privacy-gated reads) with actions delegating to the existing domain methods: attach-keg, start-keg, end-keg, connect-meter, connect-toggle, connect-thermo, and record-drink (which also handles spills, mirroring the kegadmin tap page). KegViewSet gains create (Keg.create_keg, with optional on-the-fly beverage creation), notes/description editing, end, reactivate, spill, and delete (Keg.cancel, destroying the keg and its drinks). Status and volume fields are read-only on direct edits: they change only through the lifecycle endpoints. --- pykeg/api/serializers.py | 91 +++++++++++++++- pykeg/api/tests.py | 230 +++++++++++++++++++++++++++++++++++++++ pykeg/api/views.py | 215 ++++++++++++++++++++++++++++++++++-- 3 files changed, 527 insertions(+), 9 deletions(-) diff --git a/pykeg/api/serializers.py b/pykeg/api/serializers.py index e7193f416..76670b7cc 100644 --- a/pykeg/api/serializers.py +++ b/pykeg/api/serializers.py @@ -4,7 +4,7 @@ from rest_framework import serializers from rest_framework.exceptions import ValidationError -from pykeg.core import models +from pykeg.core import keg_sizes, models class PictureSerializer(serializers.ModelSerializer): @@ -243,6 +243,14 @@ class Meta: "illustration_thumbnail", "stats", ] + # Status and volumes change only through the keg lifecycle + # endpoints (attach/end/reactivate/spill), never by direct edit. + read_only_fields = [ + "status", + "spilled_ml", + "start_time", + "end_time", + ] beverage = BeverageSerializer(source="type", read_only=True) illustration = serializers.URLField(source="get_illustration", read_only=True) @@ -264,6 +272,9 @@ class Meta: ] current_keg = KegSerializer(read_only=True) + # Connections change only through the attach-keg/connect-* endpoints. + current_keg_id = serializers.IntegerField(read_only=True) + temperature_sensor_id = serializers.IntegerField(read_only=True) class DrinkSerializer(serializers.ModelSerializer): @@ -382,6 +393,84 @@ class Meta: ] +class TapAttachKegRequestSerializer(serializers.Serializer): + keg_id = serializers.PrimaryKeyRelatedField(queryset=models.Keg.objects.all(), source="keg") + + +class NewKegRequestSerializer(serializers.Serializer): + """Parameters for creating a keg. + + The beverage may be given as an existing `beverage_id`, or described by + the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) + tuple, which matches or creates one. + """ + + beverage_id = serializers.PrimaryKeyRelatedField( + queryset=models.Beverage.objects.all(), + source="beverage", + required=False, + allow_null=True, + default=None, + ) + beverage_name = serializers.CharField(required=False, allow_blank=True, default="") + beverage_type = serializers.ChoiceField( + choices=models.Beverage.TYPES, required=False, default=models.Beverage.TYPE_BEER + ) + producer_name = serializers.CharField(required=False, allow_blank=True, default="") + style_name = serializers.CharField(required=False, allow_blank=True, default="") + keg_type = serializers.ChoiceField(choices=keg_sizes.CHOICES, default=keg_sizes.HALF_BARREL) + full_volume_ml = serializers.FloatField(required=False, allow_null=True, default=None) + + def validate(self, data): + if not data.get("beverage") and not data.get("beverage_name"): + raise ValidationError( + "Give either beverage_id, or beverage_name with " + "producer_name/style_name/beverage_type." + ) + return data + + +class KegCreateRequestSerializer(NewKegRequestSerializer): + description = serializers.CharField(required=False, allow_blank=True, default="") + notes = serializers.CharField(required=False, allow_blank=True, default="") + + +class TapConnectMeterRequestSerializer(serializers.Serializer): + meter_id = serializers.PrimaryKeyRelatedField( + queryset=models.FlowMeter.objects.all(), source="meter", allow_null=True + ) + + +class TapConnectToggleRequestSerializer(serializers.Serializer): + toggle_id = serializers.PrimaryKeyRelatedField( + queryset=models.FlowToggle.objects.all(), source="toggle", allow_null=True + ) + + +class TapConnectThermoRequestSerializer(serializers.Serializer): + thermo_sensor_id = serializers.PrimaryKeyRelatedField( + queryset=models.ThermoSensor.objects.all(), source="thermo_sensor", allow_null=True + ) + + +class TapRecordDrinkRequestSerializer(serializers.Serializer): + volume_ml = serializers.FloatField(min_value=0.0) + username = serializers.CharField(required=False, allow_blank=True, default="") + pour_time = serializers.DateTimeField(required=False, allow_null=True, default=None) + duration = serializers.IntegerField(required=False, min_value=0, default=0) + shout = serializers.CharField(required=False, allow_blank=True, default="") + spilled = serializers.BooleanField(default=False) + + def validate_username(self, value): + if value and not models.User.objects.filter(username=value).exists(): + raise ValidationError("No such user.") + return value + + +class KegSpillRequestSerializer(serializers.Serializer): + volume_ml = serializers.FloatField(min_value=0.0) + + class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 6b26ca723..71f282c12 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -282,6 +282,236 @@ def test_active_session_is_returned(self): self.assertEqual(session.id, data["id"]) +class KegTapOperationsTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + self.admin = models.User.objects.get(username="admin") + self.admin.is_staff = True + self.admin.save() + self.admin_key = models.ApiKey.objects.get_or_create(user=self.admin)[0] + self.member = models.User.objects.get(username="alice") + self.member_key = models.ApiKey.objects.get_or_create(user=self.member)[0] + self.tap = models.KegTap.objects.get(name="Main Tap") + + def post(self, path, data=None, key=None): + self.client.api_key = key or self.admin_key.key + self.client.add_auth() + return self.client.client.post(path, data or {}, format="json") + + def test_tap_operations_require_admin(self): + for path in ( + f"/api/taps/{self.tap.id}/end-keg", + f"/api/taps/{self.tap.id}/attach-keg", + "/api/taps", + ): + response = self.post(path, key=self.member_key.key) + self.assertEqual(403, response.status_code, path) + + def test_end_and_attach_keg(self): + keg = self.tap.current_keg + response = self.post(f"/api/taps/{self.tap.id}/end-keg") + self.assertEqual(200, response.status_code) + self.assertIsNone(response.json()["current_keg"]) + keg.refresh_from_db() + self.assertEqual(models.Keg.STATUS_FINISHED, keg.status) + + response = self.post(f"/api/taps/{self.tap.id}/end-keg") + self.assertEqual(400, response.status_code) + + response = self.post(f"/api/taps/{self.tap.id}/attach-keg", {"keg_id": keg.id}) + self.assertEqual(200, response.status_code) + self.assertEqual(keg.id, response.json()["current_keg"]["id"]) + keg.refresh_from_db() + self.assertEqual(models.Keg.STATUS_ON_TAP, keg.status) + + def test_attach_fails_when_tap_active(self): + other_keg = models.Keg.objects.exclude(id=self.tap.current_keg_id).first() + response = self.post(f"/api/taps/{self.tap.id}/attach-keg", {"keg_id": other_keg.id}) + self.assertEqual(400, response.status_code) + + def test_start_keg_creates_and_attaches(self): + self.post(f"/api/taps/{self.tap.id}/end-keg") + response = self.post( + f"/api/taps/{self.tap.id}/start-keg", + { + "beverage_name": "Test Brew", + "producer_name": "Test Brewery", + "style_name": "IPA", + "keg_type": "half-barrel", + }, + ) + self.assertEqual(200, response.status_code) + data = response.json() + self.assertEqual("Test Brew", data["current_keg"]["beverage"]["name"]) + self.assertEqual("on_tap", data["current_keg"]["status"]) + + def test_start_keg_requires_beverage(self): + self.post(f"/api/taps/{self.tap.id}/end-keg") + response = self.post(f"/api/taps/{self.tap.id}/start-keg", {}) + self.assertEqual(400, response.status_code) + + def test_record_drink_and_spill(self): + keg = self.tap.current_keg + served_before = keg.served_volume_ml + + response = self.post( + f"/api/taps/{self.tap.id}/record-drink", + {"volume_ml": 400.0, "username": "alice", "shout": "cheers!"}, + ) + self.assertEqual(201, response.status_code) + data = response.json() + self.assertEqual("alice", data["user"]["username"]) + self.assertEqual("cheers!", data["shout"]) + keg.refresh_from_db() + self.assertEqual(served_before + 400.0, keg.served_volume_ml) + + spilled_before = keg.spilled_ml + response = self.post( + f"/api/taps/{self.tap.id}/record-drink", + {"volume_ml": 100.0, "spilled": True}, + ) + self.assertEqual(204, response.status_code) + keg.refresh_from_db() + self.assertEqual(spilled_before + 100.0, keg.spilled_ml) + + def test_record_drink_unknown_user(self): + response = self.post( + f"/api/taps/{self.tap.id}/record-drink", + {"volume_ml": 100.0, "username": "nobody"}, + ) + self.assertEqual(400, response.status_code) + + def test_connect_meter(self): + other_meter = models.FlowMeter.objects.exclude(tap=self.tap).first() + response = self.post(f"/api/taps/{self.tap.id}/connect-meter", {"meter_id": other_meter.id}) + self.assertEqual(200, response.status_code) + other_meter.refresh_from_db() + self.assertEqual(self.tap, other_meter.tap) + + response = self.post(f"/api/taps/{self.tap.id}/connect-meter", {"meter_id": None}) + self.assertEqual(200, response.status_code) + other_meter.refresh_from_db() + self.assertIsNone(other_meter.tap) + + def test_tap_crud(self): + response = self.post("/api/taps", {"name": "Third Tap"}) + self.assertEqual(201, response.status_code) + tap_id = response.json()["id"] + + self.client.add_auth() + response = self.client.client.patch( + f"/api/taps/{tap_id}", {"name": "Renamed Tap"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.assertEqual("Renamed Tap", response.json()["name"]) + + response = self.client.client.delete(f"/api/taps/{tap_id}") + self.assertEqual(204, response.status_code) + self.assertFalse(models.KegTap.objects.filter(id=tap_id).exists()) + + +class KegOperationsTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + self.admin = models.User.objects.get(username="admin") + self.admin.is_staff = True + self.admin.save() + self.admin_key = models.ApiKey.objects.get_or_create(user=self.admin)[0] + + def post(self, path, data=None): + self.client.api_key = self.admin_key.key + self.client.add_auth() + return self.client.client.post(path, data or {}, format="json") + + def test_create_keg_with_existing_beverage(self): + beverage = models.Beverage.objects.first() + response = self.post( + "/api/kegs", + {"beverage_id": beverage.id, "keg_type": "corny", "description": "spare"}, + ) + self.assertEqual(201, response.status_code) + data = response.json() + self.assertEqual("available", data["status"]) + self.assertEqual(beverage.name, data["beverage"]["name"]) + self.assertEqual("spare", data["description"]) + + def test_create_keg_with_new_beverage(self): + response = self.post( + "/api/kegs", + { + "beverage_name": "New Beer", + "producer_name": "New Brewery", + "style_name": "Stout", + }, + ) + self.assertEqual(201, response.status_code) + self.assertEqual("New Beer", response.json()["beverage"]["name"]) + + def test_end_and_reactivate(self): + keg = models.Keg.objects.create( + type=models.Beverage.objects.first(), status=models.Keg.STATUS_AVAILABLE + ) + response = self.post(f"/api/kegs/{keg.id}/end") + self.assertEqual(200, response.status_code) + self.assertEqual("finished", response.json()["status"]) + + response = self.post(f"/api/kegs/{keg.id}/reactivate") + self.assertEqual(200, response.status_code) + self.assertEqual("available", response.json()["status"]) + + # Reactivate requires a finished keg. + response = self.post(f"/api/kegs/{keg.id}/reactivate") + self.assertEqual(400, response.status_code) + + def test_end_fails_while_on_tap(self): + keg = models.KegTap.objects.get(name="Main Tap").current_keg + response = self.post(f"/api/kegs/{keg.id}/end") + self.assertEqual(400, response.status_code) + + def test_spill(self): + keg = models.Keg.objects.first() + before = keg.spilled_ml + response = self.post(f"/api/kegs/{keg.id}/spill", {"volume_ml": 250.0}) + self.assertEqual(200, response.status_code) + keg.refresh_from_db() + self.assertEqual(before + 250.0, keg.spilled_ml) + + def test_edit_keg_notes_but_not_status(self): + keg = models.Keg.objects.first() + self.client.api_key = self.admin_key.key + self.client.add_auth() + response = self.client.client.patch( + f"/api/kegs/{keg.id}", + {"notes": "updated", "status": "finished"}, + format="json", + ) + self.assertEqual(200, response.status_code) + keg.refresh_from_db() + self.assertEqual("updated", keg.notes) + # Status is read-only on direct edits. + self.assertEqual(models.Keg.STATUS_ON_TAP, keg.status) + + def test_delete_keg_destroys_drinks(self): + keg = models.KegTap.objects.get(name="Main Tap").current_keg + self.assertTrue(keg.drinks.exists()) + self.client.api_key = self.admin_key.key + self.client.add_auth() + response = self.client.client.delete(f"/api/kegs/{keg.id}") + self.assertEqual(204, response.status_code) + self.assertFalse(models.Keg.objects.filter(id=keg.id).exists()) + self.assertFalse(models.Drink.objects.filter(keg_id=keg.id).exists()) + + class StatsEndpointsTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/views.py b/pykeg/api/views.py index fb0cb7aeb..a2348999d 100644 --- a/pykeg/api/views.py +++ b/pykeg/api/views.py @@ -4,14 +4,14 @@ from django.views.decorators.csrf import ensure_csrf_cookie from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema -from rest_framework import viewsets +from rest_framework import status, viewsets from rest_framework.decorators import ( action, api_view, authentication_classes, permission_classes, ) -from rest_framework.exceptions import NotFound +from rest_framework.exceptions import NotFound, ValidationError from rest_framework.response import Response from pykeg.core import models @@ -113,12 +113,146 @@ class BeverageViewSet(viewsets.ModelViewSet): permission_classes = [permissions.AdminWriteDashboardRead] -class KegTapViewSet(viewsets.ReadOnlyModelViewSet): - """Lists all KegTaps in the system.""" +class KegTapViewSet(viewsets.ModelViewSet): + """Lists all KegTaps in the system. + + Reads follow site privacy; tap management (including the keg and + hardware-connection operations below) requires an admin. + """ queryset = models.KegTap.objects.all() serializer_class = serializers.KegTapSerializer - permission_classes = [permissions.DashboardViewer] + permission_classes = [permissions.AdminWriteDashboardRead] + + def _tap_response(self, tap): + tap.refresh_from_db() + return Response(self.get_serializer(tap).data) + + @extend_schema( + request=serializers.TapAttachKegRequestSerializer, + responses=serializers.KegTapSerializer, + ) + @action(detail=True, methods=["post"], url_path="attach-keg") + def attach_keg(self, request, pk=None): + """Attaches an existing (available) keg to this tap.""" + tap = self.get_object() + req = serializers.TapAttachKegRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + try: + tap.attach_keg(req.validated_data["keg"]) + except ValueError as e: + raise ValidationError(str(e)) from e + return self._tap_response(tap) + + @extend_schema( + request=serializers.NewKegRequestSerializer, + responses=serializers.KegTapSerializer, + ) + @action(detail=True, methods=["post"], url_path="start-keg") + def start_keg(self, request, pk=None): + """Creates a new keg and attaches it to this tap.""" + tap = self.get_object() + req = serializers.NewKegRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + params = req.validated_data + try: + models.Keg.start_keg( + tap, + beverage=params["beverage"], + keg_type=params["keg_type"], + full_volume_ml=params["full_volume_ml"], + beverage_name=params["beverage_name"] or None, + beverage_type=params["beverage_type"] if not params["beverage"] else None, + producer_name=params["producer_name"] or None, + style_name=params["style_name"] or None, + ) + except ValueError as e: + raise ValidationError(str(e)) from e + return self._tap_response(tap) + + @extend_schema(request=None, responses=serializers.KegTapSerializer) + @action(detail=True, methods=["post"], url_path="end-keg") + def end_keg(self, request, pk=None): + """Takes the tap's current keg offline.""" + tap = self.get_object() + if not tap.current_keg: + raise ValidationError("Tap has no active keg.") + tap.end_current_keg() + return self._tap_response(tap) + + @extend_schema( + request=serializers.TapConnectMeterRequestSerializer, + responses=serializers.KegTapSerializer, + ) + @action(detail=True, methods=["post"], url_path="connect-meter") + def connect_meter(self, request, pk=None): + """Assigns a flow meter to this tap (null to disconnect).""" + tap = self.get_object() + req = serializers.TapConnectMeterRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + tap.connect_meter(req.validated_data["meter"]) + return self._tap_response(tap) + + @extend_schema( + request=serializers.TapConnectToggleRequestSerializer, + responses=serializers.KegTapSerializer, + ) + @action(detail=True, methods=["post"], url_path="connect-toggle") + def connect_toggle(self, request, pk=None): + """Assigns a flow toggle to this tap (null to disconnect).""" + tap = self.get_object() + req = serializers.TapConnectToggleRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + tap.connect_toggle(req.validated_data["toggle"]) + return self._tap_response(tap) + + @extend_schema( + request=serializers.TapConnectThermoRequestSerializer, + responses=serializers.KegTapSerializer, + ) + @action(detail=True, methods=["post"], url_path="connect-thermo") + def connect_thermo(self, request, pk=None): + """Assigns a temperature sensor to this tap (null to disconnect).""" + tap = self.get_object() + req = serializers.TapConnectThermoRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + tap.connect_thermo(req.validated_data["thermo_sensor"]) + return self._tap_response(tap) + + @extend_schema( + request=serializers.TapRecordDrinkRequestSerializer, + responses=serializers.DrinkSerializer, + ) + @action(detail=True, methods=["post"], url_path="record-drink") + def record_drink(self, request, pk=None): + """Manually records a drink (or spill) against this tap's keg. + + Returns the new drink (201), or no content (204) when recorded + as a spill. + """ + tap = self.get_object() + req = serializers.TapRecordDrinkRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + params = req.validated_data + try: + drink = models.Drink.record_drink( + tap, + ticks=0, + volume_ml=params["volume_ml"], + username=params["username"] or None, + pour_time=params["pour_time"], + duration=params["duration"], + shout=params["shout"], + spilled=params["spilled"], + ) + except ValueError as e: + raise ValidationError(str(e)) from e + if drink is None: + return Response(status=status.HTTP_204_NO_CONTENT) + return Response( + serializers.DrinkSerializer(drink).data, + status=status.HTTP_201_CREATED, + ) class ControllerViewSet(viewsets.ModelViewSet): @@ -145,20 +279,85 @@ class FlowToggleViewSet(viewsets.ModelViewSet): permission_classes = [permissions.IsAdminUser] -class KegViewSet(viewsets.ReadOnlyModelViewSet): - """Lists all Kegs in the system.""" +class KegViewSet(viewsets.ModelViewSet): + """Lists all Kegs in the system. + + Reads follow site privacy; keg management requires an admin. Deleting + a keg permanently destroys it and ALL of its drinks. + """ queryset = models.Keg.objects.all() serializer_class = serializers.KegSerializer - permission_classes = [permissions.DashboardViewer] + permission_classes = [permissions.AdminWriteDashboardRead] filterset_class = filters.KegFilter + @extend_schema(request=serializers.KegCreateRequestSerializer) + def create(self, request, *args, **kwargs): + """Adds a new keg to the keg room (unattached).""" + req = serializers.KegCreateRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + params = req.validated_data + try: + keg = models.Keg.create_keg( + beverage=params["beverage"], + keg_type=params["keg_type"], + full_volume_ml=params["full_volume_ml"], + beverage_name=params["beverage_name"] or None, + beverage_type=params["beverage_type"] if not params["beverage"] else None, + producer_name=params["producer_name"] or None, + style_name=params["style_name"] or None, + notes=params["notes"] or None, + description=params["description"] or None, + ) + except ValueError as e: + raise ValidationError(str(e)) from e + return Response(self.get_serializer(keg).data, status=status.HTTP_201_CREATED) + + def perform_destroy(self, instance): + instance.cancel() + @extend_schema(responses=OpenApiTypes.OBJECT) @action(detail=True) def stats(self, request, pk=None): """Returns the latest stats blob for this keg.""" return Response(self.get_object().get_stats()) + @extend_schema(request=None, responses=serializers.KegSerializer) + @action(detail=True, methods=["post"]) + def end(self, request, pk=None): + """Marks an untapped keg as finished.""" + keg = self.get_object() + try: + keg.end_keg() + except ValueError as e: + raise ValidationError(str(e)) from e + return Response(self.get_serializer(keg).data) + + @extend_schema(request=None, responses=serializers.KegSerializer) + @action(detail=True, methods=["post"]) + def reactivate(self, request, pk=None): + """Returns a finished keg to the available pool.""" + keg = self.get_object() + try: + keg.reactivate_keg() + except ValueError as e: + raise ValidationError(str(e)) from e + return Response(self.get_serializer(keg).data) + + @extend_schema( + request=serializers.KegSpillRequestSerializer, + responses=serializers.KegSerializer, + ) + @action(detail=True, methods=["post"]) + def spill(self, request, pk=None): + """Records spilled volume against this keg.""" + keg = self.get_object() + req = serializers.KegSpillRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + keg.spilled_ml += req.validated_data["volume_ml"] + keg.save(update_fields=["spilled_ml"]) + return Response(self.get_serializer(keg).data) + class DrinkViewSet(viewsets.ReadOnlyModelViewSet): """Lists all Drinks in the system.""" From 9c5ed5e0df1d44ff68c0b68de6da621fe9684240 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:28:31 +0000 Subject: [PATCH 06/48] api: add drink management and picture uploads Drinks gain owner/admin mutations mirroring the old drink and kegadmin pages: owners may edit the shout and attach or erase the drink picture; admins may adjust volume (Drink.set_volume), reassign to another user, and delete (cancel_drink, with ?spilled=true to move the volume to spillage). Creation still only happens via pours. Adds the first picture upload endpoints: POST/DELETE /api/drinks/{id}/picture plus POST {id}/picture on beverages and producers (admin), replacing the kegadmin image-upload forms. Beverage and producer serializers now embed the picture object instead of a bare id. New IsOwnerOrAdmin object-level permission. --- pykeg/api/permissions.py | 11 ++++ pykeg/api/serializers.py | 22 +++++++ pykeg/api/tests.py | 125 +++++++++++++++++++++++++++++++++++++++ pykeg/api/views.py | 125 +++++++++++++++++++++++++++++++++++++-- 4 files changed, 277 insertions(+), 6 deletions(-) diff --git a/pykeg/api/permissions.py b/pykeg/api/permissions.py index 56a9f6037..9e33d4113 100644 --- a/pykeg/api/permissions.py +++ b/pykeg/api/permissions.py @@ -51,3 +51,14 @@ def has_permission(self, request, view): if request.method in permissions.SAFE_METHODS: return super().has_permission(request, view) return bool(request.user and request.user.is_staff) + + +class IsOwnerOrAdmin(IsAuthenticated): + """Requires the object's owning user (its `user` attribute) or an admin.""" + + message = "You must own this object or be an admin to do that" + + def has_object_permission(self, request, view, obj): + if request.user.is_staff: + return True + return getattr(obj, "user", None) == request.user diff --git a/pykeg/api/serializers.py b/pykeg/api/serializers.py index 76670b7cc..6be48e17a 100644 --- a/pykeg/api/serializers.py +++ b/pykeg/api/serializers.py @@ -145,6 +145,8 @@ class Meta: "picture", ] + picture = PictureSerializer(read_only=True) + class BeverageSerializer(serializers.ModelSerializer): class Meta: @@ -175,6 +177,7 @@ class Meta: producer_id = serializers.PrimaryKeyRelatedField( queryset=models.BeverageProducer.objects.all(), source="producer", write_only=True ) + picture = PictureSerializer(read_only=True) class ControllerSerializer(serializers.ModelSerializer): @@ -471,6 +474,25 @@ class KegSpillRequestSerializer(serializers.Serializer): volume_ml = serializers.FloatField(min_value=0.0) +class DrinkUpdateRequestSerializer(serializers.Serializer): + shout = serializers.CharField(required=False, allow_blank=True) + volume_ml = serializers.FloatField(required=False, min_value=0.0) + + +class DrinkReassignRequestSerializer(serializers.Serializer): + username = serializers.CharField() + + def validate_username(self, value): + if not models.User.objects.filter(username=value).exists(): + raise ValidationError("No such user.") + return value + + +class PictureUploadRequestSerializer(serializers.Serializer): + image = serializers.ImageField() + caption = serializers.CharField(required=False, allow_blank=True, default="") + + class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 71f282c12..01d043a07 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -512,6 +512,131 @@ def test_delete_keg_destroys_drinks(self): self.assertFalse(models.Drink.objects.filter(keg_id=keg.id).exists()) +TINY_GIF = base64.b64decode("R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==") + + +class DrinkManagementTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + self.admin = models.User.objects.get(username="admin") + self.admin.is_staff = True + self.admin.save() + self.admin_key = models.ApiKey.objects.get_or_create(user=self.admin)[0] + self.alice = models.User.objects.get(username="alice") + self.alice_key = models.ApiKey.objects.get_or_create(user=self.alice)[0] + self.bob = models.User.objects.get(username="bob") + self.bob_key = models.ApiKey.objects.get_or_create(user=self.bob)[0] + self.alice_drink = models.Drink.objects.filter(user=self.alice).first() + + def as_user(self, key): + self.client.api_key = key + self.client.add_auth() + return self.client.client + + def test_owner_may_edit_shout(self): + response = self.as_user(self.alice_key.key).patch( + f"/api/drinks/{self.alice_drink.id}", {"shout": "tasty"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.alice_drink.refresh_from_db() + self.assertEqual("tasty", self.alice_drink.shout) + + def test_non_owner_may_not_edit_shout(self): + response = self.as_user(self.bob_key.key).patch( + f"/api/drinks/{self.alice_drink.id}", {"shout": "graffiti"}, format="json" + ) + self.assertEqual(403, response.status_code) + + def test_volume_adjustment_is_admin_only(self): + response = self.as_user(self.alice_key.key).patch( + f"/api/drinks/{self.alice_drink.id}", {"volume_ml": 9999.0}, format="json" + ) + self.assertEqual(403, response.status_code) + + keg = self.alice_drink.keg + served_before = keg.served_volume_ml + old_volume = self.alice_drink.volume_ml + response = self.as_user(self.admin_key.key).patch( + f"/api/drinks/{self.alice_drink.id}", {"volume_ml": old_volume + 10}, format="json" + ) + self.assertEqual(200, response.status_code) + keg.refresh_from_db() + self.assertEqual(served_before + 10, keg.served_volume_ml) + + def test_reassign(self): + response = self.as_user(self.alice_key.key).post( + f"/api/drinks/{self.alice_drink.id}/reassign", {"username": "bob"}, format="json" + ) + self.assertEqual(403, response.status_code) + + response = self.as_user(self.admin_key.key).post( + f"/api/drinks/{self.alice_drink.id}/reassign", {"username": "bob"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.assertEqual("bob", response.json()["user"]["username"]) + + def test_destroy_is_admin_only_and_supports_spill(self): + response = self.as_user(self.alice_key.key).delete(f"/api/drinks/{self.alice_drink.id}") + self.assertEqual(403, response.status_code) + + keg = self.alice_drink.keg + spilled_before = keg.spilled_ml + volume = self.alice_drink.volume_ml + response = self.as_user(self.admin_key.key).delete( + f"/api/drinks/{self.alice_drink.id}?spilled=true" + ) + self.assertEqual(204, response.status_code) + self.assertFalse(models.Drink.objects.filter(id=self.alice_drink.id).exists()) + keg.refresh_from_db() + self.assertEqual(spilled_before + volume, keg.spilled_ml) + + def test_picture_upload_and_delete(self): + from django.core.files.uploadedfile import SimpleUploadedFile + + image = SimpleUploadedFile("pour.gif", TINY_GIF, content_type="image/gif") + response = self.as_user(self.alice_key.key).post( + f"/api/drinks/{self.alice_drink.id}/picture", {"image": image}, format="multipart" + ) + self.assertEqual(200, response.status_code) + self.assertIsNotNone(response.json()["picture"]) + self.alice_drink.refresh_from_db() + self.assertIsNotNone(self.alice_drink.picture) + + response = self.as_user(self.bob_key.key).delete( + f"/api/drinks/{self.alice_drink.id}/picture" + ) + self.assertEqual(403, response.status_code) + + response = self.as_user(self.alice_key.key).delete( + f"/api/drinks/{self.alice_drink.id}/picture" + ) + self.assertEqual(204, response.status_code) + self.alice_drink.refresh_from_db() + self.assertIsNone(self.alice_drink.picture) + + def test_beverage_picture_upload(self): + from django.core.files.uploadedfile import SimpleUploadedFile + + beverage = models.Beverage.objects.first() + image = SimpleUploadedFile("label.gif", TINY_GIF, content_type="image/gif") + response = self.as_user(self.alice_key.key).post( + f"/api/beverages/{beverage.id}/picture", {"image": image}, format="multipart" + ) + self.assertEqual(403, response.status_code) + + image = SimpleUploadedFile("label.gif", TINY_GIF, content_type="image/gif") + response = self.as_user(self.admin_key.key).post( + f"/api/beverages/{beverage.id}/picture", {"image": image}, format="multipart" + ) + self.assertEqual(200, response.status_code) + self.assertIsNotNone(response.json()["picture"]) + + class StatsEndpointsTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/views.py b/pykeg/api/views.py index a2348999d..e9e417bac 100644 --- a/pykeg/api/views.py +++ b/pykeg/api/views.py @@ -4,14 +4,15 @@ from django.views.decorators.csrf import ensure_csrf_cookie from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema -from rest_framework import status, viewsets +from rest_framework import mixins, status, viewsets from rest_framework.decorators import ( action, api_view, authentication_classes, permission_classes, ) -from rest_framework.exceptions import NotFound, ValidationError +from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError +from rest_framework.parsers import FormParser, MultiPartParser from rest_framework.response import Response from pykeg.core import models @@ -97,7 +98,29 @@ def get_queryset(self): ) -class BeverageProducerViewSet(viewsets.ModelViewSet): +class PictureAttachMixin: + """Adds a POST {id}/picture action that sets the object's picture.""" + + @extend_schema(request=serializers.PictureUploadRequestSerializer) + @action( + detail=True, + methods=["post"], + parser_classes=[MultiPartParser, FormParser], + ) + def picture(self, request, pk=None): + """Uploads and sets this object's picture.""" + obj = self.get_object() + req = serializers.PictureUploadRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + obj.picture = models.Picture.objects.create( + image=req.validated_data["image"], + caption=req.validated_data["caption"], + ) + obj.save(update_fields=["picture"]) + return Response(self.get_serializer(obj).data) + + +class BeverageProducerViewSet(PictureAttachMixin, viewsets.ModelViewSet): """Lists all beverage producers in the system.""" queryset = models.BeverageProducer.objects.all() @@ -105,7 +128,7 @@ class BeverageProducerViewSet(viewsets.ModelViewSet): permission_classes = [permissions.AdminWriteDashboardRead] -class BeverageViewSet(viewsets.ModelViewSet): +class BeverageViewSet(PictureAttachMixin, viewsets.ModelViewSet): """Lists all beverages in the system.""" queryset = models.Beverage.objects.all() @@ -359,14 +382,104 @@ def spill(self, request, pk=None): return Response(self.get_serializer(keg).data) -class DrinkViewSet(viewsets.ReadOnlyModelViewSet): - """Lists all Drinks in the system.""" +class DrinkViewSet( + mixins.RetrieveModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + viewsets.GenericViewSet, +): + """Lists all Drinks in the system. + + Drinks are created by pours (or the tap record-drink endpoint), never + directly. The drink's owner may edit its shout and manage its picture; + volume adjustment, reassignment, and deletion are admin operations. + """ queryset = models.Drink.objects.all() serializer_class = serializers.DrinkSerializer permission_classes = [permissions.DashboardViewer] filterset_class = filters.DrinkFilter + def get_permissions(self): + if self.action in ("destroy", "reassign"): + return [permissions.IsAdminUser()] + if self.action in ("partial_update", "picture"): + return [permissions.IsOwnerOrAdmin()] + return super().get_permissions() + + def perform_destroy(self, instance): + """Cancels the drink; pass ?spilled=true to move its volume to spillage.""" + spilled = self.request.query_params.get("spilled") in ("1", "true") + instance.cancel_drink(spilled=spilled) + + @extend_schema( + request=serializers.DrinkUpdateRequestSerializer, + responses=serializers.DrinkSerializer, + ) + def partial_update(self, request, pk=None): + drink = self.get_object() + req = serializers.DrinkUpdateRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + if "volume_ml" in data and data["volume_ml"] != drink.volume_ml: + if not request.user.is_staff: + raise PermissionDenied("Only admins may adjust drink volume.") + drink.set_volume(data["volume_ml"]) + if "shout" in data: + drink.shout = data["shout"] + drink.save(update_fields=["shout"]) + return Response(self.get_serializer(drink).data) + + @extend_schema( + request=serializers.DrinkReassignRequestSerializer, + responses=serializers.DrinkSerializer, + ) + @action(detail=True, methods=["post"]) + def reassign(self, request, pk=None): + """Reassigns this drink to another user.""" + drink = self.get_object() + req = serializers.DrinkReassignRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + user = models.User.objects.get(username=req.validated_data["username"]) + drink.reassign(user) + drink.refresh_from_db() + return Response(self.get_serializer(drink).data) + + @extend_schema( + request=serializers.PictureUploadRequestSerializer, + responses=serializers.DrinkSerializer, + ) + @action( + detail=True, + methods=["post", "delete"], + parser_classes=[MultiPartParser, FormParser], + ) + def picture(self, request, pk=None): + """Attaches (POST) or erases (DELETE) this drink's picture.""" + drink = self.get_object() + old_picture = drink.picture + + if request.method == "DELETE": + if old_picture: + old_picture.erase_and_delete() + drink.refresh_from_db() + return Response(status=status.HTTP_204_NO_CONTENT) + + req = serializers.PictureUploadRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + picture = models.Picture.objects.create( + image=req.validated_data["image"], + caption=req.validated_data["caption"], + user=drink.user, + keg=drink.keg, + session=drink.session, + ) + drink.picture = picture + drink.save(update_fields=["picture"]) + if old_picture: + old_picture.erase_and_delete() + return Response(self.get_serializer(drink).data) + class AuthenticationTokenViewSet(viewsets.ModelViewSet): """Lists all AuthenticationTokens in the system.""" From 7e37427bfef97951f040c848ba5515dc1c307fa1 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:33:25 +0000 Subject: [PATCH 07/48] api: add account self-service and auth flow endpoints Account endpoints (authenticated): PATCH /api/users/me (profile), POST /api/account/{password,email,confirm-email,mugshot,regenerate-api-key}. The email change flow reuses the existing signed-token helpers and confirmation mail template. Auth flows (unauthenticated, rate-limited): POST /api/auth/register (honors registration_mode and consumes invitations), password-reset + password-reset-confirm (reusing the Django reset-token machinery and mail template; no account enumeration), and /api/account/activate for invited accounts (single-use activation keys). InvitationViewSet gains create (sends the invitation mail, gated on kbsite.can_invite) and delete. --- pykeg/api/serializers.py | 41 ++++++- pykeg/api/tests.py | 238 +++++++++++++++++++++++++++++++++++++ pykeg/api/urls.py | 11 +- pykeg/api/views.py | 56 +++++++-- pykeg/api/views_account.py | 228 +++++++++++++++++++++++++++++++++++ pykeg/settings.py | 4 + 6 files changed, 565 insertions(+), 13 deletions(-) create mode 100644 pykeg/api/views_account.py diff --git a/pykeg/api/serializers.py b/pykeg/api/serializers.py index 6be48e17a..2e593eca1 100644 --- a/pykeg/api/serializers.py +++ b/pykeg/api/serializers.py @@ -4,7 +4,7 @@ from rest_framework import serializers from rest_framework.exceptions import ValidationError -from pykeg.core import keg_sizes, models +from pykeg.core import kb_common, keg_sizes, models class PictureSerializer(serializers.ModelSerializer): @@ -493,6 +493,45 @@ class PictureUploadRequestSerializer(serializers.Serializer): caption = serializers.CharField(required=False, allow_blank=True, default="") +class ProfileUpdateRequestSerializer(serializers.Serializer): + display_name = serializers.CharField(required=False, allow_blank=True, max_length=127) + + +class PasswordChangeRequestSerializer(serializers.Serializer): + current_password = serializers.CharField() + new_password = serializers.CharField(min_length=1) + + +class EmailChangeRequestSerializer(serializers.Serializer): + email = serializers.EmailField() + + +class ConfirmEmailRequestSerializer(serializers.Serializer): + token = serializers.CharField() + + +class ActivateAccountRequestSerializer(serializers.Serializer): + activation_key = serializers.CharField() + password = serializers.CharField(min_length=1) + + +class RegisterRequestSerializer(serializers.Serializer): + username = serializers.RegexField(regex=kb_common.USERNAME_REGEX, max_length=30) + email = serializers.EmailField() + password = serializers.CharField(min_length=1) + invite_code = serializers.CharField(required=False, allow_blank=True, default="") + + +class PasswordResetRequestSerializer(serializers.Serializer): + email = serializers.EmailField() + + +class PasswordResetConfirmRequestSerializer(serializers.Serializer): + uid = serializers.CharField() + token = serializers.CharField() + new_password = serializers.CharField(min_length=1) + + class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 01d043a07..71a8fb4de 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -1,8 +1,15 @@ import base64 import datetime +import re +from django.contrib.auth.tokens import default_token_generator +from django.core import mail as django_mail +from django.core.cache import cache from django.test import TestCase +from django.test.utils import override_settings from django.utils import timezone +from django.utils.encoding import force_bytes +from django.utils.http import urlsafe_base64_encode from rest_framework.test import APIClient from pykeg.core import models @@ -682,6 +689,237 @@ def test_user_stats_respect_site_privacy(self): self.assertEqual(403, status) +@override_settings(EMAIL_BACKEND="pykeg.core.mail.KegbotEmailBackend") +class AccountFlowsTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + cache.clear() # Reset auth-endpoint throttle state between tests. + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.email_config = "memory://?_default_from_email=test@example.com" + self.site.save() + self.alice = models.User.objects.get(username="alice") + self.alice.set_password("oldpassword") + self.alice.email = "alice@example.com" + self.alice.save() + self.alice_key = models.ApiKey.objects.get_or_create(user=self.alice)[0] + + def as_alice(self): + self.client.api_key = self.alice_key.key + self.client.add_auth() + return self.client.client + + def as_anon(self): + self.client.api_key = None + self.client.add_auth() + return self.client.client + + def test_update_profile(self): + response = self.as_alice().patch( + "/api/users/me", {"display_name": "Alice A."}, format="json" + ) + self.assertEqual(200, response.status_code) + self.assertEqual("Alice A.", response.json()["user"]["display_name"]) + self.alice.refresh_from_db() + self.assertEqual("Alice A.", self.alice.display_name) + + def test_update_profile_requires_auth(self): + response = self.as_anon().patch("/api/users/me", {"display_name": "Nope"}, format="json") + self.assertIn(response.status_code, (401, 403)) + + def test_change_password(self): + response = self.as_alice().post( + "/api/account/password", + {"current_password": "wrong", "new_password": "newpassword"}, + format="json", + ) + self.assertEqual(400, response.status_code) + + response = self.as_alice().post( + "/api/account/password", + {"current_password": "oldpassword", "new_password": "newpassword"}, + format="json", + ) + self.assertEqual(200, response.status_code) + self.alice.refresh_from_db() + self.assertTrue(self.alice.check_password("newpassword")) + + def test_change_email_and_confirm(self): + response = self.as_alice().post( + "/api/account/email", {"email": "alice-new@example.com"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.assertEqual(1, len(django_mail.outbox)) + body = django_mail.outbox[0].body + match = re.search(r"/account/confirm-email/(\S+)", body) + self.assertIsNotNone(match, body) + token = match.group(1).rstrip("/") + + response = self.as_alice().post( + "/api/account/confirm-email", {"token": token}, format="json" + ) + self.assertEqual(200, response.status_code) + self.alice.refresh_from_db() + self.assertEqual("alice-new@example.com", self.alice.email) + + def test_mugshot_upload(self): + from django.core.files.uploadedfile import SimpleUploadedFile + + image = SimpleUploadedFile("me.gif", TINY_GIF, content_type="image/gif") + response = self.as_alice().post( + "/api/account/mugshot", {"image": image}, format="multipart" + ) + self.assertEqual(200, response.status_code) + self.assertIsNotNone(response.json()["picture"]) + self.alice.refresh_from_db() + self.assertIsNotNone(self.alice.mugshot) + + def test_regenerate_api_key(self): + old_key = self.alice_key.key + response = self.as_alice().post("/api/account/regenerate-api-key") + self.assertEqual(200, response.status_code) + self.assertNotEqual(old_key, response.json()["key"]) + + def test_register_public(self): + response = self.as_anon().post( + "/api/auth/register", + {"username": "newuser", "email": "new@example.com", "password": "s3cret"}, + format="json", + ) + self.assertEqual(201, response.status_code) + self.assertEqual("newuser", response.json()["username"]) + user = models.User.objects.get(username="newuser") + self.assertTrue(user.check_password("s3cret")) + + def test_register_duplicate_username(self): + response = self.as_anon().post( + "/api/auth/register", + {"username": "alice", "email": "x@example.com", "password": "pw"}, + format="json", + ) + self.assertEqual(400, response.status_code) + + def test_register_invite_only(self): + self.site.registration_mode = "staff-invite-only" + self.site.save() + + response = self.as_anon().post( + "/api/auth/register", + {"username": "invitee", "email": "i@example.com", "password": "pw"}, + format="json", + ) + self.assertEqual(403, response.status_code) + + invite = models.Invitation.objects.create(for_email="i@example.com", invited_by=self.alice) + response = self.as_anon().post( + "/api/auth/register", + { + "username": "invitee", + "email": "i@example.com", + "password": "pw", + "invite_code": invite.invite_code, + }, + format="json", + ) + self.assertEqual(201, response.status_code) + self.assertFalse(models.Invitation.objects.filter(id=invite.id).exists()) + + def test_register_bad_invite_code(self): + self.site.registration_mode = "staff-invite-only" + self.site.save() + response = self.as_anon().post( + "/api/auth/register", + { + "username": "invitee", + "email": "i@example.com", + "password": "pw", + "invite_code": "bogus", + }, + format="json", + ) + self.assertEqual(403, response.status_code) + + def test_password_reset_sends_mail(self): + response = self.as_anon().post( + "/api/auth/password-reset", {"email": "alice@example.com"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.assertEqual(1, len(django_mail.outbox)) + + django_mail.outbox.clear() + response = self.as_anon().post( + "/api/auth/password-reset", {"email": "nobody@example.com"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.assertEqual(0, len(django_mail.outbox)) + + def test_password_reset_confirm(self): + uid = urlsafe_base64_encode(force_bytes(self.alice.pk)) + token = default_token_generator.make_token(self.alice) + + response = self.as_anon().post( + "/api/auth/password-reset-confirm", + {"uid": uid, "token": "bad-token", "new_password": "resetpw"}, + format="json", + ) + self.assertEqual(400, response.status_code) + + response = self.as_anon().post( + "/api/auth/password-reset-confirm", + {"uid": uid, "token": token, "new_password": "resetpw"}, + format="json", + ) + self.assertEqual(200, response.status_code) + self.alice.refresh_from_db() + self.assertTrue(self.alice.check_password("resetpw")) + + def test_activate_account(self): + user = models.User.objects.create(username="pending", email="p@example.com") + user.set_unusable_password() + user.activation_key = "activation123" + user.save() + + response = self.as_anon().post( + "/api/account/activate", + {"activation_key": "activation123", "password": "mypw"}, + format="json", + ) + self.assertEqual(200, response.status_code) + self.assertEqual("pending", response.json()["username"]) + user.refresh_from_db() + self.assertIsNone(user.activation_key) + self.assertTrue(user.check_password("mypw")) + + # Key is single-use. + response = self.as_anon().post( + "/api/account/activate", + {"activation_key": "activation123", "password": "mypw"}, + format="json", + ) + self.assertEqual(404, response.status_code) + + def test_invitation_create_and_destroy(self): + response = self.as_alice().post( + "/api/invitations", {"for_email": "friend@example.com"}, format="json" + ) + self.assertEqual(201, response.status_code) + self.assertEqual(1, len(django_mail.outbox)) + invite_id = response.json()["id"] + + response = self.as_alice().delete(f"/api/invitations/{invite_id}") + self.assertEqual(204, response.status_code) + + def test_invitation_denied_when_not_allowed(self): + self.site.registration_mode = "staff-invite-only" + self.site.save() + response = self.as_alice().post( + "/api/invitations", {"for_email": "friend@example.com"}, format="json" + ) + self.assertEqual(403, response.status_code) + + class MeEndpointTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/urls.py b/pykeg/api/urls.py index b114e89f0..a5216fb70 100644 --- a/pykeg/api/urls.py +++ b/pykeg/api/urls.py @@ -2,7 +2,7 @@ from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView from rest_framework import routers -from . import views +from . import views, views_account router = routers.DefaultRouter(trailing_slash=False) router.register("api-keys", views.ApiKeyViewSet) @@ -30,9 +30,18 @@ # Must precede the router so it wins over the users/{pk} detail route. path("users/me", views.me), path("", include(router.urls)), + path("account/activate", views_account.activate), + path("account/confirm-email", views_account.confirm_email), + path("account/email", views_account.change_email), + path("account/mugshot", views_account.mugshot), + path("account/password", views_account.change_password), + path("account/regenerate-api-key", views_account.regenerate_api_key), path("auth/api-auth/", include("rest_framework.urls", namespace="rest_framework")), path("auth/login", views.login), path("auth/logout", views.logout), + path("auth/password-reset", views_account.password_reset), + path("auth/password-reset-confirm", views_account.password_reset_confirm), + path("auth/register", views_account.register), path("status", views.system_status), path("schema", SpectacularAPIView.as_view(), name="api-schema"), path("docs", SpectacularSwaggerView.as_view(url_name="api-schema"), name="api-docs"), diff --git a/pykeg/api/views.py b/pykeg/api/views.py index e9e417bac..c4897e725 100644 --- a/pykeg/api/views.py +++ b/pykeg/api/views.py @@ -11,7 +11,12 @@ authentication_classes, permission_classes, ) -from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError +from rest_framework.exceptions import ( + NotAuthenticated, + NotFound, + PermissionDenied, + ValidationError, +) from rest_framework.parsers import FormParser, MultiPartParser from rest_framework.response import Response @@ -48,8 +53,18 @@ def stats(self, request, username=None): return Response(self.get_object().get_stats()) -class InvitationViewSet(viewsets.ReadOnlyModelViewSet): - """Lists all of the *current user's* invitations.""" +class InvitationViewSet( + mixins.CreateModelMixin, + mixins.RetrieveModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + viewsets.GenericViewSet, +): + """Lists all of the *current user's* invitations. + + Creating an invitation (when the site's registration mode allows the + caller to invite) also sends the invitation e-mail. + """ queryset = models.Invitation.objects.all() serializer_class = serializers.InvitationSerializer @@ -65,6 +80,13 @@ def get_queryset(self): ) ) + def perform_create(self, serializer): + site = getattr(self.request, "kbsite", None) or models.KegbotSite.get() + if not site.can_invite(self.request.user): + raise PermissionDenied("You may not send invitations.") + invitation = serializer.save(invited_by=self.request.user) + invitation.send() + class DeviceViewSet(viewsets.ModelViewSet): """Lists all devices in the system. @@ -624,20 +646,32 @@ def logout(request): @ensure_csrf_cookie -@extend_schema(responses=serializers.MeSerializer) -@api_view(["GET"]) +@extend_schema( + request=serializers.ProfileUpdateRequestSerializer, responses=serializers.MeSerializer +) +@api_view(["GET", "PATCH"]) @permission_classes(()) def me(request): """The frontend boot endpoint. - Always responds 200, regardless of authentication and site privacy: - `user` is null for anonymous callers, and the rest of the payload is - limited to privacy-safe configuration the frontend always needs (to - render login screens, privacy interstitials, forms, and navigation). + GET always responds 200, regardless of authentication and site + privacy: `user` is null for anonymous callers, and the rest of the + payload is limited to privacy-safe configuration the frontend always + needs (to render login screens, privacy interstitials, forms, and + navigation). It also sets the CSRF cookie, so a fresh browser session + can make authenticated POSTs after calling this. - Also sets the CSRF cookie, so a fresh browser session can make - authenticated POSTs after calling this. + PATCH updates the current user's profile and returns the same payload. """ + if request.method == "PATCH": + if not request.user.is_authenticated: + raise NotAuthenticated() + req = serializers.ProfileUpdateRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + if "display_name" in req.validated_data: + request.user.display_name = req.validated_data["display_name"] + request.user.save(update_fields=["display_name"]) + user = request.user if request.user.is_authenticated else None site = getattr(request, "kbsite", None) or models.KegbotSite.get() plugins = getattr(request, "plugins", {}) or {} diff --git a/pykeg/api/views_account.py b/pykeg/api/views_account.py new file mode 100644 index 000000000..0b939944d --- /dev/null +++ b/pykeg/api/views_account.py @@ -0,0 +1,228 @@ +"""Account self-service and authentication-flow endpoints. + +These replace the server-rendered account, registration, and password +management pages. Endpoints that operate before login (register, password +reset, activation) are unauthenticated and rate-limited. +""" + +from django.contrib.auth import authenticate, update_session_auth_hash +from django.contrib.auth import login as auth_login +from django.contrib.auth.tokens import default_token_generator +from django.utils.encoding import force_str +from django.utils.http import urlsafe_base64_decode +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import extend_schema +from rest_framework.decorators import ( + api_view, + authentication_classes, + parser_classes, + permission_classes, + throttle_classes, +) +from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError +from rest_framework.parsers import FormParser, MultiPartParser +from rest_framework.response import Response +from rest_framework.throttling import AnonRateThrottle + +from pykeg.core import models +from pykeg.util import email as email_util +from pykeg.web.auth import UserExistsException +from pykeg.web.kbregistration.forms import PasswordResetForm + +from . import serializers + + +class AuthAttemptThrottle(AnonRateThrottle): + scope = "auth" + + +@extend_schema(request=serializers.PasswordChangeRequestSerializer, responses=OpenApiTypes.BOOL) +@api_view(["POST"]) +def change_password(request): + """Changes the current user's password, keeping the session valid.""" + req = serializers.PasswordChangeRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + if not request.user.check_password(data["current_password"]): + raise ValidationError({"current_password": ["Incorrect password."]}) + request.user.set_password(data["new_password"]) + request.user.save() + update_session_auth_hash(request, request.user) + return Response(True) + + +@extend_schema(request=serializers.EmailChangeRequestSerializer, responses=OpenApiTypes.BOOL) +@api_view(["POST"]) +def change_email(request): + """Requests an email change; a confirmation link is mailed to the new address.""" + req = serializers.EmailChangeRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + new_email = req.validated_data["email"] + if new_email == request.user.email: + raise ValidationError({"email": ["E-mail address unchanged."]}) + + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + token = email_util.build_email_change_token(request.user, new_email) + url = site.reverse_full("account-confirm-email", args=(), kwargs={"token": token}) + message = email_util.build_message( + new_email, + "registration/email_confirm_email_change.html", + {"url": url, "site_name": site.title}, + ) + message.send() + return Response(True) + + +@extend_schema( + request=serializers.ConfirmEmailRequestSerializer, + responses=serializers.CurrentUserSerializer, +) +@api_view(["POST"]) +def confirm_email(request): + """Applies an email change, given the token from the confirmation mail.""" + req = serializers.ConfirmEmailRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + try: + uid, new_address = email_util.verify_email_change_token( + request.user, req.validated_data["token"] + ) + except ValueError: + raise ValidationError({"token": ["That token is not valid."]}) from None + if uid != request.user.id: + raise ValidationError({"token": ["E-mail confirmation does not exist for this account."]}) + if request.user.email != new_address: + request.user.email = new_address + request.user.save() + return Response(serializers.CurrentUserSerializer(request.user).data) + + +@extend_schema( + request=serializers.PictureUploadRequestSerializer, + responses=serializers.CurrentUserSerializer, +) +@api_view(["POST"]) +@parser_classes([MultiPartParser, FormParser]) +def mugshot(request): + """Sets the current user's mugshot.""" + req = serializers.PictureUploadRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + picture = models.Picture.objects.create(image=req.validated_data["image"], user=request.user) + request.user.mugshot = picture + request.user.save() + return Response(serializers.CurrentUserSerializer(request.user).data) + + +@extend_schema(request=None, responses=serializers.ApiKeySerializer) +@api_view(["POST"]) +def regenerate_api_key(request): + """Discards and regenerates the current user's API key.""" + key, _ = models.ApiKey.objects.get_or_create(user=request.user) + key.regenerate() + return Response(serializers.ApiKeySerializer(key).data) + + +@extend_schema( + request=serializers.ActivateAccountRequestSerializer, + responses=serializers.CurrentUserSerializer, +) +@api_view(["POST"]) +@authentication_classes(()) +@permission_classes(()) +@throttle_classes([AuthAttemptThrottle]) +def activate(request): + """Activates an invited/created account: sets its password and logs in.""" + req = serializers.ActivateAccountRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + users = models.User.objects.filter(activation_key=data["activation_key"]) + if users.count() != 1: + raise NotFound("No such activation key.") + user = users[0] + if user.has_usable_password(): + raise ValidationError({"activation_key": ["Account is already activated."]}) + + user.set_password(data["password"]) + user.activation_key = None + user.save() + + user = authenticate(username=user.username, password=data["password"]) + auth_login(request, user) + return Response(serializers.CurrentUserSerializer(user).data) + + +@extend_schema( + request=serializers.RegisterRequestSerializer, + responses=serializers.CurrentUserSerializer, +) +@api_view(["POST"]) +@authentication_classes(()) +@permission_classes(()) +@throttle_classes([AuthAttemptThrottle]) +def register(request): + """Registers a new account, honoring the site's registration mode.""" + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + req = serializers.RegisterRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + + invite = None + if site.registration_mode != "public": + invite_code = data.get("invite_code") or "" + if not invite_code: + raise PermissionDenied("An invitation is required to register.") + invite = models.Invitation.objects.filter(invite_code=invite_code).first() + if not invite or invite.is_expired(): + raise PermissionDenied("Invitation is invalid or expired.") + + try: + models.User.create_new_user( + username=data["username"], email=data["email"], password=data["password"] + ) + except UserExistsException: + raise ValidationError({"username": ["A user with that username already exists."]}) from None + + if invite: + invite.delete() + + user = authenticate(username=data["username"], password=data["password"]) + auth_login(request, user) + return Response(serializers.CurrentUserSerializer(user).data, status=201) + + +@extend_schema(request=serializers.PasswordResetRequestSerializer, responses=OpenApiTypes.BOOL) +@api_view(["POST"]) +@authentication_classes(()) +@permission_classes(()) +@throttle_classes([AuthAttemptThrottle]) +def password_reset(request): + """Mails a password-reset link. Always succeeds (no account enumeration).""" + req = serializers.PasswordResetRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + form = PasswordResetForm({"email": req.validated_data["email"]}) + if form.is_valid(): + form.save(request=request) + return Response(True) + + +@extend_schema( + request=serializers.PasswordResetConfirmRequestSerializer, responses=OpenApiTypes.BOOL +) +@api_view(["POST"]) +@authentication_classes(()) +@permission_classes(()) +@throttle_classes([AuthAttemptThrottle]) +def password_reset_confirm(request): + """Sets a new password, given the uid/token pair from a reset mail.""" + req = serializers.PasswordResetConfirmRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + try: + uid = force_str(urlsafe_base64_decode(data["uid"])) + user = models.User.objects.get(pk=uid) + except TypeError, ValueError, OverflowError, models.User.DoesNotExist: + raise ValidationError({"token": ["Invalid password reset link."]}) from None + if not default_token_generator.check_token(user, data["token"]): + raise ValidationError({"token": ["Invalid or expired password reset link."]}) + user.set_password(data["new_password"]) + user.save() + return Response(True) diff --git a/pykeg/settings.py b/pykeg/settings.py index 3260f7e17..08571b2a4 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -344,6 +344,10 @@ "pykeg.api.auth.ApiKeyBasicAuth", "rest_framework.authentication.SessionAuthentication", ), + "DEFAULT_THROTTLE_RATES": { + # Unauthenticated auth flows (register, password reset, activate). + "auth": "30/min", + }, "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", } From 393fba158da432b0b882fe2d557350e5d503251b Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:36:04 +0000 Subject: [PATCH 08/48] api: add admin user management and site settings UserViewSet gains admin operations mirroring the kegadmin users pages: create (optionally staff), edit (email, display name, enable/disable, staff status), and set-password. The guest account cannot be disabled or promoted; there is still no user delete, matching the old UI. Adds GET/PATCH /api/site (admin-only singleton) covering the fields of the old general/location/advanced settings forms, plus a background image upload endpoint. Auth tokens can now be assigned to a user on create/update. --- pykeg/api/serializers.py | 50 ++++++++++++++++ pykeg/api/tests.py | 121 ++++++++++++++++++++++++++++++++++++++- pykeg/api/urls.py | 2 + pykeg/api/views.py | 95 +++++++++++++++++++++++++++++- 4 files changed, 264 insertions(+), 4 deletions(-) diff --git a/pykeg/api/serializers.py b/pykeg/api/serializers.py index 2e593eca1..6f30ed286 100644 --- a/pykeg/api/serializers.py +++ b/pykeg/api/serializers.py @@ -310,12 +310,18 @@ class Meta: "token_value", "nice_name", "pin", + "user", "user_id", "enabled", "created_time", "expire_time", ] + # Assign/unassign the token's user by pk on writes; reads use user_id. + user = serializers.PrimaryKeyRelatedField( + queryset=models.User.objects.all(), allow_null=True, required=False, write_only=True + ) + class DrinkingSessionSerializer(serializers.ModelSerializer): class Meta: @@ -532,6 +538,50 @@ class PasswordResetConfirmRequestSerializer(serializers.Serializer): new_password = serializers.CharField(min_length=1) +class AdminUserCreateRequestSerializer(serializers.Serializer): + username = serializers.RegexField(regex=kb_common.USERNAME_REGEX, max_length=30) + email = serializers.EmailField(required=False, allow_blank=True, default="") + password = serializers.CharField(min_length=1) + is_staff = serializers.BooleanField(default=False) + + +class AdminUserUpdateRequestSerializer(serializers.Serializer): + email = serializers.EmailField(required=False, allow_blank=True) + display_name = serializers.CharField(required=False, allow_blank=True, max_length=127) + is_staff = serializers.BooleanField(required=False) + is_active = serializers.BooleanField(required=False) + + +class SetPasswordRequestSerializer(serializers.Serializer): + password = serializers.CharField(min_length=1) + + +class SiteSettingsSerializer(serializers.ModelSerializer): + """Admin-editable site settings, covering the old settings forms.""" + + class Meta: + model = models.KegbotSite + fields = [ + "name", + "server_version", + "is_setup", + "title", + "privacy", + "registration_mode", + "enable_sensing", + "enable_users", + "volume_display_units", + "temperature_display_units", + "timezone", + "session_timeout_minutes", + "google_analytics_id", + "email_config", + "background_image", + ] + + background_image = PictureSerializer(read_only=True) + + class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 71a8fb4de..162f8b48c 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -138,13 +138,13 @@ def setUp(self): self.member = models.User.objects.get(username="alice") self.member_key = models.ApiKey.objects.get_or_create(user=self.member)[0] - def test_users_are_read_only(self): + def test_users_are_not_editable_by_members(self): self.client.api_key = self.member_key.key self.client.add_auth() response = self.client.client.patch( f"/api/users/{self.member.username}", {"display_name": "hax"}, format="json" ) - self.assertEqual(405, response.status_code) + self.assertEqual(403, response.status_code) def test_user_detail_is_looked_up_by_username(self): status, data = self.client.get(f"/api/users/{self.member.username}") @@ -920,6 +920,123 @@ def test_invitation_denied_when_not_allowed(self): self.assertEqual(403, response.status_code) +class AdminUsersAndSiteTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + self.admin = models.User.objects.get(username="admin") + self.admin.is_staff = True + self.admin.save() + self.admin_key = models.ApiKey.objects.get_or_create(user=self.admin)[0] + self.alice = models.User.objects.get(username="alice") + self.alice_key = models.ApiKey.objects.get_or_create(user=self.alice)[0] + + def as_admin(self): + self.client.api_key = self.admin_key.key + self.client.add_auth() + return self.client.client + + def as_member(self): + self.client.api_key = self.alice_key.key + self.client.add_auth() + return self.client.client + + def test_admin_creates_user(self): + response = self.as_member().post( + "/api/users", {"username": "nope", "password": "pw"}, format="json" + ) + self.assertEqual(403, response.status_code) + + response = self.as_admin().post( + "/api/users", + {"username": "staffer", "password": "pw", "is_staff": True}, + format="json", + ) + self.assertEqual(201, response.status_code) + user = models.User.objects.get(username="staffer") + self.assertTrue(user.is_staff) + self.assertTrue(user.check_password("pw")) + + def test_admin_edits_user(self): + response = self.as_admin().patch( + "/api/users/alice", {"is_active": False, "is_staff": True}, format="json" + ) + self.assertEqual(200, response.status_code) + self.alice.refresh_from_db() + self.assertFalse(self.alice.is_active) + self.assertTrue(self.alice.is_staff) + + def test_guest_cannot_be_disabled(self): + response = self.as_admin().patch("/api/users/guest", {"is_active": False}, format="json") + self.assertEqual(400, response.status_code) + + def test_admin_sets_password(self): + response = self.as_admin().post( + "/api/users/alice/set-password", {"password": "newpw"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.alice.refresh_from_db() + self.assertTrue(self.alice.check_password("newpw")) + + def test_site_settings_read_and_update(self): + response = self.as_member().get("/api/site") + self.assertEqual(403, response.status_code) + + response = self.as_admin().get("/api/site") + self.assertEqual(200, response.status_code) + self.assertEqual(self.site.title, response.json()["title"]) + + response = self.as_admin().patch( + "/api/site", + {"title": "Renamed Bar", "privacy": "members", "session_timeout_minutes": 30}, + format="json", + ) + self.assertEqual(200, response.status_code) + self.site.refresh_from_db() + self.assertEqual("Renamed Bar", self.site.title) + self.assertEqual("members", self.site.privacy) + self.assertEqual(30, self.site.session_timeout_minutes) + + def test_site_settings_rejects_bad_email_config(self): + response = self.as_admin().patch("/api/site", {"email_config": "bogus:"}, format="json") + self.assertEqual(400, response.status_code) + + def test_site_background_image(self): + from django.core.files.uploadedfile import SimpleUploadedFile + + image = SimpleUploadedFile("bg.gif", TINY_GIF, content_type="image/gif") + response = self.as_admin().post( + "/api/site/background-image", {"image": image}, format="multipart" + ) + self.assertEqual(200, response.status_code) + self.assertIsNotNone(response.json()["background_image"]) + self.site.refresh_from_db() + self.assertIsNotNone(self.site.background_image) + + def test_token_user_assignment(self): + response = self.as_admin().post( + "/api/auth-tokens", + {"auth_device": "core.rfid", "token_value": "deadbeef", "user": self.alice.id}, + format="json", + ) + self.assertEqual(201, response.status_code) + token = models.AuthenticationToken.objects.get( + auth_device="core.rfid", token_value="deadbeef" + ) + self.assertEqual(self.alice, token.user) + + response = self.as_admin().patch( + f"/api/auth-tokens/{token.id}", {"user": None}, format="json" + ) + self.assertEqual(200, response.status_code) + token.refresh_from_db() + self.assertIsNone(token.user) + + class MeEndpointTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/urls.py b/pykeg/api/urls.py index a5216fb70..f250ea227 100644 --- a/pykeg/api/urls.py +++ b/pykeg/api/urls.py @@ -42,6 +42,8 @@ path("auth/password-reset", views_account.password_reset), path("auth/password-reset-confirm", views_account.password_reset_confirm), path("auth/register", views_account.register), + path("site", views.site_settings), + path("site/background-image", views.site_background_image), path("status", views.system_status), path("schema", SpectacularAPIView.as_view(), name="api-schema"), path("docs", SpectacularSwaggerView.as_view(url_name="api-schema"), name="api-docs"), diff --git a/pykeg/api/views.py b/pykeg/api/views.py index c4897e725..3b38cd08c 100644 --- a/pykeg/api/views.py +++ b/pykeg/api/views.py @@ -9,6 +9,7 @@ action, api_view, authentication_classes, + parser_classes, permission_classes, ) from rest_framework.exceptions import ( @@ -25,12 +26,19 @@ from . import filters, permissions, serializers -class UserViewSet(viewsets.ReadOnlyModelViewSet): +class UserViewSet( + mixins.CreateModelMixin, + mixins.RetrieveModelMixin, + mixins.ListModelMixin, + viewsets.GenericViewSet, +): """Lists all users in the system. Individual users (and their stats) are viewable by anyone the site privacy setting admits, mirroring the public drinker pages; the full - user listing requires authentication. + user listing requires authentication. User management (create, edit, + enable/disable, staff status, set-password) is admin-only; there is + no delete — accounts are disabled instead. """ queryset = models.User.objects.all() @@ -44,6 +52,8 @@ class UserViewSet(viewsets.ReadOnlyModelViewSet): def get_permissions(self): if self.action in ("retrieve", "stats"): return [permissions.DashboardViewer()] + if self.action in ("create", "partial_update", "set_password"): + return [permissions.IsAdminUser()] return super().get_permissions() @extend_schema(responses=OpenApiTypes.OBJECT) @@ -52,6 +62,52 @@ def stats(self, request, username=None): """Returns the latest stats blob for this user.""" return Response(self.get_object().get_stats()) + @extend_schema( + request=serializers.AdminUserCreateRequestSerializer, + responses=serializers.UserSerializer, + ) + def create(self, request, *args, **kwargs): + req = serializers.AdminUserCreateRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + if models.User.objects.filter(username=data["username"]).exists(): + raise ValidationError({"username": ["A user with that username already exists."]}) + user = models.User.create_new_user( + username=data["username"], email=data["email"], password=data["password"] + ) + if data["is_staff"]: + user.is_staff = True + user.save(update_fields=["is_staff"]) + return Response(self.get_serializer(user).data, status=status.HTTP_201_CREATED) + + @extend_schema( + request=serializers.AdminUserUpdateRequestSerializer, + responses=serializers.UserSerializer, + ) + def partial_update(self, request, username=None): + user = self.get_object() + req = serializers.AdminUserUpdateRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + if user.is_guest() and ("is_active" in data or "is_staff" in data): + raise ValidationError("The guest account cannot be disabled or made staff.") + for field in ("email", "display_name", "is_staff", "is_active"): + if field in data: + setattr(user, field, data[field]) + user.save() + return Response(self.get_serializer(user).data) + + @extend_schema(request=serializers.SetPasswordRequestSerializer, responses=OpenApiTypes.BOOL) + @action(detail=True, methods=["post"], url_path="set-password") + def set_password(self, request, username=None): + """Sets a new password for this user.""" + user = self.get_object() + req = serializers.SetPasswordRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + user.set_password(req.validated_data["password"]) + user.save() + return Response(True) + class InvitationViewSet( mixins.CreateModelMixin, @@ -626,6 +682,41 @@ def system_status(request): return Response(serializer.data) +@extend_schema( + request=serializers.SiteSettingsSerializer, responses=serializers.SiteSettingsSerializer +) +@api_view(["GET", "PATCH"]) +@permission_classes([permissions.IsAdminUser]) +def site_settings(request): + """Reads (GET) or updates (PATCH) the site settings singleton.""" + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + if request.method == "PATCH": + serializer = serializers.SiteSettingsSerializer(site, data=request.data, partial=True) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializers.SiteSettingsSerializer(site).data) + + +@extend_schema( + request=serializers.PictureUploadRequestSerializer, + responses=serializers.SiteSettingsSerializer, +) +@api_view(["POST"]) +@permission_classes([permissions.IsAdminUser]) +@parser_classes([MultiPartParser, FormParser]) +def site_background_image(request): + """Uploads and sets the site background image.""" + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + req = serializers.PictureUploadRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + site.background_image = models.Picture.objects.create( + image=req.validated_data["image"], + caption=req.validated_data["caption"], + ) + site.save() + return Response(serializers.SiteSettingsSerializer(site).data) + + @extend_schema(request=serializers.LoginSerializer, responses=serializers.CurrentUserSerializer) @api_view(["POST"]) @authentication_classes(()) From ead55c02dbe0af2236c9b3757b62ff51d3d79ccc Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:38:24 +0000 Subject: [PATCH 09/48] api: add admin ops endpoints Adds /api/admin/{dashboard,backups,logs,email-test,bugreport} (all admin-only), replacing the corresponding kegadmin pages: dashboard health summary (email config, redis ping, user counts), backup listing with archive metadata plus build (async via the existing RQ task) and delete, the redis log viewer (defensive when redis is down), the test email sender, and an in-process bugreport (no more shell=True). --- pykeg/api/serializers.py | 11 +++ pykeg/api/tests.py | 70 ++++++++++++++++++ pykeg/api/urls.py | 8 ++- pykeg/api/views_admin.py | 152 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 pykeg/api/views_admin.py diff --git a/pykeg/api/serializers.py b/pykeg/api/serializers.py index 6f30ed286..5f4a68701 100644 --- a/pykeg/api/serializers.py +++ b/pykeg/api/serializers.py @@ -556,6 +556,17 @@ class SetPasswordRequestSerializer(serializers.Serializer): password = serializers.CharField(min_length=1) +class AdminDashboardSerializer(serializers.Serializer): + email_configured = serializers.BooleanField() + redis_error = serializers.CharField(allow_null=True) + num_users = serializers.IntegerField() + num_new_users = serializers.IntegerField() + + +class EmailTestRequestSerializer(serializers.Serializer): + address = serializers.EmailField() + + class SiteSettingsSerializer(serializers.ModelSerializer): """Admin-editable site settings, covering the old settings forms.""" diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 162f8b48c..1ba951d36 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -1037,6 +1037,76 @@ def test_token_user_assignment(self): self.assertIsNone(token.user) +@override_settings(EMAIL_BACKEND="pykeg.core.mail.KegbotEmailBackend") +class AdminOpsTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.client = ApiClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.email_config = "memory://?_default_from_email=test@example.com" + self.site.save() + self.admin = models.User.objects.get(username="admin") + self.admin.is_staff = True + self.admin.save() + self.admin_key = models.ApiKey.objects.get_or_create(user=self.admin)[0] + self.alice = models.User.objects.get(username="alice") + self.alice_key = models.ApiKey.objects.get_or_create(user=self.alice)[0] + + def as_admin(self): + self.client.api_key = self.admin_key.key + self.client.add_auth() + return self.client.client + + def test_ops_require_admin(self): + self.client.api_key = self.alice_key.key + for path in ("/api/admin/dashboard", "/api/admin/backups", "/api/admin/logs"): + status_code, _ = self.client.get(path) + self.assertEqual(403, status_code, path) + + def test_dashboard(self): + response = self.as_admin().get("/api/admin/dashboard") + self.assertEqual(200, response.status_code) + data = response.json() + expected_users = ( + models.User.objects.filter(is_active=True).exclude(username="guest").count() + ) + self.assertEqual(expected_users, data["num_users"]) + self.assertIn("email_configured", data) + self.assertIn("redis_error", data) + + def test_backups_list_empty(self): + response = self.as_admin().get("/api/admin/backups") + self.assertEqual(200, response.status_code) + self.assertEqual([], response.json()) + + def test_backup_build_is_enqueued(self): + from unittest import mock + + with mock.patch("pykeg.core.tasks.build_backup.delay") as delay: + response = self.as_admin().post("/api/admin/backups") + self.assertEqual(202, response.status_code) + delay.assert_called_once() + + def test_delete_unknown_backup(self): + response = self.as_admin().delete("/api/admin/backups/nope.zip") + self.assertEqual(404, response.status_code) + + def test_logs(self): + response = self.as_admin().get("/api/admin/logs") + self.assertEqual(200, response.status_code) + self.assertIn("logs", response.json()) + + def test_email_test(self): + response = self.as_admin().post( + "/api/admin/email-test", {"address": "check@example.com"}, format="json" + ) + self.assertEqual(200, response.status_code) + self.assertEqual(1, len(django_mail.outbox)) + self.assertEqual(["check@example.com"], django_mail.outbox[0].to) + + class MeEndpointTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/urls.py b/pykeg/api/urls.py index f250ea227..513e7461d 100644 --- a/pykeg/api/urls.py +++ b/pykeg/api/urls.py @@ -2,7 +2,7 @@ from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView from rest_framework import routers -from . import views, views_account +from . import views, views_account, views_admin router = routers.DefaultRouter(trailing_slash=False) router.register("api-keys", views.ApiKeyViewSet) @@ -30,6 +30,12 @@ # Must precede the router so it wins over the users/{pk} detail route. path("users/me", views.me), path("", include(router.urls)), + path("admin/backups", views_admin.backups), + path("admin/backups/", views_admin.delete_backup), + path("admin/bugreport", views_admin.bugreport), + path("admin/dashboard", views_admin.dashboard), + path("admin/email-test", views_admin.email_test), + path("admin/logs", views_admin.logs), path("account/activate", views_account.activate), path("account/confirm-email", views_account.confirm_email), path("account/email", views_account.change_email), diff --git a/pykeg/api/views_admin.py b/pykeg/api/views_admin.py new file mode 100644 index 000000000..04c4330aa --- /dev/null +++ b/pykeg/api/views_admin.py @@ -0,0 +1,152 @@ +"""Admin operations endpoints: dashboard, backups, logs, email test, bugreport. + +These replace the corresponding kegadmin pages. Everything here is +admin-only. +""" + +import datetime +import io +import logging +import os +import zipfile +from operator import itemgetter + +import redis +from django.conf import settings +from django.core.files.storage import default_storage +from django.utils import timezone +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import extend_schema +from rest_framework import status +from rest_framework.decorators import api_view, permission_classes +from rest_framework.exceptions import NotFound +from rest_framework.response import Response + +from pykeg.backup import backup as backup_lib +from pykeg.core import models, tasks +from pykeg.logging.handlers import RedisListHandler +from pykeg.util import bugreport as bugreport_util +from pykeg.util.email import build_message + +from . import permissions, serializers + +logger = logging.getLogger(__name__) + + +@extend_schema(responses=serializers.AdminDashboardSerializer) +@api_view(["GET"]) +@permission_classes([permissions.IsAdminUser]) +def dashboard(request): + """System health summary for the admin dashboard.""" + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + + redis_error = None + try: + client = redis.StrictRedis.from_url(settings.KEGBOT["REDIS_URL"]) + client.ping() + except redis.RedisError as e: + redis_error = str(e) or "Unknown error." + + guestless_users = models.User.objects.exclude(username="guest") + recent_time = timezone.now() - datetime.timedelta(days=30) + payload = { + "email_configured": site.email_is_configured(), + "redis_error": redis_error, + "num_users": guestless_users.filter(is_active=True).count(), + "num_new_users": guestless_users.filter(date_joined__gte=recent_time).count(), + } + return Response(serializers.AdminDashboardSerializer(instance=payload).data) + + +@extend_schema(request=None, responses=OpenApiTypes.OBJECT) +@api_view(["GET", "POST"]) +@permission_classes([permissions.IsAdminUser]) +def backups(request): + """Lists existing backups (GET) or starts building a new one (POST).""" + if request.method == "POST": + tasks.build_backup.delay() + return Response({"started": True}, status=status.HTTP_202_ACCEPTED) + + storage = default_storage + results = [] + if storage.exists(backup_lib.BACKUPS_DIRNAME): + _, files = storage.listdir(backup_lib.BACKUPS_DIRNAME) + for filename in files: + if not filename.endswith("zip"): + continue + storage_filename = os.path.join(backup_lib.BACKUPS_DIRNAME, filename) + with storage.open(storage_filename, mode="rb") as backup_file: + archive = zipfile.ZipFile(backup_file) + metadata = backup_lib.read_metadata(archive) + metadata["size_bytes"] = storage.size(storage_filename) + metadata["url"] = storage.url(storage_filename) + metadata["backup_name"] = filename + results.append(metadata) + results.sort(key=itemgetter(backup_lib.META_CREATED_TIME), reverse=True) + return Response(results) + + +@extend_schema(request=None, responses=None) +@api_view(["DELETE"]) +@permission_classes([permissions.IsAdminUser]) +def delete_backup(request, filename): + """Deletes a backup archive by filename.""" + backup_file = os.path.normpath(os.path.basename(filename)) + backup_file = os.path.join(backup_lib.BACKUPS_DIRNAME, backup_file) + if not default_storage.exists(backup_file): + raise NotFound("Unknown backup file.") + default_storage.delete(backup_file) + return Response(status=status.HTTP_204_NO_CONTENT) + + +@extend_schema(responses=OpenApiTypes.OBJECT) +@api_view(["GET"]) +@permission_classes([permissions.IsAdminUser]) +def logs(request): + """Returns recent log records (newest first) from the redis log handler.""" + records = [] + error = None + candidates = [logging.getLogger(), logging.getLogger("pykeg")] + handlers = [h for logger_ in candidates for h in logger_.handlers] + for handler in handlers: + if isinstance(handler, RedisListHandler): + try: + records = list(handler.get_logs()) + records.reverse() + except redis.RedisError as e: + error = str(e) or "Unknown error." + break + return Response({"logs": records, "error": error}) + + +@extend_schema(request=serializers.EmailTestRequestSerializer, responses=OpenApiTypes.BOOL) +@api_view(["POST"]) +@permission_classes([permissions.IsAdminUser]) +def email_test(request): + """Sends a test notification email to the given address.""" + req = serializers.EmailTestRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + site = getattr(request, "kbsite", None) or models.KegbotSite.get() + context = { + "site_name": site.title, + "site_url": site.base_url(), + "settings_url": site.base_url() + "/account", + } + message = build_message(req.validated_data["address"], "notification/email_test.html", context) + message.send(fail_silently=True) + return Response(True) + + +@extend_schema(responses=OpenApiTypes.OBJECT) +@api_view(["GET"]) +@permission_classes([permissions.IsAdminUser]) +def bugreport(request): + """Generates and returns a bugreport (may contain secrets; admin eyes only).""" + out = io.StringIO() + error = None + try: + bugreport_util.bugreport(out) + except Exception as e: # Never fail: partial output is still useful. + logger.exception("Error generating bugreport") + error = str(e) + return Response({"output": out.getvalue(), "error": error}) From 83527ff0333614f5e74f5dcb827a17651b68b64d Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:41:00 +0000 Subject: [PATCH 10/48] api: add setup wizard and upgrade endpoints Adds /api/setup/{status,migrate,settings,admin-user,finish,upgrade}, powering the frontend setup flow. The endpoints are open only while setup or upgrade is required (SetupAccess permission), use no authenticators since the database may not exist yet, and are exempt from the IsSetupMiddleware gate. Unlike the old cookie-driven wizard (which was also DEBUG-only), there is no server-side inter-step state: the frontend submits collected choices in a single settings call. The admin-user step logs the new superuser in, and finish/upgrade stamp the current server version. --- pykeg/api/permissions.py | 16 ++++ pykeg/api/serializers.py | 29 ++++++++ pykeg/api/tests.py | 91 +++++++++++++++++++++++ pykeg/api/urls.py | 8 +- pykeg/api/views_setup.py | 154 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 297 insertions(+), 1 deletion(-) create mode 100644 pykeg/api/views_setup.py diff --git a/pykeg/api/permissions.py b/pykeg/api/permissions.py index 9e33d4113..3dd4a73f9 100644 --- a/pykeg/api/permissions.py +++ b/pykeg/api/permissions.py @@ -53,6 +53,22 @@ def has_permission(self, request, view): return bool(request.user and request.user.is_staff) +class SetupAccess(permissions.BasePermission): + """Setup endpoints are open while setup/upgrade is required. + + Once the site is set up and current, they respond 403: setup views use + no authenticators (the database may not exist yet), so nobody — staff + included — can reach them afterwards. + """ + + message = "Setup is not required" + + def has_permission(self, request, view): + return bool( + getattr(request, "need_setup", False) or getattr(request, "need_upgrade", False) + ) + + class IsOwnerOrAdmin(IsAuthenticated): """Requires the object's owning user (its `user` attribute) or an admin.""" diff --git a/pykeg/api/serializers.py b/pykeg/api/serializers.py index 5f4a68701..1f8ba8876 100644 --- a/pykeg/api/serializers.py +++ b/pykeg/api/serializers.py @@ -556,6 +556,35 @@ class SetPasswordRequestSerializer(serializers.Serializer): password = serializers.CharField(min_length=1) +class SetupStatusSerializer(serializers.Serializer): + need_setup = serializers.BooleanField() + need_upgrade = serializers.BooleanField() + installed_version = serializers.CharField(allow_null=True) + current_version = serializers.CharField() + + +class SetupSiteSettingsRequestSerializer(serializers.ModelSerializer): + """The subset of site settings collected during the setup wizard.""" + + class Meta: + model = models.KegbotSite + fields = [ + "title", + "privacy", + "timezone", + "volume_display_units", + "temperature_display_units", + "enable_sensing", + "enable_users", + ] + + +class SetupAdminUserRequestSerializer(serializers.Serializer): + username = serializers.RegexField(regex=kb_common.USERNAME_REGEX, max_length=30) + email = serializers.EmailField() + password = serializers.CharField(min_length=1) + + class AdminDashboardSerializer(serializers.Serializer): email_configured = serializers.BooleanField() redis_error = serializers.CharField(allow_null=True) diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 1ba951d36..98ea40110 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -1177,6 +1177,97 @@ def test_upgrade_required_returns_json(self): self.assertEqual("0.0.1", data["installed_version"]) +class SetupApiTestCase(TestCase): + fixtures = ["testdata/demo-site.json"] + + def setUp(self): + self.api = APIClient() + self.site = models.KegbotSite.objects.all().first() + self.site.server_version = get_version() + self.site.save() + + def test_endpoints_closed_when_site_is_setup(self): + response = self.api.get("/api/setup/status") + self.assertEqual(403, response.status_code) + response = self.api.post("/api/setup/finish") + self.assertEqual(403, response.status_code) + + def test_setup_flow(self): + self.site.is_setup = False + self.site.save() + + response = self.api.get("/api/setup/status") + self.assertEqual(200, response.status_code) + data = response.json() + self.assertTrue(data["need_setup"]) + self.assertEqual(get_version(), data["current_version"]) + + response = self.api.post("/api/setup/migrate") + self.assertEqual(200, response.status_code) + + response = self.api.post( + "/api/setup/settings", + { + "title": "Fresh Bar", + "privacy": "members", + "timezone": "America/Los_Angeles", + "volume_display_units": "metric", + "enable_sensing": True, + "enable_users": False, + }, + format="json", + ) + self.assertEqual(200, response.status_code) + self.site.refresh_from_db() + self.assertEqual("Fresh Bar", self.site.title) + self.assertEqual("members", self.site.privacy) + self.assertFalse(self.site.enable_users) + + response = self.api.post( + "/api/setup/admin-user", + {"username": "root", "email": "root@example.com", "password": "adminpw"}, + format="json", + ) + self.assertEqual(201, response.status_code) + user = models.User.objects.get(username="root") + self.assertTrue(user.is_staff) + self.assertTrue(user.is_superuser) + self.assertTrue(user.check_password("adminpw")) + + response = self.api.post("/api/setup/finish") + self.assertEqual(200, response.status_code) + self.site.refresh_from_db() + self.assertTrue(self.site.is_setup) + + # The wizard is closed once setup completes. + response = self.api.get("/api/setup/status") + self.assertEqual(403, response.status_code) + + def test_upgrade_flow(self): + self.site.server_version = "0.0.1" + self.site.save() + + response = self.api.get("/api/setup/status") + self.assertEqual(200, response.status_code) + data = response.json() + self.assertTrue(data["need_upgrade"]) + self.assertEqual("0.0.1", data["installed_version"]) + + response = self.api.post("/api/setup/upgrade") + self.assertEqual(200, response.status_code) + self.site.refresh_from_db() + self.assertEqual(get_version(), self.site.server_version) + + response = self.api.post("/api/setup/upgrade") + self.assertEqual(403, response.status_code) + + def test_settings_conflict_when_only_upgrade_needed(self): + self.site.server_version = "0.0.1" + self.site.save() + response = self.api.post("/api/setup/settings", {"title": "X"}, format="json") + self.assertEqual(409, response.status_code) + + class SchemaTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/urls.py b/pykeg/api/urls.py index 513e7461d..540855790 100644 --- a/pykeg/api/urls.py +++ b/pykeg/api/urls.py @@ -2,7 +2,7 @@ from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView from rest_framework import routers -from . import views, views_account, views_admin +from . import views, views_account, views_admin, views_setup router = routers.DefaultRouter(trailing_slash=False) router.register("api-keys", views.ApiKeyViewSet) @@ -50,6 +50,12 @@ path("auth/register", views_account.register), path("site", views.site_settings), path("site/background-image", views.site_background_image), + path("setup/status", views_setup.setup_status), + path("setup/migrate", views_setup.migrate), + path("setup/settings", views_setup.site_settings), + path("setup/admin-user", views_setup.admin_user), + path("setup/finish", views_setup.finish), + path("setup/upgrade", views_setup.upgrade), path("status", views.system_status), path("schema", SpectacularAPIView.as_view(), name="api-schema"), path("docs", SpectacularSwaggerView.as_view(url_name="api-schema"), name="api-docs"), diff --git a/pykeg/api/views_setup.py b/pykeg/api/views_setup.py new file mode 100644 index 000000000..c4323d4a0 --- /dev/null +++ b/pykeg/api/views_setup.py @@ -0,0 +1,154 @@ +"""Setup wizard and upgrade endpoints. + +These power the frontend's setup flow. They are reachable only while +setup or upgrade is required (`SetupAccess`), use no authenticators (the +database — including the session and user tables — may not exist yet), +and are exempted from the IsSetupMiddleware gate. + +Unlike the old cookie-driven wizard, there is no server-side inter-step +state: the frontend collects choices and submits them in one settings +call. +""" + +import io +import logging + +from django.contrib.auth import authenticate +from django.contrib.auth import login as auth_login +from django.core import management +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import extend_schema +from rest_framework import status +from rest_framework.decorators import api_view, authentication_classes, permission_classes +from rest_framework.exceptions import ValidationError +from rest_framework.response import Response + +from pykeg.core import defaults, models +from pykeg.core.util import get_version, get_version_object + +from . import permissions, serializers + +logger = logging.getLogger(__name__) + + +def _conflict(message): + return Response({"detail": message}, status=status.HTTP_409_CONFLICT) + + +def setup_api_view(methods): + """Composed decorators common to every setup endpoint.""" + + def decorator(func): + return api_view(methods)( + authentication_classes(())(permission_classes([permissions.SetupAccess])(func)) + ) + + return decorator + + +@extend_schema(responses=serializers.SetupStatusSerializer) +@setup_api_view(["GET"]) +def setup_status(request): + """Reports whether setup or upgrade is required.""" + payload = { + "need_setup": request.need_setup, + "need_upgrade": request.need_upgrade, + "installed_version": getattr(request, "installed_version_string", None), + "current_version": get_version(), + } + return Response(serializers.SetupStatusSerializer(instance=payload).data) + + +@extend_schema(request=None, responses=OpenApiTypes.OBJECT) +@setup_api_view(["POST"]) +def migrate(request): + """Creates or migrates the database (synchronous).""" + out = io.StringIO() + try: + management.call_command("migrate", interactive=False, stdout=out) + except Exception as e: + logger.exception("Error migrating database") + raise ValidationError({"detail": [str(e)]}) from e + return Response({"output": out.getvalue()}) + + +@extend_schema( + request=serializers.SetupSiteSettingsRequestSerializer, + responses=serializers.SetupSiteSettingsRequestSerializer, +) +@setup_api_view(["POST"]) +def site_settings(request): + """Applies initial site settings (after the database is migrated).""" + if not request.need_setup: + return _conflict("Site is already set up.") + try: + defaults.set_defaults() + except defaults.AlreadyInstalledError: + pass + + site = models.KegbotSite.get() + serializer = serializers.SetupSiteSettingsRequestSerializer( + site, data=request.data, partial=True + ) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data) + + +@extend_schema( + request=serializers.SetupAdminUserRequestSerializer, + responses=serializers.CurrentUserSerializer, +) +@setup_api_view(["POST"]) +def admin_user(request): + """Creates the initial admin account and logs it in.""" + if not request.need_setup: + return _conflict("Site is already set up.") + req = serializers.SetupAdminUserRequestSerializer(data=request.data) + req.is_valid(raise_exception=True) + data = req.validated_data + if models.User.objects.filter(username=data["username"]).exists(): + raise ValidationError({"username": ["A user with that username already exists."]}) + + user = models.User(username=data["username"], email=data["email"]) + user.is_staff = True + user.is_superuser = True + user.set_password(data["password"]) + user.save() + + # By this point the session table exists (migrated in the first step), + # so the new admin can be logged in for the rest of the flow. + user = authenticate(username=data["username"], password=data["password"]) + auth_login(request, user) + return Response(serializers.CurrentUserSerializer(user).data, status=status.HTTP_201_CREATED) + + +@extend_schema(request=None, responses=OpenApiTypes.BOOL) +@setup_api_view(["POST"]) +def finish(request): + """Marks setup complete.""" + if not request.need_setup: + return _conflict("Site is already set up.") + site = models.KegbotSite.get() + site.is_setup = True + site.server_version = str(get_version_object()) + site.save() + return Response(True) + + +@extend_schema(request=None, responses=OpenApiTypes.OBJECT) +@setup_api_view(["POST"]) +def upgrade(request): + """Migrates the database and stamps the current server version.""" + if not request.need_upgrade: + return _conflict("No upgrade is required.") + out = io.StringIO() + try: + management.call_command("migrate", interactive=False, stdout=out) + site = models.KegbotSite.get() + site.server_version = str(get_version_object()) + site.save() + except Exception as e: + logger.exception("Error upgrading database") + raise ValidationError({"detail": [str(e)]}) from e + return Response({"output": out.getvalue()}) From f43c743ed362c08f9ef9e6a8bc409232dd96f4b9 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:42:04 +0000 Subject: [PATCH 11/48] api: add plugin listing and settings endpoints GET /api/admin/plugins lists installed plugins; GET/PUT /api/admin/plugins/{short_name}/settings reads and updates a plugin's site settings, validating writes through the plugin's own Django form so field errors surface in standard DRF shape. Replaces the template-based plugin admin settings views (webhook is the only in-tree plugin). --- pykeg/api/tests.py | 30 +++++++++++++++++++++++ pykeg/api/urls.py | 2 ++ pykeg/api/views_admin.py | 51 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/pykeg/api/tests.py b/pykeg/api/tests.py index 98ea40110..56d830a05 100644 --- a/pykeg/api/tests.py +++ b/pykeg/api/tests.py @@ -1106,6 +1106,36 @@ def test_email_test(self): self.assertEqual(1, len(django_mail.outbox)) self.assertEqual(["check@example.com"], django_mail.outbox[0].to) + def test_plugin_list(self): + self.client.api_key = self.alice_key.key + status_code, _ = self.client.get("/api/admin/plugins") + self.assertEqual(403, status_code) + + response = self.as_admin().get("/api/admin/plugins") + self.assertEqual(200, response.status_code) + plugins = response.json() + self.assertEqual(["webhook"], [p["short_name"] for p in plugins]) + self.assertTrue(plugins[0]["has_settings"]) + + def test_plugin_settings_roundtrip(self): + response = self.as_admin().get("/api/admin/plugins/webhook/settings") + self.assertEqual(200, response.status_code) + + response = self.as_admin().put( + "/api/admin/plugins/webhook/settings", + {"webhook_urls": "http://example.com/hook"}, + format="json", + ) + self.assertEqual(200, response.status_code) + self.assertEqual("http://example.com/hook", response.json()["webhook_urls"]) + + response = self.as_admin().get("/api/admin/plugins/webhook/settings") + self.assertEqual("http://example.com/hook", response.json()["webhook_urls"]) + + def test_unknown_plugin_settings(self): + response = self.as_admin().get("/api/admin/plugins/nope/settings") + self.assertEqual(404, response.status_code) + class MeEndpointTestCase(TestCase): fixtures = ["testdata/demo-site.json"] diff --git a/pykeg/api/urls.py b/pykeg/api/urls.py index 540855790..715eda58b 100644 --- a/pykeg/api/urls.py +++ b/pykeg/api/urls.py @@ -36,6 +36,8 @@ path("admin/dashboard", views_admin.dashboard), path("admin/email-test", views_admin.email_test), path("admin/logs", views_admin.logs), + path("admin/plugins", views_admin.plugins), + path("admin/plugins//settings", views_admin.plugin_settings), path("account/activate", views_account.activate), path("account/confirm-email", views_account.confirm_email), path("account/email", views_account.change_email), diff --git a/pykeg/api/views_admin.py b/pykeg/api/views_admin.py index 04c4330aa..c002722a8 100644 --- a/pykeg/api/views_admin.py +++ b/pykeg/api/views_admin.py @@ -19,7 +19,7 @@ from drf_spectacular.utils import extend_schema from rest_framework import status from rest_framework.decorators import api_view, permission_classes -from rest_framework.exceptions import NotFound +from rest_framework.exceptions import NotFound, ValidationError from rest_framework.response import Response from pykeg.backup import backup as backup_lib @@ -137,6 +137,55 @@ def email_test(request): return Response(True) +@extend_schema(responses=OpenApiTypes.OBJECT) +@api_view(["GET"]) +@permission_classes([permissions.IsAdminUser]) +def plugins(request): + """Lists installed plugins.""" + installed = getattr(request, "plugins", {}) or {} + results = [ + { + "short_name": p.get_short_name(), + "name": p.get_name(), + "description": p.get_description(), + "version": p.get_version(), + "url": p.get_url(), + "has_settings": hasattr(p, "get_site_settings_form"), + } + for p in installed.values() + ] + return Response(results) + + +@extend_schema(request=OpenApiTypes.OBJECT, responses=OpenApiTypes.OBJECT) +@api_view(["GET", "PUT"]) +@permission_classes([permissions.IsAdminUser]) +def plugin_settings(request, short_name): + """Reads or updates a plugin's site settings. + + Writes are validated through the plugin's own settings form; field + errors come back in standard DRF shape. + """ + installed = getattr(request, "plugins", {}) or {} + plugin = installed.get(short_name) + if not plugin: + raise NotFound(f"Plugin {short_name!r} is not installed.") + if not hasattr(plugin, "get_site_settings_form"): + raise NotFound(f"Plugin {short_name!r} has no settings.") + + if request.method == "PUT": + form_cls = type(plugin.get_site_settings_form()) + form = form_cls(request.data) + if not form.is_valid(): + raise ValidationError(dict(form.errors)) + if hasattr(plugin, "save_site_settings_form"): + plugin.save_site_settings_form(form) + else: + plugin.save_form(form, "settings") + + return Response(plugin.get_site_settings_form().initial) + + @extend_schema(responses=OpenApiTypes.OBJECT) @api_view(["GET"]) @permission_classes([permissions.IsAdminUser]) From 87473a4e627f8c0c1bb4b2f0bfda0829212fc7f0 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:43:13 +0000 Subject: [PATCH 12/48] api: name generic enums; freeze the openapi schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds ENUM_NAME_OVERRIDES so keg status and event kind get descriptive component names in the schema, and commits the generated spec at web-ui/api/schema.yaml — the contract the frontend's generated client builds against (regenerated via kegbot spectacular). --- pykeg/settings.py | 5 + web-ui/api/schema.yaml | 11467 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 11472 insertions(+) create mode 100644 web-ui/api/schema.yaml diff --git a/pykeg/settings.py b/pykeg/settings.py index 08571b2a4..99af3a915 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -360,6 +360,11 @@ # Serve the docs UI assets locally (no CDN). "SWAGGER_UI_DIST": "SIDECAR", "SWAGGER_UI_FAVICON_HREF": "SIDECAR", + # Names for enums whose auto-derived names would be too generic. + "ENUM_NAME_OVERRIDES": { + "KegStatusEnum": "pykeg.core.models.Keg.STATUS_CHOICES", + "SystemEventKindEnum": "pykeg.core.models.SystemEvent.KINDS", + }, } APPEND_SLASH = True diff --git a/web-ui/api/schema.yaml b/web-ui/api/schema.yaml new file mode 100644 index 000000000..fb73a93d5 --- /dev/null +++ b/web-ui/api/schema.yaml @@ -0,0 +1,11467 @@ +openapi: 3.0.3 +info: + title: Kegbot Server API + version: '' + description: The Kegbot Server REST API. +paths: + /api/account/activate: + post: + operationId: account_activate_create + description: 'Activates an invited/created account: sets its password and logs + in.' + tags: + - account + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ActivateAccountRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ActivateAccountRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/ActivateAccountRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CurrentUser' + description: '' + /api/account/confirm-email: + post: + operationId: account_confirm_email_create + description: Applies an email change, given the token from the confirmation + mail. + tags: + - account + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConfirmEmailRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ConfirmEmailRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/ConfirmEmailRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CurrentUser' + description: '' + /api/account/email: + post: + operationId: account_email_create + description: Requests an email change; a confirmation link is mailed to the + new address. + tags: + - account + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailChangeRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/EmailChangeRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/EmailChangeRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/account/mugshot: + post: + operationId: account_mugshot_create + description: Sets the current user's mugshot. + tags: + - account + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CurrentUser' + description: '' + /api/account/password: + post: + operationId: account_password_create + description: Changes the current user's password, keeping the session valid. + tags: + - account + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordChangeRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PasswordChangeRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PasswordChangeRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/account/regenerate-api-key: + post: + operationId: account_regenerate_api_key_create + description: Discards and regenerates the current user's API key. + tags: + - account + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + description: '' + /api/admin/backups: + get: + operationId: admin_backups_retrieve + description: Lists existing backups (GET) or starts building a new one (POST). + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + post: + operationId: admin_backups_create + description: Lists existing backups (GET) or starts building a new one (POST). + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/admin/backups/{filename}: + delete: + operationId: admin_backups_destroy + description: Deletes a backup archive by filename. + parameters: + - in: path + name: filename + schema: + type: string + required: true + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/admin/bugreport: + get: + operationId: admin_bugreport_retrieve + description: Generates and returns a bugreport (may contain secrets; admin eyes + only). + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/admin/dashboard: + get: + operationId: admin_dashboard_retrieve + description: System health summary for the admin dashboard. + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AdminDashboard' + description: '' + /api/admin/email-test: + post: + operationId: admin_email_test_create + description: Sends a test notification email to the given address. + tags: + - admin + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTestRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/EmailTestRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/EmailTestRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/admin/logs: + get: + operationId: admin_logs_retrieve + description: Returns recent log records (newest first) from the redis log handler. + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/admin/plugins: + get: + operationId: admin_plugins_retrieve + description: Lists installed plugins. + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/admin/plugins/{short_name}/settings: + get: + operationId: admin_plugins_settings_retrieve + description: |- + Reads or updates a plugin's site settings. + + Writes are validated through the plugin's own settings form; field + errors come back in standard DRF shape. + parameters: + - in: path + name: short_name + schema: + type: string + required: true + tags: + - admin + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + put: + operationId: admin_plugins_settings_update + description: |- + Reads or updates a plugin's site settings. + + Writes are validated through the plugin's own settings form; field + errors come back in standard DRF shape. + parameters: + - in: path + name: short_name + schema: + type: string + required: true + tags: + - admin + requestBody: + content: + application/json: + schema: + type: object + additionalProperties: {} + application/x-www-form-urlencoded: + schema: + type: object + additionalProperties: {} + multipart/form-data: + schema: + type: object + additionalProperties: {} + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/api-keys: + get: + operationId: api_keys_list + description: Lists a user's own api keys. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - api-keys + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedApiKeyList' + description: '' + post: + operationId: api_keys_create + description: Lists a user's own api keys. + tags: + - api-keys + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ApiKey' + multipart/form-data: + schema: + $ref: '#/components/schemas/ApiKey' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + description: '' + /api/api-keys/{id}: + get: + operationId: api_keys_retrieve + description: Lists a user's own api keys. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this api key. + required: true + tags: + - api-keys + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + description: '' + put: + operationId: api_keys_update + description: Lists a user's own api keys. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this api key. + required: true + tags: + - api-keys + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ApiKey' + multipart/form-data: + schema: + $ref: '#/components/schemas/ApiKey' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + description: '' + patch: + operationId: api_keys_partial_update + description: Lists a user's own api keys. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this api key. + required: true + tags: + - api-keys + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedApiKey' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedApiKey' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedApiKey' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ApiKey' + description: '' + delete: + operationId: api_keys_destroy + description: Lists a user's own api keys. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this api key. + required: true + tags: + - api-keys + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/auth-tokens: + get: + operationId: auth_tokens_list + description: Lists all AuthenticationTokens in the system. + parameters: + - in: query + name: auth_device + schema: + type: string + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - in: query + name: enabled + schema: + type: boolean + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: search + schema: + type: string + - in: query + name: user + schema: + type: integer + tags: + - auth-tokens + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedAuthenticationTokenList' + description: '' + post: + operationId: auth_tokens_create + description: Lists all AuthenticationTokens in the system. + tags: + - auth-tokens + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticationToken' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AuthenticationToken' + multipart/form-data: + schema: + $ref: '#/components/schemas/AuthenticationToken' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticationToken' + description: '' + /api/auth-tokens/{id}: + get: + operationId: auth_tokens_retrieve + description: Lists all AuthenticationTokens in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this authentication token. + required: true + tags: + - auth-tokens + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticationToken' + description: '' + put: + operationId: auth_tokens_update + description: Lists all AuthenticationTokens in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this authentication token. + required: true + tags: + - auth-tokens + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticationToken' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AuthenticationToken' + multipart/form-data: + schema: + $ref: '#/components/schemas/AuthenticationToken' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticationToken' + description: '' + patch: + operationId: auth_tokens_partial_update + description: Lists all AuthenticationTokens in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this authentication token. + required: true + tags: + - auth-tokens + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedAuthenticationToken' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedAuthenticationToken' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedAuthenticationToken' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticationToken' + description: '' + delete: + operationId: auth_tokens_destroy + description: Lists all AuthenticationTokens in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this authentication token. + required: true + tags: + - auth-tokens + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/auth/login: + post: + operationId: auth_login_create + tags: + - auth + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Login' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Login' + multipart/form-data: + schema: + $ref: '#/components/schemas/Login' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CurrentUser' + description: '' + /api/auth/logout: + post: + operationId: auth_logout_create + tags: + - auth + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/auth/password-reset: + post: + operationId: auth_password_reset_create + description: Mails a password-reset link. Always succeeds (no account enumeration). + tags: + - auth + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PasswordResetRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PasswordResetRequest' + required: true + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/auth/password-reset-confirm: + post: + operationId: auth_password_reset_confirm_create + description: Sets a new password, given the uid/token pair from a reset mail. + tags: + - auth + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetConfirmRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PasswordResetConfirmRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PasswordResetConfirmRequest' + required: true + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/auth/register: + post: + operationId: auth_register_create + description: Registers a new account, honoring the site's registration mode. + tags: + - auth + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RegisterRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RegisterRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/RegisterRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CurrentUser' + description: '' + /api/beverage-producers: + get: + operationId: beverage_producers_list + description: Lists all beverage producers in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - beverage-producers + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedBeverageProducerList' + description: '' + post: + operationId: beverage_producers_create + description: Lists all beverage producers in the system. + tags: + - beverage-producers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BeverageProducer' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/BeverageProducer' + multipart/form-data: + schema: + $ref: '#/components/schemas/BeverageProducer' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/BeverageProducer' + description: '' + /api/beverage-producers/{id}: + get: + operationId: beverage_producers_retrieve + description: Lists all beverage producers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage producer. + required: true + tags: + - beverage-producers + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BeverageProducer' + description: '' + put: + operationId: beverage_producers_update + description: Lists all beverage producers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage producer. + required: true + tags: + - beverage-producers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BeverageProducer' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/BeverageProducer' + multipart/form-data: + schema: + $ref: '#/components/schemas/BeverageProducer' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BeverageProducer' + description: '' + patch: + operationId: beverage_producers_partial_update + description: Lists all beverage producers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage producer. + required: true + tags: + - beverage-producers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedBeverageProducer' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedBeverageProducer' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedBeverageProducer' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BeverageProducer' + description: '' + delete: + operationId: beverage_producers_destroy + description: Lists all beverage producers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage producer. + required: true + tags: + - beverage-producers + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/beverage-producers/{id}/picture: + post: + operationId: beverage_producers_picture_create + description: Uploads and sets this object's picture. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage producer. + required: true + tags: + - beverage-producers + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BeverageProducer' + description: '' + /api/beverages: + get: + operationId: beverages_list + description: Lists all beverages in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - beverages + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedBeverageList' + description: '' + post: + operationId: beverages_create + description: Lists all beverages in the system. + tags: + - beverages + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Beverage' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Beverage' + multipart/form-data: + schema: + $ref: '#/components/schemas/Beverage' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Beverage' + description: '' + /api/beverages/{id}: + get: + operationId: beverages_retrieve + description: Lists all beverages in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage. + required: true + tags: + - beverages + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Beverage' + description: '' + put: + operationId: beverages_update + description: Lists all beverages in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage. + required: true + tags: + - beverages + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Beverage' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Beverage' + multipart/form-data: + schema: + $ref: '#/components/schemas/Beverage' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Beverage' + description: '' + patch: + operationId: beverages_partial_update + description: Lists all beverages in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage. + required: true + tags: + - beverages + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedBeverage' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedBeverage' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedBeverage' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Beverage' + description: '' + delete: + operationId: beverages_destroy + description: Lists all beverages in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage. + required: true + tags: + - beverages + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/beverages/{id}/picture: + post: + operationId: beverages_picture_create + description: Uploads and sets this object's picture. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this beverage. + required: true + tags: + - beverages + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Beverage' + description: '' + /api/controllers: + get: + operationId: controllers_list + description: Lists all Controllers in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - controllers + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedControllerList' + description: '' + post: + operationId: controllers_create + description: Lists all Controllers in the system. + tags: + - controllers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Controller' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Controller' + multipart/form-data: + schema: + $ref: '#/components/schemas/Controller' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Controller' + description: '' + /api/controllers/{id}: + get: + operationId: controllers_retrieve + description: Lists all Controllers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this controller. + required: true + tags: + - controllers + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Controller' + description: '' + put: + operationId: controllers_update + description: Lists all Controllers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this controller. + required: true + tags: + - controllers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Controller' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Controller' + multipart/form-data: + schema: + $ref: '#/components/schemas/Controller' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Controller' + description: '' + patch: + operationId: controllers_partial_update + description: Lists all Controllers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this controller. + required: true + tags: + - controllers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedController' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedController' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedController' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Controller' + description: '' + delete: + operationId: controllers_destroy + description: Lists all Controllers in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this controller. + required: true + tags: + - controllers + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/devices: + get: + operationId: devices_list + description: |- + Lists all devices in the system. + + Admin-only view. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - devices + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedDeviceList' + description: '' + post: + operationId: devices_create + description: |- + Lists all devices in the system. + + Admin-only view. + tags: + - devices + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Device' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Device' + multipart/form-data: + schema: + $ref: '#/components/schemas/Device' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Device' + description: '' + /api/devices/{id}: + get: + operationId: devices_retrieve + description: |- + Lists all devices in the system. + + Admin-only view. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this device. + required: true + tags: + - devices + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Device' + description: '' + put: + operationId: devices_update + description: |- + Lists all devices in the system. + + Admin-only view. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this device. + required: true + tags: + - devices + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Device' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Device' + multipart/form-data: + schema: + $ref: '#/components/schemas/Device' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Device' + description: '' + patch: + operationId: devices_partial_update + description: |- + Lists all devices in the system. + + Admin-only view. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this device. + required: true + tags: + - devices + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedDevice' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedDevice' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedDevice' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Device' + description: '' + delete: + operationId: devices_destroy + description: |- + Lists all devices in the system. + + Admin-only view. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this device. + required: true + tags: + - devices + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/drinks: + get: + operationId: drinks_list + description: |- + Lists all Drinks in the system. + + Drinks are created by pours (or the tap record-drink endpoint), never + directly. The drink's owner may edit its shout and manage its picture; + volume adjustment, reassignment, and deletion are admin operations. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - in: query + name: keg + schema: + type: integer + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: session + schema: + type: integer + - in: query + name: user + schema: + type: integer + - in: query + name: username + schema: + type: string + tags: + - drinks + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedDrinkList' + description: '' + /api/drinks/{id}: + get: + operationId: drinks_retrieve + description: |- + Lists all Drinks in the system. + + Drinks are created by pours (or the tap record-drink endpoint), never + directly. The drink's owner may edit its shout and manage its picture; + volume adjustment, reassignment, and deletion are admin operations. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drink. + required: true + tags: + - drinks + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Drink' + description: '' + patch: + operationId: drinks_partial_update + description: |- + Lists all Drinks in the system. + + Drinks are created by pours (or the tap record-drink endpoint), never + directly. The drink's owner may edit its shout and manage its picture; + volume adjustment, reassignment, and deletion are admin operations. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drink. + required: true + tags: + - drinks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedDrinkUpdateRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedDrinkUpdateRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedDrinkUpdateRequest' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Drink' + description: '' + delete: + operationId: drinks_destroy + description: |- + Lists all Drinks in the system. + + Drinks are created by pours (or the tap record-drink endpoint), never + directly. The drink's owner may edit its shout and manage its picture; + volume adjustment, reassignment, and deletion are admin operations. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drink. + required: true + tags: + - drinks + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/drinks/{id}/picture: + post: + operationId: drinks_picture_create + description: Attaches (POST) or erases (DELETE) this drink's picture. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drink. + required: true + tags: + - drinks + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Drink' + description: '' + delete: + operationId: drinks_picture_destroy + description: Attaches (POST) or erases (DELETE) this drink's picture. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drink. + required: true + tags: + - drinks + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/drinks/{id}/reassign: + post: + operationId: drinks_reassign_create + description: Reassigns this drink to another user. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drink. + required: true + tags: + - drinks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DrinkReassignRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DrinkReassignRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/DrinkReassignRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Drink' + description: '' + /api/events: + get: + operationId: events_list + description: Lists all SystemEvents in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - in: query + name: keg + schema: + type: integer + - in: query + name: kind + schema: + type: string + enum: + - drink_poured + - keg_ended + - keg_tapped + - keg_volume_low + - session_joined + - session_started + description: |- + Type of event. + + * `drink_poured` - Drink poured + * `session_started` - Session started + * `session_joined` - User joined session + * `keg_tapped` - Keg tapped + * `keg_volume_low` - Keg volume low + * `keg_ended` - Keg ended + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: session + schema: + type: integer + - in: query + name: since + schema: + type: integer + - in: query + name: user + schema: + type: integer + - in: query + name: username + schema: + type: string + tags: + - events + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedSystemEventList' + description: '' + /api/events/{id}: + get: + operationId: events_retrieve + description: Lists all SystemEvents in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this system event. + required: true + tags: + - events + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SystemEvent' + description: '' + /api/flow-meters: + get: + operationId: flow_meters_list + description: Lists all FlowMeters in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - flow-meters + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedFlowMeterList' + description: '' + post: + operationId: flow_meters_create + description: Lists all FlowMeters in the system. + tags: + - flow-meters + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FlowMeter' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/FlowMeter' + multipart/form-data: + schema: + $ref: '#/components/schemas/FlowMeter' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowMeter' + description: '' + /api/flow-meters/{id}: + get: + operationId: flow_meters_retrieve + description: Lists all FlowMeters in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow meter. + required: true + tags: + - flow-meters + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowMeter' + description: '' + put: + operationId: flow_meters_update + description: Lists all FlowMeters in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow meter. + required: true + tags: + - flow-meters + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FlowMeter' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/FlowMeter' + multipart/form-data: + schema: + $ref: '#/components/schemas/FlowMeter' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowMeter' + description: '' + patch: + operationId: flow_meters_partial_update + description: Lists all FlowMeters in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow meter. + required: true + tags: + - flow-meters + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedFlowMeter' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedFlowMeter' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedFlowMeter' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowMeter' + description: '' + delete: + operationId: flow_meters_destroy + description: Lists all FlowMeters in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow meter. + required: true + tags: + - flow-meters + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/flow-toggles: + get: + operationId: flow_toggles_list + description: Lists all FlowToggles in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - flow-toggles + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedFlowToggleList' + description: '' + post: + operationId: flow_toggles_create + description: Lists all FlowToggles in the system. + tags: + - flow-toggles + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FlowToggle' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/FlowToggle' + multipart/form-data: + schema: + $ref: '#/components/schemas/FlowToggle' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowToggle' + description: '' + /api/flow-toggles/{id}: + get: + operationId: flow_toggles_retrieve + description: Lists all FlowToggles in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow toggle. + required: true + tags: + - flow-toggles + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowToggle' + description: '' + put: + operationId: flow_toggles_update + description: Lists all FlowToggles in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow toggle. + required: true + tags: + - flow-toggles + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FlowToggle' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/FlowToggle' + multipart/form-data: + schema: + $ref: '#/components/schemas/FlowToggle' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowToggle' + description: '' + patch: + operationId: flow_toggles_partial_update + description: Lists all FlowToggles in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow toggle. + required: true + tags: + - flow-toggles + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedFlowToggle' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedFlowToggle' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedFlowToggle' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/FlowToggle' + description: '' + delete: + operationId: flow_toggles_destroy + description: Lists all FlowToggles in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this flow toggle. + required: true + tags: + - flow-toggles + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/invitations: + get: + operationId: invitations_list + description: |- + Lists all of the *current user's* invitations. + + Creating an invitation (when the site's registration mode allows the + caller to invite) also sends the invitation e-mail. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - invitations + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedInvitationList' + description: '' + post: + operationId: invitations_create + description: |- + Lists all of the *current user's* invitations. + + Creating an invitation (when the site's registration mode allows the + caller to invite) also sends the invitation e-mail. + tags: + - invitations + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Invitation' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Invitation' + multipart/form-data: + schema: + $ref: '#/components/schemas/Invitation' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Invitation' + description: '' + /api/invitations/{id}: + get: + operationId: invitations_retrieve + description: |- + Lists all of the *current user's* invitations. + + Creating an invitation (when the site's registration mode allows the + caller to invite) also sends the invitation e-mail. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this invitation. + required: true + tags: + - invitations + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Invitation' + description: '' + delete: + operationId: invitations_destroy + description: |- + Lists all of the *current user's* invitations. + + Creating an invitation (when the site's registration mode allows the + caller to invite) also sends the invitation e-mail. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this invitation. + required: true + tags: + - invitations + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/kegs: + get: + operationId: kegs_list + description: |- + Lists all Kegs in the system. + + Reads follow site privacy; keg management requires an admin. Deleting + a keg permanently destroys it and ALL of its drinks. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: status + schema: + type: string + enum: + - available + - finished + - on_tap + description: |- + Current keg state. + + * `available` - Available + * `on_tap` - On tap + * `finished` - Finished + tags: + - kegs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedKegList' + description: '' + post: + operationId: kegs_create + description: Adds a new keg to the keg room (unattached). + tags: + - kegs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/KegCreateRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/KegCreateRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/KegCreateRequest' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + description: '' + /api/kegs/{id}: + get: + operationId: kegs_retrieve + description: |- + Lists all Kegs in the system. + + Reads follow site privacy; keg management requires an admin. Deleting + a keg permanently destroys it and ALL of its drinks. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + description: '' + put: + operationId: kegs_update + description: |- + Lists all Kegs in the system. + + Reads follow site privacy; keg management requires an admin. Deleting + a keg permanently destroys it and ALL of its drinks. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Keg' + multipart/form-data: + schema: + $ref: '#/components/schemas/Keg' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + description: '' + patch: + operationId: kegs_partial_update + description: |- + Lists all Kegs in the system. + + Reads follow site privacy; keg management requires an admin. Deleting + a keg permanently destroys it and ALL of its drinks. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedKeg' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedKeg' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedKeg' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + description: '' + delete: + operationId: kegs_destroy + description: |- + Lists all Kegs in the system. + + Reads follow site privacy; keg management requires an admin. Deleting + a keg permanently destroys it and ALL of its drinks. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/kegs/{id}/end: + post: + operationId: kegs_end_create + description: Marks an untapped keg as finished. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + description: '' + /api/kegs/{id}/reactivate: + post: + operationId: kegs_reactivate_create + description: Returns a finished keg to the available pool. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + description: '' + /api/kegs/{id}/spill: + post: + operationId: kegs_spill_create + description: Records spilled volume against this keg. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/KegSpillRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/KegSpillRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/KegSpillRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Keg' + description: '' + /api/kegs/{id}/stats: + get: + operationId: kegs_stats_retrieve + description: Returns the latest stats blob for this keg. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg. + required: true + tags: + - kegs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/notification-settings: + get: + operationId: notification_settings_list + description: Lists the *current user's* notification settings. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - notification-settings + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedNotificationSettingsList' + description: '' + post: + operationId: notification_settings_create + description: Lists the *current user's* notification settings. + tags: + - notification-settings + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettings' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/NotificationSettings' + multipart/form-data: + schema: + $ref: '#/components/schemas/NotificationSettings' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettings' + description: '' + /api/notification-settings/{id}: + get: + operationId: notification_settings_retrieve + description: Lists the *current user's* notification settings. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this notification settings. + required: true + tags: + - notification-settings + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettings' + description: '' + put: + operationId: notification_settings_update + description: Lists the *current user's* notification settings. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this notification settings. + required: true + tags: + - notification-settings + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettings' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/NotificationSettings' + multipart/form-data: + schema: + $ref: '#/components/schemas/NotificationSettings' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettings' + description: '' + patch: + operationId: notification_settings_partial_update + description: Lists the *current user's* notification settings. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this notification settings. + required: true + tags: + - notification-settings + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedNotificationSettings' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedNotificationSettings' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedNotificationSettings' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettings' + description: '' + delete: + operationId: notification_settings_destroy + description: Lists the *current user's* notification settings. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this notification settings. + required: true + tags: + - notification-settings + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/plugin-data: + get: + operationId: plugin_data_list + description: |- + Lists all PluginData in the system. + + Admin-only: plugin data may contain plugin credentials. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - plugin-data + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPluginDataList' + description: '' + post: + operationId: plugin_data_create + description: |- + Lists all PluginData in the system. + + Admin-only: plugin data may contain plugin credentials. + tags: + - plugin-data + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PluginData' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PluginData' + multipart/form-data: + schema: + $ref: '#/components/schemas/PluginData' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/PluginData' + description: '' + /api/plugin-data/{id}: + get: + operationId: plugin_data_retrieve + description: |- + Lists all PluginData in the system. + + Admin-only: plugin data may contain plugin credentials. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this plugin data. + required: true + tags: + - plugin-data + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PluginData' + description: '' + put: + operationId: plugin_data_update + description: |- + Lists all PluginData in the system. + + Admin-only: plugin data may contain plugin credentials. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this plugin data. + required: true + tags: + - plugin-data + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PluginData' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PluginData' + multipart/form-data: + schema: + $ref: '#/components/schemas/PluginData' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PluginData' + description: '' + patch: + operationId: plugin_data_partial_update + description: |- + Lists all PluginData in the system. + + Admin-only: plugin data may contain plugin credentials. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this plugin data. + required: true + tags: + - plugin-data + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedPluginData' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedPluginData' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedPluginData' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PluginData' + description: '' + delete: + operationId: plugin_data_destroy + description: |- + Lists all PluginData in the system. + + Admin-only: plugin data may contain plugin credentials. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this plugin data. + required: true + tags: + - plugin-data + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/sessions: + get: + operationId: sessions_list + description: Lists all DrinkingSessions in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - in: query + name: day + schema: + type: number + - in: query + name: month + schema: + type: number + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: year + schema: + type: number + tags: + - sessions + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedDrinkingSessionList' + description: '' + /api/sessions/{id}: + get: + operationId: sessions_retrieve + description: Lists all DrinkingSessions in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drinking session. + required: true + tags: + - sessions + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DrinkingSession' + description: '' + /api/sessions/{id}/stats: + get: + operationId: sessions_stats_retrieve + description: Returns the latest stats blob for this session. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this drinking session. + required: true + tags: + - sessions + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/sessions/current: + get: + operationId: sessions_current_retrieve + description: Returns the currently-active session, or 404 if there is none. + tags: + - sessions + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DrinkingSession' + description: '' + /api/setup/admin-user: + post: + operationId: setup_admin_user_create + description: Creates the initial admin account and logs it in. + tags: + - setup + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SetupAdminUserRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetupAdminUserRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/SetupAdminUserRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CurrentUser' + description: '' + /api/setup/finish: + post: + operationId: setup_finish_create + description: Marks setup complete. + tags: + - setup + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/setup/migrate: + post: + operationId: setup_migrate_create + description: Creates or migrates the database (synchronous). + tags: + - setup + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/setup/settings: + post: + operationId: setup_settings_create + description: Applies initial site settings (after the database is migrated). + tags: + - setup + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SetupSiteSettingsRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetupSiteSettingsRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/SetupSiteSettingsRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SetupSiteSettingsRequest' + description: '' + /api/setup/status: + get: + operationId: setup_status_retrieve + description: Reports whether setup or upgrade is required. + tags: + - setup + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SetupStatus' + description: '' + /api/setup/upgrade: + post: + operationId: setup_upgrade_create + description: Migrates the database and stamps the current server version. + tags: + - setup + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/site: + get: + operationId: site_retrieve + description: Reads (GET) or updates (PATCH) the site settings singleton. + tags: + - site + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SiteSettings' + description: '' + patch: + operationId: site_partial_update + description: Reads (GET) or updates (PATCH) the site settings singleton. + tags: + - site + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedSiteSettings' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedSiteSettings' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedSiteSettings' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SiteSettings' + description: '' + /api/site/background-image: + post: + operationId: site_background_image_create + description: Uploads and sets the site background image. + tags: + - site + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PictureUploadRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SiteSettings' + description: '' + /api/stats: + get: + operationId: stats_list + description: Lists all stats snapshots in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - stats + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedStatsList' + description: '' + /api/stats/{id}: + get: + operationId: stats_retrieve + description: Lists all stats snapshots in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this stats. + required: true + tags: + - stats + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Stats' + description: '' + /api/stats/system: + get: + operationId: stats_system_retrieve + description: Returns the latest system-wide (all-time) stats blob. + tags: + - stats + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/status: + get: + operationId: status_retrieve + description: |- + The 'current system status' view. + + Among other things, the `kegbot-frontend` uses this view to establish + whether the system privacy permits reading from other APIs (status=200), + or the user needs to log in (status=4xx), from application of the + `DashboardViewer` permission + tags: + - status + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SystemStatus' + description: '' + /api/taps: + get: + operationId: taps_list + description: |- + Lists all KegTaps in the system. + + Reads follow site privacy; tap management (including the keg and + hardware-connection operations below) requires an admin. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - taps + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedKegTapList' + description: '' + post: + operationId: taps_create + description: |- + Lists all KegTaps in the system. + + Reads follow site privacy; tap management (including the keg and + hardware-connection operations below) requires an admin. + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/KegTap' + multipart/form-data: + schema: + $ref: '#/components/schemas/KegTap' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + /api/taps/{id}: + get: + operationId: taps_retrieve + description: |- + Lists all KegTaps in the system. + + Reads follow site privacy; tap management (including the keg and + hardware-connection operations below) requires an admin. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + put: + operationId: taps_update + description: |- + Lists all KegTaps in the system. + + Reads follow site privacy; tap management (including the keg and + hardware-connection operations below) requires an admin. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/KegTap' + multipart/form-data: + schema: + $ref: '#/components/schemas/KegTap' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + patch: + operationId: taps_partial_update + description: |- + Lists all KegTaps in the system. + + Reads follow site privacy; tap management (including the keg and + hardware-connection operations below) requires an admin. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedKegTap' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedKegTap' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedKegTap' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + delete: + operationId: taps_destroy + description: |- + Lists all KegTaps in the system. + + Reads follow site privacy; tap management (including the keg and + hardware-connection operations below) requires an admin. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/taps/{id}/attach-keg: + post: + operationId: taps_attach_keg_create + description: Attaches an existing (available) keg to this tap. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TapAttachKegRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TapAttachKegRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/TapAttachKegRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + /api/taps/{id}/connect-meter: + post: + operationId: taps_connect_meter_create + description: Assigns a flow meter to this tap (null to disconnect). + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TapConnectMeterRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TapConnectMeterRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/TapConnectMeterRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + /api/taps/{id}/connect-thermo: + post: + operationId: taps_connect_thermo_create + description: Assigns a temperature sensor to this tap (null to disconnect). + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TapConnectThermoRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TapConnectThermoRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/TapConnectThermoRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + /api/taps/{id}/connect-toggle: + post: + operationId: taps_connect_toggle_create + description: Assigns a flow toggle to this tap (null to disconnect). + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TapConnectToggleRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TapConnectToggleRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/TapConnectToggleRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + /api/taps/{id}/end-keg: + post: + operationId: taps_end_keg_create + description: Takes the tap's current keg offline. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + /api/taps/{id}/record-drink: + post: + operationId: taps_record_drink_create + description: |- + Manually records a drink (or spill) against this tap's keg. + + Returns the new drink (201), or no content (204) when recorded + as a spill. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TapRecordDrinkRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TapRecordDrinkRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/TapRecordDrinkRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Drink' + description: '' + /api/taps/{id}/start-keg: + post: + operationId: taps_start_keg_create + description: Creates a new keg and attaches it to this tap. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this keg tap. + required: true + tags: + - taps + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NewKegRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/NewKegRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/NewKegRequest' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KegTap' + description: '' + /api/thermo-logs: + get: + operationId: thermo_logs_list + description: Lists all Thermologs in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: sensor + schema: + type: integer + - in: query + name: since + schema: + type: string + format: date-time + - in: query + name: until + schema: + type: string + format: date-time + tags: + - thermo-logs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedThermologList' + description: '' + /api/thermo-logs/{id}: + get: + operationId: thermo_logs_retrieve + description: Lists all Thermologs in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this thermolog. + required: true + tags: + - thermo-logs + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Thermolog' + description: '' + /api/thermo-sensors: + get: + operationId: thermo_sensors_list + description: Lists all ThermoSensors in the system. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + tags: + - thermo-sensors + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedThermoSensorList' + description: '' + post: + operationId: thermo_sensors_create + description: Lists all ThermoSensors in the system. + tags: + - thermo-sensors + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ThermoSensor' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ThermoSensor' + multipart/form-data: + schema: + $ref: '#/components/schemas/ThermoSensor' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/ThermoSensor' + description: '' + /api/thermo-sensors/{id}: + get: + operationId: thermo_sensors_retrieve + description: Lists all ThermoSensors in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this thermo sensor. + required: true + tags: + - thermo-sensors + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ThermoSensor' + description: '' + put: + operationId: thermo_sensors_update + description: Lists all ThermoSensors in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this thermo sensor. + required: true + tags: + - thermo-sensors + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ThermoSensor' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ThermoSensor' + multipart/form-data: + schema: + $ref: '#/components/schemas/ThermoSensor' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ThermoSensor' + description: '' + patch: + operationId: thermo_sensors_partial_update + description: Lists all ThermoSensors in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this thermo sensor. + required: true + tags: + - thermo-sensors + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedThermoSensor' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedThermoSensor' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedThermoSensor' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ThermoSensor' + description: '' + delete: + operationId: thermo_sensors_destroy + description: Lists all ThermoSensors in the system. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this thermo sensor. + required: true + tags: + - thermo-sensors + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '204': + description: No response body + /api/users: + get: + operationId: users_list + description: |- + Lists all users in the system. + + Individual users (and their stats) are viewable by anyone the site + privacy setting admits, mirroring the public drinker pages; the full + user listing requires authentication. User management (create, edit, + enable/disable, staff status, set-password) is admin-only; there is + no delete — accounts are disabled instead. + parameters: + - name: cursor + required: false + in: query + description: The pagination cursor value. + schema: + type: string + - in: query + name: is_active + schema: + type: boolean + - in: query + name: is_staff + schema: + type: boolean + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: search + schema: + type: string + tags: + - users + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedUserList' + description: '' + post: + operationId: users_create + description: |- + Lists all users in the system. + + Individual users (and their stats) are viewable by anyone the site + privacy setting admits, mirroring the public drinker pages; the full + user listing requires authentication. User management (create, edit, + enable/disable, staff status, set-password) is admin-only; there is + no delete — accounts are disabled instead. + tags: + - users + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AdminUserCreateRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AdminUserCreateRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/AdminUserCreateRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: '' + /api/users/{username}: + get: + operationId: users_retrieve + description: |- + Lists all users in the system. + + Individual users (and their stats) are viewable by anyone the site + privacy setting admits, mirroring the public drinker pages; the full + user listing requires authentication. User management (create, edit, + enable/disable, staff status, set-password) is admin-only; there is + no delete — accounts are disabled instead. + parameters: + - in: path + name: username + schema: + type: string + pattern: ^[^/]+$ + required: true + tags: + - users + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: '' + patch: + operationId: users_partial_update + description: |- + Lists all users in the system. + + Individual users (and their stats) are viewable by anyone the site + privacy setting admits, mirroring the public drinker pages; the full + user listing requires authentication. User management (create, edit, + enable/disable, staff status, set-password) is admin-only; there is + no delete — accounts are disabled instead. + parameters: + - in: path + name: username + schema: + type: string + pattern: ^[^/]+$ + required: true + tags: + - users + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedAdminUserUpdateRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedAdminUserUpdateRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedAdminUserUpdateRequest' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: '' + /api/users/{username}/set-password: + post: + operationId: users_set_password_create + description: Sets a new password for this user. + parameters: + - in: path + name: username + schema: + type: string + pattern: ^[^/]+$ + required: true + tags: + - users + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SetPasswordRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetPasswordRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/SetPasswordRequest' + required: true + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: boolean + description: '' + /api/users/{username}/stats: + get: + operationId: users_stats_retrieve + description: Returns the latest stats blob for this user. + parameters: + - in: path + name: username + schema: + type: string + pattern: ^[^/]+$ + required: true + tags: + - users + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + type: object + additionalProperties: {} + description: '' + /api/users/me: + get: + operationId: users_me_retrieve + description: |- + The frontend boot endpoint. + + GET always responds 200, regardless of authentication and site + privacy: `user` is null for anonymous callers, and the rest of the + payload is limited to privacy-safe configuration the frontend always + needs (to render login screens, privacy interstitials, forms, and + navigation). It also sets the CSRF cookie, so a fresh browser session + can make authenticated POSTs after calling this. + + PATCH updates the current user's profile and returns the same payload. + tags: + - users + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Me' + description: '' + patch: + operationId: users_me_partial_update + description: |- + The frontend boot endpoint. + + GET always responds 200, regardless of authentication and site + privacy: `user` is null for anonymous callers, and the rest of the + payload is limited to privacy-safe configuration the frontend always + needs (to render login screens, privacy interstitials, forms, and + navigation). It also sets the CSRF cookie, so a fresh browser session + can make authenticated POSTs after calling this. + + PATCH updates the current user's profile and returns the same payload. + tags: + - users + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedProfileUpdateRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedProfileUpdateRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedProfileUpdateRequest' + security: + - apiKeyBasicAuth: [] + - cookieAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Me' + description: '' +components: + schemas: + ActivateAccountRequest: + type: object + properties: + activation_key: + type: string + password: + type: string + minLength: 1 + required: + - activation_key + - password + AdminDashboard: + type: object + properties: + email_configured: + type: boolean + redis_error: + type: string + nullable: true + num_users: + type: integer + num_new_users: + type: integer + required: + - email_configured + - num_new_users + - num_users + - redis_error + AdminUserCreateRequest: + type: object + properties: + username: + type: string + maxLength: 30 + pattern: ^[\w.@+-]+$ + email: + oneOf: + - type: string + format: email + default: '' + - type: string + maxLength: 0 + password: + type: string + minLength: 1 + is_staff: + type: boolean + default: false + required: + - password + - username + ApiKey: + type: object + properties: + id: + type: integer + readOnly: true + user_id: + type: integer + nullable: true + description: User receiving API access. + readOnly: true + device_id: + type: integer + nullable: true + description: Device this key is associated with. + readOnly: true + is_active: + type: boolean + key: + type: string + readOnly: true + description: + type: string + nullable: true + description: Information about this key. + created_time: + type: string + format: date-time + description: Time the key was created. + required: + - device_id + - id + - is_active + - key + - user_id + AuthenticationToken: + type: object + properties: + id: + type: integer + readOnly: true + auth_device: + type: string + description: Namespace for this token. + maxLength: 64 + token_value: + type: string + description: Actual value of the token, unique within an auth_device. + maxLength: 128 + nice_name: + type: string + nullable: true + description: A human-readable alias for the token, for example "Guest Key". + maxLength: 256 + pin: + type: string + nullable: true + description: A secret value necessary to authenticate with this token. + maxLength: 256 + user: + type: integer + writeOnly: true + nullable: true + user_id: + type: integer + nullable: true + description: User in possession of and authenticated by this token. + readOnly: true + enabled: + type: boolean + description: Whether this token is considered active. + created_time: + type: string + format: date-time + readOnly: true + description: Date token was first added to the system. + expire_time: + type: string + format: date-time + nullable: true + description: Date after which token is treated as disabled. + required: + - auth_device + - created_time + - id + - token_value + - user_id + Beverage: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: Name of the beverage, such as "Potrero Pale". + maxLength: 255 + producer: + allOf: + - $ref: '#/components/schemas/BeverageProducer' + readOnly: true + producer_id: + type: integer + writeOnly: true + beverage_type: + $ref: '#/components/schemas/BeverageTypeEnum' + style: + type: string + nullable: true + description: Beverage style within type, eg "Pale Ale", "Pinot Noir". + maxLength: 255 + description: + type: string + nullable: true + description: Free-form description of the beverage. + picture: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + vintage_year: + type: string + format: date + nullable: true + description: Date of production, for wines or special/seasonal editions + abv_percent: + type: number + format: double + nullable: true + title: ABV Percentage + description: Alcohol by volume, as percentage (0.0-100.0). + calories_per_ml: + type: number + format: double + nullable: true + description: Calories per mL of beverage. + carbs_per_ml: + type: number + format: double + nullable: true + description: Carbohydrates per mL of beverage. + color_hex: + type: string + title: Color (Hex Value) + description: Approximate beverage color + pattern: (^#[0-9a-zA-Z]{3}$)|(^#[0-9a-zA-Z]{6}$) + maxLength: 16 + original_gravity: + type: number + format: double + nullable: true + description: Original gravity (beer only). + specific_gravity: + type: number + format: double + nullable: true + description: Final gravity (beer only). + srm: + type: number + format: double + nullable: true + title: SRM Value + description: Standard Reference Method value (beer only). + ibu: + type: number + format: double + nullable: true + title: IBUs + description: International Bittering Units value (beer only). + star_rating: + type: number + format: double + maximum: 5.0 + minimum: 0.0 + nullable: true + description: 'Star rating for beverage (0: worst, 5: best)' + untappd_beer_id: + type: integer + maximum: 9223372036854775807 + minimum: -9223372036854775808 + format: int64 + nullable: true + description: Untappd.com resource ID (beer only). + required: + - id + - name + - picture + - producer + - producer_id + BeverageProducer: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: Name of the brewer + maxLength: 255 + country: + allOf: + - $ref: '#/components/schemas/CountryEnum' + description: |- + Country of origin + + * `AFG` - Afghanistan + * `ALA` - Aland Islands + * `ALB` - Albania + * `DZA` - Algeria + * `ASM` - American Samoa + * `AND` - Andorra + * `AGO` - Angola + * `AIA` - Anguilla + * `ATG` - Antigua and Barbuda + * `ARG` - Argentina + * `ARM` - Armenia + * `ABW` - Aruba + * `AUS` - Australia + * `AUT` - Austria + * `AZE` - Azerbaijan + * `BHS` - Bahamas + * `BHR` - Bahrain + * `BGD` - Bangladesh + * `BRB` - Barbados + * `BLR` - Belarus + * `BEL` - Belgium + * `BLZ` - Belize + * `BEN` - Benin + * `BMU` - Bermuda + * `BTN` - Bhutan + * `BOL` - Bolivia + * `BIH` - Bosnia and Herzegovina + * `BWA` - Botswana + * `BRA` - Brazil + * `VGB` - British Virgin Islands + * `BRN` - Brunei Darussalam + * `BGR` - Bulgaria + * `BFA` - Burkina Faso + * `BDI` - Burundi + * `KHM` - Cambodia + * `CMR` - Cameroon + * `CAN` - Canada + * `CPV` - Cape Verde + * `CYM` - Cayman Islands + * `CAF` - Central African Republic + * `TCD` - Chad + * `CIL` - Channel Islands + * `CHL` - Chile + * `CHN` - China + * `HKG` - China - Hong Kong + * `MAC` - China - Macao + * `COL` - Colombia + * `COM` - Comoros + * `COG` - Congo + * `COK` - Cook Islands + * `CRI` - Costa Rica + * `CIV` - Cote d'Ivoire + * `HRV` - Croatia + * `CUB` - Cuba + * `CYP` - Cyprus + * `CZE` - Czech Republic + * `PRK` - Democratic People's Republic of Korea + * `COD` - Democratic Republic of the Congo + * `DNK` - Denmark + * `DJI` - Djibouti + * `DMA` - Dominica + * `DOM` - Dominican Republic + * `ECU` - Ecuador + * `EGY` - Egypt + * `SLV` - El Salvador + * `GNQ` - Equatorial Guinea + * `ERI` - Eritrea + * `EST` - Estonia + * `ETH` - Ethiopia + * `FRO` - Faeroe Islands + * `FLK` - Falkland Islands (Malvinas) + * `FJI` - Fiji + * `FIN` - Finland + * `FRA` - France + * `GUF` - French Guiana + * `PYF` - French Polynesia + * `GAB` - Gabon + * `GMB` - Gambia + * `GEO` - Georgia + * `DEU` - Germany + * `GHA` - Ghana + * `GIB` - Gibraltar + * `GRC` - Greece + * `GRL` - Greenland + * `GRD` - Grenada + * `GLP` - Guadeloupe + * `GUM` - Guam + * `GTM` - Guatemala + * `GGY` - Guernsey + * `GIN` - Guinea + * `GNB` - Guinea-Bissau + * `GUY` - Guyana + * `HTI` - Haiti + * `VAT` - Holy See (Vatican City) + * `HND` - Honduras + * `HUN` - Hungary + * `ISL` - Iceland + * `IND` - India + * `IDN` - Indonesia + * `IRN` - Iran + * `IRQ` - Iraq + * `IRL` - Ireland + * `IMN` - Isle of Man + * `ISR` - Israel + * `ITA` - Italy + * `JAM` - Jamaica + * `JPN` - Japan + * `JEY` - Jersey + * `JOR` - Jordan + * `KAZ` - Kazakhstan + * `KEN` - Kenya + * `KIR` - Kiribati + * `KWT` - Kuwait + * `KGZ` - Kyrgyzstan + * `LAO` - Lao People's Democratic Republic + * `LVA` - Latvia + * `LBN` - Lebanon + * `LSO` - Lesotho + * `LBR` - Liberia + * `LBY` - Libyan Arab Jamahiriya + * `LIE` - Liechtenstein + * `LTU` - Lithuania + * `LUX` - Luxembourg + * `MKD` - Macedonia + * `MDG` - Madagascar + * `MWI` - Malawi + * `MYS` - Malaysia + * `MDV` - Maldives + * `MLI` - Mali + * `MLT` - Malta + * `MHL` - Marshall Islands + * `MTQ` - Martinique + * `MRT` - Mauritania + * `MUS` - Mauritius + * `MYT` - Mayotte + * `MEX` - Mexico + * `FSM` - Micronesia, Federated States of + * `MCO` - Monaco + * `MNG` - Mongolia + * `MNE` - Montenegro + * `MSR` - Montserrat + * `MAR` - Morocco + * `MOZ` - Mozambique + * `MMR` - Myanmar + * `NAM` - Namibia + * `NRU` - Nauru + * `NPL` - Nepal + * `NLD` - Netherlands + * `ANT` - Netherlands Antilles + * `NCL` - New Caledonia + * `NZL` - New Zealand + * `NIC` - Nicaragua + * `NER` - Niger + * `NGA` - Nigeria + * `NIU` - Niue + * `NFK` - Norfolk Island + * `MNP` - Northern Mariana Islands + * `NOR` - Norway + * `PSE` - Occupied Palestinian Territory + * `OMN` - Oman + * `PAK` - Pakistan + * `PLW` - Palau + * `PAN` - Panama + * `PNG` - Papua New Guinea + * `PRY` - Paraguay + * `PER` - Peru + * `PHL` - Philippines + * `PCN` - Pitcairn + * `POL` - Poland + * `PRT` - Portugal + * `PRI` - Puerto Rico + * `QAT` - Qatar + * `KOR` - Republic of Korea + * `MDA` - Republic of Moldova + * `REU` - Reunion + * `ROU` - Romania + * `RUS` - Russian Federation + * `RWA` - Rwanda + * `BLM` - Saint-Barthelemy + * `SHN` - Saint Helena + * `KNA` - Saint Kitts and Nevis + * `LCA` - Saint Lucia + * `MAF` - Saint-Martin (French part) + * `SPM` - Saint Pierre and Miquelon + * `VCT` - Saint Vincent and the Grenadines + * `WSM` - Samoa + * `SMR` - San Marino + * `STP` - Sao Tome and Principe + * `SAU` - Saudi Arabia + * `SEN` - Senegal + * `SRB` - Serbia + * `SYC` - Seychelles + * `SLE` - Sierra Leone + * `SGP` - Singapore + * `SVK` - Slovakia + * `SVN` - Slovenia + * `SLB` - Solomon Islands + * `SOM` - Somalia + * `ZAF` - South Africa + * `ESP` - Spain + * `LKA` - Sri Lanka + * `SDN` - Sudan + * `SUR` - Suriname + * `SJM` - Svalbard and Jan Mayen Islands + * `SWZ` - Swaziland + * `SWE` - Sweden + * `CHE` - Switzerland + * `SYR` - Syrian Arab Republic + * `TJK` - Tajikistan + * `THA` - Thailand + * `TLS` - Timor-Leste + * `TGO` - Togo + * `TKL` - Tokelau + * `TON` - Tonga + * `TTO` - Trinidad and Tobago + * `TUN` - Tunisia + * `TUR` - Turkey + * `TKM` - Turkmenistan + * `TCA` - Turks and Caicos Islands + * `TUV` - Tuvalu + * `UGA` - Uganda + * `UKR` - Ukraine + * `ARE` - United Arab Emirates + * `GBR` - United Kingdom + * `TZA` - United Republic of Tanzania + * `USA` - United States of America + * `VIR` - United States Virgin Islands + * `URY` - Uruguay + * `UZB` - Uzbekistan + * `VUT` - Vanuatu + * `VEN` - Venezuela (Bolivarian Republic of) + * `VNM` - Viet Nam + * `WLF` - Wallis and Futuna Islands + * `ESH` - Western Sahara + * `YEM` - Yemen + * `ZMB` - Zambia + * `ZWE` - Zimbabwe + origin_state: + type: string + nullable: true + description: State of origin, if applicable + maxLength: 128 + origin_city: + type: string + nullable: true + description: City of origin, if known + maxLength: 128 + is_homebrew: + type: boolean + url: + nullable: true + description: Brewer's home page + oneOf: + - type: string + format: uri + maxLength: 200 + - type: string + maxLength: 0 + description: + type: string + nullable: true + description: A short description of the brewer + picture: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + required: + - id + - name + - picture + BeverageTypeEnum: + enum: + - beer + - wine + - soda + - kombucha + - other + type: string + description: |- + * `beer` - Beer + * `wine` - Wine + * `soda` - Soda + * `kombucha` - Kombucha + * `other` - Other/Unknown + ConfirmEmailRequest: + type: object + properties: + token: + type: string + required: + - token + Controller: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: Identifying name for this device; must be unique. + maxLength: 128 + model_name: + type: string + nullable: true + description: Type of controller (optional). + maxLength: 128 + serial_number: + type: string + nullable: true + description: Serial number (optional). + maxLength: 128 + required: + - id + - name + CountryEnum: + enum: + - AFG + - ALA + - ALB + - DZA + - ASM + - AND + - AGO + - AIA + - ATG + - ARG + - ARM + - ABW + - AUS + - AUT + - AZE + - BHS + - BHR + - BGD + - BRB + - BLR + - BEL + - BLZ + - BEN + - BMU + - BTN + - BOL + - BIH + - BWA + - BRA + - VGB + - BRN + - BGR + - BFA + - BDI + - KHM + - CMR + - CAN + - CPV + - CYM + - CAF + - TCD + - CIL + - CHL + - CHN + - HKG + - MAC + - COL + - COM + - COG + - COK + - CRI + - CIV + - HRV + - CUB + - CYP + - CZE + - PRK + - COD + - DNK + - DJI + - DMA + - DOM + - ECU + - EGY + - SLV + - GNQ + - ERI + - EST + - ETH + - FRO + - FLK + - FJI + - FIN + - FRA + - GUF + - PYF + - GAB + - GMB + - GEO + - DEU + - GHA + - GIB + - GRC + - GRL + - GRD + - GLP + - GUM + - GTM + - GGY + - GIN + - GNB + - GUY + - HTI + - VAT + - HND + - HUN + - ISL + - IND + - IDN + - IRN + - IRQ + - IRL + - IMN + - ISR + - ITA + - JAM + - JPN + - JEY + - JOR + - KAZ + - KEN + - KIR + - KWT + - KGZ + - LAO + - LVA + - LBN + - LSO + - LBR + - LBY + - LIE + - LTU + - LUX + - MKD + - MDG + - MWI + - MYS + - MDV + - MLI + - MLT + - MHL + - MTQ + - MRT + - MUS + - MYT + - MEX + - FSM + - MCO + - MNG + - MNE + - MSR + - MAR + - MOZ + - MMR + - NAM + - NRU + - NPL + - NLD + - ANT + - NCL + - NZL + - NIC + - NER + - NGA + - NIU + - NFK + - MNP + - NOR + - PSE + - OMN + - PAK + - PLW + - PAN + - PNG + - PRY + - PER + - PHL + - PCN + - POL + - PRT + - PRI + - QAT + - KOR + - MDA + - REU + - ROU + - RUS + - RWA + - BLM + - SHN + - KNA + - LCA + - MAF + - SPM + - VCT + - WSM + - SMR + - STP + - SAU + - SEN + - SRB + - SYC + - SLE + - SGP + - SVK + - SVN + - SLB + - SOM + - ZAF + - ESP + - LKA + - SDN + - SUR + - SJM + - SWZ + - SWE + - CHE + - SYR + - TJK + - THA + - TLS + - TGO + - TKL + - TON + - TTO + - TUN + - TUR + - TKM + - TCA + - TUV + - UGA + - UKR + - ARE + - GBR + - TZA + - USA + - VIR + - URY + - UZB + - VUT + - VEN + - VNM + - WLF + - ESH + - YEM + - ZMB + - ZWE + type: string + description: |- + * `AFG` - Afghanistan + * `ALA` - Aland Islands + * `ALB` - Albania + * `DZA` - Algeria + * `ASM` - American Samoa + * `AND` - Andorra + * `AGO` - Angola + * `AIA` - Anguilla + * `ATG` - Antigua and Barbuda + * `ARG` - Argentina + * `ARM` - Armenia + * `ABW` - Aruba + * `AUS` - Australia + * `AUT` - Austria + * `AZE` - Azerbaijan + * `BHS` - Bahamas + * `BHR` - Bahrain + * `BGD` - Bangladesh + * `BRB` - Barbados + * `BLR` - Belarus + * `BEL` - Belgium + * `BLZ` - Belize + * `BEN` - Benin + * `BMU` - Bermuda + * `BTN` - Bhutan + * `BOL` - Bolivia + * `BIH` - Bosnia and Herzegovina + * `BWA` - Botswana + * `BRA` - Brazil + * `VGB` - British Virgin Islands + * `BRN` - Brunei Darussalam + * `BGR` - Bulgaria + * `BFA` - Burkina Faso + * `BDI` - Burundi + * `KHM` - Cambodia + * `CMR` - Cameroon + * `CAN` - Canada + * `CPV` - Cape Verde + * `CYM` - Cayman Islands + * `CAF` - Central African Republic + * `TCD` - Chad + * `CIL` - Channel Islands + * `CHL` - Chile + * `CHN` - China + * `HKG` - China - Hong Kong + * `MAC` - China - Macao + * `COL` - Colombia + * `COM` - Comoros + * `COG` - Congo + * `COK` - Cook Islands + * `CRI` - Costa Rica + * `CIV` - Cote d'Ivoire + * `HRV` - Croatia + * `CUB` - Cuba + * `CYP` - Cyprus + * `CZE` - Czech Republic + * `PRK` - Democratic People's Republic of Korea + * `COD` - Democratic Republic of the Congo + * `DNK` - Denmark + * `DJI` - Djibouti + * `DMA` - Dominica + * `DOM` - Dominican Republic + * `ECU` - Ecuador + * `EGY` - Egypt + * `SLV` - El Salvador + * `GNQ` - Equatorial Guinea + * `ERI` - Eritrea + * `EST` - Estonia + * `ETH` - Ethiopia + * `FRO` - Faeroe Islands + * `FLK` - Falkland Islands (Malvinas) + * `FJI` - Fiji + * `FIN` - Finland + * `FRA` - France + * `GUF` - French Guiana + * `PYF` - French Polynesia + * `GAB` - Gabon + * `GMB` - Gambia + * `GEO` - Georgia + * `DEU` - Germany + * `GHA` - Ghana + * `GIB` - Gibraltar + * `GRC` - Greece + * `GRL` - Greenland + * `GRD` - Grenada + * `GLP` - Guadeloupe + * `GUM` - Guam + * `GTM` - Guatemala + * `GGY` - Guernsey + * `GIN` - Guinea + * `GNB` - Guinea-Bissau + * `GUY` - Guyana + * `HTI` - Haiti + * `VAT` - Holy See (Vatican City) + * `HND` - Honduras + * `HUN` - Hungary + * `ISL` - Iceland + * `IND` - India + * `IDN` - Indonesia + * `IRN` - Iran + * `IRQ` - Iraq + * `IRL` - Ireland + * `IMN` - Isle of Man + * `ISR` - Israel + * `ITA` - Italy + * `JAM` - Jamaica + * `JPN` - Japan + * `JEY` - Jersey + * `JOR` - Jordan + * `KAZ` - Kazakhstan + * `KEN` - Kenya + * `KIR` - Kiribati + * `KWT` - Kuwait + * `KGZ` - Kyrgyzstan + * `LAO` - Lao People's Democratic Republic + * `LVA` - Latvia + * `LBN` - Lebanon + * `LSO` - Lesotho + * `LBR` - Liberia + * `LBY` - Libyan Arab Jamahiriya + * `LIE` - Liechtenstein + * `LTU` - Lithuania + * `LUX` - Luxembourg + * `MKD` - Macedonia + * `MDG` - Madagascar + * `MWI` - Malawi + * `MYS` - Malaysia + * `MDV` - Maldives + * `MLI` - Mali + * `MLT` - Malta + * `MHL` - Marshall Islands + * `MTQ` - Martinique + * `MRT` - Mauritania + * `MUS` - Mauritius + * `MYT` - Mayotte + * `MEX` - Mexico + * `FSM` - Micronesia, Federated States of + * `MCO` - Monaco + * `MNG` - Mongolia + * `MNE` - Montenegro + * `MSR` - Montserrat + * `MAR` - Morocco + * `MOZ` - Mozambique + * `MMR` - Myanmar + * `NAM` - Namibia + * `NRU` - Nauru + * `NPL` - Nepal + * `NLD` - Netherlands + * `ANT` - Netherlands Antilles + * `NCL` - New Caledonia + * `NZL` - New Zealand + * `NIC` - Nicaragua + * `NER` - Niger + * `NGA` - Nigeria + * `NIU` - Niue + * `NFK` - Norfolk Island + * `MNP` - Northern Mariana Islands + * `NOR` - Norway + * `PSE` - Occupied Palestinian Territory + * `OMN` - Oman + * `PAK` - Pakistan + * `PLW` - Palau + * `PAN` - Panama + * `PNG` - Papua New Guinea + * `PRY` - Paraguay + * `PER` - Peru + * `PHL` - Philippines + * `PCN` - Pitcairn + * `POL` - Poland + * `PRT` - Portugal + * `PRI` - Puerto Rico + * `QAT` - Qatar + * `KOR` - Republic of Korea + * `MDA` - Republic of Moldova + * `REU` - Reunion + * `ROU` - Romania + * `RUS` - Russian Federation + * `RWA` - Rwanda + * `BLM` - Saint-Barthelemy + * `SHN` - Saint Helena + * `KNA` - Saint Kitts and Nevis + * `LCA` - Saint Lucia + * `MAF` - Saint-Martin (French part) + * `SPM` - Saint Pierre and Miquelon + * `VCT` - Saint Vincent and the Grenadines + * `WSM` - Samoa + * `SMR` - San Marino + * `STP` - Sao Tome and Principe + * `SAU` - Saudi Arabia + * `SEN` - Senegal + * `SRB` - Serbia + * `SYC` - Seychelles + * `SLE` - Sierra Leone + * `SGP` - Singapore + * `SVK` - Slovakia + * `SVN` - Slovenia + * `SLB` - Solomon Islands + * `SOM` - Somalia + * `ZAF` - South Africa + * `ESP` - Spain + * `LKA` - Sri Lanka + * `SDN` - Sudan + * `SUR` - Suriname + * `SJM` - Svalbard and Jan Mayen Islands + * `SWZ` - Swaziland + * `SWE` - Sweden + * `CHE` - Switzerland + * `SYR` - Syrian Arab Republic + * `TJK` - Tajikistan + * `THA` - Thailand + * `TLS` - Timor-Leste + * `TGO` - Togo + * `TKL` - Tokelau + * `TON` - Tonga + * `TTO` - Trinidad and Tobago + * `TUN` - Tunisia + * `TUR` - Turkey + * `TKM` - Turkmenistan + * `TCA` - Turks and Caicos Islands + * `TUV` - Tuvalu + * `UGA` - Uganda + * `UKR` - Ukraine + * `ARE` - United Arab Emirates + * `GBR` - United Kingdom + * `TZA` - United Republic of Tanzania + * `USA` - United States of America + * `VIR` - United States Virgin Islands + * `URY` - Uruguay + * `UZB` - Uzbekistan + * `VUT` - Vanuatu + * `VEN` - Venezuela (Bolivarian Republic of) + * `VNM` - Viet Nam + * `WLF` - Wallis and Futuna Islands + * `ESH` - Western Sahara + * `YEM` - Yemen + * `ZMB` - Zambia + * `ZWE` - Zimbabwe + CurrentUser: + type: object + properties: + id: + type: integer + readOnly: true + username: + type: string + description: Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ + characters + pattern: ^[\w.@+-]+$ + maxLength: 30 + email: + type: string + format: email + readOnly: true + title: Email address + display_name: + type: string + description: Full name, will be shown in some places instead of username + maxLength: 127 + is_staff: + type: boolean + readOnly: true + title: Staff status + description: Designates whether the user can log into this admin site. + is_active: + type: boolean + readOnly: true + title: Active + description: Designates whether this user should be treated as active. Unselect + this instead of deleting accounts. + picture: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + required: + - email + - id + - is_active + - is_staff + - picture + - username + Device: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 255 + created_time: + type: string + format: date-time + description: Time the device was created. + required: + - id + Drink: + type: object + properties: + id: + type: integer + readOnly: true + ticks: + type: integer + readOnly: true + description: Flow sensor ticks, never changed once recorded. + volume_ml: + type: number + format: double + readOnly: true + description: Calculated (or set) Drink volume. + time: + type: string + format: date-time + readOnly: true + description: Date and time of pour. + duration: + type: integer + readOnly: true + description: Time in seconds taken to pour this Drink. + user: + allOf: + - $ref: '#/components/schemas/User' + readOnly: true + keg: + allOf: + - $ref: '#/components/schemas/Keg' + readOnly: true + session_id: + type: integer + readOnly: true + nullable: true + description: Session where this Drink is grouped. + shout: + type: string + nullable: true + description: Comment from the drinker at the time of the pour. + picture: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + required: + - duration + - id + - keg + - picture + - session_id + - ticks + - time + - user + - volume_ml + DrinkReassignRequest: + type: object + properties: + username: + type: string + required: + - username + DrinkingSession: + type: object + properties: + id: + type: integer + readOnly: true + start_time: + type: string + format: date-time + end_time: + type: string + format: date-time + volume_ml: + type: number + format: double + timezone: + type: string + maxLength: 256 + name: + type: string + nullable: true + maxLength: 256 + stats: + readOnly: true + required: + - end_time + - id + - start_time + - stats + EmailChangeRequest: + type: object + properties: + email: + type: string + format: email + required: + - email + EmailTestRequest: + type: object + properties: + address: + type: string + format: email + required: + - address + FlowMeter: + type: object + properties: + id: + type: integer + readOnly: true + controller_id: + type: integer + description: Controller that owns this meter. + readOnly: true + port_name: + type: string + description: Controller-specific data port name for this meter. + maxLength: 128 + tap_id: + type: integer + nullable: true + description: Tap to which this meter is currently bound. + readOnly: true + ticks_per_ml: + type: number + format: double + description: 'Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), + 5.4 (SF800)' + required: + - controller_id + - id + - port_name + - tap_id + FlowToggle: + type: object + properties: + id: + type: integer + readOnly: true + controller_id: + type: integer + description: Controller that owns this toggle. + readOnly: true + port_name: + type: string + description: Controller-specific data port name for this toggle. + maxLength: 128 + tap_id: + type: integer + nullable: true + description: Tap to which this toggle is currently bound. + readOnly: true + required: + - controller_id + - id + - port_name + - tap_id + Invitation: + type: object + properties: + id: + type: integer + readOnly: true + for_email: + type: string + format: email + description: Address this invitation was sent to. + maxLength: 254 + invited_date: + type: string + format: date-time + readOnly: true + title: Date invited + description: Date and time the invitation was sent + expires_date: + type: string + format: date-time + title: Date expries + description: Date and time after which the invitation is considered expired + is_expired: + type: boolean + readOnly: true + required: + - for_email + - id + - invited_date + - is_expired + Keg: + type: object + properties: + id: + type: integer + readOnly: true + beverage: + allOf: + - $ref: '#/components/schemas/Beverage' + readOnly: true + keg_type: + allOf: + - $ref: '#/components/schemas/KegTypeEnum' + description: |- + Keg container type, used to initialize keg's full volume + + * `mini` - Mini Keg (5 L) + * `corny-2_5-gal` - Corny Keg (2.5 gal) + * `corny-3-gal` - Corny Keg (3.0 gal) + * `corny` - Corny Keg (5 gal) + * `sixth` - Sixth Barrel (5.17 gal) + * `euro-30-liter` - European DIN (30 L) + * `euro-half` - European Half Barrel (50 L) + * `quarter` - Quarter Barrel (7.75 gal) + * `euro` - European Full Barrel (100 L) + * `half-barrel` - Half Barrel (15.5 gal) + * `other` - Other + served_volume_ml: + type: number + format: double + readOnly: true + description: Computed served volume. + full_volume_ml: + type: number + format: double + description: Full volume of this Keg; usually set automatically from keg_type. + start_time: + type: string + format: date-time + readOnly: true + description: Time the Keg was first tapped. + end_time: + type: string + format: date-time + readOnly: true + description: Time the Keg was finished or disconnected. + status: + allOf: + - $ref: '#/components/schemas/KegStatusEnum' + readOnly: true + description: |- + Current keg state. + + * `available` - Available + * `on_tap` - On tap + * `finished` - Finished + description: + type: string + nullable: true + description: User-visible description of the Keg. + spilled_ml: + type: number + format: double + readOnly: true + description: Amount of beverage poured without an associated Drink. + notes: + type: string + nullable: true + description: Private notes about this keg, viewable only by admins. + illustration: + type: string + format: uri + readOnly: true + illustration_thumbnail: + type: string + format: uri + readOnly: true + stats: + readOnly: true + required: + - beverage + - end_time + - id + - illustration + - illustration_thumbnail + - served_volume_ml + - spilled_ml + - start_time + - stats + - status + KegCreateRequest: + type: object + description: |- + Parameters for creating a keg. + + The beverage may be given as an existing `beverage_id`, or described by + the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) + tuple, which matches or creates one. + properties: + beverage_id: + type: integer + nullable: true + beverage_name: + type: string + default: '' + beverage_type: + allOf: + - $ref: '#/components/schemas/BeverageTypeEnum' + default: beer + producer_name: + type: string + default: '' + style_name: + type: string + default: '' + keg_type: + allOf: + - $ref: '#/components/schemas/KegTypeEnum' + default: half-barrel + full_volume_ml: + type: number + format: double + nullable: true + description: + type: string + default: '' + notes: + type: string + default: '' + KegSpillRequest: + type: object + properties: + volume_ml: + type: number + format: double + minimum: 0.0 + required: + - volume_ml + KegStatusEnum: + enum: + - available + - on_tap + - finished + type: string + description: |- + * `available` - Available + * `on_tap` - On tap + * `finished` - Finished + KegTap: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: The display name for this tap, for example, "Main Tap". + maxLength: 128 + notes: + type: string + nullable: true + description: Private notes about this tap. + current_keg_id: + type: integer + readOnly: true + temperature_sensor_id: + type: integer + readOnly: true + sort_order: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Position relative to other taps when sorting (0=first). + current_keg: + allOf: + - $ref: '#/components/schemas/Keg' + readOnly: true + required: + - current_keg + - current_keg_id + - id + - name + - temperature_sensor_id + KegTypeEnum: + enum: + - mini + - corny-2_5-gal + - corny-3-gal + - corny + - sixth + - euro-30-liter + - euro-half + - quarter + - euro + - half-barrel + - other + type: string + description: |- + * `mini` - Mini Keg (5 L) + * `corny-2_5-gal` - Corny Keg (2.5 gal) + * `corny-3-gal` - Corny Keg (3.0 gal) + * `corny` - Corny Keg (5 gal) + * `sixth` - Sixth Barrel (5.17 gal) + * `euro-30-liter` - European DIN (30 L) + * `euro-half` - European Half Barrel (50 L) + * `quarter` - Quarter Barrel (7.75 gal) + * `euro` - European Full Barrel (100 L) + * `half-barrel` - Half Barrel (15.5 gal) + * `other` - Other + KegbotSite: + type: object + properties: + name: + type: string + readOnly: true + server_version: + type: string + readOnly: true + nullable: true + is_setup: + type: boolean + readOnly: true + description: True if the site has completed setup. + volume_display_units: + allOf: + - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' + description: |- + Unit system to use when displaying volumetric data. + + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + temperature_display_units: + allOf: + - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' + description: |- + Unit system to use when displaying temperature data. + + * `f` - Fahrenheit + * `c` - Celsius + title: + type: string + description: The title of this site. + maxLength: 64 + background_image: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + google_analytics_id: + type: string + nullable: true + description: 'Set to your Google Analytics ID to enable tracking. Example: + UA-XXXX-y' + maxLength: 64 + session_timeout_minutes: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Maximum time, in minutes, that a session may be idle (no pours) + before it is considered to be finished. Recommended value is 180. + privacy: + allOf: + - $ref: '#/components/schemas/PrivacyEnum' + description: |- + Who can view Kegbot data? + + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + registration_mode: + allOf: + - $ref: '#/components/schemas/RegistrationModeEnum' + description: |- + Who can join this Kegbot from the web site? + + * `public` - Public: Anyone can register. + * `member-invite-only` - Member Invite: Must be invited by an existing member. + * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + timezone: + allOf: + - $ref: '#/components/schemas/TimezoneEnum' + description: |- + Time zone for this system. + + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Coyhaique` - America/Coyhaique + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + enable_sensing: + type: boolean + description: Enable and show features related to volume sensing. + enable_users: + type: boolean + description: Enable user pour tracking. + stats: + readOnly: true + required: + - background_image + - is_setup + - name + - server_version + - stats + Login: + type: object + properties: + username: + type: string + password: + type: string + required: + - password + - username + Me: + type: object + description: |- + The boot payload: current user plus always-needed site metadata. + + Served to every caller with status 200; `user` is null when the caller + is not authenticated. Static constants (choice lists, keg sizes, and + similar) are NOT served here: they are baked into the frontend build + via the `print_constants` management command. + properties: + user: + allOf: + - $ref: '#/components/schemas/CurrentUser' + nullable: true + site: + $ref: '#/components/schemas/SiteConfig' + can_invite: + type: boolean + have_sessions: + type: boolean + sso_login_url: + type: string + sso_logout_url: + type: string + plugins: + type: array + items: + $ref: '#/components/schemas/PluginInfo' + required: + - can_invite + - have_sessions + - plugins + - site + - sso_login_url + - sso_logout_url + - user + NewKegRequest: + type: object + description: |- + Parameters for creating a keg. + + The beverage may be given as an existing `beverage_id`, or described by + the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) + tuple, which matches or creates one. + properties: + beverage_id: + type: integer + nullable: true + beverage_name: + type: string + default: '' + beverage_type: + allOf: + - $ref: '#/components/schemas/BeverageTypeEnum' + default: beer + producer_name: + type: string + default: '' + style_name: + type: string + default: '' + keg_type: + allOf: + - $ref: '#/components/schemas/KegTypeEnum' + default: half-barrel + full_volume_ml: + type: number + format: double + nullable: true + NotificationSettings: + type: object + properties: + id: + type: integer + readOnly: true + user_id: + type: integer + description: User for these settings. + readOnly: true + backend: + type: string + description: Notification backend (dotted path) for these settings. + maxLength: 255 + keg_tapped: + type: boolean + description: Sent when a keg is activated. + session_started: + type: boolean + description: Sent when a new drinking session starts. + keg_volume_low: + type: boolean + description: Sent when a keg becomes low. + keg_ended: + type: boolean + description: Sent when a keg has been taken offline. + required: + - backend + - id + - user_id + PaginatedApiKeyList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/ApiKey' + PaginatedAuthenticationTokenList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/AuthenticationToken' + PaginatedBeverageList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Beverage' + PaginatedBeverageProducerList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/BeverageProducer' + PaginatedControllerList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Controller' + PaginatedDeviceList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Device' + PaginatedDrinkList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Drink' + PaginatedDrinkingSessionList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/DrinkingSession' + PaginatedFlowMeterList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/FlowMeter' + PaginatedFlowToggleList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/FlowToggle' + PaginatedInvitationList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Invitation' + PaginatedKegList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Keg' + PaginatedKegTapList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/KegTap' + PaginatedNotificationSettingsList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/NotificationSettings' + PaginatedPluginDataList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/PluginData' + PaginatedStatsList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Stats' + PaginatedSystemEventList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/SystemEvent' + PaginatedThermoSensorList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/ThermoSensor' + PaginatedThermologList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/Thermolog' + PaginatedUserList: + type: object + required: + - results + properties: + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cD00ODY%3D" + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3 + results: + type: array + items: + $ref: '#/components/schemas/User' + PasswordChangeRequest: + type: object + properties: + current_password: + type: string + new_password: + type: string + minLength: 1 + required: + - current_password + - new_password + PasswordResetConfirmRequest: + type: object + properties: + uid: + type: string + token: + type: string + new_password: + type: string + minLength: 1 + required: + - new_password + - token + - uid + PasswordResetRequest: + type: object + properties: + email: + type: string + format: email + required: + - email + PatchedAdminUserUpdateRequest: + type: object + properties: + email: + oneOf: + - type: string + format: email + - type: string + maxLength: 0 + display_name: + type: string + maxLength: 127 + is_staff: + type: boolean + is_active: + type: boolean + PatchedApiKey: + type: object + properties: + id: + type: integer + readOnly: true + user_id: + type: integer + nullable: true + description: User receiving API access. + readOnly: true + device_id: + type: integer + nullable: true + description: Device this key is associated with. + readOnly: true + is_active: + type: boolean + key: + type: string + readOnly: true + description: + type: string + nullable: true + description: Information about this key. + created_time: + type: string + format: date-time + description: Time the key was created. + PatchedAuthenticationToken: + type: object + properties: + id: + type: integer + readOnly: true + auth_device: + type: string + description: Namespace for this token. + maxLength: 64 + token_value: + type: string + description: Actual value of the token, unique within an auth_device. + maxLength: 128 + nice_name: + type: string + nullable: true + description: A human-readable alias for the token, for example "Guest Key". + maxLength: 256 + pin: + type: string + nullable: true + description: A secret value necessary to authenticate with this token. + maxLength: 256 + user: + type: integer + writeOnly: true + nullable: true + user_id: + type: integer + nullable: true + description: User in possession of and authenticated by this token. + readOnly: true + enabled: + type: boolean + description: Whether this token is considered active. + created_time: + type: string + format: date-time + readOnly: true + description: Date token was first added to the system. + expire_time: + type: string + format: date-time + nullable: true + description: Date after which token is treated as disabled. + PatchedBeverage: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: Name of the beverage, such as "Potrero Pale". + maxLength: 255 + producer: + allOf: + - $ref: '#/components/schemas/BeverageProducer' + readOnly: true + producer_id: + type: integer + writeOnly: true + beverage_type: + $ref: '#/components/schemas/BeverageTypeEnum' + style: + type: string + nullable: true + description: Beverage style within type, eg "Pale Ale", "Pinot Noir". + maxLength: 255 + description: + type: string + nullable: true + description: Free-form description of the beverage. + picture: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + vintage_year: + type: string + format: date + nullable: true + description: Date of production, for wines or special/seasonal editions + abv_percent: + type: number + format: double + nullable: true + title: ABV Percentage + description: Alcohol by volume, as percentage (0.0-100.0). + calories_per_ml: + type: number + format: double + nullable: true + description: Calories per mL of beverage. + carbs_per_ml: + type: number + format: double + nullable: true + description: Carbohydrates per mL of beverage. + color_hex: + type: string + title: Color (Hex Value) + description: Approximate beverage color + pattern: (^#[0-9a-zA-Z]{3}$)|(^#[0-9a-zA-Z]{6}$) + maxLength: 16 + original_gravity: + type: number + format: double + nullable: true + description: Original gravity (beer only). + specific_gravity: + type: number + format: double + nullable: true + description: Final gravity (beer only). + srm: + type: number + format: double + nullable: true + title: SRM Value + description: Standard Reference Method value (beer only). + ibu: + type: number + format: double + nullable: true + title: IBUs + description: International Bittering Units value (beer only). + star_rating: + type: number + format: double + maximum: 5.0 + minimum: 0.0 + nullable: true + description: 'Star rating for beverage (0: worst, 5: best)' + untappd_beer_id: + type: integer + maximum: 9223372036854775807 + minimum: -9223372036854775808 + format: int64 + nullable: true + description: Untappd.com resource ID (beer only). + PatchedBeverageProducer: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: Name of the brewer + maxLength: 255 + country: + allOf: + - $ref: '#/components/schemas/CountryEnum' + description: |- + Country of origin + + * `AFG` - Afghanistan + * `ALA` - Aland Islands + * `ALB` - Albania + * `DZA` - Algeria + * `ASM` - American Samoa + * `AND` - Andorra + * `AGO` - Angola + * `AIA` - Anguilla + * `ATG` - Antigua and Barbuda + * `ARG` - Argentina + * `ARM` - Armenia + * `ABW` - Aruba + * `AUS` - Australia + * `AUT` - Austria + * `AZE` - Azerbaijan + * `BHS` - Bahamas + * `BHR` - Bahrain + * `BGD` - Bangladesh + * `BRB` - Barbados + * `BLR` - Belarus + * `BEL` - Belgium + * `BLZ` - Belize + * `BEN` - Benin + * `BMU` - Bermuda + * `BTN` - Bhutan + * `BOL` - Bolivia + * `BIH` - Bosnia and Herzegovina + * `BWA` - Botswana + * `BRA` - Brazil + * `VGB` - British Virgin Islands + * `BRN` - Brunei Darussalam + * `BGR` - Bulgaria + * `BFA` - Burkina Faso + * `BDI` - Burundi + * `KHM` - Cambodia + * `CMR` - Cameroon + * `CAN` - Canada + * `CPV` - Cape Verde + * `CYM` - Cayman Islands + * `CAF` - Central African Republic + * `TCD` - Chad + * `CIL` - Channel Islands + * `CHL` - Chile + * `CHN` - China + * `HKG` - China - Hong Kong + * `MAC` - China - Macao + * `COL` - Colombia + * `COM` - Comoros + * `COG` - Congo + * `COK` - Cook Islands + * `CRI` - Costa Rica + * `CIV` - Cote d'Ivoire + * `HRV` - Croatia + * `CUB` - Cuba + * `CYP` - Cyprus + * `CZE` - Czech Republic + * `PRK` - Democratic People's Republic of Korea + * `COD` - Democratic Republic of the Congo + * `DNK` - Denmark + * `DJI` - Djibouti + * `DMA` - Dominica + * `DOM` - Dominican Republic + * `ECU` - Ecuador + * `EGY` - Egypt + * `SLV` - El Salvador + * `GNQ` - Equatorial Guinea + * `ERI` - Eritrea + * `EST` - Estonia + * `ETH` - Ethiopia + * `FRO` - Faeroe Islands + * `FLK` - Falkland Islands (Malvinas) + * `FJI` - Fiji + * `FIN` - Finland + * `FRA` - France + * `GUF` - French Guiana + * `PYF` - French Polynesia + * `GAB` - Gabon + * `GMB` - Gambia + * `GEO` - Georgia + * `DEU` - Germany + * `GHA` - Ghana + * `GIB` - Gibraltar + * `GRC` - Greece + * `GRL` - Greenland + * `GRD` - Grenada + * `GLP` - Guadeloupe + * `GUM` - Guam + * `GTM` - Guatemala + * `GGY` - Guernsey + * `GIN` - Guinea + * `GNB` - Guinea-Bissau + * `GUY` - Guyana + * `HTI` - Haiti + * `VAT` - Holy See (Vatican City) + * `HND` - Honduras + * `HUN` - Hungary + * `ISL` - Iceland + * `IND` - India + * `IDN` - Indonesia + * `IRN` - Iran + * `IRQ` - Iraq + * `IRL` - Ireland + * `IMN` - Isle of Man + * `ISR` - Israel + * `ITA` - Italy + * `JAM` - Jamaica + * `JPN` - Japan + * `JEY` - Jersey + * `JOR` - Jordan + * `KAZ` - Kazakhstan + * `KEN` - Kenya + * `KIR` - Kiribati + * `KWT` - Kuwait + * `KGZ` - Kyrgyzstan + * `LAO` - Lao People's Democratic Republic + * `LVA` - Latvia + * `LBN` - Lebanon + * `LSO` - Lesotho + * `LBR` - Liberia + * `LBY` - Libyan Arab Jamahiriya + * `LIE` - Liechtenstein + * `LTU` - Lithuania + * `LUX` - Luxembourg + * `MKD` - Macedonia + * `MDG` - Madagascar + * `MWI` - Malawi + * `MYS` - Malaysia + * `MDV` - Maldives + * `MLI` - Mali + * `MLT` - Malta + * `MHL` - Marshall Islands + * `MTQ` - Martinique + * `MRT` - Mauritania + * `MUS` - Mauritius + * `MYT` - Mayotte + * `MEX` - Mexico + * `FSM` - Micronesia, Federated States of + * `MCO` - Monaco + * `MNG` - Mongolia + * `MNE` - Montenegro + * `MSR` - Montserrat + * `MAR` - Morocco + * `MOZ` - Mozambique + * `MMR` - Myanmar + * `NAM` - Namibia + * `NRU` - Nauru + * `NPL` - Nepal + * `NLD` - Netherlands + * `ANT` - Netherlands Antilles + * `NCL` - New Caledonia + * `NZL` - New Zealand + * `NIC` - Nicaragua + * `NER` - Niger + * `NGA` - Nigeria + * `NIU` - Niue + * `NFK` - Norfolk Island + * `MNP` - Northern Mariana Islands + * `NOR` - Norway + * `PSE` - Occupied Palestinian Territory + * `OMN` - Oman + * `PAK` - Pakistan + * `PLW` - Palau + * `PAN` - Panama + * `PNG` - Papua New Guinea + * `PRY` - Paraguay + * `PER` - Peru + * `PHL` - Philippines + * `PCN` - Pitcairn + * `POL` - Poland + * `PRT` - Portugal + * `PRI` - Puerto Rico + * `QAT` - Qatar + * `KOR` - Republic of Korea + * `MDA` - Republic of Moldova + * `REU` - Reunion + * `ROU` - Romania + * `RUS` - Russian Federation + * `RWA` - Rwanda + * `BLM` - Saint-Barthelemy + * `SHN` - Saint Helena + * `KNA` - Saint Kitts and Nevis + * `LCA` - Saint Lucia + * `MAF` - Saint-Martin (French part) + * `SPM` - Saint Pierre and Miquelon + * `VCT` - Saint Vincent and the Grenadines + * `WSM` - Samoa + * `SMR` - San Marino + * `STP` - Sao Tome and Principe + * `SAU` - Saudi Arabia + * `SEN` - Senegal + * `SRB` - Serbia + * `SYC` - Seychelles + * `SLE` - Sierra Leone + * `SGP` - Singapore + * `SVK` - Slovakia + * `SVN` - Slovenia + * `SLB` - Solomon Islands + * `SOM` - Somalia + * `ZAF` - South Africa + * `ESP` - Spain + * `LKA` - Sri Lanka + * `SDN` - Sudan + * `SUR` - Suriname + * `SJM` - Svalbard and Jan Mayen Islands + * `SWZ` - Swaziland + * `SWE` - Sweden + * `CHE` - Switzerland + * `SYR` - Syrian Arab Republic + * `TJK` - Tajikistan + * `THA` - Thailand + * `TLS` - Timor-Leste + * `TGO` - Togo + * `TKL` - Tokelau + * `TON` - Tonga + * `TTO` - Trinidad and Tobago + * `TUN` - Tunisia + * `TUR` - Turkey + * `TKM` - Turkmenistan + * `TCA` - Turks and Caicos Islands + * `TUV` - Tuvalu + * `UGA` - Uganda + * `UKR` - Ukraine + * `ARE` - United Arab Emirates + * `GBR` - United Kingdom + * `TZA` - United Republic of Tanzania + * `USA` - United States of America + * `VIR` - United States Virgin Islands + * `URY` - Uruguay + * `UZB` - Uzbekistan + * `VUT` - Vanuatu + * `VEN` - Venezuela (Bolivarian Republic of) + * `VNM` - Viet Nam + * `WLF` - Wallis and Futuna Islands + * `ESH` - Western Sahara + * `YEM` - Yemen + * `ZMB` - Zambia + * `ZWE` - Zimbabwe + origin_state: + type: string + nullable: true + description: State of origin, if applicable + maxLength: 128 + origin_city: + type: string + nullable: true + description: City of origin, if known + maxLength: 128 + is_homebrew: + type: boolean + url: + nullable: true + description: Brewer's home page + oneOf: + - type: string + format: uri + maxLength: 200 + - type: string + maxLength: 0 + description: + type: string + nullable: true + description: A short description of the brewer + picture: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + PatchedController: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: Identifying name for this device; must be unique. + maxLength: 128 + model_name: + type: string + nullable: true + description: Type of controller (optional). + maxLength: 128 + serial_number: + type: string + nullable: true + description: Serial number (optional). + maxLength: 128 + PatchedDevice: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 255 + created_time: + type: string + format: date-time + description: Time the device was created. + PatchedDrinkUpdateRequest: + type: object + properties: + shout: + type: string + volume_ml: + type: number + format: double + minimum: 0.0 + PatchedFlowMeter: + type: object + properties: + id: + type: integer + readOnly: true + controller_id: + type: integer + description: Controller that owns this meter. + readOnly: true + port_name: + type: string + description: Controller-specific data port name for this meter. + maxLength: 128 + tap_id: + type: integer + nullable: true + description: Tap to which this meter is currently bound. + readOnly: true + ticks_per_ml: + type: number + format: double + description: 'Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), + 5.4 (SF800)' + PatchedFlowToggle: + type: object + properties: + id: + type: integer + readOnly: true + controller_id: + type: integer + description: Controller that owns this toggle. + readOnly: true + port_name: + type: string + description: Controller-specific data port name for this toggle. + maxLength: 128 + tap_id: + type: integer + nullable: true + description: Tap to which this toggle is currently bound. + readOnly: true + PatchedKeg: + type: object + properties: + id: + type: integer + readOnly: true + beverage: + allOf: + - $ref: '#/components/schemas/Beverage' + readOnly: true + keg_type: + allOf: + - $ref: '#/components/schemas/KegTypeEnum' + description: |- + Keg container type, used to initialize keg's full volume + + * `mini` - Mini Keg (5 L) + * `corny-2_5-gal` - Corny Keg (2.5 gal) + * `corny-3-gal` - Corny Keg (3.0 gal) + * `corny` - Corny Keg (5 gal) + * `sixth` - Sixth Barrel (5.17 gal) + * `euro-30-liter` - European DIN (30 L) + * `euro-half` - European Half Barrel (50 L) + * `quarter` - Quarter Barrel (7.75 gal) + * `euro` - European Full Barrel (100 L) + * `half-barrel` - Half Barrel (15.5 gal) + * `other` - Other + served_volume_ml: + type: number + format: double + readOnly: true + description: Computed served volume. + full_volume_ml: + type: number + format: double + description: Full volume of this Keg; usually set automatically from keg_type. + start_time: + type: string + format: date-time + readOnly: true + description: Time the Keg was first tapped. + end_time: + type: string + format: date-time + readOnly: true + description: Time the Keg was finished or disconnected. + status: + allOf: + - $ref: '#/components/schemas/KegStatusEnum' + readOnly: true + description: |- + Current keg state. + + * `available` - Available + * `on_tap` - On tap + * `finished` - Finished + description: + type: string + nullable: true + description: User-visible description of the Keg. + spilled_ml: + type: number + format: double + readOnly: true + description: Amount of beverage poured without an associated Drink. + notes: + type: string + nullable: true + description: Private notes about this keg, viewable only by admins. + illustration: + type: string + format: uri + readOnly: true + illustration_thumbnail: + type: string + format: uri + readOnly: true + stats: + readOnly: true + PatchedKegTap: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: The display name for this tap, for example, "Main Tap". + maxLength: 128 + notes: + type: string + nullable: true + description: Private notes about this tap. + current_keg_id: + type: integer + readOnly: true + temperature_sensor_id: + type: integer + readOnly: true + sort_order: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Position relative to other taps when sorting (0=first). + current_keg: + allOf: + - $ref: '#/components/schemas/Keg' + readOnly: true + PatchedNotificationSettings: + type: object + properties: + id: + type: integer + readOnly: true + user_id: + type: integer + description: User for these settings. + readOnly: true + backend: + type: string + description: Notification backend (dotted path) for these settings. + maxLength: 255 + keg_tapped: + type: boolean + description: Sent when a keg is activated. + session_started: + type: boolean + description: Sent when a new drinking session starts. + keg_volume_low: + type: boolean + description: Sent when a keg becomes low. + keg_ended: + type: boolean + description: Sent when a keg has been taken offline. + PatchedPluginData: + type: object + properties: + plugin_name: + type: string + description: Plugin short name + maxLength: 127 + key: + type: string + maxLength: 127 + value: {} + PatchedProfileUpdateRequest: + type: object + properties: + display_name: + type: string + maxLength: 127 + PatchedSiteSettings: + type: object + description: Admin-editable site settings, covering the old settings forms. + properties: + name: + type: string + readOnly: true + server_version: + type: string + readOnly: true + nullable: true + is_setup: + type: boolean + readOnly: true + description: True if the site has completed setup. + title: + type: string + description: The title of this site. + maxLength: 64 + privacy: + allOf: + - $ref: '#/components/schemas/PrivacyEnum' + description: |- + Who can view Kegbot data? + + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + registration_mode: + allOf: + - $ref: '#/components/schemas/RegistrationModeEnum' + description: |- + Who can join this Kegbot from the web site? + + * `public` - Public: Anyone can register. + * `member-invite-only` - Member Invite: Must be invited by an existing member. + * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + enable_sensing: + type: boolean + description: Enable and show features related to volume sensing. + enable_users: + type: boolean + description: Enable user pour tracking. + volume_display_units: + allOf: + - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' + description: |- + Unit system to use when displaying volumetric data. + + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + temperature_display_units: + allOf: + - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' + description: |- + Unit system to use when displaying temperature data. + + * `f` - Fahrenheit + * `c` - Celsius + timezone: + allOf: + - $ref: '#/components/schemas/TimezoneEnum' + description: |- + Time zone for this system. + + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Coyhaique` - America/Coyhaique + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + session_timeout_minutes: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Maximum time, in minutes, that a session may be idle (no pours) + before it is considered to be finished. Recommended value is 180. + google_analytics_id: + type: string + nullable: true + description: 'Set to your Google Analytics ID to enable tracking. Example: + UA-XXXX-y' + maxLength: 64 + email_config: + type: string + description: Backend email configuration + pattern: '^(console|smtp|submission|dummy|memory):' + background_image: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + PatchedThermoSensor: + type: object + properties: + id: + type: integer + readOnly: true + raw_name: + type: string + maxLength: 256 + nice_name: + type: string + maxLength: 128 + Picture: + type: object + properties: + id: + type: integer + readOnly: true + resized_url: + type: string + format: uri + readOnly: true + resized_png_url: + type: string + format: uri + readOnly: true + thumbnail_url: + type: string + format: uri + readOnly: true + thumbnail_png_url: + type: string + format: uri + readOnly: true + caption: + type: string + user_id: + type: integer + nullable: true + description: User that owns/uploaded this picture + readOnly: true + keg_id: + type: integer + nullable: true + description: Keg this picture was taken with, if any. + readOnly: true + session_id: + type: integer + nullable: true + description: Session this picture was taken with, if any. + readOnly: true + required: + - caption + - id + - keg_id + - resized_png_url + - resized_url + - session_id + - thumbnail_png_url + - thumbnail_url + - user_id + PictureUploadRequest: + type: object + properties: + image: + type: string + format: uri + caption: + type: string + default: '' + required: + - image + PluginData: + type: object + properties: + plugin_name: + type: string + description: Plugin short name + maxLength: 127 + key: + type: string + maxLength: 127 + value: {} + required: + - key + - plugin_name + - value + PluginInfo: + type: object + properties: + short_name: + type: string + name: + type: string + required: + - name + - short_name + PrivacyEnum: + enum: + - public + - members + - staff + type: string + description: |- + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + RegisterRequest: + type: object + properties: + username: + type: string + maxLength: 30 + pattern: ^[\w.@+-]+$ + email: + type: string + format: email + password: + type: string + minLength: 1 + invite_code: + type: string + default: '' + required: + - email + - password + - username + RegistrationModeEnum: + enum: + - public + - member-invite-only + - staff-invite-only + type: string + description: |- + * `public` - Public: Anyone can register. + * `member-invite-only` - Member Invite: Must be invited by an existing member. + * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + SetPasswordRequest: + type: object + properties: + password: + type: string + minLength: 1 + required: + - password + SetupAdminUserRequest: + type: object + properties: + username: + type: string + maxLength: 30 + pattern: ^[\w.@+-]+$ + email: + type: string + format: email + password: + type: string + minLength: 1 + required: + - email + - password + - username + SetupSiteSettingsRequest: + type: object + description: The subset of site settings collected during the setup wizard. + properties: + title: + type: string + description: The title of this site. + maxLength: 64 + privacy: + allOf: + - $ref: '#/components/schemas/PrivacyEnum' + description: |- + Who can view Kegbot data? + + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + timezone: + allOf: + - $ref: '#/components/schemas/TimezoneEnum' + description: |- + Time zone for this system. + + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Coyhaique` - America/Coyhaique + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + volume_display_units: + allOf: + - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' + description: |- + Unit system to use when displaying volumetric data. + + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + temperature_display_units: + allOf: + - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' + description: |- + Unit system to use when displaying temperature data. + + * `f` - Fahrenheit + * `c` - Celsius + enable_sensing: + type: boolean + description: Enable and show features related to volume sensing. + enable_users: + type: boolean + description: Enable user pour tracking. + SetupStatus: + type: object + properties: + need_setup: + type: boolean + need_upgrade: + type: boolean + installed_version: + type: string + nullable: true + current_version: + type: string + required: + - current_version + - installed_version + - need_setup + - need_upgrade + SiteConfig: + type: object + description: |- + The privacy-safe subset of site settings, embedded in the boot payload. + + Unlike `KegbotSiteSerializer`, this contains no data derived from pours + (no stats): it is served to anonymous users regardless of site privacy, + since the frontend needs it to render the login and interstitial screens. + properties: + server_version: + type: string + readOnly: true + nullable: true + title: + type: string + description: The title of this site. + maxLength: 64 + privacy: + allOf: + - $ref: '#/components/schemas/PrivacyEnum' + description: |- + Who can view Kegbot data? + + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + registration_mode: + allOf: + - $ref: '#/components/schemas/RegistrationModeEnum' + description: |- + Who can join this Kegbot from the web site? + + * `public` - Public: Anyone can register. + * `member-invite-only` - Member Invite: Must be invited by an existing member. + * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + volume_display_units: + allOf: + - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' + description: |- + Unit system to use when displaying volumetric data. + + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + temperature_display_units: + allOf: + - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' + description: |- + Unit system to use when displaying temperature data. + + * `f` - Fahrenheit + * `c` - Celsius + timezone: + allOf: + - $ref: '#/components/schemas/TimezoneEnum' + description: |- + Time zone for this system. + + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Coyhaique` - America/Coyhaique + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + session_timeout_minutes: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Maximum time, in minutes, that a session may be idle (no pours) + before it is considered to be finished. Recommended value is 180. + enable_sensing: + type: boolean + description: Enable and show features related to volume sensing. + enable_users: + type: boolean + description: Enable user pour tracking. + google_analytics_id: + type: string + nullable: true + description: 'Set to your Google Analytics ID to enable tracking. Example: + UA-XXXX-y' + maxLength: 64 + background_image: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + required: + - background_image + - server_version + SiteSettings: + type: object + description: Admin-editable site settings, covering the old settings forms. + properties: + name: + type: string + readOnly: true + server_version: + type: string + readOnly: true + nullable: true + is_setup: + type: boolean + readOnly: true + description: True if the site has completed setup. + title: + type: string + description: The title of this site. + maxLength: 64 + privacy: + allOf: + - $ref: '#/components/schemas/PrivacyEnum' + description: |- + Who can view Kegbot data? + + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + registration_mode: + allOf: + - $ref: '#/components/schemas/RegistrationModeEnum' + description: |- + Who can join this Kegbot from the web site? + + * `public` - Public: Anyone can register. + * `member-invite-only` - Member Invite: Must be invited by an existing member. + * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + enable_sensing: + type: boolean + description: Enable and show features related to volume sensing. + enable_users: + type: boolean + description: Enable user pour tracking. + volume_display_units: + allOf: + - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' + description: |- + Unit system to use when displaying volumetric data. + + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + temperature_display_units: + allOf: + - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' + description: |- + Unit system to use when displaying temperature data. + + * `f` - Fahrenheit + * `c` - Celsius + timezone: + allOf: + - $ref: '#/components/schemas/TimezoneEnum' + description: |- + Time zone for this system. + + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Coyhaique` - America/Coyhaique + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + session_timeout_minutes: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Maximum time, in minutes, that a session may be idle (no pours) + before it is considered to be finished. Recommended value is 180. + google_analytics_id: + type: string + nullable: true + description: 'Set to your Google Analytics ID to enable tracking. Example: + UA-XXXX-y' + maxLength: 64 + email_config: + type: string + description: Backend email configuration + pattern: '^(console|smtp|submission|dummy|memory):' + background_image: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + required: + - background_image + - is_setup + - name + - server_version + Stats: + type: object + properties: + time: + type: string + format: date-time + stats: {} + drink_id: + type: integer + readOnly: true + user_id: + type: integer + nullable: true + readOnly: true + keg_id: + type: integer + nullable: true + readOnly: true + session_id: + type: integer + nullable: true + readOnly: true + required: + - drink_id + - keg_id + - session_id + - stats + - user_id + SystemEvent: + type: object + properties: + id: + type: integer + readOnly: true + kind: + allOf: + - $ref: '#/components/schemas/SystemEventKindEnum' + description: |- + Type of event. + + * `drink_poured` - Drink poured + * `session_started` - Session started + * `session_joined` - User joined session + * `keg_tapped` - Keg tapped + * `keg_volume_low` - Keg volume low + * `keg_ended` - Keg ended + time: + type: string + format: date-time + description: Time of the event. + drink: + allOf: + - $ref: '#/components/schemas/Drink' + readOnly: true + user: + allOf: + - $ref: '#/components/schemas/User' + readOnly: true + keg: + allOf: + - $ref: '#/components/schemas/Keg' + readOnly: true + session: + allOf: + - $ref: '#/components/schemas/DrinkingSession' + readOnly: true + required: + - drink + - id + - keg + - kind + - session + - time + - user + SystemEventKindEnum: + enum: + - drink_poured + - session_started + - session_joined + - keg_tapped + - keg_volume_low + - keg_ended + type: string + description: |- + * `drink_poured` - Drink poured + * `session_started` - Session started + * `session_joined` - User joined session + * `keg_tapped` - Keg tapped + * `keg_volume_low` - Keg volume low + * `keg_ended` - Keg ended + SystemStatus: + type: object + description: A summarized system status status, with the most common "current + status" data. + properties: + site: + $ref: '#/components/schemas/KegbotSite' + taps: + type: array + items: + $ref: '#/components/schemas/KegTap' + events: + type: array + items: + $ref: '#/components/schemas/SystemEvent' + required: + - events + - site + - taps + TapAttachKegRequest: + type: object + properties: + keg_id: + type: integer + required: + - keg_id + TapConnectMeterRequest: + type: object + properties: + meter_id: + type: integer + nullable: true + required: + - meter_id + TapConnectThermoRequest: + type: object + properties: + thermo_sensor_id: + type: integer + nullable: true + required: + - thermo_sensor_id + TapConnectToggleRequest: + type: object + properties: + toggle_id: + type: integer + nullable: true + required: + - toggle_id + TapRecordDrinkRequest: + type: object + properties: + volume_ml: + type: number + format: double + minimum: 0.0 + username: + type: string + default: '' + pour_time: + type: string + format: date-time + nullable: true + duration: + type: integer + minimum: 0 + default: 0 + shout: + type: string + default: '' + spilled: + type: boolean + default: false + required: + - volume_ml + TemperatureDisplayUnitsEnum: + enum: + - f + - c + type: string + description: |- + * `f` - Fahrenheit + * `c` - Celsius + ThermoSensor: + type: object + properties: + id: + type: integer + readOnly: true + raw_name: + type: string + maxLength: 256 + nice_name: + type: string + maxLength: 128 + required: + - id + - nice_name + - raw_name + Thermolog: + type: object + properties: + time: + type: string + format: date-time + temp: + type: number + format: double + sensor_id: + type: integer + readOnly: true + required: + - sensor_id + - temp + - time + TimezoneEnum: + enum: + - Africa/Abidjan + - Africa/Accra + - Africa/Addis_Ababa + - Africa/Algiers + - Africa/Asmara + - Africa/Asmera + - Africa/Bamako + - Africa/Bangui + - Africa/Banjul + - Africa/Bissau + - Africa/Blantyre + - Africa/Brazzaville + - Africa/Bujumbura + - Africa/Cairo + - Africa/Casablanca + - Africa/Ceuta + - Africa/Conakry + - Africa/Dakar + - Africa/Dar_es_Salaam + - Africa/Djibouti + - Africa/Douala + - Africa/El_Aaiun + - Africa/Freetown + - Africa/Gaborone + - Africa/Harare + - Africa/Johannesburg + - Africa/Juba + - Africa/Kampala + - Africa/Khartoum + - Africa/Kigali + - Africa/Kinshasa + - Africa/Lagos + - Africa/Libreville + - Africa/Lome + - Africa/Luanda + - Africa/Lubumbashi + - Africa/Lusaka + - Africa/Malabo + - Africa/Maputo + - Africa/Maseru + - Africa/Mbabane + - Africa/Mogadishu + - Africa/Monrovia + - Africa/Nairobi + - Africa/Ndjamena + - Africa/Niamey + - Africa/Nouakchott + - Africa/Ouagadougou + - Africa/Porto-Novo + - Africa/Sao_Tome + - Africa/Timbuktu + - Africa/Tripoli + - Africa/Tunis + - Africa/Windhoek + - America/Adak + - America/Anchorage + - America/Anguilla + - America/Antigua + - America/Araguaina + - America/Argentina/Buenos_Aires + - America/Argentina/Catamarca + - America/Argentina/ComodRivadavia + - America/Argentina/Cordoba + - America/Argentina/Jujuy + - America/Argentina/La_Rioja + - America/Argentina/Mendoza + - America/Argentina/Rio_Gallegos + - America/Argentina/Salta + - America/Argentina/San_Juan + - America/Argentina/San_Luis + - America/Argentina/Tucuman + - America/Argentina/Ushuaia + - America/Aruba + - America/Asuncion + - America/Atikokan + - America/Atka + - America/Bahia + - America/Bahia_Banderas + - America/Barbados + - America/Belem + - America/Belize + - America/Blanc-Sablon + - America/Boa_Vista + - America/Bogota + - America/Boise + - America/Buenos_Aires + - America/Cambridge_Bay + - America/Campo_Grande + - America/Cancun + - America/Caracas + - America/Catamarca + - America/Cayenne + - America/Cayman + - America/Chicago + - America/Chihuahua + - America/Ciudad_Juarez + - America/Coral_Harbour + - America/Cordoba + - America/Costa_Rica + - America/Coyhaique + - America/Creston + - America/Cuiaba + - America/Curacao + - America/Danmarkshavn + - America/Dawson + - America/Dawson_Creek + - America/Denver + - America/Detroit + - America/Dominica + - America/Edmonton + - America/Eirunepe + - America/El_Salvador + - America/Ensenada + - America/Fort_Nelson + - America/Fort_Wayne + - America/Fortaleza + - America/Glace_Bay + - America/Godthab + - America/Goose_Bay + - America/Grand_Turk + - America/Grenada + - America/Guadeloupe + - America/Guatemala + - America/Guayaquil + - America/Guyana + - America/Halifax + - America/Havana + - America/Hermosillo + - America/Indiana/Indianapolis + - America/Indiana/Knox + - America/Indiana/Marengo + - America/Indiana/Petersburg + - America/Indiana/Tell_City + - America/Indiana/Vevay + - America/Indiana/Vincennes + - America/Indiana/Winamac + - America/Indianapolis + - America/Inuvik + - America/Iqaluit + - America/Jamaica + - America/Jujuy + - America/Juneau + - America/Kentucky/Louisville + - America/Kentucky/Monticello + - America/Knox_IN + - America/Kralendijk + - America/La_Paz + - America/Lima + - America/Los_Angeles + - America/Louisville + - America/Lower_Princes + - America/Maceio + - America/Managua + - America/Manaus + - America/Marigot + - America/Martinique + - America/Matamoros + - America/Mazatlan + - America/Mendoza + - America/Menominee + - America/Merida + - America/Metlakatla + - America/Mexico_City + - America/Miquelon + - America/Moncton + - America/Monterrey + - America/Montevideo + - America/Montreal + - America/Montserrat + - America/Nassau + - America/New_York + - America/Nipigon + - America/Nome + - America/Noronha + - America/North_Dakota/Beulah + - America/North_Dakota/Center + - America/North_Dakota/New_Salem + - America/Nuuk + - America/Ojinaga + - America/Panama + - America/Pangnirtung + - America/Paramaribo + - America/Phoenix + - America/Port-au-Prince + - America/Port_of_Spain + - America/Porto_Acre + - America/Porto_Velho + - America/Puerto_Rico + - America/Punta_Arenas + - America/Rainy_River + - America/Rankin_Inlet + - America/Recife + - America/Regina + - America/Resolute + - America/Rio_Branco + - America/Rosario + - America/Santa_Isabel + - America/Santarem + - America/Santiago + - America/Santo_Domingo + - America/Sao_Paulo + - America/Scoresbysund + - America/Shiprock + - America/Sitka + - America/St_Barthelemy + - America/St_Johns + - America/St_Kitts + - America/St_Lucia + - America/St_Thomas + - America/St_Vincent + - America/Swift_Current + - America/Tegucigalpa + - America/Thule + - America/Thunder_Bay + - America/Tijuana + - America/Toronto + - America/Tortola + - America/Vancouver + - America/Virgin + - America/Whitehorse + - America/Winnipeg + - America/Yakutat + - America/Yellowknife + - Antarctica/Casey + - Antarctica/Davis + - Antarctica/DumontDUrville + - Antarctica/Macquarie + - Antarctica/Mawson + - Antarctica/McMurdo + - Antarctica/Palmer + - Antarctica/Rothera + - Antarctica/South_Pole + - Antarctica/Syowa + - Antarctica/Troll + - Antarctica/Vostok + - Arctic/Longyearbyen + - Asia/Aden + - Asia/Almaty + - Asia/Amman + - Asia/Anadyr + - Asia/Aqtau + - Asia/Aqtobe + - Asia/Ashgabat + - Asia/Ashkhabad + - Asia/Atyrau + - Asia/Baghdad + - Asia/Bahrain + - Asia/Baku + - Asia/Bangkok + - Asia/Barnaul + - Asia/Beirut + - Asia/Bishkek + - Asia/Brunei + - Asia/Calcutta + - Asia/Chita + - Asia/Choibalsan + - Asia/Chongqing + - Asia/Chungking + - Asia/Colombo + - Asia/Dacca + - Asia/Damascus + - Asia/Dhaka + - Asia/Dili + - Asia/Dubai + - Asia/Dushanbe + - Asia/Famagusta + - Asia/Gaza + - Asia/Harbin + - Asia/Hebron + - Asia/Ho_Chi_Minh + - Asia/Hong_Kong + - Asia/Hovd + - Asia/Irkutsk + - Asia/Istanbul + - Asia/Jakarta + - Asia/Jayapura + - Asia/Jerusalem + - Asia/Kabul + - Asia/Kamchatka + - Asia/Karachi + - Asia/Kashgar + - Asia/Kathmandu + - Asia/Katmandu + - Asia/Khandyga + - Asia/Kolkata + - Asia/Krasnoyarsk + - Asia/Kuala_Lumpur + - Asia/Kuching + - Asia/Kuwait + - Asia/Macao + - Asia/Macau + - Asia/Magadan + - Asia/Makassar + - Asia/Manila + - Asia/Muscat + - Asia/Nicosia + - Asia/Novokuznetsk + - Asia/Novosibirsk + - Asia/Omsk + - Asia/Oral + - Asia/Phnom_Penh + - Asia/Pontianak + - Asia/Pyongyang + - Asia/Qatar + - Asia/Qostanay + - Asia/Qyzylorda + - Asia/Rangoon + - Asia/Riyadh + - Asia/Saigon + - Asia/Sakhalin + - Asia/Samarkand + - Asia/Seoul + - Asia/Shanghai + - Asia/Singapore + - Asia/Srednekolymsk + - Asia/Taipei + - Asia/Tashkent + - Asia/Tbilisi + - Asia/Tehran + - Asia/Tel_Aviv + - Asia/Thimbu + - Asia/Thimphu + - Asia/Tokyo + - Asia/Tomsk + - Asia/Ujung_Pandang + - Asia/Ulaanbaatar + - Asia/Ulan_Bator + - Asia/Urumqi + - Asia/Ust-Nera + - Asia/Vientiane + - Asia/Vladivostok + - Asia/Yakutsk + - Asia/Yangon + - Asia/Yekaterinburg + - Asia/Yerevan + - Atlantic/Azores + - Atlantic/Bermuda + - Atlantic/Canary + - Atlantic/Cape_Verde + - Atlantic/Faeroe + - Atlantic/Faroe + - Atlantic/Jan_Mayen + - Atlantic/Madeira + - Atlantic/Reykjavik + - Atlantic/South_Georgia + - Atlantic/St_Helena + - Atlantic/Stanley + - Australia/ACT + - Australia/Adelaide + - Australia/Brisbane + - Australia/Broken_Hill + - Australia/Canberra + - Australia/Currie + - Australia/Darwin + - Australia/Eucla + - Australia/Hobart + - Australia/LHI + - Australia/Lindeman + - Australia/Lord_Howe + - Australia/Melbourne + - Australia/NSW + - Australia/North + - Australia/Perth + - Australia/Queensland + - Australia/South + - Australia/Sydney + - Australia/Tasmania + - Australia/Victoria + - Australia/West + - Australia/Yancowinna + - Brazil/Acre + - Brazil/DeNoronha + - Brazil/East + - Brazil/West + - Canada/Atlantic + - Canada/Central + - Canada/Eastern + - Canada/Mountain + - Canada/Newfoundland + - Canada/Pacific + - Canada/Saskatchewan + - Canada/Yukon + - Chile/Continental + - Chile/EasterIsland + - Europe/Amsterdam + - Europe/Andorra + - Europe/Astrakhan + - Europe/Athens + - Europe/Belfast + - Europe/Belgrade + - Europe/Berlin + - Europe/Bratislava + - Europe/Brussels + - Europe/Bucharest + - Europe/Budapest + - Europe/Busingen + - Europe/Chisinau + - Europe/Copenhagen + - Europe/Dublin + - Europe/Gibraltar + - Europe/Guernsey + - Europe/Helsinki + - Europe/Isle_of_Man + - Europe/Istanbul + - Europe/Jersey + - Europe/Kaliningrad + - Europe/Kiev + - Europe/Kirov + - Europe/Kyiv + - Europe/Lisbon + - Europe/Ljubljana + - Europe/London + - Europe/Luxembourg + - Europe/Madrid + - Europe/Malta + - Europe/Mariehamn + - Europe/Minsk + - Europe/Monaco + - Europe/Moscow + - Europe/Nicosia + - Europe/Oslo + - Europe/Paris + - Europe/Podgorica + - Europe/Prague + - Europe/Riga + - Europe/Rome + - Europe/Samara + - Europe/San_Marino + - Europe/Sarajevo + - Europe/Saratov + - Europe/Simferopol + - Europe/Skopje + - Europe/Sofia + - Europe/Stockholm + - Europe/Tallinn + - Europe/Tirane + - Europe/Tiraspol + - Europe/Ulyanovsk + - Europe/Uzhgorod + - Europe/Vaduz + - Europe/Vatican + - Europe/Vienna + - Europe/Vilnius + - Europe/Volgograd + - Europe/Warsaw + - Europe/Zagreb + - Europe/Zaporozhye + - Europe/Zurich + - Indian/Antananarivo + - Indian/Chagos + - Indian/Christmas + - Indian/Cocos + - Indian/Comoro + - Indian/Kerguelen + - Indian/Mahe + - Indian/Maldives + - Indian/Mauritius + - Indian/Mayotte + - Indian/Reunion + - Mexico/BajaNorte + - Mexico/BajaSur + - Mexico/General + - Pacific/Apia + - Pacific/Auckland + - Pacific/Bougainville + - Pacific/Chatham + - Pacific/Chuuk + - Pacific/Easter + - Pacific/Efate + - Pacific/Enderbury + - Pacific/Fakaofo + - Pacific/Fiji + - Pacific/Funafuti + - Pacific/Galapagos + - Pacific/Gambier + - Pacific/Guadalcanal + - Pacific/Guam + - Pacific/Honolulu + - Pacific/Johnston + - Pacific/Kanton + - Pacific/Kiritimati + - Pacific/Kosrae + - Pacific/Kwajalein + - Pacific/Majuro + - Pacific/Marquesas + - Pacific/Midway + - Pacific/Nauru + - Pacific/Niue + - Pacific/Norfolk + - Pacific/Noumea + - Pacific/Pago_Pago + - Pacific/Palau + - Pacific/Pitcairn + - Pacific/Pohnpei + - Pacific/Ponape + - Pacific/Port_Moresby + - Pacific/Rarotonga + - Pacific/Saipan + - Pacific/Samoa + - Pacific/Tahiti + - Pacific/Tarawa + - Pacific/Tongatapu + - Pacific/Truk + - Pacific/Wake + - Pacific/Wallis + - Pacific/Yap + - US/Alaska + - US/Aleutian + - US/Arizona + - US/Central + - US/East-Indiana + - US/Eastern + - US/Hawaii + - US/Indiana-Starke + - US/Michigan + - US/Mountain + - US/Pacific + - US/Samoa + - UTC + type: string + description: |- + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Coyhaique` - America/Coyhaique + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + User: + type: object + properties: + id: + type: integer + readOnly: true + username: + type: string + description: Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ + characters + pattern: ^[\w.@+-]+$ + maxLength: 30 + display_name: + type: string + description: Full name, will be shown in some places instead of username + maxLength: 127 + is_staff: + type: boolean + readOnly: true + title: Staff status + description: Designates whether the user can log into this admin site. + is_active: + type: boolean + readOnly: true + title: Active + description: Designates whether this user should be treated as active. Unselect + this instead of deleting accounts. + picture: + allOf: + - $ref: '#/components/schemas/Picture' + readOnly: true + required: + - id + - is_active + - is_staff + - picture + - username + VolumeDisplayUnitsEnum: + enum: + - metric + - imperial + type: string + description: |- + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + securitySchemes: + apiKeyBasicAuth: + type: http + scheme: basic + description: Use "api" as the username and an API key as the password. + cookieAuth: + type: apiKey + in: cookie + name: sessionid From 5d613def4b764e3334f4fcf561353f07c0dd830e Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:50:35 +0000 Subject: [PATCH 13/48] web-ui: scaffold the react frontend Adds the bun + vite + react + MUI + TypeScript + Biome toolchain, with configs at the repo root and all frontend source under web-ui/: - vite dev server proxies /api, /media, and /static to Django, so development is same-origin with hot reload (bun run dev + kegbot runserver, two processes) - generated, committed API client (bun run generate-api: drf-spectacular schema at web-ui/schema.yaml -> @hey-api/openapi-ts into web-ui/api/, excluded from linting) - lib/api.ts configures the client (same-origin cookies + X-CSRFToken from the csrftoken cookie) and normalizes DRF field errors - lib/use-async-data.ts: {data, loading, error, reload} hook with optional polling and deps-driven refetch, plus bun test + happy-dom + testing-library coverage - app shell: stock MUI theme, splat data-router wrapping a classic tree, main/minimal layouts, placeholder home view - imports are root-relative via the @/ alias; parent-relative imports are a Biome error --- .gitignore | 3 + biome.json | 56 + bun.lockb | Bin 0 -> 118692 bytes bunfig.toml | 2 + openapi-ts.config.ts | 9 + package.json | 37 + tsconfig.json | 22 + vite.config.ts | 32 + web-ui/api/client.gen.ts | 16 + web-ui/api/client/client.gen.ts | 199 + web-ui/api/client/index.ts | 25 + web-ui/api/client/types.gen.ts | 232 + web-ui/api/client/utils.gen.ts | 440 ++ web-ui/api/core/auth.gen.ts | 42 + web-ui/api/core/bodySerializer.gen.ts | 92 + web-ui/api/core/params.gen.ts | 153 + web-ui/api/core/pathSerializer.gen.ts | 181 + web-ui/api/core/types.gen.ts | 120 + web-ui/api/index.ts | 3 + web-ui/api/sdk.gen.ts | 3514 ++++++++++ web-ui/api/types.gen.ts | 9250 +++++++++++++++++++++++++ web-ui/app.tsx | 19 + web-ui/index.html | 12 + web-ui/layout/main-layout.tsx | 28 + web-ui/layout/minimal-layout.tsx | 14 + web-ui/lib/api.ts | 75 + web-ui/lib/use-async-data.ts | 81 + web-ui/main.tsx | 9 + web-ui/routes.tsx | 13 + web-ui/{api => }/schema.yaml | 0 web-ui/test/setup.ts | 3 + web-ui/test/use-async-data.test.tsx | 51 + web-ui/theme/theme.ts | 5 + web-ui/views/home-view.tsx | 5 + 34 files changed, 14743 insertions(+) create mode 100644 biome.json create mode 100755 bun.lockb create mode 100644 bunfig.toml create mode 100644 openapi-ts.config.ts create mode 100644 package.json create mode 100644 tsconfig.json create mode 100644 vite.config.ts create mode 100644 web-ui/api/client.gen.ts create mode 100644 web-ui/api/client/client.gen.ts create mode 100644 web-ui/api/client/index.ts create mode 100644 web-ui/api/client/types.gen.ts create mode 100644 web-ui/api/client/utils.gen.ts create mode 100644 web-ui/api/core/auth.gen.ts create mode 100644 web-ui/api/core/bodySerializer.gen.ts create mode 100644 web-ui/api/core/params.gen.ts create mode 100644 web-ui/api/core/pathSerializer.gen.ts create mode 100644 web-ui/api/core/types.gen.ts create mode 100644 web-ui/api/index.ts create mode 100644 web-ui/api/sdk.gen.ts create mode 100644 web-ui/api/types.gen.ts create mode 100644 web-ui/app.tsx create mode 100644 web-ui/index.html create mode 100644 web-ui/layout/main-layout.tsx create mode 100644 web-ui/layout/minimal-layout.tsx create mode 100644 web-ui/lib/api.ts create mode 100644 web-ui/lib/use-async-data.ts create mode 100644 web-ui/main.tsx create mode 100644 web-ui/routes.tsx rename web-ui/{api => }/schema.yaml (100%) create mode 100644 web-ui/test/setup.ts create mode 100644 web-ui/test/use-async-data.test.tsx create mode 100644 web-ui/theme/theme.ts create mode 100644 web-ui/views/home-view.tsx diff --git a/.gitignore b/.gitignore index 6158c700f..10de10d69 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,7 @@ build dist test-db.sqlite +### frontend +node_modules/ + /tmp diff --git a/biome.json b/biome.json new file mode 100644 index 000000000..647b60481 --- /dev/null +++ b/biome.json @@ -0,0 +1,56 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.0/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "includes": [ + "web-ui/**", + "vite.config.ts", + "openapi-ts.config.ts", + "!web-ui/api/**", + "!web-ui/dist/**", + "!web-ui/lib/shared-constants.ts" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "noUnusedImports": "error", + "noUnusedVariables": "error", + "useExhaustiveDependencies": "off" + }, + "style": { + "noRestrictedImports": { + "level": "error", + "options": { + "patterns": [ + { + "group": ["../*", "./../*"], + "message": "Use @/ root-relative imports instead of parent-relative paths." + } + ] + } + } + } + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + } +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..1828f64171ccd284541aed91a5f47a25c0248144 GIT binary patch literal 118692 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 PRWgIpKS=R^_}~8k-suP- literal 0 HcmV?d00001 diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 000000000..d4f7f0242 --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,2 @@ +[test] +preload = ["./web-ui/test/setup.ts"] diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts new file mode 100644 index 000000000..6b81f07d4 --- /dev/null +++ b/openapi-ts.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "@hey-api/openapi-ts"; + +export default defineConfig({ + // The ./ prefix matters: a bare "a/b" path parses as a Hey API + // platform shorthand and crashes the generator. + input: "./web-ui/schema.yaml", + output: "web-ui/api", + plugins: ["@hey-api/client-fetch"], +}); diff --git a/package.json b/package.json new file mode 100644 index 000000000..2f230356e --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "kegbot-server-ui", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "test": "bun test web-ui/", + "typecheck": "tsc --noEmit", + "check": "biome check web-ui && tsc --noEmit", + "format": "biome format --write web-ui", + "generate-api": "uv run python bin/kegbot spectacular --file web-ui/schema.yaml && openapi-ts", + "generate-constants": "uv run python bin/kegbot print_constants" + }, + "dependencies": { + "@emotion/react": "^11", + "@emotion/styled": "^11", + "@mui/icons-material": "^9", + "@mui/material": "^9", + "@mui/x-charts": "^9", + "react": "^19", + "react-dom": "^19", + "react-router": "^8" + }, + "devDependencies": { + "@biomejs/biome": "^2", + "@happy-dom/global-registrator": "^18", + "@hey-api/openapi-ts": "^0.80", + "@testing-library/react": "^16", + "@types/bun": "^1", + "@types/react": "^19", + "@types/react-dom": "^19", + "@vitejs/plugin-react": "^4", + "typescript": "^5", + "vite": "^7" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..135ff188d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true, + "noEmit": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "baseUrl": ".", + "paths": { + "@/*": ["web-ui/*"] + } + }, + "include": ["web-ui", "vite.config.ts", "openapi-ts.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 000000000..ef9188167 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,32 @@ +import { fileURLToPath } from "node:url"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; + +// All frontend source lives in web-ui/; tooling configs live at the repo +// root. In development the vite server is the only origin the browser +// talks to: backend paths are proxied to Django, so requests stay +// same-origin (no CSRF/CORS special-casing) and hot reload just works. +const DJANGO = "http://localhost:8000"; + +export default defineConfig({ + root: "web-ui", + plugins: [react()], + resolve: { + alias: { + "@": fileURLToPath(new URL("./web-ui", import.meta.url)), + }, + }, + server: { + port: 5173, + proxy: { + "/api": DJANGO, + "/media": DJANGO, + "/static": DJANGO, + }, + }, + build: { + outDir: "dist", + emptyOutDir: true, + manifest: true, + }, +}); diff --git a/web-ui/api/client.gen.ts b/web-ui/api/client.gen.ts new file mode 100644 index 000000000..163da4e54 --- /dev/null +++ b/web-ui/api/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from './client'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/web-ui/api/client/client.gen.ts b/web-ui/api/client/client.gen.ts new file mode 100644 index 000000000..0c606b81c --- /dev/null +++ b/web-ui/api/client/client.gen.ts @@ -0,0 +1,199 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Client, Config, ResolvedRequestOptions } from './types.gen'; +import { + buildUrl, + createConfig, + createInterceptors, + getParseAs, + mergeConfigs, + mergeHeaders, + setAuthParams, +} from './utils.gen'; + +type ReqInit = Omit & { + body?: any; + headers: ReturnType; +}; + +export const createClient = (config: Config = {}): Client => { + let _config = mergeConfigs(createConfig(), config); + + const getConfig = (): Config => ({ ..._config }); + + const setConfig = (config: Config): Config => { + _config = mergeConfigs(_config, config); + return getConfig(); + }; + + const interceptors = createInterceptors< + Request, + Response, + unknown, + ResolvedRequestOptions + >(); + + const request: Client['request'] = async (options) => { + const opts = { + ..._config, + ...options, + fetch: options.fetch ?? _config.fetch ?? globalThis.fetch, + headers: mergeHeaders(_config.headers, options.headers), + serializedBody: undefined, + }; + + if (opts.security) { + await setAuthParams({ + ...opts, + security: opts.security, + }); + } + + if (opts.requestValidator) { + await opts.requestValidator(opts); + } + + if (opts.body && opts.bodySerializer) { + opts.serializedBody = opts.bodySerializer(opts.body); + } + + // remove Content-Type header if body is empty to avoid sending invalid requests + if (opts.serializedBody === undefined || opts.serializedBody === '') { + opts.headers.delete('Content-Type'); + } + + const url = buildUrl(opts); + const requestInit: ReqInit = { + redirect: 'follow', + ...opts, + body: opts.serializedBody, + }; + + let request = new Request(url, requestInit); + + for (const fn of interceptors.request._fns) { + if (fn) { + request = await fn(request, opts); + } + } + + // fetch must be assigned here, otherwise it would throw the error: + // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation + const _fetch = opts.fetch!; + let response = await _fetch(request); + + for (const fn of interceptors.response._fns) { + if (fn) { + response = await fn(response, request, opts); + } + } + + const result = { + request, + response, + }; + + if (response.ok) { + if ( + response.status === 204 || + response.headers.get('Content-Length') === '0' + ) { + return opts.responseStyle === 'data' + ? {} + : { + data: {}, + ...result, + }; + } + + const parseAs = + (opts.parseAs === 'auto' + ? getParseAs(response.headers.get('Content-Type')) + : opts.parseAs) ?? 'json'; + + let data: any; + switch (parseAs) { + case 'arrayBuffer': + case 'blob': + case 'formData': + case 'json': + case 'text': + data = await response[parseAs](); + break; + case 'stream': + return opts.responseStyle === 'data' + ? response.body + : { + data: response.body, + ...result, + }; + } + + if (parseAs === 'json') { + if (opts.responseValidator) { + await opts.responseValidator(data); + } + + if (opts.responseTransformer) { + data = await opts.responseTransformer(data); + } + } + + return opts.responseStyle === 'data' + ? data + : { + data, + ...result, + }; + } + + const textError = await response.text(); + let jsonError: unknown; + + try { + jsonError = JSON.parse(textError); + } catch { + // noop + } + + const error = jsonError ?? textError; + let finalError = error; + + for (const fn of interceptors.error._fns) { + if (fn) { + finalError = (await fn(error, response, request, opts)) as string; + } + } + + finalError = finalError || ({} as string); + + if (opts.throwOnError) { + throw finalError; + } + + // TODO: we probably want to return error and improve types + return opts.responseStyle === 'data' + ? undefined + : { + error: finalError, + ...result, + }; + }; + + return { + buildUrl, + connect: (options) => request({ ...options, method: 'CONNECT' }), + delete: (options) => request({ ...options, method: 'DELETE' }), + get: (options) => request({ ...options, method: 'GET' }), + getConfig, + head: (options) => request({ ...options, method: 'HEAD' }), + interceptors, + options: (options) => request({ ...options, method: 'OPTIONS' }), + patch: (options) => request({ ...options, method: 'PATCH' }), + post: (options) => request({ ...options, method: 'POST' }), + put: (options) => request({ ...options, method: 'PUT' }), + request, + setConfig, + trace: (options) => request({ ...options, method: 'TRACE' }), + }; +}; diff --git a/web-ui/api/client/index.ts b/web-ui/api/client/index.ts new file mode 100644 index 000000000..318a84b6a --- /dev/null +++ b/web-ui/api/client/index.ts @@ -0,0 +1,25 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type { Auth } from '../core/auth.gen'; +export type { QuerySerializerOptions } from '../core/bodySerializer.gen'; +export { + formDataBodySerializer, + jsonBodySerializer, + urlSearchParamsBodySerializer, +} from '../core/bodySerializer.gen'; +export { buildClientParams } from '../core/params.gen'; +export { createClient } from './client.gen'; +export type { + Client, + ClientOptions, + Config, + CreateClientConfig, + Options, + OptionsLegacyParser, + RequestOptions, + RequestResult, + ResolvedRequestOptions, + ResponseStyle, + TDataShape, +} from './types.gen'; +export { createConfig, mergeHeaders } from './utils.gen'; diff --git a/web-ui/api/client/types.gen.ts b/web-ui/api/client/types.gen.ts new file mode 100644 index 000000000..2a123be9a --- /dev/null +++ b/web-ui/api/client/types.gen.ts @@ -0,0 +1,232 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Auth } from '../core/auth.gen'; +import type { + Client as CoreClient, + Config as CoreConfig, +} from '../core/types.gen'; +import type { Middleware } from './utils.gen'; + +export type ResponseStyle = 'data' | 'fields'; + +export interface Config + extends Omit, + CoreConfig { + /** + * Base URL for all requests made by this client. + */ + baseUrl?: T['baseUrl']; + /** + * Fetch API implementation. You can use this option to provide a custom + * fetch instance. + * + * @default globalThis.fetch + */ + fetch?: (request: Request) => ReturnType; + /** + * Please don't use the Fetch client for Next.js applications. The `next` + * options won't have any effect. + * + * Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead. + */ + next?: never; + /** + * Return the response data parsed in a specified format. By default, `auto` + * will infer the appropriate method from the `Content-Type` response header. + * You can override this behavior with any of the {@link Body} methods. + * Select `stream` if you don't want to parse response data at all. + * + * @default 'auto' + */ + parseAs?: + | 'arrayBuffer' + | 'auto' + | 'blob' + | 'formData' + | 'json' + | 'stream' + | 'text'; + /** + * Should we return only data or multiple fields (data, error, response, etc.)? + * + * @default 'fields' + */ + responseStyle?: ResponseStyle; + /** + * Throw an error instead of returning it in the response? + * + * @default false + */ + throwOnError?: T['throwOnError']; +} + +export interface RequestOptions< + TResponseStyle extends ResponseStyle = 'fields', + ThrowOnError extends boolean = boolean, + Url extends string = string, +> extends Config<{ + responseStyle: TResponseStyle; + throwOnError: ThrowOnError; + }> { + /** + * Any body that you want to add to your request. + * + * {@link https://developer.mozilla.org/docs/Web/API/fetch#body} + */ + body?: unknown; + path?: Record; + query?: Record; + /** + * Security mechanism(s) to use for the request. + */ + security?: ReadonlyArray; + url: Url; +} + +export interface ResolvedRequestOptions< + TResponseStyle extends ResponseStyle = 'fields', + ThrowOnError extends boolean = boolean, + Url extends string = string, +> extends RequestOptions { + serializedBody?: string; +} + +export type RequestResult< + TData = unknown, + TError = unknown, + ThrowOnError extends boolean = boolean, + TResponseStyle extends ResponseStyle = 'fields', +> = ThrowOnError extends true + ? Promise< + TResponseStyle extends 'data' + ? TData extends Record + ? TData[keyof TData] + : TData + : { + data: TData extends Record + ? TData[keyof TData] + : TData; + request: Request; + response: Response; + } + > + : Promise< + TResponseStyle extends 'data' + ? + | (TData extends Record + ? TData[keyof TData] + : TData) + | undefined + : ( + | { + data: TData extends Record + ? TData[keyof TData] + : TData; + error: undefined; + } + | { + data: undefined; + error: TError extends Record + ? TError[keyof TError] + : TError; + } + ) & { + request: Request; + response: Response; + } + >; + +export interface ClientOptions { + baseUrl?: string; + responseStyle?: ResponseStyle; + throwOnError?: boolean; +} + +type MethodFn = < + TData = unknown, + TError = unknown, + ThrowOnError extends boolean = false, + TResponseStyle extends ResponseStyle = 'fields', +>( + options: Omit, 'method'>, +) => RequestResult; + +type RequestFn = < + TData = unknown, + TError = unknown, + ThrowOnError extends boolean = false, + TResponseStyle extends ResponseStyle = 'fields', +>( + options: Omit, 'method'> & + Pick>, 'method'>, +) => RequestResult; + +type BuildUrlFn = < + TData extends { + body?: unknown; + path?: Record; + query?: Record; + url: string; + }, +>( + options: Pick & Options, +) => string; + +export type Client = CoreClient & { + interceptors: Middleware; +}; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = ( + override?: Config, +) => Config & T>; + +export interface TDataShape { + body?: unknown; + headers?: unknown; + path?: unknown; + query?: unknown; + url: string; +} + +type OmitKeys = Pick>; + +export type Options< + TData extends TDataShape = TDataShape, + ThrowOnError extends boolean = boolean, + TResponseStyle extends ResponseStyle = 'fields', +> = OmitKeys< + RequestOptions, + 'body' | 'path' | 'query' | 'url' +> & + Omit; + +export type OptionsLegacyParser< + TData = unknown, + ThrowOnError extends boolean = boolean, + TResponseStyle extends ResponseStyle = 'fields', +> = TData extends { body?: any } + ? TData extends { headers?: any } + ? OmitKeys< + RequestOptions, + 'body' | 'headers' | 'url' + > & + TData + : OmitKeys, 'body' | 'url'> & + TData & + Pick, 'headers'> + : TData extends { headers?: any } + ? OmitKeys< + RequestOptions, + 'headers' | 'url' + > & + TData & + Pick, 'body'> + : OmitKeys, 'url'> & TData; diff --git a/web-ui/api/client/utils.gen.ts b/web-ui/api/client/utils.gen.ts new file mode 100644 index 000000000..1ee09c6db --- /dev/null +++ b/web-ui/api/client/utils.gen.ts @@ -0,0 +1,440 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { getAuthToken } from '../core/auth.gen'; +import type { + QuerySerializer, + QuerySerializerOptions, +} from '../core/bodySerializer.gen'; +import { jsonBodySerializer } from '../core/bodySerializer.gen'; +import { + serializeArrayParam, + serializeObjectParam, + serializePrimitiveParam, +} from '../core/pathSerializer.gen'; +import type { Client, ClientOptions, Config, RequestOptions } from './types.gen'; + +interface PathSerializer { + path: Record; + url: string; +} + +const PATH_PARAM_RE = /\{[^{}]+\}/g; + +type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited'; +type MatrixStyle = 'label' | 'matrix' | 'simple'; +type ArraySeparatorStyle = ArrayStyle | MatrixStyle; + +const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => { + let url = _url; + const matches = _url.match(PATH_PARAM_RE); + if (matches) { + for (const match of matches) { + let explode = false; + let name = match.substring(1, match.length - 1); + let style: ArraySeparatorStyle = 'simple'; + + if (name.endsWith('*')) { + explode = true; + name = name.substring(0, name.length - 1); + } + + if (name.startsWith('.')) { + name = name.substring(1); + style = 'label'; + } else if (name.startsWith(';')) { + name = name.substring(1); + style = 'matrix'; + } + + const value = path[name]; + + if (value === undefined || value === null) { + continue; + } + + if (Array.isArray(value)) { + url = url.replace( + match, + serializeArrayParam({ explode, name, style, value }), + ); + continue; + } + + if (typeof value === 'object') { + url = url.replace( + match, + serializeObjectParam({ + explode, + name, + style, + value: value as Record, + valueOnly: true, + }), + ); + continue; + } + + if (style === 'matrix') { + url = url.replace( + match, + `;${serializePrimitiveParam({ + name, + value: value as string, + })}`, + ); + continue; + } + + const replaceValue = encodeURIComponent( + style === 'label' ? `.${value as string}` : (value as string), + ); + url = url.replace(match, replaceValue); + } + } + return url; +}; + +export const createQuerySerializer = ({ + allowReserved, + array, + object, +}: QuerySerializerOptions = {}) => { + const querySerializer = (queryParams: T) => { + const search: string[] = []; + if (queryParams && typeof queryParams === 'object') { + for (const name in queryParams) { + const value = queryParams[name]; + + if (value === undefined || value === null) { + continue; + } + + if (Array.isArray(value)) { + const serializedArray = serializeArrayParam({ + allowReserved, + explode: true, + name, + style: 'form', + value, + ...array, + }); + if (serializedArray) search.push(serializedArray); + } else if (typeof value === 'object') { + const serializedObject = serializeObjectParam({ + allowReserved, + explode: true, + name, + style: 'deepObject', + value: value as Record, + ...object, + }); + if (serializedObject) search.push(serializedObject); + } else { + const serializedPrimitive = serializePrimitiveParam({ + allowReserved, + name, + value: value as string, + }); + if (serializedPrimitive) search.push(serializedPrimitive); + } + } + } + return search.join('&'); + }; + return querySerializer; +}; + +/** + * Infers parseAs value from provided Content-Type header. + */ +export const getParseAs = ( + contentType: string | null, +): Exclude => { + if (!contentType) { + // If no Content-Type header is provided, the best we can do is return the raw response body, + // which is effectively the same as the 'stream' option. + return 'stream'; + } + + const cleanContent = contentType.split(';')[0]?.trim(); + + if (!cleanContent) { + return; + } + + if ( + cleanContent.startsWith('application/json') || + cleanContent.endsWith('+json') + ) { + return 'json'; + } + + if (cleanContent === 'multipart/form-data') { + return 'formData'; + } + + if ( + ['application/', 'audio/', 'image/', 'video/'].some((type) => + cleanContent.startsWith(type), + ) + ) { + return 'blob'; + } + + if (cleanContent.startsWith('text/')) { + return 'text'; + } + + return; +}; + +const checkForExistence = ( + options: Pick & { + headers: Headers; + }, + name?: string, +): boolean => { + if (!name) { + return false; + } + if ( + options.headers.has(name) || + options.query?.[name] || + options.headers.get('Cookie')?.includes(`${name}=`) + ) { + return true; + } + return false; +}; + +export const setAuthParams = async ({ + security, + ...options +}: Pick, 'security'> & + Pick & { + headers: Headers; + }) => { + for (const auth of security) { + if (checkForExistence(options, auth.name)) { + continue; + } + + const token = await getAuthToken(auth, options.auth); + + if (!token) { + continue; + } + + const name = auth.name ?? 'Authorization'; + + switch (auth.in) { + case 'query': + if (!options.query) { + options.query = {}; + } + options.query[name] = token; + break; + case 'cookie': + options.headers.append('Cookie', `${name}=${token}`); + break; + case 'header': + default: + options.headers.set(name, token); + break; + } + } +}; + +export const buildUrl: Client['buildUrl'] = (options) => { + const url = getUrl({ + baseUrl: options.baseUrl as string, + path: options.path, + query: options.query, + querySerializer: + typeof options.querySerializer === 'function' + ? options.querySerializer + : createQuerySerializer(options.querySerializer), + url: options.url, + }); + return url; +}; + +export const getUrl = ({ + baseUrl, + path, + query, + querySerializer, + url: _url, +}: { + baseUrl?: string; + path?: Record; + query?: Record; + querySerializer: QuerySerializer; + url: string; +}) => { + const pathUrl = _url.startsWith('/') ? _url : `/${_url}`; + let url = (baseUrl ?? '') + pathUrl; + if (path) { + url = defaultPathSerializer({ path, url }); + } + let search = query ? querySerializer(query) : ''; + if (search.startsWith('?')) { + search = search.substring(1); + } + if (search) { + url += `?${search}`; + } + return url; +}; + +export const mergeConfigs = (a: Config, b: Config): Config => { + const config = { ...a, ...b }; + if (config.baseUrl?.endsWith('/')) { + config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1); + } + config.headers = mergeHeaders(a.headers, b.headers); + return config; +}; + +export const mergeHeaders = ( + ...headers: Array['headers'] | undefined> +): Headers => { + const mergedHeaders = new Headers(); + for (const header of headers) { + if (!header || typeof header !== 'object') { + continue; + } + + const iterator = + header instanceof Headers ? header.entries() : Object.entries(header); + + for (const [key, value] of iterator) { + if (value === null) { + mergedHeaders.delete(key); + } else if (Array.isArray(value)) { + for (const v of value) { + mergedHeaders.append(key, v as string); + } + } else if (value !== undefined) { + // assume object headers are meant to be JSON stringified, i.e. their + // content value in OpenAPI specification is 'application/json' + mergedHeaders.set( + key, + typeof value === 'object' ? JSON.stringify(value) : (value as string), + ); + } + } + } + return mergedHeaders; +}; + +type ErrInterceptor = ( + error: Err, + response: Res, + request: Req, + options: Options, +) => Err | Promise; + +type ReqInterceptor = ( + request: Req, + options: Options, +) => Req | Promise; + +type ResInterceptor = ( + response: Res, + request: Req, + options: Options, +) => Res | Promise; + +class Interceptors { + _fns: (Interceptor | null)[]; + + constructor() { + this._fns = []; + } + + clear() { + this._fns = []; + } + + getInterceptorIndex(id: number | Interceptor): number { + if (typeof id === 'number') { + return this._fns[id] ? id : -1; + } else { + return this._fns.indexOf(id); + } + } + exists(id: number | Interceptor) { + const index = this.getInterceptorIndex(id); + return !!this._fns[index]; + } + + eject(id: number | Interceptor) { + const index = this.getInterceptorIndex(id); + if (this._fns[index]) { + this._fns[index] = null; + } + } + + update(id: number | Interceptor, fn: Interceptor) { + const index = this.getInterceptorIndex(id); + if (this._fns[index]) { + this._fns[index] = fn; + return id; + } else { + return false; + } + } + + use(fn: Interceptor) { + this._fns = [...this._fns, fn]; + return this._fns.length - 1; + } +} + +// `createInterceptors()` response, meant for external use as it does not +// expose internals +export interface Middleware { + error: Pick< + Interceptors>, + 'eject' | 'use' + >; + request: Pick>, 'eject' | 'use'>; + response: Pick< + Interceptors>, + 'eject' | 'use' + >; +} + +// do not add `Middleware` as return type so we can use _fns internally +export const createInterceptors = () => ({ + error: new Interceptors>(), + request: new Interceptors>(), + response: new Interceptors>(), +}); + +const defaultQuerySerializer = createQuerySerializer({ + allowReserved: false, + array: { + explode: true, + style: 'form', + }, + object: { + explode: true, + style: 'deepObject', + }, +}); + +const defaultHeaders = { + 'Content-Type': 'application/json', +}; + +export const createConfig = ( + override: Config & T> = {}, +): Config & T> => ({ + ...jsonBodySerializer, + headers: defaultHeaders, + parseAs: 'auto', + querySerializer: defaultQuerySerializer, + ...override, +}); diff --git a/web-ui/api/core/auth.gen.ts b/web-ui/api/core/auth.gen.ts new file mode 100644 index 000000000..f8a73266f --- /dev/null +++ b/web-ui/api/core/auth.gen.ts @@ -0,0 +1,42 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type AuthToken = string | undefined; + +export interface Auth { + /** + * Which part of the request do we use to send the auth? + * + * @default 'header' + */ + in?: 'header' | 'query' | 'cookie'; + /** + * Header or query parameter name. + * + * @default 'Authorization' + */ + name?: string; + scheme?: 'basic' | 'bearer'; + type: 'apiKey' | 'http'; +} + +export const getAuthToken = async ( + auth: Auth, + callback: ((auth: Auth) => Promise | AuthToken) | AuthToken, +): Promise => { + const token = + typeof callback === 'function' ? await callback(auth) : callback; + + if (!token) { + return; + } + + if (auth.scheme === 'bearer') { + return `Bearer ${token}`; + } + + if (auth.scheme === 'basic') { + return `Basic ${btoa(token)}`; + } + + return token; +}; diff --git a/web-ui/api/core/bodySerializer.gen.ts b/web-ui/api/core/bodySerializer.gen.ts new file mode 100644 index 000000000..49cd8925e --- /dev/null +++ b/web-ui/api/core/bodySerializer.gen.ts @@ -0,0 +1,92 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { + ArrayStyle, + ObjectStyle, + SerializerOptions, +} from './pathSerializer.gen'; + +export type QuerySerializer = (query: Record) => string; + +export type BodySerializer = (body: any) => any; + +export interface QuerySerializerOptions { + allowReserved?: boolean; + array?: SerializerOptions; + object?: SerializerOptions; +} + +const serializeFormDataPair = ( + data: FormData, + key: string, + value: unknown, +): void => { + if (typeof value === 'string' || value instanceof Blob) { + data.append(key, value); + } else if (value instanceof Date) { + data.append(key, value.toISOString()); + } else { + data.append(key, JSON.stringify(value)); + } +}; + +const serializeUrlSearchParamsPair = ( + data: URLSearchParams, + key: string, + value: unknown, +): void => { + if (typeof value === 'string') { + data.append(key, value); + } else { + data.append(key, JSON.stringify(value)); + } +}; + +export const formDataBodySerializer = { + bodySerializer: | Array>>( + body: T, + ): FormData => { + const data = new FormData(); + + Object.entries(body).forEach(([key, value]) => { + if (value === undefined || value === null) { + return; + } + if (Array.isArray(value)) { + value.forEach((v) => serializeFormDataPair(data, key, v)); + } else { + serializeFormDataPair(data, key, value); + } + }); + + return data; + }, +}; + +export const jsonBodySerializer = { + bodySerializer: (body: T): string => + JSON.stringify(body, (_key, value) => + typeof value === 'bigint' ? value.toString() : value, + ), +}; + +export const urlSearchParamsBodySerializer = { + bodySerializer: | Array>>( + body: T, + ): string => { + const data = new URLSearchParams(); + + Object.entries(body).forEach(([key, value]) => { + if (value === undefined || value === null) { + return; + } + if (Array.isArray(value)) { + value.forEach((v) => serializeUrlSearchParamsPair(data, key, v)); + } else { + serializeUrlSearchParamsPair(data, key, value); + } + }); + + return data.toString(); + }, +}; diff --git a/web-ui/api/core/params.gen.ts b/web-ui/api/core/params.gen.ts new file mode 100644 index 000000000..71c88e852 --- /dev/null +++ b/web-ui/api/core/params.gen.ts @@ -0,0 +1,153 @@ +// This file is auto-generated by @hey-api/openapi-ts + +type Slot = 'body' | 'headers' | 'path' | 'query'; + +export type Field = + | { + in: Exclude; + /** + * Field name. This is the name we want the user to see and use. + */ + key: string; + /** + * Field mapped name. This is the name we want to use in the request. + * If omitted, we use the same value as `key`. + */ + map?: string; + } + | { + in: Extract; + /** + * Key isn't required for bodies. + */ + key?: string; + map?: string; + }; + +export interface Fields { + allowExtra?: Partial>; + args?: ReadonlyArray; +} + +export type FieldsConfig = ReadonlyArray; + +const extraPrefixesMap: Record = { + $body_: 'body', + $headers_: 'headers', + $path_: 'path', + $query_: 'query', +}; +const extraPrefixes = Object.entries(extraPrefixesMap); + +type KeyMap = Map< + string, + { + in: Slot; + map?: string; + } +>; + +const buildKeyMap = (fields: FieldsConfig, map?: KeyMap): KeyMap => { + if (!map) { + map = new Map(); + } + + for (const config of fields) { + if ('in' in config) { + if (config.key) { + map.set(config.key, { + in: config.in, + map: config.map, + }); + } + } else if (config.args) { + buildKeyMap(config.args, map); + } + } + + return map; +}; + +interface Params { + body: unknown; + headers: Record; + path: Record; + query: Record; +} + +const stripEmptySlots = (params: Params) => { + for (const [slot, value] of Object.entries(params)) { + if (value && typeof value === 'object' && !Object.keys(value).length) { + delete params[slot as Slot]; + } + } +}; + +export const buildClientParams = ( + args: ReadonlyArray, + fields: FieldsConfig, +) => { + const params: Params = { + body: {}, + headers: {}, + path: {}, + query: {}, + }; + + const map = buildKeyMap(fields); + + let config: FieldsConfig[number] | undefined; + + for (const [index, arg] of args.entries()) { + if (fields[index]) { + config = fields[index]; + } + + if (!config) { + continue; + } + + if ('in' in config) { + if (config.key) { + const field = map.get(config.key)!; + const name = field.map || config.key; + (params[field.in] as Record)[name] = arg; + } else { + params.body = arg; + } + } else { + for (const [key, value] of Object.entries(arg ?? {})) { + const field = map.get(key); + + if (field) { + const name = field.map || key; + (params[field.in] as Record)[name] = value; + } else { + const extra = extraPrefixes.find(([prefix]) => + key.startsWith(prefix), + ); + + if (extra) { + const [prefix, slot] = extra; + (params[slot] as Record)[ + key.slice(prefix.length) + ] = value; + } else { + for (const [slot, allowed] of Object.entries( + config.allowExtra ?? {}, + )) { + if (allowed) { + (params[slot as Slot] as Record)[key] = value; + break; + } + } + } + } + } + } + } + + stripEmptySlots(params); + + return params; +}; diff --git a/web-ui/api/core/pathSerializer.gen.ts b/web-ui/api/core/pathSerializer.gen.ts new file mode 100644 index 000000000..8d9993104 --- /dev/null +++ b/web-ui/api/core/pathSerializer.gen.ts @@ -0,0 +1,181 @@ +// This file is auto-generated by @hey-api/openapi-ts + +interface SerializeOptions + extends SerializePrimitiveOptions, + SerializerOptions {} + +interface SerializePrimitiveOptions { + allowReserved?: boolean; + name: string; +} + +export interface SerializerOptions { + /** + * @default true + */ + explode: boolean; + style: T; +} + +export type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited'; +export type ArraySeparatorStyle = ArrayStyle | MatrixStyle; +type MatrixStyle = 'label' | 'matrix' | 'simple'; +export type ObjectStyle = 'form' | 'deepObject'; +type ObjectSeparatorStyle = ObjectStyle | MatrixStyle; + +interface SerializePrimitiveParam extends SerializePrimitiveOptions { + value: string; +} + +export const separatorArrayExplode = (style: ArraySeparatorStyle) => { + switch (style) { + case 'label': + return '.'; + case 'matrix': + return ';'; + case 'simple': + return ','; + default: + return '&'; + } +}; + +export const separatorArrayNoExplode = (style: ArraySeparatorStyle) => { + switch (style) { + case 'form': + return ','; + case 'pipeDelimited': + return '|'; + case 'spaceDelimited': + return '%20'; + default: + return ','; + } +}; + +export const separatorObjectExplode = (style: ObjectSeparatorStyle) => { + switch (style) { + case 'label': + return '.'; + case 'matrix': + return ';'; + case 'simple': + return ','; + default: + return '&'; + } +}; + +export const serializeArrayParam = ({ + allowReserved, + explode, + name, + style, + value, +}: SerializeOptions & { + value: unknown[]; +}) => { + if (!explode) { + const joinedValues = ( + allowReserved ? value : value.map((v) => encodeURIComponent(v as string)) + ).join(separatorArrayNoExplode(style)); + switch (style) { + case 'label': + return `.${joinedValues}`; + case 'matrix': + return `;${name}=${joinedValues}`; + case 'simple': + return joinedValues; + default: + return `${name}=${joinedValues}`; + } + } + + const separator = separatorArrayExplode(style); + const joinedValues = value + .map((v) => { + if (style === 'label' || style === 'simple') { + return allowReserved ? v : encodeURIComponent(v as string); + } + + return serializePrimitiveParam({ + allowReserved, + name, + value: v as string, + }); + }) + .join(separator); + return style === 'label' || style === 'matrix' + ? separator + joinedValues + : joinedValues; +}; + +export const serializePrimitiveParam = ({ + allowReserved, + name, + value, +}: SerializePrimitiveParam) => { + if (value === undefined || value === null) { + return ''; + } + + if (typeof value === 'object') { + throw new Error( + 'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.', + ); + } + + return `${name}=${allowReserved ? value : encodeURIComponent(value)}`; +}; + +export const serializeObjectParam = ({ + allowReserved, + explode, + name, + style, + value, + valueOnly, +}: SerializeOptions & { + value: Record | Date; + valueOnly?: boolean; +}) => { + if (value instanceof Date) { + return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`; + } + + if (style !== 'deepObject' && !explode) { + let values: string[] = []; + Object.entries(value).forEach(([key, v]) => { + values = [ + ...values, + key, + allowReserved ? (v as string) : encodeURIComponent(v as string), + ]; + }); + const joinedValues = values.join(','); + switch (style) { + case 'form': + return `${name}=${joinedValues}`; + case 'label': + return `.${joinedValues}`; + case 'matrix': + return `;${name}=${joinedValues}`; + default: + return joinedValues; + } + } + + const separator = separatorObjectExplode(style); + const joinedValues = Object.entries(value) + .map(([key, v]) => + serializePrimitiveParam({ + allowReserved, + name: style === 'deepObject' ? `${name}[${key}]` : key, + value: v as string, + }), + ) + .join(separator); + return style === 'label' || style === 'matrix' + ? separator + joinedValues + : joinedValues; +}; diff --git a/web-ui/api/core/types.gen.ts b/web-ui/api/core/types.gen.ts new file mode 100644 index 000000000..5bfae35c0 --- /dev/null +++ b/web-ui/api/core/types.gen.ts @@ -0,0 +1,120 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Auth, AuthToken } from './auth.gen'; +import type { + BodySerializer, + QuerySerializer, + QuerySerializerOptions, +} from './bodySerializer.gen'; + +export interface Client< + RequestFn = never, + Config = unknown, + MethodFn = never, + BuildUrlFn = never, +> { + /** + * Returns the final request URL. + */ + buildUrl: BuildUrlFn; + connect: MethodFn; + delete: MethodFn; + get: MethodFn; + getConfig: () => Config; + head: MethodFn; + options: MethodFn; + patch: MethodFn; + post: MethodFn; + put: MethodFn; + request: RequestFn; + setConfig: (config: Config) => Config; + trace: MethodFn; +} + +export interface Config { + /** + * Auth token or a function returning auth token. The resolved value will be + * added to the request payload as defined by its `security` array. + */ + auth?: ((auth: Auth) => Promise | AuthToken) | AuthToken; + /** + * A function for serializing request body parameter. By default, + * {@link JSON.stringify()} will be used. + */ + bodySerializer?: BodySerializer | null; + /** + * An object containing any HTTP headers that you want to pre-populate your + * `Headers` object with. + * + * {@link https://developer.mozilla.org/docs/Web/API/Headers/Headers#init See more} + */ + headers?: + | RequestInit['headers'] + | Record< + string, + | string + | number + | boolean + | (string | number | boolean)[] + | null + | undefined + | unknown + >; + /** + * The request method. + * + * {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more} + */ + method?: + | 'CONNECT' + | 'DELETE' + | 'GET' + | 'HEAD' + | 'OPTIONS' + | 'PATCH' + | 'POST' + | 'PUT' + | 'TRACE'; + /** + * A function for serializing request query parameters. By default, arrays + * will be exploded in form style, objects will be exploded in deepObject + * style, and reserved characters are percent-encoded. + * + * This method will have no effect if the native `paramsSerializer()` Axios + * API function is used. + * + * {@link https://swagger.io/docs/specification/serialization/#query View examples} + */ + querySerializer?: QuerySerializer | QuerySerializerOptions; + /** + * A function validating request data. This is useful if you want to ensure + * the request conforms to the desired shape, so it can be safely sent to + * the server. + */ + requestValidator?: (data: unknown) => Promise; + /** + * A function transforming response data before it's returned. This is useful + * for post-processing data, e.g. converting ISO strings into Date objects. + */ + responseTransformer?: (data: unknown) => Promise; + /** + * A function validating response data. This is useful if you want to ensure + * the response conforms to the desired shape, so it can be safely passed to + * the transformers and returned to the user. + */ + responseValidator?: (data: unknown) => Promise; +} + +type IsExactlyNeverOrNeverUndefined = [T] extends [never] + ? true + : [T] extends [never | undefined] + ? [undefined] extends [T] + ? false + : true + : false; + +export type OmitNever> = { + [K in keyof T as IsExactlyNeverOrNeverUndefined extends true + ? never + : K]: T[K]; +}; diff --git a/web-ui/api/index.ts b/web-ui/api/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/web-ui/api/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/web-ui/api/sdk.gen.ts b/web-ui/api/sdk.gen.ts new file mode 100644 index 000000000..08c01124b --- /dev/null +++ b/web-ui/api/sdk.gen.ts @@ -0,0 +1,3514 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options as ClientOptions, type TDataShape, type Client, formDataBodySerializer } from './client'; +import type { AccountActivateCreateData, AccountActivateCreateResponses, AccountConfirmEmailCreateData, AccountConfirmEmailCreateResponses, AccountEmailCreateData, AccountEmailCreateResponses, AccountMugshotCreateData, AccountMugshotCreateResponses, AccountPasswordCreateData, AccountPasswordCreateResponses, AccountRegenerateApiKeyCreateData, AccountRegenerateApiKeyCreateResponses, AdminBackupsRetrieveData, AdminBackupsRetrieveResponses, AdminBackupsCreateData, AdminBackupsCreateResponses, AdminBackupsDestroyData, AdminBackupsDestroyResponses, AdminBugreportRetrieveData, AdminBugreportRetrieveResponses, AdminDashboardRetrieveData, AdminDashboardRetrieveResponses, AdminEmailTestCreateData, AdminEmailTestCreateResponses, AdminLogsRetrieveData, AdminLogsRetrieveResponses, AdminPluginsRetrieveData, AdminPluginsRetrieveResponses, AdminPluginsSettingsRetrieveData, AdminPluginsSettingsRetrieveResponses, AdminPluginsSettingsUpdateData, AdminPluginsSettingsUpdateResponses, ApiKeysListData, ApiKeysListResponses, ApiKeysCreateData, ApiKeysCreateResponses, ApiKeysDestroyData, ApiKeysDestroyResponses, ApiKeysRetrieveData, ApiKeysRetrieveResponses, ApiKeysPartialUpdateData, ApiKeysPartialUpdateResponses, ApiKeysUpdateData, ApiKeysUpdateResponses, AuthTokensListData, AuthTokensListResponses, AuthTokensCreateData, AuthTokensCreateResponses, AuthTokensDestroyData, AuthTokensDestroyResponses, AuthTokensRetrieveData, AuthTokensRetrieveResponses, AuthTokensPartialUpdateData, AuthTokensPartialUpdateResponses, AuthTokensUpdateData, AuthTokensUpdateResponses, AuthLoginCreateData, AuthLoginCreateResponses, AuthLogoutCreateData, AuthLogoutCreateResponses, AuthPasswordResetCreateData, AuthPasswordResetCreateResponses, AuthPasswordResetConfirmCreateData, AuthPasswordResetConfirmCreateResponses, AuthRegisterCreateData, AuthRegisterCreateResponses, BeverageProducersListData, BeverageProducersListResponses, BeverageProducersCreateData, BeverageProducersCreateResponses, BeverageProducersDestroyData, BeverageProducersDestroyResponses, BeverageProducersRetrieveData, BeverageProducersRetrieveResponses, BeverageProducersPartialUpdateData, BeverageProducersPartialUpdateResponses, BeverageProducersUpdateData, BeverageProducersUpdateResponses, BeverageProducersPictureCreateData, BeverageProducersPictureCreateResponses, BeveragesListData, BeveragesListResponses, BeveragesCreateData, BeveragesCreateResponses, BeveragesDestroyData, BeveragesDestroyResponses, BeveragesRetrieveData, BeveragesRetrieveResponses, BeveragesPartialUpdateData, BeveragesPartialUpdateResponses, BeveragesUpdateData, BeveragesUpdateResponses, BeveragesPictureCreateData, BeveragesPictureCreateResponses, ControllersListData, ControllersListResponses, ControllersCreateData, ControllersCreateResponses, ControllersDestroyData, ControllersDestroyResponses, ControllersRetrieveData, ControllersRetrieveResponses, ControllersPartialUpdateData, ControllersPartialUpdateResponses, ControllersUpdateData, ControllersUpdateResponses, DevicesListData, DevicesListResponses, DevicesCreateData, DevicesCreateResponses, DevicesDestroyData, DevicesDestroyResponses, DevicesRetrieveData, DevicesRetrieveResponses, DevicesPartialUpdateData, DevicesPartialUpdateResponses, DevicesUpdateData, DevicesUpdateResponses, DrinksListData, DrinksListResponses, DrinksDestroyData, DrinksDestroyResponses, DrinksRetrieveData, DrinksRetrieveResponses, DrinksPartialUpdateData, DrinksPartialUpdateResponses, DrinksPictureDestroyData, DrinksPictureDestroyResponses, DrinksPictureCreateData, DrinksPictureCreateResponses, DrinksReassignCreateData, DrinksReassignCreateResponses, EventsListData, EventsListResponses, EventsRetrieveData, EventsRetrieveResponses, FlowMetersListData, FlowMetersListResponses, FlowMetersCreateData, FlowMetersCreateResponses, FlowMetersDestroyData, FlowMetersDestroyResponses, FlowMetersRetrieveData, FlowMetersRetrieveResponses, FlowMetersPartialUpdateData, FlowMetersPartialUpdateResponses, FlowMetersUpdateData, FlowMetersUpdateResponses, FlowTogglesListData, FlowTogglesListResponses, FlowTogglesCreateData, FlowTogglesCreateResponses, FlowTogglesDestroyData, FlowTogglesDestroyResponses, FlowTogglesRetrieveData, FlowTogglesRetrieveResponses, FlowTogglesPartialUpdateData, FlowTogglesPartialUpdateResponses, FlowTogglesUpdateData, FlowTogglesUpdateResponses, InvitationsListData, InvitationsListResponses, InvitationsCreateData, InvitationsCreateResponses, InvitationsDestroyData, InvitationsDestroyResponses, InvitationsRetrieveData, InvitationsRetrieveResponses, KegsListData, KegsListResponses, KegsCreateData, KegsCreateResponses, KegsDestroyData, KegsDestroyResponses, KegsRetrieveData, KegsRetrieveResponses, KegsPartialUpdateData, KegsPartialUpdateResponses, KegsUpdateData, KegsUpdateResponses, KegsEndCreateData, KegsEndCreateResponses, KegsReactivateCreateData, KegsReactivateCreateResponses, KegsSpillCreateData, KegsSpillCreateResponses, KegsStatsRetrieveData, KegsStatsRetrieveResponses, NotificationSettingsListData, NotificationSettingsListResponses, NotificationSettingsCreateData, NotificationSettingsCreateResponses, NotificationSettingsDestroyData, NotificationSettingsDestroyResponses, NotificationSettingsRetrieveData, NotificationSettingsRetrieveResponses, NotificationSettingsPartialUpdateData, NotificationSettingsPartialUpdateResponses, NotificationSettingsUpdateData, NotificationSettingsUpdateResponses, PluginDataListData, PluginDataListResponses, PluginDataCreateData, PluginDataCreateResponses, PluginDataDestroyData, PluginDataDestroyResponses, PluginDataRetrieveData, PluginDataRetrieveResponses, PluginDataPartialUpdateData, PluginDataPartialUpdateResponses, PluginDataUpdateData, PluginDataUpdateResponses, SessionsListData, SessionsListResponses, SessionsRetrieveData, SessionsRetrieveResponses, SessionsStatsRetrieveData, SessionsStatsRetrieveResponses, SessionsCurrentRetrieveData, SessionsCurrentRetrieveResponses, SetupAdminUserCreateData, SetupAdminUserCreateResponses, SetupFinishCreateData, SetupFinishCreateResponses, SetupMigrateCreateData, SetupMigrateCreateResponses, SetupSettingsCreateData, SetupSettingsCreateResponses, SetupStatusRetrieveData, SetupStatusRetrieveResponses, SetupUpgradeCreateData, SetupUpgradeCreateResponses, SiteRetrieveData, SiteRetrieveResponses, SitePartialUpdateData, SitePartialUpdateResponses, SiteBackgroundImageCreateData, SiteBackgroundImageCreateResponses, StatsListData, StatsListResponses, StatsRetrieveData, StatsRetrieveResponses, StatsSystemRetrieveData, StatsSystemRetrieveResponses, StatusRetrieveData, StatusRetrieveResponses, TapsListData, TapsListResponses, TapsCreateData, TapsCreateResponses, TapsDestroyData, TapsDestroyResponses, TapsRetrieveData, TapsRetrieveResponses, TapsPartialUpdateData, TapsPartialUpdateResponses, TapsUpdateData, TapsUpdateResponses, TapsAttachKegCreateData, TapsAttachKegCreateResponses, TapsConnectMeterCreateData, TapsConnectMeterCreateResponses, TapsConnectThermoCreateData, TapsConnectThermoCreateResponses, TapsConnectToggleCreateData, TapsConnectToggleCreateResponses, TapsEndKegCreateData, TapsEndKegCreateResponses, TapsRecordDrinkCreateData, TapsRecordDrinkCreateResponses, TapsStartKegCreateData, TapsStartKegCreateResponses, ThermoLogsListData, ThermoLogsListResponses, ThermoLogsRetrieveData, ThermoLogsRetrieveResponses, ThermoSensorsListData, ThermoSensorsListResponses, ThermoSensorsCreateData, ThermoSensorsCreateResponses, ThermoSensorsDestroyData, ThermoSensorsDestroyResponses, ThermoSensorsRetrieveData, ThermoSensorsRetrieveResponses, ThermoSensorsPartialUpdateData, ThermoSensorsPartialUpdateResponses, ThermoSensorsUpdateData, ThermoSensorsUpdateResponses, UsersListData, UsersListResponses, UsersCreateData, UsersCreateResponses, UsersRetrieveData, UsersRetrieveResponses, UsersPartialUpdateData, UsersPartialUpdateResponses, UsersSetPasswordCreateData, UsersSetPasswordCreateResponses, UsersStatsRetrieveData, UsersStatsRetrieveResponses, UsersMeRetrieveData, UsersMeRetrieveResponses, UsersMePartialUpdateData, UsersMePartialUpdateResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +/** + * Activates an invited/created account: sets its password and logs in. + */ +export const accountActivateCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + url: '/api/account/activate', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Applies an email change, given the token from the confirmation mail. + */ +export const accountConfirmEmailCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/account/confirm-email', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Requests an email change; a confirmation link is mailed to the new address. + */ +export const accountEmailCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/account/email', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Sets the current user's mugshot. + */ +export const accountMugshotCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + ...formDataBodySerializer, + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/account/mugshot', + ...options, + headers: { + 'Content-Type': null, + ...options.headers + } + }); +}; + +/** + * Changes the current user's password, keeping the session valid. + */ +export const accountPasswordCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/account/password', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Discards and regenerates the current user's API key. + */ +export const accountRegenerateApiKeyCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/account/regenerate-api-key', + ...options + }); +}; + +/** + * Lists existing backups (GET) or starts building a new one (POST). + */ +export const adminBackupsRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/backups', + ...options + }); +}; + +/** + * Lists existing backups (GET) or starts building a new one (POST). + */ +export const adminBackupsCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/backups', + ...options + }); +}; + +/** + * Deletes a backup archive by filename. + */ +export const adminBackupsDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/backups/{filename}', + ...options + }); +}; + +/** + * Generates and returns a bugreport (may contain secrets; admin eyes only). + */ +export const adminBugreportRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/bugreport', + ...options + }); +}; + +/** + * System health summary for the admin dashboard. + */ +export const adminDashboardRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/dashboard', + ...options + }); +}; + +/** + * Sends a test notification email to the given address. + */ +export const adminEmailTestCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/email-test', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Returns recent log records (newest first) from the redis log handler. + */ +export const adminLogsRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/logs', + ...options + }); +}; + +/** + * Lists installed plugins. + */ +export const adminPluginsRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/plugins', + ...options + }); +}; + +/** + * Reads or updates a plugin's site settings. + * + * Writes are validated through the plugin's own settings form; field + * errors come back in standard DRF shape. + */ +export const adminPluginsSettingsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/plugins/{short_name}/settings', + ...options + }); +}; + +/** + * Reads or updates a plugin's site settings. + * + * Writes are validated through the plugin's own settings form; field + * errors come back in standard DRF shape. + */ +export const adminPluginsSettingsUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/admin/plugins/{short_name}/settings', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists a user's own api keys. + */ +export const apiKeysList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/api-keys', + ...options + }); +}; + +/** + * Lists a user's own api keys. + */ +export const apiKeysCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/api-keys', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists a user's own api keys. + */ +export const apiKeysDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/api-keys/{id}', + ...options + }); +}; + +/** + * Lists a user's own api keys. + */ +export const apiKeysRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/api-keys/{id}', + ...options + }); +}; + +/** + * Lists a user's own api keys. + */ +export const apiKeysPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/api-keys/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists a user's own api keys. + */ +export const apiKeysUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/api-keys/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all AuthenticationTokens in the system. + */ +export const authTokensList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/auth-tokens', + ...options + }); +}; + +/** + * Lists all AuthenticationTokens in the system. + */ +export const authTokensCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/auth-tokens', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all AuthenticationTokens in the system. + */ +export const authTokensDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/auth-tokens/{id}', + ...options + }); +}; + +/** + * Lists all AuthenticationTokens in the system. + */ +export const authTokensRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/auth-tokens/{id}', + ...options + }); +}; + +/** + * Lists all AuthenticationTokens in the system. + */ +export const authTokensPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/auth-tokens/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all AuthenticationTokens in the system. + */ +export const authTokensUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/auth-tokens/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +export const authLoginCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + url: '/api/auth/login', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +export const authLogoutCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/auth/logout', + ...options + }); +}; + +/** + * Mails a password-reset link. Always succeeds (no account enumeration). + */ +export const authPasswordResetCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + url: '/api/auth/password-reset', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Sets a new password, given the uid/token pair from a reset mail. + */ +export const authPasswordResetConfirmCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + url: '/api/auth/password-reset-confirm', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Registers a new account, honoring the site's registration mode. + */ +export const authRegisterCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + url: '/api/auth/register', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all beverage producers in the system. + */ +export const beverageProducersList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverage-producers', + ...options + }); +}; + +/** + * Lists all beverage producers in the system. + */ +export const beverageProducersCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverage-producers', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all beverage producers in the system. + */ +export const beverageProducersDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverage-producers/{id}', + ...options + }); +}; + +/** + * Lists all beverage producers in the system. + */ +export const beverageProducersRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverage-producers/{id}', + ...options + }); +}; + +/** + * Lists all beverage producers in the system. + */ +export const beverageProducersPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverage-producers/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all beverage producers in the system. + */ +export const beverageProducersUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverage-producers/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Uploads and sets this object's picture. + */ +export const beverageProducersPictureCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + ...formDataBodySerializer, + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverage-producers/{id}/picture', + ...options, + headers: { + 'Content-Type': null, + ...options.headers + } + }); +}; + +/** + * Lists all beverages in the system. + */ +export const beveragesList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverages', + ...options + }); +}; + +/** + * Lists all beverages in the system. + */ +export const beveragesCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverages', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all beverages in the system. + */ +export const beveragesDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverages/{id}', + ...options + }); +}; + +/** + * Lists all beverages in the system. + */ +export const beveragesRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverages/{id}', + ...options + }); +}; + +/** + * Lists all beverages in the system. + */ +export const beveragesPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverages/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all beverages in the system. + */ +export const beveragesUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverages/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Uploads and sets this object's picture. + */ +export const beveragesPictureCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + ...formDataBodySerializer, + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/beverages/{id}/picture', + ...options, + headers: { + 'Content-Type': null, + ...options.headers + } + }); +}; + +/** + * Lists all Controllers in the system. + */ +export const controllersList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/controllers', + ...options + }); +}; + +/** + * Lists all Controllers in the system. + */ +export const controllersCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/controllers', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all Controllers in the system. + */ +export const controllersDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/controllers/{id}', + ...options + }); +}; + +/** + * Lists all Controllers in the system. + */ +export const controllersRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/controllers/{id}', + ...options + }); +}; + +/** + * Lists all Controllers in the system. + */ +export const controllersPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/controllers/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all Controllers in the system. + */ +export const controllersUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/controllers/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all devices in the system. + * + * Admin-only view. + */ +export const devicesList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/devices', + ...options + }); +}; + +/** + * Lists all devices in the system. + * + * Admin-only view. + */ +export const devicesCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/devices', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Lists all devices in the system. + * + * Admin-only view. + */ +export const devicesDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/devices/{id}', + ...options + }); +}; + +/** + * Lists all devices in the system. + * + * Admin-only view. + */ +export const devicesRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/devices/{id}', + ...options + }); +}; + +/** + * Lists all devices in the system. + * + * Admin-only view. + */ +export const devicesPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/devices/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all devices in the system. + * + * Admin-only view. + */ +export const devicesUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/devices/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all Drinks in the system. + * + * Drinks are created by pours (or the tap record-drink endpoint), never + * directly. The drink's owner may edit its shout and manage its picture; + * volume adjustment, reassignment, and deletion are admin operations. + */ +export const drinksList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/drinks', + ...options + }); +}; + +/** + * Lists all Drinks in the system. + * + * Drinks are created by pours (or the tap record-drink endpoint), never + * directly. The drink's owner may edit its shout and manage its picture; + * volume adjustment, reassignment, and deletion are admin operations. + */ +export const drinksDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/drinks/{id}', + ...options + }); +}; + +/** + * Lists all Drinks in the system. + * + * Drinks are created by pours (or the tap record-drink endpoint), never + * directly. The drink's owner may edit its shout and manage its picture; + * volume adjustment, reassignment, and deletion are admin operations. + */ +export const drinksRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/drinks/{id}', + ...options + }); +}; + +/** + * Lists all Drinks in the system. + * + * Drinks are created by pours (or the tap record-drink endpoint), never + * directly. The drink's owner may edit its shout and manage its picture; + * volume adjustment, reassignment, and deletion are admin operations. + */ +export const drinksPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/drinks/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Attaches (POST) or erases (DELETE) this drink's picture. + */ +export const drinksPictureDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/drinks/{id}/picture', + ...options + }); +}; + +/** + * Attaches (POST) or erases (DELETE) this drink's picture. + */ +export const drinksPictureCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + ...formDataBodySerializer, + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/drinks/{id}/picture', + ...options, + headers: { + 'Content-Type': null, + ...options.headers + } + }); +}; + +/** + * Reassigns this drink to another user. + */ +export const drinksReassignCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/drinks/{id}/reassign', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all SystemEvents in the system. + */ +export const eventsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/events', + ...options + }); +}; + +/** + * Lists all SystemEvents in the system. + */ +export const eventsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/events/{id}', + ...options + }); +}; + +/** + * Lists all FlowMeters in the system. + */ +export const flowMetersList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-meters', + ...options + }); +}; + +/** + * Lists all FlowMeters in the system. + */ +export const flowMetersCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-meters', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all FlowMeters in the system. + */ +export const flowMetersDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-meters/{id}', + ...options + }); +}; + +/** + * Lists all FlowMeters in the system. + */ +export const flowMetersRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-meters/{id}', + ...options + }); +}; + +/** + * Lists all FlowMeters in the system. + */ +export const flowMetersPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-meters/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all FlowMeters in the system. + */ +export const flowMetersUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-meters/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all FlowToggles in the system. + */ +export const flowTogglesList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-toggles', + ...options + }); +}; + +/** + * Lists all FlowToggles in the system. + */ +export const flowTogglesCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-toggles', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all FlowToggles in the system. + */ +export const flowTogglesDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-toggles/{id}', + ...options + }); +}; + +/** + * Lists all FlowToggles in the system. + */ +export const flowTogglesRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-toggles/{id}', + ...options + }); +}; + +/** + * Lists all FlowToggles in the system. + */ +export const flowTogglesPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-toggles/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all FlowToggles in the system. + */ +export const flowTogglesUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/flow-toggles/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all of the *current user's* invitations. + * + * Creating an invitation (when the site's registration mode allows the + * caller to invite) also sends the invitation e-mail. + */ +export const invitationsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/invitations', + ...options + }); +}; + +/** + * Lists all of the *current user's* invitations. + * + * Creating an invitation (when the site's registration mode allows the + * caller to invite) also sends the invitation e-mail. + */ +export const invitationsCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/invitations', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all of the *current user's* invitations. + * + * Creating an invitation (when the site's registration mode allows the + * caller to invite) also sends the invitation e-mail. + */ +export const invitationsDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/invitations/{id}', + ...options + }); +}; + +/** + * Lists all of the *current user's* invitations. + * + * Creating an invitation (when the site's registration mode allows the + * caller to invite) also sends the invitation e-mail. + */ +export const invitationsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/invitations/{id}', + ...options + }); +}; + +/** + * Lists all Kegs in the system. + * + * Reads follow site privacy; keg management requires an admin. Deleting + * a keg permanently destroys it and ALL of its drinks. + */ +export const kegsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs', + ...options + }); +}; + +/** + * Adds a new keg to the keg room (unattached). + */ +export const kegsCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Lists all Kegs in the system. + * + * Reads follow site privacy; keg management requires an admin. Deleting + * a keg permanently destroys it and ALL of its drinks. + */ +export const kegsDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}', + ...options + }); +}; + +/** + * Lists all Kegs in the system. + * + * Reads follow site privacy; keg management requires an admin. Deleting + * a keg permanently destroys it and ALL of its drinks. + */ +export const kegsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}', + ...options + }); +}; + +/** + * Lists all Kegs in the system. + * + * Reads follow site privacy; keg management requires an admin. Deleting + * a keg permanently destroys it and ALL of its drinks. + */ +export const kegsPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all Kegs in the system. + * + * Reads follow site privacy; keg management requires an admin. Deleting + * a keg permanently destroys it and ALL of its drinks. + */ +export const kegsUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Marks an untapped keg as finished. + */ +export const kegsEndCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}/end', + ...options + }); +}; + +/** + * Returns a finished keg to the available pool. + */ +export const kegsReactivateCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}/reactivate', + ...options + }); +}; + +/** + * Records spilled volume against this keg. + */ +export const kegsSpillCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}/spill', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Returns the latest stats blob for this keg. + */ +export const kegsStatsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/kegs/{id}/stats', + ...options + }); +}; + +/** + * Lists the *current user's* notification settings. + */ +export const notificationSettingsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/notification-settings', + ...options + }); +}; + +/** + * Lists the *current user's* notification settings. + */ +export const notificationSettingsCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/notification-settings', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists the *current user's* notification settings. + */ +export const notificationSettingsDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/notification-settings/{id}', + ...options + }); +}; + +/** + * Lists the *current user's* notification settings. + */ +export const notificationSettingsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/notification-settings/{id}', + ...options + }); +}; + +/** + * Lists the *current user's* notification settings. + */ +export const notificationSettingsPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/notification-settings/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists the *current user's* notification settings. + */ +export const notificationSettingsUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/notification-settings/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all PluginData in the system. + * + * Admin-only: plugin data may contain plugin credentials. + */ +export const pluginDataList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/plugin-data', + ...options + }); +}; + +/** + * Lists all PluginData in the system. + * + * Admin-only: plugin data may contain plugin credentials. + */ +export const pluginDataCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/plugin-data', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all PluginData in the system. + * + * Admin-only: plugin data may contain plugin credentials. + */ +export const pluginDataDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/plugin-data/{id}', + ...options + }); +}; + +/** + * Lists all PluginData in the system. + * + * Admin-only: plugin data may contain plugin credentials. + */ +export const pluginDataRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/plugin-data/{id}', + ...options + }); +}; + +/** + * Lists all PluginData in the system. + * + * Admin-only: plugin data may contain plugin credentials. + */ +export const pluginDataPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/plugin-data/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all PluginData in the system. + * + * Admin-only: plugin data may contain plugin credentials. + */ +export const pluginDataUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/plugin-data/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all DrinkingSessions in the system. + */ +export const sessionsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/sessions', + ...options + }); +}; + +/** + * Lists all DrinkingSessions in the system. + */ +export const sessionsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/sessions/{id}', + ...options + }); +}; + +/** + * Returns the latest stats blob for this session. + */ +export const sessionsStatsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/sessions/{id}/stats', + ...options + }); +}; + +/** + * Returns the currently-active session, or 404 if there is none. + */ +export const sessionsCurrentRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/sessions/current', + ...options + }); +}; + +/** + * Creates the initial admin account and logs it in. + */ +export const setupAdminUserCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + url: '/api/setup/admin-user', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Marks setup complete. + */ +export const setupFinishCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/api/setup/finish', + ...options + }); +}; + +/** + * Creates or migrates the database (synchronous). + */ +export const setupMigrateCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/api/setup/migrate', + ...options + }); +}; + +/** + * Applies initial site settings (after the database is migrated). + */ +export const setupSettingsCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/api/setup/settings', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Reports whether setup or upgrade is required. + */ +export const setupStatusRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/api/setup/status', + ...options + }); +}; + +/** + * Migrates the database and stamps the current server version. + */ +export const setupUpgradeCreate = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/api/setup/upgrade', + ...options + }); +}; + +/** + * Reads (GET) or updates (PATCH) the site settings singleton. + */ +export const siteRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/site', + ...options + }); +}; + +/** + * Reads (GET) or updates (PATCH) the site settings singleton. + */ +export const sitePartialUpdate = (options?: Options) => { + return (options?.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/site', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; + +/** + * Uploads and sets the site background image. + */ +export const siteBackgroundImageCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + ...formDataBodySerializer, + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/site/background-image', + ...options, + headers: { + 'Content-Type': null, + ...options.headers + } + }); +}; + +/** + * Lists all stats snapshots in the system. + */ +export const statsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/stats', + ...options + }); +}; + +/** + * Lists all stats snapshots in the system. + */ +export const statsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/stats/{id}', + ...options + }); +}; + +/** + * Returns the latest system-wide (all-time) stats blob. + */ +export const statsSystemRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/stats/system', + ...options + }); +}; + +/** + * The 'current system status' view. + * + * Among other things, the `kegbot-frontend` uses this view to establish + * whether the system privacy permits reading from other APIs (status=200), + * or the user needs to log in (status=4xx), from application of the + * `DashboardViewer` permission + */ +export const statusRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/status', + ...options + }); +}; + +/** + * Lists all KegTaps in the system. + * + * Reads follow site privacy; tap management (including the keg and + * hardware-connection operations below) requires an admin. + */ +export const tapsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps', + ...options + }); +}; + +/** + * Lists all KegTaps in the system. + * + * Reads follow site privacy; tap management (including the keg and + * hardware-connection operations below) requires an admin. + */ +export const tapsCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all KegTaps in the system. + * + * Reads follow site privacy; tap management (including the keg and + * hardware-connection operations below) requires an admin. + */ +export const tapsDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}', + ...options + }); +}; + +/** + * Lists all KegTaps in the system. + * + * Reads follow site privacy; tap management (including the keg and + * hardware-connection operations below) requires an admin. + */ +export const tapsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}', + ...options + }); +}; + +/** + * Lists all KegTaps in the system. + * + * Reads follow site privacy; tap management (including the keg and + * hardware-connection operations below) requires an admin. + */ +export const tapsPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all KegTaps in the system. + * + * Reads follow site privacy; tap management (including the keg and + * hardware-connection operations below) requires an admin. + */ +export const tapsUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Attaches an existing (available) keg to this tap. + */ +export const tapsAttachKegCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}/attach-keg', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Assigns a flow meter to this tap (null to disconnect). + */ +export const tapsConnectMeterCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}/connect-meter', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Assigns a temperature sensor to this tap (null to disconnect). + */ +export const tapsConnectThermoCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}/connect-thermo', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Assigns a flow toggle to this tap (null to disconnect). + */ +export const tapsConnectToggleCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}/connect-toggle', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Takes the tap's current keg offline. + */ +export const tapsEndKegCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}/end-keg', + ...options + }); +}; + +/** + * Manually records a drink (or spill) against this tap's keg. + * + * Returns the new drink (201), or no content (204) when recorded + * as a spill. + */ +export const tapsRecordDrinkCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}/record-drink', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Creates a new keg and attaches it to this tap. + */ +export const tapsStartKegCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/taps/{id}/start-keg', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all Thermologs in the system. + */ +export const thermoLogsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-logs', + ...options + }); +}; + +/** + * Lists all Thermologs in the system. + */ +export const thermoLogsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-logs/{id}', + ...options + }); +}; + +/** + * Lists all ThermoSensors in the system. + */ +export const thermoSensorsList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-sensors', + ...options + }); +}; + +/** + * Lists all ThermoSensors in the system. + */ +export const thermoSensorsCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-sensors', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all ThermoSensors in the system. + */ +export const thermoSensorsDestroy = (options: Options) => { + return (options.client ?? _heyApiClient).delete({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-sensors/{id}', + ...options + }); +}; + +/** + * Lists all ThermoSensors in the system. + */ +export const thermoSensorsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-sensors/{id}', + ...options + }); +}; + +/** + * Lists all ThermoSensors in the system. + */ +export const thermoSensorsPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-sensors/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all ThermoSensors in the system. + */ +export const thermoSensorsUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).put({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/thermo-sensors/{id}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all users in the system. + * + * Individual users (and their stats) are viewable by anyone the site + * privacy setting admits, mirroring the public drinker pages; the full + * user listing requires authentication. User management (create, edit, + * enable/disable, staff status, set-password) is admin-only; there is + * no delete — accounts are disabled instead. + */ +export const usersList = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users', + ...options + }); +}; + +/** + * Lists all users in the system. + * + * Individual users (and their stats) are viewable by anyone the site + * privacy setting admits, mirroring the public drinker pages; the full + * user listing requires authentication. User management (create, edit, + * enable/disable, staff status, set-password) is admin-only; there is + * no delete — accounts are disabled instead. + */ +export const usersCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Lists all users in the system. + * + * Individual users (and their stats) are viewable by anyone the site + * privacy setting admits, mirroring the public drinker pages; the full + * user listing requires authentication. User management (create, edit, + * enable/disable, staff status, set-password) is admin-only; there is + * no delete — accounts are disabled instead. + */ +export const usersRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users/{username}', + ...options + }); +}; + +/** + * Lists all users in the system. + * + * Individual users (and their stats) are viewable by anyone the site + * privacy setting admits, mirroring the public drinker pages; the full + * user listing requires authentication. User management (create, edit, + * enable/disable, staff status, set-password) is admin-only; there is + * no delete — accounts are disabled instead. + */ +export const usersPartialUpdate = (options: Options) => { + return (options.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users/{username}', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Sets a new password for this user. + */ +export const usersSetPasswordCreate = (options: Options) => { + return (options.client ?? _heyApiClient).post({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users/{username}/set-password', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); +}; + +/** + * Returns the latest stats blob for this user. + */ +export const usersStatsRetrieve = (options: Options) => { + return (options.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users/{username}/stats', + ...options + }); +}; + +/** + * The frontend boot endpoint. + * + * GET always responds 200, regardless of authentication and site + * privacy: `user` is null for anonymous callers, and the rest of the + * payload is limited to privacy-safe configuration the frontend always + * needs (to render login screens, privacy interstitials, forms, and + * navigation). It also sets the CSRF cookie, so a fresh browser session + * can make authenticated POSTs after calling this. + * + * PATCH updates the current user's profile and returns the same payload. + */ +export const usersMeRetrieve = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users/me', + ...options + }); +}; + +/** + * The frontend boot endpoint. + * + * GET always responds 200, regardless of authentication and site + * privacy: `user` is null for anonymous callers, and the rest of the + * payload is limited to privacy-safe configuration the frontend always + * needs (to render login screens, privacy interstitials, forms, and + * navigation). It also sets the CSRF cookie, so a fresh browser session + * can make authenticated POSTs after calling this. + * + * PATCH updates the current user's profile and returns the same payload. + */ +export const usersMePartialUpdate = (options?: Options) => { + return (options?.client ?? _heyApiClient).patch({ + security: [ + { + scheme: 'basic', + type: 'http' + }, + { + in: 'cookie', + name: 'sessionid', + type: 'apiKey' + } + ], + url: '/api/users/me', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } + }); +}; \ No newline at end of file diff --git a/web-ui/api/types.gen.ts b/web-ui/api/types.gen.ts new file mode 100644 index 000000000..1d5514f32 --- /dev/null +++ b/web-ui/api/types.gen.ts @@ -0,0 +1,9250 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type ActivateAccountRequest = { + activation_key: string; + password: string; +}; + +export type AdminDashboard = { + email_configured: boolean; + redis_error: string | null; + num_users: number; + num_new_users: number; +}; + +export type AdminUserCreateRequest = { + username: string; + email?: string; + password: string; + is_staff?: boolean; +}; + +export type ApiKey = { + readonly id: number; + /** + * User receiving API access. + */ + readonly user_id: number | null; + /** + * Device this key is associated with. + */ + readonly device_id: number | null; + is_active: boolean; + readonly key: string; + /** + * Information about this key. + */ + description?: string | null; + /** + * Time the key was created. + */ + created_time?: string; +}; + +export type AuthenticationToken = { + readonly id: number; + /** + * Namespace for this token. + */ + auth_device: string; + /** + * Actual value of the token, unique within an auth_device. + */ + token_value: string; + /** + * A human-readable alias for the token, for example "Guest Key". + */ + nice_name?: string | null; + /** + * A secret value necessary to authenticate with this token. + */ + pin?: string | null; + /** + * User in possession of and authenticated by this token. + */ + readonly user_id: number | null; + /** + * Whether this token is considered active. + */ + enabled?: boolean; + /** + * Date token was first added to the system. + */ + readonly created_time: string; + /** + * Date after which token is treated as disabled. + */ + expire_time?: string | null; +}; + +export type Beverage = { + readonly id: number; + /** + * Name of the beverage, such as "Potrero Pale". + */ + name: string; + producer: BeverageProducer; + beverage_type?: BeverageTypeEnum; + /** + * Beverage style within type, eg "Pale Ale", "Pinot Noir". + */ + style?: string | null; + /** + * Free-form description of the beverage. + */ + description?: string | null; + picture: Picture; + /** + * Date of production, for wines or special/seasonal editions + */ + vintage_year?: string | null; + /** + * ABV Percentage + * Alcohol by volume, as percentage (0.0-100.0). + */ + abv_percent?: number | null; + /** + * Calories per mL of beverage. + */ + calories_per_ml?: number | null; + /** + * Carbohydrates per mL of beverage. + */ + carbs_per_ml?: number | null; + /** + * Color (Hex Value) + * Approximate beverage color + */ + color_hex?: string; + /** + * Original gravity (beer only). + */ + original_gravity?: number | null; + /** + * Final gravity (beer only). + */ + specific_gravity?: number | null; + /** + * SRM Value + * Standard Reference Method value (beer only). + */ + srm?: number | null; + /** + * IBUs + * International Bittering Units value (beer only). + */ + ibu?: number | null; + /** + * Star rating for beverage (0: worst, 5: best) + */ + star_rating?: number | null; + /** + * Untappd.com resource ID (beer only). + */ + untappd_beer_id?: number | null; +}; + +export type BeverageProducer = { + readonly id: number; + /** + * Name of the brewer + */ + name: string; + /** + * Country of origin + * + * * `AFG` - Afghanistan + * * `ALA` - Aland Islands + * * `ALB` - Albania + * * `DZA` - Algeria + * * `ASM` - American Samoa + * * `AND` - Andorra + * * `AGO` - Angola + * * `AIA` - Anguilla + * * `ATG` - Antigua and Barbuda + * * `ARG` - Argentina + * * `ARM` - Armenia + * * `ABW` - Aruba + * * `AUS` - Australia + * * `AUT` - Austria + * * `AZE` - Azerbaijan + * * `BHS` - Bahamas + * * `BHR` - Bahrain + * * `BGD` - Bangladesh + * * `BRB` - Barbados + * * `BLR` - Belarus + * * `BEL` - Belgium + * * `BLZ` - Belize + * * `BEN` - Benin + * * `BMU` - Bermuda + * * `BTN` - Bhutan + * * `BOL` - Bolivia + * * `BIH` - Bosnia and Herzegovina + * * `BWA` - Botswana + * * `BRA` - Brazil + * * `VGB` - British Virgin Islands + * * `BRN` - Brunei Darussalam + * * `BGR` - Bulgaria + * * `BFA` - Burkina Faso + * * `BDI` - Burundi + * * `KHM` - Cambodia + * * `CMR` - Cameroon + * * `CAN` - Canada + * * `CPV` - Cape Verde + * * `CYM` - Cayman Islands + * * `CAF` - Central African Republic + * * `TCD` - Chad + * * `CIL` - Channel Islands + * * `CHL` - Chile + * * `CHN` - China + * * `HKG` - China - Hong Kong + * * `MAC` - China - Macao + * * `COL` - Colombia + * * `COM` - Comoros + * * `COG` - Congo + * * `COK` - Cook Islands + * * `CRI` - Costa Rica + * * `CIV` - Cote d'Ivoire + * * `HRV` - Croatia + * * `CUB` - Cuba + * * `CYP` - Cyprus + * * `CZE` - Czech Republic + * * `PRK` - Democratic People's Republic of Korea + * * `COD` - Democratic Republic of the Congo + * * `DNK` - Denmark + * * `DJI` - Djibouti + * * `DMA` - Dominica + * * `DOM` - Dominican Republic + * * `ECU` - Ecuador + * * `EGY` - Egypt + * * `SLV` - El Salvador + * * `GNQ` - Equatorial Guinea + * * `ERI` - Eritrea + * * `EST` - Estonia + * * `ETH` - Ethiopia + * * `FRO` - Faeroe Islands + * * `FLK` - Falkland Islands (Malvinas) + * * `FJI` - Fiji + * * `FIN` - Finland + * * `FRA` - France + * * `GUF` - French Guiana + * * `PYF` - French Polynesia + * * `GAB` - Gabon + * * `GMB` - Gambia + * * `GEO` - Georgia + * * `DEU` - Germany + * * `GHA` - Ghana + * * `GIB` - Gibraltar + * * `GRC` - Greece + * * `GRL` - Greenland + * * `GRD` - Grenada + * * `GLP` - Guadeloupe + * * `GUM` - Guam + * * `GTM` - Guatemala + * * `GGY` - Guernsey + * * `GIN` - Guinea + * * `GNB` - Guinea-Bissau + * * `GUY` - Guyana + * * `HTI` - Haiti + * * `VAT` - Holy See (Vatican City) + * * `HND` - Honduras + * * `HUN` - Hungary + * * `ISL` - Iceland + * * `IND` - India + * * `IDN` - Indonesia + * * `IRN` - Iran + * * `IRQ` - Iraq + * * `IRL` - Ireland + * * `IMN` - Isle of Man + * * `ISR` - Israel + * * `ITA` - Italy + * * `JAM` - Jamaica + * * `JPN` - Japan + * * `JEY` - Jersey + * * `JOR` - Jordan + * * `KAZ` - Kazakhstan + * * `KEN` - Kenya + * * `KIR` - Kiribati + * * `KWT` - Kuwait + * * `KGZ` - Kyrgyzstan + * * `LAO` - Lao People's Democratic Republic + * * `LVA` - Latvia + * * `LBN` - Lebanon + * * `LSO` - Lesotho + * * `LBR` - Liberia + * * `LBY` - Libyan Arab Jamahiriya + * * `LIE` - Liechtenstein + * * `LTU` - Lithuania + * * `LUX` - Luxembourg + * * `MKD` - Macedonia + * * `MDG` - Madagascar + * * `MWI` - Malawi + * * `MYS` - Malaysia + * * `MDV` - Maldives + * * `MLI` - Mali + * * `MLT` - Malta + * * `MHL` - Marshall Islands + * * `MTQ` - Martinique + * * `MRT` - Mauritania + * * `MUS` - Mauritius + * * `MYT` - Mayotte + * * `MEX` - Mexico + * * `FSM` - Micronesia, Federated States of + * * `MCO` - Monaco + * * `MNG` - Mongolia + * * `MNE` - Montenegro + * * `MSR` - Montserrat + * * `MAR` - Morocco + * * `MOZ` - Mozambique + * * `MMR` - Myanmar + * * `NAM` - Namibia + * * `NRU` - Nauru + * * `NPL` - Nepal + * * `NLD` - Netherlands + * * `ANT` - Netherlands Antilles + * * `NCL` - New Caledonia + * * `NZL` - New Zealand + * * `NIC` - Nicaragua + * * `NER` - Niger + * * `NGA` - Nigeria + * * `NIU` - Niue + * * `NFK` - Norfolk Island + * * `MNP` - Northern Mariana Islands + * * `NOR` - Norway + * * `PSE` - Occupied Palestinian Territory + * * `OMN` - Oman + * * `PAK` - Pakistan + * * `PLW` - Palau + * * `PAN` - Panama + * * `PNG` - Papua New Guinea + * * `PRY` - Paraguay + * * `PER` - Peru + * * `PHL` - Philippines + * * `PCN` - Pitcairn + * * `POL` - Poland + * * `PRT` - Portugal + * * `PRI` - Puerto Rico + * * `QAT` - Qatar + * * `KOR` - Republic of Korea + * * `MDA` - Republic of Moldova + * * `REU` - Reunion + * * `ROU` - Romania + * * `RUS` - Russian Federation + * * `RWA` - Rwanda + * * `BLM` - Saint-Barthelemy + * * `SHN` - Saint Helena + * * `KNA` - Saint Kitts and Nevis + * * `LCA` - Saint Lucia + * * `MAF` - Saint-Martin (French part) + * * `SPM` - Saint Pierre and Miquelon + * * `VCT` - Saint Vincent and the Grenadines + * * `WSM` - Samoa + * * `SMR` - San Marino + * * `STP` - Sao Tome and Principe + * * `SAU` - Saudi Arabia + * * `SEN` - Senegal + * * `SRB` - Serbia + * * `SYC` - Seychelles + * * `SLE` - Sierra Leone + * * `SGP` - Singapore + * * `SVK` - Slovakia + * * `SVN` - Slovenia + * * `SLB` - Solomon Islands + * * `SOM` - Somalia + * * `ZAF` - South Africa + * * `ESP` - Spain + * * `LKA` - Sri Lanka + * * `SDN` - Sudan + * * `SUR` - Suriname + * * `SJM` - Svalbard and Jan Mayen Islands + * * `SWZ` - Swaziland + * * `SWE` - Sweden + * * `CHE` - Switzerland + * * `SYR` - Syrian Arab Republic + * * `TJK` - Tajikistan + * * `THA` - Thailand + * * `TLS` - Timor-Leste + * * `TGO` - Togo + * * `TKL` - Tokelau + * * `TON` - Tonga + * * `TTO` - Trinidad and Tobago + * * `TUN` - Tunisia + * * `TUR` - Turkey + * * `TKM` - Turkmenistan + * * `TCA` - Turks and Caicos Islands + * * `TUV` - Tuvalu + * * `UGA` - Uganda + * * `UKR` - Ukraine + * * `ARE` - United Arab Emirates + * * `GBR` - United Kingdom + * * `TZA` - United Republic of Tanzania + * * `USA` - United States of America + * * `VIR` - United States Virgin Islands + * * `URY` - Uruguay + * * `UZB` - Uzbekistan + * * `VUT` - Vanuatu + * * `VEN` - Venezuela (Bolivarian Republic of) + * * `VNM` - Viet Nam + * * `WLF` - Wallis and Futuna Islands + * * `ESH` - Western Sahara + * * `YEM` - Yemen + * * `ZMB` - Zambia + * * `ZWE` - Zimbabwe + */ + country?: CountryEnum; + /** + * State of origin, if applicable + */ + origin_state?: string | null; + /** + * City of origin, if known + */ + origin_city?: string | null; + is_homebrew?: boolean; + /** + * Brewer's home page + */ + url?: string | null; + /** + * A short description of the brewer + */ + description?: string | null; + picture: Picture; +}; + +/** + * * `beer` - Beer + * * `wine` - Wine + * * `soda` - Soda + * * `kombucha` - Kombucha + * * `other` - Other/Unknown + */ +export type BeverageTypeEnum = 'beer' | 'wine' | 'soda' | 'kombucha' | 'other'; + +export type ConfirmEmailRequest = { + token: string; +}; + +export type Controller = { + readonly id: number; + /** + * Identifying name for this device; must be unique. + */ + name: string; + /** + * Type of controller (optional). + */ + model_name?: string | null; + /** + * Serial number (optional). + */ + serial_number?: string | null; +}; + +/** + * * `AFG` - Afghanistan + * * `ALA` - Aland Islands + * * `ALB` - Albania + * * `DZA` - Algeria + * * `ASM` - American Samoa + * * `AND` - Andorra + * * `AGO` - Angola + * * `AIA` - Anguilla + * * `ATG` - Antigua and Barbuda + * * `ARG` - Argentina + * * `ARM` - Armenia + * * `ABW` - Aruba + * * `AUS` - Australia + * * `AUT` - Austria + * * `AZE` - Azerbaijan + * * `BHS` - Bahamas + * * `BHR` - Bahrain + * * `BGD` - Bangladesh + * * `BRB` - Barbados + * * `BLR` - Belarus + * * `BEL` - Belgium + * * `BLZ` - Belize + * * `BEN` - Benin + * * `BMU` - Bermuda + * * `BTN` - Bhutan + * * `BOL` - Bolivia + * * `BIH` - Bosnia and Herzegovina + * * `BWA` - Botswana + * * `BRA` - Brazil + * * `VGB` - British Virgin Islands + * * `BRN` - Brunei Darussalam + * * `BGR` - Bulgaria + * * `BFA` - Burkina Faso + * * `BDI` - Burundi + * * `KHM` - Cambodia + * * `CMR` - Cameroon + * * `CAN` - Canada + * * `CPV` - Cape Verde + * * `CYM` - Cayman Islands + * * `CAF` - Central African Republic + * * `TCD` - Chad + * * `CIL` - Channel Islands + * * `CHL` - Chile + * * `CHN` - China + * * `HKG` - China - Hong Kong + * * `MAC` - China - Macao + * * `COL` - Colombia + * * `COM` - Comoros + * * `COG` - Congo + * * `COK` - Cook Islands + * * `CRI` - Costa Rica + * * `CIV` - Cote d'Ivoire + * * `HRV` - Croatia + * * `CUB` - Cuba + * * `CYP` - Cyprus + * * `CZE` - Czech Republic + * * `PRK` - Democratic People's Republic of Korea + * * `COD` - Democratic Republic of the Congo + * * `DNK` - Denmark + * * `DJI` - Djibouti + * * `DMA` - Dominica + * * `DOM` - Dominican Republic + * * `ECU` - Ecuador + * * `EGY` - Egypt + * * `SLV` - El Salvador + * * `GNQ` - Equatorial Guinea + * * `ERI` - Eritrea + * * `EST` - Estonia + * * `ETH` - Ethiopia + * * `FRO` - Faeroe Islands + * * `FLK` - Falkland Islands (Malvinas) + * * `FJI` - Fiji + * * `FIN` - Finland + * * `FRA` - France + * * `GUF` - French Guiana + * * `PYF` - French Polynesia + * * `GAB` - Gabon + * * `GMB` - Gambia + * * `GEO` - Georgia + * * `DEU` - Germany + * * `GHA` - Ghana + * * `GIB` - Gibraltar + * * `GRC` - Greece + * * `GRL` - Greenland + * * `GRD` - Grenada + * * `GLP` - Guadeloupe + * * `GUM` - Guam + * * `GTM` - Guatemala + * * `GGY` - Guernsey + * * `GIN` - Guinea + * * `GNB` - Guinea-Bissau + * * `GUY` - Guyana + * * `HTI` - Haiti + * * `VAT` - Holy See (Vatican City) + * * `HND` - Honduras + * * `HUN` - Hungary + * * `ISL` - Iceland + * * `IND` - India + * * `IDN` - Indonesia + * * `IRN` - Iran + * * `IRQ` - Iraq + * * `IRL` - Ireland + * * `IMN` - Isle of Man + * * `ISR` - Israel + * * `ITA` - Italy + * * `JAM` - Jamaica + * * `JPN` - Japan + * * `JEY` - Jersey + * * `JOR` - Jordan + * * `KAZ` - Kazakhstan + * * `KEN` - Kenya + * * `KIR` - Kiribati + * * `KWT` - Kuwait + * * `KGZ` - Kyrgyzstan + * * `LAO` - Lao People's Democratic Republic + * * `LVA` - Latvia + * * `LBN` - Lebanon + * * `LSO` - Lesotho + * * `LBR` - Liberia + * * `LBY` - Libyan Arab Jamahiriya + * * `LIE` - Liechtenstein + * * `LTU` - Lithuania + * * `LUX` - Luxembourg + * * `MKD` - Macedonia + * * `MDG` - Madagascar + * * `MWI` - Malawi + * * `MYS` - Malaysia + * * `MDV` - Maldives + * * `MLI` - Mali + * * `MLT` - Malta + * * `MHL` - Marshall Islands + * * `MTQ` - Martinique + * * `MRT` - Mauritania + * * `MUS` - Mauritius + * * `MYT` - Mayotte + * * `MEX` - Mexico + * * `FSM` - Micronesia, Federated States of + * * `MCO` - Monaco + * * `MNG` - Mongolia + * * `MNE` - Montenegro + * * `MSR` - Montserrat + * * `MAR` - Morocco + * * `MOZ` - Mozambique + * * `MMR` - Myanmar + * * `NAM` - Namibia + * * `NRU` - Nauru + * * `NPL` - Nepal + * * `NLD` - Netherlands + * * `ANT` - Netherlands Antilles + * * `NCL` - New Caledonia + * * `NZL` - New Zealand + * * `NIC` - Nicaragua + * * `NER` - Niger + * * `NGA` - Nigeria + * * `NIU` - Niue + * * `NFK` - Norfolk Island + * * `MNP` - Northern Mariana Islands + * * `NOR` - Norway + * * `PSE` - Occupied Palestinian Territory + * * `OMN` - Oman + * * `PAK` - Pakistan + * * `PLW` - Palau + * * `PAN` - Panama + * * `PNG` - Papua New Guinea + * * `PRY` - Paraguay + * * `PER` - Peru + * * `PHL` - Philippines + * * `PCN` - Pitcairn + * * `POL` - Poland + * * `PRT` - Portugal + * * `PRI` - Puerto Rico + * * `QAT` - Qatar + * * `KOR` - Republic of Korea + * * `MDA` - Republic of Moldova + * * `REU` - Reunion + * * `ROU` - Romania + * * `RUS` - Russian Federation + * * `RWA` - Rwanda + * * `BLM` - Saint-Barthelemy + * * `SHN` - Saint Helena + * * `KNA` - Saint Kitts and Nevis + * * `LCA` - Saint Lucia + * * `MAF` - Saint-Martin (French part) + * * `SPM` - Saint Pierre and Miquelon + * * `VCT` - Saint Vincent and the Grenadines + * * `WSM` - Samoa + * * `SMR` - San Marino + * * `STP` - Sao Tome and Principe + * * `SAU` - Saudi Arabia + * * `SEN` - Senegal + * * `SRB` - Serbia + * * `SYC` - Seychelles + * * `SLE` - Sierra Leone + * * `SGP` - Singapore + * * `SVK` - Slovakia + * * `SVN` - Slovenia + * * `SLB` - Solomon Islands + * * `SOM` - Somalia + * * `ZAF` - South Africa + * * `ESP` - Spain + * * `LKA` - Sri Lanka + * * `SDN` - Sudan + * * `SUR` - Suriname + * * `SJM` - Svalbard and Jan Mayen Islands + * * `SWZ` - Swaziland + * * `SWE` - Sweden + * * `CHE` - Switzerland + * * `SYR` - Syrian Arab Republic + * * `TJK` - Tajikistan + * * `THA` - Thailand + * * `TLS` - Timor-Leste + * * `TGO` - Togo + * * `TKL` - Tokelau + * * `TON` - Tonga + * * `TTO` - Trinidad and Tobago + * * `TUN` - Tunisia + * * `TUR` - Turkey + * * `TKM` - Turkmenistan + * * `TCA` - Turks and Caicos Islands + * * `TUV` - Tuvalu + * * `UGA` - Uganda + * * `UKR` - Ukraine + * * `ARE` - United Arab Emirates + * * `GBR` - United Kingdom + * * `TZA` - United Republic of Tanzania + * * `USA` - United States of America + * * `VIR` - United States Virgin Islands + * * `URY` - Uruguay + * * `UZB` - Uzbekistan + * * `VUT` - Vanuatu + * * `VEN` - Venezuela (Bolivarian Republic of) + * * `VNM` - Viet Nam + * * `WLF` - Wallis and Futuna Islands + * * `ESH` - Western Sahara + * * `YEM` - Yemen + * * `ZMB` - Zambia + * * `ZWE` - Zimbabwe + */ +export type CountryEnum = 'AFG' | 'ALA' | 'ALB' | 'DZA' | 'ASM' | 'AND' | 'AGO' | 'AIA' | 'ATG' | 'ARG' | 'ARM' | 'ABW' | 'AUS' | 'AUT' | 'AZE' | 'BHS' | 'BHR' | 'BGD' | 'BRB' | 'BLR' | 'BEL' | 'BLZ' | 'BEN' | 'BMU' | 'BTN' | 'BOL' | 'BIH' | 'BWA' | 'BRA' | 'VGB' | 'BRN' | 'BGR' | 'BFA' | 'BDI' | 'KHM' | 'CMR' | 'CAN' | 'CPV' | 'CYM' | 'CAF' | 'TCD' | 'CIL' | 'CHL' | 'CHN' | 'HKG' | 'MAC' | 'COL' | 'COM' | 'COG' | 'COK' | 'CRI' | 'CIV' | 'HRV' | 'CUB' | 'CYP' | 'CZE' | 'PRK' | 'COD' | 'DNK' | 'DJI' | 'DMA' | 'DOM' | 'ECU' | 'EGY' | 'SLV' | 'GNQ' | 'ERI' | 'EST' | 'ETH' | 'FRO' | 'FLK' | 'FJI' | 'FIN' | 'FRA' | 'GUF' | 'PYF' | 'GAB' | 'GMB' | 'GEO' | 'DEU' | 'GHA' | 'GIB' | 'GRC' | 'GRL' | 'GRD' | 'GLP' | 'GUM' | 'GTM' | 'GGY' | 'GIN' | 'GNB' | 'GUY' | 'HTI' | 'VAT' | 'HND' | 'HUN' | 'ISL' | 'IND' | 'IDN' | 'IRN' | 'IRQ' | 'IRL' | 'IMN' | 'ISR' | 'ITA' | 'JAM' | 'JPN' | 'JEY' | 'JOR' | 'KAZ' | 'KEN' | 'KIR' | 'KWT' | 'KGZ' | 'LAO' | 'LVA' | 'LBN' | 'LSO' | 'LBR' | 'LBY' | 'LIE' | 'LTU' | 'LUX' | 'MKD' | 'MDG' | 'MWI' | 'MYS' | 'MDV' | 'MLI' | 'MLT' | 'MHL' | 'MTQ' | 'MRT' | 'MUS' | 'MYT' | 'MEX' | 'FSM' | 'MCO' | 'MNG' | 'MNE' | 'MSR' | 'MAR' | 'MOZ' | 'MMR' | 'NAM' | 'NRU' | 'NPL' | 'NLD' | 'ANT' | 'NCL' | 'NZL' | 'NIC' | 'NER' | 'NGA' | 'NIU' | 'NFK' | 'MNP' | 'NOR' | 'PSE' | 'OMN' | 'PAK' | 'PLW' | 'PAN' | 'PNG' | 'PRY' | 'PER' | 'PHL' | 'PCN' | 'POL' | 'PRT' | 'PRI' | 'QAT' | 'KOR' | 'MDA' | 'REU' | 'ROU' | 'RUS' | 'RWA' | 'BLM' | 'SHN' | 'KNA' | 'LCA' | 'MAF' | 'SPM' | 'VCT' | 'WSM' | 'SMR' | 'STP' | 'SAU' | 'SEN' | 'SRB' | 'SYC' | 'SLE' | 'SGP' | 'SVK' | 'SVN' | 'SLB' | 'SOM' | 'ZAF' | 'ESP' | 'LKA' | 'SDN' | 'SUR' | 'SJM' | 'SWZ' | 'SWE' | 'CHE' | 'SYR' | 'TJK' | 'THA' | 'TLS' | 'TGO' | 'TKL' | 'TON' | 'TTO' | 'TUN' | 'TUR' | 'TKM' | 'TCA' | 'TUV' | 'UGA' | 'UKR' | 'ARE' | 'GBR' | 'TZA' | 'USA' | 'VIR' | 'URY' | 'UZB' | 'VUT' | 'VEN' | 'VNM' | 'WLF' | 'ESH' | 'YEM' | 'ZMB' | 'ZWE'; + +export type CurrentUser = { + readonly id: number; + /** + * Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters + */ + username: string; + /** + * Email address + */ + readonly email: string; + /** + * Full name, will be shown in some places instead of username + */ + display_name?: string; + /** + * Staff status + * Designates whether the user can log into this admin site. + */ + readonly is_staff: boolean; + /** + * Active + * Designates whether this user should be treated as active. Unselect this instead of deleting accounts. + */ + readonly is_active: boolean; + picture: Picture; +}; + +export type Device = { + readonly id: number; + name?: string; + /** + * Time the device was created. + */ + created_time?: string; +}; + +export type Drink = { + readonly id: number; + /** + * Flow sensor ticks, never changed once recorded. + */ + readonly ticks: number; + /** + * Calculated (or set) Drink volume. + */ + readonly volume_ml: number; + /** + * Date and time of pour. + */ + readonly time: string; + /** + * Time in seconds taken to pour this Drink. + */ + readonly duration: number; + user: User; + keg: Keg; + /** + * Session where this Drink is grouped. + */ + readonly session_id: number | null; + /** + * Comment from the drinker at the time of the pour. + */ + shout?: string | null; + picture: Picture; +}; + +export type DrinkReassignRequest = { + username: string; +}; + +export type DrinkingSession = { + readonly id: number; + start_time: string; + end_time: string; + volume_ml?: number; + timezone?: string; + name?: string | null; + readonly stats: unknown; +}; + +export type EmailChangeRequest = { + email: string; +}; + +export type EmailTestRequest = { + address: string; +}; + +export type FlowMeter = { + readonly id: number; + /** + * Controller that owns this meter. + */ + readonly controller_id: number; + /** + * Controller-specific data port name for this meter. + */ + port_name: string; + /** + * Tap to which this meter is currently bound. + */ + readonly tap_id: number | null; + /** + * Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), 5.4 (SF800) + */ + ticks_per_ml?: number; +}; + +export type FlowToggle = { + readonly id: number; + /** + * Controller that owns this toggle. + */ + readonly controller_id: number; + /** + * Controller-specific data port name for this toggle. + */ + port_name: string; + /** + * Tap to which this toggle is currently bound. + */ + readonly tap_id: number | null; +}; + +export type Invitation = { + readonly id: number; + /** + * Address this invitation was sent to. + */ + for_email: string; + /** + * Date invited + * Date and time the invitation was sent + */ + readonly invited_date: string; + /** + * Date expries + * Date and time after which the invitation is considered expired + */ + expires_date?: string; + readonly is_expired: boolean; +}; + +export type Keg = { + readonly id: number; + beverage: Beverage; + /** + * Keg container type, used to initialize keg's full volume + * + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ + keg_type?: KegTypeEnum; + /** + * Computed served volume. + */ + readonly served_volume_ml: number; + /** + * Full volume of this Keg; usually set automatically from keg_type. + */ + full_volume_ml?: number; + /** + * Time the Keg was first tapped. + */ + readonly start_time: string; + /** + * Time the Keg was finished or disconnected. + */ + readonly end_time: string; + /** + * Current keg state. + * + * * `available` - Available + * * `on_tap` - On tap + * * `finished` - Finished + */ + status: KegStatusEnum; + /** + * User-visible description of the Keg. + */ + description?: string | null; + /** + * Amount of beverage poured without an associated Drink. + */ + readonly spilled_ml: number; + /** + * Private notes about this keg, viewable only by admins. + */ + notes?: string | null; + readonly illustration: string; + readonly illustration_thumbnail: string; + readonly stats: unknown; +}; + +/** + * Parameters for creating a keg. + * + * The beverage may be given as an existing `beverage_id`, or described by + * the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) + * tuple, which matches or creates one. + */ +export type KegCreateRequest = { + beverage_id?: number | null; + beverage_name?: string; + beverage_type?: BeverageTypeEnum; + producer_name?: string; + style_name?: string; + keg_type?: KegTypeEnum; + full_volume_ml?: number | null; + description?: string; + notes?: string; +}; + +export type KegSpillRequest = { + volume_ml: number; +}; + +/** + * * `available` - Available + * * `on_tap` - On tap + * * `finished` - Finished + */ +export type KegStatusEnum = 'available' | 'on_tap' | 'finished'; + +export type KegTap = { + readonly id: number; + /** + * The display name for this tap, for example, "Main Tap". + */ + name: string; + /** + * Private notes about this tap. + */ + notes?: string | null; + readonly current_keg_id: number; + readonly temperature_sensor_id: number; + /** + * Position relative to other taps when sorting (0=first). + */ + sort_order?: number; + current_keg: Keg; +}; + +/** + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ +export type KegTypeEnum = 'mini' | 'corny-2_5-gal' | 'corny-3-gal' | 'corny' | 'sixth' | 'euro-30-liter' | 'euro-half' | 'quarter' | 'euro' | 'half-barrel' | 'other'; + +export type KegbotSite = { + readonly name: string; + readonly server_version: string | null; + /** + * True if the site has completed setup. + */ + readonly is_setup: boolean; + /** + * Unit system to use when displaying volumetric data. + * + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ + volume_display_units?: VolumeDisplayUnitsEnum; + /** + * Unit system to use when displaying temperature data. + * + * * `f` - Fahrenheit + * * `c` - Celsius + */ + temperature_display_units?: TemperatureDisplayUnitsEnum; + /** + * The title of this site. + */ + title?: string; + background_image: Picture; + /** + * Set to your Google Analytics ID to enable tracking. Example: UA-XXXX-y + */ + google_analytics_id?: string | null; + /** + * Maximum time, in minutes, that a session may be idle (no pours) before it is considered to be finished. Recommended value is 180. + */ + session_timeout_minutes?: number; + /** + * Who can view Kegbot data? + * + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ + privacy?: PrivacyEnum; + /** + * Who can join this Kegbot from the web site? + * + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ + registration_mode?: RegistrationModeEnum; + /** + * Time zone for this system. + * + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC + */ + timezone?: TimezoneEnum; + /** + * Enable and show features related to volume sensing. + */ + enable_sensing?: boolean; + /** + * Enable user pour tracking. + */ + enable_users?: boolean; + readonly stats: unknown; +}; + +export type Login = { + username: string; + password: string; +}; + +/** + * The boot payload: current user plus always-needed site metadata. + * + * Served to every caller with status 200; `user` is null when the caller + * is not authenticated. Static constants (choice lists, keg sizes, and + * similar) are NOT served here: they are baked into the frontend build + * via the `print_constants` management command. + */ +export type Me = { + user: CurrentUser | null; + site: SiteConfig; + can_invite: boolean; + have_sessions: boolean; + sso_login_url: string; + sso_logout_url: string; + plugins: Array; +}; + +/** + * Parameters for creating a keg. + * + * The beverage may be given as an existing `beverage_id`, or described by + * the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) + * tuple, which matches or creates one. + */ +export type NewKegRequest = { + beverage_id?: number | null; + beverage_name?: string; + beverage_type?: BeverageTypeEnum; + producer_name?: string; + style_name?: string; + keg_type?: KegTypeEnum; + full_volume_ml?: number | null; +}; + +export type NotificationSettings = { + readonly id: number; + /** + * User for these settings. + */ + readonly user_id: number; + /** + * Notification backend (dotted path) for these settings. + */ + backend: string; + /** + * Sent when a keg is activated. + */ + keg_tapped?: boolean; + /** + * Sent when a new drinking session starts. + */ + session_started?: boolean; + /** + * Sent when a keg becomes low. + */ + keg_volume_low?: boolean; + /** + * Sent when a keg has been taken offline. + */ + keg_ended?: boolean; +}; + +export type PaginatedApiKeyList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedAuthenticationTokenList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedBeverageList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedBeverageProducerList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedControllerList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedDeviceList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedDrinkList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedDrinkingSessionList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedFlowMeterList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedFlowToggleList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedInvitationList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedKegList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedKegTapList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedNotificationSettingsList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedPluginDataList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedStatsList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedSystemEventList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedThermoSensorList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedThermologList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedUserList = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PasswordChangeRequest = { + current_password: string; + new_password: string; +}; + +export type PasswordResetConfirmRequest = { + uid: string; + token: string; + new_password: string; +}; + +export type PasswordResetRequest = { + email: string; +}; + +export type PatchedAdminUserUpdateRequest = { + email?: string; + display_name?: string; + is_staff?: boolean; + is_active?: boolean; +}; + +export type PatchedApiKey = { + readonly id?: number; + /** + * User receiving API access. + */ + readonly user_id?: number | null; + /** + * Device this key is associated with. + */ + readonly device_id?: number | null; + is_active?: boolean; + readonly key?: string; + /** + * Information about this key. + */ + description?: string | null; + /** + * Time the key was created. + */ + created_time?: string; +}; + +export type PatchedAuthenticationToken = { + readonly id?: number; + /** + * Namespace for this token. + */ + auth_device?: string; + /** + * Actual value of the token, unique within an auth_device. + */ + token_value?: string; + /** + * A human-readable alias for the token, for example "Guest Key". + */ + nice_name?: string | null; + /** + * A secret value necessary to authenticate with this token. + */ + pin?: string | null; + /** + * User in possession of and authenticated by this token. + */ + readonly user_id?: number | null; + /** + * Whether this token is considered active. + */ + enabled?: boolean; + /** + * Date token was first added to the system. + */ + readonly created_time?: string; + /** + * Date after which token is treated as disabled. + */ + expire_time?: string | null; +}; + +export type PatchedBeverage = { + readonly id?: number; + /** + * Name of the beverage, such as "Potrero Pale". + */ + name?: string; + producer?: BeverageProducer; + beverage_type?: BeverageTypeEnum; + /** + * Beverage style within type, eg "Pale Ale", "Pinot Noir". + */ + style?: string | null; + /** + * Free-form description of the beverage. + */ + description?: string | null; + picture?: Picture; + /** + * Date of production, for wines or special/seasonal editions + */ + vintage_year?: string | null; + /** + * ABV Percentage + * Alcohol by volume, as percentage (0.0-100.0). + */ + abv_percent?: number | null; + /** + * Calories per mL of beverage. + */ + calories_per_ml?: number | null; + /** + * Carbohydrates per mL of beverage. + */ + carbs_per_ml?: number | null; + /** + * Color (Hex Value) + * Approximate beverage color + */ + color_hex?: string; + /** + * Original gravity (beer only). + */ + original_gravity?: number | null; + /** + * Final gravity (beer only). + */ + specific_gravity?: number | null; + /** + * SRM Value + * Standard Reference Method value (beer only). + */ + srm?: number | null; + /** + * IBUs + * International Bittering Units value (beer only). + */ + ibu?: number | null; + /** + * Star rating for beverage (0: worst, 5: best) + */ + star_rating?: number | null; + /** + * Untappd.com resource ID (beer only). + */ + untappd_beer_id?: number | null; +}; + +export type PatchedBeverageProducer = { + readonly id?: number; + /** + * Name of the brewer + */ + name?: string; + /** + * Country of origin + * + * * `AFG` - Afghanistan + * * `ALA` - Aland Islands + * * `ALB` - Albania + * * `DZA` - Algeria + * * `ASM` - American Samoa + * * `AND` - Andorra + * * `AGO` - Angola + * * `AIA` - Anguilla + * * `ATG` - Antigua and Barbuda + * * `ARG` - Argentina + * * `ARM` - Armenia + * * `ABW` - Aruba + * * `AUS` - Australia + * * `AUT` - Austria + * * `AZE` - Azerbaijan + * * `BHS` - Bahamas + * * `BHR` - Bahrain + * * `BGD` - Bangladesh + * * `BRB` - Barbados + * * `BLR` - Belarus + * * `BEL` - Belgium + * * `BLZ` - Belize + * * `BEN` - Benin + * * `BMU` - Bermuda + * * `BTN` - Bhutan + * * `BOL` - Bolivia + * * `BIH` - Bosnia and Herzegovina + * * `BWA` - Botswana + * * `BRA` - Brazil + * * `VGB` - British Virgin Islands + * * `BRN` - Brunei Darussalam + * * `BGR` - Bulgaria + * * `BFA` - Burkina Faso + * * `BDI` - Burundi + * * `KHM` - Cambodia + * * `CMR` - Cameroon + * * `CAN` - Canada + * * `CPV` - Cape Verde + * * `CYM` - Cayman Islands + * * `CAF` - Central African Republic + * * `TCD` - Chad + * * `CIL` - Channel Islands + * * `CHL` - Chile + * * `CHN` - China + * * `HKG` - China - Hong Kong + * * `MAC` - China - Macao + * * `COL` - Colombia + * * `COM` - Comoros + * * `COG` - Congo + * * `COK` - Cook Islands + * * `CRI` - Costa Rica + * * `CIV` - Cote d'Ivoire + * * `HRV` - Croatia + * * `CUB` - Cuba + * * `CYP` - Cyprus + * * `CZE` - Czech Republic + * * `PRK` - Democratic People's Republic of Korea + * * `COD` - Democratic Republic of the Congo + * * `DNK` - Denmark + * * `DJI` - Djibouti + * * `DMA` - Dominica + * * `DOM` - Dominican Republic + * * `ECU` - Ecuador + * * `EGY` - Egypt + * * `SLV` - El Salvador + * * `GNQ` - Equatorial Guinea + * * `ERI` - Eritrea + * * `EST` - Estonia + * * `ETH` - Ethiopia + * * `FRO` - Faeroe Islands + * * `FLK` - Falkland Islands (Malvinas) + * * `FJI` - Fiji + * * `FIN` - Finland + * * `FRA` - France + * * `GUF` - French Guiana + * * `PYF` - French Polynesia + * * `GAB` - Gabon + * * `GMB` - Gambia + * * `GEO` - Georgia + * * `DEU` - Germany + * * `GHA` - Ghana + * * `GIB` - Gibraltar + * * `GRC` - Greece + * * `GRL` - Greenland + * * `GRD` - Grenada + * * `GLP` - Guadeloupe + * * `GUM` - Guam + * * `GTM` - Guatemala + * * `GGY` - Guernsey + * * `GIN` - Guinea + * * `GNB` - Guinea-Bissau + * * `GUY` - Guyana + * * `HTI` - Haiti + * * `VAT` - Holy See (Vatican City) + * * `HND` - Honduras + * * `HUN` - Hungary + * * `ISL` - Iceland + * * `IND` - India + * * `IDN` - Indonesia + * * `IRN` - Iran + * * `IRQ` - Iraq + * * `IRL` - Ireland + * * `IMN` - Isle of Man + * * `ISR` - Israel + * * `ITA` - Italy + * * `JAM` - Jamaica + * * `JPN` - Japan + * * `JEY` - Jersey + * * `JOR` - Jordan + * * `KAZ` - Kazakhstan + * * `KEN` - Kenya + * * `KIR` - Kiribati + * * `KWT` - Kuwait + * * `KGZ` - Kyrgyzstan + * * `LAO` - Lao People's Democratic Republic + * * `LVA` - Latvia + * * `LBN` - Lebanon + * * `LSO` - Lesotho + * * `LBR` - Liberia + * * `LBY` - Libyan Arab Jamahiriya + * * `LIE` - Liechtenstein + * * `LTU` - Lithuania + * * `LUX` - Luxembourg + * * `MKD` - Macedonia + * * `MDG` - Madagascar + * * `MWI` - Malawi + * * `MYS` - Malaysia + * * `MDV` - Maldives + * * `MLI` - Mali + * * `MLT` - Malta + * * `MHL` - Marshall Islands + * * `MTQ` - Martinique + * * `MRT` - Mauritania + * * `MUS` - Mauritius + * * `MYT` - Mayotte + * * `MEX` - Mexico + * * `FSM` - Micronesia, Federated States of + * * `MCO` - Monaco + * * `MNG` - Mongolia + * * `MNE` - Montenegro + * * `MSR` - Montserrat + * * `MAR` - Morocco + * * `MOZ` - Mozambique + * * `MMR` - Myanmar + * * `NAM` - Namibia + * * `NRU` - Nauru + * * `NPL` - Nepal + * * `NLD` - Netherlands + * * `ANT` - Netherlands Antilles + * * `NCL` - New Caledonia + * * `NZL` - New Zealand + * * `NIC` - Nicaragua + * * `NER` - Niger + * * `NGA` - Nigeria + * * `NIU` - Niue + * * `NFK` - Norfolk Island + * * `MNP` - Northern Mariana Islands + * * `NOR` - Norway + * * `PSE` - Occupied Palestinian Territory + * * `OMN` - Oman + * * `PAK` - Pakistan + * * `PLW` - Palau + * * `PAN` - Panama + * * `PNG` - Papua New Guinea + * * `PRY` - Paraguay + * * `PER` - Peru + * * `PHL` - Philippines + * * `PCN` - Pitcairn + * * `POL` - Poland + * * `PRT` - Portugal + * * `PRI` - Puerto Rico + * * `QAT` - Qatar + * * `KOR` - Republic of Korea + * * `MDA` - Republic of Moldova + * * `REU` - Reunion + * * `ROU` - Romania + * * `RUS` - Russian Federation + * * `RWA` - Rwanda + * * `BLM` - Saint-Barthelemy + * * `SHN` - Saint Helena + * * `KNA` - Saint Kitts and Nevis + * * `LCA` - Saint Lucia + * * `MAF` - Saint-Martin (French part) + * * `SPM` - Saint Pierre and Miquelon + * * `VCT` - Saint Vincent and the Grenadines + * * `WSM` - Samoa + * * `SMR` - San Marino + * * `STP` - Sao Tome and Principe + * * `SAU` - Saudi Arabia + * * `SEN` - Senegal + * * `SRB` - Serbia + * * `SYC` - Seychelles + * * `SLE` - Sierra Leone + * * `SGP` - Singapore + * * `SVK` - Slovakia + * * `SVN` - Slovenia + * * `SLB` - Solomon Islands + * * `SOM` - Somalia + * * `ZAF` - South Africa + * * `ESP` - Spain + * * `LKA` - Sri Lanka + * * `SDN` - Sudan + * * `SUR` - Suriname + * * `SJM` - Svalbard and Jan Mayen Islands + * * `SWZ` - Swaziland + * * `SWE` - Sweden + * * `CHE` - Switzerland + * * `SYR` - Syrian Arab Republic + * * `TJK` - Tajikistan + * * `THA` - Thailand + * * `TLS` - Timor-Leste + * * `TGO` - Togo + * * `TKL` - Tokelau + * * `TON` - Tonga + * * `TTO` - Trinidad and Tobago + * * `TUN` - Tunisia + * * `TUR` - Turkey + * * `TKM` - Turkmenistan + * * `TCA` - Turks and Caicos Islands + * * `TUV` - Tuvalu + * * `UGA` - Uganda + * * `UKR` - Ukraine + * * `ARE` - United Arab Emirates + * * `GBR` - United Kingdom + * * `TZA` - United Republic of Tanzania + * * `USA` - United States of America + * * `VIR` - United States Virgin Islands + * * `URY` - Uruguay + * * `UZB` - Uzbekistan + * * `VUT` - Vanuatu + * * `VEN` - Venezuela (Bolivarian Republic of) + * * `VNM` - Viet Nam + * * `WLF` - Wallis and Futuna Islands + * * `ESH` - Western Sahara + * * `YEM` - Yemen + * * `ZMB` - Zambia + * * `ZWE` - Zimbabwe + */ + country?: CountryEnum; + /** + * State of origin, if applicable + */ + origin_state?: string | null; + /** + * City of origin, if known + */ + origin_city?: string | null; + is_homebrew?: boolean; + /** + * Brewer's home page + */ + url?: string | null; + /** + * A short description of the brewer + */ + description?: string | null; + picture?: Picture; +}; + +export type PatchedController = { + readonly id?: number; + /** + * Identifying name for this device; must be unique. + */ + name?: string; + /** + * Type of controller (optional). + */ + model_name?: string | null; + /** + * Serial number (optional). + */ + serial_number?: string | null; +}; + +export type PatchedDevice = { + readonly id?: number; + name?: string; + /** + * Time the device was created. + */ + created_time?: string; +}; + +export type PatchedDrinkUpdateRequest = { + shout?: string; + volume_ml?: number; +}; + +export type PatchedFlowMeter = { + readonly id?: number; + /** + * Controller that owns this meter. + */ + readonly controller_id?: number; + /** + * Controller-specific data port name for this meter. + */ + port_name?: string; + /** + * Tap to which this meter is currently bound. + */ + readonly tap_id?: number | null; + /** + * Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), 5.4 (SF800) + */ + ticks_per_ml?: number; +}; + +export type PatchedFlowToggle = { + readonly id?: number; + /** + * Controller that owns this toggle. + */ + readonly controller_id?: number; + /** + * Controller-specific data port name for this toggle. + */ + port_name?: string; + /** + * Tap to which this toggle is currently bound. + */ + readonly tap_id?: number | null; +}; + +export type PatchedKeg = { + readonly id?: number; + beverage?: Beverage; + /** + * Keg container type, used to initialize keg's full volume + * + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ + keg_type?: KegTypeEnum; + /** + * Computed served volume. + */ + readonly served_volume_ml?: number; + /** + * Full volume of this Keg; usually set automatically from keg_type. + */ + full_volume_ml?: number; + /** + * Time the Keg was first tapped. + */ + readonly start_time?: string; + /** + * Time the Keg was finished or disconnected. + */ + readonly end_time?: string; + /** + * Current keg state. + * + * * `available` - Available + * * `on_tap` - On tap + * * `finished` - Finished + */ + status?: KegStatusEnum; + /** + * User-visible description of the Keg. + */ + description?: string | null; + /** + * Amount of beverage poured without an associated Drink. + */ + readonly spilled_ml?: number; + /** + * Private notes about this keg, viewable only by admins. + */ + notes?: string | null; + readonly illustration?: string; + readonly illustration_thumbnail?: string; + readonly stats?: unknown; +}; + +export type PatchedKegTap = { + readonly id?: number; + /** + * The display name for this tap, for example, "Main Tap". + */ + name?: string; + /** + * Private notes about this tap. + */ + notes?: string | null; + readonly current_keg_id?: number; + readonly temperature_sensor_id?: number; + /** + * Position relative to other taps when sorting (0=first). + */ + sort_order?: number; + current_keg?: Keg; +}; + +export type PatchedNotificationSettings = { + readonly id?: number; + /** + * User for these settings. + */ + readonly user_id?: number; + /** + * Notification backend (dotted path) for these settings. + */ + backend?: string; + /** + * Sent when a keg is activated. + */ + keg_tapped?: boolean; + /** + * Sent when a new drinking session starts. + */ + session_started?: boolean; + /** + * Sent when a keg becomes low. + */ + keg_volume_low?: boolean; + /** + * Sent when a keg has been taken offline. + */ + keg_ended?: boolean; +}; + +export type PatchedPluginData = { + /** + * Plugin short name + */ + plugin_name?: string; + key?: string; + value?: unknown; +}; + +export type PatchedProfileUpdateRequest = { + display_name?: string; +}; + +/** + * Admin-editable site settings, covering the old settings forms. + */ +export type PatchedSiteSettings = { + readonly name?: string; + readonly server_version?: string | null; + /** + * True if the site has completed setup. + */ + readonly is_setup?: boolean; + /** + * The title of this site. + */ + title?: string; + /** + * Who can view Kegbot data? + * + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ + privacy?: PrivacyEnum; + /** + * Who can join this Kegbot from the web site? + * + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ + registration_mode?: RegistrationModeEnum; + /** + * Enable and show features related to volume sensing. + */ + enable_sensing?: boolean; + /** + * Enable user pour tracking. + */ + enable_users?: boolean; + /** + * Unit system to use when displaying volumetric data. + * + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ + volume_display_units?: VolumeDisplayUnitsEnum; + /** + * Unit system to use when displaying temperature data. + * + * * `f` - Fahrenheit + * * `c` - Celsius + */ + temperature_display_units?: TemperatureDisplayUnitsEnum; + /** + * Time zone for this system. + * + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC + */ + timezone?: TimezoneEnum; + /** + * Maximum time, in minutes, that a session may be idle (no pours) before it is considered to be finished. Recommended value is 180. + */ + session_timeout_minutes?: number; + /** + * Set to your Google Analytics ID to enable tracking. Example: UA-XXXX-y + */ + google_analytics_id?: string | null; + /** + * Backend email configuration + */ + email_config?: string; + background_image?: Picture; +}; + +export type PatchedThermoSensor = { + readonly id?: number; + raw_name?: string; + nice_name?: string; +}; + +export type Picture = { + readonly id: number; + readonly resized_url: string; + readonly resized_png_url: string; + readonly thumbnail_url: string; + readonly thumbnail_png_url: string; + caption: string; + /** + * User that owns/uploaded this picture + */ + readonly user_id: number | null; + /** + * Keg this picture was taken with, if any. + */ + readonly keg_id: number | null; + /** + * Session this picture was taken with, if any. + */ + readonly session_id: number | null; +}; + +export type PictureUploadRequest = { + image: string; + caption?: string; +}; + +export type PluginData = { + /** + * Plugin short name + */ + plugin_name: string; + key: string; + value: unknown; +}; + +export type PluginInfo = { + short_name: string; + name: string; +}; + +/** + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ +export type PrivacyEnum = 'public' | 'members' | 'staff'; + +export type RegisterRequest = { + username: string; + email: string; + password: string; + invite_code?: string; +}; + +/** + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ +export type RegistrationModeEnum = 'public' | 'member-invite-only' | 'staff-invite-only'; + +export type SetPasswordRequest = { + password: string; +}; + +export type SetupAdminUserRequest = { + username: string; + email: string; + password: string; +}; + +/** + * The subset of site settings collected during the setup wizard. + */ +export type SetupSiteSettingsRequest = { + /** + * The title of this site. + */ + title?: string; + /** + * Who can view Kegbot data? + * + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ + privacy?: PrivacyEnum; + /** + * Time zone for this system. + * + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC + */ + timezone?: TimezoneEnum; + /** + * Unit system to use when displaying volumetric data. + * + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ + volume_display_units?: VolumeDisplayUnitsEnum; + /** + * Unit system to use when displaying temperature data. + * + * * `f` - Fahrenheit + * * `c` - Celsius + */ + temperature_display_units?: TemperatureDisplayUnitsEnum; + /** + * Enable and show features related to volume sensing. + */ + enable_sensing?: boolean; + /** + * Enable user pour tracking. + */ + enable_users?: boolean; +}; + +export type SetupStatus = { + need_setup: boolean; + need_upgrade: boolean; + installed_version: string | null; + current_version: string; +}; + +/** + * The privacy-safe subset of site settings, embedded in the boot payload. + * + * Unlike `KegbotSiteSerializer`, this contains no data derived from pours + * (no stats): it is served to anonymous users regardless of site privacy, + * since the frontend needs it to render the login and interstitial screens. + */ +export type SiteConfig = { + readonly server_version: string | null; + /** + * The title of this site. + */ + title?: string; + /** + * Who can view Kegbot data? + * + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ + privacy?: PrivacyEnum; + /** + * Who can join this Kegbot from the web site? + * + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ + registration_mode?: RegistrationModeEnum; + /** + * Unit system to use when displaying volumetric data. + * + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ + volume_display_units?: VolumeDisplayUnitsEnum; + /** + * Unit system to use when displaying temperature data. + * + * * `f` - Fahrenheit + * * `c` - Celsius + */ + temperature_display_units?: TemperatureDisplayUnitsEnum; + /** + * Time zone for this system. + * + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC + */ + timezone?: TimezoneEnum; + /** + * Maximum time, in minutes, that a session may be idle (no pours) before it is considered to be finished. Recommended value is 180. + */ + session_timeout_minutes?: number; + /** + * Enable and show features related to volume sensing. + */ + enable_sensing?: boolean; + /** + * Enable user pour tracking. + */ + enable_users?: boolean; + /** + * Set to your Google Analytics ID to enable tracking. Example: UA-XXXX-y + */ + google_analytics_id?: string | null; + background_image: Picture; +}; + +/** + * Admin-editable site settings, covering the old settings forms. + */ +export type SiteSettings = { + readonly name: string; + readonly server_version: string | null; + /** + * True if the site has completed setup. + */ + readonly is_setup: boolean; + /** + * The title of this site. + */ + title?: string; + /** + * Who can view Kegbot data? + * + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ + privacy?: PrivacyEnum; + /** + * Who can join this Kegbot from the web site? + * + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ + registration_mode?: RegistrationModeEnum; + /** + * Enable and show features related to volume sensing. + */ + enable_sensing?: boolean; + /** + * Enable user pour tracking. + */ + enable_users?: boolean; + /** + * Unit system to use when displaying volumetric data. + * + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ + volume_display_units?: VolumeDisplayUnitsEnum; + /** + * Unit system to use when displaying temperature data. + * + * * `f` - Fahrenheit + * * `c` - Celsius + */ + temperature_display_units?: TemperatureDisplayUnitsEnum; + /** + * Time zone for this system. + * + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC + */ + timezone?: TimezoneEnum; + /** + * Maximum time, in minutes, that a session may be idle (no pours) before it is considered to be finished. Recommended value is 180. + */ + session_timeout_minutes?: number; + /** + * Set to your Google Analytics ID to enable tracking. Example: UA-XXXX-y + */ + google_analytics_id?: string | null; + /** + * Backend email configuration + */ + email_config?: string; + background_image: Picture; +}; + +export type Stats = { + time?: string; + stats: unknown; + readonly drink_id: number; + readonly user_id: number | null; + readonly keg_id: number | null; + readonly session_id: number | null; +}; + +export type SystemEvent = { + readonly id: number; + /** + * Type of event. + * + * * `drink_poured` - Drink poured + * * `session_started` - Session started + * * `session_joined` - User joined session + * * `keg_tapped` - Keg tapped + * * `keg_volume_low` - Keg volume low + * * `keg_ended` - Keg ended + */ + kind: SystemEventKindEnum; + /** + * Time of the event. + */ + time: string; + drink: Drink; + user: User; + keg: Keg; + session: DrinkingSession; +}; + +/** + * * `drink_poured` - Drink poured + * * `session_started` - Session started + * * `session_joined` - User joined session + * * `keg_tapped` - Keg tapped + * * `keg_volume_low` - Keg volume low + * * `keg_ended` - Keg ended + */ +export type SystemEventKindEnum = 'drink_poured' | 'session_started' | 'session_joined' | 'keg_tapped' | 'keg_volume_low' | 'keg_ended'; + +/** + * A summarized system status status, with the most common "current status" data. + */ +export type SystemStatus = { + site: KegbotSite; + taps: Array; + events: Array; +}; + +export type TapAttachKegRequest = { + keg_id: number; +}; + +export type TapConnectMeterRequest = { + meter_id: number | null; +}; + +export type TapConnectThermoRequest = { + thermo_sensor_id: number | null; +}; + +export type TapConnectToggleRequest = { + toggle_id: number | null; +}; + +export type TapRecordDrinkRequest = { + volume_ml: number; + username?: string; + pour_time?: string | null; + duration?: number; + shout?: string; + spilled?: boolean; +}; + +/** + * * `f` - Fahrenheit + * * `c` - Celsius + */ +export type TemperatureDisplayUnitsEnum = 'f' | 'c'; + +export type ThermoSensor = { + readonly id: number; + raw_name: string; + nice_name: string; +}; + +export type Thermolog = { + time: string; + temp: number; + readonly sensor_id: number; +}; + +/** + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC + */ +export type TimezoneEnum = 'Africa/Abidjan' | 'Africa/Accra' | 'Africa/Addis_Ababa' | 'Africa/Algiers' | 'Africa/Asmara' | 'Africa/Asmera' | 'Africa/Bamako' | 'Africa/Bangui' | 'Africa/Banjul' | 'Africa/Bissau' | 'Africa/Blantyre' | 'Africa/Brazzaville' | 'Africa/Bujumbura' | 'Africa/Cairo' | 'Africa/Casablanca' | 'Africa/Ceuta' | 'Africa/Conakry' | 'Africa/Dakar' | 'Africa/Dar_es_Salaam' | 'Africa/Djibouti' | 'Africa/Douala' | 'Africa/El_Aaiun' | 'Africa/Freetown' | 'Africa/Gaborone' | 'Africa/Harare' | 'Africa/Johannesburg' | 'Africa/Juba' | 'Africa/Kampala' | 'Africa/Khartoum' | 'Africa/Kigali' | 'Africa/Kinshasa' | 'Africa/Lagos' | 'Africa/Libreville' | 'Africa/Lome' | 'Africa/Luanda' | 'Africa/Lubumbashi' | 'Africa/Lusaka' | 'Africa/Malabo' | 'Africa/Maputo' | 'Africa/Maseru' | 'Africa/Mbabane' | 'Africa/Mogadishu' | 'Africa/Monrovia' | 'Africa/Nairobi' | 'Africa/Ndjamena' | 'Africa/Niamey' | 'Africa/Nouakchott' | 'Africa/Ouagadougou' | 'Africa/Porto-Novo' | 'Africa/Sao_Tome' | 'Africa/Timbuktu' | 'Africa/Tripoli' | 'Africa/Tunis' | 'Africa/Windhoek' | 'America/Adak' | 'America/Anchorage' | 'America/Anguilla' | 'America/Antigua' | 'America/Araguaina' | 'America/Argentina/Buenos_Aires' | 'America/Argentina/Catamarca' | 'America/Argentina/ComodRivadavia' | 'America/Argentina/Cordoba' | 'America/Argentina/Jujuy' | 'America/Argentina/La_Rioja' | 'America/Argentina/Mendoza' | 'America/Argentina/Rio_Gallegos' | 'America/Argentina/Salta' | 'America/Argentina/San_Juan' | 'America/Argentina/San_Luis' | 'America/Argentina/Tucuman' | 'America/Argentina/Ushuaia' | 'America/Aruba' | 'America/Asuncion' | 'America/Atikokan' | 'America/Atka' | 'America/Bahia' | 'America/Bahia_Banderas' | 'America/Barbados' | 'America/Belem' | 'America/Belize' | 'America/Blanc-Sablon' | 'America/Boa_Vista' | 'America/Bogota' | 'America/Boise' | 'America/Buenos_Aires' | 'America/Cambridge_Bay' | 'America/Campo_Grande' | 'America/Cancun' | 'America/Caracas' | 'America/Catamarca' | 'America/Cayenne' | 'America/Cayman' | 'America/Chicago' | 'America/Chihuahua' | 'America/Ciudad_Juarez' | 'America/Coral_Harbour' | 'America/Cordoba' | 'America/Costa_Rica' | 'America/Coyhaique' | 'America/Creston' | 'America/Cuiaba' | 'America/Curacao' | 'America/Danmarkshavn' | 'America/Dawson' | 'America/Dawson_Creek' | 'America/Denver' | 'America/Detroit' | 'America/Dominica' | 'America/Edmonton' | 'America/Eirunepe' | 'America/El_Salvador' | 'America/Ensenada' | 'America/Fort_Nelson' | 'America/Fort_Wayne' | 'America/Fortaleza' | 'America/Glace_Bay' | 'America/Godthab' | 'America/Goose_Bay' | 'America/Grand_Turk' | 'America/Grenada' | 'America/Guadeloupe' | 'America/Guatemala' | 'America/Guayaquil' | 'America/Guyana' | 'America/Halifax' | 'America/Havana' | 'America/Hermosillo' | 'America/Indiana/Indianapolis' | 'America/Indiana/Knox' | 'America/Indiana/Marengo' | 'America/Indiana/Petersburg' | 'America/Indiana/Tell_City' | 'America/Indiana/Vevay' | 'America/Indiana/Vincennes' | 'America/Indiana/Winamac' | 'America/Indianapolis' | 'America/Inuvik' | 'America/Iqaluit' | 'America/Jamaica' | 'America/Jujuy' | 'America/Juneau' | 'America/Kentucky/Louisville' | 'America/Kentucky/Monticello' | 'America/Knox_IN' | 'America/Kralendijk' | 'America/La_Paz' | 'America/Lima' | 'America/Los_Angeles' | 'America/Louisville' | 'America/Lower_Princes' | 'America/Maceio' | 'America/Managua' | 'America/Manaus' | 'America/Marigot' | 'America/Martinique' | 'America/Matamoros' | 'America/Mazatlan' | 'America/Mendoza' | 'America/Menominee' | 'America/Merida' | 'America/Metlakatla' | 'America/Mexico_City' | 'America/Miquelon' | 'America/Moncton' | 'America/Monterrey' | 'America/Montevideo' | 'America/Montreal' | 'America/Montserrat' | 'America/Nassau' | 'America/New_York' | 'America/Nipigon' | 'America/Nome' | 'America/Noronha' | 'America/North_Dakota/Beulah' | 'America/North_Dakota/Center' | 'America/North_Dakota/New_Salem' | 'America/Nuuk' | 'America/Ojinaga' | 'America/Panama' | 'America/Pangnirtung' | 'America/Paramaribo' | 'America/Phoenix' | 'America/Port-au-Prince' | 'America/Port_of_Spain' | 'America/Porto_Acre' | 'America/Porto_Velho' | 'America/Puerto_Rico' | 'America/Punta_Arenas' | 'America/Rainy_River' | 'America/Rankin_Inlet' | 'America/Recife' | 'America/Regina' | 'America/Resolute' | 'America/Rio_Branco' | 'America/Rosario' | 'America/Santa_Isabel' | 'America/Santarem' | 'America/Santiago' | 'America/Santo_Domingo' | 'America/Sao_Paulo' | 'America/Scoresbysund' | 'America/Shiprock' | 'America/Sitka' | 'America/St_Barthelemy' | 'America/St_Johns' | 'America/St_Kitts' | 'America/St_Lucia' | 'America/St_Thomas' | 'America/St_Vincent' | 'America/Swift_Current' | 'America/Tegucigalpa' | 'America/Thule' | 'America/Thunder_Bay' | 'America/Tijuana' | 'America/Toronto' | 'America/Tortola' | 'America/Vancouver' | 'America/Virgin' | 'America/Whitehorse' | 'America/Winnipeg' | 'America/Yakutat' | 'America/Yellowknife' | 'Antarctica/Casey' | 'Antarctica/Davis' | 'Antarctica/DumontDUrville' | 'Antarctica/Macquarie' | 'Antarctica/Mawson' | 'Antarctica/McMurdo' | 'Antarctica/Palmer' | 'Antarctica/Rothera' | 'Antarctica/South_Pole' | 'Antarctica/Syowa' | 'Antarctica/Troll' | 'Antarctica/Vostok' | 'Arctic/Longyearbyen' | 'Asia/Aden' | 'Asia/Almaty' | 'Asia/Amman' | 'Asia/Anadyr' | 'Asia/Aqtau' | 'Asia/Aqtobe' | 'Asia/Ashgabat' | 'Asia/Ashkhabad' | 'Asia/Atyrau' | 'Asia/Baghdad' | 'Asia/Bahrain' | 'Asia/Baku' | 'Asia/Bangkok' | 'Asia/Barnaul' | 'Asia/Beirut' | 'Asia/Bishkek' | 'Asia/Brunei' | 'Asia/Calcutta' | 'Asia/Chita' | 'Asia/Choibalsan' | 'Asia/Chongqing' | 'Asia/Chungking' | 'Asia/Colombo' | 'Asia/Dacca' | 'Asia/Damascus' | 'Asia/Dhaka' | 'Asia/Dili' | 'Asia/Dubai' | 'Asia/Dushanbe' | 'Asia/Famagusta' | 'Asia/Gaza' | 'Asia/Harbin' | 'Asia/Hebron' | 'Asia/Ho_Chi_Minh' | 'Asia/Hong_Kong' | 'Asia/Hovd' | 'Asia/Irkutsk' | 'Asia/Istanbul' | 'Asia/Jakarta' | 'Asia/Jayapura' | 'Asia/Jerusalem' | 'Asia/Kabul' | 'Asia/Kamchatka' | 'Asia/Karachi' | 'Asia/Kashgar' | 'Asia/Kathmandu' | 'Asia/Katmandu' | 'Asia/Khandyga' | 'Asia/Kolkata' | 'Asia/Krasnoyarsk' | 'Asia/Kuala_Lumpur' | 'Asia/Kuching' | 'Asia/Kuwait' | 'Asia/Macao' | 'Asia/Macau' | 'Asia/Magadan' | 'Asia/Makassar' | 'Asia/Manila' | 'Asia/Muscat' | 'Asia/Nicosia' | 'Asia/Novokuznetsk' | 'Asia/Novosibirsk' | 'Asia/Omsk' | 'Asia/Oral' | 'Asia/Phnom_Penh' | 'Asia/Pontianak' | 'Asia/Pyongyang' | 'Asia/Qatar' | 'Asia/Qostanay' | 'Asia/Qyzylorda' | 'Asia/Rangoon' | 'Asia/Riyadh' | 'Asia/Saigon' | 'Asia/Sakhalin' | 'Asia/Samarkand' | 'Asia/Seoul' | 'Asia/Shanghai' | 'Asia/Singapore' | 'Asia/Srednekolymsk' | 'Asia/Taipei' | 'Asia/Tashkent' | 'Asia/Tbilisi' | 'Asia/Tehran' | 'Asia/Tel_Aviv' | 'Asia/Thimbu' | 'Asia/Thimphu' | 'Asia/Tokyo' | 'Asia/Tomsk' | 'Asia/Ujung_Pandang' | 'Asia/Ulaanbaatar' | 'Asia/Ulan_Bator' | 'Asia/Urumqi' | 'Asia/Ust-Nera' | 'Asia/Vientiane' | 'Asia/Vladivostok' | 'Asia/Yakutsk' | 'Asia/Yangon' | 'Asia/Yekaterinburg' | 'Asia/Yerevan' | 'Atlantic/Azores' | 'Atlantic/Bermuda' | 'Atlantic/Canary' | 'Atlantic/Cape_Verde' | 'Atlantic/Faeroe' | 'Atlantic/Faroe' | 'Atlantic/Jan_Mayen' | 'Atlantic/Madeira' | 'Atlantic/Reykjavik' | 'Atlantic/South_Georgia' | 'Atlantic/St_Helena' | 'Atlantic/Stanley' | 'Australia/ACT' | 'Australia/Adelaide' | 'Australia/Brisbane' | 'Australia/Broken_Hill' | 'Australia/Canberra' | 'Australia/Currie' | 'Australia/Darwin' | 'Australia/Eucla' | 'Australia/Hobart' | 'Australia/LHI' | 'Australia/Lindeman' | 'Australia/Lord_Howe' | 'Australia/Melbourne' | 'Australia/NSW' | 'Australia/North' | 'Australia/Perth' | 'Australia/Queensland' | 'Australia/South' | 'Australia/Sydney' | 'Australia/Tasmania' | 'Australia/Victoria' | 'Australia/West' | 'Australia/Yancowinna' | 'Brazil/Acre' | 'Brazil/DeNoronha' | 'Brazil/East' | 'Brazil/West' | 'Canada/Atlantic' | 'Canada/Central' | 'Canada/Eastern' | 'Canada/Mountain' | 'Canada/Newfoundland' | 'Canada/Pacific' | 'Canada/Saskatchewan' | 'Canada/Yukon' | 'Chile/Continental' | 'Chile/EasterIsland' | 'Europe/Amsterdam' | 'Europe/Andorra' | 'Europe/Astrakhan' | 'Europe/Athens' | 'Europe/Belfast' | 'Europe/Belgrade' | 'Europe/Berlin' | 'Europe/Bratislava' | 'Europe/Brussels' | 'Europe/Bucharest' | 'Europe/Budapest' | 'Europe/Busingen' | 'Europe/Chisinau' | 'Europe/Copenhagen' | 'Europe/Dublin' | 'Europe/Gibraltar' | 'Europe/Guernsey' | 'Europe/Helsinki' | 'Europe/Isle_of_Man' | 'Europe/Istanbul' | 'Europe/Jersey' | 'Europe/Kaliningrad' | 'Europe/Kiev' | 'Europe/Kirov' | 'Europe/Kyiv' | 'Europe/Lisbon' | 'Europe/Ljubljana' | 'Europe/London' | 'Europe/Luxembourg' | 'Europe/Madrid' | 'Europe/Malta' | 'Europe/Mariehamn' | 'Europe/Minsk' | 'Europe/Monaco' | 'Europe/Moscow' | 'Europe/Nicosia' | 'Europe/Oslo' | 'Europe/Paris' | 'Europe/Podgorica' | 'Europe/Prague' | 'Europe/Riga' | 'Europe/Rome' | 'Europe/Samara' | 'Europe/San_Marino' | 'Europe/Sarajevo' | 'Europe/Saratov' | 'Europe/Simferopol' | 'Europe/Skopje' | 'Europe/Sofia' | 'Europe/Stockholm' | 'Europe/Tallinn' | 'Europe/Tirane' | 'Europe/Tiraspol' | 'Europe/Ulyanovsk' | 'Europe/Uzhgorod' | 'Europe/Vaduz' | 'Europe/Vatican' | 'Europe/Vienna' | 'Europe/Vilnius' | 'Europe/Volgograd' | 'Europe/Warsaw' | 'Europe/Zagreb' | 'Europe/Zaporozhye' | 'Europe/Zurich' | 'Indian/Antananarivo' | 'Indian/Chagos' | 'Indian/Christmas' | 'Indian/Cocos' | 'Indian/Comoro' | 'Indian/Kerguelen' | 'Indian/Mahe' | 'Indian/Maldives' | 'Indian/Mauritius' | 'Indian/Mayotte' | 'Indian/Reunion' | 'Mexico/BajaNorte' | 'Mexico/BajaSur' | 'Mexico/General' | 'Pacific/Apia' | 'Pacific/Auckland' | 'Pacific/Bougainville' | 'Pacific/Chatham' | 'Pacific/Chuuk' | 'Pacific/Easter' | 'Pacific/Efate' | 'Pacific/Enderbury' | 'Pacific/Fakaofo' | 'Pacific/Fiji' | 'Pacific/Funafuti' | 'Pacific/Galapagos' | 'Pacific/Gambier' | 'Pacific/Guadalcanal' | 'Pacific/Guam' | 'Pacific/Honolulu' | 'Pacific/Johnston' | 'Pacific/Kanton' | 'Pacific/Kiritimati' | 'Pacific/Kosrae' | 'Pacific/Kwajalein' | 'Pacific/Majuro' | 'Pacific/Marquesas' | 'Pacific/Midway' | 'Pacific/Nauru' | 'Pacific/Niue' | 'Pacific/Norfolk' | 'Pacific/Noumea' | 'Pacific/Pago_Pago' | 'Pacific/Palau' | 'Pacific/Pitcairn' | 'Pacific/Pohnpei' | 'Pacific/Ponape' | 'Pacific/Port_Moresby' | 'Pacific/Rarotonga' | 'Pacific/Saipan' | 'Pacific/Samoa' | 'Pacific/Tahiti' | 'Pacific/Tarawa' | 'Pacific/Tongatapu' | 'Pacific/Truk' | 'Pacific/Wake' | 'Pacific/Wallis' | 'Pacific/Yap' | 'US/Alaska' | 'US/Aleutian' | 'US/Arizona' | 'US/Central' | 'US/East-Indiana' | 'US/Eastern' | 'US/Hawaii' | 'US/Indiana-Starke' | 'US/Michigan' | 'US/Mountain' | 'US/Pacific' | 'US/Samoa' | 'UTC'; + +export type User = { + readonly id: number; + /** + * Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters + */ + username: string; + /** + * Full name, will be shown in some places instead of username + */ + display_name?: string; + /** + * Staff status + * Designates whether the user can log into this admin site. + */ + readonly is_staff: boolean; + /** + * Active + * Designates whether this user should be treated as active. Unselect this instead of deleting accounts. + */ + readonly is_active: boolean; + picture: Picture; +}; + +/** + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ +export type VolumeDisplayUnitsEnum = 'metric' | 'imperial'; + +export type AuthenticationTokenWritable = { + /** + * Namespace for this token. + */ + auth_device: string; + /** + * Actual value of the token, unique within an auth_device. + */ + token_value: string; + /** + * A human-readable alias for the token, for example "Guest Key". + */ + nice_name?: string | null; + /** + * A secret value necessary to authenticate with this token. + */ + pin?: string | null; + user?: number | null; + /** + * Whether this token is considered active. + */ + enabled?: boolean; + /** + * Date after which token is treated as disabled. + */ + expire_time?: string | null; +}; + +export type BeverageWritable = { + /** + * Name of the beverage, such as "Potrero Pale". + */ + name: string; + producer_id: number; + beverage_type?: BeverageTypeEnumWritable; + /** + * Beverage style within type, eg "Pale Ale", "Pinot Noir". + */ + style?: string | null; + /** + * Free-form description of the beverage. + */ + description?: string | null; + /** + * Date of production, for wines or special/seasonal editions + */ + vintage_year?: string | null; + /** + * ABV Percentage + * Alcohol by volume, as percentage (0.0-100.0). + */ + abv_percent?: number | null; + /** + * Calories per mL of beverage. + */ + calories_per_ml?: number | null; + /** + * Carbohydrates per mL of beverage. + */ + carbs_per_ml?: number | null; + /** + * Color (Hex Value) + * Approximate beverage color + */ + color_hex?: string; + /** + * Original gravity (beer only). + */ + original_gravity?: number | null; + /** + * Final gravity (beer only). + */ + specific_gravity?: number | null; + /** + * SRM Value + * Standard Reference Method value (beer only). + */ + srm?: number | null; + /** + * IBUs + * International Bittering Units value (beer only). + */ + ibu?: number | null; + /** + * Star rating for beverage (0: worst, 5: best) + */ + star_rating?: number | null; + /** + * Untappd.com resource ID (beer only). + */ + untappd_beer_id?: number | null; +}; + +/** + * * `beer` - Beer + * * `wine` - Wine + * * `soda` - Soda + * * `kombucha` - Kombucha + * * `other` - Other/Unknown + */ +export type BeverageTypeEnumWritable = 'beer' | 'wine' | 'soda' | 'kombucha' | 'other'; + +/** + * * `AFG` - Afghanistan + * * `ALA` - Aland Islands + * * `ALB` - Albania + * * `DZA` - Algeria + * * `ASM` - American Samoa + * * `AND` - Andorra + * * `AGO` - Angola + * * `AIA` - Anguilla + * * `ATG` - Antigua and Barbuda + * * `ARG` - Argentina + * * `ARM` - Armenia + * * `ABW` - Aruba + * * `AUS` - Australia + * * `AUT` - Austria + * * `AZE` - Azerbaijan + * * `BHS` - Bahamas + * * `BHR` - Bahrain + * * `BGD` - Bangladesh + * * `BRB` - Barbados + * * `BLR` - Belarus + * * `BEL` - Belgium + * * `BLZ` - Belize + * * `BEN` - Benin + * * `BMU` - Bermuda + * * `BTN` - Bhutan + * * `BOL` - Bolivia + * * `BIH` - Bosnia and Herzegovina + * * `BWA` - Botswana + * * `BRA` - Brazil + * * `VGB` - British Virgin Islands + * * `BRN` - Brunei Darussalam + * * `BGR` - Bulgaria + * * `BFA` - Burkina Faso + * * `BDI` - Burundi + * * `KHM` - Cambodia + * * `CMR` - Cameroon + * * `CAN` - Canada + * * `CPV` - Cape Verde + * * `CYM` - Cayman Islands + * * `CAF` - Central African Republic + * * `TCD` - Chad + * * `CIL` - Channel Islands + * * `CHL` - Chile + * * `CHN` - China + * * `HKG` - China - Hong Kong + * * `MAC` - China - Macao + * * `COL` - Colombia + * * `COM` - Comoros + * * `COG` - Congo + * * `COK` - Cook Islands + * * `CRI` - Costa Rica + * * `CIV` - Cote d'Ivoire + * * `HRV` - Croatia + * * `CUB` - Cuba + * * `CYP` - Cyprus + * * `CZE` - Czech Republic + * * `PRK` - Democratic People's Republic of Korea + * * `COD` - Democratic Republic of the Congo + * * `DNK` - Denmark + * * `DJI` - Djibouti + * * `DMA` - Dominica + * * `DOM` - Dominican Republic + * * `ECU` - Ecuador + * * `EGY` - Egypt + * * `SLV` - El Salvador + * * `GNQ` - Equatorial Guinea + * * `ERI` - Eritrea + * * `EST` - Estonia + * * `ETH` - Ethiopia + * * `FRO` - Faeroe Islands + * * `FLK` - Falkland Islands (Malvinas) + * * `FJI` - Fiji + * * `FIN` - Finland + * * `FRA` - France + * * `GUF` - French Guiana + * * `PYF` - French Polynesia + * * `GAB` - Gabon + * * `GMB` - Gambia + * * `GEO` - Georgia + * * `DEU` - Germany + * * `GHA` - Ghana + * * `GIB` - Gibraltar + * * `GRC` - Greece + * * `GRL` - Greenland + * * `GRD` - Grenada + * * `GLP` - Guadeloupe + * * `GUM` - Guam + * * `GTM` - Guatemala + * * `GGY` - Guernsey + * * `GIN` - Guinea + * * `GNB` - Guinea-Bissau + * * `GUY` - Guyana + * * `HTI` - Haiti + * * `VAT` - Holy See (Vatican City) + * * `HND` - Honduras + * * `HUN` - Hungary + * * `ISL` - Iceland + * * `IND` - India + * * `IDN` - Indonesia + * * `IRN` - Iran + * * `IRQ` - Iraq + * * `IRL` - Ireland + * * `IMN` - Isle of Man + * * `ISR` - Israel + * * `ITA` - Italy + * * `JAM` - Jamaica + * * `JPN` - Japan + * * `JEY` - Jersey + * * `JOR` - Jordan + * * `KAZ` - Kazakhstan + * * `KEN` - Kenya + * * `KIR` - Kiribati + * * `KWT` - Kuwait + * * `KGZ` - Kyrgyzstan + * * `LAO` - Lao People's Democratic Republic + * * `LVA` - Latvia + * * `LBN` - Lebanon + * * `LSO` - Lesotho + * * `LBR` - Liberia + * * `LBY` - Libyan Arab Jamahiriya + * * `LIE` - Liechtenstein + * * `LTU` - Lithuania + * * `LUX` - Luxembourg + * * `MKD` - Macedonia + * * `MDG` - Madagascar + * * `MWI` - Malawi + * * `MYS` - Malaysia + * * `MDV` - Maldives + * * `MLI` - Mali + * * `MLT` - Malta + * * `MHL` - Marshall Islands + * * `MTQ` - Martinique + * * `MRT` - Mauritania + * * `MUS` - Mauritius + * * `MYT` - Mayotte + * * `MEX` - Mexico + * * `FSM` - Micronesia, Federated States of + * * `MCO` - Monaco + * * `MNG` - Mongolia + * * `MNE` - Montenegro + * * `MSR` - Montserrat + * * `MAR` - Morocco + * * `MOZ` - Mozambique + * * `MMR` - Myanmar + * * `NAM` - Namibia + * * `NRU` - Nauru + * * `NPL` - Nepal + * * `NLD` - Netherlands + * * `ANT` - Netherlands Antilles + * * `NCL` - New Caledonia + * * `NZL` - New Zealand + * * `NIC` - Nicaragua + * * `NER` - Niger + * * `NGA` - Nigeria + * * `NIU` - Niue + * * `NFK` - Norfolk Island + * * `MNP` - Northern Mariana Islands + * * `NOR` - Norway + * * `PSE` - Occupied Palestinian Territory + * * `OMN` - Oman + * * `PAK` - Pakistan + * * `PLW` - Palau + * * `PAN` - Panama + * * `PNG` - Papua New Guinea + * * `PRY` - Paraguay + * * `PER` - Peru + * * `PHL` - Philippines + * * `PCN` - Pitcairn + * * `POL` - Poland + * * `PRT` - Portugal + * * `PRI` - Puerto Rico + * * `QAT` - Qatar + * * `KOR` - Republic of Korea + * * `MDA` - Republic of Moldova + * * `REU` - Reunion + * * `ROU` - Romania + * * `RUS` - Russian Federation + * * `RWA` - Rwanda + * * `BLM` - Saint-Barthelemy + * * `SHN` - Saint Helena + * * `KNA` - Saint Kitts and Nevis + * * `LCA` - Saint Lucia + * * `MAF` - Saint-Martin (French part) + * * `SPM` - Saint Pierre and Miquelon + * * `VCT` - Saint Vincent and the Grenadines + * * `WSM` - Samoa + * * `SMR` - San Marino + * * `STP` - Sao Tome and Principe + * * `SAU` - Saudi Arabia + * * `SEN` - Senegal + * * `SRB` - Serbia + * * `SYC` - Seychelles + * * `SLE` - Sierra Leone + * * `SGP` - Singapore + * * `SVK` - Slovakia + * * `SVN` - Slovenia + * * `SLB` - Solomon Islands + * * `SOM` - Somalia + * * `ZAF` - South Africa + * * `ESP` - Spain + * * `LKA` - Sri Lanka + * * `SDN` - Sudan + * * `SUR` - Suriname + * * `SJM` - Svalbard and Jan Mayen Islands + * * `SWZ` - Swaziland + * * `SWE` - Sweden + * * `CHE` - Switzerland + * * `SYR` - Syrian Arab Republic + * * `TJK` - Tajikistan + * * `THA` - Thailand + * * `TLS` - Timor-Leste + * * `TGO` - Togo + * * `TKL` - Tokelau + * * `TON` - Tonga + * * `TTO` - Trinidad and Tobago + * * `TUN` - Tunisia + * * `TUR` - Turkey + * * `TKM` - Turkmenistan + * * `TCA` - Turks and Caicos Islands + * * `TUV` - Tuvalu + * * `UGA` - Uganda + * * `UKR` - Ukraine + * * `ARE` - United Arab Emirates + * * `GBR` - United Kingdom + * * `TZA` - United Republic of Tanzania + * * `USA` - United States of America + * * `VIR` - United States Virgin Islands + * * `URY` - Uruguay + * * `UZB` - Uzbekistan + * * `VUT` - Vanuatu + * * `VEN` - Venezuela (Bolivarian Republic of) + * * `VNM` - Viet Nam + * * `WLF` - Wallis and Futuna Islands + * * `ESH` - Western Sahara + * * `YEM` - Yemen + * * `ZMB` - Zambia + * * `ZWE` - Zimbabwe + */ +export type CountryEnumWritable = 'AFG' | 'ALA' | 'ALB' | 'DZA' | 'ASM' | 'AND' | 'AGO' | 'AIA' | 'ATG' | 'ARG' | 'ARM' | 'ABW' | 'AUS' | 'AUT' | 'AZE' | 'BHS' | 'BHR' | 'BGD' | 'BRB' | 'BLR' | 'BEL' | 'BLZ' | 'BEN' | 'BMU' | 'BTN' | 'BOL' | 'BIH' | 'BWA' | 'BRA' | 'VGB' | 'BRN' | 'BGR' | 'BFA' | 'BDI' | 'KHM' | 'CMR' | 'CAN' | 'CPV' | 'CYM' | 'CAF' | 'TCD' | 'CIL' | 'CHL' | 'CHN' | 'HKG' | 'MAC' | 'COL' | 'COM' | 'COG' | 'COK' | 'CRI' | 'CIV' | 'HRV' | 'CUB' | 'CYP' | 'CZE' | 'PRK' | 'COD' | 'DNK' | 'DJI' | 'DMA' | 'DOM' | 'ECU' | 'EGY' | 'SLV' | 'GNQ' | 'ERI' | 'EST' | 'ETH' | 'FRO' | 'FLK' | 'FJI' | 'FIN' | 'FRA' | 'GUF' | 'PYF' | 'GAB' | 'GMB' | 'GEO' | 'DEU' | 'GHA' | 'GIB' | 'GRC' | 'GRL' | 'GRD' | 'GLP' | 'GUM' | 'GTM' | 'GGY' | 'GIN' | 'GNB' | 'GUY' | 'HTI' | 'VAT' | 'HND' | 'HUN' | 'ISL' | 'IND' | 'IDN' | 'IRN' | 'IRQ' | 'IRL' | 'IMN' | 'ISR' | 'ITA' | 'JAM' | 'JPN' | 'JEY' | 'JOR' | 'KAZ' | 'KEN' | 'KIR' | 'KWT' | 'KGZ' | 'LAO' | 'LVA' | 'LBN' | 'LSO' | 'LBR' | 'LBY' | 'LIE' | 'LTU' | 'LUX' | 'MKD' | 'MDG' | 'MWI' | 'MYS' | 'MDV' | 'MLI' | 'MLT' | 'MHL' | 'MTQ' | 'MRT' | 'MUS' | 'MYT' | 'MEX' | 'FSM' | 'MCO' | 'MNG' | 'MNE' | 'MSR' | 'MAR' | 'MOZ' | 'MMR' | 'NAM' | 'NRU' | 'NPL' | 'NLD' | 'ANT' | 'NCL' | 'NZL' | 'NIC' | 'NER' | 'NGA' | 'NIU' | 'NFK' | 'MNP' | 'NOR' | 'PSE' | 'OMN' | 'PAK' | 'PLW' | 'PAN' | 'PNG' | 'PRY' | 'PER' | 'PHL' | 'PCN' | 'POL' | 'PRT' | 'PRI' | 'QAT' | 'KOR' | 'MDA' | 'REU' | 'ROU' | 'RUS' | 'RWA' | 'BLM' | 'SHN' | 'KNA' | 'LCA' | 'MAF' | 'SPM' | 'VCT' | 'WSM' | 'SMR' | 'STP' | 'SAU' | 'SEN' | 'SRB' | 'SYC' | 'SLE' | 'SGP' | 'SVK' | 'SVN' | 'SLB' | 'SOM' | 'ZAF' | 'ESP' | 'LKA' | 'SDN' | 'SUR' | 'SJM' | 'SWZ' | 'SWE' | 'CHE' | 'SYR' | 'TJK' | 'THA' | 'TLS' | 'TGO' | 'TKL' | 'TON' | 'TTO' | 'TUN' | 'TUR' | 'TKM' | 'TCA' | 'TUV' | 'UGA' | 'UKR' | 'ARE' | 'GBR' | 'TZA' | 'USA' | 'VIR' | 'URY' | 'UZB' | 'VUT' | 'VEN' | 'VNM' | 'WLF' | 'ESH' | 'YEM' | 'ZMB' | 'ZWE'; + +export type DrinkWritable = { + /** + * Comment from the drinker at the time of the pour. + */ + shout?: string | null; +}; + +export type KegWritable = { + /** + * Keg container type, used to initialize keg's full volume + * + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ + keg_type?: KegTypeEnumWritable; + /** + * Full volume of this Keg; usually set automatically from keg_type. + */ + full_volume_ml?: number; + /** + * User-visible description of the Keg. + */ + description?: string | null; + /** + * Private notes about this keg, viewable only by admins. + */ + notes?: string | null; +}; + +/** + * * `available` - Available + * * `on_tap` - On tap + * * `finished` - Finished + */ +export type KegStatusEnumWritable = 'available' | 'on_tap' | 'finished'; + +export type KegTapWritable = { + /** + * The display name for this tap, for example, "Main Tap". + */ + name: string; + /** + * Private notes about this tap. + */ + notes?: string | null; + /** + * Position relative to other taps when sorting (0=first). + */ + sort_order?: number; +}; + +/** + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ +export type KegTypeEnumWritable = 'mini' | 'corny-2_5-gal' | 'corny-3-gal' | 'corny' | 'sixth' | 'euro-30-liter' | 'euro-half' | 'quarter' | 'euro' | 'half-barrel' | 'other'; + +export type PaginatedAuthenticationTokenListWritable = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedBeverageListWritable = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedDrinkListWritable = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedKegListWritable = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedKegTapListWritable = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PaginatedSystemEventListWritable = { + next?: string | null; + previous?: string | null; + results: Array; +}; + +export type PatchedAuthenticationTokenWritable = { + /** + * Namespace for this token. + */ + auth_device?: string; + /** + * Actual value of the token, unique within an auth_device. + */ + token_value?: string; + /** + * A human-readable alias for the token, for example "Guest Key". + */ + nice_name?: string | null; + /** + * A secret value necessary to authenticate with this token. + */ + pin?: string | null; + user?: number | null; + /** + * Whether this token is considered active. + */ + enabled?: boolean; + /** + * Date after which token is treated as disabled. + */ + expire_time?: string | null; +}; + +export type PatchedBeverageWritable = { + /** + * Name of the beverage, such as "Potrero Pale". + */ + name?: string; + producer_id?: number; + beverage_type?: BeverageTypeEnumWritable; + /** + * Beverage style within type, eg "Pale Ale", "Pinot Noir". + */ + style?: string | null; + /** + * Free-form description of the beverage. + */ + description?: string | null; + /** + * Date of production, for wines or special/seasonal editions + */ + vintage_year?: string | null; + /** + * ABV Percentage + * Alcohol by volume, as percentage (0.0-100.0). + */ + abv_percent?: number | null; + /** + * Calories per mL of beverage. + */ + calories_per_ml?: number | null; + /** + * Carbohydrates per mL of beverage. + */ + carbs_per_ml?: number | null; + /** + * Color (Hex Value) + * Approximate beverage color + */ + color_hex?: string; + /** + * Original gravity (beer only). + */ + original_gravity?: number | null; + /** + * Final gravity (beer only). + */ + specific_gravity?: number | null; + /** + * SRM Value + * Standard Reference Method value (beer only). + */ + srm?: number | null; + /** + * IBUs + * International Bittering Units value (beer only). + */ + ibu?: number | null; + /** + * Star rating for beverage (0: worst, 5: best) + */ + star_rating?: number | null; + /** + * Untappd.com resource ID (beer only). + */ + untappd_beer_id?: number | null; +}; + +export type PatchedKegWritable = { + /** + * Keg container type, used to initialize keg's full volume + * + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ + keg_type?: KegTypeEnumWritable; + /** + * Full volume of this Keg; usually set automatically from keg_type. + */ + full_volume_ml?: number; + /** + * User-visible description of the Keg. + */ + description?: string | null; + /** + * Private notes about this keg, viewable only by admins. + */ + notes?: string | null; +}; + +export type PatchedKegTapWritable = { + /** + * The display name for this tap, for example, "Main Tap". + */ + name?: string; + /** + * Private notes about this tap. + */ + notes?: string | null; + /** + * Position relative to other taps when sorting (0=first). + */ + sort_order?: number; +}; + +/** + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ +export type PrivacyEnumWritable = 'public' | 'members' | 'staff'; + +/** + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ +export type RegistrationModeEnumWritable = 'public' | 'member-invite-only' | 'staff-invite-only'; + +export type SystemEventWritable = { + /** + * Type of event. + * + * * `drink_poured` - Drink poured + * * `session_started` - Session started + * * `session_joined` - User joined session + * * `keg_tapped` - Keg tapped + * * `keg_volume_low` - Keg volume low + * * `keg_ended` - Keg ended + */ + kind: SystemEventKindEnumWritable; + /** + * Time of the event. + */ + time: string; +}; + +/** + * * `drink_poured` - Drink poured + * * `session_started` - Session started + * * `session_joined` - User joined session + * * `keg_tapped` - Keg tapped + * * `keg_volume_low` - Keg volume low + * * `keg_ended` - Keg ended + */ +export type SystemEventKindEnumWritable = 'drink_poured' | 'session_started' | 'session_joined' | 'keg_tapped' | 'keg_volume_low' | 'keg_ended'; + +/** + * A summarized system status status, with the most common "current status" data. + */ +export type SystemStatusWritable = { + site: KegbotSite; + taps: Array; + events: Array; +}; + +/** + * * `f` - Fahrenheit + * * `c` - Celsius + */ +export type TemperatureDisplayUnitsEnumWritable = 'f' | 'c'; + +/** + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC + */ +export type TimezoneEnumWritable = 'Africa/Abidjan' | 'Africa/Accra' | 'Africa/Addis_Ababa' | 'Africa/Algiers' | 'Africa/Asmara' | 'Africa/Asmera' | 'Africa/Bamako' | 'Africa/Bangui' | 'Africa/Banjul' | 'Africa/Bissau' | 'Africa/Blantyre' | 'Africa/Brazzaville' | 'Africa/Bujumbura' | 'Africa/Cairo' | 'Africa/Casablanca' | 'Africa/Ceuta' | 'Africa/Conakry' | 'Africa/Dakar' | 'Africa/Dar_es_Salaam' | 'Africa/Djibouti' | 'Africa/Douala' | 'Africa/El_Aaiun' | 'Africa/Freetown' | 'Africa/Gaborone' | 'Africa/Harare' | 'Africa/Johannesburg' | 'Africa/Juba' | 'Africa/Kampala' | 'Africa/Khartoum' | 'Africa/Kigali' | 'Africa/Kinshasa' | 'Africa/Lagos' | 'Africa/Libreville' | 'Africa/Lome' | 'Africa/Luanda' | 'Africa/Lubumbashi' | 'Africa/Lusaka' | 'Africa/Malabo' | 'Africa/Maputo' | 'Africa/Maseru' | 'Africa/Mbabane' | 'Africa/Mogadishu' | 'Africa/Monrovia' | 'Africa/Nairobi' | 'Africa/Ndjamena' | 'Africa/Niamey' | 'Africa/Nouakchott' | 'Africa/Ouagadougou' | 'Africa/Porto-Novo' | 'Africa/Sao_Tome' | 'Africa/Timbuktu' | 'Africa/Tripoli' | 'Africa/Tunis' | 'Africa/Windhoek' | 'America/Adak' | 'America/Anchorage' | 'America/Anguilla' | 'America/Antigua' | 'America/Araguaina' | 'America/Argentina/Buenos_Aires' | 'America/Argentina/Catamarca' | 'America/Argentina/ComodRivadavia' | 'America/Argentina/Cordoba' | 'America/Argentina/Jujuy' | 'America/Argentina/La_Rioja' | 'America/Argentina/Mendoza' | 'America/Argentina/Rio_Gallegos' | 'America/Argentina/Salta' | 'America/Argentina/San_Juan' | 'America/Argentina/San_Luis' | 'America/Argentina/Tucuman' | 'America/Argentina/Ushuaia' | 'America/Aruba' | 'America/Asuncion' | 'America/Atikokan' | 'America/Atka' | 'America/Bahia' | 'America/Bahia_Banderas' | 'America/Barbados' | 'America/Belem' | 'America/Belize' | 'America/Blanc-Sablon' | 'America/Boa_Vista' | 'America/Bogota' | 'America/Boise' | 'America/Buenos_Aires' | 'America/Cambridge_Bay' | 'America/Campo_Grande' | 'America/Cancun' | 'America/Caracas' | 'America/Catamarca' | 'America/Cayenne' | 'America/Cayman' | 'America/Chicago' | 'America/Chihuahua' | 'America/Ciudad_Juarez' | 'America/Coral_Harbour' | 'America/Cordoba' | 'America/Costa_Rica' | 'America/Coyhaique' | 'America/Creston' | 'America/Cuiaba' | 'America/Curacao' | 'America/Danmarkshavn' | 'America/Dawson' | 'America/Dawson_Creek' | 'America/Denver' | 'America/Detroit' | 'America/Dominica' | 'America/Edmonton' | 'America/Eirunepe' | 'America/El_Salvador' | 'America/Ensenada' | 'America/Fort_Nelson' | 'America/Fort_Wayne' | 'America/Fortaleza' | 'America/Glace_Bay' | 'America/Godthab' | 'America/Goose_Bay' | 'America/Grand_Turk' | 'America/Grenada' | 'America/Guadeloupe' | 'America/Guatemala' | 'America/Guayaquil' | 'America/Guyana' | 'America/Halifax' | 'America/Havana' | 'America/Hermosillo' | 'America/Indiana/Indianapolis' | 'America/Indiana/Knox' | 'America/Indiana/Marengo' | 'America/Indiana/Petersburg' | 'America/Indiana/Tell_City' | 'America/Indiana/Vevay' | 'America/Indiana/Vincennes' | 'America/Indiana/Winamac' | 'America/Indianapolis' | 'America/Inuvik' | 'America/Iqaluit' | 'America/Jamaica' | 'America/Jujuy' | 'America/Juneau' | 'America/Kentucky/Louisville' | 'America/Kentucky/Monticello' | 'America/Knox_IN' | 'America/Kralendijk' | 'America/La_Paz' | 'America/Lima' | 'America/Los_Angeles' | 'America/Louisville' | 'America/Lower_Princes' | 'America/Maceio' | 'America/Managua' | 'America/Manaus' | 'America/Marigot' | 'America/Martinique' | 'America/Matamoros' | 'America/Mazatlan' | 'America/Mendoza' | 'America/Menominee' | 'America/Merida' | 'America/Metlakatla' | 'America/Mexico_City' | 'America/Miquelon' | 'America/Moncton' | 'America/Monterrey' | 'America/Montevideo' | 'America/Montreal' | 'America/Montserrat' | 'America/Nassau' | 'America/New_York' | 'America/Nipigon' | 'America/Nome' | 'America/Noronha' | 'America/North_Dakota/Beulah' | 'America/North_Dakota/Center' | 'America/North_Dakota/New_Salem' | 'America/Nuuk' | 'America/Ojinaga' | 'America/Panama' | 'America/Pangnirtung' | 'America/Paramaribo' | 'America/Phoenix' | 'America/Port-au-Prince' | 'America/Port_of_Spain' | 'America/Porto_Acre' | 'America/Porto_Velho' | 'America/Puerto_Rico' | 'America/Punta_Arenas' | 'America/Rainy_River' | 'America/Rankin_Inlet' | 'America/Recife' | 'America/Regina' | 'America/Resolute' | 'America/Rio_Branco' | 'America/Rosario' | 'America/Santa_Isabel' | 'America/Santarem' | 'America/Santiago' | 'America/Santo_Domingo' | 'America/Sao_Paulo' | 'America/Scoresbysund' | 'America/Shiprock' | 'America/Sitka' | 'America/St_Barthelemy' | 'America/St_Johns' | 'America/St_Kitts' | 'America/St_Lucia' | 'America/St_Thomas' | 'America/St_Vincent' | 'America/Swift_Current' | 'America/Tegucigalpa' | 'America/Thule' | 'America/Thunder_Bay' | 'America/Tijuana' | 'America/Toronto' | 'America/Tortola' | 'America/Vancouver' | 'America/Virgin' | 'America/Whitehorse' | 'America/Winnipeg' | 'America/Yakutat' | 'America/Yellowknife' | 'Antarctica/Casey' | 'Antarctica/Davis' | 'Antarctica/DumontDUrville' | 'Antarctica/Macquarie' | 'Antarctica/Mawson' | 'Antarctica/McMurdo' | 'Antarctica/Palmer' | 'Antarctica/Rothera' | 'Antarctica/South_Pole' | 'Antarctica/Syowa' | 'Antarctica/Troll' | 'Antarctica/Vostok' | 'Arctic/Longyearbyen' | 'Asia/Aden' | 'Asia/Almaty' | 'Asia/Amman' | 'Asia/Anadyr' | 'Asia/Aqtau' | 'Asia/Aqtobe' | 'Asia/Ashgabat' | 'Asia/Ashkhabad' | 'Asia/Atyrau' | 'Asia/Baghdad' | 'Asia/Bahrain' | 'Asia/Baku' | 'Asia/Bangkok' | 'Asia/Barnaul' | 'Asia/Beirut' | 'Asia/Bishkek' | 'Asia/Brunei' | 'Asia/Calcutta' | 'Asia/Chita' | 'Asia/Choibalsan' | 'Asia/Chongqing' | 'Asia/Chungking' | 'Asia/Colombo' | 'Asia/Dacca' | 'Asia/Damascus' | 'Asia/Dhaka' | 'Asia/Dili' | 'Asia/Dubai' | 'Asia/Dushanbe' | 'Asia/Famagusta' | 'Asia/Gaza' | 'Asia/Harbin' | 'Asia/Hebron' | 'Asia/Ho_Chi_Minh' | 'Asia/Hong_Kong' | 'Asia/Hovd' | 'Asia/Irkutsk' | 'Asia/Istanbul' | 'Asia/Jakarta' | 'Asia/Jayapura' | 'Asia/Jerusalem' | 'Asia/Kabul' | 'Asia/Kamchatka' | 'Asia/Karachi' | 'Asia/Kashgar' | 'Asia/Kathmandu' | 'Asia/Katmandu' | 'Asia/Khandyga' | 'Asia/Kolkata' | 'Asia/Krasnoyarsk' | 'Asia/Kuala_Lumpur' | 'Asia/Kuching' | 'Asia/Kuwait' | 'Asia/Macao' | 'Asia/Macau' | 'Asia/Magadan' | 'Asia/Makassar' | 'Asia/Manila' | 'Asia/Muscat' | 'Asia/Nicosia' | 'Asia/Novokuznetsk' | 'Asia/Novosibirsk' | 'Asia/Omsk' | 'Asia/Oral' | 'Asia/Phnom_Penh' | 'Asia/Pontianak' | 'Asia/Pyongyang' | 'Asia/Qatar' | 'Asia/Qostanay' | 'Asia/Qyzylorda' | 'Asia/Rangoon' | 'Asia/Riyadh' | 'Asia/Saigon' | 'Asia/Sakhalin' | 'Asia/Samarkand' | 'Asia/Seoul' | 'Asia/Shanghai' | 'Asia/Singapore' | 'Asia/Srednekolymsk' | 'Asia/Taipei' | 'Asia/Tashkent' | 'Asia/Tbilisi' | 'Asia/Tehran' | 'Asia/Tel_Aviv' | 'Asia/Thimbu' | 'Asia/Thimphu' | 'Asia/Tokyo' | 'Asia/Tomsk' | 'Asia/Ujung_Pandang' | 'Asia/Ulaanbaatar' | 'Asia/Ulan_Bator' | 'Asia/Urumqi' | 'Asia/Ust-Nera' | 'Asia/Vientiane' | 'Asia/Vladivostok' | 'Asia/Yakutsk' | 'Asia/Yangon' | 'Asia/Yekaterinburg' | 'Asia/Yerevan' | 'Atlantic/Azores' | 'Atlantic/Bermuda' | 'Atlantic/Canary' | 'Atlantic/Cape_Verde' | 'Atlantic/Faeroe' | 'Atlantic/Faroe' | 'Atlantic/Jan_Mayen' | 'Atlantic/Madeira' | 'Atlantic/Reykjavik' | 'Atlantic/South_Georgia' | 'Atlantic/St_Helena' | 'Atlantic/Stanley' | 'Australia/ACT' | 'Australia/Adelaide' | 'Australia/Brisbane' | 'Australia/Broken_Hill' | 'Australia/Canberra' | 'Australia/Currie' | 'Australia/Darwin' | 'Australia/Eucla' | 'Australia/Hobart' | 'Australia/LHI' | 'Australia/Lindeman' | 'Australia/Lord_Howe' | 'Australia/Melbourne' | 'Australia/NSW' | 'Australia/North' | 'Australia/Perth' | 'Australia/Queensland' | 'Australia/South' | 'Australia/Sydney' | 'Australia/Tasmania' | 'Australia/Victoria' | 'Australia/West' | 'Australia/Yancowinna' | 'Brazil/Acre' | 'Brazil/DeNoronha' | 'Brazil/East' | 'Brazil/West' | 'Canada/Atlantic' | 'Canada/Central' | 'Canada/Eastern' | 'Canada/Mountain' | 'Canada/Newfoundland' | 'Canada/Pacific' | 'Canada/Saskatchewan' | 'Canada/Yukon' | 'Chile/Continental' | 'Chile/EasterIsland' | 'Europe/Amsterdam' | 'Europe/Andorra' | 'Europe/Astrakhan' | 'Europe/Athens' | 'Europe/Belfast' | 'Europe/Belgrade' | 'Europe/Berlin' | 'Europe/Bratislava' | 'Europe/Brussels' | 'Europe/Bucharest' | 'Europe/Budapest' | 'Europe/Busingen' | 'Europe/Chisinau' | 'Europe/Copenhagen' | 'Europe/Dublin' | 'Europe/Gibraltar' | 'Europe/Guernsey' | 'Europe/Helsinki' | 'Europe/Isle_of_Man' | 'Europe/Istanbul' | 'Europe/Jersey' | 'Europe/Kaliningrad' | 'Europe/Kiev' | 'Europe/Kirov' | 'Europe/Kyiv' | 'Europe/Lisbon' | 'Europe/Ljubljana' | 'Europe/London' | 'Europe/Luxembourg' | 'Europe/Madrid' | 'Europe/Malta' | 'Europe/Mariehamn' | 'Europe/Minsk' | 'Europe/Monaco' | 'Europe/Moscow' | 'Europe/Nicosia' | 'Europe/Oslo' | 'Europe/Paris' | 'Europe/Podgorica' | 'Europe/Prague' | 'Europe/Riga' | 'Europe/Rome' | 'Europe/Samara' | 'Europe/San_Marino' | 'Europe/Sarajevo' | 'Europe/Saratov' | 'Europe/Simferopol' | 'Europe/Skopje' | 'Europe/Sofia' | 'Europe/Stockholm' | 'Europe/Tallinn' | 'Europe/Tirane' | 'Europe/Tiraspol' | 'Europe/Ulyanovsk' | 'Europe/Uzhgorod' | 'Europe/Vaduz' | 'Europe/Vatican' | 'Europe/Vienna' | 'Europe/Vilnius' | 'Europe/Volgograd' | 'Europe/Warsaw' | 'Europe/Zagreb' | 'Europe/Zaporozhye' | 'Europe/Zurich' | 'Indian/Antananarivo' | 'Indian/Chagos' | 'Indian/Christmas' | 'Indian/Cocos' | 'Indian/Comoro' | 'Indian/Kerguelen' | 'Indian/Mahe' | 'Indian/Maldives' | 'Indian/Mauritius' | 'Indian/Mayotte' | 'Indian/Reunion' | 'Mexico/BajaNorte' | 'Mexico/BajaSur' | 'Mexico/General' | 'Pacific/Apia' | 'Pacific/Auckland' | 'Pacific/Bougainville' | 'Pacific/Chatham' | 'Pacific/Chuuk' | 'Pacific/Easter' | 'Pacific/Efate' | 'Pacific/Enderbury' | 'Pacific/Fakaofo' | 'Pacific/Fiji' | 'Pacific/Funafuti' | 'Pacific/Galapagos' | 'Pacific/Gambier' | 'Pacific/Guadalcanal' | 'Pacific/Guam' | 'Pacific/Honolulu' | 'Pacific/Johnston' | 'Pacific/Kanton' | 'Pacific/Kiritimati' | 'Pacific/Kosrae' | 'Pacific/Kwajalein' | 'Pacific/Majuro' | 'Pacific/Marquesas' | 'Pacific/Midway' | 'Pacific/Nauru' | 'Pacific/Niue' | 'Pacific/Norfolk' | 'Pacific/Noumea' | 'Pacific/Pago_Pago' | 'Pacific/Palau' | 'Pacific/Pitcairn' | 'Pacific/Pohnpei' | 'Pacific/Ponape' | 'Pacific/Port_Moresby' | 'Pacific/Rarotonga' | 'Pacific/Saipan' | 'Pacific/Samoa' | 'Pacific/Tahiti' | 'Pacific/Tarawa' | 'Pacific/Tongatapu' | 'Pacific/Truk' | 'Pacific/Wake' | 'Pacific/Wallis' | 'Pacific/Yap' | 'US/Alaska' | 'US/Aleutian' | 'US/Arizona' | 'US/Central' | 'US/East-Indiana' | 'US/Eastern' | 'US/Hawaii' | 'US/Indiana-Starke' | 'US/Michigan' | 'US/Mountain' | 'US/Pacific' | 'US/Samoa' | 'UTC'; + +/** + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ +export type VolumeDisplayUnitsEnumWritable = 'metric' | 'imperial'; + +export type AccountActivateCreateData = { + body: ActivateAccountRequest; + path?: never; + query?: never; + url: '/api/account/activate'; +}; + +export type AccountActivateCreateResponses = { + 200: CurrentUser; +}; + +export type AccountActivateCreateResponse = AccountActivateCreateResponses[keyof AccountActivateCreateResponses]; + +export type AccountConfirmEmailCreateData = { + body: ConfirmEmailRequest; + path?: never; + query?: never; + url: '/api/account/confirm-email'; +}; + +export type AccountConfirmEmailCreateResponses = { + 200: CurrentUser; +}; + +export type AccountConfirmEmailCreateResponse = AccountConfirmEmailCreateResponses[keyof AccountConfirmEmailCreateResponses]; + +export type AccountEmailCreateData = { + body: EmailChangeRequest; + path?: never; + query?: never; + url: '/api/account/email'; +}; + +export type AccountEmailCreateResponses = { + 200: boolean; +}; + +export type AccountEmailCreateResponse = AccountEmailCreateResponses[keyof AccountEmailCreateResponses]; + +export type AccountMugshotCreateData = { + body: PictureUploadRequest; + path?: never; + query?: never; + url: '/api/account/mugshot'; +}; + +export type AccountMugshotCreateResponses = { + 200: CurrentUser; +}; + +export type AccountMugshotCreateResponse = AccountMugshotCreateResponses[keyof AccountMugshotCreateResponses]; + +export type AccountPasswordCreateData = { + body: PasswordChangeRequest; + path?: never; + query?: never; + url: '/api/account/password'; +}; + +export type AccountPasswordCreateResponses = { + 200: boolean; +}; + +export type AccountPasswordCreateResponse = AccountPasswordCreateResponses[keyof AccountPasswordCreateResponses]; + +export type AccountRegenerateApiKeyCreateData = { + body?: never; + path?: never; + query?: never; + url: '/api/account/regenerate-api-key'; +}; + +export type AccountRegenerateApiKeyCreateResponses = { + 200: ApiKey; +}; + +export type AccountRegenerateApiKeyCreateResponse = AccountRegenerateApiKeyCreateResponses[keyof AccountRegenerateApiKeyCreateResponses]; + +export type AdminBackupsRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/admin/backups'; +}; + +export type AdminBackupsRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type AdminBackupsRetrieveResponse = AdminBackupsRetrieveResponses[keyof AdminBackupsRetrieveResponses]; + +export type AdminBackupsCreateData = { + body?: never; + path?: never; + query?: never; + url: '/api/admin/backups'; +}; + +export type AdminBackupsCreateResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type AdminBackupsCreateResponse = AdminBackupsCreateResponses[keyof AdminBackupsCreateResponses]; + +export type AdminBackupsDestroyData = { + body?: never; + path: { + filename: string; + }; + query?: never; + url: '/api/admin/backups/{filename}'; +}; + +export type AdminBackupsDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type AdminBackupsDestroyResponse = AdminBackupsDestroyResponses[keyof AdminBackupsDestroyResponses]; + +export type AdminBugreportRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/admin/bugreport'; +}; + +export type AdminBugreportRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type AdminBugreportRetrieveResponse = AdminBugreportRetrieveResponses[keyof AdminBugreportRetrieveResponses]; + +export type AdminDashboardRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/admin/dashboard'; +}; + +export type AdminDashboardRetrieveResponses = { + 200: AdminDashboard; +}; + +export type AdminDashboardRetrieveResponse = AdminDashboardRetrieveResponses[keyof AdminDashboardRetrieveResponses]; + +export type AdminEmailTestCreateData = { + body: EmailTestRequest; + path?: never; + query?: never; + url: '/api/admin/email-test'; +}; + +export type AdminEmailTestCreateResponses = { + 200: boolean; +}; + +export type AdminEmailTestCreateResponse = AdminEmailTestCreateResponses[keyof AdminEmailTestCreateResponses]; + +export type AdminLogsRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/admin/logs'; +}; + +export type AdminLogsRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type AdminLogsRetrieveResponse = AdminLogsRetrieveResponses[keyof AdminLogsRetrieveResponses]; + +export type AdminPluginsRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/admin/plugins'; +}; + +export type AdminPluginsRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type AdminPluginsRetrieveResponse = AdminPluginsRetrieveResponses[keyof AdminPluginsRetrieveResponses]; + +export type AdminPluginsSettingsRetrieveData = { + body?: never; + path: { + short_name: string; + }; + query?: never; + url: '/api/admin/plugins/{short_name}/settings'; +}; + +export type AdminPluginsSettingsRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type AdminPluginsSettingsRetrieveResponse = AdminPluginsSettingsRetrieveResponses[keyof AdminPluginsSettingsRetrieveResponses]; + +export type AdminPluginsSettingsUpdateData = { + body?: { + [key: string]: unknown; + }; + path: { + short_name: string; + }; + query?: never; + url: '/api/admin/plugins/{short_name}/settings'; +}; + +export type AdminPluginsSettingsUpdateResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type AdminPluginsSettingsUpdateResponse = AdminPluginsSettingsUpdateResponses[keyof AdminPluginsSettingsUpdateResponses]; + +export type ApiKeysListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/api-keys'; +}; + +export type ApiKeysListResponses = { + 200: PaginatedApiKeyList; +}; + +export type ApiKeysListResponse = ApiKeysListResponses[keyof ApiKeysListResponses]; + +export type ApiKeysCreateData = { + body: ApiKey; + path?: never; + query?: never; + url: '/api/api-keys'; +}; + +export type ApiKeysCreateResponses = { + 201: ApiKey; +}; + +export type ApiKeysCreateResponse = ApiKeysCreateResponses[keyof ApiKeysCreateResponses]; + +export type ApiKeysDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this api key. + */ + id: number; + }; + query?: never; + url: '/api/api-keys/{id}'; +}; + +export type ApiKeysDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type ApiKeysDestroyResponse = ApiKeysDestroyResponses[keyof ApiKeysDestroyResponses]; + +export type ApiKeysRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this api key. + */ + id: number; + }; + query?: never; + url: '/api/api-keys/{id}'; +}; + +export type ApiKeysRetrieveResponses = { + 200: ApiKey; +}; + +export type ApiKeysRetrieveResponse = ApiKeysRetrieveResponses[keyof ApiKeysRetrieveResponses]; + +export type ApiKeysPartialUpdateData = { + body?: PatchedApiKey; + path: { + /** + * A unique integer value identifying this api key. + */ + id: number; + }; + query?: never; + url: '/api/api-keys/{id}'; +}; + +export type ApiKeysPartialUpdateResponses = { + 200: ApiKey; +}; + +export type ApiKeysPartialUpdateResponse = ApiKeysPartialUpdateResponses[keyof ApiKeysPartialUpdateResponses]; + +export type ApiKeysUpdateData = { + body: ApiKey; + path: { + /** + * A unique integer value identifying this api key. + */ + id: number; + }; + query?: never; + url: '/api/api-keys/{id}'; +}; + +export type ApiKeysUpdateResponses = { + 200: ApiKey; +}; + +export type ApiKeysUpdateResponse = ApiKeysUpdateResponses[keyof ApiKeysUpdateResponses]; + +export type AuthTokensListData = { + body?: never; + path?: never; + query?: { + auth_device?: string; + /** + * The pagination cursor value. + */ + cursor?: string; + enabled?: boolean; + /** + * Number of results to return per page. + */ + page_size?: number; + search?: string; + user?: number; + }; + url: '/api/auth-tokens'; +}; + +export type AuthTokensListResponses = { + 200: PaginatedAuthenticationTokenList; +}; + +export type AuthTokensListResponse = AuthTokensListResponses[keyof AuthTokensListResponses]; + +export type AuthTokensCreateData = { + body: AuthenticationTokenWritable; + path?: never; + query?: never; + url: '/api/auth-tokens'; +}; + +export type AuthTokensCreateResponses = { + 201: AuthenticationToken; +}; + +export type AuthTokensCreateResponse = AuthTokensCreateResponses[keyof AuthTokensCreateResponses]; + +export type AuthTokensDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this authentication token. + */ + id: number; + }; + query?: never; + url: '/api/auth-tokens/{id}'; +}; + +export type AuthTokensDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type AuthTokensDestroyResponse = AuthTokensDestroyResponses[keyof AuthTokensDestroyResponses]; + +export type AuthTokensRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this authentication token. + */ + id: number; + }; + query?: never; + url: '/api/auth-tokens/{id}'; +}; + +export type AuthTokensRetrieveResponses = { + 200: AuthenticationToken; +}; + +export type AuthTokensRetrieveResponse = AuthTokensRetrieveResponses[keyof AuthTokensRetrieveResponses]; + +export type AuthTokensPartialUpdateData = { + body?: PatchedAuthenticationTokenWritable; + path: { + /** + * A unique integer value identifying this authentication token. + */ + id: number; + }; + query?: never; + url: '/api/auth-tokens/{id}'; +}; + +export type AuthTokensPartialUpdateResponses = { + 200: AuthenticationToken; +}; + +export type AuthTokensPartialUpdateResponse = AuthTokensPartialUpdateResponses[keyof AuthTokensPartialUpdateResponses]; + +export type AuthTokensUpdateData = { + body: AuthenticationTokenWritable; + path: { + /** + * A unique integer value identifying this authentication token. + */ + id: number; + }; + query?: never; + url: '/api/auth-tokens/{id}'; +}; + +export type AuthTokensUpdateResponses = { + 200: AuthenticationToken; +}; + +export type AuthTokensUpdateResponse = AuthTokensUpdateResponses[keyof AuthTokensUpdateResponses]; + +export type AuthLoginCreateData = { + body: Login; + path?: never; + query?: never; + url: '/api/auth/login'; +}; + +export type AuthLoginCreateResponses = { + 200: CurrentUser; +}; + +export type AuthLoginCreateResponse = AuthLoginCreateResponses[keyof AuthLoginCreateResponses]; + +export type AuthLogoutCreateData = { + body?: never; + path?: never; + query?: never; + url: '/api/auth/logout'; +}; + +export type AuthLogoutCreateResponses = { + 200: boolean; +}; + +export type AuthLogoutCreateResponse = AuthLogoutCreateResponses[keyof AuthLogoutCreateResponses]; + +export type AuthPasswordResetCreateData = { + body: PasswordResetRequest; + path?: never; + query?: never; + url: '/api/auth/password-reset'; +}; + +export type AuthPasswordResetCreateResponses = { + 200: boolean; +}; + +export type AuthPasswordResetCreateResponse = AuthPasswordResetCreateResponses[keyof AuthPasswordResetCreateResponses]; + +export type AuthPasswordResetConfirmCreateData = { + body: PasswordResetConfirmRequest; + path?: never; + query?: never; + url: '/api/auth/password-reset-confirm'; +}; + +export type AuthPasswordResetConfirmCreateResponses = { + 200: boolean; +}; + +export type AuthPasswordResetConfirmCreateResponse = AuthPasswordResetConfirmCreateResponses[keyof AuthPasswordResetConfirmCreateResponses]; + +export type AuthRegisterCreateData = { + body: RegisterRequest; + path?: never; + query?: never; + url: '/api/auth/register'; +}; + +export type AuthRegisterCreateResponses = { + 200: CurrentUser; +}; + +export type AuthRegisterCreateResponse = AuthRegisterCreateResponses[keyof AuthRegisterCreateResponses]; + +export type BeverageProducersListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/beverage-producers'; +}; + +export type BeverageProducersListResponses = { + 200: PaginatedBeverageProducerList; +}; + +export type BeverageProducersListResponse = BeverageProducersListResponses[keyof BeverageProducersListResponses]; + +export type BeverageProducersCreateData = { + body: BeverageProducer; + path?: never; + query?: never; + url: '/api/beverage-producers'; +}; + +export type BeverageProducersCreateResponses = { + 201: BeverageProducer; +}; + +export type BeverageProducersCreateResponse = BeverageProducersCreateResponses[keyof BeverageProducersCreateResponses]; + +export type BeverageProducersDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this beverage producer. + */ + id: number; + }; + query?: never; + url: '/api/beverage-producers/{id}'; +}; + +export type BeverageProducersDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type BeverageProducersDestroyResponse = BeverageProducersDestroyResponses[keyof BeverageProducersDestroyResponses]; + +export type BeverageProducersRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this beverage producer. + */ + id: number; + }; + query?: never; + url: '/api/beverage-producers/{id}'; +}; + +export type BeverageProducersRetrieveResponses = { + 200: BeverageProducer; +}; + +export type BeverageProducersRetrieveResponse = BeverageProducersRetrieveResponses[keyof BeverageProducersRetrieveResponses]; + +export type BeverageProducersPartialUpdateData = { + body?: PatchedBeverageProducer; + path: { + /** + * A unique integer value identifying this beverage producer. + */ + id: number; + }; + query?: never; + url: '/api/beverage-producers/{id}'; +}; + +export type BeverageProducersPartialUpdateResponses = { + 200: BeverageProducer; +}; + +export type BeverageProducersPartialUpdateResponse = BeverageProducersPartialUpdateResponses[keyof BeverageProducersPartialUpdateResponses]; + +export type BeverageProducersUpdateData = { + body: BeverageProducer; + path: { + /** + * A unique integer value identifying this beverage producer. + */ + id: number; + }; + query?: never; + url: '/api/beverage-producers/{id}'; +}; + +export type BeverageProducersUpdateResponses = { + 200: BeverageProducer; +}; + +export type BeverageProducersUpdateResponse = BeverageProducersUpdateResponses[keyof BeverageProducersUpdateResponses]; + +export type BeverageProducersPictureCreateData = { + body: PictureUploadRequest; + path: { + /** + * A unique integer value identifying this beverage producer. + */ + id: number; + }; + query?: never; + url: '/api/beverage-producers/{id}/picture'; +}; + +export type BeverageProducersPictureCreateResponses = { + 200: BeverageProducer; +}; + +export type BeverageProducersPictureCreateResponse = BeverageProducersPictureCreateResponses[keyof BeverageProducersPictureCreateResponses]; + +export type BeveragesListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/beverages'; +}; + +export type BeveragesListResponses = { + 200: PaginatedBeverageList; +}; + +export type BeveragesListResponse = BeveragesListResponses[keyof BeveragesListResponses]; + +export type BeveragesCreateData = { + body: BeverageWritable; + path?: never; + query?: never; + url: '/api/beverages'; +}; + +export type BeveragesCreateResponses = { + 201: Beverage; +}; + +export type BeveragesCreateResponse = BeveragesCreateResponses[keyof BeveragesCreateResponses]; + +export type BeveragesDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this beverage. + */ + id: number; + }; + query?: never; + url: '/api/beverages/{id}'; +}; + +export type BeveragesDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type BeveragesDestroyResponse = BeveragesDestroyResponses[keyof BeveragesDestroyResponses]; + +export type BeveragesRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this beverage. + */ + id: number; + }; + query?: never; + url: '/api/beverages/{id}'; +}; + +export type BeveragesRetrieveResponses = { + 200: Beverage; +}; + +export type BeveragesRetrieveResponse = BeveragesRetrieveResponses[keyof BeveragesRetrieveResponses]; + +export type BeveragesPartialUpdateData = { + body?: PatchedBeverageWritable; + path: { + /** + * A unique integer value identifying this beverage. + */ + id: number; + }; + query?: never; + url: '/api/beverages/{id}'; +}; + +export type BeveragesPartialUpdateResponses = { + 200: Beverage; +}; + +export type BeveragesPartialUpdateResponse = BeveragesPartialUpdateResponses[keyof BeveragesPartialUpdateResponses]; + +export type BeveragesUpdateData = { + body: BeverageWritable; + path: { + /** + * A unique integer value identifying this beverage. + */ + id: number; + }; + query?: never; + url: '/api/beverages/{id}'; +}; + +export type BeveragesUpdateResponses = { + 200: Beverage; +}; + +export type BeveragesUpdateResponse = BeveragesUpdateResponses[keyof BeveragesUpdateResponses]; + +export type BeveragesPictureCreateData = { + body: PictureUploadRequest; + path: { + /** + * A unique integer value identifying this beverage. + */ + id: number; + }; + query?: never; + url: '/api/beverages/{id}/picture'; +}; + +export type BeveragesPictureCreateResponses = { + 200: Beverage; +}; + +export type BeveragesPictureCreateResponse = BeveragesPictureCreateResponses[keyof BeveragesPictureCreateResponses]; + +export type ControllersListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/controllers'; +}; + +export type ControllersListResponses = { + 200: PaginatedControllerList; +}; + +export type ControllersListResponse = ControllersListResponses[keyof ControllersListResponses]; + +export type ControllersCreateData = { + body: Controller; + path?: never; + query?: never; + url: '/api/controllers'; +}; + +export type ControllersCreateResponses = { + 201: Controller; +}; + +export type ControllersCreateResponse = ControllersCreateResponses[keyof ControllersCreateResponses]; + +export type ControllersDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this controller. + */ + id: number; + }; + query?: never; + url: '/api/controllers/{id}'; +}; + +export type ControllersDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type ControllersDestroyResponse = ControllersDestroyResponses[keyof ControllersDestroyResponses]; + +export type ControllersRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this controller. + */ + id: number; + }; + query?: never; + url: '/api/controllers/{id}'; +}; + +export type ControllersRetrieveResponses = { + 200: Controller; +}; + +export type ControllersRetrieveResponse = ControllersRetrieveResponses[keyof ControllersRetrieveResponses]; + +export type ControllersPartialUpdateData = { + body?: PatchedController; + path: { + /** + * A unique integer value identifying this controller. + */ + id: number; + }; + query?: never; + url: '/api/controllers/{id}'; +}; + +export type ControllersPartialUpdateResponses = { + 200: Controller; +}; + +export type ControllersPartialUpdateResponse = ControllersPartialUpdateResponses[keyof ControllersPartialUpdateResponses]; + +export type ControllersUpdateData = { + body: Controller; + path: { + /** + * A unique integer value identifying this controller. + */ + id: number; + }; + query?: never; + url: '/api/controllers/{id}'; +}; + +export type ControllersUpdateResponses = { + 200: Controller; +}; + +export type ControllersUpdateResponse = ControllersUpdateResponses[keyof ControllersUpdateResponses]; + +export type DevicesListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/devices'; +}; + +export type DevicesListResponses = { + 200: PaginatedDeviceList; +}; + +export type DevicesListResponse = DevicesListResponses[keyof DevicesListResponses]; + +export type DevicesCreateData = { + body?: Device; + path?: never; + query?: never; + url: '/api/devices'; +}; + +export type DevicesCreateResponses = { + 201: Device; +}; + +export type DevicesCreateResponse = DevicesCreateResponses[keyof DevicesCreateResponses]; + +export type DevicesDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this device. + */ + id: number; + }; + query?: never; + url: '/api/devices/{id}'; +}; + +export type DevicesDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type DevicesDestroyResponse = DevicesDestroyResponses[keyof DevicesDestroyResponses]; + +export type DevicesRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this device. + */ + id: number; + }; + query?: never; + url: '/api/devices/{id}'; +}; + +export type DevicesRetrieveResponses = { + 200: Device; +}; + +export type DevicesRetrieveResponse = DevicesRetrieveResponses[keyof DevicesRetrieveResponses]; + +export type DevicesPartialUpdateData = { + body?: PatchedDevice; + path: { + /** + * A unique integer value identifying this device. + */ + id: number; + }; + query?: never; + url: '/api/devices/{id}'; +}; + +export type DevicesPartialUpdateResponses = { + 200: Device; +}; + +export type DevicesPartialUpdateResponse = DevicesPartialUpdateResponses[keyof DevicesPartialUpdateResponses]; + +export type DevicesUpdateData = { + body?: Device; + path: { + /** + * A unique integer value identifying this device. + */ + id: number; + }; + query?: never; + url: '/api/devices/{id}'; +}; + +export type DevicesUpdateResponses = { + 200: Device; +}; + +export type DevicesUpdateResponse = DevicesUpdateResponses[keyof DevicesUpdateResponses]; + +export type DrinksListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + keg?: number; + /** + * Number of results to return per page. + */ + page_size?: number; + session?: number; + user?: number; + username?: string; + }; + url: '/api/drinks'; +}; + +export type DrinksListResponses = { + 200: PaginatedDrinkList; +}; + +export type DrinksListResponse = DrinksListResponses[keyof DrinksListResponses]; + +export type DrinksDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this drink. + */ + id: number; + }; + query?: never; + url: '/api/drinks/{id}'; +}; + +export type DrinksDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type DrinksDestroyResponse = DrinksDestroyResponses[keyof DrinksDestroyResponses]; + +export type DrinksRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this drink. + */ + id: number; + }; + query?: never; + url: '/api/drinks/{id}'; +}; + +export type DrinksRetrieveResponses = { + 200: Drink; +}; + +export type DrinksRetrieveResponse = DrinksRetrieveResponses[keyof DrinksRetrieveResponses]; + +export type DrinksPartialUpdateData = { + body?: PatchedDrinkUpdateRequest; + path: { + /** + * A unique integer value identifying this drink. + */ + id: number; + }; + query?: never; + url: '/api/drinks/{id}'; +}; + +export type DrinksPartialUpdateResponses = { + 200: Drink; +}; + +export type DrinksPartialUpdateResponse = DrinksPartialUpdateResponses[keyof DrinksPartialUpdateResponses]; + +export type DrinksPictureDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this drink. + */ + id: number; + }; + query?: never; + url: '/api/drinks/{id}/picture'; +}; + +export type DrinksPictureDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type DrinksPictureDestroyResponse = DrinksPictureDestroyResponses[keyof DrinksPictureDestroyResponses]; + +export type DrinksPictureCreateData = { + body: PictureUploadRequest; + path: { + /** + * A unique integer value identifying this drink. + */ + id: number; + }; + query?: never; + url: '/api/drinks/{id}/picture'; +}; + +export type DrinksPictureCreateResponses = { + 200: Drink; +}; + +export type DrinksPictureCreateResponse = DrinksPictureCreateResponses[keyof DrinksPictureCreateResponses]; + +export type DrinksReassignCreateData = { + body: DrinkReassignRequest; + path: { + /** + * A unique integer value identifying this drink. + */ + id: number; + }; + query?: never; + url: '/api/drinks/{id}/reassign'; +}; + +export type DrinksReassignCreateResponses = { + 200: Drink; +}; + +export type DrinksReassignCreateResponse = DrinksReassignCreateResponses[keyof DrinksReassignCreateResponses]; + +export type EventsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + keg?: number; + /** + * Type of event. + * + * * `drink_poured` - Drink poured + * * `session_started` - Session started + * * `session_joined` - User joined session + * * `keg_tapped` - Keg tapped + * * `keg_volume_low` - Keg volume low + * * `keg_ended` - Keg ended + */ + kind?: 'drink_poured' | 'keg_ended' | 'keg_tapped' | 'keg_volume_low' | 'session_joined' | 'session_started'; + /** + * Number of results to return per page. + */ + page_size?: number; + session?: number; + since?: number; + user?: number; + username?: string; + }; + url: '/api/events'; +}; + +export type EventsListResponses = { + 200: PaginatedSystemEventList; +}; + +export type EventsListResponse = EventsListResponses[keyof EventsListResponses]; + +export type EventsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this system event. + */ + id: number; + }; + query?: never; + url: '/api/events/{id}'; +}; + +export type EventsRetrieveResponses = { + 200: SystemEvent; +}; + +export type EventsRetrieveResponse = EventsRetrieveResponses[keyof EventsRetrieveResponses]; + +export type FlowMetersListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/flow-meters'; +}; + +export type FlowMetersListResponses = { + 200: PaginatedFlowMeterList; +}; + +export type FlowMetersListResponse = FlowMetersListResponses[keyof FlowMetersListResponses]; + +export type FlowMetersCreateData = { + body: FlowMeter; + path?: never; + query?: never; + url: '/api/flow-meters'; +}; + +export type FlowMetersCreateResponses = { + 201: FlowMeter; +}; + +export type FlowMetersCreateResponse = FlowMetersCreateResponses[keyof FlowMetersCreateResponses]; + +export type FlowMetersDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this flow meter. + */ + id: number; + }; + query?: never; + url: '/api/flow-meters/{id}'; +}; + +export type FlowMetersDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type FlowMetersDestroyResponse = FlowMetersDestroyResponses[keyof FlowMetersDestroyResponses]; + +export type FlowMetersRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this flow meter. + */ + id: number; + }; + query?: never; + url: '/api/flow-meters/{id}'; +}; + +export type FlowMetersRetrieveResponses = { + 200: FlowMeter; +}; + +export type FlowMetersRetrieveResponse = FlowMetersRetrieveResponses[keyof FlowMetersRetrieveResponses]; + +export type FlowMetersPartialUpdateData = { + body?: PatchedFlowMeter; + path: { + /** + * A unique integer value identifying this flow meter. + */ + id: number; + }; + query?: never; + url: '/api/flow-meters/{id}'; +}; + +export type FlowMetersPartialUpdateResponses = { + 200: FlowMeter; +}; + +export type FlowMetersPartialUpdateResponse = FlowMetersPartialUpdateResponses[keyof FlowMetersPartialUpdateResponses]; + +export type FlowMetersUpdateData = { + body: FlowMeter; + path: { + /** + * A unique integer value identifying this flow meter. + */ + id: number; + }; + query?: never; + url: '/api/flow-meters/{id}'; +}; + +export type FlowMetersUpdateResponses = { + 200: FlowMeter; +}; + +export type FlowMetersUpdateResponse = FlowMetersUpdateResponses[keyof FlowMetersUpdateResponses]; + +export type FlowTogglesListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/flow-toggles'; +}; + +export type FlowTogglesListResponses = { + 200: PaginatedFlowToggleList; +}; + +export type FlowTogglesListResponse = FlowTogglesListResponses[keyof FlowTogglesListResponses]; + +export type FlowTogglesCreateData = { + body: FlowToggle; + path?: never; + query?: never; + url: '/api/flow-toggles'; +}; + +export type FlowTogglesCreateResponses = { + 201: FlowToggle; +}; + +export type FlowTogglesCreateResponse = FlowTogglesCreateResponses[keyof FlowTogglesCreateResponses]; + +export type FlowTogglesDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this flow toggle. + */ + id: number; + }; + query?: never; + url: '/api/flow-toggles/{id}'; +}; + +export type FlowTogglesDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type FlowTogglesDestroyResponse = FlowTogglesDestroyResponses[keyof FlowTogglesDestroyResponses]; + +export type FlowTogglesRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this flow toggle. + */ + id: number; + }; + query?: never; + url: '/api/flow-toggles/{id}'; +}; + +export type FlowTogglesRetrieveResponses = { + 200: FlowToggle; +}; + +export type FlowTogglesRetrieveResponse = FlowTogglesRetrieveResponses[keyof FlowTogglesRetrieveResponses]; + +export type FlowTogglesPartialUpdateData = { + body?: PatchedFlowToggle; + path: { + /** + * A unique integer value identifying this flow toggle. + */ + id: number; + }; + query?: never; + url: '/api/flow-toggles/{id}'; +}; + +export type FlowTogglesPartialUpdateResponses = { + 200: FlowToggle; +}; + +export type FlowTogglesPartialUpdateResponse = FlowTogglesPartialUpdateResponses[keyof FlowTogglesPartialUpdateResponses]; + +export type FlowTogglesUpdateData = { + body: FlowToggle; + path: { + /** + * A unique integer value identifying this flow toggle. + */ + id: number; + }; + query?: never; + url: '/api/flow-toggles/{id}'; +}; + +export type FlowTogglesUpdateResponses = { + 200: FlowToggle; +}; + +export type FlowTogglesUpdateResponse = FlowTogglesUpdateResponses[keyof FlowTogglesUpdateResponses]; + +export type InvitationsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/invitations'; +}; + +export type InvitationsListResponses = { + 200: PaginatedInvitationList; +}; + +export type InvitationsListResponse = InvitationsListResponses[keyof InvitationsListResponses]; + +export type InvitationsCreateData = { + body: Invitation; + path?: never; + query?: never; + url: '/api/invitations'; +}; + +export type InvitationsCreateResponses = { + 201: Invitation; +}; + +export type InvitationsCreateResponse = InvitationsCreateResponses[keyof InvitationsCreateResponses]; + +export type InvitationsDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this invitation. + */ + id: number; + }; + query?: never; + url: '/api/invitations/{id}'; +}; + +export type InvitationsDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type InvitationsDestroyResponse = InvitationsDestroyResponses[keyof InvitationsDestroyResponses]; + +export type InvitationsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this invitation. + */ + id: number; + }; + query?: never; + url: '/api/invitations/{id}'; +}; + +export type InvitationsRetrieveResponses = { + 200: Invitation; +}; + +export type InvitationsRetrieveResponse = InvitationsRetrieveResponses[keyof InvitationsRetrieveResponses]; + +export type KegsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + /** + * Current keg state. + * + * * `available` - Available + * * `on_tap` - On tap + * * `finished` - Finished + */ + status?: 'available' | 'finished' | 'on_tap'; + }; + url: '/api/kegs'; +}; + +export type KegsListResponses = { + 200: PaginatedKegList; +}; + +export type KegsListResponse = KegsListResponses[keyof KegsListResponses]; + +export type KegsCreateData = { + body?: KegCreateRequest; + path?: never; + query?: never; + url: '/api/kegs'; +}; + +export type KegsCreateResponses = { + 201: Keg; +}; + +export type KegsCreateResponse = KegsCreateResponses[keyof KegsCreateResponses]; + +export type KegsDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}'; +}; + +export type KegsDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type KegsDestroyResponse = KegsDestroyResponses[keyof KegsDestroyResponses]; + +export type KegsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}'; +}; + +export type KegsRetrieveResponses = { + 200: Keg; +}; + +export type KegsRetrieveResponse = KegsRetrieveResponses[keyof KegsRetrieveResponses]; + +export type KegsPartialUpdateData = { + body?: PatchedKegWritable; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}'; +}; + +export type KegsPartialUpdateResponses = { + 200: Keg; +}; + +export type KegsPartialUpdateResponse = KegsPartialUpdateResponses[keyof KegsPartialUpdateResponses]; + +export type KegsUpdateData = { + body?: KegWritable; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}'; +}; + +export type KegsUpdateResponses = { + 200: Keg; +}; + +export type KegsUpdateResponse = KegsUpdateResponses[keyof KegsUpdateResponses]; + +export type KegsEndCreateData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}/end'; +}; + +export type KegsEndCreateResponses = { + 200: Keg; +}; + +export type KegsEndCreateResponse = KegsEndCreateResponses[keyof KegsEndCreateResponses]; + +export type KegsReactivateCreateData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}/reactivate'; +}; + +export type KegsReactivateCreateResponses = { + 200: Keg; +}; + +export type KegsReactivateCreateResponse = KegsReactivateCreateResponses[keyof KegsReactivateCreateResponses]; + +export type KegsSpillCreateData = { + body: KegSpillRequest; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}/spill'; +}; + +export type KegsSpillCreateResponses = { + 200: Keg; +}; + +export type KegsSpillCreateResponse = KegsSpillCreateResponses[keyof KegsSpillCreateResponses]; + +export type KegsStatsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg. + */ + id: number; + }; + query?: never; + url: '/api/kegs/{id}/stats'; +}; + +export type KegsStatsRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type KegsStatsRetrieveResponse = KegsStatsRetrieveResponses[keyof KegsStatsRetrieveResponses]; + +export type NotificationSettingsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/notification-settings'; +}; + +export type NotificationSettingsListResponses = { + 200: PaginatedNotificationSettingsList; +}; + +export type NotificationSettingsListResponse = NotificationSettingsListResponses[keyof NotificationSettingsListResponses]; + +export type NotificationSettingsCreateData = { + body: NotificationSettings; + path?: never; + query?: never; + url: '/api/notification-settings'; +}; + +export type NotificationSettingsCreateResponses = { + 201: NotificationSettings; +}; + +export type NotificationSettingsCreateResponse = NotificationSettingsCreateResponses[keyof NotificationSettingsCreateResponses]; + +export type NotificationSettingsDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this notification settings. + */ + id: number; + }; + query?: never; + url: '/api/notification-settings/{id}'; +}; + +export type NotificationSettingsDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type NotificationSettingsDestroyResponse = NotificationSettingsDestroyResponses[keyof NotificationSettingsDestroyResponses]; + +export type NotificationSettingsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this notification settings. + */ + id: number; + }; + query?: never; + url: '/api/notification-settings/{id}'; +}; + +export type NotificationSettingsRetrieveResponses = { + 200: NotificationSettings; +}; + +export type NotificationSettingsRetrieveResponse = NotificationSettingsRetrieveResponses[keyof NotificationSettingsRetrieveResponses]; + +export type NotificationSettingsPartialUpdateData = { + body?: PatchedNotificationSettings; + path: { + /** + * A unique integer value identifying this notification settings. + */ + id: number; + }; + query?: never; + url: '/api/notification-settings/{id}'; +}; + +export type NotificationSettingsPartialUpdateResponses = { + 200: NotificationSettings; +}; + +export type NotificationSettingsPartialUpdateResponse = NotificationSettingsPartialUpdateResponses[keyof NotificationSettingsPartialUpdateResponses]; + +export type NotificationSettingsUpdateData = { + body: NotificationSettings; + path: { + /** + * A unique integer value identifying this notification settings. + */ + id: number; + }; + query?: never; + url: '/api/notification-settings/{id}'; +}; + +export type NotificationSettingsUpdateResponses = { + 200: NotificationSettings; +}; + +export type NotificationSettingsUpdateResponse = NotificationSettingsUpdateResponses[keyof NotificationSettingsUpdateResponses]; + +export type PluginDataListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/plugin-data'; +}; + +export type PluginDataListResponses = { + 200: PaginatedPluginDataList; +}; + +export type PluginDataListResponse = PluginDataListResponses[keyof PluginDataListResponses]; + +export type PluginDataCreateData = { + body: PluginData; + path?: never; + query?: never; + url: '/api/plugin-data'; +}; + +export type PluginDataCreateResponses = { + 201: PluginData; +}; + +export type PluginDataCreateResponse = PluginDataCreateResponses[keyof PluginDataCreateResponses]; + +export type PluginDataDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this plugin data. + */ + id: number; + }; + query?: never; + url: '/api/plugin-data/{id}'; +}; + +export type PluginDataDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type PluginDataDestroyResponse = PluginDataDestroyResponses[keyof PluginDataDestroyResponses]; + +export type PluginDataRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this plugin data. + */ + id: number; + }; + query?: never; + url: '/api/plugin-data/{id}'; +}; + +export type PluginDataRetrieveResponses = { + 200: PluginData; +}; + +export type PluginDataRetrieveResponse = PluginDataRetrieveResponses[keyof PluginDataRetrieveResponses]; + +export type PluginDataPartialUpdateData = { + body?: PatchedPluginData; + path: { + /** + * A unique integer value identifying this plugin data. + */ + id: number; + }; + query?: never; + url: '/api/plugin-data/{id}'; +}; + +export type PluginDataPartialUpdateResponses = { + 200: PluginData; +}; + +export type PluginDataPartialUpdateResponse = PluginDataPartialUpdateResponses[keyof PluginDataPartialUpdateResponses]; + +export type PluginDataUpdateData = { + body: PluginData; + path: { + /** + * A unique integer value identifying this plugin data. + */ + id: number; + }; + query?: never; + url: '/api/plugin-data/{id}'; +}; + +export type PluginDataUpdateResponses = { + 200: PluginData; +}; + +export type PluginDataUpdateResponse = PluginDataUpdateResponses[keyof PluginDataUpdateResponses]; + +export type SessionsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + day?: number; + month?: number; + /** + * Number of results to return per page. + */ + page_size?: number; + year?: number; + }; + url: '/api/sessions'; +}; + +export type SessionsListResponses = { + 200: PaginatedDrinkingSessionList; +}; + +export type SessionsListResponse = SessionsListResponses[keyof SessionsListResponses]; + +export type SessionsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this drinking session. + */ + id: number; + }; + query?: never; + url: '/api/sessions/{id}'; +}; + +export type SessionsRetrieveResponses = { + 200: DrinkingSession; +}; + +export type SessionsRetrieveResponse = SessionsRetrieveResponses[keyof SessionsRetrieveResponses]; + +export type SessionsStatsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this drinking session. + */ + id: number; + }; + query?: never; + url: '/api/sessions/{id}/stats'; +}; + +export type SessionsStatsRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type SessionsStatsRetrieveResponse = SessionsStatsRetrieveResponses[keyof SessionsStatsRetrieveResponses]; + +export type SessionsCurrentRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/sessions/current'; +}; + +export type SessionsCurrentRetrieveResponses = { + 200: DrinkingSession; +}; + +export type SessionsCurrentRetrieveResponse = SessionsCurrentRetrieveResponses[keyof SessionsCurrentRetrieveResponses]; + +export type SetupAdminUserCreateData = { + body: SetupAdminUserRequest; + path?: never; + query?: never; + url: '/api/setup/admin-user'; +}; + +export type SetupAdminUserCreateResponses = { + 200: CurrentUser; +}; + +export type SetupAdminUserCreateResponse = SetupAdminUserCreateResponses[keyof SetupAdminUserCreateResponses]; + +export type SetupFinishCreateData = { + body?: never; + path?: never; + query?: never; + url: '/api/setup/finish'; +}; + +export type SetupFinishCreateResponses = { + 200: boolean; +}; + +export type SetupFinishCreateResponse = SetupFinishCreateResponses[keyof SetupFinishCreateResponses]; + +export type SetupMigrateCreateData = { + body?: never; + path?: never; + query?: never; + url: '/api/setup/migrate'; +}; + +export type SetupMigrateCreateResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type SetupMigrateCreateResponse = SetupMigrateCreateResponses[keyof SetupMigrateCreateResponses]; + +export type SetupSettingsCreateData = { + body?: SetupSiteSettingsRequest; + path?: never; + query?: never; + url: '/api/setup/settings'; +}; + +export type SetupSettingsCreateResponses = { + 200: SetupSiteSettingsRequest; +}; + +export type SetupSettingsCreateResponse = SetupSettingsCreateResponses[keyof SetupSettingsCreateResponses]; + +export type SetupStatusRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/setup/status'; +}; + +export type SetupStatusRetrieveResponses = { + 200: SetupStatus; +}; + +export type SetupStatusRetrieveResponse = SetupStatusRetrieveResponses[keyof SetupStatusRetrieveResponses]; + +export type SetupUpgradeCreateData = { + body?: never; + path?: never; + query?: never; + url: '/api/setup/upgrade'; +}; + +export type SetupUpgradeCreateResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type SetupUpgradeCreateResponse = SetupUpgradeCreateResponses[keyof SetupUpgradeCreateResponses]; + +export type SiteRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/site'; +}; + +export type SiteRetrieveResponses = { + 200: SiteSettings; +}; + +export type SiteRetrieveResponse = SiteRetrieveResponses[keyof SiteRetrieveResponses]; + +export type SitePartialUpdateData = { + body?: PatchedSiteSettings; + path?: never; + query?: never; + url: '/api/site'; +}; + +export type SitePartialUpdateResponses = { + 200: SiteSettings; +}; + +export type SitePartialUpdateResponse = SitePartialUpdateResponses[keyof SitePartialUpdateResponses]; + +export type SiteBackgroundImageCreateData = { + body: PictureUploadRequest; + path?: never; + query?: never; + url: '/api/site/background-image'; +}; + +export type SiteBackgroundImageCreateResponses = { + 200: SiteSettings; +}; + +export type SiteBackgroundImageCreateResponse = SiteBackgroundImageCreateResponses[keyof SiteBackgroundImageCreateResponses]; + +export type StatsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/stats'; +}; + +export type StatsListResponses = { + 200: PaginatedStatsList; +}; + +export type StatsListResponse = StatsListResponses[keyof StatsListResponses]; + +export type StatsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this stats. + */ + id: number; + }; + query?: never; + url: '/api/stats/{id}'; +}; + +export type StatsRetrieveResponses = { + 200: Stats; +}; + +export type StatsRetrieveResponse = StatsRetrieveResponses[keyof StatsRetrieveResponses]; + +export type StatsSystemRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/stats/system'; +}; + +export type StatsSystemRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type StatsSystemRetrieveResponse = StatsSystemRetrieveResponses[keyof StatsSystemRetrieveResponses]; + +export type StatusRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/status'; +}; + +export type StatusRetrieveResponses = { + 200: SystemStatus; +}; + +export type StatusRetrieveResponse = StatusRetrieveResponses[keyof StatusRetrieveResponses]; + +export type TapsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/taps'; +}; + +export type TapsListResponses = { + 200: PaginatedKegTapList; +}; + +export type TapsListResponse = TapsListResponses[keyof TapsListResponses]; + +export type TapsCreateData = { + body: KegTapWritable; + path?: never; + query?: never; + url: '/api/taps'; +}; + +export type TapsCreateResponses = { + 201: KegTap; +}; + +export type TapsCreateResponse = TapsCreateResponses[keyof TapsCreateResponses]; + +export type TapsDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}'; +}; + +export type TapsDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type TapsDestroyResponse = TapsDestroyResponses[keyof TapsDestroyResponses]; + +export type TapsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}'; +}; + +export type TapsRetrieveResponses = { + 200: KegTap; +}; + +export type TapsRetrieveResponse = TapsRetrieveResponses[keyof TapsRetrieveResponses]; + +export type TapsPartialUpdateData = { + body?: PatchedKegTapWritable; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}'; +}; + +export type TapsPartialUpdateResponses = { + 200: KegTap; +}; + +export type TapsPartialUpdateResponse = TapsPartialUpdateResponses[keyof TapsPartialUpdateResponses]; + +export type TapsUpdateData = { + body: KegTapWritable; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}'; +}; + +export type TapsUpdateResponses = { + 200: KegTap; +}; + +export type TapsUpdateResponse = TapsUpdateResponses[keyof TapsUpdateResponses]; + +export type TapsAttachKegCreateData = { + body: TapAttachKegRequest; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}/attach-keg'; +}; + +export type TapsAttachKegCreateResponses = { + 200: KegTap; +}; + +export type TapsAttachKegCreateResponse = TapsAttachKegCreateResponses[keyof TapsAttachKegCreateResponses]; + +export type TapsConnectMeterCreateData = { + body: TapConnectMeterRequest; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}/connect-meter'; +}; + +export type TapsConnectMeterCreateResponses = { + 200: KegTap; +}; + +export type TapsConnectMeterCreateResponse = TapsConnectMeterCreateResponses[keyof TapsConnectMeterCreateResponses]; + +export type TapsConnectThermoCreateData = { + body: TapConnectThermoRequest; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}/connect-thermo'; +}; + +export type TapsConnectThermoCreateResponses = { + 200: KegTap; +}; + +export type TapsConnectThermoCreateResponse = TapsConnectThermoCreateResponses[keyof TapsConnectThermoCreateResponses]; + +export type TapsConnectToggleCreateData = { + body: TapConnectToggleRequest; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}/connect-toggle'; +}; + +export type TapsConnectToggleCreateResponses = { + 200: KegTap; +}; + +export type TapsConnectToggleCreateResponse = TapsConnectToggleCreateResponses[keyof TapsConnectToggleCreateResponses]; + +export type TapsEndKegCreateData = { + body?: never; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}/end-keg'; +}; + +export type TapsEndKegCreateResponses = { + 200: KegTap; +}; + +export type TapsEndKegCreateResponse = TapsEndKegCreateResponses[keyof TapsEndKegCreateResponses]; + +export type TapsRecordDrinkCreateData = { + body: TapRecordDrinkRequest; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}/record-drink'; +}; + +export type TapsRecordDrinkCreateResponses = { + 200: Drink; +}; + +export type TapsRecordDrinkCreateResponse = TapsRecordDrinkCreateResponses[keyof TapsRecordDrinkCreateResponses]; + +export type TapsStartKegCreateData = { + body?: NewKegRequest; + path: { + /** + * A unique integer value identifying this keg tap. + */ + id: number; + }; + query?: never; + url: '/api/taps/{id}/start-keg'; +}; + +export type TapsStartKegCreateResponses = { + 200: KegTap; +}; + +export type TapsStartKegCreateResponse = TapsStartKegCreateResponses[keyof TapsStartKegCreateResponses]; + +export type ThermoLogsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + sensor?: number; + since?: string; + until?: string; + }; + url: '/api/thermo-logs'; +}; + +export type ThermoLogsListResponses = { + 200: PaginatedThermologList; +}; + +export type ThermoLogsListResponse = ThermoLogsListResponses[keyof ThermoLogsListResponses]; + +export type ThermoLogsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this thermolog. + */ + id: number; + }; + query?: never; + url: '/api/thermo-logs/{id}'; +}; + +export type ThermoLogsRetrieveResponses = { + 200: Thermolog; +}; + +export type ThermoLogsRetrieveResponse = ThermoLogsRetrieveResponses[keyof ThermoLogsRetrieveResponses]; + +export type ThermoSensorsListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + /** + * Number of results to return per page. + */ + page_size?: number; + }; + url: '/api/thermo-sensors'; +}; + +export type ThermoSensorsListResponses = { + 200: PaginatedThermoSensorList; +}; + +export type ThermoSensorsListResponse = ThermoSensorsListResponses[keyof ThermoSensorsListResponses]; + +export type ThermoSensorsCreateData = { + body: ThermoSensor; + path?: never; + query?: never; + url: '/api/thermo-sensors'; +}; + +export type ThermoSensorsCreateResponses = { + 201: ThermoSensor; +}; + +export type ThermoSensorsCreateResponse = ThermoSensorsCreateResponses[keyof ThermoSensorsCreateResponses]; + +export type ThermoSensorsDestroyData = { + body?: never; + path: { + /** + * A unique integer value identifying this thermo sensor. + */ + id: number; + }; + query?: never; + url: '/api/thermo-sensors/{id}'; +}; + +export type ThermoSensorsDestroyResponses = { + /** + * No response body + */ + 204: void; +}; + +export type ThermoSensorsDestroyResponse = ThermoSensorsDestroyResponses[keyof ThermoSensorsDestroyResponses]; + +export type ThermoSensorsRetrieveData = { + body?: never; + path: { + /** + * A unique integer value identifying this thermo sensor. + */ + id: number; + }; + query?: never; + url: '/api/thermo-sensors/{id}'; +}; + +export type ThermoSensorsRetrieveResponses = { + 200: ThermoSensor; +}; + +export type ThermoSensorsRetrieveResponse = ThermoSensorsRetrieveResponses[keyof ThermoSensorsRetrieveResponses]; + +export type ThermoSensorsPartialUpdateData = { + body?: PatchedThermoSensor; + path: { + /** + * A unique integer value identifying this thermo sensor. + */ + id: number; + }; + query?: never; + url: '/api/thermo-sensors/{id}'; +}; + +export type ThermoSensorsPartialUpdateResponses = { + 200: ThermoSensor; +}; + +export type ThermoSensorsPartialUpdateResponse = ThermoSensorsPartialUpdateResponses[keyof ThermoSensorsPartialUpdateResponses]; + +export type ThermoSensorsUpdateData = { + body: ThermoSensor; + path: { + /** + * A unique integer value identifying this thermo sensor. + */ + id: number; + }; + query?: never; + url: '/api/thermo-sensors/{id}'; +}; + +export type ThermoSensorsUpdateResponses = { + 200: ThermoSensor; +}; + +export type ThermoSensorsUpdateResponse = ThermoSensorsUpdateResponses[keyof ThermoSensorsUpdateResponses]; + +export type UsersListData = { + body?: never; + path?: never; + query?: { + /** + * The pagination cursor value. + */ + cursor?: string; + is_active?: boolean; + is_staff?: boolean; + /** + * Number of results to return per page. + */ + page_size?: number; + search?: string; + }; + url: '/api/users'; +}; + +export type UsersListResponses = { + 200: PaginatedUserList; +}; + +export type UsersListResponse = UsersListResponses[keyof UsersListResponses]; + +export type UsersCreateData = { + body: AdminUserCreateRequest; + path?: never; + query?: never; + url: '/api/users'; +}; + +export type UsersCreateResponses = { + 201: User; +}; + +export type UsersCreateResponse = UsersCreateResponses[keyof UsersCreateResponses]; + +export type UsersRetrieveData = { + body?: never; + path: { + username: string; + }; + query?: never; + url: '/api/users/{username}'; +}; + +export type UsersRetrieveResponses = { + 200: User; +}; + +export type UsersRetrieveResponse = UsersRetrieveResponses[keyof UsersRetrieveResponses]; + +export type UsersPartialUpdateData = { + body?: PatchedAdminUserUpdateRequest; + path: { + username: string; + }; + query?: never; + url: '/api/users/{username}'; +}; + +export type UsersPartialUpdateResponses = { + 200: User; +}; + +export type UsersPartialUpdateResponse = UsersPartialUpdateResponses[keyof UsersPartialUpdateResponses]; + +export type UsersSetPasswordCreateData = { + body: SetPasswordRequest; + path: { + username: string; + }; + query?: never; + url: '/api/users/{username}/set-password'; +}; + +export type UsersSetPasswordCreateResponses = { + 200: boolean; +}; + +export type UsersSetPasswordCreateResponse = UsersSetPasswordCreateResponses[keyof UsersSetPasswordCreateResponses]; + +export type UsersStatsRetrieveData = { + body?: never; + path: { + username: string; + }; + query?: never; + url: '/api/users/{username}/stats'; +}; + +export type UsersStatsRetrieveResponses = { + 200: { + [key: string]: unknown; + }; +}; + +export type UsersStatsRetrieveResponse = UsersStatsRetrieveResponses[keyof UsersStatsRetrieveResponses]; + +export type UsersMeRetrieveData = { + body?: never; + path?: never; + query?: never; + url: '/api/users/me'; +}; + +export type UsersMeRetrieveResponses = { + 200: Me; +}; + +export type UsersMeRetrieveResponse = UsersMeRetrieveResponses[keyof UsersMeRetrieveResponses]; + +export type UsersMePartialUpdateData = { + body?: PatchedProfileUpdateRequest; + path?: never; + query?: never; + url: '/api/users/me'; +}; + +export type UsersMePartialUpdateResponses = { + 200: Me; +}; + +export type UsersMePartialUpdateResponse = UsersMePartialUpdateResponses[keyof UsersMePartialUpdateResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/web-ui/app.tsx b/web-ui/app.tsx new file mode 100644 index 000000000..18f48388d --- /dev/null +++ b/web-ui/app.tsx @@ -0,0 +1,19 @@ +import CssBaseline from "@mui/material/CssBaseline"; +import { ThemeProvider } from "@mui/material/styles"; +import { createBrowserRouter } from "react-router"; +import { RouterProvider } from "react-router/dom"; +import { AppRoutes } from "@/routes"; +import { theme } from "@/theme/theme"; + +// A single splat route delegates to a classic tree; the data +// router wrapper keeps navigation-blocking hooks available later. +const router = createBrowserRouter([{ path: "*", element: }]); + +export function App() { + return ( + + + + + ); +} diff --git a/web-ui/index.html b/web-ui/index.html new file mode 100644 index 000000000..6d7920076 --- /dev/null +++ b/web-ui/index.html @@ -0,0 +1,12 @@ + + + + + + Kegbot + + +
+ + + diff --git a/web-ui/layout/main-layout.tsx b/web-ui/layout/main-layout.tsx new file mode 100644 index 000000000..acd2c5938 --- /dev/null +++ b/web-ui/layout/main-layout.tsx @@ -0,0 +1,28 @@ +import AppBar from "@mui/material/AppBar"; +import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; +import Toolbar from "@mui/material/Toolbar"; +import Typography from "@mui/material/Typography"; +import { Link, Outlet } from "react-router"; + +export function MainLayout() { + return ( + + + + + Kegbot + + + + + + + + ); +} diff --git a/web-ui/layout/minimal-layout.tsx b/web-ui/layout/minimal-layout.tsx new file mode 100644 index 000000000..12601f8b4 --- /dev/null +++ b/web-ui/layout/minimal-layout.tsx @@ -0,0 +1,14 @@ +import Box from "@mui/material/Box"; +import Container from "@mui/material/Container"; +import { Outlet } from "react-router"; + +/** Chrome-free layout for auth, setup, and fullscreen views. */ +export function MinimalLayout() { + return ( + + + + + + ); +} diff --git a/web-ui/lib/api.ts b/web-ui/lib/api.ts new file mode 100644 index 000000000..91b67b993 --- /dev/null +++ b/web-ui/lib/api.ts @@ -0,0 +1,75 @@ +import { client } from "@/api/client.gen"; + +/** DRF-style field errors: `{fieldName: ["message", ...]}`. */ +export type FormErrors = Record; + +export function getCsrfToken(): string | null { + const match = document.cookie.match(/(?:^|;\s*)csrftoken=([^;]+)/); + return match ? decodeURIComponent(match[1]) : null; +} + +// The generated client is configured once, at import time. All requests +// are same-origin (the vite dev server proxies /api to Django), so +// session-cookie auth plus the CSRF header is all we need. +client.setConfig({ + baseUrl: "/", + credentials: "include", + throwOnError: true, +}); + +client.interceptors.request.use((request) => { + const token = getCsrfToken(); + if (token) { + request.headers.set("X-CSRFToken", token); + } + return request; +}); + +/** + * Returns DRF field errors from a thrown API error, or null when the + * error is not a field-validation failure. + */ +export function getFormErrors(error: unknown): FormErrors | null { + if (!error || typeof error !== "object" || Array.isArray(error)) { + return null; + } + const entries = Object.entries(error as Record); + if (entries.length === 0) { + return null; + } + const result: FormErrors = {}; + for (const [field, value] of entries) { + if (Array.isArray(value) && value.every((v) => typeof v === "string")) { + result[field] = value; + } else if (typeof value === "string") { + result[field] = [value]; + } else { + return null; + } + } + return result; +} + +/** Best-effort human-readable message from a thrown API error. */ +export function toErrorMessage(error: unknown): string { + if (typeof error === "string") { + return error; + } + if (error && typeof error === "object") { + const detail = (error as { detail?: unknown }).detail; + if (typeof detail === "string") { + return detail; + } + const formErrors = getFormErrors(error); + if (formErrors) { + const first = Object.values(formErrors)[0]; + if (first?.length) { + return first[0]; + } + } + if (error instanceof Error) { + return error.message; + } + } + return "Something went wrong."; +} diff --git a/web-ui/lib/use-async-data.ts b/web-ui/lib/use-async-data.ts new file mode 100644 index 000000000..d9e27ecbd --- /dev/null +++ b/web-ui/lib/use-async-data.ts @@ -0,0 +1,81 @@ +import { useCallback, useEffect, useRef, useState } from "react"; + +export interface AsyncData { + data: T | null; + loading: boolean; + error: unknown; + reload: () => void; +} + +export interface UseAsyncDataOptions { + /** Refetch when these values change (like a useEffect deps array). */ + deps?: unknown[]; + /** Refresh this often; background refreshes do not toggle `loading`. */ + pollMs?: number; + /** When false, nothing is fetched and state resets to loading. */ + enabled?: boolean; +} + +/** + * Minimal data-fetching hook: `{data, loading, error, reload}`. + * + * The fetcher may be an inline closure — its identity is not tracked. + * Pass `deps` for values (route params, filters) that should trigger a + * refetch when they change. + */ +export function useAsyncData( + fetcher: () => Promise, + options: UseAsyncDataOptions = {}, +): AsyncData { + const { deps = [], pollMs, enabled = true } = options; + const [data, setData] = useState(null); + const [loading, setLoading] = useState(enabled); + const [error, setError] = useState(null); + const generation = useRef(0); + const fetcherRef = useRef(fetcher); + fetcherRef.current = fetcher; + + const load = useCallback(async (background: boolean) => { + const requestId = ++generation.current; + if (!background) { + setLoading(true); + } + try { + const result = await fetcherRef.current(); + if (generation.current === requestId) { + setData(result); + setError(null); + } + } catch (e) { + if (generation.current === requestId) { + setError(e); + } + } finally { + if (generation.current === requestId && !background) { + setLoading(false); + } + } + }, []); + + const reload = useCallback(() => { + void load(false); + }, [load]); + + useEffect(() => { + if (!enabled) { + generation.current++; + setData(null); + setError(null); + setLoading(true); + return; + } + void load(false); + if (!pollMs) { + return; + } + const interval = setInterval(() => void load(true), pollMs); + return () => clearInterval(interval); + }, [enabled, load, pollMs, ...deps]); + + return { data, loading, error, reload }; +} diff --git a/web-ui/main.tsx b/web-ui/main.tsx new file mode 100644 index 000000000..7c93bbd67 --- /dev/null +++ b/web-ui/main.tsx @@ -0,0 +1,9 @@ +import { createRoot } from "react-dom/client"; +import { App } from "@/app"; +import "@/lib/api"; + +const rootElement = document.getElementById("root"); +if (!rootElement) { + throw new Error("Missing #root element"); +} +createRoot(rootElement).render(); diff --git a/web-ui/routes.tsx b/web-ui/routes.tsx new file mode 100644 index 000000000..6656f2cf8 --- /dev/null +++ b/web-ui/routes.tsx @@ -0,0 +1,13 @@ +import { Route, Routes } from "react-router"; +import { MainLayout } from "@/layout/main-layout"; +import { HomeView } from "@/views/home-view"; + +export function AppRoutes() { + return ( + + }> + } /> + + + ); +} diff --git a/web-ui/api/schema.yaml b/web-ui/schema.yaml similarity index 100% rename from web-ui/api/schema.yaml rename to web-ui/schema.yaml diff --git a/web-ui/test/setup.ts b/web-ui/test/setup.ts new file mode 100644 index 000000000..7f712d02b --- /dev/null +++ b/web-ui/test/setup.ts @@ -0,0 +1,3 @@ +import { GlobalRegistrator } from "@happy-dom/global-registrator"; + +GlobalRegistrator.register(); diff --git a/web-ui/test/use-async-data.test.tsx b/web-ui/test/use-async-data.test.tsx new file mode 100644 index 000000000..8a1282e9b --- /dev/null +++ b/web-ui/test/use-async-data.test.tsx @@ -0,0 +1,51 @@ +import { expect, test } from "bun:test"; +import { act, renderHook, waitFor } from "@testing-library/react"; +import { useAsyncData } from "@/lib/use-async-data"; + +test("resolves data", async () => { + const { result } = renderHook(() => useAsyncData(async () => 42)); + expect(result.current.loading).toBe(true); + await waitFor(() => expect(result.current.loading).toBe(false)); + expect(result.current.data).toBe(42); + expect(result.current.error).toBeNull(); +}); + +test("captures errors", async () => { + const boom = new Error("boom"); + const { result } = renderHook(() => + useAsyncData(async () => { + throw boom; + }), + ); + await waitFor(() => expect(result.current.loading).toBe(false)); + expect(result.current.error).toBe(boom); + expect(result.current.data).toBeNull(); +}); + +test("reload refetches", async () => { + let calls = 0; + const { result } = renderHook(() => + useAsyncData(async () => { + calls++; + return calls; + }), + ); + await waitFor(() => expect(result.current.data).toBe(1)); + act(() => result.current.reload()); + await waitFor(() => expect(result.current.data).toBe(2)); +}); + +test("disabled hook does not fetch", async () => { + let calls = 0; + renderHook(() => + useAsyncData( + async () => { + calls++; + return calls; + }, + { enabled: false }, + ), + ); + await new Promise((resolve) => setTimeout(resolve, 10)); + expect(calls).toBe(0); +}); diff --git a/web-ui/theme/theme.ts b/web-ui/theme/theme.ts new file mode 100644 index 000000000..b3a7c7192 --- /dev/null +++ b/web-ui/theme/theme.ts @@ -0,0 +1,5 @@ +import { createTheme } from "@mui/material/styles"; + +// Stock MUI theme for now. Palette, typography, and component overrides +// will layer in here as the design evolves. +export const theme = createTheme(); diff --git a/web-ui/views/home-view.tsx b/web-ui/views/home-view.tsx new file mode 100644 index 000000000..b064bb9d4 --- /dev/null +++ b/web-ui/views/home-view.tsx @@ -0,0 +1,5 @@ +import Typography from "@mui/material/Typography"; + +export function HomeView() { + return Kegbot; +} From b022cd4591cde2e61e8d01ef24d172d05d7f6844 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 21:59:00 +0000 Subject: [PATCH 14/48] web-ui: boot flow, core contexts, and auth views The app now boots from GET /api/users/me: ConfigProvider blocks render until the payload arrives (spinner / retry / setup-required branches), then provides site config; CurrentUserProvider layers login/logout and user state on top of the same payload. SnackbarProvider gives toast notifications and ConfirmProvider promise-based confirmation dialogs. PrivacyGate enforces the site privacy setting around the main layout, rendering members-only/staff-only interstitials with a login link. The main layout shows the site title and a user menu (account, admin for staff, logout), honoring SSO login/logout URLs when configured. Auth views (minimal chrome, old URL shapes preserved): login, register (public/invite modes via ?invite_code), password reset request/confirm, account activation, e-mail change confirmation, logout. Forms map DRF field errors onto inputs; shared Page/LoadingZone components carry titles and async states. Tests cover boot, privacy gating, setup detection, login error mapping, and the reset-link parser, over a mocked fetch layer. --- bun.lockb | Bin 118692 -> 121116 bytes web-ui/app.tsx | 23 +++- web-ui/components/config-context.tsx | 113 ++++++++++++++++ web-ui/components/confirm-context.tsx | 72 +++++++++++ web-ui/components/current-user-context.tsx | 44 +++++++ web-ui/components/loading-zone.tsx | 26 ++++ web-ui/components/page.tsx | 50 +++++++ web-ui/components/privacy-gate.tsx | 61 +++++++++ web-ui/components/snackbar-context.tsx | 54 ++++++++ web-ui/layout/main-layout.tsx | 88 ++++++++++++- web-ui/lib/api.ts | 13 +- web-ui/lib/forms.ts | 23 ++++ web-ui/routes.tsx | 45 ++++++- web-ui/test/app-boot.test.tsx | 58 +++++++++ web-ui/test/helpers.tsx | 73 +++++++++++ web-ui/test/login.test.tsx | 65 ++++++++++ web-ui/test/reset-param.test.ts | 15 +++ web-ui/test/setup.ts | 7 +- web-ui/views/auth/activate-view.tsx | 86 ++++++++++++ web-ui/views/auth/confirm-email-view.tsx | 75 +++++++++++ web-ui/views/auth/login-view.tsx | 106 +++++++++++++++ web-ui/views/auth/logout-view.tsx | 29 +++++ .../auth/password-reset-confirm-view.tsx | 116 +++++++++++++++++ web-ui/views/auth/password-reset-view.tsx | 64 +++++++++ web-ui/views/auth/register-view.tsx | 122 ++++++++++++++++++ 25 files changed, 1416 insertions(+), 12 deletions(-) create mode 100644 web-ui/components/config-context.tsx create mode 100644 web-ui/components/confirm-context.tsx create mode 100644 web-ui/components/current-user-context.tsx create mode 100644 web-ui/components/loading-zone.tsx create mode 100644 web-ui/components/page.tsx create mode 100644 web-ui/components/privacy-gate.tsx create mode 100644 web-ui/components/snackbar-context.tsx create mode 100644 web-ui/lib/forms.ts create mode 100644 web-ui/test/app-boot.test.tsx create mode 100644 web-ui/test/helpers.tsx create mode 100644 web-ui/test/login.test.tsx create mode 100644 web-ui/test/reset-param.test.ts create mode 100644 web-ui/views/auth/activate-view.tsx create mode 100644 web-ui/views/auth/confirm-email-view.tsx create mode 100644 web-ui/views/auth/login-view.tsx create mode 100644 web-ui/views/auth/logout-view.tsx create mode 100644 web-ui/views/auth/password-reset-confirm-view.tsx create mode 100644 web-ui/views/auth/password-reset-view.tsx create mode 100644 web-ui/views/auth/register-view.tsx diff --git a/bun.lockb b/bun.lockb index 1828f64171ccd284541aed91a5f47a25c0248144..219511ae862abe9c6851116c5824aac900408508 100755 GIT binary patch delta 5824 zcmZ{n3vg6d8OL)&0(mU5Ll$xplCXgg$dgU7k^q4c637D*7DDLF1IW_Q4kgkGp`}`j zwy3qzkWJZLL8p1?_8`wi?GrPqo^_(vhjyrf*-P{?GZ&-Fr`pJM-JU z|9j4NUf*}l`S#RB}HCe_B8Fx3#i(Ke6q5h3#~H9c0QHOrrx!pu{iSse8@kC`3=eWuw1XtSZ*jy z&VY}0HgG4G8l)yf?vRpxa^*#gKMXk!)+SNVZkH zklMnc$pu{);HSb~bct!2h27D|;Ve5W+lhx;`LU@89}kBNTUP9Mvt1li%Or;t^cJsp zT7O9!IU2Sos9IJISmZ5eYz=nEqHLo#fx2@3Q;VYh9k$pECuea$M{l@+3lt7@dXr@( zUKgs%5;LB)&rAHa$WkxNs5Tq?C+j^LQ=%qLtp& zr8KZY)5mhVEF~+dXB)~flvo%i{RdZB` zp00{|LCC7T0J5t+gYi-rRM#iZV1Y9CfKr26?u%r5IgKzCM+1VzEgF;ykt~uo4vToF zx*Z{-EVV>V#COoj15B5ut9yjicq3C=13GzI)X;{Q!Q-7+iW+K_j&oKU$dGF*4@W-H zR;kWLyH>4WZ8IOLrQJ7POMXy07gh6;2L!8gXQnR9I%-Y^mTGQ%16HYyBC$YiGocMg zu_&37vJK@JN*IcL)UY#@V<=%Lw!*M8lw&AiC{}OS8Okw~FcfPr>4lfTqN`-1KQ zww`*@H-n)ZLkUB%X0j_#=YZWzC%c=kcn7AV>rwJ0nx~ysEoA3z@GtQgGGckg^|s8B zIYf)hMNYQ3hpIZOHc-zxSKi<|?;KsEuS2bH0O6`+8+}LIM*pOpjZ7V<;%LL>}RE(Dc&ibnGzw;ALWLlZvQK zC2Owy@Ng28B$qaOpaM4$MPcV?NmPR zR6g%?eJ*2|b$Rzptc!XKE<(#)v~Y827F}*+D4Q*QWpAMw&XPUi<7L#2u9u^Bi_mH& zkM}q5yco4Vldkxf4xt!bOXmMLdH)HwhD;B(Qvb8aRx2bPGN0Z`Esbwom%Pc@Hr;vz zE3qv*c?rsPoo$p2$VBBOl)1Thu-nY7?QVC@a;G@mUJfC;b?b6u+kJb+-cAcM?T^6{ zEbeyYw(aDI3^j1pLmgmwWTM}ra@QU&#+)7*E+>1E&Xei-4%bHA)mrI=*rA6qh`)_O z7hxO74STg~CjYV8TIoM{SNqL$5mHVWDz-1mZC6ZGBIIpqkp5x`+Y6~+uRm3>d%dM{ zddY@HD|{uaPi>688nJqNMCmuHF)^pys!6nzTSN0M z=&&inuY8;d&L_^5TQ^r<)I||pB$NDC^}8DV?vifv^vXnE#41g!E4R`T$1ALsqwk@{ z+u$AW0hj{sgLlDO;4=6t_%`?^co2LGd;^>UUk9V$B)A)#0C$05j3S2L?VtyAgKc0d z$N*^|)k-;7DN{`-#2mGXb4UA)yzX87kFM?l#UxDYr zFTv~J4EQk^1HXrjkhXY!0DKkv3HlZA2e2P{7+eqbffw=aHSjvP4E`oNz7LFoKcd1b z;3D`lcoj^5NpMzb)R_Pu$MeU)4d4K{5&RwRKLGE8_rM!q3cLy40tZp&pZNU;_&4}3 z_zx(18(;qdDX8!ce){qI9DbhxPl8q8w|MtLq9$VH&V3D!m%xOK8+-m=YTAb31nGfpvJ0<$R}CqzRkz8TTAZ11z;XvEcEF<56UQ%_@!b=I&IEwnIQ{TV?c?z8-r{&TeqmRmJrFGsDHtqj?o zblKR271pSgH6=F!KHZ*?%rWa@QZ&u^J1BXW9!^68rZn<&qq3R7sM)n>& w5FhRyIk@k@b%~4nt@1>0*jkr$NgIravA$vJ?4FEkx~^@#Y1^SL{+S8qe_)5+$N&HU delta 4975 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 La=w+GzS;9%JCX&s diff --git a/web-ui/app.tsx b/web-ui/app.tsx index 18f48388d..cfd8a77e6 100644 --- a/web-ui/app.tsx +++ b/web-ui/app.tsx @@ -1,19 +1,32 @@ import CssBaseline from "@mui/material/CssBaseline"; import { ThemeProvider } from "@mui/material/styles"; +import { useState } from "react"; import { createBrowserRouter } from "react-router"; import { RouterProvider } from "react-router/dom"; +import { ConfigProvider } from "@/components/config-context"; +import { ConfirmProvider } from "@/components/confirm-context"; +import { CurrentUserProvider } from "@/components/current-user-context"; +import { SnackbarProvider } from "@/components/snackbar-context"; import { AppRoutes } from "@/routes"; import { theme } from "@/theme/theme"; -// A single splat route delegates to a classic tree; the data -// router wrapper keeps navigation-blocking hooks available later. -const router = createBrowserRouter([{ path: "*", element: }]); - export function App() { + // A single splat route delegates to a classic tree; the data + // router wrapper keeps navigation-blocking hooks available later. The + // router is created per mount so it reads the current location. + const [router] = useState(() => createBrowserRouter([{ path: "*", element: }])); return ( - + + + + + + + + + ); } diff --git a/web-ui/components/config-context.tsx b/web-ui/components/config-context.tsx new file mode 100644 index 000000000..95761550e --- /dev/null +++ b/web-ui/components/config-context.tsx @@ -0,0 +1,113 @@ +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import CircularProgress from "@mui/material/CircularProgress"; +import { createContext, type ReactNode, useCallback, useContext, useEffect, useState } from "react"; +import type { Me } from "@/api"; +import { usersMeRetrieve } from "@/api"; +import { toErrorMessage, unwrap } from "@/lib/api"; + +export interface ConfigValue { + /** The boot payload; always present once the app renders. */ + me: Me; + /** Refetches the boot payload (e.g. after login/logout/profile edit). */ + refresh: () => Promise; +} + +const ConfigContext = createContext(null as unknown as ConfigValue); + +type BootState = + | { status: "loading" } + | { status: "ready"; me: Me } + | { status: "setup"; kind: "setup_required" | "upgrade_required" } + | { status: "error"; message: string }; + +function isSetupError(error: unknown): "setup_required" | "upgrade_required" | null { + if (error && typeof error === "object") { + const kind = (error as { error?: unknown }).error; + if (kind === "setup_required" || kind === "upgrade_required") { + return kind; + } + } + return null; +} + +export interface ConfigProviderProps { + children: ReactNode; + /** Rendered instead of the app when the server needs setup/upgrade. */ + renderSetup?: (kind: "setup_required" | "upgrade_required") => ReactNode; +} + +/** + * Boots the app: fetches /api/users/me (which also sets the CSRF + * cookie) and blocks rendering until it resolves. Children never render + * without a boot payload. + */ +export function ConfigProvider({ children, renderSetup }: ConfigProviderProps) { + const [state, setState] = useState({ status: "loading" }); + + const load = useCallback(async () => { + try { + const me = await unwrap(usersMeRetrieve()); + setState({ status: "ready", me }); + } catch (error) { + const setupKind = isSetupError(error); + if (setupKind) { + setState({ status: "setup", kind: setupKind }); + } else { + setState({ status: "error", message: toErrorMessage(error) }); + } + } + }, []); + + useEffect(() => { + void load(); + }, [load]); + + if (state.status === "loading") { + return ( + + + + ); + } + + if (state.status === "setup") { + return ( + <> + {renderSetup?.(state.kind) ?? ( + + + {state.kind === "setup_required" + ? "This server needs to be set up." + : "This server needs an upgrade."} + + + )} + + ); + } + + if (state.status === "error") { + return ( + + Could not reach the server: {state.message} + + + ); + } + + return ( + + {children} + + ); +} + +export function useConfig(): ConfigValue { + return useContext(ConfigContext); +} diff --git a/web-ui/components/confirm-context.tsx b/web-ui/components/confirm-context.tsx new file mode 100644 index 000000000..2300b0421 --- /dev/null +++ b/web-ui/components/confirm-context.tsx @@ -0,0 +1,72 @@ +import Button from "@mui/material/Button"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogContentText from "@mui/material/DialogContentText"; +import DialogTitle from "@mui/material/DialogTitle"; +import { createContext, type ReactNode, useCallback, useContext, useRef, useState } from "react"; + +export interface ConfirmOptions { + title: string; + message?: string; + confirmText?: string; + /** Style the confirm button as destructive (red). */ + destructive?: boolean; +} + +type ConfirmFn = (options: ConfirmOptions) => Promise; + +const ConfirmContext = createContext(null as unknown as ConfirmFn); + +/** + * Promise-based confirmation dialogs: + * + * const confirm = useConfirm(); + * if (await confirm({ title: "End keg?", destructive: true })) { ... } + */ +export function ConfirmProvider({ children }: { children: ReactNode }) { + const [options, setOptions] = useState(null); + const resolver = useRef<((result: boolean) => void) | null>(null); + + const confirm = useCallback((opts) => { + setOptions(opts); + return new Promise((resolve) => { + resolver.current = resolve; + }); + }, []); + + const close = (result: boolean) => { + setOptions(null); + resolver.current?.(result); + resolver.current = null; + }; + + return ( + + {children} + close(false)} maxWidth="xs" fullWidth> + {options?.title} + {options?.message && ( + + {options.message} + + )} + + + + + + + ); +} + +export function useConfirm(): ConfirmFn { + return useContext(ConfirmContext); +} diff --git a/web-ui/components/current-user-context.tsx b/web-ui/components/current-user-context.tsx new file mode 100644 index 000000000..8994e8ddf --- /dev/null +++ b/web-ui/components/current-user-context.tsx @@ -0,0 +1,44 @@ +import { createContext, type ReactNode, useContext, useMemo } from "react"; +import type { CurrentUser } from "@/api"; +import { authLoginCreate, authLogoutCreate } from "@/api"; +import { useConfig } from "@/components/config-context"; +import { unwrap } from "@/lib/api"; + +export interface CurrentUserValue { + user: CurrentUser | null; + isLoggedIn: boolean; + isStaff: boolean; + login: (username: string, password: string) => Promise; + logout: () => Promise; + refresh: () => Promise; +} + +const CurrentUserContext = createContext(null as unknown as CurrentUserValue); + +export function CurrentUserProvider({ children }: { children: ReactNode }) { + const { me, refresh } = useConfig(); + + const value = useMemo( + () => ({ + user: me.user, + isLoggedIn: me.user !== null, + isStaff: me.user?.is_staff ?? false, + login: async (username, password) => { + await unwrap(authLoginCreate({ body: { username, password } })); + await refresh(); + }, + logout: async () => { + await unwrap(authLogoutCreate()); + await refresh(); + }, + refresh, + }), + [me.user, refresh], + ); + + return {children}; +} + +export function useCurrentUser(): CurrentUserValue { + return useContext(CurrentUserContext); +} diff --git a/web-ui/components/loading-zone.tsx b/web-ui/components/loading-zone.tsx new file mode 100644 index 000000000..af7ac7e3c --- /dev/null +++ b/web-ui/components/loading-zone.tsx @@ -0,0 +1,26 @@ +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import CircularProgress from "@mui/material/CircularProgress"; +import type { ReactNode } from "react"; +import { toErrorMessage } from "@/lib/api"; + +export interface LoadingZoneProps { + loading: boolean; + error?: unknown; + children?: ReactNode; +} + +/** Wraps content that depends on async data. */ +export function LoadingZone({ loading, error, children }: LoadingZoneProps) { + if (loading) { + return ( + + + + ); + } + if (error) { + return {toErrorMessage(error)}; + } + return <>{children}; +} diff --git a/web-ui/components/page.tsx b/web-ui/components/page.tsx new file mode 100644 index 000000000..870949df2 --- /dev/null +++ b/web-ui/components/page.tsx @@ -0,0 +1,50 @@ +import Box from "@mui/material/Box"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { type ReactNode, useEffect } from "react"; +import { useConfig } from "@/components/config-context"; +import { LoadingZone } from "@/components/loading-zone"; + +export interface PageProps { + title: string; + /** Hide the visible heading but still set the document title. */ + hideHeading?: boolean; + /** Slot rendered to the right of the heading (actions, filters). */ + headerRight?: ReactNode; + loading?: boolean; + error?: unknown; + children?: ReactNode; +} + +/** Standard page shell: document title, heading row, loading state. */ +export function Page({ title, hideHeading, headerRight, loading, error, children }: PageProps) { + const { me } = useConfig(); + + useEffect(() => { + document.title = `${title} · ${me.site.title}`; + }, [title, me.site.title]); + + return ( + + {!hideHeading && ( + + + {title} + + {headerRight} + + )} + + {children} + + + ); +} diff --git a/web-ui/components/privacy-gate.tsx b/web-ui/components/privacy-gate.tsx new file mode 100644 index 000000000..a789509af --- /dev/null +++ b/web-ui/components/privacy-gate.tsx @@ -0,0 +1,61 @@ +import LockOutlinedIcon from "@mui/icons-material/LockOutlined"; +import Button from "@mui/material/Button"; +import Paper from "@mui/material/Paper"; +import Typography from "@mui/material/Typography"; +import type { ReactNode } from "react"; +import { Link, useLocation } from "react-router"; +import { useConfig } from "@/components/config-context"; +import { useCurrentUser } from "@/components/current-user-context"; + +/** + * Enforces the site privacy setting client-side (the API enforces it + * server-side): members-only sites require login, staff-only sites + * require a staff account. + */ +export function PrivacyGate({ children }: { children: ReactNode }) { + const { me } = useConfig(); + const { user } = useCurrentUser(); + const location = useLocation(); + + const privacy = me.site.privacy; + const allowed = + privacy === "public" || (privacy === "members" && user !== null) || user?.is_staff === true; + + if (allowed) { + return <>{children}; + } + + const needsLogin = user === null; + return ( + + + {privacy === "staff" ? "Staff only" : "Members only"} + + {privacy === "staff" + ? "This site is only viewable by staff accounts." + : "You must log in to view this site."} + + {needsLogin && ( + + )} + + ); +} diff --git a/web-ui/components/snackbar-context.tsx b/web-ui/components/snackbar-context.tsx new file mode 100644 index 000000000..d92e45896 --- /dev/null +++ b/web-ui/components/snackbar-context.tsx @@ -0,0 +1,54 @@ +import Alert, { type AlertColor } from "@mui/material/Alert"; +import Snackbar from "@mui/material/Snackbar"; +import { createContext, type ReactNode, useCallback, useContext, useMemo, useState } from "react"; + +export interface SnackbarValue { + showMessage: (message: string, severity?: AlertColor) => void; +} + +const SnackbarContext = createContext(null as unknown as SnackbarValue); + +interface Message { + id: number; + text: string; + severity: AlertColor; +} + +let nextId = 1; + +export function SnackbarProvider({ children }: { children: ReactNode }) { + const [current, setCurrent] = useState(null); + + const showMessage = useCallback((text: string, severity: AlertColor = "success") => { + setCurrent({ id: nextId++, text, severity }); + }, []); + + const value = useMemo(() => ({ showMessage }), [showMessage]); + + return ( + + {children} + { + if (reason !== "clickaway") { + setCurrent(null); + } + }} + anchorOrigin={{ vertical: "bottom", horizontal: "center" }} + > + {current ? ( + setCurrent(null)} variant="filled"> + {current.text} + + ) : undefined} + + + ); +} + +export function useSnackbar(): SnackbarValue { + return useContext(SnackbarContext); +} diff --git a/web-ui/layout/main-layout.tsx b/web-ui/layout/main-layout.tsx index acd2c5938..73c0c29b3 100644 --- a/web-ui/layout/main-layout.tsx +++ b/web-ui/layout/main-layout.tsx @@ -1,11 +1,92 @@ +import AccountCircleIcon from "@mui/icons-material/AccountCircle"; import AppBar from "@mui/material/AppBar"; +import Avatar from "@mui/material/Avatar"; import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; import Container from "@mui/material/Container"; +import IconButton from "@mui/material/IconButton"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; -import { Link, Outlet } from "react-router"; +import { useState } from "react"; +import { Link, Outlet, useLocation, useNavigate } from "react-router"; +import { useConfig } from "@/components/config-context"; +import { useCurrentUser } from "@/components/current-user-context"; + +function UserMenu() { + const { me } = useConfig(); + const { user } = useCurrentUser(); + const navigate = useNavigate(); + const location = useLocation(); + const [anchor, setAnchor] = useState(null); + + if (!user) { + if (me.sso_login_url) { + const redir = encodeURIComponent(window.location.origin + location.pathname); + return ( + + ); + } + return ( + + ); + } + + const mugshotUrl = user.picture?.thumbnail_url; + return ( + <> + setAnchor(e.currentTarget)} size="large"> + {mugshotUrl ? ( + + ) : ( + + )} + + setAnchor(null)}> + {user.display_name || user.username} + { + setAnchor(null); + navigate("/account"); + }} + > + My account + + {user.is_staff && ( + { + setAnchor(null); + navigate("/kegadmin"); + }} + > + Admin + + )} + { + setAnchor(null); + navigate("/accounts/logout"); + }} + > + Log out + + + + ); +} export function MainLayout() { + const { me } = useConfig(); + return ( @@ -14,10 +95,11 @@ export function MainLayout() { variant="h6" component={Link} to="/" - sx={{ color: "inherit", textDecoration: "none" }} + sx={{ color: "inherit", textDecoration: "none", flexGrow: 1 }} > - Kegbot + {me.site.title} + diff --git a/web-ui/lib/api.ts b/web-ui/lib/api.ts index 91b67b993..3b6144f4c 100644 --- a/web-ui/lib/api.ts +++ b/web-ui/lib/api.ts @@ -14,7 +14,6 @@ export function getCsrfToken(): string | null { client.setConfig({ baseUrl: "/", credentials: "include", - throwOnError: true, }); client.interceptors.request.use((request) => { @@ -25,6 +24,18 @@ client.interceptors.request.use((request) => { return request; }); +/** + * Awaits a generated-client call, returning `data` or throwing `error` + * (the parsed response body — e.g. a DRF field-error object). + */ +export async function unwrap(promise: Promise<{ data?: D; error?: unknown }>): Promise { + const { data, error } = await promise; + if (error !== undefined) { + throw error; + } + return data as D; +} + /** * Returns DRF field errors from a thrown API error, or null when the * error is not a field-validation failure. diff --git a/web-ui/lib/forms.ts b/web-ui/lib/forms.ts new file mode 100644 index 000000000..64379db8f --- /dev/null +++ b/web-ui/lib/forms.ts @@ -0,0 +1,23 @@ +import { type FormErrors, getFormErrors, toErrorMessage } from "@/lib/api"; + +export const NON_FIELD_ERRORS = "non_field_errors"; + +/** Converts any thrown API error into a FormErrors map for display. */ +export function formErrorsFromException(error: unknown): FormErrors { + return getFormErrors(error) ?? { [NON_FIELD_ERRORS]: [toErrorMessage(error)] }; +} + +/** First error message for a field, or undefined. */ +export function fieldError(errors: FormErrors | null, field: string): string | undefined { + return errors?.[field]?.[0]; +} + +/** Errors not attributable to a specific form field. */ +export function nonFieldErrors(errors: FormErrors | null, fields: string[]): string[] { + if (!errors) { + return []; + } + return Object.entries(errors) + .filter(([key]) => !fields.includes(key)) + .flatMap(([, messages]) => messages); +} diff --git a/web-ui/routes.tsx b/web-ui/routes.tsx index 6656f2cf8..575bb3c94 100644 --- a/web-ui/routes.tsx +++ b/web-ui/routes.tsx @@ -1,13 +1,54 @@ -import { Route, Routes } from "react-router"; +import { Navigate, Route, Routes, useParams } from "react-router"; +import { PrivacyGate } from "@/components/privacy-gate"; import { MainLayout } from "@/layout/main-layout"; +import { MinimalLayout } from "@/layout/minimal-layout"; +import { ActivateView } from "@/views/auth/activate-view"; +import { ConfirmEmailView } from "@/views/auth/confirm-email-view"; +import { LoginView } from "@/views/auth/login-view"; +import { LogoutView } from "@/views/auth/logout-view"; +import { PasswordResetConfirmView } from "@/views/auth/password-reset-confirm-view"; +import { PasswordResetView } from "@/views/auth/password-reset-view"; +import { RegisterView } from "@/views/auth/register-view"; import { HomeView } from "@/views/home-view"; +function RedirectWithParam({ to }: { to: (params: Record) => string }) { + const params = useParams(); + return ; +} + export function AppRoutes() { return ( - }> + {/* Auth and token-link flows: never privacy-gated. */} + }> + } /> + } /> + } /> + } + /> + } /> + } /> + + + {/* Main site: gated by the site privacy setting. */} + + + + } + > } /> + } /> + + {/* Legacy short URLs. */} + `/drinks/${p.id}`} />} /> + `/drinks/${p.id}`} />} /> + + } /> ); } diff --git a/web-ui/test/app-boot.test.tsx b/web-ui/test/app-boot.test.tsx new file mode 100644 index 000000000..67f355c60 --- /dev/null +++ b/web-ui/test/app-boot.test.tsx @@ -0,0 +1,58 @@ +import { afterEach, expect, test } from "bun:test"; +import { render, screen } from "@testing-library/react"; +import { App } from "@/app"; +import { bootPayload, mockApi, ok } from "@/test/helpers"; + +let restore: (() => void) | null = null; + +afterEach(() => { + restore?.(); + restore = null; + window.history.pushState({}, "", "/"); +}); + +test("boots and renders the site title", async () => { + ({ restore } = mockApi({ + "GET /api/users/me": ok(bootPayload()), + })); + render(); + expect(await screen.findByText("Test Kegbot")).toBeTruthy(); +}); + +test("members-only site shows the login interstitial to anonymous users", async () => { + ({ restore } = mockApi({ + "GET /api/users/me": ok(bootPayload({ site: { privacy: "members" } as never })), + })); + render(); + expect(await screen.findByText("Members only")).toBeTruthy(); + expect(screen.getByText("Log in")).toBeTruthy(); +}); + +test("staff-only site blocks a logged-in non-staff member", async () => { + ({ restore } = mockApi({ + "GET /api/users/me": ok( + bootPayload({ + site: { privacy: "staff" } as never, + user: { + id: 2, + username: "alice", + email: "a@example.com", + display_name: "alice", + is_staff: false, + is_active: true, + picture: null, + } as never, + }), + ), + })); + render(); + expect(await screen.findByText("Staff only")).toBeTruthy(); +}); + +test("setup-required responses render the setup notice", async () => { + ({ restore } = mockApi({ + "GET /api/users/me": { status: 403, body: { error: "setup_required" } }, + })); + render(); + expect(await screen.findByText(/needs to be set up/)).toBeTruthy(); +}); diff --git a/web-ui/test/helpers.tsx b/web-ui/test/helpers.tsx new file mode 100644 index 000000000..4ae62f435 --- /dev/null +++ b/web-ui/test/helpers.tsx @@ -0,0 +1,73 @@ +import type { Me } from "@/api"; + +export interface MockResponse { + status: number; + body: unknown; +} + +type Handler = MockResponse | ((request: Request) => MockResponse); + +/** + * Replaces global fetch with a route-table mock. Keys are + * "METHOD /path"; values are responses or request handlers. + * Returns a restore function. + */ +export function mockApi(handlers: Record) { + const originalFetch = globalThis.fetch; + const seen: string[] = []; + + const mocked = async (input: RequestInfo | URL, init?: RequestInit): Promise => { + const request = input instanceof Request ? input : new Request(input, init); + const path = new URL(request.url, "http://localhost").pathname; + const key = `${request.method.toUpperCase()} ${path}`; + seen.push(key); + const handler = handlers[key]; + if (handler === undefined) { + throw new Error(`Unmocked request: ${key}`); + } + const { status, body } = typeof handler === "function" ? handler(request) : handler; + return new Response(JSON.stringify(body), { + status, + headers: { "Content-Type": "application/json" }, + }); + }; + + globalThis.fetch = mocked as typeof fetch; + return { + seen, + restore: () => { + globalThis.fetch = originalFetch; + }, + }; +} + +export function ok(body: unknown): MockResponse { + return { status: 200, body }; +} + +export function bootPayload(overrides: Partial = {}): Me { + return { + user: null, + site: { + server_version: "2.0.0", + title: "Test Kegbot", + privacy: "public", + registration_mode: "public", + volume_display_units: "imperial", + temperature_display_units: "f", + timezone: "UTC", + session_timeout_minutes: 180, + enable_sensing: true, + enable_users: true, + google_analytics_id: null, + background_image: null, + ...(overrides.site ?? {}), + }, + can_invite: true, + have_sessions: true, + sso_login_url: "", + sso_logout_url: "", + plugins: [{ short_name: "webhook", name: "Web Hooks" }], + ...overrides, + } as Me; +} diff --git a/web-ui/test/login.test.tsx b/web-ui/test/login.test.tsx new file mode 100644 index 000000000..aec58f485 --- /dev/null +++ b/web-ui/test/login.test.tsx @@ -0,0 +1,65 @@ +import { afterEach, expect, test } from "bun:test"; +import { fireEvent, render, screen, waitFor } from "@testing-library/react"; +import { App } from "@/app"; +import { bootPayload, mockApi, ok } from "@/test/helpers"; + +let restore: (() => void) | null = null; + +afterEach(() => { + restore?.(); + restore = null; + window.history.pushState({}, "", "/"); +}); + +test("failed login surfaces the server error", async () => { + window.history.pushState({}, "", "/accounts/login"); + ({ restore } = mockApi({ + "GET /api/users/me": ok(bootPayload()), + "POST /api/auth/login": { + status: 400, + body: { non_field_errors: ["Incorrect username/password"] }, + }, + })); + render(); + + const username = await screen.findByLabelText(/Username/); + fireEvent.change(username, { target: { value: "alice" } }); + fireEvent.change(screen.getByLabelText(/Password/), { target: { value: "nope" } }); + fireEvent.click(screen.getByRole("button", { name: "Log in" })); + + expect(await screen.findByText("Incorrect username/password")).toBeTruthy(); +}); + +test("successful login refreshes the boot payload", async () => { + window.history.pushState({}, "", "/accounts/login"); + const loggedOut = bootPayload(); + const loggedIn = bootPayload({ + user: { + id: 2, + username: "alice", + email: "a@example.com", + display_name: "Alice", + is_staff: false, + is_active: true, + picture: null, + } as never, + }); + let bootCalls = 0; + ({ restore } = mockApi({ + "GET /api/users/me": () => { + bootCalls++; + return ok(bootCalls === 1 ? loggedOut : loggedIn); + }, + "POST /api/auth/login": ok(loggedIn.user), + })); + render(); + + const username = await screen.findByLabelText(/Username/); + fireEvent.change(username, { target: { value: "alice" } }); + fireEvent.change(screen.getByLabelText(/Password/), { target: { value: "pw" } }); + fireEvent.click(screen.getByRole("button", { name: "Log in" })); + + // After login + refresh, the login view redirects home. + await waitFor(() => expect(window.location.pathname).toBe("/")); + expect(bootCalls).toBeGreaterThanOrEqual(2); +}); diff --git a/web-ui/test/reset-param.test.ts b/web-ui/test/reset-param.test.ts new file mode 100644 index 000000000..4002bc6de --- /dev/null +++ b/web-ui/test/reset-param.test.ts @@ -0,0 +1,15 @@ +import { expect, test } from "bun:test"; +import { splitResetParam } from "@/views/auth/password-reset-confirm-view"; + +test("splits uid and token", () => { + expect(splitResetParam("MQ-abc123-def456")).toEqual({ uid: "MQ", token: "abc123-def456" }); +}); + +test("uid may itself contain dashes", () => { + expect(splitResetParam("M-Q-abc123-def456")).toEqual({ uid: "M-Q", token: "abc123-def456" }); +}); + +test("rejects malformed values", () => { + expect(splitResetParam("junk")).toBeNull(); + expect(splitResetParam("a-b")).toBeNull(); +}); diff --git a/web-ui/test/setup.ts b/web-ui/test/setup.ts index 7f712d02b..6ad44880b 100644 --- a/web-ui/test/setup.ts +++ b/web-ui/test/setup.ts @@ -1,3 +1,8 @@ +import { afterEach } from "bun:test"; import { GlobalRegistrator } from "@happy-dom/global-registrator"; -GlobalRegistrator.register(); +GlobalRegistrator.register({ url: "http://localhost/" }); + +// Registered here (after happy-dom) so every test file gets DOM cleanup. +const { cleanup } = await import("@testing-library/react"); +afterEach(cleanup); diff --git a/web-ui/views/auth/activate-view.tsx b/web-ui/views/auth/activate-view.tsx new file mode 100644 index 000000000..eb8663257 --- /dev/null +++ b/web-ui/views/auth/activate-view.tsx @@ -0,0 +1,86 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Paper from "@mui/material/Paper"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { useNavigate, useParams } from "react-router"; +import { accountActivateCreate } from "@/api"; +import { useConfig } from "@/components/config-context"; +import type { FormErrors } from "@/lib/api"; +import { unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException, nonFieldErrors } from "@/lib/forms"; + +export function ActivateView() { + const { key = "" } = useParams(); + const { refresh } = useConfig(); + const navigate = useNavigate(); + + const [password, setPassword] = useState(""); + const [password2, setPassword2] = useState(""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + if (password !== password2) { + setErrors({ password: ["The two password fields didn't match."] }); + return; + } + setBusy(true); + setErrors(null); + try { + await unwrap(accountActivateCreate({ body: { activation_key: key, password } })); + await refresh(); + navigate("/account", { replace: true }); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + return ( + +
+ + Activate your account + + Choose a password to finish setting up your account. + + {nonFieldErrors(errors, ["password", "activation_key"]).map((message) => ( + + {message} + + ))} + {fieldError(errors, "activation_key") && ( + {fieldError(errors, "activation_key")} + )} + setPassword(e.target.value)} + error={Boolean(fieldError(errors, "password"))} + helperText={fieldError(errors, "password")} + autoComplete="new-password" + autoFocus + required + /> + setPassword2(e.target.value)} + autoComplete="new-password" + required + /> + + +
+
+ ); +} diff --git a/web-ui/views/auth/confirm-email-view.tsx b/web-ui/views/auth/confirm-email-view.tsx new file mode 100644 index 000000000..e213152a8 --- /dev/null +++ b/web-ui/views/auth/confirm-email-view.tsx @@ -0,0 +1,75 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Paper from "@mui/material/Paper"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { useEffect, useRef, useState } from "react"; +import { Link, useLocation, useParams } from "react-router"; +import { accountConfirmEmailCreate } from "@/api"; +import { useConfig } from "@/components/config-context"; +import { useCurrentUser } from "@/components/current-user-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; + +export function ConfirmEmailView() { + const { token = "" } = useParams(); + const { refresh } = useConfig(); + const { isLoggedIn } = useCurrentUser(); + const location = useLocation(); + + const [state, setState] = useState<"working" | "done" | "error">("working"); + const [message, setMessage] = useState(""); + const started = useRef(false); + + useEffect(() => { + if (!isLoggedIn || started.current) { + return; + } + started.current = true; + (async () => { + try { + await unwrap(accountConfirmEmailCreate({ body: { token } })); + await refresh(); + setState("done"); + } catch (error) { + setMessage(toErrorMessage(error)); + setState("error"); + } + })(); + }, [isLoggedIn, token, refresh]); + + if (!isLoggedIn) { + return ( + + + Confirm e-mail change + Log in to confirm your new e-mail address. + + + + ); + } + + return ( + + + Confirm e-mail change + {state === "working" && Confirming…} + {state === "done" && ( + <> + Your e-mail address has been updated. + + + )} + {state === "error" && {message}} + + + ); +} diff --git a/web-ui/views/auth/login-view.tsx b/web-ui/views/auth/login-view.tsx new file mode 100644 index 000000000..ce80dd505 --- /dev/null +++ b/web-ui/views/auth/login-view.tsx @@ -0,0 +1,106 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Paper from "@mui/material/Paper"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useEffect, useState } from "react"; +import { Link, useNavigate, useSearchParams } from "react-router"; +import { useConfig } from "@/components/config-context"; +import { useCurrentUser } from "@/components/current-user-context"; +import type { FormErrors } from "@/lib/api"; +import { fieldError, formErrorsFromException, nonFieldErrors } from "@/lib/forms"; + +export function LoginView() { + const { me } = useConfig(); + const { login, isLoggedIn } = useCurrentUser(); + const navigate = useNavigate(); + const [params] = useSearchParams(); + const next = params.get("next") || "/"; + + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + useEffect(() => { + if (isLoggedIn) { + navigate(next, { replace: true }); + } + }, [isLoggedIn, navigate, next]); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + setErrors(null); + try { + await login(username, password); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + if (me.sso_login_url) { + const redir = encodeURIComponent(window.location.origin + next); + return ( + + + Log in + + + + ); + } + + return ( + +
+ + Log in + {nonFieldErrors(errors, ["username", "password"]).map((message) => ( + + {message} + + ))} + setUsername(e.target.value)} + error={Boolean(fieldError(errors, "username"))} + helperText={fieldError(errors, "username")} + autoFocus + autoComplete="username" + required + /> + setPassword(e.target.value)} + error={Boolean(fieldError(errors, "password"))} + helperText={fieldError(errors, "password")} + autoComplete="current-password" + required + /> + + + {me.site.registration_mode === "public" && ( + + )} + + + +
+
+ ); +} diff --git a/web-ui/views/auth/logout-view.tsx b/web-ui/views/auth/logout-view.tsx new file mode 100644 index 000000000..b8d56ed1a --- /dev/null +++ b/web-ui/views/auth/logout-view.tsx @@ -0,0 +1,29 @@ +import Box from "@mui/material/Box"; +import CircularProgress from "@mui/material/CircularProgress"; +import { useEffect, useRef } from "react"; +import { useNavigate } from "react-router"; +import { useCurrentUser } from "@/components/current-user-context"; + +export function LogoutView() { + const { isLoggedIn, logout } = useCurrentUser(); + const navigate = useNavigate(); + const started = useRef(false); + + useEffect(() => { + if (!isLoggedIn) { + navigate("/", { replace: true }); + return; + } + if (started.current) { + return; + } + started.current = true; + void logout().finally(() => navigate("/", { replace: true })); + }, [isLoggedIn, logout, navigate]); + + return ( + + + + ); +} diff --git a/web-ui/views/auth/password-reset-confirm-view.tsx b/web-ui/views/auth/password-reset-confirm-view.tsx new file mode 100644 index 000000000..a9550f118 --- /dev/null +++ b/web-ui/views/auth/password-reset-confirm-view.tsx @@ -0,0 +1,116 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Paper from "@mui/material/Paper"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { Link, useParams } from "react-router"; +import { authPasswordResetConfirmCreate } from "@/api"; +import type { FormErrors } from "@/lib/api"; +import { unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException, nonFieldErrors } from "@/lib/forms"; + +/** + * Splits the `uidb64-token` path segment. The token is always the last + * two dash-separated groups (Django's `-` format); the + * uid is everything before them. + */ +export function splitResetParam(combined: string): { uid: string; token: string } | null { + const parts = combined.split("-"); + if (parts.length < 3) { + return null; + } + return { + uid: parts.slice(0, -2).join("-"), + token: parts.slice(-2).join("-"), + }; +} + +export function PasswordResetConfirmView() { + const { combined = "" } = useParams(); + const parsed = splitResetParam(combined); + + const [password, setPassword] = useState(""); + const [password2, setPassword2] = useState(""); + const [busy, setBusy] = useState(false); + const [done, setDone] = useState(false); + const [errors, setErrors] = useState(null); + + if (!parsed) { + return ( + + This password reset link is not valid. + + ); + } + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + if (password !== password2) { + setErrors({ new_password: ["The two password fields didn't match."] }); + return; + } + setBusy(true); + setErrors(null); + try { + await unwrap( + authPasswordResetConfirmCreate({ + body: { uid: parsed.uid, token: parsed.token, new_password: password }, + }), + ); + setDone(true); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + return ( + + {done ? ( + + Password updated + Your password has been changed. + + + ) : ( +
+ + Choose a new password + {nonFieldErrors(errors, ["new_password"]).map((message) => ( + + {message} + + ))} + setPassword(e.target.value)} + error={Boolean(fieldError(errors, "new_password"))} + helperText={fieldError(errors, "new_password")} + autoComplete="new-password" + autoFocus + required + /> + setPassword2(e.target.value)} + autoComplete="new-password" + required + /> + + +
+ )} +
+ ); +} diff --git a/web-ui/views/auth/password-reset-view.tsx b/web-ui/views/auth/password-reset-view.tsx new file mode 100644 index 000000000..18b07dc8b --- /dev/null +++ b/web-ui/views/auth/password-reset-view.tsx @@ -0,0 +1,64 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Paper from "@mui/material/Paper"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { authPasswordResetCreate } from "@/api"; +import type { FormErrors } from "@/lib/api"; +import { unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException } from "@/lib/forms"; + +export function PasswordResetView() { + const [email, setEmail] = useState(""); + const [busy, setBusy] = useState(false); + const [sent, setSent] = useState(false); + const [errors, setErrors] = useState(null); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + setErrors(null); + try { + await unwrap(authPasswordResetCreate({ body: { email } })); + setSent(true); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + return ( + + {sent ? ( + + Check your e-mail + + If an account exists for {email}, a password reset link is on its way. + + + ) : ( +
+ + Reset your password + setEmail(e.target.value)} + error={Boolean(fieldError(errors, "email"))} + helperText={fieldError(errors, "email")} + autoFocus + required + /> + + +
+ )} +
+ ); +} diff --git a/web-ui/views/auth/register-view.tsx b/web-ui/views/auth/register-view.tsx new file mode 100644 index 000000000..ab9b7564d --- /dev/null +++ b/web-ui/views/auth/register-view.tsx @@ -0,0 +1,122 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Paper from "@mui/material/Paper"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { useNavigate, useSearchParams } from "react-router"; +import { authRegisterCreate } from "@/api"; +import { useConfig } from "@/components/config-context"; +import type { FormErrors } from "@/lib/api"; +import { unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException, nonFieldErrors } from "@/lib/forms"; + +const FIELDS = ["username", "email", "password"]; + +export function RegisterView() { + const { me, refresh } = useConfig(); + const navigate = useNavigate(); + const [params] = useSearchParams(); + const inviteCode = params.get("invite_code") || ""; + + const [username, setUsername] = useState(""); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [password2, setPassword2] = useState(""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + const inviteNeeded = me.site.registration_mode !== "public" && !inviteCode; + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + if (password !== password2) { + setErrors({ password: ["The two password fields didn't match."] }); + return; + } + setBusy(true); + setErrors(null); + try { + await unwrap( + authRegisterCreate({ + body: { username, email, password, invite_code: inviteCode || undefined }, + }), + ); + await refresh(); + navigate("/", { replace: true }); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + if (inviteNeeded) { + return ( + + + Invitation required + + New accounts on this site are invitation-only. Ask a member for an invitation, then + follow the link in the invitation e-mail. + + + + ); + } + + return ( + +
+ + Create an account + {nonFieldErrors(errors, FIELDS).map((message) => ( + + {message} + + ))} + setUsername(e.target.value)} + error={Boolean(fieldError(errors, "username"))} + helperText={fieldError(errors, "username")} + autoFocus + required + /> + setEmail(e.target.value)} + error={Boolean(fieldError(errors, "email"))} + helperText={fieldError(errors, "email")} + required + /> + setPassword(e.target.value)} + error={Boolean(fieldError(errors, "password"))} + helperText={fieldError(errors, "password")} + autoComplete="new-password" + required + /> + setPassword2(e.target.value)} + autoComplete="new-password" + required + /> + + +
+
+ ); +} From 6fd320d990874e52d057c1f929fcdb77c61ee9ec Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:05:23 +0000 Subject: [PATCH 15/48] web-ui: public browsing views Adds the read-side of the site: - home: on-tap cards (keg fill, beverage, live tap temperature from thermo logs) beside the recent-activity event timeline, polling /api/status every 10s - fullscreen kiosk mode: same data, chrome-free, re-renders instead of reloading like the old page - stats: headline badges plus top-drinkers and volume-by-weekday charts (MUI X Charts) from /api/stats/system - kegs: list with status chips; detail with fill/spill info, per-keg top drinkers, sessions (derived from the stats blob), and its drinks - drinkers: profile with stats badges, weekday chart, sessions, drinks - drinks: pour detail with shout, session link, picture display and owner/admin picture erase - sessions: archive honoring the old /sessions/[year[/month[/day]]] URL hierarchy via API date filters, plus detail with per-drinker chart; /sessions/id/:id resolves sessions by id (old /s/:id short links redirect there) Shared pieces: unit-aware formatters bound to site settings, cursor 'load more' pagination hook, event timeline, tap/keg cards, drink tables, and chart components. Main nav gains Kegs/Sessions/Stats. --- .../components/charts/temperature-chart.tsx | 33 ++++++ .../charts/volume-by-drinker-chart.tsx | 29 +++++ .../charts/volume-by-weekday-chart.tsx | 18 +++ web-ui/components/drink-list.tsx | 69 ++++++++++++ web-ui/components/event-timeline.tsx | 86 ++++++++++++++ web-ui/components/keg-progress.tsx | 29 +++++ web-ui/components/load-more-button.tsx | 18 +++ web-ui/components/session-volume-list.tsx | 43 +++++++ web-ui/components/stat-badges.tsx | 35 ++++++ web-ui/components/tap-card-live.tsx | 28 +++++ web-ui/components/tap-card.tsx | 59 ++++++++++ web-ui/components/use-formatters.ts | 30 +++++ web-ui/components/user-link.tsx | 35 ++++++ web-ui/layout/main-layout.tsx | 15 ++- web-ui/lib/format.ts | 68 +++++++++++ web-ui/lib/stats.ts | 38 +++++++ web-ui/lib/use-cursor-list.ts | 106 ++++++++++++++++++ web-ui/routes.tsx | 38 +++++++ web-ui/test/home.test.tsx | 86 ++++++++++++++ web-ui/views/drinkers/drinker-view.tsx | 89 +++++++++++++++ web-ui/views/drinks/drink-view.tsx | 101 +++++++++++++++++ web-ui/views/fullscreen-view.tsx | 54 +++++++++ web-ui/views/home-view.tsx | 36 +++++- web-ui/views/kegs/keg-detail-view.tsx | 97 ++++++++++++++++ web-ui/views/kegs/keg-list-view.tsx | 67 +++++++++++ web-ui/views/sessions/session-detail-view.tsx | 69 ++++++++++++ web-ui/views/sessions/session-list-view.tsx | 79 +++++++++++++ web-ui/views/stats-view.tsx | 68 +++++++++++ 28 files changed, 1521 insertions(+), 2 deletions(-) create mode 100644 web-ui/components/charts/temperature-chart.tsx create mode 100644 web-ui/components/charts/volume-by-drinker-chart.tsx create mode 100644 web-ui/components/charts/volume-by-weekday-chart.tsx create mode 100644 web-ui/components/drink-list.tsx create mode 100644 web-ui/components/event-timeline.tsx create mode 100644 web-ui/components/keg-progress.tsx create mode 100644 web-ui/components/load-more-button.tsx create mode 100644 web-ui/components/session-volume-list.tsx create mode 100644 web-ui/components/stat-badges.tsx create mode 100644 web-ui/components/tap-card-live.tsx create mode 100644 web-ui/components/tap-card.tsx create mode 100644 web-ui/components/use-formatters.ts create mode 100644 web-ui/components/user-link.tsx create mode 100644 web-ui/lib/format.ts create mode 100644 web-ui/lib/stats.ts create mode 100644 web-ui/lib/use-cursor-list.ts create mode 100644 web-ui/test/home.test.tsx create mode 100644 web-ui/views/drinkers/drinker-view.tsx create mode 100644 web-ui/views/drinks/drink-view.tsx create mode 100644 web-ui/views/fullscreen-view.tsx create mode 100644 web-ui/views/kegs/keg-detail-view.tsx create mode 100644 web-ui/views/kegs/keg-list-view.tsx create mode 100644 web-ui/views/sessions/session-detail-view.tsx create mode 100644 web-ui/views/sessions/session-list-view.tsx create mode 100644 web-ui/views/stats-view.tsx diff --git a/web-ui/components/charts/temperature-chart.tsx b/web-ui/components/charts/temperature-chart.tsx new file mode 100644 index 000000000..8e4e00fe4 --- /dev/null +++ b/web-ui/components/charts/temperature-chart.tsx @@ -0,0 +1,33 @@ +import { LineChart } from "@mui/x-charts/LineChart"; +import type { Thermolog } from "@/api"; +import { useConfig } from "@/components/config-context"; +import { useFormatters } from "@/components/use-formatters"; + +/** Line chart of recent temperature readings (oldest to newest). */ +export function TemperatureChart({ logs }: { logs: Thermolog[] }) { + const { temperature } = useFormatters(); + const { me } = useConfig(); + const ordered = [...logs].reverse(); + const useFahrenheit = me.site.temperature_display_units === "f"; + return ( + new Date(log.time)), + scaleType: "time", + }, + ]} + series={[ + { + data: ordered.map((log) => (useFahrenheit ? (log.temp * 9) / 5 + 32 : log.temp)), + showMark: false, + valueFormatter: (value, context) => { + const original = ordered[context.dataIndex]; + return original ? temperature(original.temp) : String(value); + }, + }, + ]} + height={260} + /> + ); +} diff --git a/web-ui/components/charts/volume-by-drinker-chart.tsx b/web-ui/components/charts/volume-by-drinker-chart.tsx new file mode 100644 index 000000000..235134263 --- /dev/null +++ b/web-ui/components/charts/volume-by-drinker-chart.tsx @@ -0,0 +1,29 @@ +import { BarChart } from "@mui/x-charts/BarChart"; +import { useFormatters } from "@/components/use-formatters"; + +export interface VolumeByDrinkerChartProps { + data: Record; + /** Show at most this many drinkers (largest first). */ + limit?: number; +} + +/** Horizontal bar chart of poured volume by drinker. */ +export function VolumeByDrinkerChart({ data, limit = 10 }: VolumeByDrinkerChartProps) { + const { volume } = useFormatters(); + const entries = Object.entries(data) + .sort(([, a], [, b]) => b - a) + .slice(0, limit); + return ( + name), scaleType: "band", width: 110 }]} + series={[ + { + data: entries.map(([, value]) => value), + valueFormatter: (v) => (v == null ? "" : volume(v)), + }, + ]} + height={Math.max(180, entries.length * 44)} + /> + ); +} diff --git a/web-ui/components/charts/volume-by-weekday-chart.tsx b/web-ui/components/charts/volume-by-weekday-chart.tsx new file mode 100644 index 000000000..e7797fcbc --- /dev/null +++ b/web-ui/components/charts/volume-by-weekday-chart.tsx @@ -0,0 +1,18 @@ +import { BarChart } from "@mui/x-charts/BarChart"; +import { useFormatters } from "@/components/use-formatters"; + +const DAYS = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]; +const LABELS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + +/** Bar chart of poured volume by day of week. */ +export function VolumeByWeekdayChart({ data }: { data: Record }) { + const { volume } = useFormatters(); + const values = DAYS.map((day) => data[day] ?? 0); + return ( + (v == null ? "" : volume(v)) }]} + height={260} + /> + ); +} diff --git a/web-ui/components/drink-list.tsx b/web-ui/components/drink-list.tsx new file mode 100644 index 000000000..b0c19221a --- /dev/null +++ b/web-ui/components/drink-list.tsx @@ -0,0 +1,69 @@ +import MuiLink from "@mui/material/Link"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import type { Drink } from "@/api"; +import { useFormatters } from "@/components/use-formatters"; +import { UserLink } from "@/components/user-link"; +import { formatDateTime } from "@/lib/format"; + +export interface DrinkListProps { + drinks: Drink[]; + /** Hide the keg column (e.g. on a keg page). */ + hideKeg?: boolean; + /** Hide the user column (e.g. on a drinker page). */ + hideUser?: boolean; +} + +/** Tabular list of drinks with links to their detail pages. */ +export function DrinkList({ drinks, hideKeg, hideUser }: DrinkListProps) { + const { volume } = useFormatters(); + if (drinks.length === 0) { + return No drinks yet.; + } + return ( + + + + + Time + {!hideUser && Drinker} + Volume + {!hideKeg && Keg} + Shout + + + + {drinks.map((drink) => ( + + + + {formatDateTime(drink.time)} + + + {!hideUser && ( + + + + )} + {volume(drink.volume_ml)} + {!hideKeg && ( + + + {drink.keg.beverage.name} + + + )} + {drink.shout} + + ))} + +
+
+ ); +} diff --git a/web-ui/components/event-timeline.tsx b/web-ui/components/event-timeline.tsx new file mode 100644 index 000000000..defa75843 --- /dev/null +++ b/web-ui/components/event-timeline.tsx @@ -0,0 +1,86 @@ +import MuiLink from "@mui/material/Link"; +import List from "@mui/material/List"; +import ListItem from "@mui/material/ListItem"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import type { SystemEvent } from "@/api"; +import { useFormatters } from "@/components/use-formatters"; +import { UserLink } from "@/components/user-link"; + +function eventDescription(event: SystemEvent): string { + switch (event.kind) { + case "drink_poured": + return "poured a drink"; + case "session_started": + return "started a session"; + case "session_joined": + return "joined the session"; + case "keg_tapped": + return "keg was tapped"; + case "keg_volume_low": + return "keg is running low"; + case "keg_ended": + return "keg was finished"; + default: + return event.kind; + } +} + +function EventItem({ event }: { event: SystemEvent }) { + const { volume, relative } = useFormatters(); + const isKegEvent = + event.kind === "keg_tapped" || event.kind === "keg_volume_low" || event.kind === "keg_ended"; + + return ( + + + + + {isKegEvent && event.keg ? ( + <> + + {event.keg.beverage.name} + {" "} + {eventDescription(event)} + + ) : ( + <> + {eventDescription(event)} + + )} + + + {relative(event.time)} + + + {event.kind === "drink_poured" && event.drink && ( + + + {volume(event.drink.volume_ml)} + + {event.drink.shout ? ` — “${event.drink.shout}”` : ""} + + )} + + + ); +} + +/** Feed of recent SystemEvents ("Now Drinking" timeline). */ +export function EventTimeline({ events }: { events: SystemEvent[] }) { + if (events.length === 0) { + return No activity yet.; + } + return ( + + {events.map((event) => ( + + ))} + + ); +} diff --git a/web-ui/components/keg-progress.tsx b/web-ui/components/keg-progress.tsx new file mode 100644 index 000000000..261eb9bee --- /dev/null +++ b/web-ui/components/keg-progress.tsx @@ -0,0 +1,29 @@ +import Box from "@mui/material/Box"; +import LinearProgress from "@mui/material/LinearProgress"; +import Typography from "@mui/material/Typography"; +import type { Keg } from "@/api"; +import { useFormatters } from "@/components/use-formatters"; +import { kegPercentFull } from "@/lib/format"; + +/** Fill bar for a keg, with remaining-volume label. */ +export function KegProgress({ keg }: { keg: Keg }) { + const { volume } = useFormatters(); + const fullMl = keg.full_volume_ml ?? 0; + const spilledMl = keg.spilled_ml ?? 0; + const percent = kegPercentFull(keg.served_volume_ml, spilledMl, fullMl); + const remaining = Math.max(0, fullMl - keg.served_volume_ml - spilledMl); + const color = percent < 10 ? "error" : percent < 25 ? "warning" : "success"; + return ( + + + + {percent.toFixed(0)}% full ({volume(remaining)} remaining) + + + ); +} diff --git a/web-ui/components/load-more-button.tsx b/web-ui/components/load-more-button.tsx new file mode 100644 index 000000000..3d9f396f1 --- /dev/null +++ b/web-ui/components/load-more-button.tsx @@ -0,0 +1,18 @@ +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import CircularProgress from "@mui/material/CircularProgress"; +import type { CursorList } from "@/lib/use-cursor-list"; + +/** "Load more" footer for cursor-paginated lists. */ +export function LoadMoreButton({ list }: { list: CursorList }) { + if (!list.hasMore) { + return null; + } + return ( + + + + ); +} diff --git a/web-ui/components/session-volume-list.tsx b/web-ui/components/session-volume-list.tsx new file mode 100644 index 000000000..394c4d111 --- /dev/null +++ b/web-ui/components/session-volume-list.tsx @@ -0,0 +1,43 @@ +import MuiLink from "@mui/material/Link"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableRow from "@mui/material/TableRow"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import { useFormatters } from "@/components/use-formatters"; + +/** + * Session list derived from a stats blob's volume_by_session map + * (newest session id first). + */ +export function SessionVolumeList({ + volumeBySession, +}: { + volumeBySession: Record; +}) { + const { volume } = useFormatters(); + const entries = Object.entries(volumeBySession).sort(([a], [b]) => Number(b) - Number(a)); + if (entries.length === 0) { + return No sessions yet.; + } + return ( + + + + {entries.map(([sessionId, sessionVolume]) => ( + + + + Session #{sessionId} + + + {volume(sessionVolume)} + + ))} + +
+
+ ); +} diff --git a/web-ui/components/stat-badges.tsx b/web-ui/components/stat-badges.tsx new file mode 100644 index 000000000..04d81a00f --- /dev/null +++ b/web-ui/components/stat-badges.tsx @@ -0,0 +1,35 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Grid from "@mui/material/Grid"; +import Typography from "@mui/material/Typography"; +import type { ReactNode } from "react"; +import { useFormatters } from "@/components/use-formatters"; +import type { StatsBlob } from "@/lib/stats"; + +function Badge({ value, caption }: { value: ReactNode; caption: string }) { + return ( + + + + {value} + + {caption} + + + + + ); +} + +/** Row of headline stats derived from a stats blob. */ +export function StatBadges({ stats }: { stats: StatsBlob }) { + const { volume } = useFormatters(); + return ( + + + + + + + ); +} diff --git a/web-ui/components/tap-card-live.tsx b/web-ui/components/tap-card-live.tsx new file mode 100644 index 000000000..192e199b7 --- /dev/null +++ b/web-ui/components/tap-card-live.tsx @@ -0,0 +1,28 @@ +import type { KegTap } from "@/api"; +import { thermoLogsList } from "@/api"; +import { TapCard } from "@/components/tap-card"; +import { useFormatters } from "@/components/use-formatters"; +import { unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +/** TapCard that also fetches the latest temperature for the tap's sensor. */ +export function TapCardLive({ tap }: { tap: KegTap }) { + const { temperature } = useFormatters(); + const sensorId = tap.temperature_sensor_id; + const reading = useAsyncData( + async () => { + const page = await unwrap(thermoLogsList({ query: { sensor: sensorId, page_size: 1 } })); + return page.results?.[0] ?? null; + }, + { deps: [sensorId], enabled: sensorId != null, pollMs: 60_000 }, + ); + + const tempC = reading.data?.temp ?? null; + return ( + + ); +} diff --git a/web-ui/components/tap-card.tsx b/web-ui/components/tap-card.tsx new file mode 100644 index 000000000..6c97f7345 --- /dev/null +++ b/web-ui/components/tap-card.tsx @@ -0,0 +1,59 @@ +import ThermostatIcon from "@mui/icons-material/Thermostat"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Chip from "@mui/material/Chip"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import type { KegTap } from "@/api"; +import { KegProgress } from "@/components/keg-progress"; + +export interface TapCardProps { + tap: KegTap; + /** Latest temperature at this tap, °C. */ + temperatureC?: number | null; + temperatureLabel?: string; +} + +/** "Currently on tap" snapshot for one tap. */ +export function TapCard({ tap, temperatureC, temperatureLabel }: TapCardProps) { + const keg = tap.current_keg; + return ( + + + + + + {tap.name} + + {temperatureC != null && ( + } + label={temperatureLabel} + size="small" + variant="outlined" + /> + )} + + {keg ? ( + <> + + + {keg.beverage.name} + + + + {keg.beverage.producer.name} + {keg.beverage.style ? ` · ${keg.beverage.style}` : ""} + + + + ) : ( + Nothing on tap. + )} + + + + ); +} diff --git a/web-ui/components/use-formatters.ts b/web-ui/components/use-formatters.ts new file mode 100644 index 000000000..46a4f8c74 --- /dev/null +++ b/web-ui/components/use-formatters.ts @@ -0,0 +1,30 @@ +import { useMemo } from "react"; +import { useConfig } from "@/components/config-context"; +import { + formatRelativeTime, + formatTemperature, + formatVolume, + type TemperatureUnits, + type VolumeUnits, +} from "@/lib/format"; + +export interface Formatters { + volume: (volumeMl: number) => string; + temperature: (tempC: number) => string; + relative: (iso: string) => string; +} + +/** Unit-aware formatters bound to the site's display settings. */ +export function useFormatters(): Formatters { + const { me } = useConfig(); + const volumeUnits = me.site.volume_display_units as VolumeUnits; + const temperatureUnits = me.site.temperature_display_units as TemperatureUnits; + return useMemo( + () => ({ + volume: (volumeMl) => formatVolume(volumeMl, volumeUnits), + temperature: (tempC) => formatTemperature(tempC, temperatureUnits), + relative: (iso) => formatRelativeTime(iso), + }), + [volumeUnits, temperatureUnits], + ); +} diff --git a/web-ui/components/user-link.tsx b/web-ui/components/user-link.tsx new file mode 100644 index 000000000..c16130208 --- /dev/null +++ b/web-ui/components/user-link.tsx @@ -0,0 +1,35 @@ +import Avatar from "@mui/material/Avatar"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import type { User } from "@/api"; + +export interface UserLinkProps { + user: User | null | undefined; + /** Avatar size in px; 0 hides the avatar. */ + avatarSize?: number; +} + +/** Avatar + username, linking to the drinker page. */ +export function UserLink({ user, avatarSize = 24 }: UserLinkProps) { + if (!user) { + return guest; + } + const name = user.display_name || user.username; + return ( + + {avatarSize > 0 && ( + + {name.charAt(0).toUpperCase()} + + )} + + {name} + + + ); +} diff --git a/web-ui/layout/main-layout.tsx b/web-ui/layout/main-layout.tsx index 73c0c29b3..c87c95619 100644 --- a/web-ui/layout/main-layout.tsx +++ b/web-ui/layout/main-layout.tsx @@ -84,6 +84,12 @@ function UserMenu() { ); } +const NAV_ITEMS: Array<{ label: string; to: string }> = [ + { label: "Kegs", to: "/kegs" }, + { label: "Sessions", to: "/sessions" }, + { label: "Stats", to: "/stats" }, +]; + export function MainLayout() { const { me } = useConfig(); @@ -95,10 +101,17 @@ export function MainLayout() { variant="h6" component={Link} to="/" - sx={{ color: "inherit", textDecoration: "none", flexGrow: 1 }} + sx={{ color: "inherit", textDecoration: "none", mr: 3 }} > {me.site.title} + + {NAV_ITEMS.map((item) => ( + + ))} + diff --git a/web-ui/lib/format.ts b/web-ui/lib/format.ts new file mode 100644 index 000000000..9178e3ebb --- /dev/null +++ b/web-ui/lib/format.ts @@ -0,0 +1,68 @@ +/** Display formatting helpers, honoring the site's unit settings. */ + +const ML_PER_OUNCE = 29.5735295625; +const ML_PER_PINT = ML_PER_OUNCE * 16; + +export type VolumeUnits = "metric" | "imperial"; +export type TemperatureUnits = "f" | "c"; + +export function formatVolume(volumeMl: number, units: VolumeUnits): string { + if (units === "metric") { + if (volumeMl < 500) { + return `${Math.round(volumeMl)} mL`; + } + return `${(volumeMl / 1000).toFixed(1)} L`; + } + const ounces = volumeMl / ML_PER_OUNCE; + if (ounces < 32) { + return `${ounces.toFixed(1)} oz`; + } + return `${(volumeMl / ML_PER_PINT).toFixed(1)} pints`; +} + +export function formatTemperature(tempC: number, units: TemperatureUnits): string { + if (units === "f") { + return `${((tempC * 9) / 5 + 32).toFixed(1)}° F`; + } + return `${tempC.toFixed(1)}° C`; +} + +export function formatDateTime(iso: string): string { + return new Date(iso).toLocaleString(undefined, { + dateStyle: "medium", + timeStyle: "short", + }); +} + +export function formatDate(iso: string): string { + return new Date(iso).toLocaleDateString(undefined, { dateStyle: "medium" }); +} + +const RELATIVE_UNITS: Array<[Intl.RelativeTimeFormatUnit, number]> = [ + ["year", 365 * 24 * 3600], + ["month", 30 * 24 * 3600], + ["day", 24 * 3600], + ["hour", 3600], + ["minute", 60], +]; + +export function formatRelativeTime(iso: string, now: Date = new Date()): string { + const seconds = (new Date(iso).getTime() - now.getTime()) / 1000; + const magnitude = Math.abs(seconds); + const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: "auto" }); + for (const [unit, unitSeconds] of RELATIVE_UNITS) { + if (magnitude >= unitSeconds) { + return formatter.format(Math.round(seconds / unitSeconds), unit); + } + } + return "just now"; +} + +/** Percent (0-100) of a keg remaining, clamped. */ +export function kegPercentFull(servedMl: number, spilledMl: number, fullMl: number): number { + if (!fullMl) { + return 0; + } + const remaining = fullMl - servedMl - spilledMl; + return Math.min(100, Math.max(0, (remaining / fullMl) * 100)); +} diff --git a/web-ui/lib/stats.ts b/web-ui/lib/stats.ts new file mode 100644 index 000000000..edf5aa274 --- /dev/null +++ b/web-ui/lib/stats.ts @@ -0,0 +1,38 @@ +/** + * Shape of the stats blob computed by pykeg/core/stats.py. + * + * The server serializes it as an untyped JSON object; this hand-written + * type mirrors the StatsBuilder methods. Keep the two in sync. + */ +export interface StatsBlob { + last_drink_id?: number; + keg_ids?: number[]; + total_volume_ml?: number; + total_pours?: number; + average_volume_ml?: number; + greatest_volume_ml?: number; + greatest_volume_id?: number; + /** Keys are day names ("monday" .. "sunday"). */ + volume_by_day_of_week?: Record; + /** Usernames (ids are translated server-side). */ + registered_drinkers?: string[]; + sessions_count?: number; + /** Keys are years ("2026"). */ + volume_by_year?: Record; + has_guest_pour?: boolean; + /** Keys are usernames. */ + volume_by_drinker?: Record; + /** Keys are session ids. */ + volume_by_session?: Record; + largest_session?: { + session_id?: number; + volume_ml?: number; + }; +} + +export function asStats(value: unknown): StatsBlob { + if (value && typeof value === "object" && !Array.isArray(value)) { + return value as StatsBlob; + } + return {}; +} diff --git a/web-ui/lib/use-cursor-list.ts b/web-ui/lib/use-cursor-list.ts new file mode 100644 index 000000000..cb5b55605 --- /dev/null +++ b/web-ui/lib/use-cursor-list.ts @@ -0,0 +1,106 @@ +import { useCallback, useEffect, useRef, useState } from "react"; + +export interface CursorPage { + next?: string | null; + results?: T[]; +} + +export interface CursorList { + items: T[]; + loading: boolean; + loadingMore: boolean; + error: unknown; + hasMore: boolean; + loadMore: () => void; + reload: () => void; +} + +function cursorFromUrl(next: string | null | undefined): string | undefined { + if (!next) { + return undefined; + } + try { + return new URL(next, window.location.origin).searchParams.get("cursor") ?? undefined; + } catch { + return undefined; + } +} + +/** + * Incrementally loads a cursor-paginated endpoint ("load more" style). + * Pass `deps` for filter values that should reset and refetch the list. + */ +export function useCursorList( + fetchPage: (cursor?: string) => Promise>, + deps: unknown[] = [], +): CursorList { + const [items, setItems] = useState([]); + const [loading, setLoading] = useState(true); + const [loadingMore, setLoadingMore] = useState(false); + const [error, setError] = useState(null); + const [nextCursor, setNextCursor] = useState(undefined); + const [hasMore, setHasMore] = useState(false); + const generation = useRef(0); + const fetchRef = useRef(fetchPage); + fetchRef.current = fetchPage; + + const loadFirst = useCallback(async () => { + const requestId = ++generation.current; + setLoading(true); + setError(null); + try { + const page = await fetchRef.current(undefined); + if (generation.current === requestId) { + setItems(page.results ?? []); + const cursor = cursorFromUrl(page.next); + setNextCursor(cursor); + setHasMore(Boolean(cursor)); + } + } catch (e) { + if (generation.current === requestId) { + setError(e); + } + } finally { + if (generation.current === requestId) { + setLoading(false); + } + } + }, []); + + const loadMore = useCallback(async () => { + if (!nextCursor) { + return; + } + const requestId = generation.current; + setLoadingMore(true); + try { + const page = await fetchRef.current(nextCursor); + if (generation.current === requestId) { + setItems((existing) => [...existing, ...(page.results ?? [])]); + const cursor = cursorFromUrl(page.next); + setNextCursor(cursor); + setHasMore(Boolean(cursor)); + } + } catch (e) { + if (generation.current === requestId) { + setError(e); + } + } finally { + setLoadingMore(false); + } + }, [nextCursor]); + + useEffect(() => { + void loadFirst(); + }, [loadFirst, ...deps]); + + return { + items, + loading, + loadingMore, + error, + hasMore, + loadMore: () => void loadMore(), + reload: () => void loadFirst(), + }; +} diff --git a/web-ui/routes.tsx b/web-ui/routes.tsx index 575bb3c94..85379da8d 100644 --- a/web-ui/routes.tsx +++ b/web-ui/routes.tsx @@ -9,7 +9,15 @@ import { LogoutView } from "@/views/auth/logout-view"; import { PasswordResetConfirmView } from "@/views/auth/password-reset-confirm-view"; import { PasswordResetView } from "@/views/auth/password-reset-view"; import { RegisterView } from "@/views/auth/register-view"; +import { DrinkerView } from "@/views/drinkers/drinker-view"; +import { DrinkView } from "@/views/drinks/drink-view"; +import { FullscreenView } from "@/views/fullscreen-view"; import { HomeView } from "@/views/home-view"; +import { KegDetailView } from "@/views/kegs/keg-detail-view"; +import { KegListView } from "@/views/kegs/keg-list-view"; +import { SessionDetailView } from "@/views/sessions/session-detail-view"; +import { SessionListView } from "@/views/sessions/session-list-view"; +import { StatsView } from "@/views/stats-view"; function RedirectWithParam({ to }: { to: (params: Record) => string }) { const params = useParams(); @@ -32,6 +40,16 @@ export function AppRoutes() { } /> + {/* Kiosk mode: gated but chrome-free. */} + + + + } + /> + {/* Main site: gated by the site privacy setting. */} } /> + } /> + } /> + } /> + `/kegs/${p.id}`} />} + /> + } /> + `/drinkers/${p.username}`} />} + /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> {/* Legacy short URLs. */} `/drinks/${p.id}`} />} /> `/drinks/${p.id}`} />} /> + `/sessions/id/${p.id}`} />} /> } />
diff --git a/web-ui/test/home.test.tsx b/web-ui/test/home.test.tsx new file mode 100644 index 000000000..3fc308b9e --- /dev/null +++ b/web-ui/test/home.test.tsx @@ -0,0 +1,86 @@ +import { afterEach, expect, test } from "bun:test"; +import { render, screen } from "@testing-library/react"; +import { App } from "@/app"; +import { bootPayload, mockApi, ok } from "@/test/helpers"; + +let restore: (() => void) | null = null; + +afterEach(() => { + restore?.(); + restore = null; + window.history.pushState({}, "", "/"); +}); + +const KEG = { + id: 1, + beverage: { + id: 1, + name: "Test IPA", + producer: { id: 1, name: "Test Brewery" }, + style: "IPA", + }, + keg_type: "half-barrel", + served_volume_ml: 10000, + full_volume_ml: 58673.9, + spilled_ml: 0, + start_time: "2026-08-01T00:00:00Z", + end_time: "2026-08-01T00:00:00Z", + status: "on_tap", +}; + +const STATUS = { + site: bootPayload().site, + taps: [ + { + id: 1, + name: "Main Tap", + current_keg_id: 1, + temperature_sensor_id: null, + sort_order: 0, + current_keg: KEG, + }, + ], + events: [ + { + id: 42, + kind: "drink_poured", + time: new Date().toISOString(), + user: { + id: 2, + username: "alice", + display_name: "alice", + is_staff: false, + is_active: true, + picture: null, + }, + drink: { + id: 7, + ticks: 0, + volume_ml: 400, + time: new Date().toISOString(), + duration: 4, + user: null, + keg: KEG, + session_id: 3, + shout: "cheers", + picture: null, + }, + keg: null, + session: null, + }, + ], +}; + +test("home renders taps and recent events", async () => { + ({ restore } = mockApi({ + "GET /api/users/me": ok(bootPayload()), + "GET /api/status": ok(STATUS), + })); + render(); + + expect(await screen.findByText("Test IPA")).toBeTruthy(); + expect(screen.getByText("Main Tap")).toBeTruthy(); + expect(screen.getByText("alice")).toBeTruthy(); + expect(screen.getByText(/poured a drink/)).toBeTruthy(); + expect(screen.getByText(/cheers/)).toBeTruthy(); +}); diff --git a/web-ui/views/drinkers/drinker-view.tsx b/web-ui/views/drinkers/drinker-view.tsx new file mode 100644 index 000000000..560f44ee9 --- /dev/null +++ b/web-ui/views/drinkers/drinker-view.tsx @@ -0,0 +1,89 @@ +import Avatar from "@mui/material/Avatar"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Grid from "@mui/material/Grid"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { useParams } from "react-router"; +import { drinksList, usersRetrieve, usersStatsRetrieve } from "@/api"; +import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-chart"; +import { DrinkList } from "@/components/drink-list"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { SessionVolumeList } from "@/components/session-volume-list"; +import { StatBadges } from "@/components/stat-badges"; +import { unwrap } from "@/lib/api"; +import { asStats } from "@/lib/stats"; +import { useAsyncData } from "@/lib/use-async-data"; +import { useCursorList } from "@/lib/use-cursor-list"; + +export function DrinkerView() { + const params = useParams(); + const username = params.username ?? ""; + + const user = useAsyncData(() => unwrap(usersRetrieve({ path: { username } })), { + deps: [username], + }); + const stats = useAsyncData( + async () => asStats(await unwrap(usersStatsRetrieve({ path: { username } }))), + { deps: [username] }, + ); + const drinks = useCursorList( + (cursor) => unwrap(drinksList({ query: { username, cursor } })), + [username], + ); + + const displayName = user.data?.display_name || username; + + return ( + + {user.data && ( + + + + {displayName.charAt(0).toUpperCase()} + + + {displayName} + {user.data.display_name && user.data.display_name !== username && ( + {username} + )} + + + {stats.data && } + + {stats.data?.volume_by_day_of_week && ( + + + + + + + + + )} + {stats.data?.volume_by_session && ( + + + + + + + + + )} + + + Drinks + + + + + )} + + ); +} diff --git a/web-ui/views/drinks/drink-view.tsx b/web-ui/views/drinks/drink-view.tsx new file mode 100644 index 000000000..96e0f9f86 --- /dev/null +++ b/web-ui/views/drinks/drink-view.tsx @@ -0,0 +1,101 @@ +import Button from "@mui/material/Button"; +import Card from "@mui/material/Card"; +import CardMedia from "@mui/material/CardMedia"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Link, useParams } from "react-router"; +import { drinksPictureDestroy, drinksRetrieve } from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { useCurrentUser } from "@/components/current-user-context"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { useFormatters } from "@/components/use-formatters"; +import { UserLink } from "@/components/user-link"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { formatDateTime } from "@/lib/format"; +import { useAsyncData } from "@/lib/use-async-data"; + +export function DrinkView() { + const params = useParams(); + const drinkId = Number(params.id); + const { volume } = useFormatters(); + const { user } = useCurrentUser(); + const confirm = useConfirm(); + const { showMessage } = useSnackbar(); + + const drink = useAsyncData(() => unwrap(drinksRetrieve({ path: { id: drinkId } })), { + deps: [drinkId], + }); + + const canManagePicture = user !== null && (user.is_staff || user.id === drink.data?.user?.id); + + const deletePicture = async () => { + if ( + !(await confirm({ + title: "Erase this picture?", + message: "The image will be permanently deleted.", + confirmText: "Erase", + destructive: true, + })) + ) { + return; + } + try { + await unwrap(drinksPictureDestroy({ path: { id: drinkId } })); + showMessage("Picture erased."); + drink.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + return ( + + {drink.data && ( + + + poured {volume(drink.data.volume_ml)} of{" "} + + {drink.data.keg.beverage.name} + {" "} + on {formatDateTime(drink.data.time)} + {drink.data.session_id != null && ( + <> + {" "} + during{" "} + + session #{drink.data.session_id} + + + )} + . + + {drink.data.shout && ( + + “{drink.data.shout}” + + )} + {drink.data.picture?.resized_url && ( + + + {canManagePicture && ( + + )} + + )} + + )} + + ); +} diff --git a/web-ui/views/fullscreen-view.tsx b/web-ui/views/fullscreen-view.tsx new file mode 100644 index 000000000..bec52b631 --- /dev/null +++ b/web-ui/views/fullscreen-view.tsx @@ -0,0 +1,54 @@ +import Box from "@mui/material/Box"; +import Grid from "@mui/material/Grid"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { useEffect } from "react"; +import { statusRetrieve } from "@/api"; +import { useConfig } from "@/components/config-context"; +import { EventTimeline } from "@/components/event-timeline"; +import { LoadingZone } from "@/components/loading-zone"; +import { TapCardLive } from "@/components/tap-card-live"; +import { unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +/** + * Kiosk mode: full-bleed on-tap display that stays current by polling + * (the old page reloaded itself; this just re-renders). + */ +export function FullscreenView() { + const { me } = useConfig(); + const status = useAsyncData(() => unwrap(statusRetrieve()), { pollMs: 10_000 }); + + useEffect(() => { + document.title = me.site.title ?? "Kegbot"; + }, [me.site.title]); + + return ( + + + {me.site.title} + + + {status.data && ( + + + + {status.data.taps.map((tap) => ( + + + + ))} + + + + + Recent Activity + + + + + )} + + + ); +} diff --git a/web-ui/views/home-view.tsx b/web-ui/views/home-view.tsx index b064bb9d4..3bec01847 100644 --- a/web-ui/views/home-view.tsx +++ b/web-ui/views/home-view.tsx @@ -1,5 +1,39 @@ +import Grid from "@mui/material/Grid"; +import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; +import { statusRetrieve } from "@/api"; +import { EventTimeline } from "@/components/event-timeline"; +import { Page } from "@/components/page"; +import { TapCardLive } from "@/components/tap-card-live"; +import { unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; export function HomeView() { - return Kegbot; + const status = useAsyncData(() => unwrap(statusRetrieve()), { pollMs: 10_000 }); + + return ( + + {status.data && ( + + + + On Tap + {status.data.taps.length === 0 && ( + No taps configured. + )} + {status.data.taps.map((tap) => ( + + ))} + + + + + Recent Activity + + + + + )} + + ); } diff --git a/web-ui/views/kegs/keg-detail-view.tsx b/web-ui/views/kegs/keg-detail-view.tsx new file mode 100644 index 000000000..25f48fef1 --- /dev/null +++ b/web-ui/views/kegs/keg-detail-view.tsx @@ -0,0 +1,97 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Grid from "@mui/material/Grid"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { useParams } from "react-router"; +import { drinksList, kegsRetrieve, kegsStatsRetrieve } from "@/api"; +import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; +import { DrinkList } from "@/components/drink-list"; +import { KegProgress } from "@/components/keg-progress"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { SessionVolumeList } from "@/components/session-volume-list"; +import { useFormatters } from "@/components/use-formatters"; +import { unwrap } from "@/lib/api"; +import { formatDate } from "@/lib/format"; +import { asStats } from "@/lib/stats"; +import { useAsyncData } from "@/lib/use-async-data"; +import { useCursorList } from "@/lib/use-cursor-list"; +import { kegStatusChip } from "@/views/kegs/keg-list-view"; + +export function KegDetailView() { + const params = useParams(); + const kegId = Number(params.id); + const { volume } = useFormatters(); + + const keg = useAsyncData(() => unwrap(kegsRetrieve({ path: { id: kegId } })), { + deps: [kegId], + }); + const stats = useAsyncData( + async () => asStats(await unwrap(kegsStatsRetrieve({ path: { id: kegId } }))), + { deps: [kegId] }, + ); + const drinks = useCursorList( + (cursor) => unwrap(drinksList({ query: { keg: kegId, cursor } })), + [kegId], + ); + + const title = keg.data ? keg.data.beverage.name : `Keg #${kegId}`; + + return ( + + {keg.data && ( + + + {kegStatusChip(keg.data)} + + {keg.data.beverage.producer.name} + {keg.data.beverage.style ? ` · ${keg.data.beverage.style}` : ""} · first tapped{" "} + {formatDate(keg.data.start_time)} + + + {keg.data.description && {keg.data.description}} + + + + + + + + + {volume(keg.data.served_volume_ml)} served + {keg.data.spilled_ml > 0 ? ` · ${volume(keg.data.spilled_ml)} spilled` : ""} + + + + + + {stats.data?.volume_by_drinker && + Object.keys(stats.data.volume_by_drinker).length > 0 && ( + + + + + + + + + )} + + {stats.data?.volume_by_session && ( + + Sessions + + + )} + + Drinks + + + + + )} + + ); +} diff --git a/web-ui/views/kegs/keg-list-view.tsx b/web-ui/views/kegs/keg-list-view.tsx new file mode 100644 index 000000000..aa07778a4 --- /dev/null +++ b/web-ui/views/kegs/keg-list-view.tsx @@ -0,0 +1,67 @@ +import Chip from "@mui/material/Chip"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import { Link } from "react-router"; +import type { Keg } from "@/api"; +import { kegsList } from "@/api"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useFormatters } from "@/components/use-formatters"; +import { unwrap } from "@/lib/api"; +import { formatDate } from "@/lib/format"; +import { useCursorList } from "@/lib/use-cursor-list"; + +export function kegStatusChip(keg: Keg) { + const color = + keg.status === "on_tap" ? "success" : keg.status === "available" ? "info" : "default"; + const label = + keg.status === "on_tap" ? "On tap" : keg.status === "available" ? "Available" : "Finished"; + return ; +} + +export function KegListView() { + const { volume } = useFormatters(); + const list = useCursorList((cursor) => unwrap(kegsList({ query: { cursor } }))); + + return ( + + + + + + + Keg + Beverage + Status + Served + First tapped + + + + {list.items.map((keg) => ( + + + + Keg #{keg.id} + + + {keg.beverage.name} + {kegStatusChip(keg)} + {volume(keg.served_volume_ml)} + {formatDate(keg.start_time)} + + ))} + +
+
+ +
+
+ ); +} diff --git a/web-ui/views/sessions/session-detail-view.tsx b/web-ui/views/sessions/session-detail-view.tsx new file mode 100644 index 000000000..8b7743017 --- /dev/null +++ b/web-ui/views/sessions/session-detail-view.tsx @@ -0,0 +1,69 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Grid from "@mui/material/Grid"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { useParams } from "react-router"; +import { drinksList, sessionsRetrieve } from "@/api"; +import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; +import { DrinkList } from "@/components/drink-list"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useFormatters } from "@/components/use-formatters"; +import { unwrap } from "@/lib/api"; +import { formatDateTime } from "@/lib/format"; +import { asStats } from "@/lib/stats"; +import { useAsyncData } from "@/lib/use-async-data"; +import { useCursorList } from "@/lib/use-cursor-list"; +import { sessionTitle } from "@/views/sessions/session-list-view"; + +export function SessionDetailView() { + const params = useParams(); + const sessionId = Number(params.id); + const { volume } = useFormatters(); + + const session = useAsyncData(() => unwrap(sessionsRetrieve({ path: { id: sessionId } })), { + deps: [sessionId], + }); + const drinks = useCursorList( + (cursor) => unwrap(drinksList({ query: { session: sessionId, cursor } })), + [sessionId], + ); + + const stats = session.data ? asStats(session.data.stats) : null; + + return ( + + {session.data && ( + + + {formatDateTime(session.data.start_time)} — {formatDateTime(session.data.end_time)} ·{" "} + {volume(session.data.volume_ml ?? 0)} poured + + {stats?.volume_by_drinker && Object.keys(stats.volume_by_drinker).length > 0 && ( + + + + + + + + + + + )} + + Drinks + + + + + )} + + ); +} diff --git a/web-ui/views/sessions/session-list-view.tsx b/web-ui/views/sessions/session-list-view.tsx new file mode 100644 index 000000000..a89651574 --- /dev/null +++ b/web-ui/views/sessions/session-list-view.tsx @@ -0,0 +1,79 @@ +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import Typography from "@mui/material/Typography"; +import { Link, useParams } from "react-router"; +import type { DrinkingSession } from "@/api"; +import { sessionsList } from "@/api"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useFormatters } from "@/components/use-formatters"; +import { unwrap } from "@/lib/api"; +import { formatDateTime } from "@/lib/format"; +import { useCursorList } from "@/lib/use-cursor-list"; + +export function sessionTitle(session: DrinkingSession): string { + return session.name || `Session #${session.id}`; +} + +/** + * Session archive. Optional :year/:month/:day route params narrow the + * range, mirroring the old date-hierarchy URLs. + */ +export function SessionListView() { + const params = useParams(); + const { volume } = useFormatters(); + const year = params.year ? Number(params.year) : undefined; + const month = params.month ? Number(params.month) : undefined; + const day = params.day ? Number(params.day) : undefined; + + const list = useCursorList( + (cursor) => unwrap(sessionsList({ query: { cursor, year, month, day } })), + [year, month, day], + ); + + const suffix = [year, month, day].filter((v) => v !== undefined).join("-"); + const title = suffix ? `Sessions · ${suffix}` : "Sessions"; + + return ( + + + {list.items.length === 0 && !list.loading && ( + No sessions found. + )} + {list.items.length > 0 && ( + + + + + Session + Started + Volume + + + + {list.items.map((session) => ( + + + + {sessionTitle(session)} + + + {formatDateTime(session.start_time)} + {volume(session.volume_ml ?? 0)} + + ))} + +
+
+ )} + +
+
+ ); +} diff --git a/web-ui/views/stats-view.tsx b/web-ui/views/stats-view.tsx new file mode 100644 index 000000000..57bf7e752 --- /dev/null +++ b/web-ui/views/stats-view.tsx @@ -0,0 +1,68 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Grid from "@mui/material/Grid"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import { statsSystemRetrieve } from "@/api"; +import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; +import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-chart"; +import { Page } from "@/components/page"; +import { StatBadges } from "@/components/stat-badges"; +import { useFormatters } from "@/components/use-formatters"; +import { unwrap } from "@/lib/api"; +import { asStats } from "@/lib/stats"; +import { useAsyncData } from "@/lib/use-async-data"; + +export function StatsView() { + const { volume } = useFormatters(); + const result = useAsyncData(async () => asStats(await unwrap(statsSystemRetrieve()))); + const stats = result.data; + + return ( + + {stats && ( + + + + {stats.volume_by_drinker && Object.keys(stats.volume_by_drinker).length > 0 && ( + + + + + + + + + )} + {stats.volume_by_day_of_week && ( + + + + + + + + + )} + + {stats.largest_session?.session_id != null && ( + + Largest session:{" "} + + Session #{stats.largest_session.session_id} + {" "} + ({volume(stats.largest_session.volume_ml ?? 0)}) + + )} + + )} + + ); +} From 8acae97bd1babcebbfdceafe5f22dffa35602f44 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:08:05 +0000 Subject: [PATCH 16/48] web-ui: account area Adds the authenticated /account section (tab chrome, login-redirect guard): account overview with the staff API-key panel and regenerate flow, profile (display name + mugshot upload), password change, notifications (e-mail preference checkboxes over notification-settings plus the change-e-mail confirmation flow), and invitations (send and revoke, shown only when the site's registration mode allows inviting). The OpenAPI schema now emits split request components (COMPONENT_SPLIT_REQUEST), so generated request types drop read-only fields and type binary uploads as files; schema and client regenerated. --- pykeg/settings.py | 3 + web-ui/api/types.gen.ts | 3257 +++++++++++-------- web-ui/components/require-auth.tsx | 19 + web-ui/routes.tsx | 21 + web-ui/schema.yaml | 3021 +++++++++++------ web-ui/views/account/account-layout.tsx | 36 + web-ui/views/account/account-view.tsx | 90 + web-ui/views/account/invite-view.tsx | 117 + web-ui/views/account/notifications-view.tsx | 166 + web-ui/views/account/password-view.tsx | 92 + web-ui/views/account/profile-view.tsx | 89 + 11 files changed, 4608 insertions(+), 2303 deletions(-) create mode 100644 web-ui/components/require-auth.tsx create mode 100644 web-ui/views/account/account-layout.tsx create mode 100644 web-ui/views/account/account-view.tsx create mode 100644 web-ui/views/account/invite-view.tsx create mode 100644 web-ui/views/account/notifications-view.tsx create mode 100644 web-ui/views/account/password-view.tsx create mode 100644 web-ui/views/account/profile-view.tsx diff --git a/pykeg/settings.py b/pykeg/settings.py index 99af3a915..fed0c21e0 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -360,6 +360,9 @@ # Serve the docs UI assets locally (no CDN). "SWAGGER_UI_DIST": "SIDECAR", "SWAGGER_UI_FAVICON_HREF": "SIDECAR", + # Emit separate request components (no readonly fields, binary + # uploads typed as files) so generated clients get correct types. + "COMPONENT_SPLIT_REQUEST": True, # Names for enums whose auto-derived names would be too generic. "ENUM_NAME_OVERRIDES": { "KegStatusEnum": "pykeg.core.models.Keg.STATUS_CHOICES", diff --git a/web-ui/api/types.gen.ts b/web-ui/api/types.gen.ts index 1d5514f32..64bc0d002 100644 --- a/web-ui/api/types.gen.ts +++ b/web-ui/api/types.gen.ts @@ -1,6 +1,6 @@ // This file is auto-generated by @hey-api/openapi-ts -export type ActivateAccountRequest = { +export type ActivateAccountRequestRequest = { activation_key: string; password: string; }; @@ -12,7 +12,7 @@ export type AdminDashboard = { num_new_users: number; }; -export type AdminUserCreateRequest = { +export type AdminUserCreateRequestRequest = { username: string; email?: string; password: string; @@ -41,6 +41,18 @@ export type ApiKey = { created_time?: string; }; +export type ApiKeyRequest = { + is_active: boolean; + /** + * Information about this key. + */ + description?: string | null; + /** + * Time the key was created. + */ + created_time?: string; +}; + export type AuthenticationToken = { readonly id: number; /** @@ -77,6 +89,34 @@ export type AuthenticationToken = { expire_time?: string | null; }; +export type AuthenticationTokenRequest = { + /** + * Namespace for this token. + */ + auth_device: string; + /** + * Actual value of the token, unique within an auth_device. + */ + token_value: string; + /** + * A human-readable alias for the token, for example "Guest Key". + */ + nice_name?: string | null; + /** + * A secret value necessary to authenticate with this token. + */ + pin?: string | null; + user?: number | null; + /** + * Whether this token is considered active. + */ + enabled?: boolean; + /** + * Date after which token is treated as disabled. + */ + expire_time?: string | null; +}; + export type Beverage = { readonly id: number; /** @@ -412,488 +452,872 @@ export type BeverageProducer = { picture: Picture; }; -/** - * * `beer` - Beer - * * `wine` - Wine - * * `soda` - Soda - * * `kombucha` - Kombucha - * * `other` - Other/Unknown - */ -export type BeverageTypeEnum = 'beer' | 'wine' | 'soda' | 'kombucha' | 'other'; - -export type ConfirmEmailRequest = { - token: string; -}; - -export type Controller = { - readonly id: number; +export type BeverageProducerRequest = { /** - * Identifying name for this device; must be unique. + * Name of the brewer */ name: string; /** - * Type of controller (optional). - */ - model_name?: string | null; - /** - * Serial number (optional). - */ - serial_number?: string | null; -}; - -/** - * * `AFG` - Afghanistan - * * `ALA` - Aland Islands - * * `ALB` - Albania - * * `DZA` - Algeria - * * `ASM` - American Samoa - * * `AND` - Andorra - * * `AGO` - Angola - * * `AIA` - Anguilla - * * `ATG` - Antigua and Barbuda - * * `ARG` - Argentina - * * `ARM` - Armenia - * * `ABW` - Aruba - * * `AUS` - Australia - * * `AUT` - Austria - * * `AZE` - Azerbaijan - * * `BHS` - Bahamas - * * `BHR` - Bahrain - * * `BGD` - Bangladesh - * * `BRB` - Barbados - * * `BLR` - Belarus - * * `BEL` - Belgium - * * `BLZ` - Belize - * * `BEN` - Benin - * * `BMU` - Bermuda - * * `BTN` - Bhutan - * * `BOL` - Bolivia - * * `BIH` - Bosnia and Herzegovina - * * `BWA` - Botswana - * * `BRA` - Brazil - * * `VGB` - British Virgin Islands - * * `BRN` - Brunei Darussalam - * * `BGR` - Bulgaria - * * `BFA` - Burkina Faso - * * `BDI` - Burundi - * * `KHM` - Cambodia - * * `CMR` - Cameroon - * * `CAN` - Canada - * * `CPV` - Cape Verde - * * `CYM` - Cayman Islands - * * `CAF` - Central African Republic - * * `TCD` - Chad - * * `CIL` - Channel Islands - * * `CHL` - Chile - * * `CHN` - China - * * `HKG` - China - Hong Kong - * * `MAC` - China - Macao - * * `COL` - Colombia - * * `COM` - Comoros - * * `COG` - Congo - * * `COK` - Cook Islands - * * `CRI` - Costa Rica - * * `CIV` - Cote d'Ivoire - * * `HRV` - Croatia - * * `CUB` - Cuba - * * `CYP` - Cyprus - * * `CZE` - Czech Republic - * * `PRK` - Democratic People's Republic of Korea - * * `COD` - Democratic Republic of the Congo - * * `DNK` - Denmark - * * `DJI` - Djibouti - * * `DMA` - Dominica - * * `DOM` - Dominican Republic - * * `ECU` - Ecuador - * * `EGY` - Egypt - * * `SLV` - El Salvador - * * `GNQ` - Equatorial Guinea - * * `ERI` - Eritrea - * * `EST` - Estonia - * * `ETH` - Ethiopia - * * `FRO` - Faeroe Islands - * * `FLK` - Falkland Islands (Malvinas) - * * `FJI` - Fiji - * * `FIN` - Finland - * * `FRA` - France - * * `GUF` - French Guiana - * * `PYF` - French Polynesia - * * `GAB` - Gabon - * * `GMB` - Gambia - * * `GEO` - Georgia - * * `DEU` - Germany - * * `GHA` - Ghana - * * `GIB` - Gibraltar - * * `GRC` - Greece - * * `GRL` - Greenland - * * `GRD` - Grenada - * * `GLP` - Guadeloupe - * * `GUM` - Guam - * * `GTM` - Guatemala - * * `GGY` - Guernsey - * * `GIN` - Guinea - * * `GNB` - Guinea-Bissau - * * `GUY` - Guyana - * * `HTI` - Haiti - * * `VAT` - Holy See (Vatican City) - * * `HND` - Honduras - * * `HUN` - Hungary - * * `ISL` - Iceland - * * `IND` - India - * * `IDN` - Indonesia - * * `IRN` - Iran - * * `IRQ` - Iraq - * * `IRL` - Ireland - * * `IMN` - Isle of Man - * * `ISR` - Israel - * * `ITA` - Italy - * * `JAM` - Jamaica - * * `JPN` - Japan - * * `JEY` - Jersey - * * `JOR` - Jordan - * * `KAZ` - Kazakhstan - * * `KEN` - Kenya - * * `KIR` - Kiribati - * * `KWT` - Kuwait - * * `KGZ` - Kyrgyzstan - * * `LAO` - Lao People's Democratic Republic - * * `LVA` - Latvia - * * `LBN` - Lebanon - * * `LSO` - Lesotho - * * `LBR` - Liberia - * * `LBY` - Libyan Arab Jamahiriya - * * `LIE` - Liechtenstein - * * `LTU` - Lithuania - * * `LUX` - Luxembourg - * * `MKD` - Macedonia - * * `MDG` - Madagascar - * * `MWI` - Malawi - * * `MYS` - Malaysia - * * `MDV` - Maldives - * * `MLI` - Mali - * * `MLT` - Malta - * * `MHL` - Marshall Islands - * * `MTQ` - Martinique - * * `MRT` - Mauritania - * * `MUS` - Mauritius - * * `MYT` - Mayotte - * * `MEX` - Mexico - * * `FSM` - Micronesia, Federated States of - * * `MCO` - Monaco - * * `MNG` - Mongolia - * * `MNE` - Montenegro - * * `MSR` - Montserrat - * * `MAR` - Morocco - * * `MOZ` - Mozambique - * * `MMR` - Myanmar - * * `NAM` - Namibia - * * `NRU` - Nauru - * * `NPL` - Nepal - * * `NLD` - Netherlands - * * `ANT` - Netherlands Antilles - * * `NCL` - New Caledonia - * * `NZL` - New Zealand - * * `NIC` - Nicaragua - * * `NER` - Niger - * * `NGA` - Nigeria - * * `NIU` - Niue - * * `NFK` - Norfolk Island - * * `MNP` - Northern Mariana Islands - * * `NOR` - Norway - * * `PSE` - Occupied Palestinian Territory - * * `OMN` - Oman - * * `PAK` - Pakistan - * * `PLW` - Palau - * * `PAN` - Panama - * * `PNG` - Papua New Guinea - * * `PRY` - Paraguay - * * `PER` - Peru - * * `PHL` - Philippines - * * `PCN` - Pitcairn - * * `POL` - Poland - * * `PRT` - Portugal - * * `PRI` - Puerto Rico - * * `QAT` - Qatar - * * `KOR` - Republic of Korea - * * `MDA` - Republic of Moldova - * * `REU` - Reunion - * * `ROU` - Romania - * * `RUS` - Russian Federation - * * `RWA` - Rwanda - * * `BLM` - Saint-Barthelemy - * * `SHN` - Saint Helena - * * `KNA` - Saint Kitts and Nevis - * * `LCA` - Saint Lucia - * * `MAF` - Saint-Martin (French part) - * * `SPM` - Saint Pierre and Miquelon - * * `VCT` - Saint Vincent and the Grenadines - * * `WSM` - Samoa - * * `SMR` - San Marino - * * `STP` - Sao Tome and Principe - * * `SAU` - Saudi Arabia - * * `SEN` - Senegal - * * `SRB` - Serbia - * * `SYC` - Seychelles - * * `SLE` - Sierra Leone - * * `SGP` - Singapore - * * `SVK` - Slovakia - * * `SVN` - Slovenia - * * `SLB` - Solomon Islands - * * `SOM` - Somalia - * * `ZAF` - South Africa - * * `ESP` - Spain - * * `LKA` - Sri Lanka - * * `SDN` - Sudan - * * `SUR` - Suriname - * * `SJM` - Svalbard and Jan Mayen Islands - * * `SWZ` - Swaziland - * * `SWE` - Sweden - * * `CHE` - Switzerland - * * `SYR` - Syrian Arab Republic - * * `TJK` - Tajikistan - * * `THA` - Thailand - * * `TLS` - Timor-Leste - * * `TGO` - Togo - * * `TKL` - Tokelau - * * `TON` - Tonga - * * `TTO` - Trinidad and Tobago - * * `TUN` - Tunisia - * * `TUR` - Turkey - * * `TKM` - Turkmenistan - * * `TCA` - Turks and Caicos Islands - * * `TUV` - Tuvalu - * * `UGA` - Uganda - * * `UKR` - Ukraine - * * `ARE` - United Arab Emirates - * * `GBR` - United Kingdom - * * `TZA` - United Republic of Tanzania - * * `USA` - United States of America - * * `VIR` - United States Virgin Islands - * * `URY` - Uruguay - * * `UZB` - Uzbekistan - * * `VUT` - Vanuatu - * * `VEN` - Venezuela (Bolivarian Republic of) - * * `VNM` - Viet Nam - * * `WLF` - Wallis and Futuna Islands - * * `ESH` - Western Sahara - * * `YEM` - Yemen - * * `ZMB` - Zambia - * * `ZWE` - Zimbabwe - */ -export type CountryEnum = 'AFG' | 'ALA' | 'ALB' | 'DZA' | 'ASM' | 'AND' | 'AGO' | 'AIA' | 'ATG' | 'ARG' | 'ARM' | 'ABW' | 'AUS' | 'AUT' | 'AZE' | 'BHS' | 'BHR' | 'BGD' | 'BRB' | 'BLR' | 'BEL' | 'BLZ' | 'BEN' | 'BMU' | 'BTN' | 'BOL' | 'BIH' | 'BWA' | 'BRA' | 'VGB' | 'BRN' | 'BGR' | 'BFA' | 'BDI' | 'KHM' | 'CMR' | 'CAN' | 'CPV' | 'CYM' | 'CAF' | 'TCD' | 'CIL' | 'CHL' | 'CHN' | 'HKG' | 'MAC' | 'COL' | 'COM' | 'COG' | 'COK' | 'CRI' | 'CIV' | 'HRV' | 'CUB' | 'CYP' | 'CZE' | 'PRK' | 'COD' | 'DNK' | 'DJI' | 'DMA' | 'DOM' | 'ECU' | 'EGY' | 'SLV' | 'GNQ' | 'ERI' | 'EST' | 'ETH' | 'FRO' | 'FLK' | 'FJI' | 'FIN' | 'FRA' | 'GUF' | 'PYF' | 'GAB' | 'GMB' | 'GEO' | 'DEU' | 'GHA' | 'GIB' | 'GRC' | 'GRL' | 'GRD' | 'GLP' | 'GUM' | 'GTM' | 'GGY' | 'GIN' | 'GNB' | 'GUY' | 'HTI' | 'VAT' | 'HND' | 'HUN' | 'ISL' | 'IND' | 'IDN' | 'IRN' | 'IRQ' | 'IRL' | 'IMN' | 'ISR' | 'ITA' | 'JAM' | 'JPN' | 'JEY' | 'JOR' | 'KAZ' | 'KEN' | 'KIR' | 'KWT' | 'KGZ' | 'LAO' | 'LVA' | 'LBN' | 'LSO' | 'LBR' | 'LBY' | 'LIE' | 'LTU' | 'LUX' | 'MKD' | 'MDG' | 'MWI' | 'MYS' | 'MDV' | 'MLI' | 'MLT' | 'MHL' | 'MTQ' | 'MRT' | 'MUS' | 'MYT' | 'MEX' | 'FSM' | 'MCO' | 'MNG' | 'MNE' | 'MSR' | 'MAR' | 'MOZ' | 'MMR' | 'NAM' | 'NRU' | 'NPL' | 'NLD' | 'ANT' | 'NCL' | 'NZL' | 'NIC' | 'NER' | 'NGA' | 'NIU' | 'NFK' | 'MNP' | 'NOR' | 'PSE' | 'OMN' | 'PAK' | 'PLW' | 'PAN' | 'PNG' | 'PRY' | 'PER' | 'PHL' | 'PCN' | 'POL' | 'PRT' | 'PRI' | 'QAT' | 'KOR' | 'MDA' | 'REU' | 'ROU' | 'RUS' | 'RWA' | 'BLM' | 'SHN' | 'KNA' | 'LCA' | 'MAF' | 'SPM' | 'VCT' | 'WSM' | 'SMR' | 'STP' | 'SAU' | 'SEN' | 'SRB' | 'SYC' | 'SLE' | 'SGP' | 'SVK' | 'SVN' | 'SLB' | 'SOM' | 'ZAF' | 'ESP' | 'LKA' | 'SDN' | 'SUR' | 'SJM' | 'SWZ' | 'SWE' | 'CHE' | 'SYR' | 'TJK' | 'THA' | 'TLS' | 'TGO' | 'TKL' | 'TON' | 'TTO' | 'TUN' | 'TUR' | 'TKM' | 'TCA' | 'TUV' | 'UGA' | 'UKR' | 'ARE' | 'GBR' | 'TZA' | 'USA' | 'VIR' | 'URY' | 'UZB' | 'VUT' | 'VEN' | 'VNM' | 'WLF' | 'ESH' | 'YEM' | 'ZMB' | 'ZWE'; - -export type CurrentUser = { - readonly id: number; - /** - * Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters - */ - username: string; - /** - * Email address - */ - readonly email: string; - /** - * Full name, will be shown in some places instead of username - */ - display_name?: string; - /** - * Staff status - * Designates whether the user can log into this admin site. - */ - readonly is_staff: boolean; - /** - * Active - * Designates whether this user should be treated as active. Unselect this instead of deleting accounts. - */ - readonly is_active: boolean; - picture: Picture; -}; - -export type Device = { - readonly id: number; - name?: string; - /** - * Time the device was created. - */ - created_time?: string; -}; - -export type Drink = { - readonly id: number; - /** - * Flow sensor ticks, never changed once recorded. - */ - readonly ticks: number; - /** - * Calculated (or set) Drink volume. - */ - readonly volume_ml: number; - /** - * Date and time of pour. - */ - readonly time: string; - /** - * Time in seconds taken to pour this Drink. - */ - readonly duration: number; - user: User; - keg: Keg; - /** - * Session where this Drink is grouped. - */ - readonly session_id: number | null; - /** - * Comment from the drinker at the time of the pour. - */ - shout?: string | null; - picture: Picture; -}; - -export type DrinkReassignRequest = { - username: string; -}; - -export type DrinkingSession = { - readonly id: number; - start_time: string; - end_time: string; - volume_ml?: number; - timezone?: string; - name?: string | null; - readonly stats: unknown; -}; - -export type EmailChangeRequest = { - email: string; -}; - -export type EmailTestRequest = { - address: string; -}; - -export type FlowMeter = { - readonly id: number; - /** - * Controller that owns this meter. - */ - readonly controller_id: number; - /** - * Controller-specific data port name for this meter. - */ - port_name: string; - /** - * Tap to which this meter is currently bound. - */ - readonly tap_id: number | null; - /** - * Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), 5.4 (SF800) - */ - ticks_per_ml?: number; -}; - -export type FlowToggle = { - readonly id: number; - /** - * Controller that owns this toggle. - */ - readonly controller_id: number; - /** - * Controller-specific data port name for this toggle. - */ - port_name: string; - /** - * Tap to which this toggle is currently bound. - */ - readonly tap_id: number | null; -}; - -export type Invitation = { - readonly id: number; - /** - * Address this invitation was sent to. - */ - for_email: string; - /** - * Date invited - * Date and time the invitation was sent - */ - readonly invited_date: string; - /** - * Date expries - * Date and time after which the invitation is considered expired - */ - expires_date?: string; - readonly is_expired: boolean; -}; - -export type Keg = { - readonly id: number; - beverage: Beverage; - /** - * Keg container type, used to initialize keg's full volume - * - * * `mini` - Mini Keg (5 L) - * * `corny-2_5-gal` - Corny Keg (2.5 gal) - * * `corny-3-gal` - Corny Keg (3.0 gal) - * * `corny` - Corny Keg (5 gal) - * * `sixth` - Sixth Barrel (5.17 gal) - * * `euro-30-liter` - European DIN (30 L) - * * `euro-half` - European Half Barrel (50 L) - * * `quarter` - Quarter Barrel (7.75 gal) - * * `euro` - European Full Barrel (100 L) - * * `half-barrel` - Half Barrel (15.5 gal) - * * `other` - Other - */ - keg_type?: KegTypeEnum; - /** - * Computed served volume. - */ - readonly served_volume_ml: number; - /** - * Full volume of this Keg; usually set automatically from keg_type. - */ - full_volume_ml?: number; - /** - * Time the Keg was first tapped. - */ - readonly start_time: string; - /** - * Time the Keg was finished or disconnected. - */ - readonly end_time: string; - /** - * Current keg state. + * Country of origin * - * * `available` - Available - * * `on_tap` - On tap - * * `finished` - Finished - */ - status: KegStatusEnum; - /** - * User-visible description of the Keg. - */ - description?: string | null; - /** - * Amount of beverage poured without an associated Drink. - */ - readonly spilled_ml: number; - /** - * Private notes about this keg, viewable only by admins. - */ - notes?: string | null; - readonly illustration: string; - readonly illustration_thumbnail: string; - readonly stats: unknown; -}; - -/** - * Parameters for creating a keg. - * - * The beverage may be given as an existing `beverage_id`, or described by - * the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) - * tuple, which matches or creates one. - */ -export type KegCreateRequest = { + * * `AFG` - Afghanistan + * * `ALA` - Aland Islands + * * `ALB` - Albania + * * `DZA` - Algeria + * * `ASM` - American Samoa + * * `AND` - Andorra + * * `AGO` - Angola + * * `AIA` - Anguilla + * * `ATG` - Antigua and Barbuda + * * `ARG` - Argentina + * * `ARM` - Armenia + * * `ABW` - Aruba + * * `AUS` - Australia + * * `AUT` - Austria + * * `AZE` - Azerbaijan + * * `BHS` - Bahamas + * * `BHR` - Bahrain + * * `BGD` - Bangladesh + * * `BRB` - Barbados + * * `BLR` - Belarus + * * `BEL` - Belgium + * * `BLZ` - Belize + * * `BEN` - Benin + * * `BMU` - Bermuda + * * `BTN` - Bhutan + * * `BOL` - Bolivia + * * `BIH` - Bosnia and Herzegovina + * * `BWA` - Botswana + * * `BRA` - Brazil + * * `VGB` - British Virgin Islands + * * `BRN` - Brunei Darussalam + * * `BGR` - Bulgaria + * * `BFA` - Burkina Faso + * * `BDI` - Burundi + * * `KHM` - Cambodia + * * `CMR` - Cameroon + * * `CAN` - Canada + * * `CPV` - Cape Verde + * * `CYM` - Cayman Islands + * * `CAF` - Central African Republic + * * `TCD` - Chad + * * `CIL` - Channel Islands + * * `CHL` - Chile + * * `CHN` - China + * * `HKG` - China - Hong Kong + * * `MAC` - China - Macao + * * `COL` - Colombia + * * `COM` - Comoros + * * `COG` - Congo + * * `COK` - Cook Islands + * * `CRI` - Costa Rica + * * `CIV` - Cote d'Ivoire + * * `HRV` - Croatia + * * `CUB` - Cuba + * * `CYP` - Cyprus + * * `CZE` - Czech Republic + * * `PRK` - Democratic People's Republic of Korea + * * `COD` - Democratic Republic of the Congo + * * `DNK` - Denmark + * * `DJI` - Djibouti + * * `DMA` - Dominica + * * `DOM` - Dominican Republic + * * `ECU` - Ecuador + * * `EGY` - Egypt + * * `SLV` - El Salvador + * * `GNQ` - Equatorial Guinea + * * `ERI` - Eritrea + * * `EST` - Estonia + * * `ETH` - Ethiopia + * * `FRO` - Faeroe Islands + * * `FLK` - Falkland Islands (Malvinas) + * * `FJI` - Fiji + * * `FIN` - Finland + * * `FRA` - France + * * `GUF` - French Guiana + * * `PYF` - French Polynesia + * * `GAB` - Gabon + * * `GMB` - Gambia + * * `GEO` - Georgia + * * `DEU` - Germany + * * `GHA` - Ghana + * * `GIB` - Gibraltar + * * `GRC` - Greece + * * `GRL` - Greenland + * * `GRD` - Grenada + * * `GLP` - Guadeloupe + * * `GUM` - Guam + * * `GTM` - Guatemala + * * `GGY` - Guernsey + * * `GIN` - Guinea + * * `GNB` - Guinea-Bissau + * * `GUY` - Guyana + * * `HTI` - Haiti + * * `VAT` - Holy See (Vatican City) + * * `HND` - Honduras + * * `HUN` - Hungary + * * `ISL` - Iceland + * * `IND` - India + * * `IDN` - Indonesia + * * `IRN` - Iran + * * `IRQ` - Iraq + * * `IRL` - Ireland + * * `IMN` - Isle of Man + * * `ISR` - Israel + * * `ITA` - Italy + * * `JAM` - Jamaica + * * `JPN` - Japan + * * `JEY` - Jersey + * * `JOR` - Jordan + * * `KAZ` - Kazakhstan + * * `KEN` - Kenya + * * `KIR` - Kiribati + * * `KWT` - Kuwait + * * `KGZ` - Kyrgyzstan + * * `LAO` - Lao People's Democratic Republic + * * `LVA` - Latvia + * * `LBN` - Lebanon + * * `LSO` - Lesotho + * * `LBR` - Liberia + * * `LBY` - Libyan Arab Jamahiriya + * * `LIE` - Liechtenstein + * * `LTU` - Lithuania + * * `LUX` - Luxembourg + * * `MKD` - Macedonia + * * `MDG` - Madagascar + * * `MWI` - Malawi + * * `MYS` - Malaysia + * * `MDV` - Maldives + * * `MLI` - Mali + * * `MLT` - Malta + * * `MHL` - Marshall Islands + * * `MTQ` - Martinique + * * `MRT` - Mauritania + * * `MUS` - Mauritius + * * `MYT` - Mayotte + * * `MEX` - Mexico + * * `FSM` - Micronesia, Federated States of + * * `MCO` - Monaco + * * `MNG` - Mongolia + * * `MNE` - Montenegro + * * `MSR` - Montserrat + * * `MAR` - Morocco + * * `MOZ` - Mozambique + * * `MMR` - Myanmar + * * `NAM` - Namibia + * * `NRU` - Nauru + * * `NPL` - Nepal + * * `NLD` - Netherlands + * * `ANT` - Netherlands Antilles + * * `NCL` - New Caledonia + * * `NZL` - New Zealand + * * `NIC` - Nicaragua + * * `NER` - Niger + * * `NGA` - Nigeria + * * `NIU` - Niue + * * `NFK` - Norfolk Island + * * `MNP` - Northern Mariana Islands + * * `NOR` - Norway + * * `PSE` - Occupied Palestinian Territory + * * `OMN` - Oman + * * `PAK` - Pakistan + * * `PLW` - Palau + * * `PAN` - Panama + * * `PNG` - Papua New Guinea + * * `PRY` - Paraguay + * * `PER` - Peru + * * `PHL` - Philippines + * * `PCN` - Pitcairn + * * `POL` - Poland + * * `PRT` - Portugal + * * `PRI` - Puerto Rico + * * `QAT` - Qatar + * * `KOR` - Republic of Korea + * * `MDA` - Republic of Moldova + * * `REU` - Reunion + * * `ROU` - Romania + * * `RUS` - Russian Federation + * * `RWA` - Rwanda + * * `BLM` - Saint-Barthelemy + * * `SHN` - Saint Helena + * * `KNA` - Saint Kitts and Nevis + * * `LCA` - Saint Lucia + * * `MAF` - Saint-Martin (French part) + * * `SPM` - Saint Pierre and Miquelon + * * `VCT` - Saint Vincent and the Grenadines + * * `WSM` - Samoa + * * `SMR` - San Marino + * * `STP` - Sao Tome and Principe + * * `SAU` - Saudi Arabia + * * `SEN` - Senegal + * * `SRB` - Serbia + * * `SYC` - Seychelles + * * `SLE` - Sierra Leone + * * `SGP` - Singapore + * * `SVK` - Slovakia + * * `SVN` - Slovenia + * * `SLB` - Solomon Islands + * * `SOM` - Somalia + * * `ZAF` - South Africa + * * `ESP` - Spain + * * `LKA` - Sri Lanka + * * `SDN` - Sudan + * * `SUR` - Suriname + * * `SJM` - Svalbard and Jan Mayen Islands + * * `SWZ` - Swaziland + * * `SWE` - Sweden + * * `CHE` - Switzerland + * * `SYR` - Syrian Arab Republic + * * `TJK` - Tajikistan + * * `THA` - Thailand + * * `TLS` - Timor-Leste + * * `TGO` - Togo + * * `TKL` - Tokelau + * * `TON` - Tonga + * * `TTO` - Trinidad and Tobago + * * `TUN` - Tunisia + * * `TUR` - Turkey + * * `TKM` - Turkmenistan + * * `TCA` - Turks and Caicos Islands + * * `TUV` - Tuvalu + * * `UGA` - Uganda + * * `UKR` - Ukraine + * * `ARE` - United Arab Emirates + * * `GBR` - United Kingdom + * * `TZA` - United Republic of Tanzania + * * `USA` - United States of America + * * `VIR` - United States Virgin Islands + * * `URY` - Uruguay + * * `UZB` - Uzbekistan + * * `VUT` - Vanuatu + * * `VEN` - Venezuela (Bolivarian Republic of) + * * `VNM` - Viet Nam + * * `WLF` - Wallis and Futuna Islands + * * `ESH` - Western Sahara + * * `YEM` - Yemen + * * `ZMB` - Zambia + * * `ZWE` - Zimbabwe + */ + country?: CountryEnum; + /** + * State of origin, if applicable + */ + origin_state?: string | null; + /** + * City of origin, if known + */ + origin_city?: string | null; + is_homebrew?: boolean; + /** + * Brewer's home page + */ + url?: string | null; + /** + * A short description of the brewer + */ + description?: string | null; +}; + +export type BeverageRequest = { + /** + * Name of the beverage, such as "Potrero Pale". + */ + name: string; + producer_id: number; + beverage_type?: BeverageTypeEnum; + /** + * Beverage style within type, eg "Pale Ale", "Pinot Noir". + */ + style?: string | null; + /** + * Free-form description of the beverage. + */ + description?: string | null; + /** + * Date of production, for wines or special/seasonal editions + */ + vintage_year?: string | null; + /** + * ABV Percentage + * Alcohol by volume, as percentage (0.0-100.0). + */ + abv_percent?: number | null; + /** + * Calories per mL of beverage. + */ + calories_per_ml?: number | null; + /** + * Carbohydrates per mL of beverage. + */ + carbs_per_ml?: number | null; + /** + * Color (Hex Value) + * Approximate beverage color + */ + color_hex?: string; + /** + * Original gravity (beer only). + */ + original_gravity?: number | null; + /** + * Final gravity (beer only). + */ + specific_gravity?: number | null; + /** + * SRM Value + * Standard Reference Method value (beer only). + */ + srm?: number | null; + /** + * IBUs + * International Bittering Units value (beer only). + */ + ibu?: number | null; + /** + * Star rating for beverage (0: worst, 5: best) + */ + star_rating?: number | null; + /** + * Untappd.com resource ID (beer only). + */ + untappd_beer_id?: number | null; +}; + +/** + * * `beer` - Beer + * * `wine` - Wine + * * `soda` - Soda + * * `kombucha` - Kombucha + * * `other` - Other/Unknown + */ +export type BeverageTypeEnum = 'beer' | 'wine' | 'soda' | 'kombucha' | 'other'; + +export type ConfirmEmailRequestRequest = { + token: string; +}; + +export type Controller = { + readonly id: number; + /** + * Identifying name for this device; must be unique. + */ + name: string; + /** + * Type of controller (optional). + */ + model_name?: string | null; + /** + * Serial number (optional). + */ + serial_number?: string | null; +}; + +export type ControllerRequest = { + /** + * Identifying name for this device; must be unique. + */ + name: string; + /** + * Type of controller (optional). + */ + model_name?: string | null; + /** + * Serial number (optional). + */ + serial_number?: string | null; +}; + +/** + * * `AFG` - Afghanistan + * * `ALA` - Aland Islands + * * `ALB` - Albania + * * `DZA` - Algeria + * * `ASM` - American Samoa + * * `AND` - Andorra + * * `AGO` - Angola + * * `AIA` - Anguilla + * * `ATG` - Antigua and Barbuda + * * `ARG` - Argentina + * * `ARM` - Armenia + * * `ABW` - Aruba + * * `AUS` - Australia + * * `AUT` - Austria + * * `AZE` - Azerbaijan + * * `BHS` - Bahamas + * * `BHR` - Bahrain + * * `BGD` - Bangladesh + * * `BRB` - Barbados + * * `BLR` - Belarus + * * `BEL` - Belgium + * * `BLZ` - Belize + * * `BEN` - Benin + * * `BMU` - Bermuda + * * `BTN` - Bhutan + * * `BOL` - Bolivia + * * `BIH` - Bosnia and Herzegovina + * * `BWA` - Botswana + * * `BRA` - Brazil + * * `VGB` - British Virgin Islands + * * `BRN` - Brunei Darussalam + * * `BGR` - Bulgaria + * * `BFA` - Burkina Faso + * * `BDI` - Burundi + * * `KHM` - Cambodia + * * `CMR` - Cameroon + * * `CAN` - Canada + * * `CPV` - Cape Verde + * * `CYM` - Cayman Islands + * * `CAF` - Central African Republic + * * `TCD` - Chad + * * `CIL` - Channel Islands + * * `CHL` - Chile + * * `CHN` - China + * * `HKG` - China - Hong Kong + * * `MAC` - China - Macao + * * `COL` - Colombia + * * `COM` - Comoros + * * `COG` - Congo + * * `COK` - Cook Islands + * * `CRI` - Costa Rica + * * `CIV` - Cote d'Ivoire + * * `HRV` - Croatia + * * `CUB` - Cuba + * * `CYP` - Cyprus + * * `CZE` - Czech Republic + * * `PRK` - Democratic People's Republic of Korea + * * `COD` - Democratic Republic of the Congo + * * `DNK` - Denmark + * * `DJI` - Djibouti + * * `DMA` - Dominica + * * `DOM` - Dominican Republic + * * `ECU` - Ecuador + * * `EGY` - Egypt + * * `SLV` - El Salvador + * * `GNQ` - Equatorial Guinea + * * `ERI` - Eritrea + * * `EST` - Estonia + * * `ETH` - Ethiopia + * * `FRO` - Faeroe Islands + * * `FLK` - Falkland Islands (Malvinas) + * * `FJI` - Fiji + * * `FIN` - Finland + * * `FRA` - France + * * `GUF` - French Guiana + * * `PYF` - French Polynesia + * * `GAB` - Gabon + * * `GMB` - Gambia + * * `GEO` - Georgia + * * `DEU` - Germany + * * `GHA` - Ghana + * * `GIB` - Gibraltar + * * `GRC` - Greece + * * `GRL` - Greenland + * * `GRD` - Grenada + * * `GLP` - Guadeloupe + * * `GUM` - Guam + * * `GTM` - Guatemala + * * `GGY` - Guernsey + * * `GIN` - Guinea + * * `GNB` - Guinea-Bissau + * * `GUY` - Guyana + * * `HTI` - Haiti + * * `VAT` - Holy See (Vatican City) + * * `HND` - Honduras + * * `HUN` - Hungary + * * `ISL` - Iceland + * * `IND` - India + * * `IDN` - Indonesia + * * `IRN` - Iran + * * `IRQ` - Iraq + * * `IRL` - Ireland + * * `IMN` - Isle of Man + * * `ISR` - Israel + * * `ITA` - Italy + * * `JAM` - Jamaica + * * `JPN` - Japan + * * `JEY` - Jersey + * * `JOR` - Jordan + * * `KAZ` - Kazakhstan + * * `KEN` - Kenya + * * `KIR` - Kiribati + * * `KWT` - Kuwait + * * `KGZ` - Kyrgyzstan + * * `LAO` - Lao People's Democratic Republic + * * `LVA` - Latvia + * * `LBN` - Lebanon + * * `LSO` - Lesotho + * * `LBR` - Liberia + * * `LBY` - Libyan Arab Jamahiriya + * * `LIE` - Liechtenstein + * * `LTU` - Lithuania + * * `LUX` - Luxembourg + * * `MKD` - Macedonia + * * `MDG` - Madagascar + * * `MWI` - Malawi + * * `MYS` - Malaysia + * * `MDV` - Maldives + * * `MLI` - Mali + * * `MLT` - Malta + * * `MHL` - Marshall Islands + * * `MTQ` - Martinique + * * `MRT` - Mauritania + * * `MUS` - Mauritius + * * `MYT` - Mayotte + * * `MEX` - Mexico + * * `FSM` - Micronesia, Federated States of + * * `MCO` - Monaco + * * `MNG` - Mongolia + * * `MNE` - Montenegro + * * `MSR` - Montserrat + * * `MAR` - Morocco + * * `MOZ` - Mozambique + * * `MMR` - Myanmar + * * `NAM` - Namibia + * * `NRU` - Nauru + * * `NPL` - Nepal + * * `NLD` - Netherlands + * * `ANT` - Netherlands Antilles + * * `NCL` - New Caledonia + * * `NZL` - New Zealand + * * `NIC` - Nicaragua + * * `NER` - Niger + * * `NGA` - Nigeria + * * `NIU` - Niue + * * `NFK` - Norfolk Island + * * `MNP` - Northern Mariana Islands + * * `NOR` - Norway + * * `PSE` - Occupied Palestinian Territory + * * `OMN` - Oman + * * `PAK` - Pakistan + * * `PLW` - Palau + * * `PAN` - Panama + * * `PNG` - Papua New Guinea + * * `PRY` - Paraguay + * * `PER` - Peru + * * `PHL` - Philippines + * * `PCN` - Pitcairn + * * `POL` - Poland + * * `PRT` - Portugal + * * `PRI` - Puerto Rico + * * `QAT` - Qatar + * * `KOR` - Republic of Korea + * * `MDA` - Republic of Moldova + * * `REU` - Reunion + * * `ROU` - Romania + * * `RUS` - Russian Federation + * * `RWA` - Rwanda + * * `BLM` - Saint-Barthelemy + * * `SHN` - Saint Helena + * * `KNA` - Saint Kitts and Nevis + * * `LCA` - Saint Lucia + * * `MAF` - Saint-Martin (French part) + * * `SPM` - Saint Pierre and Miquelon + * * `VCT` - Saint Vincent and the Grenadines + * * `WSM` - Samoa + * * `SMR` - San Marino + * * `STP` - Sao Tome and Principe + * * `SAU` - Saudi Arabia + * * `SEN` - Senegal + * * `SRB` - Serbia + * * `SYC` - Seychelles + * * `SLE` - Sierra Leone + * * `SGP` - Singapore + * * `SVK` - Slovakia + * * `SVN` - Slovenia + * * `SLB` - Solomon Islands + * * `SOM` - Somalia + * * `ZAF` - South Africa + * * `ESP` - Spain + * * `LKA` - Sri Lanka + * * `SDN` - Sudan + * * `SUR` - Suriname + * * `SJM` - Svalbard and Jan Mayen Islands + * * `SWZ` - Swaziland + * * `SWE` - Sweden + * * `CHE` - Switzerland + * * `SYR` - Syrian Arab Republic + * * `TJK` - Tajikistan + * * `THA` - Thailand + * * `TLS` - Timor-Leste + * * `TGO` - Togo + * * `TKL` - Tokelau + * * `TON` - Tonga + * * `TTO` - Trinidad and Tobago + * * `TUN` - Tunisia + * * `TUR` - Turkey + * * `TKM` - Turkmenistan + * * `TCA` - Turks and Caicos Islands + * * `TUV` - Tuvalu + * * `UGA` - Uganda + * * `UKR` - Ukraine + * * `ARE` - United Arab Emirates + * * `GBR` - United Kingdom + * * `TZA` - United Republic of Tanzania + * * `USA` - United States of America + * * `VIR` - United States Virgin Islands + * * `URY` - Uruguay + * * `UZB` - Uzbekistan + * * `VUT` - Vanuatu + * * `VEN` - Venezuela (Bolivarian Republic of) + * * `VNM` - Viet Nam + * * `WLF` - Wallis and Futuna Islands + * * `ESH` - Western Sahara + * * `YEM` - Yemen + * * `ZMB` - Zambia + * * `ZWE` - Zimbabwe + */ +export type CountryEnum = 'AFG' | 'ALA' | 'ALB' | 'DZA' | 'ASM' | 'AND' | 'AGO' | 'AIA' | 'ATG' | 'ARG' | 'ARM' | 'ABW' | 'AUS' | 'AUT' | 'AZE' | 'BHS' | 'BHR' | 'BGD' | 'BRB' | 'BLR' | 'BEL' | 'BLZ' | 'BEN' | 'BMU' | 'BTN' | 'BOL' | 'BIH' | 'BWA' | 'BRA' | 'VGB' | 'BRN' | 'BGR' | 'BFA' | 'BDI' | 'KHM' | 'CMR' | 'CAN' | 'CPV' | 'CYM' | 'CAF' | 'TCD' | 'CIL' | 'CHL' | 'CHN' | 'HKG' | 'MAC' | 'COL' | 'COM' | 'COG' | 'COK' | 'CRI' | 'CIV' | 'HRV' | 'CUB' | 'CYP' | 'CZE' | 'PRK' | 'COD' | 'DNK' | 'DJI' | 'DMA' | 'DOM' | 'ECU' | 'EGY' | 'SLV' | 'GNQ' | 'ERI' | 'EST' | 'ETH' | 'FRO' | 'FLK' | 'FJI' | 'FIN' | 'FRA' | 'GUF' | 'PYF' | 'GAB' | 'GMB' | 'GEO' | 'DEU' | 'GHA' | 'GIB' | 'GRC' | 'GRL' | 'GRD' | 'GLP' | 'GUM' | 'GTM' | 'GGY' | 'GIN' | 'GNB' | 'GUY' | 'HTI' | 'VAT' | 'HND' | 'HUN' | 'ISL' | 'IND' | 'IDN' | 'IRN' | 'IRQ' | 'IRL' | 'IMN' | 'ISR' | 'ITA' | 'JAM' | 'JPN' | 'JEY' | 'JOR' | 'KAZ' | 'KEN' | 'KIR' | 'KWT' | 'KGZ' | 'LAO' | 'LVA' | 'LBN' | 'LSO' | 'LBR' | 'LBY' | 'LIE' | 'LTU' | 'LUX' | 'MKD' | 'MDG' | 'MWI' | 'MYS' | 'MDV' | 'MLI' | 'MLT' | 'MHL' | 'MTQ' | 'MRT' | 'MUS' | 'MYT' | 'MEX' | 'FSM' | 'MCO' | 'MNG' | 'MNE' | 'MSR' | 'MAR' | 'MOZ' | 'MMR' | 'NAM' | 'NRU' | 'NPL' | 'NLD' | 'ANT' | 'NCL' | 'NZL' | 'NIC' | 'NER' | 'NGA' | 'NIU' | 'NFK' | 'MNP' | 'NOR' | 'PSE' | 'OMN' | 'PAK' | 'PLW' | 'PAN' | 'PNG' | 'PRY' | 'PER' | 'PHL' | 'PCN' | 'POL' | 'PRT' | 'PRI' | 'QAT' | 'KOR' | 'MDA' | 'REU' | 'ROU' | 'RUS' | 'RWA' | 'BLM' | 'SHN' | 'KNA' | 'LCA' | 'MAF' | 'SPM' | 'VCT' | 'WSM' | 'SMR' | 'STP' | 'SAU' | 'SEN' | 'SRB' | 'SYC' | 'SLE' | 'SGP' | 'SVK' | 'SVN' | 'SLB' | 'SOM' | 'ZAF' | 'ESP' | 'LKA' | 'SDN' | 'SUR' | 'SJM' | 'SWZ' | 'SWE' | 'CHE' | 'SYR' | 'TJK' | 'THA' | 'TLS' | 'TGO' | 'TKL' | 'TON' | 'TTO' | 'TUN' | 'TUR' | 'TKM' | 'TCA' | 'TUV' | 'UGA' | 'UKR' | 'ARE' | 'GBR' | 'TZA' | 'USA' | 'VIR' | 'URY' | 'UZB' | 'VUT' | 'VEN' | 'VNM' | 'WLF' | 'ESH' | 'YEM' | 'ZMB' | 'ZWE'; + +export type CurrentUser = { + readonly id: number; + /** + * Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters + */ + username: string; + /** + * Email address + */ + readonly email: string; + /** + * Full name, will be shown in some places instead of username + */ + display_name?: string; + /** + * Staff status + * Designates whether the user can log into this admin site. + */ + readonly is_staff: boolean; + /** + * Active + * Designates whether this user should be treated as active. Unselect this instead of deleting accounts. + */ + readonly is_active: boolean; + picture: Picture; +}; + +export type Device = { + readonly id: number; + name?: string; + /** + * Time the device was created. + */ + created_time?: string; +}; + +export type DeviceRequest = { + name?: string; + /** + * Time the device was created. + */ + created_time?: string; +}; + +export type Drink = { + readonly id: number; + /** + * Flow sensor ticks, never changed once recorded. + */ + readonly ticks: number; + /** + * Calculated (or set) Drink volume. + */ + readonly volume_ml: number; + /** + * Date and time of pour. + */ + readonly time: string; + /** + * Time in seconds taken to pour this Drink. + */ + readonly duration: number; + user: User; + keg: Keg; + /** + * Session where this Drink is grouped. + */ + readonly session_id: number | null; + /** + * Comment from the drinker at the time of the pour. + */ + shout?: string | null; + picture: Picture; +}; + +export type DrinkReassignRequestRequest = { + username: string; +}; + +export type DrinkingSession = { + readonly id: number; + start_time: string; + end_time: string; + volume_ml?: number; + timezone?: string; + name?: string | null; + readonly stats: unknown; +}; + +export type EmailChangeRequestRequest = { + email: string; +}; + +export type EmailTestRequestRequest = { + address: string; +}; + +export type FlowMeter = { + readonly id: number; + /** + * Controller that owns this meter. + */ + readonly controller_id: number; + /** + * Controller-specific data port name for this meter. + */ + port_name: string; + /** + * Tap to which this meter is currently bound. + */ + readonly tap_id: number | null; + /** + * Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), 5.4 (SF800) + */ + ticks_per_ml?: number; +}; + +export type FlowMeterRequest = { + /** + * Controller-specific data port name for this meter. + */ + port_name: string; + /** + * Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), 5.4 (SF800) + */ + ticks_per_ml?: number; +}; + +export type FlowToggle = { + readonly id: number; + /** + * Controller that owns this toggle. + */ + readonly controller_id: number; + /** + * Controller-specific data port name for this toggle. + */ + port_name: string; + /** + * Tap to which this toggle is currently bound. + */ + readonly tap_id: number | null; +}; + +export type FlowToggleRequest = { + /** + * Controller-specific data port name for this toggle. + */ + port_name: string; +}; + +export type Invitation = { + readonly id: number; + /** + * Address this invitation was sent to. + */ + for_email: string; + /** + * Date invited + * Date and time the invitation was sent + */ + readonly invited_date: string; + /** + * Date expries + * Date and time after which the invitation is considered expired + */ + expires_date?: string; + readonly is_expired: boolean; +}; + +export type InvitationRequest = { + /** + * Address this invitation was sent to. + */ + for_email: string; + /** + * Date expries + * Date and time after which the invitation is considered expired + */ + expires_date?: string; +}; + +export type Keg = { + readonly id: number; + beverage: Beverage; + /** + * Keg container type, used to initialize keg's full volume + * + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ + keg_type?: KegTypeEnum; + /** + * Computed served volume. + */ + readonly served_volume_ml: number; + /** + * Full volume of this Keg; usually set automatically from keg_type. + */ + full_volume_ml?: number; + /** + * Time the Keg was first tapped. + */ + readonly start_time: string; + /** + * Time the Keg was finished or disconnected. + */ + readonly end_time: string; + /** + * Current keg state. + * + * * `available` - Available + * * `on_tap` - On tap + * * `finished` - Finished + */ + status: KegStatusEnum; + /** + * User-visible description of the Keg. + */ + description?: string | null; + /** + * Amount of beverage poured without an associated Drink. + */ + readonly spilled_ml: number; + /** + * Private notes about this keg, viewable only by admins. + */ + notes?: string | null; + readonly illustration: string; + readonly illustration_thumbnail: string; + readonly stats: unknown; +}; + +/** + * Parameters for creating a keg. + * + * The beverage may be given as an existing `beverage_id`, or described by + * the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) + * tuple, which matches or creates one. + */ +export type KegCreateRequestRequest = { beverage_id?: number | null; beverage_name?: string; beverage_type?: BeverageTypeEnum; @@ -905,7 +1329,38 @@ export type KegCreateRequest = { notes?: string; }; -export type KegSpillRequest = { +export type KegRequest = { + /** + * Keg container type, used to initialize keg's full volume + * + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ + keg_type?: KegTypeEnum; + /** + * Full volume of this Keg; usually set automatically from keg_type. + */ + full_volume_ml?: number; + /** + * User-visible description of the Keg. + */ + description?: string | null; + /** + * Private notes about this keg, viewable only by admins. + */ + notes?: string | null; +}; + +export type KegSpillRequestRequest = { volume_ml: number; }; @@ -935,6 +1390,21 @@ export type KegTap = { current_keg: Keg; }; +export type KegTapRequest = { + /** + * The display name for this tap, for example, "Main Tap". + */ + name: string; + /** + * Private notes about this tap. + */ + notes?: string | null; + /** + * Position relative to other taps when sorting (0=first). + */ + sort_order?: number; +}; + /** * * `mini` - Mini Keg (5 L) * * `corny-2_5-gal` - Corny Keg (2.5 gal) @@ -1535,7 +2005,7 @@ export type KegbotSite = { readonly stats: unknown; }; -export type Login = { +export type LoginRequest = { username: string; password: string; }; @@ -1565,7 +2035,7 @@ export type Me = { * the (`beverage_name`, `producer_name`, `style_name`, `beverage_type`) * tuple, which matches or creates one. */ -export type NewKegRequest = { +export type NewKegRequestRequest = { beverage_id?: number | null; beverage_name?: string; beverage_type?: BeverageTypeEnum; @@ -1578,9 +2048,32 @@ export type NewKegRequest = { export type NotificationSettings = { readonly id: number; /** - * User for these settings. + * User for these settings. + */ + readonly user_id: number; + /** + * Notification backend (dotted path) for these settings. + */ + backend: string; + /** + * Sent when a keg is activated. + */ + keg_tapped?: boolean; + /** + * Sent when a new drinking session starts. */ - readonly user_id: number; + session_started?: boolean; + /** + * Sent when a keg becomes low. + */ + keg_volume_low?: boolean; + /** + * Sent when a keg has been taken offline. + */ + keg_ended?: boolean; +}; + +export type NotificationSettingsRequest = { /** * Notification backend (dotted path) for these settings. */ @@ -1723,40 +2216,30 @@ export type PaginatedUserList = { results: Array; }; -export type PasswordChangeRequest = { +export type PasswordChangeRequestRequest = { current_password: string; new_password: string; }; -export type PasswordResetConfirmRequest = { +export type PasswordResetConfirmRequestRequest = { uid: string; token: string; new_password: string; }; -export type PasswordResetRequest = { +export type PasswordResetRequestRequest = { email: string; }; -export type PatchedAdminUserUpdateRequest = { +export type PatchedAdminUserUpdateRequestRequest = { email?: string; display_name?: string; is_staff?: boolean; is_active?: boolean; }; -export type PatchedApiKey = { - readonly id?: number; - /** - * User receiving API access. - */ - readonly user_id?: number | null; - /** - * Device this key is associated with. - */ - readonly device_id?: number | null; +export type PatchedApiKeyRequest = { is_active?: boolean; - readonly key?: string; /** * Information about this key. */ @@ -1767,8 +2250,7 @@ export type PatchedApiKey = { created_time?: string; }; -export type PatchedAuthenticationToken = { - readonly id?: number; +export type PatchedAuthenticationTokenRequest = { /** * Namespace for this token. */ @@ -1785,93 +2267,18 @@ export type PatchedAuthenticationToken = { * A secret value necessary to authenticate with this token. */ pin?: string | null; - /** - * User in possession of and authenticated by this token. - */ - readonly user_id?: number | null; + user?: number | null; /** * Whether this token is considered active. */ enabled?: boolean; - /** - * Date token was first added to the system. - */ - readonly created_time?: string; /** * Date after which token is treated as disabled. */ expire_time?: string | null; }; -export type PatchedBeverage = { - readonly id?: number; - /** - * Name of the beverage, such as "Potrero Pale". - */ - name?: string; - producer?: BeverageProducer; - beverage_type?: BeverageTypeEnum; - /** - * Beverage style within type, eg "Pale Ale", "Pinot Noir". - */ - style?: string | null; - /** - * Free-form description of the beverage. - */ - description?: string | null; - picture?: Picture; - /** - * Date of production, for wines or special/seasonal editions - */ - vintage_year?: string | null; - /** - * ABV Percentage - * Alcohol by volume, as percentage (0.0-100.0). - */ - abv_percent?: number | null; - /** - * Calories per mL of beverage. - */ - calories_per_ml?: number | null; - /** - * Carbohydrates per mL of beverage. - */ - carbs_per_ml?: number | null; - /** - * Color (Hex Value) - * Approximate beverage color - */ - color_hex?: string; - /** - * Original gravity (beer only). - */ - original_gravity?: number | null; - /** - * Final gravity (beer only). - */ - specific_gravity?: number | null; - /** - * SRM Value - * Standard Reference Method value (beer only). - */ - srm?: number | null; - /** - * IBUs - * International Bittering Units value (beer only). - */ - ibu?: number | null; - /** - * Star rating for beverage (0: worst, 5: best) - */ - star_rating?: number | null; - /** - * Untappd.com resource ID (beer only). - */ - untappd_beer_id?: number | null; -}; - -export type PatchedBeverageProducer = { - readonly id?: number; +export type PatchedBeverageProducerRequest = { /** * Name of the brewer */ @@ -2117,223 +2524,896 @@ export type PatchedBeverageProducer = { * * `ZMB` - Zambia * * `ZWE` - Zimbabwe */ - country?: CountryEnum; + country?: CountryEnum; + /** + * State of origin, if applicable + */ + origin_state?: string | null; + /** + * City of origin, if known + */ + origin_city?: string | null; + is_homebrew?: boolean; + /** + * Brewer's home page + */ + url?: string | null; + /** + * A short description of the brewer + */ + description?: string | null; +}; + +export type PatchedBeverageRequest = { + /** + * Name of the beverage, such as "Potrero Pale". + */ + name?: string; + producer_id?: number; + beverage_type?: BeverageTypeEnum; + /** + * Beverage style within type, eg "Pale Ale", "Pinot Noir". + */ + style?: string | null; + /** + * Free-form description of the beverage. + */ + description?: string | null; + /** + * Date of production, for wines or special/seasonal editions + */ + vintage_year?: string | null; + /** + * ABV Percentage + * Alcohol by volume, as percentage (0.0-100.0). + */ + abv_percent?: number | null; + /** + * Calories per mL of beverage. + */ + calories_per_ml?: number | null; + /** + * Carbohydrates per mL of beverage. + */ + carbs_per_ml?: number | null; + /** + * Color (Hex Value) + * Approximate beverage color + */ + color_hex?: string; + /** + * Original gravity (beer only). + */ + original_gravity?: number | null; + /** + * Final gravity (beer only). + */ + specific_gravity?: number | null; + /** + * SRM Value + * Standard Reference Method value (beer only). + */ + srm?: number | null; + /** + * IBUs + * International Bittering Units value (beer only). + */ + ibu?: number | null; + /** + * Star rating for beverage (0: worst, 5: best) + */ + star_rating?: number | null; + /** + * Untappd.com resource ID (beer only). + */ + untappd_beer_id?: number | null; +}; + +export type PatchedControllerRequest = { + /** + * Identifying name for this device; must be unique. + */ + name?: string; + /** + * Type of controller (optional). + */ + model_name?: string | null; + /** + * Serial number (optional). + */ + serial_number?: string | null; +}; + +export type PatchedDeviceRequest = { + name?: string; + /** + * Time the device was created. + */ + created_time?: string; +}; + +export type PatchedDrinkUpdateRequestRequest = { + shout?: string; + volume_ml?: number; +}; + +export type PatchedFlowMeterRequest = { + /** + * Controller-specific data port name for this meter. + */ + port_name?: string; + /** + * Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), 5.4 (SF800) + */ + ticks_per_ml?: number; +}; + +export type PatchedFlowToggleRequest = { + /** + * Controller-specific data port name for this toggle. + */ + port_name?: string; +}; + +export type PatchedKegRequest = { + /** + * Keg container type, used to initialize keg's full volume + * + * * `mini` - Mini Keg (5 L) + * * `corny-2_5-gal` - Corny Keg (2.5 gal) + * * `corny-3-gal` - Corny Keg (3.0 gal) + * * `corny` - Corny Keg (5 gal) + * * `sixth` - Sixth Barrel (5.17 gal) + * * `euro-30-liter` - European DIN (30 L) + * * `euro-half` - European Half Barrel (50 L) + * * `quarter` - Quarter Barrel (7.75 gal) + * * `euro` - European Full Barrel (100 L) + * * `half-barrel` - Half Barrel (15.5 gal) + * * `other` - Other + */ + keg_type?: KegTypeEnum; + /** + * Full volume of this Keg; usually set automatically from keg_type. + */ + full_volume_ml?: number; + /** + * User-visible description of the Keg. + */ + description?: string | null; + /** + * Private notes about this keg, viewable only by admins. + */ + notes?: string | null; +}; + +export type PatchedKegTapRequest = { + /** + * The display name for this tap, for example, "Main Tap". + */ + name?: string; + /** + * Private notes about this tap. + */ + notes?: string | null; + /** + * Position relative to other taps when sorting (0=first). + */ + sort_order?: number; +}; + +export type PatchedNotificationSettingsRequest = { /** - * State of origin, if applicable + * Notification backend (dotted path) for these settings. + */ + backend?: string; + /** + * Sent when a keg is activated. + */ + keg_tapped?: boolean; + /** + * Sent when a new drinking session starts. + */ + session_started?: boolean; + /** + * Sent when a keg becomes low. + */ + keg_volume_low?: boolean; + /** + * Sent when a keg has been taken offline. + */ + keg_ended?: boolean; +}; + +export type PatchedPluginDataRequest = { + /** + * Plugin short name + */ + plugin_name?: string; + key?: string; + value?: unknown; +}; + +export type PatchedProfileUpdateRequestRequest = { + display_name?: string; +}; + +/** + * Admin-editable site settings, covering the old settings forms. + */ +export type PatchedSiteSettingsRequest = { + /** + * The title of this site. + */ + title?: string; + /** + * Who can view Kegbot data? + * + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ + privacy?: PrivacyEnum; + /** + * Who can join this Kegbot from the web site? + * + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ + registration_mode?: RegistrationModeEnum; + /** + * Enable and show features related to volume sensing. + */ + enable_sensing?: boolean; + /** + * Enable user pour tracking. + */ + enable_users?: boolean; + /** + * Unit system to use when displaying volumetric data. + * + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ + volume_display_units?: VolumeDisplayUnitsEnum; + /** + * Unit system to use when displaying temperature data. + * + * * `f` - Fahrenheit + * * `c` - Celsius + */ + temperature_display_units?: TemperatureDisplayUnitsEnum; + /** + * Time zone for this system. + * + * * `Africa/Abidjan` - Africa/Abidjan + * * `Africa/Accra` - Africa/Accra + * * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * * `Africa/Algiers` - Africa/Algiers + * * `Africa/Asmara` - Africa/Asmara + * * `Africa/Asmera` - Africa/Asmera + * * `Africa/Bamako` - Africa/Bamako + * * `Africa/Bangui` - Africa/Bangui + * * `Africa/Banjul` - Africa/Banjul + * * `Africa/Bissau` - Africa/Bissau + * * `Africa/Blantyre` - Africa/Blantyre + * * `Africa/Brazzaville` - Africa/Brazzaville + * * `Africa/Bujumbura` - Africa/Bujumbura + * * `Africa/Cairo` - Africa/Cairo + * * `Africa/Casablanca` - Africa/Casablanca + * * `Africa/Ceuta` - Africa/Ceuta + * * `Africa/Conakry` - Africa/Conakry + * * `Africa/Dakar` - Africa/Dakar + * * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * * `Africa/Djibouti` - Africa/Djibouti + * * `Africa/Douala` - Africa/Douala + * * `Africa/El_Aaiun` - Africa/El_Aaiun + * * `Africa/Freetown` - Africa/Freetown + * * `Africa/Gaborone` - Africa/Gaborone + * * `Africa/Harare` - Africa/Harare + * * `Africa/Johannesburg` - Africa/Johannesburg + * * `Africa/Juba` - Africa/Juba + * * `Africa/Kampala` - Africa/Kampala + * * `Africa/Khartoum` - Africa/Khartoum + * * `Africa/Kigali` - Africa/Kigali + * * `Africa/Kinshasa` - Africa/Kinshasa + * * `Africa/Lagos` - Africa/Lagos + * * `Africa/Libreville` - Africa/Libreville + * * `Africa/Lome` - Africa/Lome + * * `Africa/Luanda` - Africa/Luanda + * * `Africa/Lubumbashi` - Africa/Lubumbashi + * * `Africa/Lusaka` - Africa/Lusaka + * * `Africa/Malabo` - Africa/Malabo + * * `Africa/Maputo` - Africa/Maputo + * * `Africa/Maseru` - Africa/Maseru + * * `Africa/Mbabane` - Africa/Mbabane + * * `Africa/Mogadishu` - Africa/Mogadishu + * * `Africa/Monrovia` - Africa/Monrovia + * * `Africa/Nairobi` - Africa/Nairobi + * * `Africa/Ndjamena` - Africa/Ndjamena + * * `Africa/Niamey` - Africa/Niamey + * * `Africa/Nouakchott` - Africa/Nouakchott + * * `Africa/Ouagadougou` - Africa/Ouagadougou + * * `Africa/Porto-Novo` - Africa/Porto-Novo + * * `Africa/Sao_Tome` - Africa/Sao_Tome + * * `Africa/Timbuktu` - Africa/Timbuktu + * * `Africa/Tripoli` - Africa/Tripoli + * * `Africa/Tunis` - Africa/Tunis + * * `Africa/Windhoek` - Africa/Windhoek + * * `America/Adak` - America/Adak + * * `America/Anchorage` - America/Anchorage + * * `America/Anguilla` - America/Anguilla + * * `America/Antigua` - America/Antigua + * * `America/Araguaina` - America/Araguaina + * * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * * `America/Argentina/Salta` - America/Argentina/Salta + * * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * * `America/Aruba` - America/Aruba + * * `America/Asuncion` - America/Asuncion + * * `America/Atikokan` - America/Atikokan + * * `America/Atka` - America/Atka + * * `America/Bahia` - America/Bahia + * * `America/Bahia_Banderas` - America/Bahia_Banderas + * * `America/Barbados` - America/Barbados + * * `America/Belem` - America/Belem + * * `America/Belize` - America/Belize + * * `America/Blanc-Sablon` - America/Blanc-Sablon + * * `America/Boa_Vista` - America/Boa_Vista + * * `America/Bogota` - America/Bogota + * * `America/Boise` - America/Boise + * * `America/Buenos_Aires` - America/Buenos_Aires + * * `America/Cambridge_Bay` - America/Cambridge_Bay + * * `America/Campo_Grande` - America/Campo_Grande + * * `America/Cancun` - America/Cancun + * * `America/Caracas` - America/Caracas + * * `America/Catamarca` - America/Catamarca + * * `America/Cayenne` - America/Cayenne + * * `America/Cayman` - America/Cayman + * * `America/Chicago` - America/Chicago + * * `America/Chihuahua` - America/Chihuahua + * * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * * `America/Coral_Harbour` - America/Coral_Harbour + * * `America/Cordoba` - America/Cordoba + * * `America/Costa_Rica` - America/Costa_Rica + * * `America/Coyhaique` - America/Coyhaique + * * `America/Creston` - America/Creston + * * `America/Cuiaba` - America/Cuiaba + * * `America/Curacao` - America/Curacao + * * `America/Danmarkshavn` - America/Danmarkshavn + * * `America/Dawson` - America/Dawson + * * `America/Dawson_Creek` - America/Dawson_Creek + * * `America/Denver` - America/Denver + * * `America/Detroit` - America/Detroit + * * `America/Dominica` - America/Dominica + * * `America/Edmonton` - America/Edmonton + * * `America/Eirunepe` - America/Eirunepe + * * `America/El_Salvador` - America/El_Salvador + * * `America/Ensenada` - America/Ensenada + * * `America/Fort_Nelson` - America/Fort_Nelson + * * `America/Fort_Wayne` - America/Fort_Wayne + * * `America/Fortaleza` - America/Fortaleza + * * `America/Glace_Bay` - America/Glace_Bay + * * `America/Godthab` - America/Godthab + * * `America/Goose_Bay` - America/Goose_Bay + * * `America/Grand_Turk` - America/Grand_Turk + * * `America/Grenada` - America/Grenada + * * `America/Guadeloupe` - America/Guadeloupe + * * `America/Guatemala` - America/Guatemala + * * `America/Guayaquil` - America/Guayaquil + * * `America/Guyana` - America/Guyana + * * `America/Halifax` - America/Halifax + * * `America/Havana` - America/Havana + * * `America/Hermosillo` - America/Hermosillo + * * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * * `America/Indiana/Knox` - America/Indiana/Knox + * * `America/Indiana/Marengo` - America/Indiana/Marengo + * * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * * `America/Indiana/Vevay` - America/Indiana/Vevay + * * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * * `America/Indiana/Winamac` - America/Indiana/Winamac + * * `America/Indianapolis` - America/Indianapolis + * * `America/Inuvik` - America/Inuvik + * * `America/Iqaluit` - America/Iqaluit + * * `America/Jamaica` - America/Jamaica + * * `America/Jujuy` - America/Jujuy + * * `America/Juneau` - America/Juneau + * * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * * `America/Knox_IN` - America/Knox_IN + * * `America/Kralendijk` - America/Kralendijk + * * `America/La_Paz` - America/La_Paz + * * `America/Lima` - America/Lima + * * `America/Los_Angeles` - America/Los_Angeles + * * `America/Louisville` - America/Louisville + * * `America/Lower_Princes` - America/Lower_Princes + * * `America/Maceio` - America/Maceio + * * `America/Managua` - America/Managua + * * `America/Manaus` - America/Manaus + * * `America/Marigot` - America/Marigot + * * `America/Martinique` - America/Martinique + * * `America/Matamoros` - America/Matamoros + * * `America/Mazatlan` - America/Mazatlan + * * `America/Mendoza` - America/Mendoza + * * `America/Menominee` - America/Menominee + * * `America/Merida` - America/Merida + * * `America/Metlakatla` - America/Metlakatla + * * `America/Mexico_City` - America/Mexico_City + * * `America/Miquelon` - America/Miquelon + * * `America/Moncton` - America/Moncton + * * `America/Monterrey` - America/Monterrey + * * `America/Montevideo` - America/Montevideo + * * `America/Montreal` - America/Montreal + * * `America/Montserrat` - America/Montserrat + * * `America/Nassau` - America/Nassau + * * `America/New_York` - America/New_York + * * `America/Nipigon` - America/Nipigon + * * `America/Nome` - America/Nome + * * `America/Noronha` - America/Noronha + * * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * * `America/North_Dakota/Center` - America/North_Dakota/Center + * * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * * `America/Nuuk` - America/Nuuk + * * `America/Ojinaga` - America/Ojinaga + * * `America/Panama` - America/Panama + * * `America/Pangnirtung` - America/Pangnirtung + * * `America/Paramaribo` - America/Paramaribo + * * `America/Phoenix` - America/Phoenix + * * `America/Port-au-Prince` - America/Port-au-Prince + * * `America/Port_of_Spain` - America/Port_of_Spain + * * `America/Porto_Acre` - America/Porto_Acre + * * `America/Porto_Velho` - America/Porto_Velho + * * `America/Puerto_Rico` - America/Puerto_Rico + * * `America/Punta_Arenas` - America/Punta_Arenas + * * `America/Rainy_River` - America/Rainy_River + * * `America/Rankin_Inlet` - America/Rankin_Inlet + * * `America/Recife` - America/Recife + * * `America/Regina` - America/Regina + * * `America/Resolute` - America/Resolute + * * `America/Rio_Branco` - America/Rio_Branco + * * `America/Rosario` - America/Rosario + * * `America/Santa_Isabel` - America/Santa_Isabel + * * `America/Santarem` - America/Santarem + * * `America/Santiago` - America/Santiago + * * `America/Santo_Domingo` - America/Santo_Domingo + * * `America/Sao_Paulo` - America/Sao_Paulo + * * `America/Scoresbysund` - America/Scoresbysund + * * `America/Shiprock` - America/Shiprock + * * `America/Sitka` - America/Sitka + * * `America/St_Barthelemy` - America/St_Barthelemy + * * `America/St_Johns` - America/St_Johns + * * `America/St_Kitts` - America/St_Kitts + * * `America/St_Lucia` - America/St_Lucia + * * `America/St_Thomas` - America/St_Thomas + * * `America/St_Vincent` - America/St_Vincent + * * `America/Swift_Current` - America/Swift_Current + * * `America/Tegucigalpa` - America/Tegucigalpa + * * `America/Thule` - America/Thule + * * `America/Thunder_Bay` - America/Thunder_Bay + * * `America/Tijuana` - America/Tijuana + * * `America/Toronto` - America/Toronto + * * `America/Tortola` - America/Tortola + * * `America/Vancouver` - America/Vancouver + * * `America/Virgin` - America/Virgin + * * `America/Whitehorse` - America/Whitehorse + * * `America/Winnipeg` - America/Winnipeg + * * `America/Yakutat` - America/Yakutat + * * `America/Yellowknife` - America/Yellowknife + * * `Antarctica/Casey` - Antarctica/Casey + * * `Antarctica/Davis` - Antarctica/Davis + * * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * * `Antarctica/Macquarie` - Antarctica/Macquarie + * * `Antarctica/Mawson` - Antarctica/Mawson + * * `Antarctica/McMurdo` - Antarctica/McMurdo + * * `Antarctica/Palmer` - Antarctica/Palmer + * * `Antarctica/Rothera` - Antarctica/Rothera + * * `Antarctica/South_Pole` - Antarctica/South_Pole + * * `Antarctica/Syowa` - Antarctica/Syowa + * * `Antarctica/Troll` - Antarctica/Troll + * * `Antarctica/Vostok` - Antarctica/Vostok + * * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * * `Asia/Aden` - Asia/Aden + * * `Asia/Almaty` - Asia/Almaty + * * `Asia/Amman` - Asia/Amman + * * `Asia/Anadyr` - Asia/Anadyr + * * `Asia/Aqtau` - Asia/Aqtau + * * `Asia/Aqtobe` - Asia/Aqtobe + * * `Asia/Ashgabat` - Asia/Ashgabat + * * `Asia/Ashkhabad` - Asia/Ashkhabad + * * `Asia/Atyrau` - Asia/Atyrau + * * `Asia/Baghdad` - Asia/Baghdad + * * `Asia/Bahrain` - Asia/Bahrain + * * `Asia/Baku` - Asia/Baku + * * `Asia/Bangkok` - Asia/Bangkok + * * `Asia/Barnaul` - Asia/Barnaul + * * `Asia/Beirut` - Asia/Beirut + * * `Asia/Bishkek` - Asia/Bishkek + * * `Asia/Brunei` - Asia/Brunei + * * `Asia/Calcutta` - Asia/Calcutta + * * `Asia/Chita` - Asia/Chita + * * `Asia/Choibalsan` - Asia/Choibalsan + * * `Asia/Chongqing` - Asia/Chongqing + * * `Asia/Chungking` - Asia/Chungking + * * `Asia/Colombo` - Asia/Colombo + * * `Asia/Dacca` - Asia/Dacca + * * `Asia/Damascus` - Asia/Damascus + * * `Asia/Dhaka` - Asia/Dhaka + * * `Asia/Dili` - Asia/Dili + * * `Asia/Dubai` - Asia/Dubai + * * `Asia/Dushanbe` - Asia/Dushanbe + * * `Asia/Famagusta` - Asia/Famagusta + * * `Asia/Gaza` - Asia/Gaza + * * `Asia/Harbin` - Asia/Harbin + * * `Asia/Hebron` - Asia/Hebron + * * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * * `Asia/Hong_Kong` - Asia/Hong_Kong + * * `Asia/Hovd` - Asia/Hovd + * * `Asia/Irkutsk` - Asia/Irkutsk + * * `Asia/Istanbul` - Asia/Istanbul + * * `Asia/Jakarta` - Asia/Jakarta + * * `Asia/Jayapura` - Asia/Jayapura + * * `Asia/Jerusalem` - Asia/Jerusalem + * * `Asia/Kabul` - Asia/Kabul + * * `Asia/Kamchatka` - Asia/Kamchatka + * * `Asia/Karachi` - Asia/Karachi + * * `Asia/Kashgar` - Asia/Kashgar + * * `Asia/Kathmandu` - Asia/Kathmandu + * * `Asia/Katmandu` - Asia/Katmandu + * * `Asia/Khandyga` - Asia/Khandyga + * * `Asia/Kolkata` - Asia/Kolkata + * * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * * `Asia/Kuching` - Asia/Kuching + * * `Asia/Kuwait` - Asia/Kuwait + * * `Asia/Macao` - Asia/Macao + * * `Asia/Macau` - Asia/Macau + * * `Asia/Magadan` - Asia/Magadan + * * `Asia/Makassar` - Asia/Makassar + * * `Asia/Manila` - Asia/Manila + * * `Asia/Muscat` - Asia/Muscat + * * `Asia/Nicosia` - Asia/Nicosia + * * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * * `Asia/Novosibirsk` - Asia/Novosibirsk + * * `Asia/Omsk` - Asia/Omsk + * * `Asia/Oral` - Asia/Oral + * * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * * `Asia/Pontianak` - Asia/Pontianak + * * `Asia/Pyongyang` - Asia/Pyongyang + * * `Asia/Qatar` - Asia/Qatar + * * `Asia/Qostanay` - Asia/Qostanay + * * `Asia/Qyzylorda` - Asia/Qyzylorda + * * `Asia/Rangoon` - Asia/Rangoon + * * `Asia/Riyadh` - Asia/Riyadh + * * `Asia/Saigon` - Asia/Saigon + * * `Asia/Sakhalin` - Asia/Sakhalin + * * `Asia/Samarkand` - Asia/Samarkand + * * `Asia/Seoul` - Asia/Seoul + * * `Asia/Shanghai` - Asia/Shanghai + * * `Asia/Singapore` - Asia/Singapore + * * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * * `Asia/Taipei` - Asia/Taipei + * * `Asia/Tashkent` - Asia/Tashkent + * * `Asia/Tbilisi` - Asia/Tbilisi + * * `Asia/Tehran` - Asia/Tehran + * * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * * `Asia/Thimbu` - Asia/Thimbu + * * `Asia/Thimphu` - Asia/Thimphu + * * `Asia/Tokyo` - Asia/Tokyo + * * `Asia/Tomsk` - Asia/Tomsk + * * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * * `Asia/Urumqi` - Asia/Urumqi + * * `Asia/Ust-Nera` - Asia/Ust-Nera + * * `Asia/Vientiane` - Asia/Vientiane + * * `Asia/Vladivostok` - Asia/Vladivostok + * * `Asia/Yakutsk` - Asia/Yakutsk + * * `Asia/Yangon` - Asia/Yangon + * * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * * `Asia/Yerevan` - Asia/Yerevan + * * `Atlantic/Azores` - Atlantic/Azores + * * `Atlantic/Bermuda` - Atlantic/Bermuda + * * `Atlantic/Canary` - Atlantic/Canary + * * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * * `Atlantic/Faeroe` - Atlantic/Faeroe + * * `Atlantic/Faroe` - Atlantic/Faroe + * * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * * `Atlantic/Madeira` - Atlantic/Madeira + * * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * * `Atlantic/St_Helena` - Atlantic/St_Helena + * * `Atlantic/Stanley` - Atlantic/Stanley + * * `Australia/ACT` - Australia/ACT + * * `Australia/Adelaide` - Australia/Adelaide + * * `Australia/Brisbane` - Australia/Brisbane + * * `Australia/Broken_Hill` - Australia/Broken_Hill + * * `Australia/Canberra` - Australia/Canberra + * * `Australia/Currie` - Australia/Currie + * * `Australia/Darwin` - Australia/Darwin + * * `Australia/Eucla` - Australia/Eucla + * * `Australia/Hobart` - Australia/Hobart + * * `Australia/LHI` - Australia/LHI + * * `Australia/Lindeman` - Australia/Lindeman + * * `Australia/Lord_Howe` - Australia/Lord_Howe + * * `Australia/Melbourne` - Australia/Melbourne + * * `Australia/NSW` - Australia/NSW + * * `Australia/North` - Australia/North + * * `Australia/Perth` - Australia/Perth + * * `Australia/Queensland` - Australia/Queensland + * * `Australia/South` - Australia/South + * * `Australia/Sydney` - Australia/Sydney + * * `Australia/Tasmania` - Australia/Tasmania + * * `Australia/Victoria` - Australia/Victoria + * * `Australia/West` - Australia/West + * * `Australia/Yancowinna` - Australia/Yancowinna + * * `Brazil/Acre` - Brazil/Acre + * * `Brazil/DeNoronha` - Brazil/DeNoronha + * * `Brazil/East` - Brazil/East + * * `Brazil/West` - Brazil/West + * * `Canada/Atlantic` - Canada/Atlantic + * * `Canada/Central` - Canada/Central + * * `Canada/Eastern` - Canada/Eastern + * * `Canada/Mountain` - Canada/Mountain + * * `Canada/Newfoundland` - Canada/Newfoundland + * * `Canada/Pacific` - Canada/Pacific + * * `Canada/Saskatchewan` - Canada/Saskatchewan + * * `Canada/Yukon` - Canada/Yukon + * * `Chile/Continental` - Chile/Continental + * * `Chile/EasterIsland` - Chile/EasterIsland + * * `Europe/Amsterdam` - Europe/Amsterdam + * * `Europe/Andorra` - Europe/Andorra + * * `Europe/Astrakhan` - Europe/Astrakhan + * * `Europe/Athens` - Europe/Athens + * * `Europe/Belfast` - Europe/Belfast + * * `Europe/Belgrade` - Europe/Belgrade + * * `Europe/Berlin` - Europe/Berlin + * * `Europe/Bratislava` - Europe/Bratislava + * * `Europe/Brussels` - Europe/Brussels + * * `Europe/Bucharest` - Europe/Bucharest + * * `Europe/Budapest` - Europe/Budapest + * * `Europe/Busingen` - Europe/Busingen + * * `Europe/Chisinau` - Europe/Chisinau + * * `Europe/Copenhagen` - Europe/Copenhagen + * * `Europe/Dublin` - Europe/Dublin + * * `Europe/Gibraltar` - Europe/Gibraltar + * * `Europe/Guernsey` - Europe/Guernsey + * * `Europe/Helsinki` - Europe/Helsinki + * * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * * `Europe/Istanbul` - Europe/Istanbul + * * `Europe/Jersey` - Europe/Jersey + * * `Europe/Kaliningrad` - Europe/Kaliningrad + * * `Europe/Kiev` - Europe/Kiev + * * `Europe/Kirov` - Europe/Kirov + * * `Europe/Kyiv` - Europe/Kyiv + * * `Europe/Lisbon` - Europe/Lisbon + * * `Europe/Ljubljana` - Europe/Ljubljana + * * `Europe/London` - Europe/London + * * `Europe/Luxembourg` - Europe/Luxembourg + * * `Europe/Madrid` - Europe/Madrid + * * `Europe/Malta` - Europe/Malta + * * `Europe/Mariehamn` - Europe/Mariehamn + * * `Europe/Minsk` - Europe/Minsk + * * `Europe/Monaco` - Europe/Monaco + * * `Europe/Moscow` - Europe/Moscow + * * `Europe/Nicosia` - Europe/Nicosia + * * `Europe/Oslo` - Europe/Oslo + * * `Europe/Paris` - Europe/Paris + * * `Europe/Podgorica` - Europe/Podgorica + * * `Europe/Prague` - Europe/Prague + * * `Europe/Riga` - Europe/Riga + * * `Europe/Rome` - Europe/Rome + * * `Europe/Samara` - Europe/Samara + * * `Europe/San_Marino` - Europe/San_Marino + * * `Europe/Sarajevo` - Europe/Sarajevo + * * `Europe/Saratov` - Europe/Saratov + * * `Europe/Simferopol` - Europe/Simferopol + * * `Europe/Skopje` - Europe/Skopje + * * `Europe/Sofia` - Europe/Sofia + * * `Europe/Stockholm` - Europe/Stockholm + * * `Europe/Tallinn` - Europe/Tallinn + * * `Europe/Tirane` - Europe/Tirane + * * `Europe/Tiraspol` - Europe/Tiraspol + * * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * * `Europe/Uzhgorod` - Europe/Uzhgorod + * * `Europe/Vaduz` - Europe/Vaduz + * * `Europe/Vatican` - Europe/Vatican + * * `Europe/Vienna` - Europe/Vienna + * * `Europe/Vilnius` - Europe/Vilnius + * * `Europe/Volgograd` - Europe/Volgograd + * * `Europe/Warsaw` - Europe/Warsaw + * * `Europe/Zagreb` - Europe/Zagreb + * * `Europe/Zaporozhye` - Europe/Zaporozhye + * * `Europe/Zurich` - Europe/Zurich + * * `Indian/Antananarivo` - Indian/Antananarivo + * * `Indian/Chagos` - Indian/Chagos + * * `Indian/Christmas` - Indian/Christmas + * * `Indian/Cocos` - Indian/Cocos + * * `Indian/Comoro` - Indian/Comoro + * * `Indian/Kerguelen` - Indian/Kerguelen + * * `Indian/Mahe` - Indian/Mahe + * * `Indian/Maldives` - Indian/Maldives + * * `Indian/Mauritius` - Indian/Mauritius + * * `Indian/Mayotte` - Indian/Mayotte + * * `Indian/Reunion` - Indian/Reunion + * * `Mexico/BajaNorte` - Mexico/BajaNorte + * * `Mexico/BajaSur` - Mexico/BajaSur + * * `Mexico/General` - Mexico/General + * * `Pacific/Apia` - Pacific/Apia + * * `Pacific/Auckland` - Pacific/Auckland + * * `Pacific/Bougainville` - Pacific/Bougainville + * * `Pacific/Chatham` - Pacific/Chatham + * * `Pacific/Chuuk` - Pacific/Chuuk + * * `Pacific/Easter` - Pacific/Easter + * * `Pacific/Efate` - Pacific/Efate + * * `Pacific/Enderbury` - Pacific/Enderbury + * * `Pacific/Fakaofo` - Pacific/Fakaofo + * * `Pacific/Fiji` - Pacific/Fiji + * * `Pacific/Funafuti` - Pacific/Funafuti + * * `Pacific/Galapagos` - Pacific/Galapagos + * * `Pacific/Gambier` - Pacific/Gambier + * * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * * `Pacific/Guam` - Pacific/Guam + * * `Pacific/Honolulu` - Pacific/Honolulu + * * `Pacific/Johnston` - Pacific/Johnston + * * `Pacific/Kanton` - Pacific/Kanton + * * `Pacific/Kiritimati` - Pacific/Kiritimati + * * `Pacific/Kosrae` - Pacific/Kosrae + * * `Pacific/Kwajalein` - Pacific/Kwajalein + * * `Pacific/Majuro` - Pacific/Majuro + * * `Pacific/Marquesas` - Pacific/Marquesas + * * `Pacific/Midway` - Pacific/Midway + * * `Pacific/Nauru` - Pacific/Nauru + * * `Pacific/Niue` - Pacific/Niue + * * `Pacific/Norfolk` - Pacific/Norfolk + * * `Pacific/Noumea` - Pacific/Noumea + * * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * * `Pacific/Palau` - Pacific/Palau + * * `Pacific/Pitcairn` - Pacific/Pitcairn + * * `Pacific/Pohnpei` - Pacific/Pohnpei + * * `Pacific/Ponape` - Pacific/Ponape + * * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * * `Pacific/Rarotonga` - Pacific/Rarotonga + * * `Pacific/Saipan` - Pacific/Saipan + * * `Pacific/Samoa` - Pacific/Samoa + * * `Pacific/Tahiti` - Pacific/Tahiti + * * `Pacific/Tarawa` - Pacific/Tarawa + * * `Pacific/Tongatapu` - Pacific/Tongatapu + * * `Pacific/Truk` - Pacific/Truk + * * `Pacific/Wake` - Pacific/Wake + * * `Pacific/Wallis` - Pacific/Wallis + * * `Pacific/Yap` - Pacific/Yap + * * `US/Alaska` - US/Alaska + * * `US/Aleutian` - US/Aleutian + * * `US/Arizona` - US/Arizona + * * `US/Central` - US/Central + * * `US/East-Indiana` - US/East-Indiana + * * `US/Eastern` - US/Eastern + * * `US/Hawaii` - US/Hawaii + * * `US/Indiana-Starke` - US/Indiana-Starke + * * `US/Michigan` - US/Michigan + * * `US/Mountain` - US/Mountain + * * `US/Pacific` - US/Pacific + * * `US/Samoa` - US/Samoa + * * `UTC` - UTC */ - origin_state?: string | null; + timezone?: TimezoneEnum; /** - * City of origin, if known + * Maximum time, in minutes, that a session may be idle (no pours) before it is considered to be finished. Recommended value is 180. */ - origin_city?: string | null; - is_homebrew?: boolean; + session_timeout_minutes?: number; /** - * Brewer's home page + * Set to your Google Analytics ID to enable tracking. Example: UA-XXXX-y */ - url?: string | null; + google_analytics_id?: string | null; /** - * A short description of the brewer + * Backend email configuration */ - description?: string | null; - picture?: Picture; + email_config?: string; }; -export type PatchedController = { - readonly id?: number; - /** - * Identifying name for this device; must be unique. - */ - name?: string; +export type PatchedThermoSensorRequest = { + raw_name?: string; + nice_name?: string; +}; + +export type Picture = { + readonly id: number; + readonly resized_url: string; + readonly resized_png_url: string; + readonly thumbnail_url: string; + readonly thumbnail_png_url: string; + caption: string; /** - * Type of controller (optional). + * User that owns/uploaded this picture */ - model_name?: string | null; + readonly user_id: number | null; /** - * Serial number (optional). + * Keg this picture was taken with, if any. */ - serial_number?: string | null; -}; - -export type PatchedDevice = { - readonly id?: number; - name?: string; + readonly keg_id: number | null; /** - * Time the device was created. + * Session this picture was taken with, if any. */ - created_time?: string; + readonly session_id: number | null; }; -export type PatchedDrinkUpdateRequest = { - shout?: string; - volume_ml?: number; +export type PictureRequest = { + caption: string; }; -export type PatchedFlowMeter = { - readonly id?: number; - /** - * Controller that owns this meter. - */ - readonly controller_id?: number; - /** - * Controller-specific data port name for this meter. - */ - port_name?: string; - /** - * Tap to which this meter is currently bound. - */ - readonly tap_id?: number | null; - /** - * Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), 5.4 (SF800) - */ - ticks_per_ml?: number; +export type PictureUploadRequestRequest = { + image: Blob | File; + caption?: string; }; -export type PatchedFlowToggle = { - readonly id?: number; - /** - * Controller that owns this toggle. - */ - readonly controller_id?: number; - /** - * Controller-specific data port name for this toggle. - */ - port_name?: string; +export type PluginData = { /** - * Tap to which this toggle is currently bound. + * Plugin short name */ - readonly tap_id?: number | null; + plugin_name: string; + key: string; + value: unknown; }; -export type PatchedKeg = { - readonly id?: number; - beverage?: Beverage; - /** - * Keg container type, used to initialize keg's full volume - * - * * `mini` - Mini Keg (5 L) - * * `corny-2_5-gal` - Corny Keg (2.5 gal) - * * `corny-3-gal` - Corny Keg (3.0 gal) - * * `corny` - Corny Keg (5 gal) - * * `sixth` - Sixth Barrel (5.17 gal) - * * `euro-30-liter` - European DIN (30 L) - * * `euro-half` - European Half Barrel (50 L) - * * `quarter` - Quarter Barrel (7.75 gal) - * * `euro` - European Full Barrel (100 L) - * * `half-barrel` - Half Barrel (15.5 gal) - * * `other` - Other - */ - keg_type?: KegTypeEnum; - /** - * Computed served volume. - */ - readonly served_volume_ml?: number; - /** - * Full volume of this Keg; usually set automatically from keg_type. - */ - full_volume_ml?: number; +export type PluginDataRequest = { /** - * Time the Keg was first tapped. - */ - readonly start_time?: string; - /** - * Time the Keg was finished or disconnected. - */ - readonly end_time?: string; - /** - * Current keg state. - * - * * `available` - Available - * * `on_tap` - On tap - * * `finished` - Finished - */ - status?: KegStatusEnum; - /** - * User-visible description of the Keg. - */ - description?: string | null; - /** - * Amount of beverage poured without an associated Drink. - */ - readonly spilled_ml?: number; - /** - * Private notes about this keg, viewable only by admins. + * Plugin short name */ - notes?: string | null; - readonly illustration?: string; - readonly illustration_thumbnail?: string; - readonly stats?: unknown; + plugin_name: string; + key: string; + value: unknown; }; -export type PatchedKegTap = { - readonly id?: number; - /** - * The display name for this tap, for example, "Main Tap". - */ - name?: string; - /** - * Private notes about this tap. - */ - notes?: string | null; - readonly current_keg_id?: number; - readonly temperature_sensor_id?: number; - /** - * Position relative to other taps when sorting (0=first). - */ - sort_order?: number; - current_keg?: Keg; +export type PluginInfo = { + short_name: string; + name: string; }; -export type PatchedNotificationSettings = { - readonly id?: number; - /** - * User for these settings. - */ - readonly user_id?: number; - /** - * Notification backend (dotted path) for these settings. - */ - backend?: string; - /** - * Sent when a keg is activated. - */ - keg_tapped?: boolean; - /** - * Sent when a new drinking session starts. - */ - session_started?: boolean; - /** - * Sent when a keg becomes low. - */ - keg_volume_low?: boolean; - /** - * Sent when a keg has been taken offline. - */ - keg_ended?: boolean; +/** + * * `public` - Public: Browsing does not require login + * * `members` - Members only: Must log in to browse + * * `staff` - Staff only: Only logged-in staff accounts may browse + */ +export type PrivacyEnum = 'public' | 'members' | 'staff'; + +export type RegisterRequestRequest = { + username: string; + email: string; + password: string; + invite_code?: string; }; -export type PatchedPluginData = { - /** - * Plugin short name - */ - plugin_name?: string; - key?: string; - value?: unknown; +/** + * * `public` - Public: Anyone can register. + * * `member-invite-only` - Member Invite: Must be invited by an existing member. + * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + */ +export type RegistrationModeEnum = 'public' | 'member-invite-only' | 'staff-invite-only'; + +export type SetPasswordRequestRequest = { + password: string; }; -export type PatchedProfileUpdateRequest = { - display_name?: string; +export type SetupAdminUserRequestRequest = { + username: string; + email: string; + password: string; }; /** - * Admin-editable site settings, covering the old settings forms. + * The subset of site settings collected during the setup wizard. */ -export type PatchedSiteSettings = { - readonly name?: string; - readonly server_version?: string | null; - /** - * True if the site has completed setup. - */ - readonly is_setup?: boolean; +export type SetupSiteSettingsRequest = { /** * The title of this site. */ @@ -2346,36 +3426,6 @@ export type PatchedSiteSettings = { * * `staff` - Staff only: Only logged-in staff accounts may browse */ privacy?: PrivacyEnum; - /** - * Who can join this Kegbot from the web site? - * - * * `public` - Public: Anyone can register. - * * `member-invite-only` - Member Invite: Must be invited by an existing member. - * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. - */ - registration_mode?: RegistrationModeEnum; - /** - * Enable and show features related to volume sensing. - */ - enable_sensing?: boolean; - /** - * Enable user pour tracking. - */ - enable_users?: boolean; - /** - * Unit system to use when displaying volumetric data. - * - * * `metric` - Metric (mL, L) - * * `imperial` - Imperial (oz, pint) - */ - volume_display_units?: VolumeDisplayUnitsEnum; - /** - * Unit system to use when displaying temperature data. - * - * * `f` - Fahrenheit - * * `c` - Celsius - */ - temperature_display_units?: TemperatureDisplayUnitsEnum; /** * Time zone for this system. * @@ -2901,101 +3951,33 @@ export type PatchedSiteSettings = { */ timezone?: TimezoneEnum; /** - * Maximum time, in minutes, that a session may be idle (no pours) before it is considered to be finished. Recommended value is 180. - */ - session_timeout_minutes?: number; - /** - * Set to your Google Analytics ID to enable tracking. Example: UA-XXXX-y - */ - google_analytics_id?: string | null; - /** - * Backend email configuration - */ - email_config?: string; - background_image?: Picture; -}; - -export type PatchedThermoSensor = { - readonly id?: number; - raw_name?: string; - nice_name?: string; -}; - -export type Picture = { - readonly id: number; - readonly resized_url: string; - readonly resized_png_url: string; - readonly thumbnail_url: string; - readonly thumbnail_png_url: string; - caption: string; - /** - * User that owns/uploaded this picture + * Unit system to use when displaying volumetric data. + * + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) */ - readonly user_id: number | null; + volume_display_units?: VolumeDisplayUnitsEnum; /** - * Keg this picture was taken with, if any. + * Unit system to use when displaying temperature data. + * + * * `f` - Fahrenheit + * * `c` - Celsius */ - readonly keg_id: number | null; + temperature_display_units?: TemperatureDisplayUnitsEnum; /** - * Session this picture was taken with, if any. + * Enable and show features related to volume sensing. */ - readonly session_id: number | null; -}; - -export type PictureUploadRequest = { - image: string; - caption?: string; -}; - -export type PluginData = { + enable_sensing?: boolean; /** - * Plugin short name + * Enable user pour tracking. */ - plugin_name: string; - key: string; - value: unknown; -}; - -export type PluginInfo = { - short_name: string; - name: string; -}; - -/** - * * `public` - Public: Browsing does not require login - * * `members` - Members only: Must log in to browse - * * `staff` - Staff only: Only logged-in staff accounts may browse - */ -export type PrivacyEnum = 'public' | 'members' | 'staff'; - -export type RegisterRequest = { - username: string; - email: string; - password: string; - invite_code?: string; -}; - -/** - * * `public` - Public: Anyone can register. - * * `member-invite-only` - Member Invite: Must be invited by an existing member. - * * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. - */ -export type RegistrationModeEnum = 'public' | 'member-invite-only' | 'staff-invite-only'; - -export type SetPasswordRequest = { - password: string; -}; - -export type SetupAdminUserRequest = { - username: string; - email: string; - password: string; + enable_users?: boolean; }; /** * The subset of site settings collected during the setup wizard. */ -export type SetupSiteSettingsRequest = { +export type SetupSiteSettingsRequestRequest = { /** * The title of this site. */ @@ -4791,23 +5773,23 @@ export type SystemStatus = { events: Array; }; -export type TapAttachKegRequest = { +export type TapAttachKegRequestRequest = { keg_id: number; }; -export type TapConnectMeterRequest = { +export type TapConnectMeterRequestRequest = { meter_id: number | null; }; -export type TapConnectThermoRequest = { +export type TapConnectThermoRequestRequest = { thermo_sensor_id: number | null; }; -export type TapConnectToggleRequest = { +export type TapConnectToggleRequestRequest = { toggle_id: number | null; }; -export type TapRecordDrinkRequest = { +export type TapRecordDrinkRequestRequest = { volume_ml: number; username?: string; pour_time?: string | null; @@ -4828,6 +5810,11 @@ export type ThermoSensor = { nice_name: string; }; +export type ThermoSensorRequest = { + raw_name: string; + nice_name: string; +}; + export type Thermolog = { time: string; temp: number; @@ -5358,127 +6345,34 @@ export type Thermolog = { export type TimezoneEnum = 'Africa/Abidjan' | 'Africa/Accra' | 'Africa/Addis_Ababa' | 'Africa/Algiers' | 'Africa/Asmara' | 'Africa/Asmera' | 'Africa/Bamako' | 'Africa/Bangui' | 'Africa/Banjul' | 'Africa/Bissau' | 'Africa/Blantyre' | 'Africa/Brazzaville' | 'Africa/Bujumbura' | 'Africa/Cairo' | 'Africa/Casablanca' | 'Africa/Ceuta' | 'Africa/Conakry' | 'Africa/Dakar' | 'Africa/Dar_es_Salaam' | 'Africa/Djibouti' | 'Africa/Douala' | 'Africa/El_Aaiun' | 'Africa/Freetown' | 'Africa/Gaborone' | 'Africa/Harare' | 'Africa/Johannesburg' | 'Africa/Juba' | 'Africa/Kampala' | 'Africa/Khartoum' | 'Africa/Kigali' | 'Africa/Kinshasa' | 'Africa/Lagos' | 'Africa/Libreville' | 'Africa/Lome' | 'Africa/Luanda' | 'Africa/Lubumbashi' | 'Africa/Lusaka' | 'Africa/Malabo' | 'Africa/Maputo' | 'Africa/Maseru' | 'Africa/Mbabane' | 'Africa/Mogadishu' | 'Africa/Monrovia' | 'Africa/Nairobi' | 'Africa/Ndjamena' | 'Africa/Niamey' | 'Africa/Nouakchott' | 'Africa/Ouagadougou' | 'Africa/Porto-Novo' | 'Africa/Sao_Tome' | 'Africa/Timbuktu' | 'Africa/Tripoli' | 'Africa/Tunis' | 'Africa/Windhoek' | 'America/Adak' | 'America/Anchorage' | 'America/Anguilla' | 'America/Antigua' | 'America/Araguaina' | 'America/Argentina/Buenos_Aires' | 'America/Argentina/Catamarca' | 'America/Argentina/ComodRivadavia' | 'America/Argentina/Cordoba' | 'America/Argentina/Jujuy' | 'America/Argentina/La_Rioja' | 'America/Argentina/Mendoza' | 'America/Argentina/Rio_Gallegos' | 'America/Argentina/Salta' | 'America/Argentina/San_Juan' | 'America/Argentina/San_Luis' | 'America/Argentina/Tucuman' | 'America/Argentina/Ushuaia' | 'America/Aruba' | 'America/Asuncion' | 'America/Atikokan' | 'America/Atka' | 'America/Bahia' | 'America/Bahia_Banderas' | 'America/Barbados' | 'America/Belem' | 'America/Belize' | 'America/Blanc-Sablon' | 'America/Boa_Vista' | 'America/Bogota' | 'America/Boise' | 'America/Buenos_Aires' | 'America/Cambridge_Bay' | 'America/Campo_Grande' | 'America/Cancun' | 'America/Caracas' | 'America/Catamarca' | 'America/Cayenne' | 'America/Cayman' | 'America/Chicago' | 'America/Chihuahua' | 'America/Ciudad_Juarez' | 'America/Coral_Harbour' | 'America/Cordoba' | 'America/Costa_Rica' | 'America/Coyhaique' | 'America/Creston' | 'America/Cuiaba' | 'America/Curacao' | 'America/Danmarkshavn' | 'America/Dawson' | 'America/Dawson_Creek' | 'America/Denver' | 'America/Detroit' | 'America/Dominica' | 'America/Edmonton' | 'America/Eirunepe' | 'America/El_Salvador' | 'America/Ensenada' | 'America/Fort_Nelson' | 'America/Fort_Wayne' | 'America/Fortaleza' | 'America/Glace_Bay' | 'America/Godthab' | 'America/Goose_Bay' | 'America/Grand_Turk' | 'America/Grenada' | 'America/Guadeloupe' | 'America/Guatemala' | 'America/Guayaquil' | 'America/Guyana' | 'America/Halifax' | 'America/Havana' | 'America/Hermosillo' | 'America/Indiana/Indianapolis' | 'America/Indiana/Knox' | 'America/Indiana/Marengo' | 'America/Indiana/Petersburg' | 'America/Indiana/Tell_City' | 'America/Indiana/Vevay' | 'America/Indiana/Vincennes' | 'America/Indiana/Winamac' | 'America/Indianapolis' | 'America/Inuvik' | 'America/Iqaluit' | 'America/Jamaica' | 'America/Jujuy' | 'America/Juneau' | 'America/Kentucky/Louisville' | 'America/Kentucky/Monticello' | 'America/Knox_IN' | 'America/Kralendijk' | 'America/La_Paz' | 'America/Lima' | 'America/Los_Angeles' | 'America/Louisville' | 'America/Lower_Princes' | 'America/Maceio' | 'America/Managua' | 'America/Manaus' | 'America/Marigot' | 'America/Martinique' | 'America/Matamoros' | 'America/Mazatlan' | 'America/Mendoza' | 'America/Menominee' | 'America/Merida' | 'America/Metlakatla' | 'America/Mexico_City' | 'America/Miquelon' | 'America/Moncton' | 'America/Monterrey' | 'America/Montevideo' | 'America/Montreal' | 'America/Montserrat' | 'America/Nassau' | 'America/New_York' | 'America/Nipigon' | 'America/Nome' | 'America/Noronha' | 'America/North_Dakota/Beulah' | 'America/North_Dakota/Center' | 'America/North_Dakota/New_Salem' | 'America/Nuuk' | 'America/Ojinaga' | 'America/Panama' | 'America/Pangnirtung' | 'America/Paramaribo' | 'America/Phoenix' | 'America/Port-au-Prince' | 'America/Port_of_Spain' | 'America/Porto_Acre' | 'America/Porto_Velho' | 'America/Puerto_Rico' | 'America/Punta_Arenas' | 'America/Rainy_River' | 'America/Rankin_Inlet' | 'America/Recife' | 'America/Regina' | 'America/Resolute' | 'America/Rio_Branco' | 'America/Rosario' | 'America/Santa_Isabel' | 'America/Santarem' | 'America/Santiago' | 'America/Santo_Domingo' | 'America/Sao_Paulo' | 'America/Scoresbysund' | 'America/Shiprock' | 'America/Sitka' | 'America/St_Barthelemy' | 'America/St_Johns' | 'America/St_Kitts' | 'America/St_Lucia' | 'America/St_Thomas' | 'America/St_Vincent' | 'America/Swift_Current' | 'America/Tegucigalpa' | 'America/Thule' | 'America/Thunder_Bay' | 'America/Tijuana' | 'America/Toronto' | 'America/Tortola' | 'America/Vancouver' | 'America/Virgin' | 'America/Whitehorse' | 'America/Winnipeg' | 'America/Yakutat' | 'America/Yellowknife' | 'Antarctica/Casey' | 'Antarctica/Davis' | 'Antarctica/DumontDUrville' | 'Antarctica/Macquarie' | 'Antarctica/Mawson' | 'Antarctica/McMurdo' | 'Antarctica/Palmer' | 'Antarctica/Rothera' | 'Antarctica/South_Pole' | 'Antarctica/Syowa' | 'Antarctica/Troll' | 'Antarctica/Vostok' | 'Arctic/Longyearbyen' | 'Asia/Aden' | 'Asia/Almaty' | 'Asia/Amman' | 'Asia/Anadyr' | 'Asia/Aqtau' | 'Asia/Aqtobe' | 'Asia/Ashgabat' | 'Asia/Ashkhabad' | 'Asia/Atyrau' | 'Asia/Baghdad' | 'Asia/Bahrain' | 'Asia/Baku' | 'Asia/Bangkok' | 'Asia/Barnaul' | 'Asia/Beirut' | 'Asia/Bishkek' | 'Asia/Brunei' | 'Asia/Calcutta' | 'Asia/Chita' | 'Asia/Choibalsan' | 'Asia/Chongqing' | 'Asia/Chungking' | 'Asia/Colombo' | 'Asia/Dacca' | 'Asia/Damascus' | 'Asia/Dhaka' | 'Asia/Dili' | 'Asia/Dubai' | 'Asia/Dushanbe' | 'Asia/Famagusta' | 'Asia/Gaza' | 'Asia/Harbin' | 'Asia/Hebron' | 'Asia/Ho_Chi_Minh' | 'Asia/Hong_Kong' | 'Asia/Hovd' | 'Asia/Irkutsk' | 'Asia/Istanbul' | 'Asia/Jakarta' | 'Asia/Jayapura' | 'Asia/Jerusalem' | 'Asia/Kabul' | 'Asia/Kamchatka' | 'Asia/Karachi' | 'Asia/Kashgar' | 'Asia/Kathmandu' | 'Asia/Katmandu' | 'Asia/Khandyga' | 'Asia/Kolkata' | 'Asia/Krasnoyarsk' | 'Asia/Kuala_Lumpur' | 'Asia/Kuching' | 'Asia/Kuwait' | 'Asia/Macao' | 'Asia/Macau' | 'Asia/Magadan' | 'Asia/Makassar' | 'Asia/Manila' | 'Asia/Muscat' | 'Asia/Nicosia' | 'Asia/Novokuznetsk' | 'Asia/Novosibirsk' | 'Asia/Omsk' | 'Asia/Oral' | 'Asia/Phnom_Penh' | 'Asia/Pontianak' | 'Asia/Pyongyang' | 'Asia/Qatar' | 'Asia/Qostanay' | 'Asia/Qyzylorda' | 'Asia/Rangoon' | 'Asia/Riyadh' | 'Asia/Saigon' | 'Asia/Sakhalin' | 'Asia/Samarkand' | 'Asia/Seoul' | 'Asia/Shanghai' | 'Asia/Singapore' | 'Asia/Srednekolymsk' | 'Asia/Taipei' | 'Asia/Tashkent' | 'Asia/Tbilisi' | 'Asia/Tehran' | 'Asia/Tel_Aviv' | 'Asia/Thimbu' | 'Asia/Thimphu' | 'Asia/Tokyo' | 'Asia/Tomsk' | 'Asia/Ujung_Pandang' | 'Asia/Ulaanbaatar' | 'Asia/Ulan_Bator' | 'Asia/Urumqi' | 'Asia/Ust-Nera' | 'Asia/Vientiane' | 'Asia/Vladivostok' | 'Asia/Yakutsk' | 'Asia/Yangon' | 'Asia/Yekaterinburg' | 'Asia/Yerevan' | 'Atlantic/Azores' | 'Atlantic/Bermuda' | 'Atlantic/Canary' | 'Atlantic/Cape_Verde' | 'Atlantic/Faeroe' | 'Atlantic/Faroe' | 'Atlantic/Jan_Mayen' | 'Atlantic/Madeira' | 'Atlantic/Reykjavik' | 'Atlantic/South_Georgia' | 'Atlantic/St_Helena' | 'Atlantic/Stanley' | 'Australia/ACT' | 'Australia/Adelaide' | 'Australia/Brisbane' | 'Australia/Broken_Hill' | 'Australia/Canberra' | 'Australia/Currie' | 'Australia/Darwin' | 'Australia/Eucla' | 'Australia/Hobart' | 'Australia/LHI' | 'Australia/Lindeman' | 'Australia/Lord_Howe' | 'Australia/Melbourne' | 'Australia/NSW' | 'Australia/North' | 'Australia/Perth' | 'Australia/Queensland' | 'Australia/South' | 'Australia/Sydney' | 'Australia/Tasmania' | 'Australia/Victoria' | 'Australia/West' | 'Australia/Yancowinna' | 'Brazil/Acre' | 'Brazil/DeNoronha' | 'Brazil/East' | 'Brazil/West' | 'Canada/Atlantic' | 'Canada/Central' | 'Canada/Eastern' | 'Canada/Mountain' | 'Canada/Newfoundland' | 'Canada/Pacific' | 'Canada/Saskatchewan' | 'Canada/Yukon' | 'Chile/Continental' | 'Chile/EasterIsland' | 'Europe/Amsterdam' | 'Europe/Andorra' | 'Europe/Astrakhan' | 'Europe/Athens' | 'Europe/Belfast' | 'Europe/Belgrade' | 'Europe/Berlin' | 'Europe/Bratislava' | 'Europe/Brussels' | 'Europe/Bucharest' | 'Europe/Budapest' | 'Europe/Busingen' | 'Europe/Chisinau' | 'Europe/Copenhagen' | 'Europe/Dublin' | 'Europe/Gibraltar' | 'Europe/Guernsey' | 'Europe/Helsinki' | 'Europe/Isle_of_Man' | 'Europe/Istanbul' | 'Europe/Jersey' | 'Europe/Kaliningrad' | 'Europe/Kiev' | 'Europe/Kirov' | 'Europe/Kyiv' | 'Europe/Lisbon' | 'Europe/Ljubljana' | 'Europe/London' | 'Europe/Luxembourg' | 'Europe/Madrid' | 'Europe/Malta' | 'Europe/Mariehamn' | 'Europe/Minsk' | 'Europe/Monaco' | 'Europe/Moscow' | 'Europe/Nicosia' | 'Europe/Oslo' | 'Europe/Paris' | 'Europe/Podgorica' | 'Europe/Prague' | 'Europe/Riga' | 'Europe/Rome' | 'Europe/Samara' | 'Europe/San_Marino' | 'Europe/Sarajevo' | 'Europe/Saratov' | 'Europe/Simferopol' | 'Europe/Skopje' | 'Europe/Sofia' | 'Europe/Stockholm' | 'Europe/Tallinn' | 'Europe/Tirane' | 'Europe/Tiraspol' | 'Europe/Ulyanovsk' | 'Europe/Uzhgorod' | 'Europe/Vaduz' | 'Europe/Vatican' | 'Europe/Vienna' | 'Europe/Vilnius' | 'Europe/Volgograd' | 'Europe/Warsaw' | 'Europe/Zagreb' | 'Europe/Zaporozhye' | 'Europe/Zurich' | 'Indian/Antananarivo' | 'Indian/Chagos' | 'Indian/Christmas' | 'Indian/Cocos' | 'Indian/Comoro' | 'Indian/Kerguelen' | 'Indian/Mahe' | 'Indian/Maldives' | 'Indian/Mauritius' | 'Indian/Mayotte' | 'Indian/Reunion' | 'Mexico/BajaNorte' | 'Mexico/BajaSur' | 'Mexico/General' | 'Pacific/Apia' | 'Pacific/Auckland' | 'Pacific/Bougainville' | 'Pacific/Chatham' | 'Pacific/Chuuk' | 'Pacific/Easter' | 'Pacific/Efate' | 'Pacific/Enderbury' | 'Pacific/Fakaofo' | 'Pacific/Fiji' | 'Pacific/Funafuti' | 'Pacific/Galapagos' | 'Pacific/Gambier' | 'Pacific/Guadalcanal' | 'Pacific/Guam' | 'Pacific/Honolulu' | 'Pacific/Johnston' | 'Pacific/Kanton' | 'Pacific/Kiritimati' | 'Pacific/Kosrae' | 'Pacific/Kwajalein' | 'Pacific/Majuro' | 'Pacific/Marquesas' | 'Pacific/Midway' | 'Pacific/Nauru' | 'Pacific/Niue' | 'Pacific/Norfolk' | 'Pacific/Noumea' | 'Pacific/Pago_Pago' | 'Pacific/Palau' | 'Pacific/Pitcairn' | 'Pacific/Pohnpei' | 'Pacific/Ponape' | 'Pacific/Port_Moresby' | 'Pacific/Rarotonga' | 'Pacific/Saipan' | 'Pacific/Samoa' | 'Pacific/Tahiti' | 'Pacific/Tarawa' | 'Pacific/Tongatapu' | 'Pacific/Truk' | 'Pacific/Wake' | 'Pacific/Wallis' | 'Pacific/Yap' | 'US/Alaska' | 'US/Aleutian' | 'US/Arizona' | 'US/Central' | 'US/East-Indiana' | 'US/Eastern' | 'US/Hawaii' | 'US/Indiana-Starke' | 'US/Michigan' | 'US/Mountain' | 'US/Pacific' | 'US/Samoa' | 'UTC'; export type User = { - readonly id: number; - /** - * Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters - */ - username: string; - /** - * Full name, will be shown in some places instead of username - */ - display_name?: string; - /** - * Staff status - * Designates whether the user can log into this admin site. - */ - readonly is_staff: boolean; - /** - * Active - * Designates whether this user should be treated as active. Unselect this instead of deleting accounts. - */ - readonly is_active: boolean; - picture: Picture; -}; - -/** - * * `metric` - Metric (mL, L) - * * `imperial` - Imperial (oz, pint) - */ -export type VolumeDisplayUnitsEnum = 'metric' | 'imperial'; - -export type AuthenticationTokenWritable = { - /** - * Namespace for this token. - */ - auth_device: string; - /** - * Actual value of the token, unique within an auth_device. - */ - token_value: string; - /** - * A human-readable alias for the token, for example "Guest Key". - */ - nice_name?: string | null; - /** - * A secret value necessary to authenticate with this token. - */ - pin?: string | null; - user?: number | null; - /** - * Whether this token is considered active. - */ - enabled?: boolean; - /** - * Date after which token is treated as disabled. - */ - expire_time?: string | null; -}; - -export type BeverageWritable = { - /** - * Name of the beverage, such as "Potrero Pale". - */ - name: string; - producer_id: number; - beverage_type?: BeverageTypeEnumWritable; - /** - * Beverage style within type, eg "Pale Ale", "Pinot Noir". - */ - style?: string | null; - /** - * Free-form description of the beverage. - */ - description?: string | null; - /** - * Date of production, for wines or special/seasonal editions - */ - vintage_year?: string | null; - /** - * ABV Percentage - * Alcohol by volume, as percentage (0.0-100.0). - */ - abv_percent?: number | null; - /** - * Calories per mL of beverage. - */ - calories_per_ml?: number | null; - /** - * Carbohydrates per mL of beverage. - */ - carbs_per_ml?: number | null; - /** - * Color (Hex Value) - * Approximate beverage color - */ - color_hex?: string; - /** - * Original gravity (beer only). - */ - original_gravity?: number | null; - /** - * Final gravity (beer only). - */ - specific_gravity?: number | null; + readonly id: number; /** - * SRM Value - * Standard Reference Method value (beer only). + * Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters */ - srm?: number | null; + username: string; /** - * IBUs - * International Bittering Units value (beer only). + * Full name, will be shown in some places instead of username */ - ibu?: number | null; + display_name?: string; /** - * Star rating for beverage (0: worst, 5: best) + * Staff status + * Designates whether the user can log into this admin site. */ - star_rating?: number | null; + readonly is_staff: boolean; /** - * Untappd.com resource ID (beer only). + * Active + * Designates whether this user should be treated as active. Unselect this instead of deleting accounts. */ - untappd_beer_id?: number | null; + readonly is_active: boolean; + picture: Picture; }; +/** + * * `metric` - Metric (mL, L) + * * `imperial` - Imperial (oz, pint) + */ +export type VolumeDisplayUnitsEnum = 'metric' | 'imperial'; + /** * * `beer` - Beer * * `wine` - Wine @@ -5729,44 +6623,6 @@ export type BeverageTypeEnumWritable = 'beer' | 'wine' | 'soda' | 'kombucha' | ' */ export type CountryEnumWritable = 'AFG' | 'ALA' | 'ALB' | 'DZA' | 'ASM' | 'AND' | 'AGO' | 'AIA' | 'ATG' | 'ARG' | 'ARM' | 'ABW' | 'AUS' | 'AUT' | 'AZE' | 'BHS' | 'BHR' | 'BGD' | 'BRB' | 'BLR' | 'BEL' | 'BLZ' | 'BEN' | 'BMU' | 'BTN' | 'BOL' | 'BIH' | 'BWA' | 'BRA' | 'VGB' | 'BRN' | 'BGR' | 'BFA' | 'BDI' | 'KHM' | 'CMR' | 'CAN' | 'CPV' | 'CYM' | 'CAF' | 'TCD' | 'CIL' | 'CHL' | 'CHN' | 'HKG' | 'MAC' | 'COL' | 'COM' | 'COG' | 'COK' | 'CRI' | 'CIV' | 'HRV' | 'CUB' | 'CYP' | 'CZE' | 'PRK' | 'COD' | 'DNK' | 'DJI' | 'DMA' | 'DOM' | 'ECU' | 'EGY' | 'SLV' | 'GNQ' | 'ERI' | 'EST' | 'ETH' | 'FRO' | 'FLK' | 'FJI' | 'FIN' | 'FRA' | 'GUF' | 'PYF' | 'GAB' | 'GMB' | 'GEO' | 'DEU' | 'GHA' | 'GIB' | 'GRC' | 'GRL' | 'GRD' | 'GLP' | 'GUM' | 'GTM' | 'GGY' | 'GIN' | 'GNB' | 'GUY' | 'HTI' | 'VAT' | 'HND' | 'HUN' | 'ISL' | 'IND' | 'IDN' | 'IRN' | 'IRQ' | 'IRL' | 'IMN' | 'ISR' | 'ITA' | 'JAM' | 'JPN' | 'JEY' | 'JOR' | 'KAZ' | 'KEN' | 'KIR' | 'KWT' | 'KGZ' | 'LAO' | 'LVA' | 'LBN' | 'LSO' | 'LBR' | 'LBY' | 'LIE' | 'LTU' | 'LUX' | 'MKD' | 'MDG' | 'MWI' | 'MYS' | 'MDV' | 'MLI' | 'MLT' | 'MHL' | 'MTQ' | 'MRT' | 'MUS' | 'MYT' | 'MEX' | 'FSM' | 'MCO' | 'MNG' | 'MNE' | 'MSR' | 'MAR' | 'MOZ' | 'MMR' | 'NAM' | 'NRU' | 'NPL' | 'NLD' | 'ANT' | 'NCL' | 'NZL' | 'NIC' | 'NER' | 'NGA' | 'NIU' | 'NFK' | 'MNP' | 'NOR' | 'PSE' | 'OMN' | 'PAK' | 'PLW' | 'PAN' | 'PNG' | 'PRY' | 'PER' | 'PHL' | 'PCN' | 'POL' | 'PRT' | 'PRI' | 'QAT' | 'KOR' | 'MDA' | 'REU' | 'ROU' | 'RUS' | 'RWA' | 'BLM' | 'SHN' | 'KNA' | 'LCA' | 'MAF' | 'SPM' | 'VCT' | 'WSM' | 'SMR' | 'STP' | 'SAU' | 'SEN' | 'SRB' | 'SYC' | 'SLE' | 'SGP' | 'SVK' | 'SVN' | 'SLB' | 'SOM' | 'ZAF' | 'ESP' | 'LKA' | 'SDN' | 'SUR' | 'SJM' | 'SWZ' | 'SWE' | 'CHE' | 'SYR' | 'TJK' | 'THA' | 'TLS' | 'TGO' | 'TKL' | 'TON' | 'TTO' | 'TUN' | 'TUR' | 'TKM' | 'TCA' | 'TUV' | 'UGA' | 'UKR' | 'ARE' | 'GBR' | 'TZA' | 'USA' | 'VIR' | 'URY' | 'UZB' | 'VUT' | 'VEN' | 'VNM' | 'WLF' | 'ESH' | 'YEM' | 'ZMB' | 'ZWE'; -export type DrinkWritable = { - /** - * Comment from the drinker at the time of the pour. - */ - shout?: string | null; -}; - -export type KegWritable = { - /** - * Keg container type, used to initialize keg's full volume - * - * * `mini` - Mini Keg (5 L) - * * `corny-2_5-gal` - Corny Keg (2.5 gal) - * * `corny-3-gal` - Corny Keg (3.0 gal) - * * `corny` - Corny Keg (5 gal) - * * `sixth` - Sixth Barrel (5.17 gal) - * * `euro-30-liter` - European DIN (30 L) - * * `euro-half` - European Half Barrel (50 L) - * * `quarter` - Quarter Barrel (7.75 gal) - * * `euro` - European Full Barrel (100 L) - * * `half-barrel` - Half Barrel (15.5 gal) - * * `other` - Other - */ - keg_type?: KegTypeEnumWritable; - /** - * Full volume of this Keg; usually set automatically from keg_type. - */ - full_volume_ml?: number; - /** - * User-visible description of the Keg. - */ - description?: string | null; - /** - * Private notes about this keg, viewable only by admins. - */ - notes?: string | null; -}; - /** * * `available` - Available * * `on_tap` - On tap @@ -5774,21 +6630,6 @@ export type KegWritable = { */ export type KegStatusEnumWritable = 'available' | 'on_tap' | 'finished'; -export type KegTapWritable = { - /** - * The display name for this tap, for example, "Main Tap". - */ - name: string; - /** - * Private notes about this tap. - */ - notes?: string | null; - /** - * Position relative to other taps when sorting (0=first). - */ - sort_order?: number; -}; - /** * * `mini` - Mini Keg (5 L) * * `corny-2_5-gal` - Corny Keg (2.5 gal) @@ -5804,181 +6645,6 @@ export type KegTapWritable = { */ export type KegTypeEnumWritable = 'mini' | 'corny-2_5-gal' | 'corny-3-gal' | 'corny' | 'sixth' | 'euro-30-liter' | 'euro-half' | 'quarter' | 'euro' | 'half-barrel' | 'other'; -export type PaginatedAuthenticationTokenListWritable = { - next?: string | null; - previous?: string | null; - results: Array; -}; - -export type PaginatedBeverageListWritable = { - next?: string | null; - previous?: string | null; - results: Array; -}; - -export type PaginatedDrinkListWritable = { - next?: string | null; - previous?: string | null; - results: Array; -}; - -export type PaginatedKegListWritable = { - next?: string | null; - previous?: string | null; - results: Array; -}; - -export type PaginatedKegTapListWritable = { - next?: string | null; - previous?: string | null; - results: Array; -}; - -export type PaginatedSystemEventListWritable = { - next?: string | null; - previous?: string | null; - results: Array; -}; - -export type PatchedAuthenticationTokenWritable = { - /** - * Namespace for this token. - */ - auth_device?: string; - /** - * Actual value of the token, unique within an auth_device. - */ - token_value?: string; - /** - * A human-readable alias for the token, for example "Guest Key". - */ - nice_name?: string | null; - /** - * A secret value necessary to authenticate with this token. - */ - pin?: string | null; - user?: number | null; - /** - * Whether this token is considered active. - */ - enabled?: boolean; - /** - * Date after which token is treated as disabled. - */ - expire_time?: string | null; -}; - -export type PatchedBeverageWritable = { - /** - * Name of the beverage, such as "Potrero Pale". - */ - name?: string; - producer_id?: number; - beverage_type?: BeverageTypeEnumWritable; - /** - * Beverage style within type, eg "Pale Ale", "Pinot Noir". - */ - style?: string | null; - /** - * Free-form description of the beverage. - */ - description?: string | null; - /** - * Date of production, for wines or special/seasonal editions - */ - vintage_year?: string | null; - /** - * ABV Percentage - * Alcohol by volume, as percentage (0.0-100.0). - */ - abv_percent?: number | null; - /** - * Calories per mL of beverage. - */ - calories_per_ml?: number | null; - /** - * Carbohydrates per mL of beverage. - */ - carbs_per_ml?: number | null; - /** - * Color (Hex Value) - * Approximate beverage color - */ - color_hex?: string; - /** - * Original gravity (beer only). - */ - original_gravity?: number | null; - /** - * Final gravity (beer only). - */ - specific_gravity?: number | null; - /** - * SRM Value - * Standard Reference Method value (beer only). - */ - srm?: number | null; - /** - * IBUs - * International Bittering Units value (beer only). - */ - ibu?: number | null; - /** - * Star rating for beverage (0: worst, 5: best) - */ - star_rating?: number | null; - /** - * Untappd.com resource ID (beer only). - */ - untappd_beer_id?: number | null; -}; - -export type PatchedKegWritable = { - /** - * Keg container type, used to initialize keg's full volume - * - * * `mini` - Mini Keg (5 L) - * * `corny-2_5-gal` - Corny Keg (2.5 gal) - * * `corny-3-gal` - Corny Keg (3.0 gal) - * * `corny` - Corny Keg (5 gal) - * * `sixth` - Sixth Barrel (5.17 gal) - * * `euro-30-liter` - European DIN (30 L) - * * `euro-half` - European Half Barrel (50 L) - * * `quarter` - Quarter Barrel (7.75 gal) - * * `euro` - European Full Barrel (100 L) - * * `half-barrel` - Half Barrel (15.5 gal) - * * `other` - Other - */ - keg_type?: KegTypeEnumWritable; - /** - * Full volume of this Keg; usually set automatically from keg_type. - */ - full_volume_ml?: number; - /** - * User-visible description of the Keg. - */ - description?: string | null; - /** - * Private notes about this keg, viewable only by admins. - */ - notes?: string | null; -}; - -export type PatchedKegTapWritable = { - /** - * The display name for this tap, for example, "Main Tap". - */ - name?: string; - /** - * Private notes about this tap. - */ - notes?: string | null; - /** - * Position relative to other taps when sorting (0=first). - */ - sort_order?: number; -}; - /** * * `public` - Public: Browsing does not require login * * `members` - Members only: Must log in to browse @@ -5993,24 +6659,6 @@ export type PrivacyEnumWritable = 'public' | 'members' | 'staff'; */ export type RegistrationModeEnumWritable = 'public' | 'member-invite-only' | 'staff-invite-only'; -export type SystemEventWritable = { - /** - * Type of event. - * - * * `drink_poured` - Drink poured - * * `session_started` - Session started - * * `session_joined` - User joined session - * * `keg_tapped` - Keg tapped - * * `keg_volume_low` - Keg volume low - * * `keg_ended` - Keg ended - */ - kind: SystemEventKindEnumWritable; - /** - * Time of the event. - */ - time: string; -}; - /** * * `drink_poured` - Drink poured * * `session_started` - Session started @@ -6021,15 +6669,6 @@ export type SystemEventWritable = { */ export type SystemEventKindEnumWritable = 'drink_poured' | 'session_started' | 'session_joined' | 'keg_tapped' | 'keg_volume_low' | 'keg_ended'; -/** - * A summarized system status status, with the most common "current status" data. - */ -export type SystemStatusWritable = { - site: KegbotSite; - taps: Array; - events: Array; -}; - /** * * `f` - Fahrenheit * * `c` - Celsius @@ -6566,7 +7205,7 @@ export type TimezoneEnumWritable = 'Africa/Abidjan' | 'Africa/Accra' | 'Africa/A export type VolumeDisplayUnitsEnumWritable = 'metric' | 'imperial'; export type AccountActivateCreateData = { - body: ActivateAccountRequest; + body: ActivateAccountRequestRequest; path?: never; query?: never; url: '/api/account/activate'; @@ -6579,7 +7218,7 @@ export type AccountActivateCreateResponses = { export type AccountActivateCreateResponse = AccountActivateCreateResponses[keyof AccountActivateCreateResponses]; export type AccountConfirmEmailCreateData = { - body: ConfirmEmailRequest; + body: ConfirmEmailRequestRequest; path?: never; query?: never; url: '/api/account/confirm-email'; @@ -6592,7 +7231,7 @@ export type AccountConfirmEmailCreateResponses = { export type AccountConfirmEmailCreateResponse = AccountConfirmEmailCreateResponses[keyof AccountConfirmEmailCreateResponses]; export type AccountEmailCreateData = { - body: EmailChangeRequest; + body: EmailChangeRequestRequest; path?: never; query?: never; url: '/api/account/email'; @@ -6605,7 +7244,7 @@ export type AccountEmailCreateResponses = { export type AccountEmailCreateResponse = AccountEmailCreateResponses[keyof AccountEmailCreateResponses]; export type AccountMugshotCreateData = { - body: PictureUploadRequest; + body: PictureUploadRequestRequest; path?: never; query?: never; url: '/api/account/mugshot'; @@ -6618,7 +7257,7 @@ export type AccountMugshotCreateResponses = { export type AccountMugshotCreateResponse = AccountMugshotCreateResponses[keyof AccountMugshotCreateResponses]; export type AccountPasswordCreateData = { - body: PasswordChangeRequest; + body: PasswordChangeRequestRequest; path?: never; query?: never; url: '/api/account/password'; @@ -6720,7 +7359,7 @@ export type AdminDashboardRetrieveResponses = { export type AdminDashboardRetrieveResponse = AdminDashboardRetrieveResponses[keyof AdminDashboardRetrieveResponses]; export type AdminEmailTestCreateData = { - body: EmailTestRequest; + body: EmailTestRequestRequest; path?: never; query?: never; url: '/api/admin/email-test'; @@ -6821,7 +7460,7 @@ export type ApiKeysListResponses = { export type ApiKeysListResponse = ApiKeysListResponses[keyof ApiKeysListResponses]; export type ApiKeysCreateData = { - body: ApiKey; + body: ApiKeyRequest; path?: never; query?: never; url: '/api/api-keys'; @@ -6873,7 +7512,7 @@ export type ApiKeysRetrieveResponses = { export type ApiKeysRetrieveResponse = ApiKeysRetrieveResponses[keyof ApiKeysRetrieveResponses]; export type ApiKeysPartialUpdateData = { - body?: PatchedApiKey; + body?: PatchedApiKeyRequest; path: { /** * A unique integer value identifying this api key. @@ -6891,7 +7530,7 @@ export type ApiKeysPartialUpdateResponses = { export type ApiKeysPartialUpdateResponse = ApiKeysPartialUpdateResponses[keyof ApiKeysPartialUpdateResponses]; export type ApiKeysUpdateData = { - body: ApiKey; + body: ApiKeyRequest; path: { /** * A unique integer value identifying this api key. @@ -6935,7 +7574,7 @@ export type AuthTokensListResponses = { export type AuthTokensListResponse = AuthTokensListResponses[keyof AuthTokensListResponses]; export type AuthTokensCreateData = { - body: AuthenticationTokenWritable; + body: AuthenticationTokenRequest; path?: never; query?: never; url: '/api/auth-tokens'; @@ -6987,7 +7626,7 @@ export type AuthTokensRetrieveResponses = { export type AuthTokensRetrieveResponse = AuthTokensRetrieveResponses[keyof AuthTokensRetrieveResponses]; export type AuthTokensPartialUpdateData = { - body?: PatchedAuthenticationTokenWritable; + body?: PatchedAuthenticationTokenRequest; path: { /** * A unique integer value identifying this authentication token. @@ -7005,7 +7644,7 @@ export type AuthTokensPartialUpdateResponses = { export type AuthTokensPartialUpdateResponse = AuthTokensPartialUpdateResponses[keyof AuthTokensPartialUpdateResponses]; export type AuthTokensUpdateData = { - body: AuthenticationTokenWritable; + body: AuthenticationTokenRequest; path: { /** * A unique integer value identifying this authentication token. @@ -7023,7 +7662,7 @@ export type AuthTokensUpdateResponses = { export type AuthTokensUpdateResponse = AuthTokensUpdateResponses[keyof AuthTokensUpdateResponses]; export type AuthLoginCreateData = { - body: Login; + body: LoginRequest; path?: never; query?: never; url: '/api/auth/login'; @@ -7049,7 +7688,7 @@ export type AuthLogoutCreateResponses = { export type AuthLogoutCreateResponse = AuthLogoutCreateResponses[keyof AuthLogoutCreateResponses]; export type AuthPasswordResetCreateData = { - body: PasswordResetRequest; + body: PasswordResetRequestRequest; path?: never; query?: never; url: '/api/auth/password-reset'; @@ -7062,7 +7701,7 @@ export type AuthPasswordResetCreateResponses = { export type AuthPasswordResetCreateResponse = AuthPasswordResetCreateResponses[keyof AuthPasswordResetCreateResponses]; export type AuthPasswordResetConfirmCreateData = { - body: PasswordResetConfirmRequest; + body: PasswordResetConfirmRequestRequest; path?: never; query?: never; url: '/api/auth/password-reset-confirm'; @@ -7075,7 +7714,7 @@ export type AuthPasswordResetConfirmCreateResponses = { export type AuthPasswordResetConfirmCreateResponse = AuthPasswordResetConfirmCreateResponses[keyof AuthPasswordResetConfirmCreateResponses]; export type AuthRegisterCreateData = { - body: RegisterRequest; + body: RegisterRequestRequest; path?: never; query?: never; url: '/api/auth/register'; @@ -7110,7 +7749,7 @@ export type BeverageProducersListResponses = { export type BeverageProducersListResponse = BeverageProducersListResponses[keyof BeverageProducersListResponses]; export type BeverageProducersCreateData = { - body: BeverageProducer; + body: BeverageProducerRequest; path?: never; query?: never; url: '/api/beverage-producers'; @@ -7162,7 +7801,7 @@ export type BeverageProducersRetrieveResponses = { export type BeverageProducersRetrieveResponse = BeverageProducersRetrieveResponses[keyof BeverageProducersRetrieveResponses]; export type BeverageProducersPartialUpdateData = { - body?: PatchedBeverageProducer; + body?: PatchedBeverageProducerRequest; path: { /** * A unique integer value identifying this beverage producer. @@ -7180,7 +7819,7 @@ export type BeverageProducersPartialUpdateResponses = { export type BeverageProducersPartialUpdateResponse = BeverageProducersPartialUpdateResponses[keyof BeverageProducersPartialUpdateResponses]; export type BeverageProducersUpdateData = { - body: BeverageProducer; + body: BeverageProducerRequest; path: { /** * A unique integer value identifying this beverage producer. @@ -7198,7 +7837,7 @@ export type BeverageProducersUpdateResponses = { export type BeverageProducersUpdateResponse = BeverageProducersUpdateResponses[keyof BeverageProducersUpdateResponses]; export type BeverageProducersPictureCreateData = { - body: PictureUploadRequest; + body: PictureUploadRequestRequest; path: { /** * A unique integer value identifying this beverage producer. @@ -7238,7 +7877,7 @@ export type BeveragesListResponses = { export type BeveragesListResponse = BeveragesListResponses[keyof BeveragesListResponses]; export type BeveragesCreateData = { - body: BeverageWritable; + body: BeverageRequest; path?: never; query?: never; url: '/api/beverages'; @@ -7290,7 +7929,7 @@ export type BeveragesRetrieveResponses = { export type BeveragesRetrieveResponse = BeveragesRetrieveResponses[keyof BeveragesRetrieveResponses]; export type BeveragesPartialUpdateData = { - body?: PatchedBeverageWritable; + body?: PatchedBeverageRequest; path: { /** * A unique integer value identifying this beverage. @@ -7308,7 +7947,7 @@ export type BeveragesPartialUpdateResponses = { export type BeveragesPartialUpdateResponse = BeveragesPartialUpdateResponses[keyof BeveragesPartialUpdateResponses]; export type BeveragesUpdateData = { - body: BeverageWritable; + body: BeverageRequest; path: { /** * A unique integer value identifying this beverage. @@ -7326,7 +7965,7 @@ export type BeveragesUpdateResponses = { export type BeveragesUpdateResponse = BeveragesUpdateResponses[keyof BeveragesUpdateResponses]; export type BeveragesPictureCreateData = { - body: PictureUploadRequest; + body: PictureUploadRequestRequest; path: { /** * A unique integer value identifying this beverage. @@ -7366,7 +8005,7 @@ export type ControllersListResponses = { export type ControllersListResponse = ControllersListResponses[keyof ControllersListResponses]; export type ControllersCreateData = { - body: Controller; + body: ControllerRequest; path?: never; query?: never; url: '/api/controllers'; @@ -7418,7 +8057,7 @@ export type ControllersRetrieveResponses = { export type ControllersRetrieveResponse = ControllersRetrieveResponses[keyof ControllersRetrieveResponses]; export type ControllersPartialUpdateData = { - body?: PatchedController; + body?: PatchedControllerRequest; path: { /** * A unique integer value identifying this controller. @@ -7436,7 +8075,7 @@ export type ControllersPartialUpdateResponses = { export type ControllersPartialUpdateResponse = ControllersPartialUpdateResponses[keyof ControllersPartialUpdateResponses]; export type ControllersUpdateData = { - body: Controller; + body: ControllerRequest; path: { /** * A unique integer value identifying this controller. @@ -7476,7 +8115,7 @@ export type DevicesListResponses = { export type DevicesListResponse = DevicesListResponses[keyof DevicesListResponses]; export type DevicesCreateData = { - body?: Device; + body?: DeviceRequest; path?: never; query?: never; url: '/api/devices'; @@ -7528,7 +8167,7 @@ export type DevicesRetrieveResponses = { export type DevicesRetrieveResponse = DevicesRetrieveResponses[keyof DevicesRetrieveResponses]; export type DevicesPartialUpdateData = { - body?: PatchedDevice; + body?: PatchedDeviceRequest; path: { /** * A unique integer value identifying this device. @@ -7546,7 +8185,7 @@ export type DevicesPartialUpdateResponses = { export type DevicesPartialUpdateResponse = DevicesPartialUpdateResponses[keyof DevicesPartialUpdateResponses]; export type DevicesUpdateData = { - body?: Device; + body?: DeviceRequest; path: { /** * A unique integer value identifying this device. @@ -7629,7 +8268,7 @@ export type DrinksRetrieveResponses = { export type DrinksRetrieveResponse = DrinksRetrieveResponses[keyof DrinksRetrieveResponses]; export type DrinksPartialUpdateData = { - body?: PatchedDrinkUpdateRequest; + body?: PatchedDrinkUpdateRequestRequest; path: { /** * A unique integer value identifying this drink. @@ -7668,7 +8307,7 @@ export type DrinksPictureDestroyResponses = { export type DrinksPictureDestroyResponse = DrinksPictureDestroyResponses[keyof DrinksPictureDestroyResponses]; export type DrinksPictureCreateData = { - body: PictureUploadRequest; + body: PictureUploadRequestRequest; path: { /** * A unique integer value identifying this drink. @@ -7686,7 +8325,7 @@ export type DrinksPictureCreateResponses = { export type DrinksPictureCreateResponse = DrinksPictureCreateResponses[keyof DrinksPictureCreateResponses]; export type DrinksReassignCreateData = { - body: DrinkReassignRequest; + body: DrinkReassignRequestRequest; path: { /** * A unique integer value identifying this drink. @@ -7782,7 +8421,7 @@ export type FlowMetersListResponses = { export type FlowMetersListResponse = FlowMetersListResponses[keyof FlowMetersListResponses]; export type FlowMetersCreateData = { - body: FlowMeter; + body: FlowMeterRequest; path?: never; query?: never; url: '/api/flow-meters'; @@ -7834,7 +8473,7 @@ export type FlowMetersRetrieveResponses = { export type FlowMetersRetrieveResponse = FlowMetersRetrieveResponses[keyof FlowMetersRetrieveResponses]; export type FlowMetersPartialUpdateData = { - body?: PatchedFlowMeter; + body?: PatchedFlowMeterRequest; path: { /** * A unique integer value identifying this flow meter. @@ -7852,7 +8491,7 @@ export type FlowMetersPartialUpdateResponses = { export type FlowMetersPartialUpdateResponse = FlowMetersPartialUpdateResponses[keyof FlowMetersPartialUpdateResponses]; export type FlowMetersUpdateData = { - body: FlowMeter; + body: FlowMeterRequest; path: { /** * A unique integer value identifying this flow meter. @@ -7892,7 +8531,7 @@ export type FlowTogglesListResponses = { export type FlowTogglesListResponse = FlowTogglesListResponses[keyof FlowTogglesListResponses]; export type FlowTogglesCreateData = { - body: FlowToggle; + body: FlowToggleRequest; path?: never; query?: never; url: '/api/flow-toggles'; @@ -7944,7 +8583,7 @@ export type FlowTogglesRetrieveResponses = { export type FlowTogglesRetrieveResponse = FlowTogglesRetrieveResponses[keyof FlowTogglesRetrieveResponses]; export type FlowTogglesPartialUpdateData = { - body?: PatchedFlowToggle; + body?: PatchedFlowToggleRequest; path: { /** * A unique integer value identifying this flow toggle. @@ -7962,7 +8601,7 @@ export type FlowTogglesPartialUpdateResponses = { export type FlowTogglesPartialUpdateResponse = FlowTogglesPartialUpdateResponses[keyof FlowTogglesPartialUpdateResponses]; export type FlowTogglesUpdateData = { - body: FlowToggle; + body: FlowToggleRequest; path: { /** * A unique integer value identifying this flow toggle. @@ -8002,7 +8641,7 @@ export type InvitationsListResponses = { export type InvitationsListResponse = InvitationsListResponses[keyof InvitationsListResponses]; export type InvitationsCreateData = { - body: Invitation; + body: InvitationRequest; path?: never; query?: never; url: '/api/invitations'; @@ -8084,7 +8723,7 @@ export type KegsListResponses = { export type KegsListResponse = KegsListResponses[keyof KegsListResponses]; export type KegsCreateData = { - body?: KegCreateRequest; + body?: KegCreateRequestRequest; path?: never; query?: never; url: '/api/kegs'; @@ -8136,7 +8775,7 @@ export type KegsRetrieveResponses = { export type KegsRetrieveResponse = KegsRetrieveResponses[keyof KegsRetrieveResponses]; export type KegsPartialUpdateData = { - body?: PatchedKegWritable; + body?: PatchedKegRequest; path: { /** * A unique integer value identifying this keg. @@ -8154,7 +8793,7 @@ export type KegsPartialUpdateResponses = { export type KegsPartialUpdateResponse = KegsPartialUpdateResponses[keyof KegsPartialUpdateResponses]; export type KegsUpdateData = { - body?: KegWritable; + body?: KegRequest; path: { /** * A unique integer value identifying this keg. @@ -8208,7 +8847,7 @@ export type KegsReactivateCreateResponses = { export type KegsReactivateCreateResponse = KegsReactivateCreateResponses[keyof KegsReactivateCreateResponses]; export type KegsSpillCreateData = { - body: KegSpillRequest; + body: KegSpillRequestRequest; path: { /** * A unique integer value identifying this keg. @@ -8268,7 +8907,7 @@ export type NotificationSettingsListResponses = { export type NotificationSettingsListResponse = NotificationSettingsListResponses[keyof NotificationSettingsListResponses]; export type NotificationSettingsCreateData = { - body: NotificationSettings; + body: NotificationSettingsRequest; path?: never; query?: never; url: '/api/notification-settings'; @@ -8320,7 +8959,7 @@ export type NotificationSettingsRetrieveResponses = { export type NotificationSettingsRetrieveResponse = NotificationSettingsRetrieveResponses[keyof NotificationSettingsRetrieveResponses]; export type NotificationSettingsPartialUpdateData = { - body?: PatchedNotificationSettings; + body?: PatchedNotificationSettingsRequest; path: { /** * A unique integer value identifying this notification settings. @@ -8338,7 +8977,7 @@ export type NotificationSettingsPartialUpdateResponses = { export type NotificationSettingsPartialUpdateResponse = NotificationSettingsPartialUpdateResponses[keyof NotificationSettingsPartialUpdateResponses]; export type NotificationSettingsUpdateData = { - body: NotificationSettings; + body: NotificationSettingsRequest; path: { /** * A unique integer value identifying this notification settings. @@ -8378,7 +9017,7 @@ export type PluginDataListResponses = { export type PluginDataListResponse = PluginDataListResponses[keyof PluginDataListResponses]; export type PluginDataCreateData = { - body: PluginData; + body: PluginDataRequest; path?: never; query?: never; url: '/api/plugin-data'; @@ -8430,7 +9069,7 @@ export type PluginDataRetrieveResponses = { export type PluginDataRetrieveResponse = PluginDataRetrieveResponses[keyof PluginDataRetrieveResponses]; export type PluginDataPartialUpdateData = { - body?: PatchedPluginData; + body?: PatchedPluginDataRequest; path: { /** * A unique integer value identifying this plugin data. @@ -8448,7 +9087,7 @@ export type PluginDataPartialUpdateResponses = { export type PluginDataPartialUpdateResponse = PluginDataPartialUpdateResponses[keyof PluginDataPartialUpdateResponses]; export type PluginDataUpdateData = { - body: PluginData; + body: PluginDataRequest; path: { /** * A unique integer value identifying this plugin data. @@ -8542,7 +9181,7 @@ export type SessionsCurrentRetrieveResponses = { export type SessionsCurrentRetrieveResponse = SessionsCurrentRetrieveResponses[keyof SessionsCurrentRetrieveResponses]; export type SetupAdminUserCreateData = { - body: SetupAdminUserRequest; + body: SetupAdminUserRequestRequest; path?: never; query?: never; url: '/api/setup/admin-user'; @@ -8583,7 +9222,7 @@ export type SetupMigrateCreateResponses = { export type SetupMigrateCreateResponse = SetupMigrateCreateResponses[keyof SetupMigrateCreateResponses]; export type SetupSettingsCreateData = { - body?: SetupSiteSettingsRequest; + body?: SetupSiteSettingsRequestRequest; path?: never; query?: never; url: '/api/setup/settings'; @@ -8637,7 +9276,7 @@ export type SiteRetrieveResponses = { export type SiteRetrieveResponse = SiteRetrieveResponses[keyof SiteRetrieveResponses]; export type SitePartialUpdateData = { - body?: PatchedSiteSettings; + body?: PatchedSiteSettingsRequest; path?: never; query?: never; url: '/api/site'; @@ -8650,7 +9289,7 @@ export type SitePartialUpdateResponses = { export type SitePartialUpdateResponse = SitePartialUpdateResponses[keyof SitePartialUpdateResponses]; export type SiteBackgroundImageCreateData = { - body: PictureUploadRequest; + body: PictureUploadRequestRequest; path?: never; query?: never; url: '/api/site/background-image'; @@ -8753,7 +9392,7 @@ export type TapsListResponses = { export type TapsListResponse = TapsListResponses[keyof TapsListResponses]; export type TapsCreateData = { - body: KegTapWritable; + body: KegTapRequest; path?: never; query?: never; url: '/api/taps'; @@ -8805,7 +9444,7 @@ export type TapsRetrieveResponses = { export type TapsRetrieveResponse = TapsRetrieveResponses[keyof TapsRetrieveResponses]; export type TapsPartialUpdateData = { - body?: PatchedKegTapWritable; + body?: PatchedKegTapRequest; path: { /** * A unique integer value identifying this keg tap. @@ -8823,7 +9462,7 @@ export type TapsPartialUpdateResponses = { export type TapsPartialUpdateResponse = TapsPartialUpdateResponses[keyof TapsPartialUpdateResponses]; export type TapsUpdateData = { - body: KegTapWritable; + body: KegTapRequest; path: { /** * A unique integer value identifying this keg tap. @@ -8841,7 +9480,7 @@ export type TapsUpdateResponses = { export type TapsUpdateResponse = TapsUpdateResponses[keyof TapsUpdateResponses]; export type TapsAttachKegCreateData = { - body: TapAttachKegRequest; + body: TapAttachKegRequestRequest; path: { /** * A unique integer value identifying this keg tap. @@ -8859,7 +9498,7 @@ export type TapsAttachKegCreateResponses = { export type TapsAttachKegCreateResponse = TapsAttachKegCreateResponses[keyof TapsAttachKegCreateResponses]; export type TapsConnectMeterCreateData = { - body: TapConnectMeterRequest; + body: TapConnectMeterRequestRequest; path: { /** * A unique integer value identifying this keg tap. @@ -8877,7 +9516,7 @@ export type TapsConnectMeterCreateResponses = { export type TapsConnectMeterCreateResponse = TapsConnectMeterCreateResponses[keyof TapsConnectMeterCreateResponses]; export type TapsConnectThermoCreateData = { - body: TapConnectThermoRequest; + body: TapConnectThermoRequestRequest; path: { /** * A unique integer value identifying this keg tap. @@ -8895,7 +9534,7 @@ export type TapsConnectThermoCreateResponses = { export type TapsConnectThermoCreateResponse = TapsConnectThermoCreateResponses[keyof TapsConnectThermoCreateResponses]; export type TapsConnectToggleCreateData = { - body: TapConnectToggleRequest; + body: TapConnectToggleRequestRequest; path: { /** * A unique integer value identifying this keg tap. @@ -8931,7 +9570,7 @@ export type TapsEndKegCreateResponses = { export type TapsEndKegCreateResponse = TapsEndKegCreateResponses[keyof TapsEndKegCreateResponses]; export type TapsRecordDrinkCreateData = { - body: TapRecordDrinkRequest; + body: TapRecordDrinkRequestRequest; path: { /** * A unique integer value identifying this keg tap. @@ -8949,7 +9588,7 @@ export type TapsRecordDrinkCreateResponses = { export type TapsRecordDrinkCreateResponse = TapsRecordDrinkCreateResponses[keyof TapsRecordDrinkCreateResponses]; export type TapsStartKegCreateData = { - body?: NewKegRequest; + body?: NewKegRequestRequest; path: { /** * A unique integer value identifying this keg tap. @@ -9032,7 +9671,7 @@ export type ThermoSensorsListResponses = { export type ThermoSensorsListResponse = ThermoSensorsListResponses[keyof ThermoSensorsListResponses]; export type ThermoSensorsCreateData = { - body: ThermoSensor; + body: ThermoSensorRequest; path?: never; query?: never; url: '/api/thermo-sensors'; @@ -9084,7 +9723,7 @@ export type ThermoSensorsRetrieveResponses = { export type ThermoSensorsRetrieveResponse = ThermoSensorsRetrieveResponses[keyof ThermoSensorsRetrieveResponses]; export type ThermoSensorsPartialUpdateData = { - body?: PatchedThermoSensor; + body?: PatchedThermoSensorRequest; path: { /** * A unique integer value identifying this thermo sensor. @@ -9102,7 +9741,7 @@ export type ThermoSensorsPartialUpdateResponses = { export type ThermoSensorsPartialUpdateResponse = ThermoSensorsPartialUpdateResponses[keyof ThermoSensorsPartialUpdateResponses]; export type ThermoSensorsUpdateData = { - body: ThermoSensor; + body: ThermoSensorRequest; path: { /** * A unique integer value identifying this thermo sensor. @@ -9145,7 +9784,7 @@ export type UsersListResponses = { export type UsersListResponse = UsersListResponses[keyof UsersListResponses]; export type UsersCreateData = { - body: AdminUserCreateRequest; + body: AdminUserCreateRequestRequest; path?: never; query?: never; url: '/api/users'; @@ -9173,7 +9812,7 @@ export type UsersRetrieveResponses = { export type UsersRetrieveResponse = UsersRetrieveResponses[keyof UsersRetrieveResponses]; export type UsersPartialUpdateData = { - body?: PatchedAdminUserUpdateRequest; + body?: PatchedAdminUserUpdateRequestRequest; path: { username: string; }; @@ -9188,7 +9827,7 @@ export type UsersPartialUpdateResponses = { export type UsersPartialUpdateResponse = UsersPartialUpdateResponses[keyof UsersPartialUpdateResponses]; export type UsersSetPasswordCreateData = { - body: SetPasswordRequest; + body: SetPasswordRequestRequest; path: { username: string; }; @@ -9233,7 +9872,7 @@ export type UsersMeRetrieveResponses = { export type UsersMeRetrieveResponse = UsersMeRetrieveResponses[keyof UsersMeRetrieveResponses]; export type UsersMePartialUpdateData = { - body?: PatchedProfileUpdateRequest; + body?: PatchedProfileUpdateRequestRequest; path?: never; query?: never; url: '/api/users/me'; diff --git a/web-ui/components/require-auth.tsx b/web-ui/components/require-auth.tsx new file mode 100644 index 000000000..ed1bcc0a7 --- /dev/null +++ b/web-ui/components/require-auth.tsx @@ -0,0 +1,19 @@ +import type { ReactNode } from "react"; +import { Navigate, useLocation } from "react-router"; +import { useCurrentUser } from "@/components/current-user-context"; + +/** Redirects anonymous users to login (with a return path). */ +export function RequireAuth({ children, staff = false }: { children: ReactNode; staff?: boolean }) { + const { user } = useCurrentUser(); + const location = useLocation(); + + if (!user) { + return ( + + ); + } + if (staff && !user.is_staff) { + return ; + } + return <>{children}; +} diff --git a/web-ui/routes.tsx b/web-ui/routes.tsx index 85379da8d..ef73ee2df 100644 --- a/web-ui/routes.tsx +++ b/web-ui/routes.tsx @@ -1,7 +1,14 @@ import { Navigate, Route, Routes, useParams } from "react-router"; import { PrivacyGate } from "@/components/privacy-gate"; +import { RequireAuth } from "@/components/require-auth"; import { MainLayout } from "@/layout/main-layout"; import { MinimalLayout } from "@/layout/minimal-layout"; +import { AccountLayout } from "@/views/account/account-layout"; +import { AccountView } from "@/views/account/account-view"; +import { InviteView } from "@/views/account/invite-view"; +import { NotificationsView } from "@/views/account/notifications-view"; +import { PasswordView } from "@/views/account/password-view"; +import { ProfileView } from "@/views/account/profile-view"; import { ActivateView } from "@/views/auth/activate-view"; import { ConfirmEmailView } from "@/views/auth/confirm-email-view"; import { LoginView } from "@/views/auth/login-view"; @@ -79,6 +86,20 @@ export function AppRoutes() { } /> } /> } /> + + + + } + > + } /> + } /> + } /> + } /> + } /> + {/* Legacy short URLs. */} diff --git a/web-ui/schema.yaml b/web-ui/schema.yaml index fb73a93d5..892b884f9 100644 --- a/web-ui/schema.yaml +++ b/web-ui/schema.yaml @@ -15,13 +15,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ActivateAccountRequest' + $ref: '#/components/schemas/ActivateAccountRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ActivateAccountRequest' + $ref: '#/components/schemas/ActivateAccountRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ActivateAccountRequest' + $ref: '#/components/schemas/ActivateAccountRequestRequest' required: true responses: '200': @@ -41,13 +41,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ConfirmEmailRequest' + $ref: '#/components/schemas/ConfirmEmailRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ConfirmEmailRequest' + $ref: '#/components/schemas/ConfirmEmailRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ConfirmEmailRequest' + $ref: '#/components/schemas/ConfirmEmailRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -70,13 +70,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/EmailChangeRequest' + $ref: '#/components/schemas/EmailChangeRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/EmailChangeRequest' + $ref: '#/components/schemas/EmailChangeRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/EmailChangeRequest' + $ref: '#/components/schemas/EmailChangeRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -98,10 +98,10 @@ paths: content: multipart/form-data: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -123,13 +123,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PasswordChangeRequest' + $ref: '#/components/schemas/PasswordChangeRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PasswordChangeRequest' + $ref: '#/components/schemas/PasswordChangeRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PasswordChangeRequest' + $ref: '#/components/schemas/PasswordChangeRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -252,13 +252,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/EmailTestRequest' + $ref: '#/components/schemas/EmailTestRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/EmailTestRequest' + $ref: '#/components/schemas/EmailTestRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/EmailTestRequest' + $ref: '#/components/schemas/EmailTestRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -409,13 +409,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ApiKey' + $ref: '#/components/schemas/ApiKeyRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ApiKey' + $ref: '#/components/schemas/ApiKeyRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ApiKey' + $ref: '#/components/schemas/ApiKeyRequest' required: true security: - apiKeyBasicAuth: [] @@ -466,13 +466,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ApiKey' + $ref: '#/components/schemas/ApiKeyRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ApiKey' + $ref: '#/components/schemas/ApiKeyRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ApiKey' + $ref: '#/components/schemas/ApiKeyRequest' required: true security: - apiKeyBasicAuth: [] @@ -500,13 +500,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedApiKey' + $ref: '#/components/schemas/PatchedApiKeyRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedApiKey' + $ref: '#/components/schemas/PatchedApiKeyRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedApiKey' + $ref: '#/components/schemas/PatchedApiKeyRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -589,13 +589,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AuthenticationToken' + $ref: '#/components/schemas/AuthenticationTokenRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/AuthenticationToken' + $ref: '#/components/schemas/AuthenticationTokenRequest' multipart/form-data: schema: - $ref: '#/components/schemas/AuthenticationToken' + $ref: '#/components/schemas/AuthenticationTokenRequest' required: true security: - apiKeyBasicAuth: [] @@ -646,13 +646,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AuthenticationToken' + $ref: '#/components/schemas/AuthenticationTokenRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/AuthenticationToken' + $ref: '#/components/schemas/AuthenticationTokenRequest' multipart/form-data: schema: - $ref: '#/components/schemas/AuthenticationToken' + $ref: '#/components/schemas/AuthenticationTokenRequest' required: true security: - apiKeyBasicAuth: [] @@ -680,13 +680,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedAuthenticationToken' + $ref: '#/components/schemas/PatchedAuthenticationTokenRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedAuthenticationToken' + $ref: '#/components/schemas/PatchedAuthenticationTokenRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedAuthenticationToken' + $ref: '#/components/schemas/PatchedAuthenticationTokenRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -724,13 +724,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Login' + $ref: '#/components/schemas/LoginRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Login' + $ref: '#/components/schemas/LoginRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Login' + $ref: '#/components/schemas/LoginRequest' required: true responses: '200': @@ -764,13 +764,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PasswordResetRequest' + $ref: '#/components/schemas/PasswordResetRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PasswordResetRequest' + $ref: '#/components/schemas/PasswordResetRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PasswordResetRequest' + $ref: '#/components/schemas/PasswordResetRequestRequest' required: true responses: '200': @@ -789,13 +789,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PasswordResetConfirmRequest' + $ref: '#/components/schemas/PasswordResetConfirmRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PasswordResetConfirmRequest' + $ref: '#/components/schemas/PasswordResetConfirmRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PasswordResetConfirmRequest' + $ref: '#/components/schemas/PasswordResetConfirmRequestRequest' required: true responses: '200': @@ -814,13 +814,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/RegisterRequest' + $ref: '#/components/schemas/RegisterRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/RegisterRequest' + $ref: '#/components/schemas/RegisterRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/RegisterRequest' + $ref: '#/components/schemas/RegisterRequestRequest' required: true responses: '200': @@ -867,13 +867,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/BeverageProducer' + $ref: '#/components/schemas/BeverageProducerRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/BeverageProducer' + $ref: '#/components/schemas/BeverageProducerRequest' multipart/form-data: schema: - $ref: '#/components/schemas/BeverageProducer' + $ref: '#/components/schemas/BeverageProducerRequest' required: true security: - apiKeyBasicAuth: [] @@ -924,13 +924,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/BeverageProducer' + $ref: '#/components/schemas/BeverageProducerRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/BeverageProducer' + $ref: '#/components/schemas/BeverageProducerRequest' multipart/form-data: schema: - $ref: '#/components/schemas/BeverageProducer' + $ref: '#/components/schemas/BeverageProducerRequest' required: true security: - apiKeyBasicAuth: [] @@ -958,13 +958,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedBeverageProducer' + $ref: '#/components/schemas/PatchedBeverageProducerRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedBeverageProducer' + $ref: '#/components/schemas/PatchedBeverageProducerRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedBeverageProducer' + $ref: '#/components/schemas/PatchedBeverageProducerRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -1010,10 +1010,10 @@ paths: content: multipart/form-data: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -1063,13 +1063,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Beverage' + $ref: '#/components/schemas/BeverageRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Beverage' + $ref: '#/components/schemas/BeverageRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Beverage' + $ref: '#/components/schemas/BeverageRequest' required: true security: - apiKeyBasicAuth: [] @@ -1120,13 +1120,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Beverage' + $ref: '#/components/schemas/BeverageRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Beverage' + $ref: '#/components/schemas/BeverageRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Beverage' + $ref: '#/components/schemas/BeverageRequest' required: true security: - apiKeyBasicAuth: [] @@ -1154,13 +1154,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedBeverage' + $ref: '#/components/schemas/PatchedBeverageRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedBeverage' + $ref: '#/components/schemas/PatchedBeverageRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedBeverage' + $ref: '#/components/schemas/PatchedBeverageRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -1206,10 +1206,10 @@ paths: content: multipart/form-data: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -1259,13 +1259,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Controller' + $ref: '#/components/schemas/ControllerRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Controller' + $ref: '#/components/schemas/ControllerRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Controller' + $ref: '#/components/schemas/ControllerRequest' required: true security: - apiKeyBasicAuth: [] @@ -1316,13 +1316,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Controller' + $ref: '#/components/schemas/ControllerRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Controller' + $ref: '#/components/schemas/ControllerRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Controller' + $ref: '#/components/schemas/ControllerRequest' required: true security: - apiKeyBasicAuth: [] @@ -1350,13 +1350,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedController' + $ref: '#/components/schemas/PatchedControllerRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedController' + $ref: '#/components/schemas/PatchedControllerRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedController' + $ref: '#/components/schemas/PatchedControllerRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -1429,13 +1429,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Device' + $ref: '#/components/schemas/DeviceRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Device' + $ref: '#/components/schemas/DeviceRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Device' + $ref: '#/components/schemas/DeviceRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -1491,13 +1491,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Device' + $ref: '#/components/schemas/DeviceRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Device' + $ref: '#/components/schemas/DeviceRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Device' + $ref: '#/components/schemas/DeviceRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -1527,13 +1527,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedDevice' + $ref: '#/components/schemas/PatchedDeviceRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedDevice' + $ref: '#/components/schemas/PatchedDeviceRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedDevice' + $ref: '#/components/schemas/PatchedDeviceRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -1664,13 +1664,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedDrinkUpdateRequest' + $ref: '#/components/schemas/PatchedDrinkUpdateRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedDrinkUpdateRequest' + $ref: '#/components/schemas/PatchedDrinkUpdateRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedDrinkUpdateRequest' + $ref: '#/components/schemas/PatchedDrinkUpdateRequestRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -1721,10 +1721,10 @@ paths: content: multipart/form-data: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -1771,13 +1771,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DrinkReassignRequest' + $ref: '#/components/schemas/DrinkReassignRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/DrinkReassignRequest' + $ref: '#/components/schemas/DrinkReassignRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/DrinkReassignRequest' + $ref: '#/components/schemas/DrinkReassignRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -1919,13 +1919,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FlowMeter' + $ref: '#/components/schemas/FlowMeterRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/FlowMeter' + $ref: '#/components/schemas/FlowMeterRequest' multipart/form-data: schema: - $ref: '#/components/schemas/FlowMeter' + $ref: '#/components/schemas/FlowMeterRequest' required: true security: - apiKeyBasicAuth: [] @@ -1976,13 +1976,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FlowMeter' + $ref: '#/components/schemas/FlowMeterRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/FlowMeter' + $ref: '#/components/schemas/FlowMeterRequest' multipart/form-data: schema: - $ref: '#/components/schemas/FlowMeter' + $ref: '#/components/schemas/FlowMeterRequest' required: true security: - apiKeyBasicAuth: [] @@ -2010,13 +2010,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedFlowMeter' + $ref: '#/components/schemas/PatchedFlowMeterRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedFlowMeter' + $ref: '#/components/schemas/PatchedFlowMeterRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedFlowMeter' + $ref: '#/components/schemas/PatchedFlowMeterRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -2083,13 +2083,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FlowToggle' + $ref: '#/components/schemas/FlowToggleRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/FlowToggle' + $ref: '#/components/schemas/FlowToggleRequest' multipart/form-data: schema: - $ref: '#/components/schemas/FlowToggle' + $ref: '#/components/schemas/FlowToggleRequest' required: true security: - apiKeyBasicAuth: [] @@ -2140,13 +2140,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FlowToggle' + $ref: '#/components/schemas/FlowToggleRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/FlowToggle' + $ref: '#/components/schemas/FlowToggleRequest' multipart/form-data: schema: - $ref: '#/components/schemas/FlowToggle' + $ref: '#/components/schemas/FlowToggleRequest' required: true security: - apiKeyBasicAuth: [] @@ -2174,13 +2174,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedFlowToggle' + $ref: '#/components/schemas/PatchedFlowToggleRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedFlowToggle' + $ref: '#/components/schemas/PatchedFlowToggleRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedFlowToggle' + $ref: '#/components/schemas/PatchedFlowToggleRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -2255,13 +2255,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Invitation' + $ref: '#/components/schemas/InvitationRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Invitation' + $ref: '#/components/schemas/InvitationRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Invitation' + $ref: '#/components/schemas/InvitationRequest' required: true security: - apiKeyBasicAuth: [] @@ -2378,13 +2378,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/KegCreateRequest' + $ref: '#/components/schemas/KegCreateRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/KegCreateRequest' + $ref: '#/components/schemas/KegCreateRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/KegCreateRequest' + $ref: '#/components/schemas/KegCreateRequestRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -2442,13 +2442,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Keg' + $ref: '#/components/schemas/KegRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/Keg' + $ref: '#/components/schemas/KegRequest' multipart/form-data: schema: - $ref: '#/components/schemas/Keg' + $ref: '#/components/schemas/KegRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -2479,13 +2479,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedKeg' + $ref: '#/components/schemas/PatchedKegRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedKeg' + $ref: '#/components/schemas/PatchedKegRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedKeg' + $ref: '#/components/schemas/PatchedKegRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -2581,13 +2581,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/KegSpillRequest' + $ref: '#/components/schemas/KegSpillRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/KegSpillRequest' + $ref: '#/components/schemas/KegSpillRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/KegSpillRequest' + $ref: '#/components/schemas/KegSpillRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -2661,13 +2661,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/NotificationSettings' + $ref: '#/components/schemas/NotificationSettingsRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/NotificationSettings' + $ref: '#/components/schemas/NotificationSettingsRequest' multipart/form-data: schema: - $ref: '#/components/schemas/NotificationSettings' + $ref: '#/components/schemas/NotificationSettingsRequest' required: true security: - apiKeyBasicAuth: [] @@ -2718,13 +2718,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/NotificationSettings' + $ref: '#/components/schemas/NotificationSettingsRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/NotificationSettings' + $ref: '#/components/schemas/NotificationSettingsRequest' multipart/form-data: schema: - $ref: '#/components/schemas/NotificationSettings' + $ref: '#/components/schemas/NotificationSettingsRequest' required: true security: - apiKeyBasicAuth: [] @@ -2752,13 +2752,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedNotificationSettings' + $ref: '#/components/schemas/PatchedNotificationSettingsRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedNotificationSettings' + $ref: '#/components/schemas/PatchedNotificationSettingsRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedNotificationSettings' + $ref: '#/components/schemas/PatchedNotificationSettingsRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -2831,13 +2831,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PluginData' + $ref: '#/components/schemas/PluginDataRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PluginData' + $ref: '#/components/schemas/PluginDataRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PluginData' + $ref: '#/components/schemas/PluginDataRequest' required: true security: - apiKeyBasicAuth: [] @@ -2894,13 +2894,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PluginData' + $ref: '#/components/schemas/PluginDataRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PluginData' + $ref: '#/components/schemas/PluginDataRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PluginData' + $ref: '#/components/schemas/PluginDataRequest' required: true security: - apiKeyBasicAuth: [] @@ -2931,13 +2931,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedPluginData' + $ref: '#/components/schemas/PatchedPluginDataRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedPluginData' + $ref: '#/components/schemas/PatchedPluginDataRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedPluginData' + $ref: '#/components/schemas/PatchedPluginDataRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -3083,13 +3083,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SetupAdminUserRequest' + $ref: '#/components/schemas/SetupAdminUserRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/SetupAdminUserRequest' + $ref: '#/components/schemas/SetupAdminUserRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/SetupAdminUserRequest' + $ref: '#/components/schemas/SetupAdminUserRequestRequest' required: true responses: '200': @@ -3135,13 +3135,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SetupSiteSettingsRequest' + $ref: '#/components/schemas/SetupSiteSettingsRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/SetupSiteSettingsRequest' + $ref: '#/components/schemas/SetupSiteSettingsRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/SetupSiteSettingsRequest' + $ref: '#/components/schemas/SetupSiteSettingsRequestRequest' responses: '200': content: @@ -3201,13 +3201,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedSiteSettings' + $ref: '#/components/schemas/PatchedSiteSettingsRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedSiteSettings' + $ref: '#/components/schemas/PatchedSiteSettingsRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedSiteSettings' + $ref: '#/components/schemas/PatchedSiteSettingsRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -3228,10 +3228,10 @@ paths: content: multipart/form-data: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PictureUploadRequest' + $ref: '#/components/schemas/PictureUploadRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -3380,13 +3380,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/KegTap' + $ref: '#/components/schemas/KegTapRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/KegTap' + $ref: '#/components/schemas/KegTapRequest' multipart/form-data: schema: - $ref: '#/components/schemas/KegTap' + $ref: '#/components/schemas/KegTapRequest' required: true security: - apiKeyBasicAuth: [] @@ -3445,13 +3445,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/KegTap' + $ref: '#/components/schemas/KegTapRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/KegTap' + $ref: '#/components/schemas/KegTapRequest' multipart/form-data: schema: - $ref: '#/components/schemas/KegTap' + $ref: '#/components/schemas/KegTapRequest' required: true security: - apiKeyBasicAuth: [] @@ -3483,13 +3483,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedKegTap' + $ref: '#/components/schemas/PatchedKegTapRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedKegTap' + $ref: '#/components/schemas/PatchedKegTapRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedKegTap' + $ref: '#/components/schemas/PatchedKegTapRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -3539,13 +3539,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TapAttachKegRequest' + $ref: '#/components/schemas/TapAttachKegRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/TapAttachKegRequest' + $ref: '#/components/schemas/TapAttachKegRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/TapAttachKegRequest' + $ref: '#/components/schemas/TapAttachKegRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -3574,13 +3574,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TapConnectMeterRequest' + $ref: '#/components/schemas/TapConnectMeterRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/TapConnectMeterRequest' + $ref: '#/components/schemas/TapConnectMeterRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/TapConnectMeterRequest' + $ref: '#/components/schemas/TapConnectMeterRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -3609,13 +3609,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TapConnectThermoRequest' + $ref: '#/components/schemas/TapConnectThermoRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/TapConnectThermoRequest' + $ref: '#/components/schemas/TapConnectThermoRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/TapConnectThermoRequest' + $ref: '#/components/schemas/TapConnectThermoRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -3644,13 +3644,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TapConnectToggleRequest' + $ref: '#/components/schemas/TapConnectToggleRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/TapConnectToggleRequest' + $ref: '#/components/schemas/TapConnectToggleRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/TapConnectToggleRequest' + $ref: '#/components/schemas/TapConnectToggleRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -3706,13 +3706,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TapRecordDrinkRequest' + $ref: '#/components/schemas/TapRecordDrinkRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/TapRecordDrinkRequest' + $ref: '#/components/schemas/TapRecordDrinkRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/TapRecordDrinkRequest' + $ref: '#/components/schemas/TapRecordDrinkRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -3741,13 +3741,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/NewKegRequest' + $ref: '#/components/schemas/NewKegRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/NewKegRequest' + $ref: '#/components/schemas/NewKegRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/NewKegRequest' + $ref: '#/components/schemas/NewKegRequestRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -3862,13 +3862,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ThermoSensor' + $ref: '#/components/schemas/ThermoSensorRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ThermoSensor' + $ref: '#/components/schemas/ThermoSensorRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ThermoSensor' + $ref: '#/components/schemas/ThermoSensorRequest' required: true security: - apiKeyBasicAuth: [] @@ -3919,13 +3919,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ThermoSensor' + $ref: '#/components/schemas/ThermoSensorRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ThermoSensor' + $ref: '#/components/schemas/ThermoSensorRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ThermoSensor' + $ref: '#/components/schemas/ThermoSensorRequest' required: true security: - apiKeyBasicAuth: [] @@ -3953,13 +3953,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedThermoSensor' + $ref: '#/components/schemas/PatchedThermoSensorRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedThermoSensor' + $ref: '#/components/schemas/PatchedThermoSensorRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedThermoSensor' + $ref: '#/components/schemas/PatchedThermoSensorRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -4052,13 +4052,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AdminUserCreateRequest' + $ref: '#/components/schemas/AdminUserCreateRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/AdminUserCreateRequest' + $ref: '#/components/schemas/AdminUserCreateRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/AdminUserCreateRequest' + $ref: '#/components/schemas/AdminUserCreateRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -4123,13 +4123,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedAdminUserUpdateRequest' + $ref: '#/components/schemas/PatchedAdminUserUpdateRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedAdminUserUpdateRequest' + $ref: '#/components/schemas/PatchedAdminUserUpdateRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedAdminUserUpdateRequest' + $ref: '#/components/schemas/PatchedAdminUserUpdateRequestRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -4157,13 +4157,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SetPasswordRequest' + $ref: '#/components/schemas/SetPasswordRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/SetPasswordRequest' + $ref: '#/components/schemas/SetPasswordRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/SetPasswordRequest' + $ref: '#/components/schemas/SetPasswordRequestRequest' required: true security: - apiKeyBasicAuth: [] @@ -4244,13 +4244,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedProfileUpdateRequest' + $ref: '#/components/schemas/PatchedProfileUpdateRequestRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedProfileUpdateRequest' + $ref: '#/components/schemas/PatchedProfileUpdateRequestRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedProfileUpdateRequest' + $ref: '#/components/schemas/PatchedProfileUpdateRequestRequest' security: - apiKeyBasicAuth: [] - cookieAuth: [] @@ -4263,11 +4263,12 @@ paths: description: '' components: schemas: - ActivateAccountRequest: + ActivateAccountRequestRequest: type: object properties: activation_key: type: string + minLength: 1 password: type: string minLength: 1 @@ -4291,11 +4292,12 @@ components: - num_new_users - num_users - redis_error - AdminUserCreateRequest: + AdminUserCreateRequestRequest: type: object properties: username: type: string + minLength: 1 maxLength: 30 pattern: ^[\w.@+-]+$ email: @@ -4349,6 +4351,21 @@ components: - is_active - key - user_id + ApiKeyRequest: + type: object + properties: + is_active: + type: boolean + description: + type: string + nullable: true + description: Information about this key. + created_time: + type: string + format: date-time + description: Time the key was created. + required: + - is_active AuthenticationToken: type: object properties: @@ -4373,10 +4390,6 @@ components: nullable: true description: A secret value necessary to authenticate with this token. maxLength: 256 - user: - type: integer - writeOnly: true - nullable: true user_id: type: integer nullable: true @@ -4401,6 +4414,44 @@ components: - id - token_value - user_id + AuthenticationTokenRequest: + type: object + properties: + auth_device: + type: string + minLength: 1 + description: Namespace for this token. + maxLength: 64 + token_value: + type: string + minLength: 1 + description: Actual value of the token, unique within an auth_device. + maxLength: 128 + nice_name: + type: string + nullable: true + description: A human-readable alias for the token, for example "Guest Key". + maxLength: 256 + pin: + type: string + nullable: true + description: A secret value necessary to authenticate with this token. + maxLength: 256 + user: + type: integer + writeOnly: true + nullable: true + enabled: + type: boolean + description: Whether this token is considered active. + expire_time: + type: string + format: date-time + nullable: true + description: Date after which token is treated as disabled. + required: + - auth_device + - token_value Beverage: type: object properties: @@ -4415,9 +4466,6 @@ components: allOf: - $ref: '#/components/schemas/BeverageProducer' readOnly: true - producer_id: - type: integer - writeOnly: true beverage_type: $ref: '#/components/schemas/BeverageTypeEnum' style: @@ -4501,7 +4549,6 @@ components: - name - picture - producer - - producer_id BeverageProducer: type: object properties: @@ -4788,206 +4835,594 @@ components: - id - name - picture - BeverageTypeEnum: - enum: - - beer - - wine - - soda - - kombucha - - other - type: string - description: |- - * `beer` - Beer - * `wine` - Wine - * `soda` - Soda - * `kombucha` - Kombucha - * `other` - Other/Unknown - ConfirmEmailRequest: - type: object - properties: - token: - type: string - required: - - token - Controller: + BeverageProducerRequest: type: object properties: - id: - type: integer - readOnly: true name: type: string - description: Identifying name for this device; must be unique. - maxLength: 128 - model_name: - type: string - nullable: true - description: Type of controller (optional). - maxLength: 128 - serial_number: - type: string - nullable: true - description: Serial number (optional). - maxLength: 128 - required: - - id - - name - CountryEnum: - enum: - - AFG - - ALA - - ALB - - DZA - - ASM - - AND - - AGO - - AIA - - ATG - - ARG - - ARM - - ABW - - AUS - - AUT - - AZE - - BHS - - BHR - - BGD - - BRB - - BLR - - BEL - - BLZ - - BEN - - BMU - - BTN - - BOL - - BIH - - BWA - - BRA - - VGB - - BRN - - BGR - - BFA - - BDI - - KHM - - CMR - - CAN - - CPV - - CYM - - CAF - - TCD - - CIL - - CHL - - CHN - - HKG - - MAC - - COL - - COM - - COG - - COK - - CRI - - CIV - - HRV - - CUB - - CYP - - CZE - - PRK - - COD - - DNK - - DJI - - DMA - - DOM - - ECU - - EGY - - SLV - - GNQ - - ERI - - EST - - ETH - - FRO - - FLK - - FJI - - FIN - - FRA - - GUF - - PYF - - GAB - - GMB - - GEO - - DEU - - GHA - - GIB - - GRC - - GRL - - GRD - - GLP - - GUM - - GTM - - GGY - - GIN - - GNB - - GUY - - HTI - - VAT - - HND - - HUN - - ISL - - IND - - IDN - - IRN - - IRQ - - IRL - - IMN - - ISR - - ITA - - JAM - - JPN - - JEY - - JOR - - KAZ - - KEN - - KIR - - KWT - - KGZ - - LAO - - LVA - - LBN - - LSO - - LBR - - LBY - - LIE - - LTU - - LUX - - MKD - - MDG - - MWI - - MYS - - MDV - - MLI - - MLT - - MHL - - MTQ - - MRT - - MUS - - MYT - - MEX - - FSM - - MCO - - MNG - - MNE - - MSR - - MAR - - MOZ - - MMR - - NAM - - NRU - - NPL - - NLD - - ANT - - NCL - - NZL - - NIC - - NER - - NGA + minLength: 1 + description: Name of the brewer + maxLength: 255 + country: + allOf: + - $ref: '#/components/schemas/CountryEnum' + description: |- + Country of origin + + * `AFG` - Afghanistan + * `ALA` - Aland Islands + * `ALB` - Albania + * `DZA` - Algeria + * `ASM` - American Samoa + * `AND` - Andorra + * `AGO` - Angola + * `AIA` - Anguilla + * `ATG` - Antigua and Barbuda + * `ARG` - Argentina + * `ARM` - Armenia + * `ABW` - Aruba + * `AUS` - Australia + * `AUT` - Austria + * `AZE` - Azerbaijan + * `BHS` - Bahamas + * `BHR` - Bahrain + * `BGD` - Bangladesh + * `BRB` - Barbados + * `BLR` - Belarus + * `BEL` - Belgium + * `BLZ` - Belize + * `BEN` - Benin + * `BMU` - Bermuda + * `BTN` - Bhutan + * `BOL` - Bolivia + * `BIH` - Bosnia and Herzegovina + * `BWA` - Botswana + * `BRA` - Brazil + * `VGB` - British Virgin Islands + * `BRN` - Brunei Darussalam + * `BGR` - Bulgaria + * `BFA` - Burkina Faso + * `BDI` - Burundi + * `KHM` - Cambodia + * `CMR` - Cameroon + * `CAN` - Canada + * `CPV` - Cape Verde + * `CYM` - Cayman Islands + * `CAF` - Central African Republic + * `TCD` - Chad + * `CIL` - Channel Islands + * `CHL` - Chile + * `CHN` - China + * `HKG` - China - Hong Kong + * `MAC` - China - Macao + * `COL` - Colombia + * `COM` - Comoros + * `COG` - Congo + * `COK` - Cook Islands + * `CRI` - Costa Rica + * `CIV` - Cote d'Ivoire + * `HRV` - Croatia + * `CUB` - Cuba + * `CYP` - Cyprus + * `CZE` - Czech Republic + * `PRK` - Democratic People's Republic of Korea + * `COD` - Democratic Republic of the Congo + * `DNK` - Denmark + * `DJI` - Djibouti + * `DMA` - Dominica + * `DOM` - Dominican Republic + * `ECU` - Ecuador + * `EGY` - Egypt + * `SLV` - El Salvador + * `GNQ` - Equatorial Guinea + * `ERI` - Eritrea + * `EST` - Estonia + * `ETH` - Ethiopia + * `FRO` - Faeroe Islands + * `FLK` - Falkland Islands (Malvinas) + * `FJI` - Fiji + * `FIN` - Finland + * `FRA` - France + * `GUF` - French Guiana + * `PYF` - French Polynesia + * `GAB` - Gabon + * `GMB` - Gambia + * `GEO` - Georgia + * `DEU` - Germany + * `GHA` - Ghana + * `GIB` - Gibraltar + * `GRC` - Greece + * `GRL` - Greenland + * `GRD` - Grenada + * `GLP` - Guadeloupe + * `GUM` - Guam + * `GTM` - Guatemala + * `GGY` - Guernsey + * `GIN` - Guinea + * `GNB` - Guinea-Bissau + * `GUY` - Guyana + * `HTI` - Haiti + * `VAT` - Holy See (Vatican City) + * `HND` - Honduras + * `HUN` - Hungary + * `ISL` - Iceland + * `IND` - India + * `IDN` - Indonesia + * `IRN` - Iran + * `IRQ` - Iraq + * `IRL` - Ireland + * `IMN` - Isle of Man + * `ISR` - Israel + * `ITA` - Italy + * `JAM` - Jamaica + * `JPN` - Japan + * `JEY` - Jersey + * `JOR` - Jordan + * `KAZ` - Kazakhstan + * `KEN` - Kenya + * `KIR` - Kiribati + * `KWT` - Kuwait + * `KGZ` - Kyrgyzstan + * `LAO` - Lao People's Democratic Republic + * `LVA` - Latvia + * `LBN` - Lebanon + * `LSO` - Lesotho + * `LBR` - Liberia + * `LBY` - Libyan Arab Jamahiriya + * `LIE` - Liechtenstein + * `LTU` - Lithuania + * `LUX` - Luxembourg + * `MKD` - Macedonia + * `MDG` - Madagascar + * `MWI` - Malawi + * `MYS` - Malaysia + * `MDV` - Maldives + * `MLI` - Mali + * `MLT` - Malta + * `MHL` - Marshall Islands + * `MTQ` - Martinique + * `MRT` - Mauritania + * `MUS` - Mauritius + * `MYT` - Mayotte + * `MEX` - Mexico + * `FSM` - Micronesia, Federated States of + * `MCO` - Monaco + * `MNG` - Mongolia + * `MNE` - Montenegro + * `MSR` - Montserrat + * `MAR` - Morocco + * `MOZ` - Mozambique + * `MMR` - Myanmar + * `NAM` - Namibia + * `NRU` - Nauru + * `NPL` - Nepal + * `NLD` - Netherlands + * `ANT` - Netherlands Antilles + * `NCL` - New Caledonia + * `NZL` - New Zealand + * `NIC` - Nicaragua + * `NER` - Niger + * `NGA` - Nigeria + * `NIU` - Niue + * `NFK` - Norfolk Island + * `MNP` - Northern Mariana Islands + * `NOR` - Norway + * `PSE` - Occupied Palestinian Territory + * `OMN` - Oman + * `PAK` - Pakistan + * `PLW` - Palau + * `PAN` - Panama + * `PNG` - Papua New Guinea + * `PRY` - Paraguay + * `PER` - Peru + * `PHL` - Philippines + * `PCN` - Pitcairn + * `POL` - Poland + * `PRT` - Portugal + * `PRI` - Puerto Rico + * `QAT` - Qatar + * `KOR` - Republic of Korea + * `MDA` - Republic of Moldova + * `REU` - Reunion + * `ROU` - Romania + * `RUS` - Russian Federation + * `RWA` - Rwanda + * `BLM` - Saint-Barthelemy + * `SHN` - Saint Helena + * `KNA` - Saint Kitts and Nevis + * `LCA` - Saint Lucia + * `MAF` - Saint-Martin (French part) + * `SPM` - Saint Pierre and Miquelon + * `VCT` - Saint Vincent and the Grenadines + * `WSM` - Samoa + * `SMR` - San Marino + * `STP` - Sao Tome and Principe + * `SAU` - Saudi Arabia + * `SEN` - Senegal + * `SRB` - Serbia + * `SYC` - Seychelles + * `SLE` - Sierra Leone + * `SGP` - Singapore + * `SVK` - Slovakia + * `SVN` - Slovenia + * `SLB` - Solomon Islands + * `SOM` - Somalia + * `ZAF` - South Africa + * `ESP` - Spain + * `LKA` - Sri Lanka + * `SDN` - Sudan + * `SUR` - Suriname + * `SJM` - Svalbard and Jan Mayen Islands + * `SWZ` - Swaziland + * `SWE` - Sweden + * `CHE` - Switzerland + * `SYR` - Syrian Arab Republic + * `TJK` - Tajikistan + * `THA` - Thailand + * `TLS` - Timor-Leste + * `TGO` - Togo + * `TKL` - Tokelau + * `TON` - Tonga + * `TTO` - Trinidad and Tobago + * `TUN` - Tunisia + * `TUR` - Turkey + * `TKM` - Turkmenistan + * `TCA` - Turks and Caicos Islands + * `TUV` - Tuvalu + * `UGA` - Uganda + * `UKR` - Ukraine + * `ARE` - United Arab Emirates + * `GBR` - United Kingdom + * `TZA` - United Republic of Tanzania + * `USA` - United States of America + * `VIR` - United States Virgin Islands + * `URY` - Uruguay + * `UZB` - Uzbekistan + * `VUT` - Vanuatu + * `VEN` - Venezuela (Bolivarian Republic of) + * `VNM` - Viet Nam + * `WLF` - Wallis and Futuna Islands + * `ESH` - Western Sahara + * `YEM` - Yemen + * `ZMB` - Zambia + * `ZWE` - Zimbabwe + origin_state: + type: string + nullable: true + description: State of origin, if applicable + maxLength: 128 + origin_city: + type: string + nullable: true + description: City of origin, if known + maxLength: 128 + is_homebrew: + type: boolean + url: + nullable: true + description: Brewer's home page + oneOf: + - type: string + format: uri + maxLength: 200 + - type: string + maxLength: 0 + description: + type: string + nullable: true + description: A short description of the brewer + required: + - name + BeverageRequest: + type: object + properties: + name: + type: string + minLength: 1 + description: Name of the beverage, such as "Potrero Pale". + maxLength: 255 + producer_id: + type: integer + writeOnly: true + beverage_type: + $ref: '#/components/schemas/BeverageTypeEnum' + style: + type: string + nullable: true + description: Beverage style within type, eg "Pale Ale", "Pinot Noir". + maxLength: 255 + description: + type: string + nullable: true + description: Free-form description of the beverage. + vintage_year: + type: string + format: date + nullable: true + description: Date of production, for wines or special/seasonal editions + abv_percent: + type: number + format: double + nullable: true + title: ABV Percentage + description: Alcohol by volume, as percentage (0.0-100.0). + calories_per_ml: + type: number + format: double + nullable: true + description: Calories per mL of beverage. + carbs_per_ml: + type: number + format: double + nullable: true + description: Carbohydrates per mL of beverage. + color_hex: + type: string + minLength: 1 + title: Color (Hex Value) + description: Approximate beverage color + pattern: (^#[0-9a-zA-Z]{3}$)|(^#[0-9a-zA-Z]{6}$) + maxLength: 16 + original_gravity: + type: number + format: double + nullable: true + description: Original gravity (beer only). + specific_gravity: + type: number + format: double + nullable: true + description: Final gravity (beer only). + srm: + type: number + format: double + nullable: true + title: SRM Value + description: Standard Reference Method value (beer only). + ibu: + type: number + format: double + nullable: true + title: IBUs + description: International Bittering Units value (beer only). + star_rating: + type: number + format: double + maximum: 5.0 + minimum: 0.0 + nullable: true + description: 'Star rating for beverage (0: worst, 5: best)' + untappd_beer_id: + type: integer + maximum: 9223372036854775807 + minimum: -9223372036854775808 + format: int64 + nullable: true + description: Untappd.com resource ID (beer only). + required: + - name + - producer_id + BeverageTypeEnum: + enum: + - beer + - wine + - soda + - kombucha + - other + type: string + description: |- + * `beer` - Beer + * `wine` - Wine + * `soda` - Soda + * `kombucha` - Kombucha + * `other` - Other/Unknown + ConfirmEmailRequestRequest: + type: object + properties: + token: + type: string + minLength: 1 + required: + - token + Controller: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + description: Identifying name for this device; must be unique. + maxLength: 128 + model_name: + type: string + nullable: true + description: Type of controller (optional). + maxLength: 128 + serial_number: + type: string + nullable: true + description: Serial number (optional). + maxLength: 128 + required: + - id + - name + ControllerRequest: + type: object + properties: + name: + type: string + minLength: 1 + description: Identifying name for this device; must be unique. + maxLength: 128 + model_name: + type: string + nullable: true + description: Type of controller (optional). + maxLength: 128 + serial_number: + type: string + nullable: true + description: Serial number (optional). + maxLength: 128 + required: + - name + CountryEnum: + enum: + - AFG + - ALA + - ALB + - DZA + - ASM + - AND + - AGO + - AIA + - ATG + - ARG + - ARM + - ABW + - AUS + - AUT + - AZE + - BHS + - BHR + - BGD + - BRB + - BLR + - BEL + - BLZ + - BEN + - BMU + - BTN + - BOL + - BIH + - BWA + - BRA + - VGB + - BRN + - BGR + - BFA + - BDI + - KHM + - CMR + - CAN + - CPV + - CYM + - CAF + - TCD + - CIL + - CHL + - CHN + - HKG + - MAC + - COL + - COM + - COG + - COK + - CRI + - CIV + - HRV + - CUB + - CYP + - CZE + - PRK + - COD + - DNK + - DJI + - DMA + - DOM + - ECU + - EGY + - SLV + - GNQ + - ERI + - EST + - ETH + - FRO + - FLK + - FJI + - FIN + - FRA + - GUF + - PYF + - GAB + - GMB + - GEO + - DEU + - GHA + - GIB + - GRC + - GRL + - GRD + - GLP + - GUM + - GTM + - GGY + - GIN + - GNB + - GUY + - HTI + - VAT + - HND + - HUN + - ISL + - IND + - IDN + - IRN + - IRQ + - IRL + - IMN + - ISR + - ITA + - JAM + - JPN + - JEY + - JOR + - KAZ + - KEN + - KIR + - KWT + - KGZ + - LAO + - LVA + - LBN + - LSO + - LBR + - LBY + - LIE + - LTU + - LUX + - MKD + - MDG + - MWI + - MYS + - MDV + - MLI + - MLT + - MHL + - MTQ + - MRT + - MUS + - MYT + - MEX + - FSM + - MCO + - MNG + - MNE + - MSR + - MAR + - MOZ + - MMR + - NAM + - NRU + - NPL + - NLD + - ANT + - NCL + - NZL + - NIC + - NER + - NGA - NIU - NFK - MNP @@ -5368,6 +5803,17 @@ components: description: Time the device was created. required: - id + DeviceRequest: + type: object + properties: + name: + type: string + minLength: 1 + maxLength: 255 + created_time: + type: string + format: date-time + description: Time the device was created. Drink: type: object properties: @@ -5423,11 +5869,12 @@ components: - time - user - volume_ml - DrinkReassignRequest: + DrinkReassignRequestRequest: type: object properties: username: type: string + minLength: 1 required: - username DrinkingSession: @@ -5459,20 +5906,22 @@ components: - id - start_time - stats - EmailChangeRequest: + EmailChangeRequestRequest: type: object properties: email: type: string format: email + minLength: 1 required: - email - EmailTestRequest: + EmailTestRequestRequest: type: object properties: address: type: string format: email + minLength: 1 required: - address FlowMeter: @@ -5504,6 +5953,21 @@ components: - id - port_name - tap_id + FlowMeterRequest: + type: object + properties: + port_name: + type: string + minLength: 1 + description: Controller-specific data port name for this meter. + maxLength: 128 + ticks_per_ml: + type: number + format: double + description: 'Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), + 5.4 (SF800)' + required: + - port_name FlowToggle: type: object properties: @@ -5528,6 +5992,16 @@ components: - id - port_name - tap_id + FlowToggleRequest: + type: object + properties: + port_name: + type: string + minLength: 1 + description: Controller-specific data port name for this toggle. + maxLength: 128 + required: + - port_name Invitation: type: object properties: @@ -5558,6 +6032,22 @@ components: - id - invited_date - is_expired + InvitationRequest: + type: object + properties: + for_email: + type: string + format: email + minLength: 1 + description: Address this invitation was sent to. + maxLength: 254 + expires_date: + type: string + format: date-time + title: Date expries + description: Date and time after which the invitation is considered expired + required: + - for_email Keg: type: object properties: @@ -5648,7 +6138,7 @@ components: - start_time - stats - status - KegCreateRequest: + KegCreateRequestRequest: type: object description: |- Parameters for creating a keg. @@ -5687,7 +6177,39 @@ components: notes: type: string default: '' - KegSpillRequest: + KegRequest: + type: object + properties: + keg_type: + allOf: + - $ref: '#/components/schemas/KegTypeEnum' + description: |- + Keg container type, used to initialize keg's full volume + + * `mini` - Mini Keg (5 L) + * `corny-2_5-gal` - Corny Keg (2.5 gal) + * `corny-3-gal` - Corny Keg (3.0 gal) + * `corny` - Corny Keg (5 gal) + * `sixth` - Sixth Barrel (5.17 gal) + * `euro-30-liter` - European DIN (30 L) + * `euro-half` - European Half Barrel (50 L) + * `quarter` - Quarter Barrel (7.75 gal) + * `euro` - European Full Barrel (100 L) + * `half-barrel` - Half Barrel (15.5 gal) + * `other` - Other + full_volume_ml: + type: number + format: double + description: Full volume of this Keg; usually set automatically from keg_type. + description: + type: string + nullable: true + description: User-visible description of the Keg. + notes: + type: string + nullable: true + description: Private notes about this keg, viewable only by admins. + KegSpillRequestRequest: type: object properties: volume_ml: @@ -5742,6 +6264,26 @@ components: - id - name - temperature_sensor_id + KegTapRequest: + type: object + properties: + name: + type: string + minLength: 1 + description: The display name for this tap, for example, "Main Tap". + maxLength: 128 + notes: + type: string + nullable: true + description: Private notes about this tap. + sort_order: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Position relative to other taps when sorting (0=first). + required: + - name KegTypeEnum: enum: - mini @@ -6376,13 +6918,15 @@ components: - name - server_version - stats - Login: + LoginRequest: type: object properties: username: type: string + minLength: 1 password: type: string + minLength: 1 required: - password - username @@ -6422,7 +6966,7 @@ components: - sso_login_url - sso_logout_url - user - NewKegRequest: + NewKegRequestRequest: type: object description: |- Parameters for creating a keg. @@ -6485,6 +7029,28 @@ components: - backend - id - user_id + NotificationSettingsRequest: + type: object + properties: + backend: + type: string + minLength: 1 + description: Notification backend (dotted path) for these settings. + maxLength: 255 + keg_tapped: + type: boolean + description: Sent when a keg is activated. + session_started: + type: boolean + description: Sent when a new drinking session starts. + keg_volume_low: + type: boolean + description: Sent when a keg becomes low. + keg_ended: + type: boolean + description: Sent when a keg has been taken offline. + required: + - backend PaginatedApiKeyList: type: object required: @@ -6865,24 +7431,27 @@ components: type: array items: $ref: '#/components/schemas/User' - PasswordChangeRequest: + PasswordChangeRequestRequest: type: object properties: current_password: type: string + minLength: 1 new_password: type: string minLength: 1 required: - current_password - new_password - PasswordResetConfirmRequest: + PasswordResetConfirmRequestRequest: type: object properties: uid: type: string + minLength: 1 token: type: string + minLength: 1 new_password: type: string minLength: 1 @@ -6890,15 +7459,16 @@ components: - new_password - token - uid - PasswordResetRequest: + PasswordResetRequestRequest: type: object properties: email: type: string format: email + minLength: 1 required: - email - PatchedAdminUserUpdateRequest: + PatchedAdminUserUpdateRequestRequest: type: object properties: email: @@ -6914,27 +7484,11 @@ components: type: boolean is_active: type: boolean - PatchedApiKey: + PatchedApiKeyRequest: type: object properties: - id: - type: integer - readOnly: true - user_id: - type: integer - nullable: true - description: User receiving API access. - readOnly: true - device_id: - type: integer - nullable: true - description: Device this key is associated with. - readOnly: true is_active: type: boolean - key: - type: string - readOnly: true description: type: string nullable: true @@ -6943,18 +7497,17 @@ components: type: string format: date-time description: Time the key was created. - PatchedAuthenticationToken: + PatchedAuthenticationTokenRequest: type: object properties: - id: - type: integer - readOnly: true auth_device: type: string + minLength: 1 description: Namespace for this token. maxLength: 64 token_value: type: string + minLength: 1 description: Actual value of the token, unique within an auth_device. maxLength: 128 nice_name: @@ -6971,127 +7524,20 @@ components: type: integer writeOnly: true nullable: true - user_id: - type: integer - nullable: true - description: User in possession of and authenticated by this token. - readOnly: true enabled: type: boolean description: Whether this token is considered active. - created_time: - type: string - format: date-time - readOnly: true - description: Date token was first added to the system. expire_time: type: string format: date-time nullable: true description: Date after which token is treated as disabled. - PatchedBeverage: - type: object - properties: - id: - type: integer - readOnly: true - name: - type: string - description: Name of the beverage, such as "Potrero Pale". - maxLength: 255 - producer: - allOf: - - $ref: '#/components/schemas/BeverageProducer' - readOnly: true - producer_id: - type: integer - writeOnly: true - beverage_type: - $ref: '#/components/schemas/BeverageTypeEnum' - style: - type: string - nullable: true - description: Beverage style within type, eg "Pale Ale", "Pinot Noir". - maxLength: 255 - description: - type: string - nullable: true - description: Free-form description of the beverage. - picture: - allOf: - - $ref: '#/components/schemas/Picture' - readOnly: true - vintage_year: - type: string - format: date - nullable: true - description: Date of production, for wines or special/seasonal editions - abv_percent: - type: number - format: double - nullable: true - title: ABV Percentage - description: Alcohol by volume, as percentage (0.0-100.0). - calories_per_ml: - type: number - format: double - nullable: true - description: Calories per mL of beverage. - carbs_per_ml: - type: number - format: double - nullable: true - description: Carbohydrates per mL of beverage. - color_hex: - type: string - title: Color (Hex Value) - description: Approximate beverage color - pattern: (^#[0-9a-zA-Z]{3}$)|(^#[0-9a-zA-Z]{6}$) - maxLength: 16 - original_gravity: - type: number - format: double - nullable: true - description: Original gravity (beer only). - specific_gravity: - type: number - format: double - nullable: true - description: Final gravity (beer only). - srm: - type: number - format: double - nullable: true - title: SRM Value - description: Standard Reference Method value (beer only). - ibu: - type: number - format: double - nullable: true - title: IBUs - description: International Bittering Units value (beer only). - star_rating: - type: number - format: double - maximum: 5.0 - minimum: 0.0 - nullable: true - description: 'Star rating for beverage (0: worst, 5: best)' - untappd_beer_id: - type: integer - maximum: 9223372036854775807 - minimum: -9223372036854775808 - format: int64 - nullable: true - description: Untappd.com resource ID (beer only). - PatchedBeverageProducer: + PatchedBeverageProducerRequest: type: object properties: - id: - type: integer - readOnly: true name: type: string + minLength: 1 description: Name of the brewer maxLength: 255 country: @@ -7339,254 +7785,935 @@ components: * `ZWE` - Zimbabwe origin_state: type: string - nullable: true - description: State of origin, if applicable + nullable: true + description: State of origin, if applicable + maxLength: 128 + origin_city: + type: string + nullable: true + description: City of origin, if known + maxLength: 128 + is_homebrew: + type: boolean + url: + nullable: true + description: Brewer's home page + oneOf: + - type: string + format: uri + maxLength: 200 + - type: string + maxLength: 0 + description: + type: string + nullable: true + description: A short description of the brewer + PatchedBeverageRequest: + type: object + properties: + name: + type: string + minLength: 1 + description: Name of the beverage, such as "Potrero Pale". + maxLength: 255 + producer_id: + type: integer + writeOnly: true + beverage_type: + $ref: '#/components/schemas/BeverageTypeEnum' + style: + type: string + nullable: true + description: Beverage style within type, eg "Pale Ale", "Pinot Noir". + maxLength: 255 + description: + type: string + nullable: true + description: Free-form description of the beverage. + vintage_year: + type: string + format: date + nullable: true + description: Date of production, for wines or special/seasonal editions + abv_percent: + type: number + format: double + nullable: true + title: ABV Percentage + description: Alcohol by volume, as percentage (0.0-100.0). + calories_per_ml: + type: number + format: double + nullable: true + description: Calories per mL of beverage. + carbs_per_ml: + type: number + format: double + nullable: true + description: Carbohydrates per mL of beverage. + color_hex: + type: string + minLength: 1 + title: Color (Hex Value) + description: Approximate beverage color + pattern: (^#[0-9a-zA-Z]{3}$)|(^#[0-9a-zA-Z]{6}$) + maxLength: 16 + original_gravity: + type: number + format: double + nullable: true + description: Original gravity (beer only). + specific_gravity: + type: number + format: double + nullable: true + description: Final gravity (beer only). + srm: + type: number + format: double + nullable: true + title: SRM Value + description: Standard Reference Method value (beer only). + ibu: + type: number + format: double + nullable: true + title: IBUs + description: International Bittering Units value (beer only). + star_rating: + type: number + format: double + maximum: 5.0 + minimum: 0.0 + nullable: true + description: 'Star rating for beverage (0: worst, 5: best)' + untappd_beer_id: + type: integer + maximum: 9223372036854775807 + minimum: -9223372036854775808 + format: int64 + nullable: true + description: Untappd.com resource ID (beer only). + PatchedControllerRequest: + type: object + properties: + name: + type: string + minLength: 1 + description: Identifying name for this device; must be unique. + maxLength: 128 + model_name: + type: string + nullable: true + description: Type of controller (optional). + maxLength: 128 + serial_number: + type: string + nullable: true + description: Serial number (optional). + maxLength: 128 + PatchedDeviceRequest: + type: object + properties: + name: + type: string + minLength: 1 + maxLength: 255 + created_time: + type: string + format: date-time + description: Time the device was created. + PatchedDrinkUpdateRequestRequest: + type: object + properties: + shout: + type: string + volume_ml: + type: number + format: double + minimum: 0.0 + PatchedFlowMeterRequest: + type: object + properties: + port_name: + type: string + minLength: 1 + description: Controller-specific data port name for this meter. maxLength: 128 - origin_city: + ticks_per_ml: + type: number + format: double + description: 'Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), + 5.4 (SF800)' + PatchedFlowToggleRequest: + type: object + properties: + port_name: type: string - nullable: true - description: City of origin, if known + minLength: 1 + description: Controller-specific data port name for this toggle. maxLength: 128 - is_homebrew: - type: boolean - url: - nullable: true - description: Brewer's home page - oneOf: - - type: string - format: uri - maxLength: 200 - - type: string - maxLength: 0 + PatchedKegRequest: + type: object + properties: + keg_type: + allOf: + - $ref: '#/components/schemas/KegTypeEnum' + description: |- + Keg container type, used to initialize keg's full volume + + * `mini` - Mini Keg (5 L) + * `corny-2_5-gal` - Corny Keg (2.5 gal) + * `corny-3-gal` - Corny Keg (3.0 gal) + * `corny` - Corny Keg (5 gal) + * `sixth` - Sixth Barrel (5.17 gal) + * `euro-30-liter` - European DIN (30 L) + * `euro-half` - European Half Barrel (50 L) + * `quarter` - Quarter Barrel (7.75 gal) + * `euro` - European Full Barrel (100 L) + * `half-barrel` - Half Barrel (15.5 gal) + * `other` - Other + full_volume_ml: + type: number + format: double + description: Full volume of this Keg; usually set automatically from keg_type. description: type: string nullable: true - description: A short description of the brewer - picture: - allOf: - - $ref: '#/components/schemas/Picture' - readOnly: true - PatchedController: + description: User-visible description of the Keg. + notes: + type: string + nullable: true + description: Private notes about this keg, viewable only by admins. + PatchedKegTapRequest: type: object properties: - id: + name: + type: string + minLength: 1 + description: The display name for this tap, for example, "Main Tap". + maxLength: 128 + notes: + type: string + nullable: true + description: Private notes about this tap. + sort_order: + type: integer + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Position relative to other taps when sorting (0=first). + PatchedNotificationSettingsRequest: + type: object + properties: + backend: + type: string + minLength: 1 + description: Notification backend (dotted path) for these settings. + maxLength: 255 + keg_tapped: + type: boolean + description: Sent when a keg is activated. + session_started: + type: boolean + description: Sent when a new drinking session starts. + keg_volume_low: + type: boolean + description: Sent when a keg becomes low. + keg_ended: + type: boolean + description: Sent when a keg has been taken offline. + PatchedPluginDataRequest: + type: object + properties: + plugin_name: + type: string + minLength: 1 + description: Plugin short name + maxLength: 127 + key: + type: string + minLength: 1 + maxLength: 127 + value: {} + PatchedProfileUpdateRequestRequest: + type: object + properties: + display_name: + type: string + maxLength: 127 + PatchedSiteSettingsRequest: + type: object + description: Admin-editable site settings, covering the old settings forms. + properties: + title: + type: string + minLength: 1 + description: The title of this site. + maxLength: 64 + privacy: + allOf: + - $ref: '#/components/schemas/PrivacyEnum' + description: |- + Who can view Kegbot data? + + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + registration_mode: + allOf: + - $ref: '#/components/schemas/RegistrationModeEnum' + description: |- + Who can join this Kegbot from the web site? + + * `public` - Public: Anyone can register. + * `member-invite-only` - Member Invite: Must be invited by an existing member. + * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + enable_sensing: + type: boolean + description: Enable and show features related to volume sensing. + enable_users: + type: boolean + description: Enable user pour tracking. + volume_display_units: + allOf: + - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' + description: |- + Unit system to use when displaying volumetric data. + + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + temperature_display_units: + allOf: + - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' + description: |- + Unit system to use when displaying temperature data. + + * `f` - Fahrenheit + * `c` - Celsius + timezone: + allOf: + - $ref: '#/components/schemas/TimezoneEnum' + description: |- + Time zone for this system. + + * `Africa/Abidjan` - Africa/Abidjan + * `Africa/Accra` - Africa/Accra + * `Africa/Addis_Ababa` - Africa/Addis_Ababa + * `Africa/Algiers` - Africa/Algiers + * `Africa/Asmara` - Africa/Asmara + * `Africa/Asmera` - Africa/Asmera + * `Africa/Bamako` - Africa/Bamako + * `Africa/Bangui` - Africa/Bangui + * `Africa/Banjul` - Africa/Banjul + * `Africa/Bissau` - Africa/Bissau + * `Africa/Blantyre` - Africa/Blantyre + * `Africa/Brazzaville` - Africa/Brazzaville + * `Africa/Bujumbura` - Africa/Bujumbura + * `Africa/Cairo` - Africa/Cairo + * `Africa/Casablanca` - Africa/Casablanca + * `Africa/Ceuta` - Africa/Ceuta + * `Africa/Conakry` - Africa/Conakry + * `Africa/Dakar` - Africa/Dakar + * `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam + * `Africa/Djibouti` - Africa/Djibouti + * `Africa/Douala` - Africa/Douala + * `Africa/El_Aaiun` - Africa/El_Aaiun + * `Africa/Freetown` - Africa/Freetown + * `Africa/Gaborone` - Africa/Gaborone + * `Africa/Harare` - Africa/Harare + * `Africa/Johannesburg` - Africa/Johannesburg + * `Africa/Juba` - Africa/Juba + * `Africa/Kampala` - Africa/Kampala + * `Africa/Khartoum` - Africa/Khartoum + * `Africa/Kigali` - Africa/Kigali + * `Africa/Kinshasa` - Africa/Kinshasa + * `Africa/Lagos` - Africa/Lagos + * `Africa/Libreville` - Africa/Libreville + * `Africa/Lome` - Africa/Lome + * `Africa/Luanda` - Africa/Luanda + * `Africa/Lubumbashi` - Africa/Lubumbashi + * `Africa/Lusaka` - Africa/Lusaka + * `Africa/Malabo` - Africa/Malabo + * `Africa/Maputo` - Africa/Maputo + * `Africa/Maseru` - Africa/Maseru + * `Africa/Mbabane` - Africa/Mbabane + * `Africa/Mogadishu` - Africa/Mogadishu + * `Africa/Monrovia` - Africa/Monrovia + * `Africa/Nairobi` - Africa/Nairobi + * `Africa/Ndjamena` - Africa/Ndjamena + * `Africa/Niamey` - Africa/Niamey + * `Africa/Nouakchott` - Africa/Nouakchott + * `Africa/Ouagadougou` - Africa/Ouagadougou + * `Africa/Porto-Novo` - Africa/Porto-Novo + * `Africa/Sao_Tome` - Africa/Sao_Tome + * `Africa/Timbuktu` - Africa/Timbuktu + * `Africa/Tripoli` - Africa/Tripoli + * `Africa/Tunis` - Africa/Tunis + * `Africa/Windhoek` - Africa/Windhoek + * `America/Adak` - America/Adak + * `America/Anchorage` - America/Anchorage + * `America/Anguilla` - America/Anguilla + * `America/Antigua` - America/Antigua + * `America/Araguaina` - America/Araguaina + * `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires + * `America/Argentina/Catamarca` - America/Argentina/Catamarca + * `America/Argentina/ComodRivadavia` - America/Argentina/ComodRivadavia + * `America/Argentina/Cordoba` - America/Argentina/Cordoba + * `America/Argentina/Jujuy` - America/Argentina/Jujuy + * `America/Argentina/La_Rioja` - America/Argentina/La_Rioja + * `America/Argentina/Mendoza` - America/Argentina/Mendoza + * `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos + * `America/Argentina/Salta` - America/Argentina/Salta + * `America/Argentina/San_Juan` - America/Argentina/San_Juan + * `America/Argentina/San_Luis` - America/Argentina/San_Luis + * `America/Argentina/Tucuman` - America/Argentina/Tucuman + * `America/Argentina/Ushuaia` - America/Argentina/Ushuaia + * `America/Aruba` - America/Aruba + * `America/Asuncion` - America/Asuncion + * `America/Atikokan` - America/Atikokan + * `America/Atka` - America/Atka + * `America/Bahia` - America/Bahia + * `America/Bahia_Banderas` - America/Bahia_Banderas + * `America/Barbados` - America/Barbados + * `America/Belem` - America/Belem + * `America/Belize` - America/Belize + * `America/Blanc-Sablon` - America/Blanc-Sablon + * `America/Boa_Vista` - America/Boa_Vista + * `America/Bogota` - America/Bogota + * `America/Boise` - America/Boise + * `America/Buenos_Aires` - America/Buenos_Aires + * `America/Cambridge_Bay` - America/Cambridge_Bay + * `America/Campo_Grande` - America/Campo_Grande + * `America/Cancun` - America/Cancun + * `America/Caracas` - America/Caracas + * `America/Catamarca` - America/Catamarca + * `America/Cayenne` - America/Cayenne + * `America/Cayman` - America/Cayman + * `America/Chicago` - America/Chicago + * `America/Chihuahua` - America/Chihuahua + * `America/Ciudad_Juarez` - America/Ciudad_Juarez + * `America/Coral_Harbour` - America/Coral_Harbour + * `America/Cordoba` - America/Cordoba + * `America/Costa_Rica` - America/Costa_Rica + * `America/Coyhaique` - America/Coyhaique + * `America/Creston` - America/Creston + * `America/Cuiaba` - America/Cuiaba + * `America/Curacao` - America/Curacao + * `America/Danmarkshavn` - America/Danmarkshavn + * `America/Dawson` - America/Dawson + * `America/Dawson_Creek` - America/Dawson_Creek + * `America/Denver` - America/Denver + * `America/Detroit` - America/Detroit + * `America/Dominica` - America/Dominica + * `America/Edmonton` - America/Edmonton + * `America/Eirunepe` - America/Eirunepe + * `America/El_Salvador` - America/El_Salvador + * `America/Ensenada` - America/Ensenada + * `America/Fort_Nelson` - America/Fort_Nelson + * `America/Fort_Wayne` - America/Fort_Wayne + * `America/Fortaleza` - America/Fortaleza + * `America/Glace_Bay` - America/Glace_Bay + * `America/Godthab` - America/Godthab + * `America/Goose_Bay` - America/Goose_Bay + * `America/Grand_Turk` - America/Grand_Turk + * `America/Grenada` - America/Grenada + * `America/Guadeloupe` - America/Guadeloupe + * `America/Guatemala` - America/Guatemala + * `America/Guayaquil` - America/Guayaquil + * `America/Guyana` - America/Guyana + * `America/Halifax` - America/Halifax + * `America/Havana` - America/Havana + * `America/Hermosillo` - America/Hermosillo + * `America/Indiana/Indianapolis` - America/Indiana/Indianapolis + * `America/Indiana/Knox` - America/Indiana/Knox + * `America/Indiana/Marengo` - America/Indiana/Marengo + * `America/Indiana/Petersburg` - America/Indiana/Petersburg + * `America/Indiana/Tell_City` - America/Indiana/Tell_City + * `America/Indiana/Vevay` - America/Indiana/Vevay + * `America/Indiana/Vincennes` - America/Indiana/Vincennes + * `America/Indiana/Winamac` - America/Indiana/Winamac + * `America/Indianapolis` - America/Indianapolis + * `America/Inuvik` - America/Inuvik + * `America/Iqaluit` - America/Iqaluit + * `America/Jamaica` - America/Jamaica + * `America/Jujuy` - America/Jujuy + * `America/Juneau` - America/Juneau + * `America/Kentucky/Louisville` - America/Kentucky/Louisville + * `America/Kentucky/Monticello` - America/Kentucky/Monticello + * `America/Knox_IN` - America/Knox_IN + * `America/Kralendijk` - America/Kralendijk + * `America/La_Paz` - America/La_Paz + * `America/Lima` - America/Lima + * `America/Los_Angeles` - America/Los_Angeles + * `America/Louisville` - America/Louisville + * `America/Lower_Princes` - America/Lower_Princes + * `America/Maceio` - America/Maceio + * `America/Managua` - America/Managua + * `America/Manaus` - America/Manaus + * `America/Marigot` - America/Marigot + * `America/Martinique` - America/Martinique + * `America/Matamoros` - America/Matamoros + * `America/Mazatlan` - America/Mazatlan + * `America/Mendoza` - America/Mendoza + * `America/Menominee` - America/Menominee + * `America/Merida` - America/Merida + * `America/Metlakatla` - America/Metlakatla + * `America/Mexico_City` - America/Mexico_City + * `America/Miquelon` - America/Miquelon + * `America/Moncton` - America/Moncton + * `America/Monterrey` - America/Monterrey + * `America/Montevideo` - America/Montevideo + * `America/Montreal` - America/Montreal + * `America/Montserrat` - America/Montserrat + * `America/Nassau` - America/Nassau + * `America/New_York` - America/New_York + * `America/Nipigon` - America/Nipigon + * `America/Nome` - America/Nome + * `America/Noronha` - America/Noronha + * `America/North_Dakota/Beulah` - America/North_Dakota/Beulah + * `America/North_Dakota/Center` - America/North_Dakota/Center + * `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem + * `America/Nuuk` - America/Nuuk + * `America/Ojinaga` - America/Ojinaga + * `America/Panama` - America/Panama + * `America/Pangnirtung` - America/Pangnirtung + * `America/Paramaribo` - America/Paramaribo + * `America/Phoenix` - America/Phoenix + * `America/Port-au-Prince` - America/Port-au-Prince + * `America/Port_of_Spain` - America/Port_of_Spain + * `America/Porto_Acre` - America/Porto_Acre + * `America/Porto_Velho` - America/Porto_Velho + * `America/Puerto_Rico` - America/Puerto_Rico + * `America/Punta_Arenas` - America/Punta_Arenas + * `America/Rainy_River` - America/Rainy_River + * `America/Rankin_Inlet` - America/Rankin_Inlet + * `America/Recife` - America/Recife + * `America/Regina` - America/Regina + * `America/Resolute` - America/Resolute + * `America/Rio_Branco` - America/Rio_Branco + * `America/Rosario` - America/Rosario + * `America/Santa_Isabel` - America/Santa_Isabel + * `America/Santarem` - America/Santarem + * `America/Santiago` - America/Santiago + * `America/Santo_Domingo` - America/Santo_Domingo + * `America/Sao_Paulo` - America/Sao_Paulo + * `America/Scoresbysund` - America/Scoresbysund + * `America/Shiprock` - America/Shiprock + * `America/Sitka` - America/Sitka + * `America/St_Barthelemy` - America/St_Barthelemy + * `America/St_Johns` - America/St_Johns + * `America/St_Kitts` - America/St_Kitts + * `America/St_Lucia` - America/St_Lucia + * `America/St_Thomas` - America/St_Thomas + * `America/St_Vincent` - America/St_Vincent + * `America/Swift_Current` - America/Swift_Current + * `America/Tegucigalpa` - America/Tegucigalpa + * `America/Thule` - America/Thule + * `America/Thunder_Bay` - America/Thunder_Bay + * `America/Tijuana` - America/Tijuana + * `America/Toronto` - America/Toronto + * `America/Tortola` - America/Tortola + * `America/Vancouver` - America/Vancouver + * `America/Virgin` - America/Virgin + * `America/Whitehorse` - America/Whitehorse + * `America/Winnipeg` - America/Winnipeg + * `America/Yakutat` - America/Yakutat + * `America/Yellowknife` - America/Yellowknife + * `Antarctica/Casey` - Antarctica/Casey + * `Antarctica/Davis` - Antarctica/Davis + * `Antarctica/DumontDUrville` - Antarctica/DumontDUrville + * `Antarctica/Macquarie` - Antarctica/Macquarie + * `Antarctica/Mawson` - Antarctica/Mawson + * `Antarctica/McMurdo` - Antarctica/McMurdo + * `Antarctica/Palmer` - Antarctica/Palmer + * `Antarctica/Rothera` - Antarctica/Rothera + * `Antarctica/South_Pole` - Antarctica/South_Pole + * `Antarctica/Syowa` - Antarctica/Syowa + * `Antarctica/Troll` - Antarctica/Troll + * `Antarctica/Vostok` - Antarctica/Vostok + * `Arctic/Longyearbyen` - Arctic/Longyearbyen + * `Asia/Aden` - Asia/Aden + * `Asia/Almaty` - Asia/Almaty + * `Asia/Amman` - Asia/Amman + * `Asia/Anadyr` - Asia/Anadyr + * `Asia/Aqtau` - Asia/Aqtau + * `Asia/Aqtobe` - Asia/Aqtobe + * `Asia/Ashgabat` - Asia/Ashgabat + * `Asia/Ashkhabad` - Asia/Ashkhabad + * `Asia/Atyrau` - Asia/Atyrau + * `Asia/Baghdad` - Asia/Baghdad + * `Asia/Bahrain` - Asia/Bahrain + * `Asia/Baku` - Asia/Baku + * `Asia/Bangkok` - Asia/Bangkok + * `Asia/Barnaul` - Asia/Barnaul + * `Asia/Beirut` - Asia/Beirut + * `Asia/Bishkek` - Asia/Bishkek + * `Asia/Brunei` - Asia/Brunei + * `Asia/Calcutta` - Asia/Calcutta + * `Asia/Chita` - Asia/Chita + * `Asia/Choibalsan` - Asia/Choibalsan + * `Asia/Chongqing` - Asia/Chongqing + * `Asia/Chungking` - Asia/Chungking + * `Asia/Colombo` - Asia/Colombo + * `Asia/Dacca` - Asia/Dacca + * `Asia/Damascus` - Asia/Damascus + * `Asia/Dhaka` - Asia/Dhaka + * `Asia/Dili` - Asia/Dili + * `Asia/Dubai` - Asia/Dubai + * `Asia/Dushanbe` - Asia/Dushanbe + * `Asia/Famagusta` - Asia/Famagusta + * `Asia/Gaza` - Asia/Gaza + * `Asia/Harbin` - Asia/Harbin + * `Asia/Hebron` - Asia/Hebron + * `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh + * `Asia/Hong_Kong` - Asia/Hong_Kong + * `Asia/Hovd` - Asia/Hovd + * `Asia/Irkutsk` - Asia/Irkutsk + * `Asia/Istanbul` - Asia/Istanbul + * `Asia/Jakarta` - Asia/Jakarta + * `Asia/Jayapura` - Asia/Jayapura + * `Asia/Jerusalem` - Asia/Jerusalem + * `Asia/Kabul` - Asia/Kabul + * `Asia/Kamchatka` - Asia/Kamchatka + * `Asia/Karachi` - Asia/Karachi + * `Asia/Kashgar` - Asia/Kashgar + * `Asia/Kathmandu` - Asia/Kathmandu + * `Asia/Katmandu` - Asia/Katmandu + * `Asia/Khandyga` - Asia/Khandyga + * `Asia/Kolkata` - Asia/Kolkata + * `Asia/Krasnoyarsk` - Asia/Krasnoyarsk + * `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur + * `Asia/Kuching` - Asia/Kuching + * `Asia/Kuwait` - Asia/Kuwait + * `Asia/Macao` - Asia/Macao + * `Asia/Macau` - Asia/Macau + * `Asia/Magadan` - Asia/Magadan + * `Asia/Makassar` - Asia/Makassar + * `Asia/Manila` - Asia/Manila + * `Asia/Muscat` - Asia/Muscat + * `Asia/Nicosia` - Asia/Nicosia + * `Asia/Novokuznetsk` - Asia/Novokuznetsk + * `Asia/Novosibirsk` - Asia/Novosibirsk + * `Asia/Omsk` - Asia/Omsk + * `Asia/Oral` - Asia/Oral + * `Asia/Phnom_Penh` - Asia/Phnom_Penh + * `Asia/Pontianak` - Asia/Pontianak + * `Asia/Pyongyang` - Asia/Pyongyang + * `Asia/Qatar` - Asia/Qatar + * `Asia/Qostanay` - Asia/Qostanay + * `Asia/Qyzylorda` - Asia/Qyzylorda + * `Asia/Rangoon` - Asia/Rangoon + * `Asia/Riyadh` - Asia/Riyadh + * `Asia/Saigon` - Asia/Saigon + * `Asia/Sakhalin` - Asia/Sakhalin + * `Asia/Samarkand` - Asia/Samarkand + * `Asia/Seoul` - Asia/Seoul + * `Asia/Shanghai` - Asia/Shanghai + * `Asia/Singapore` - Asia/Singapore + * `Asia/Srednekolymsk` - Asia/Srednekolymsk + * `Asia/Taipei` - Asia/Taipei + * `Asia/Tashkent` - Asia/Tashkent + * `Asia/Tbilisi` - Asia/Tbilisi + * `Asia/Tehran` - Asia/Tehran + * `Asia/Tel_Aviv` - Asia/Tel_Aviv + * `Asia/Thimbu` - Asia/Thimbu + * `Asia/Thimphu` - Asia/Thimphu + * `Asia/Tokyo` - Asia/Tokyo + * `Asia/Tomsk` - Asia/Tomsk + * `Asia/Ujung_Pandang` - Asia/Ujung_Pandang + * `Asia/Ulaanbaatar` - Asia/Ulaanbaatar + * `Asia/Ulan_Bator` - Asia/Ulan_Bator + * `Asia/Urumqi` - Asia/Urumqi + * `Asia/Ust-Nera` - Asia/Ust-Nera + * `Asia/Vientiane` - Asia/Vientiane + * `Asia/Vladivostok` - Asia/Vladivostok + * `Asia/Yakutsk` - Asia/Yakutsk + * `Asia/Yangon` - Asia/Yangon + * `Asia/Yekaterinburg` - Asia/Yekaterinburg + * `Asia/Yerevan` - Asia/Yerevan + * `Atlantic/Azores` - Atlantic/Azores + * `Atlantic/Bermuda` - Atlantic/Bermuda + * `Atlantic/Canary` - Atlantic/Canary + * `Atlantic/Cape_Verde` - Atlantic/Cape_Verde + * `Atlantic/Faeroe` - Atlantic/Faeroe + * `Atlantic/Faroe` - Atlantic/Faroe + * `Atlantic/Jan_Mayen` - Atlantic/Jan_Mayen + * `Atlantic/Madeira` - Atlantic/Madeira + * `Atlantic/Reykjavik` - Atlantic/Reykjavik + * `Atlantic/South_Georgia` - Atlantic/South_Georgia + * `Atlantic/St_Helena` - Atlantic/St_Helena + * `Atlantic/Stanley` - Atlantic/Stanley + * `Australia/ACT` - Australia/ACT + * `Australia/Adelaide` - Australia/Adelaide + * `Australia/Brisbane` - Australia/Brisbane + * `Australia/Broken_Hill` - Australia/Broken_Hill + * `Australia/Canberra` - Australia/Canberra + * `Australia/Currie` - Australia/Currie + * `Australia/Darwin` - Australia/Darwin + * `Australia/Eucla` - Australia/Eucla + * `Australia/Hobart` - Australia/Hobart + * `Australia/LHI` - Australia/LHI + * `Australia/Lindeman` - Australia/Lindeman + * `Australia/Lord_Howe` - Australia/Lord_Howe + * `Australia/Melbourne` - Australia/Melbourne + * `Australia/NSW` - Australia/NSW + * `Australia/North` - Australia/North + * `Australia/Perth` - Australia/Perth + * `Australia/Queensland` - Australia/Queensland + * `Australia/South` - Australia/South + * `Australia/Sydney` - Australia/Sydney + * `Australia/Tasmania` - Australia/Tasmania + * `Australia/Victoria` - Australia/Victoria + * `Australia/West` - Australia/West + * `Australia/Yancowinna` - Australia/Yancowinna + * `Brazil/Acre` - Brazil/Acre + * `Brazil/DeNoronha` - Brazil/DeNoronha + * `Brazil/East` - Brazil/East + * `Brazil/West` - Brazil/West + * `Canada/Atlantic` - Canada/Atlantic + * `Canada/Central` - Canada/Central + * `Canada/Eastern` - Canada/Eastern + * `Canada/Mountain` - Canada/Mountain + * `Canada/Newfoundland` - Canada/Newfoundland + * `Canada/Pacific` - Canada/Pacific + * `Canada/Saskatchewan` - Canada/Saskatchewan + * `Canada/Yukon` - Canada/Yukon + * `Chile/Continental` - Chile/Continental + * `Chile/EasterIsland` - Chile/EasterIsland + * `Europe/Amsterdam` - Europe/Amsterdam + * `Europe/Andorra` - Europe/Andorra + * `Europe/Astrakhan` - Europe/Astrakhan + * `Europe/Athens` - Europe/Athens + * `Europe/Belfast` - Europe/Belfast + * `Europe/Belgrade` - Europe/Belgrade + * `Europe/Berlin` - Europe/Berlin + * `Europe/Bratislava` - Europe/Bratislava + * `Europe/Brussels` - Europe/Brussels + * `Europe/Bucharest` - Europe/Bucharest + * `Europe/Budapest` - Europe/Budapest + * `Europe/Busingen` - Europe/Busingen + * `Europe/Chisinau` - Europe/Chisinau + * `Europe/Copenhagen` - Europe/Copenhagen + * `Europe/Dublin` - Europe/Dublin + * `Europe/Gibraltar` - Europe/Gibraltar + * `Europe/Guernsey` - Europe/Guernsey + * `Europe/Helsinki` - Europe/Helsinki + * `Europe/Isle_of_Man` - Europe/Isle_of_Man + * `Europe/Istanbul` - Europe/Istanbul + * `Europe/Jersey` - Europe/Jersey + * `Europe/Kaliningrad` - Europe/Kaliningrad + * `Europe/Kiev` - Europe/Kiev + * `Europe/Kirov` - Europe/Kirov + * `Europe/Kyiv` - Europe/Kyiv + * `Europe/Lisbon` - Europe/Lisbon + * `Europe/Ljubljana` - Europe/Ljubljana + * `Europe/London` - Europe/London + * `Europe/Luxembourg` - Europe/Luxembourg + * `Europe/Madrid` - Europe/Madrid + * `Europe/Malta` - Europe/Malta + * `Europe/Mariehamn` - Europe/Mariehamn + * `Europe/Minsk` - Europe/Minsk + * `Europe/Monaco` - Europe/Monaco + * `Europe/Moscow` - Europe/Moscow + * `Europe/Nicosia` - Europe/Nicosia + * `Europe/Oslo` - Europe/Oslo + * `Europe/Paris` - Europe/Paris + * `Europe/Podgorica` - Europe/Podgorica + * `Europe/Prague` - Europe/Prague + * `Europe/Riga` - Europe/Riga + * `Europe/Rome` - Europe/Rome + * `Europe/Samara` - Europe/Samara + * `Europe/San_Marino` - Europe/San_Marino + * `Europe/Sarajevo` - Europe/Sarajevo + * `Europe/Saratov` - Europe/Saratov + * `Europe/Simferopol` - Europe/Simferopol + * `Europe/Skopje` - Europe/Skopje + * `Europe/Sofia` - Europe/Sofia + * `Europe/Stockholm` - Europe/Stockholm + * `Europe/Tallinn` - Europe/Tallinn + * `Europe/Tirane` - Europe/Tirane + * `Europe/Tiraspol` - Europe/Tiraspol + * `Europe/Ulyanovsk` - Europe/Ulyanovsk + * `Europe/Uzhgorod` - Europe/Uzhgorod + * `Europe/Vaduz` - Europe/Vaduz + * `Europe/Vatican` - Europe/Vatican + * `Europe/Vienna` - Europe/Vienna + * `Europe/Vilnius` - Europe/Vilnius + * `Europe/Volgograd` - Europe/Volgograd + * `Europe/Warsaw` - Europe/Warsaw + * `Europe/Zagreb` - Europe/Zagreb + * `Europe/Zaporozhye` - Europe/Zaporozhye + * `Europe/Zurich` - Europe/Zurich + * `Indian/Antananarivo` - Indian/Antananarivo + * `Indian/Chagos` - Indian/Chagos + * `Indian/Christmas` - Indian/Christmas + * `Indian/Cocos` - Indian/Cocos + * `Indian/Comoro` - Indian/Comoro + * `Indian/Kerguelen` - Indian/Kerguelen + * `Indian/Mahe` - Indian/Mahe + * `Indian/Maldives` - Indian/Maldives + * `Indian/Mauritius` - Indian/Mauritius + * `Indian/Mayotte` - Indian/Mayotte + * `Indian/Reunion` - Indian/Reunion + * `Mexico/BajaNorte` - Mexico/BajaNorte + * `Mexico/BajaSur` - Mexico/BajaSur + * `Mexico/General` - Mexico/General + * `Pacific/Apia` - Pacific/Apia + * `Pacific/Auckland` - Pacific/Auckland + * `Pacific/Bougainville` - Pacific/Bougainville + * `Pacific/Chatham` - Pacific/Chatham + * `Pacific/Chuuk` - Pacific/Chuuk + * `Pacific/Easter` - Pacific/Easter + * `Pacific/Efate` - Pacific/Efate + * `Pacific/Enderbury` - Pacific/Enderbury + * `Pacific/Fakaofo` - Pacific/Fakaofo + * `Pacific/Fiji` - Pacific/Fiji + * `Pacific/Funafuti` - Pacific/Funafuti + * `Pacific/Galapagos` - Pacific/Galapagos + * `Pacific/Gambier` - Pacific/Gambier + * `Pacific/Guadalcanal` - Pacific/Guadalcanal + * `Pacific/Guam` - Pacific/Guam + * `Pacific/Honolulu` - Pacific/Honolulu + * `Pacific/Johnston` - Pacific/Johnston + * `Pacific/Kanton` - Pacific/Kanton + * `Pacific/Kiritimati` - Pacific/Kiritimati + * `Pacific/Kosrae` - Pacific/Kosrae + * `Pacific/Kwajalein` - Pacific/Kwajalein + * `Pacific/Majuro` - Pacific/Majuro + * `Pacific/Marquesas` - Pacific/Marquesas + * `Pacific/Midway` - Pacific/Midway + * `Pacific/Nauru` - Pacific/Nauru + * `Pacific/Niue` - Pacific/Niue + * `Pacific/Norfolk` - Pacific/Norfolk + * `Pacific/Noumea` - Pacific/Noumea + * `Pacific/Pago_Pago` - Pacific/Pago_Pago + * `Pacific/Palau` - Pacific/Palau + * `Pacific/Pitcairn` - Pacific/Pitcairn + * `Pacific/Pohnpei` - Pacific/Pohnpei + * `Pacific/Ponape` - Pacific/Ponape + * `Pacific/Port_Moresby` - Pacific/Port_Moresby + * `Pacific/Rarotonga` - Pacific/Rarotonga + * `Pacific/Saipan` - Pacific/Saipan + * `Pacific/Samoa` - Pacific/Samoa + * `Pacific/Tahiti` - Pacific/Tahiti + * `Pacific/Tarawa` - Pacific/Tarawa + * `Pacific/Tongatapu` - Pacific/Tongatapu + * `Pacific/Truk` - Pacific/Truk + * `Pacific/Wake` - Pacific/Wake + * `Pacific/Wallis` - Pacific/Wallis + * `Pacific/Yap` - Pacific/Yap + * `US/Alaska` - US/Alaska + * `US/Aleutian` - US/Aleutian + * `US/Arizona` - US/Arizona + * `US/Central` - US/Central + * `US/East-Indiana` - US/East-Indiana + * `US/Eastern` - US/Eastern + * `US/Hawaii` - US/Hawaii + * `US/Indiana-Starke` - US/Indiana-Starke + * `US/Michigan` - US/Michigan + * `US/Mountain` - US/Mountain + * `US/Pacific` - US/Pacific + * `US/Samoa` - US/Samoa + * `UTC` - UTC + session_timeout_minutes: type: integer - readOnly: true - name: - type: string - description: Identifying name for this device; must be unique. - maxLength: 128 - model_name: - type: string - nullable: true - description: Type of controller (optional). - maxLength: 128 - serial_number: + maximum: 9223372036854775807 + minimum: 0 + format: int64 + description: Maximum time, in minutes, that a session may be idle (no pours) + before it is considered to be finished. Recommended value is 180. + google_analytics_id: type: string nullable: true - description: Serial number (optional). - maxLength: 128 - PatchedDevice: - type: object - properties: - id: - type: integer - readOnly: true - name: - type: string - maxLength: 255 - created_time: - type: string - format: date-time - description: Time the device was created. - PatchedDrinkUpdateRequest: - type: object - properties: - shout: - type: string - volume_ml: - type: number - format: double - minimum: 0.0 - PatchedFlowMeter: - type: object - properties: - id: - type: integer - readOnly: true - controller_id: - type: integer - description: Controller that owns this meter. - readOnly: true - port_name: + description: 'Set to your Google Analytics ID to enable tracking. Example: + UA-XXXX-y' + maxLength: 64 + email_config: type: string - description: Controller-specific data port name for this meter. - maxLength: 128 - tap_id: - type: integer - nullable: true - description: Tap to which this meter is currently bound. - readOnly: true - ticks_per_ml: - type: number - format: double - description: 'Flow meter pulses per mL of fluid. Common values: 2.724 (FT330-RJ), - 5.4 (SF800)' - PatchedFlowToggle: + minLength: 1 + description: Backend email configuration + pattern: '^(console|smtp|submission|dummy|memory):' + PatchedThermoSensorRequest: type: object - properties: - id: - type: integer - readOnly: true - controller_id: - type: integer - description: Controller that owns this toggle. - readOnly: true - port_name: + properties: + raw_name: type: string - description: Controller-specific data port name for this toggle. + minLength: 1 + maxLength: 256 + nice_name: + type: string + minLength: 1 maxLength: 128 - tap_id: - type: integer - nullable: true - description: Tap to which this toggle is currently bound. - readOnly: true - PatchedKeg: + Picture: type: object properties: id: type: integer readOnly: true - beverage: - allOf: - - $ref: '#/components/schemas/Beverage' - readOnly: true - keg_type: - allOf: - - $ref: '#/components/schemas/KegTypeEnum' - description: |- - Keg container type, used to initialize keg's full volume - - * `mini` - Mini Keg (5 L) - * `corny-2_5-gal` - Corny Keg (2.5 gal) - * `corny-3-gal` - Corny Keg (3.0 gal) - * `corny` - Corny Keg (5 gal) - * `sixth` - Sixth Barrel (5.17 gal) - * `euro-30-liter` - European DIN (30 L) - * `euro-half` - European Half Barrel (50 L) - * `quarter` - Quarter Barrel (7.75 gal) - * `euro` - European Full Barrel (100 L) - * `half-barrel` - Half Barrel (15.5 gal) - * `other` - Other - served_volume_ml: - type: number - format: double - readOnly: true - description: Computed served volume. - full_volume_ml: - type: number - format: double - description: Full volume of this Keg; usually set automatically from keg_type. - start_time: - type: string - format: date-time - readOnly: true - description: Time the Keg was first tapped. - end_time: + resized_url: type: string - format: date-time - readOnly: true - description: Time the Keg was finished or disconnected. - status: - allOf: - - $ref: '#/components/schemas/KegStatusEnum' + format: uri readOnly: true - description: |- - Current keg state. - - * `available` - Available - * `on_tap` - On tap - * `finished` - Finished - description: + resized_png_url: type: string - nullable: true - description: User-visible description of the Keg. - spilled_ml: - type: number - format: double + format: uri readOnly: true - description: Amount of beverage poured without an associated Drink. - notes: - type: string - nullable: true - description: Private notes about this keg, viewable only by admins. - illustration: + thumbnail_url: type: string format: uri readOnly: true - illustration_thumbnail: + thumbnail_png_url: type: string format: uri readOnly: true - stats: - readOnly: true - PatchedKegTap: - type: object - properties: - id: - type: integer - readOnly: true - name: - type: string - description: The display name for this tap, for example, "Main Tap". - maxLength: 128 - notes: + caption: type: string - nullable: true - description: Private notes about this tap. - current_keg_id: + user_id: type: integer + nullable: true + description: User that owns/uploaded this picture readOnly: true - temperature_sensor_id: + keg_id: type: integer + nullable: true + description: Keg this picture was taken with, if any. readOnly: true - sort_order: + session_id: type: integer - maximum: 9223372036854775807 - minimum: 0 - format: int64 - description: Position relative to other taps when sorting (0=first). - current_keg: - allOf: - - $ref: '#/components/schemas/Keg' + nullable: true + description: Session this picture was taken with, if any. readOnly: true - PatchedNotificationSettings: + required: + - caption + - id + - keg_id + - resized_png_url + - resized_url + - session_id + - thumbnail_png_url + - thumbnail_url + - user_id + PictureRequest: type: object properties: - id: - type: integer - readOnly: true - user_id: - type: integer - description: User for these settings. - readOnly: true - backend: + caption: type: string - description: Notification backend (dotted path) for these settings. - maxLength: 255 - keg_tapped: - type: boolean - description: Sent when a keg is activated. - session_started: - type: boolean - description: Sent when a new drinking session starts. - keg_volume_low: - type: boolean - description: Sent when a keg becomes low. - keg_ended: - type: boolean - description: Sent when a keg has been taken offline. - PatchedPluginData: + minLength: 1 + required: + - caption + PictureUploadRequestRequest: + type: object + properties: + image: + type: string + format: binary + caption: + type: string + default: '' + required: + - image + PluginData: type: object properties: plugin_name: @@ -7597,27 +8724,110 @@ components: type: string maxLength: 127 value: {} - PatchedProfileUpdateRequest: + required: + - key + - plugin_name + - value + PluginDataRequest: type: object properties: - display_name: + plugin_name: + type: string + minLength: 1 + description: Plugin short name + maxLength: 127 + key: type: string + minLength: 1 maxLength: 127 - PatchedSiteSettings: + value: {} + required: + - key + - plugin_name + - value + PluginInfo: type: object - description: Admin-editable site settings, covering the old settings forms. properties: - name: - type: string - readOnly: true - server_version: - type: string - readOnly: true - nullable: true - is_setup: - type: boolean - readOnly: true - description: True if the site has completed setup. + short_name: + type: string + name: + type: string + required: + - name + - short_name + PrivacyEnum: + enum: + - public + - members + - staff + type: string + description: |- + * `public` - Public: Browsing does not require login + * `members` - Members only: Must log in to browse + * `staff` - Staff only: Only logged-in staff accounts may browse + RegisterRequestRequest: + type: object + properties: + username: + type: string + minLength: 1 + maxLength: 30 + pattern: ^[\w.@+-]+$ + email: + type: string + format: email + minLength: 1 + password: + type: string + minLength: 1 + invite_code: + type: string + default: '' + required: + - email + - password + - username + RegistrationModeEnum: + enum: + - public + - member-invite-only + - staff-invite-only + type: string + description: |- + * `public` - Public: Anyone can register. + * `member-invite-only` - Member Invite: Must be invited by an existing member. + * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. + SetPasswordRequestRequest: + type: object + properties: + password: + type: string + minLength: 1 + required: + - password + SetupAdminUserRequestRequest: + type: object + properties: + username: + type: string + minLength: 1 + maxLength: 30 + pattern: ^[\w.@+-]+$ + email: + type: string + format: email + minLength: 1 + password: + type: string + minLength: 1 + required: + - email + - password + - username + SetupSiteSettingsRequest: + type: object + description: The subset of site settings collected during the setup wizard. + properties: title: type: string description: The title of this site. @@ -7631,37 +8841,6 @@ components: * `public` - Public: Browsing does not require login * `members` - Members only: Must log in to browse * `staff` - Staff only: Only logged-in staff accounts may browse - registration_mode: - allOf: - - $ref: '#/components/schemas/RegistrationModeEnum' - description: |- - Who can join this Kegbot from the web site? - - * `public` - Public: Anyone can register. - * `member-invite-only` - Member Invite: Must be invited by an existing member. - * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. - enable_sensing: - type: boolean - description: Enable and show features related to volume sensing. - enable_users: - type: boolean - description: Enable user pour tracking. - volume_display_units: - allOf: - - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' - description: |- - Unit system to use when displaying volumetric data. - - * `metric` - Metric (mL, L) - * `imperial` - Imperial (oz, pint) - temperature_display_units: - allOf: - - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' - description: |- - Unit system to use when displaying temperature data. - - * `f` - Fahrenheit - * `c` - Celsius timezone: allOf: - $ref: '#/components/schemas/TimezoneEnum' @@ -8187,195 +9366,35 @@ components: * `US/Pacific` - US/Pacific * `US/Samoa` - US/Samoa * `UTC` - UTC - session_timeout_minutes: - type: integer - maximum: 9223372036854775807 - minimum: 0 - format: int64 - description: Maximum time, in minutes, that a session may be idle (no pours) - before it is considered to be finished. Recommended value is 180. - google_analytics_id: - type: string - nullable: true - description: 'Set to your Google Analytics ID to enable tracking. Example: - UA-XXXX-y' - maxLength: 64 - email_config: - type: string - description: Backend email configuration - pattern: '^(console|smtp|submission|dummy|memory):' - background_image: + volume_display_units: allOf: - - $ref: '#/components/schemas/Picture' - readOnly: true - PatchedThermoSensor: - type: object - properties: - id: - type: integer - readOnly: true - raw_name: - type: string - maxLength: 256 - nice_name: - type: string - maxLength: 128 - Picture: - type: object - properties: - id: - type: integer - readOnly: true - resized_url: - type: string - format: uri - readOnly: true - resized_png_url: - type: string - format: uri - readOnly: true - thumbnail_url: - type: string - format: uri - readOnly: true - thumbnail_png_url: - type: string - format: uri - readOnly: true - caption: - type: string - user_id: - type: integer - nullable: true - description: User that owns/uploaded this picture - readOnly: true - keg_id: - type: integer - nullable: true - description: Keg this picture was taken with, if any. - readOnly: true - session_id: - type: integer - nullable: true - description: Session this picture was taken with, if any. - readOnly: true - required: - - caption - - id - - keg_id - - resized_png_url - - resized_url - - session_id - - thumbnail_png_url - - thumbnail_url - - user_id - PictureUploadRequest: - type: object - properties: - image: - type: string - format: uri - caption: - type: string - default: '' - required: - - image - PluginData: - type: object - properties: - plugin_name: - type: string - description: Plugin short name - maxLength: 127 - key: - type: string - maxLength: 127 - value: {} - required: - - key - - plugin_name - - value - PluginInfo: - type: object - properties: - short_name: - type: string - name: - type: string - required: - - name - - short_name - PrivacyEnum: - enum: - - public - - members - - staff - type: string - description: |- - * `public` - Public: Browsing does not require login - * `members` - Members only: Must log in to browse - * `staff` - Staff only: Only logged-in staff accounts may browse - RegisterRequest: - type: object - properties: - username: - type: string - maxLength: 30 - pattern: ^[\w.@+-]+$ - email: - type: string - format: email - password: - type: string - minLength: 1 - invite_code: - type: string - default: '' - required: - - email - - password - - username - RegistrationModeEnum: - enum: - - public - - member-invite-only - - staff-invite-only - type: string - description: |- - * `public` - Public: Anyone can register. - * `member-invite-only` - Member Invite: Must be invited by an existing member. - * `staff-invite-only` - Staff Invite Only: Must be invited by a staff member. - SetPasswordRequest: - type: object - properties: - password: - type: string - minLength: 1 - required: - - password - SetupAdminUserRequest: - type: object - properties: - username: - type: string - maxLength: 30 - pattern: ^[\w.@+-]+$ - email: - type: string - format: email - password: - type: string - minLength: 1 - required: - - email - - password - - username - SetupSiteSettingsRequest: + - $ref: '#/components/schemas/VolumeDisplayUnitsEnum' + description: |- + Unit system to use when displaying volumetric data. + + * `metric` - Metric (mL, L) + * `imperial` - Imperial (oz, pint) + temperature_display_units: + allOf: + - $ref: '#/components/schemas/TemperatureDisplayUnitsEnum' + description: |- + Unit system to use when displaying temperature data. + + * `f` - Fahrenheit + * `c` - Celsius + enable_sensing: + type: boolean + description: Enable and show features related to volume sensing. + enable_users: + type: boolean + description: Enable user pour tracking. + SetupSiteSettingsRequestRequest: type: object description: The subset of site settings collected during the setup wizard. properties: title: type: string + minLength: 1 description: The title of this site. maxLength: 64 privacy: @@ -10272,14 +11291,14 @@ components: - events - site - taps - TapAttachKegRequest: + TapAttachKegRequestRequest: type: object properties: keg_id: type: integer required: - keg_id - TapConnectMeterRequest: + TapConnectMeterRequestRequest: type: object properties: meter_id: @@ -10287,7 +11306,7 @@ components: nullable: true required: - meter_id - TapConnectThermoRequest: + TapConnectThermoRequestRequest: type: object properties: thermo_sensor_id: @@ -10295,7 +11314,7 @@ components: nullable: true required: - thermo_sensor_id - TapConnectToggleRequest: + TapConnectToggleRequestRequest: type: object properties: toggle_id: @@ -10303,7 +11322,7 @@ components: nullable: true required: - toggle_id - TapRecordDrinkRequest: + TapRecordDrinkRequestRequest: type: object properties: volume_ml: @@ -10353,6 +11372,20 @@ components: - id - nice_name - raw_name + ThermoSensorRequest: + type: object + properties: + raw_name: + type: string + minLength: 1 + maxLength: 256 + nice_name: + type: string + minLength: 1 + maxLength: 128 + required: + - nice_name + - raw_name Thermolog: type: object properties: diff --git a/web-ui/views/account/account-layout.tsx b/web-ui/views/account/account-layout.tsx new file mode 100644 index 000000000..f14cf0d44 --- /dev/null +++ b/web-ui/views/account/account-layout.tsx @@ -0,0 +1,36 @@ +import Stack from "@mui/material/Stack"; +import Tab from "@mui/material/Tab"; +import Tabs from "@mui/material/Tabs"; +import { Link, Outlet, useLocation } from "react-router"; +import { useConfig } from "@/components/config-context"; + +/** Account section chrome: tab bar over the active account view. */ +export function AccountLayout() { + const { me } = useConfig(); + const location = useLocation(); + + const tabs = [ + { label: "Account", to: "/account" }, + { label: "Profile", to: "/account/profile" }, + { label: "Password", to: "/account/password" }, + { label: "Notifications", to: "/account/notifications" }, + ...(me.can_invite ? [{ label: "Invite", to: "/account/invite" }] : []), + ]; + + const active = tabs.reduce( + (best, tab) => + location.pathname.startsWith(tab.to) && tab.to.length > best.length ? tab.to : best, + "/account", + ); + + return ( + + + {tabs.map((tab) => ( + + ))} + + + + ); +} diff --git a/web-ui/views/account/account-view.tsx b/web-ui/views/account/account-view.tsx new file mode 100644 index 000000000..491405bf5 --- /dev/null +++ b/web-ui/views/account/account-view.tsx @@ -0,0 +1,90 @@ +import Button from "@mui/material/Button"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { useState } from "react"; +import { accountRegenerateApiKeyCreate, apiKeysList } from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { useCurrentUser } from "@/components/current-user-context"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +function ApiKeySection() { + const confirm = useConfirm(); + const { showMessage } = useSnackbar(); + const [busy, setBusy] = useState(false); + const keys = useAsyncData(async () => (await unwrap(apiKeysList())).results ?? []); + + const regenerate = async () => { + if ( + !(await confirm({ + title: "Regenerate API key?", + message: "Devices using the current key will stop working.", + confirmText: "Regenerate", + destructive: true, + })) + ) { + return; + } + setBusy(true); + try { + await unwrap(accountRegenerateApiKeyCreate()); + showMessage("API key regenerated."); + keys.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + return ( + + + + + {(keys.data ?? []).map((key) => ( + (e.target as HTMLInputElement).select()} + /> + ))} + {keys.data?.length === 0 && ( + No API key yet. + )} + + + + + ); +} + +export function AccountView() { + const { user } = useCurrentUser(); + + return ( + + + Hello, {user?.display_name || user?.username} + + Username: {user?.username} + {user?.email ? ` · ${user.email}` : ""} + + {user?.is_staff && } + + + ); +} diff --git a/web-ui/views/account/invite-view.tsx b/web-ui/views/account/invite-view.tsx new file mode 100644 index 000000000..5c47381dc --- /dev/null +++ b/web-ui/views/account/invite-view.tsx @@ -0,0 +1,117 @@ +import Button from "@mui/material/Button"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { invitationsCreate, invitationsDestroy, invitationsList } from "@/api"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import type { FormErrors } from "@/lib/api"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { formatDate } from "@/lib/format"; +import { fieldError, formErrorsFromException } from "@/lib/forms"; +import { useAsyncData } from "@/lib/use-async-data"; + +export function InviteView() { + const { showMessage } = useSnackbar(); + const [email, setEmail] = useState(""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + const invitations = useAsyncData( + async () => (await unwrap(invitationsList({ query: { page_size: 100 } }))).results ?? [], + ); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + setErrors(null); + try { + await unwrap(invitationsCreate({ body: { for_email: email } })); + showMessage(`Invitation mailed to ${email}.`); + setEmail(""); + invitations.reload(); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + const revoke = async (id: number) => { + try { + await unwrap(invitationsDestroy({ path: { id } })); + showMessage("Invitation revoked."); + invitations.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + return ( + + +
+ + setEmail(e.target.value)} + error={Boolean(fieldError(errors, "for_email"))} + helperText={fieldError(errors, "for_email")} + required + sx={{ flexGrow: 1 }} + /> + + +
+ {(invitations.data?.length ?? 0) > 0 && ( + + Sent invitations + + + + + E-mail + Expires + + + + + {(invitations.data ?? []).map((invitation) => ( + + {invitation.for_email} + + {invitation.is_expired + ? "Expired" + : formatDate(invitation.expires_date ?? "")} + + + void revoke(invitation.id)} + > + Revoke + + + + ))} + +
+
+
+ )} +
+
+ ); +} diff --git a/web-ui/views/account/notifications-view.tsx b/web-ui/views/account/notifications-view.tsx new file mode 100644 index 000000000..84a1fb149 --- /dev/null +++ b/web-ui/views/account/notifications-view.tsx @@ -0,0 +1,166 @@ +import Button from "@mui/material/Button"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Checkbox from "@mui/material/Checkbox"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import FormGroup from "@mui/material/FormGroup"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { type FormEvent, useEffect, useState } from "react"; +import type { NotificationSettings } from "@/api"; +import { + accountEmailCreate, + notificationSettingsCreate, + notificationSettingsList, + notificationSettingsPartialUpdate, +} from "@/api"; +import { useCurrentUser } from "@/components/current-user-context"; +import { LoadingZone } from "@/components/loading-zone"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import type { FormErrors } from "@/lib/api"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException } from "@/lib/forms"; +import { useAsyncData } from "@/lib/use-async-data"; + +const EMAIL_BACKEND = "pykeg.notification.backends.email.EmailNotificationBackend"; + +const PREFS: Array<{ key: keyof NotificationSettings & string; label: string }> = [ + { key: "keg_tapped", label: "A keg is tapped" }, + { key: "session_started", label: "A new drinking session starts" }, + { key: "keg_volume_low", label: "A keg is running low" }, + { key: "keg_ended", label: "A keg is finished" }, +]; + +function EmailPrefsSection() { + const { showMessage } = useSnackbar(); + const existing = useAsyncData(async () => { + const page = await unwrap(notificationSettingsList({ query: { page_size: 100 } })); + return (page.results ?? []).find((s) => s.backend === EMAIL_BACKEND) ?? null; + }); + const [prefs, setPrefs] = useState>({}); + const [busy, setBusy] = useState(false); + + useEffect(() => { + if (!existing.loading) { + setPrefs({ + keg_tapped: existing.data?.keg_tapped ?? true, + session_started: existing.data?.session_started ?? false, + keg_volume_low: existing.data?.keg_volume_low ?? false, + keg_ended: existing.data?.keg_ended ?? false, + }); + } + }, [existing.loading, existing.data]); + + const save = async () => { + setBusy(true); + try { + if (existing.data) { + await unwrap( + notificationSettingsPartialUpdate({ + path: { id: existing.data.id }, + body: prefs, + }), + ); + } else { + await unwrap(notificationSettingsCreate({ body: { backend: EMAIL_BACKEND, ...prefs } })); + } + showMessage("Notification settings saved."); + existing.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + return ( + + + + + + + {PREFS.map((pref) => ( + setPrefs((p) => ({ ...p, [pref.key]: e.target.checked }))} + /> + } + label={pref.label} + /> + ))} + + + + + + + ); +} + +function ChangeEmailSection() { + const { user } = useCurrentUser(); + const { showMessage } = useSnackbar(); + const [email, setEmail] = useState(user?.email ?? ""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + setErrors(null); + try { + await unwrap(accountEmailCreate({ body: { email } })); + showMessage(`A confirmation e-mail has been sent to ${email}.`); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + return ( + + + +
+ + setEmail(e.target.value)} + error={Boolean(fieldError(errors, "email"))} + helperText={fieldError(errors, "email")} + required + /> + + +
+
+
+ ); +} + +export function NotificationsView() { + return ( + + + + + + + ); +} diff --git a/web-ui/views/account/password-view.tsx b/web-ui/views/account/password-view.tsx new file mode 100644 index 000000000..1ad62e655 --- /dev/null +++ b/web-ui/views/account/password-view.tsx @@ -0,0 +1,92 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { type FormEvent, useState } from "react"; +import { accountPasswordCreate } from "@/api"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import type { FormErrors } from "@/lib/api"; +import { unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException, nonFieldErrors } from "@/lib/forms"; + +const FIELDS = ["current_password", "new_password"]; + +export function PasswordView() { + const { showMessage } = useSnackbar(); + const [currentPassword, setCurrentPassword] = useState(""); + const [newPassword, setNewPassword] = useState(""); + const [newPassword2, setNewPassword2] = useState(""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + if (newPassword !== newPassword2) { + setErrors({ new_password: ["The two password fields didn't match."] }); + return; + } + setBusy(true); + setErrors(null); + try { + await unwrap( + accountPasswordCreate({ + body: { current_password: currentPassword, new_password: newPassword }, + }), + ); + showMessage("Password changed."); + setCurrentPassword(""); + setNewPassword(""); + setNewPassword2(""); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + return ( + +
+ + {nonFieldErrors(errors, FIELDS).map((message) => ( + + {message} + + ))} + setCurrentPassword(e.target.value)} + error={Boolean(fieldError(errors, "current_password"))} + helperText={fieldError(errors, "current_password")} + autoComplete="current-password" + required + /> + setNewPassword(e.target.value)} + error={Boolean(fieldError(errors, "new_password"))} + helperText={fieldError(errors, "new_password")} + autoComplete="new-password" + required + /> + setNewPassword2(e.target.value)} + autoComplete="new-password" + required + /> + + +
+
+ ); +} diff --git a/web-ui/views/account/profile-view.tsx b/web-ui/views/account/profile-view.tsx new file mode 100644 index 000000000..da3377ba3 --- /dev/null +++ b/web-ui/views/account/profile-view.tsx @@ -0,0 +1,89 @@ +import Avatar from "@mui/material/Avatar"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { type FormEvent, useState } from "react"; +import { accountMugshotCreate, usersMePartialUpdate } from "@/api"; +import { useCurrentUser } from "@/components/current-user-context"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import type { FormErrors } from "@/lib/api"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException } from "@/lib/forms"; + +export function ProfileView() { + const { user, refresh } = useCurrentUser(); + const { showMessage } = useSnackbar(); + const [displayName, setDisplayName] = useState(user?.display_name ?? ""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + setErrors(null); + try { + await unwrap(usersMePartialUpdate({ body: { display_name: displayName } })); + await refresh(); + showMessage("Profile updated."); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + const onMugshot = async (file: File | undefined) => { + if (!file) { + return; + } + setBusy(true); + try { + await unwrap(accountMugshotCreate({ body: { image: file } })); + await refresh(); + showMessage("Mugshot updated."); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + return ( + + + + + {(user?.display_name || user?.username || "?").charAt(0).toUpperCase()} + + + +
+ + setDisplayName(e.target.value)} + error={Boolean(fieldError(errors, "display_name"))} + helperText={ + fieldError(errors, "display_name") ?? + "Shown in some places instead of your username." + } + /> + + +
+
+
+ ); +} From 974ad835b7fa6e82e7cf32920348daf825c967bc Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:15:17 +0000 Subject: [PATCH 17/48] web-ui: admin area MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the staff-only /kegadmin section as a lazy-loaded chunk with a sectioned side nav (entries honor enable_sensing/enable_users): - dashboard: email/redis health warnings and user counts - settings: general (title, privacy, registration, feature toggles), location (units + timezone autocomplete), advanced (session timeout, analytics, email config URI, background image upload), and the e-mail status/test page - taps: list/create, plus the per-tap operations hub — attach an available keg or start a brand-new one, end keg, record manual drinks/spills, connect meter/toggle/thermo sensor, rename, delete - keg room: status-filtered keg list with per-keg actions (finish, reactivate, spill, delete-with-drinks), description editing, and add-keg form using shared keg-size constants - beverages and producers: dialog-based CRUD plus picture uploads - controllers: controller CRUD with nested flow meter/toggle management - users: search, create (optionally staff), enable/disable, grant/revoke staff, set password; drinks: reassign/cancel/cancel-as-spill; tokens: CRUD with user assignment and search - maintenance: logs viewer, bugreport generator, backup/export (build, poll, download, delete), and generic plugin settings (webhook) --- web-ui/routes.tsx | 24 + web-ui/views/admin/admin-layout.tsx | 130 +++++ web-ui/views/admin/admin-routes.tsx | 49 ++ web-ui/views/admin/beverages-view.tsx | 229 +++++++++ web-ui/views/admin/bugreport-view.tsx | 72 +++ web-ui/views/admin/controllers-view.tsx | 326 ++++++++++++ web-ui/views/admin/dashboard-view.tsx | 56 +++ web-ui/views/admin/drinks-admin-view.tsx | 131 +++++ web-ui/views/admin/email-view.tsx | 72 +++ web-ui/views/admin/export-view.tsx | 127 +++++ web-ui/views/admin/kegs-admin-view.tsx | 290 +++++++++++ web-ui/views/admin/logs-view.tsx | 56 +++ web-ui/views/admin/plugin-settings-view.tsx | 84 ++++ web-ui/views/admin/producers-view.tsx | 197 ++++++++ web-ui/views/admin/settings-advanced-view.tsx | 113 +++++ web-ui/views/admin/settings-general-view.tsx | 110 +++++ web-ui/views/admin/settings-location-view.tsx | 88 ++++ web-ui/views/admin/tap-detail-view.tsx | 463 ++++++++++++++++++ web-ui/views/admin/taps-view.tsx | 88 ++++ web-ui/views/admin/tokens-view.tsx | 246 ++++++++++ web-ui/views/admin/use-site-settings.ts | 37 ++ web-ui/views/admin/users-admin-view.tsx | 228 +++++++++ 22 files changed, 3216 insertions(+) create mode 100644 web-ui/views/admin/admin-layout.tsx create mode 100644 web-ui/views/admin/admin-routes.tsx create mode 100644 web-ui/views/admin/beverages-view.tsx create mode 100644 web-ui/views/admin/bugreport-view.tsx create mode 100644 web-ui/views/admin/controllers-view.tsx create mode 100644 web-ui/views/admin/dashboard-view.tsx create mode 100644 web-ui/views/admin/drinks-admin-view.tsx create mode 100644 web-ui/views/admin/email-view.tsx create mode 100644 web-ui/views/admin/export-view.tsx create mode 100644 web-ui/views/admin/kegs-admin-view.tsx create mode 100644 web-ui/views/admin/logs-view.tsx create mode 100644 web-ui/views/admin/plugin-settings-view.tsx create mode 100644 web-ui/views/admin/producers-view.tsx create mode 100644 web-ui/views/admin/settings-advanced-view.tsx create mode 100644 web-ui/views/admin/settings-general-view.tsx create mode 100644 web-ui/views/admin/settings-location-view.tsx create mode 100644 web-ui/views/admin/tap-detail-view.tsx create mode 100644 web-ui/views/admin/taps-view.tsx create mode 100644 web-ui/views/admin/tokens-view.tsx create mode 100644 web-ui/views/admin/use-site-settings.ts create mode 100644 web-ui/views/admin/users-admin-view.tsx diff --git a/web-ui/routes.tsx b/web-ui/routes.tsx index ef73ee2df..8be35eef1 100644 --- a/web-ui/routes.tsx +++ b/web-ui/routes.tsx @@ -1,3 +1,6 @@ +import Box from "@mui/material/Box"; +import CircularProgress from "@mui/material/CircularProgress"; +import { lazy, Suspense } from "react"; import { Navigate, Route, Routes, useParams } from "react-router"; import { PrivacyGate } from "@/components/privacy-gate"; import { RequireAuth } from "@/components/require-auth"; @@ -31,6 +34,17 @@ function RedirectWithParam({ to }: { to: (params: Record; } +// The admin area loads as its own chunk; staff-only. +const AdminRoutes = lazy(() => import("@/views/admin/admin-routes")); + +function AdminFallback() { + return ( + + + + ); +} + export function AppRoutes() { return ( @@ -100,6 +114,16 @@ export function AppRoutes() { } /> } /> + + }> + + + + } + /> {/* Legacy short URLs. */} diff --git a/web-ui/views/admin/admin-layout.tsx b/web-ui/views/admin/admin-layout.tsx new file mode 100644 index 000000000..2bf6ba647 --- /dev/null +++ b/web-ui/views/admin/admin-layout.tsx @@ -0,0 +1,130 @@ +import Box from "@mui/material/Box"; +import Divider from "@mui/material/Divider"; +import List from "@mui/material/List"; +import ListItemButton from "@mui/material/ListItemButton"; +import ListItemText from "@mui/material/ListItemText"; +import ListSubheader from "@mui/material/ListSubheader"; +import Paper from "@mui/material/Paper"; +import { useTheme } from "@mui/material/styles"; +import useMediaQuery from "@mui/material/useMediaQuery"; +import { Link, Outlet, useLocation } from "react-router"; +import { useConfig } from "@/components/config-context"; + +interface NavEntry { + label: string; + to: string; +} + +interface NavSection { + header: string; + items: NavEntry[]; +} + +function useNavSections(): NavSection[] { + const { me } = useConfig(); + const sensing = me.site.enable_sensing ?? true; + const users = me.site.enable_users ?? true; + return [ + { header: "Overview", items: [{ label: "Dashboard", to: "/kegadmin" }] }, + { + header: "Settings", + items: [ + { label: "General", to: "/kegadmin/settings/general" }, + { label: "Location", to: "/kegadmin/settings/location" }, + { label: "Advanced", to: "/kegadmin/settings/advanced" }, + { label: "E-mail", to: "/kegadmin/email" }, + ], + }, + { + header: "System", + items: [ + ...(sensing ? [{ label: "Controllers", to: "/kegadmin/controllers" }] : []), + { label: "Taps", to: "/kegadmin/taps" }, + { label: "Keg Room", to: "/kegadmin/kegs" }, + ...(sensing ? [{ label: "Drinks", to: "/kegadmin/drinks" }] : []), + ...(users ? [{ label: "Users", to: "/kegadmin/users" }] : []), + ...(users ? [{ label: "Tokens", to: "/kegadmin/tokens" }] : []), + ], + }, + { + header: "Beer Database", + items: [ + { label: "Beverages", to: "/kegadmin/beers" }, + { label: "Producers", to: "/kegadmin/brewers" }, + ], + }, + { + header: "Plugins", + items: me.plugins.map((plugin) => ({ + label: plugin.name, + to: `/kegadmin/plugin/${plugin.short_name}`, + })), + }, + { + header: "Maintenance", + items: [ + { label: "Logs", to: "/kegadmin/logs" }, + { label: "Bug Report", to: "/kegadmin/bugreport" }, + { label: "Backup / Export", to: "/kegadmin/export" }, + ], + }, + ]; +} + +export function AdminLayout() { + const sections = useNavSections(); + const location = useLocation(); + const theme = useTheme(); + const narrow = useMediaQuery(theme.breakpoints.down("md")); + + const allItems = sections.flatMap((s) => s.items); + const active = allItems.reduce( + (best, item) => + location.pathname === item.to || + (location.pathname.startsWith(`${item.to}/`) && item.to.length > best.length) + ? item.to + : best, + "/kegadmin", + ); + + const nav = ( + + {sections.map((section) => + section.items.length === 0 ? null : ( + + {section.header} + {section.items.map((item) => ( + + + + ))} + + + ), + )} + + ); + + return ( + + + {nav} + + + + + + ); +} diff --git a/web-ui/views/admin/admin-routes.tsx b/web-ui/views/admin/admin-routes.tsx new file mode 100644 index 000000000..acafe9516 --- /dev/null +++ b/web-ui/views/admin/admin-routes.tsx @@ -0,0 +1,49 @@ +import { Navigate, Route, Routes } from "react-router"; +import { AdminLayout } from "@/views/admin/admin-layout"; +import { BeveragesView } from "@/views/admin/beverages-view"; +import { BugreportView } from "@/views/admin/bugreport-view"; +import { ControllersView } from "@/views/admin/controllers-view"; +import { DashboardView } from "@/views/admin/dashboard-view"; +import { DrinksAdminView } from "@/views/admin/drinks-admin-view"; +import { EmailView } from "@/views/admin/email-view"; +import { ExportView } from "@/views/admin/export-view"; +import { KegsAdminView } from "@/views/admin/kegs-admin-view"; +import { LogsView } from "@/views/admin/logs-view"; +import { PluginSettingsView } from "@/views/admin/plugin-settings-view"; +import { ProducersView } from "@/views/admin/producers-view"; +import { SettingsAdvancedView } from "@/views/admin/settings-advanced-view"; +import { SettingsGeneralView } from "@/views/admin/settings-general-view"; +import { SettingsLocationView } from "@/views/admin/settings-location-view"; +import { TapDetailView } from "@/views/admin/tap-detail-view"; +import { TapsView } from "@/views/admin/taps-view"; +import { TokensView } from "@/views/admin/tokens-view"; +import { UsersAdminView } from "@/views/admin/users-admin-view"; + +/** Routes under /kegadmin (lazy-loaded; staff-only via RequireAuth). */ +export default function AdminRoutes() { + return ( + + }> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + ); +} diff --git a/web-ui/views/admin/beverages-view.tsx b/web-ui/views/admin/beverages-view.tsx new file mode 100644 index 000000000..f1f0be315 --- /dev/null +++ b/web-ui/views/admin/beverages-view.tsx @@ -0,0 +1,229 @@ +import Button from "@mui/material/Button"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogTitle from "@mui/material/DialogTitle"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import TextField from "@mui/material/TextField"; +import { useState } from "react"; +import type { Beverage } from "@/api"; +import { + beverageProducersList, + beveragesCreate, + beveragesList, + beveragesPartialUpdate, + beveragesPictureCreate, +} from "@/api"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import SHARED from "@/lib/shared-constants"; +import { useAsyncData } from "@/lib/use-async-data"; +import { useCursorList } from "@/lib/use-cursor-list"; + +interface EditorState { + beverage: Beverage | null; + name: string; + producerId: string; + style: string; + beverageType: string; + abv: string; +} + +const CLOSED: EditorState | null = null; + +export function BeveragesView() { + const { showMessage } = useSnackbar(); + const beverages = useCursorList((cursor) => unwrap(beveragesList({ query: { cursor } }))); + const producers = useAsyncData( + async () => (await unwrap(beverageProducersList({ query: { page_size: 100 } }))).results ?? [], + ); + const [editor, setEditor] = useState(CLOSED); + const [busy, setBusy] = useState(false); + + const openCreate = () => + setEditor({ + beverage: null, + name: "", + producerId: "", + style: "", + beverageType: "beer", + abv: "", + }); + + const openEdit = (beverage: Beverage) => + setEditor({ + beverage, + name: beverage.name, + producerId: String(beverage.producer.id), + style: beverage.style ?? "", + beverageType: beverage.beverage_type ?? "beer", + abv: beverage.abv_percent != null ? String(beverage.abv_percent) : "", + }); + + const saveEditor = async () => { + if (!editor) { + return; + } + setBusy(true); + const body = { + name: editor.name, + producer_id: Number(editor.producerId), + style: editor.style, + beverage_type: editor.beverageType as never, + abv_percent: editor.abv === "" ? null : Number(editor.abv), + }; + try { + if (editor.beverage) { + await unwrap(beveragesPartialUpdate({ path: { id: editor.beverage.id }, body })); + showMessage("Beverage updated."); + } else { + await unwrap(beveragesCreate({ body })); + showMessage("Beverage created."); + } + setEditor(CLOSED); + beverages.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + const uploadPicture = async (beverage: Beverage, file: File | undefined) => { + if (!file) { + return; + } + try { + await unwrap(beveragesPictureCreate({ path: { id: beverage.id }, body: { image: file } })); + showMessage("Picture updated."); + beverages.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + return ( + + Add beverage + + } + > + + + + + + Name + Producer + Style + Type + ABV % + + + + + {beverages.items.map((beverage) => ( + + {beverage.name} + {beverage.producer.name} + {beverage.style} + {beverage.beverage_type} + {beverage.abv_percent ?? "—"} + + + + + + + + ))} + +
+
+ +
+ + setEditor(CLOSED)} fullWidth maxWidth="sm"> + {editor?.beverage ? "Edit beverage" : "Add beverage"} + + {editor && ( + + setEditor({ ...editor, name: e.target.value })} + required + /> + setEditor({ ...editor, producerId: e.target.value })} + required + > + {(producers.data ?? []).map((producer) => ( + + {producer.name} + + ))} + + setEditor({ ...editor, style: e.target.value })} + /> + setEditor({ ...editor, beverageType: e.target.value })} + > + {Object.entries(SHARED.BEVERAGE_TYPES).map(([value, label]) => ( + + {label} + + ))} + + setEditor({ ...editor, abv: e.target.value })} + /> + + )} + + + + + + +
+ ); +} diff --git a/web-ui/views/admin/bugreport-view.tsx b/web-ui/views/admin/bugreport-view.tsx new file mode 100644 index 000000000..3ab529c28 --- /dev/null +++ b/web-ui/views/admin/bugreport-view.tsx @@ -0,0 +1,72 @@ +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { useState } from "react"; +import { adminBugreportRetrieve } from "@/api"; +import { Page } from "@/components/page"; +import { toErrorMessage, unwrap } from "@/lib/api"; + +interface BugreportPayload { + output: string; + error: string | null; +} + +export function BugreportView() { + const [busy, setBusy] = useState(false); + const [report, setReport] = useState(null); + const [error, setError] = useState(null); + + const generate = async () => { + setBusy(true); + setError(null); + try { + setReport((await unwrap(adminBugreportRetrieve())) as unknown as BugreportPayload); + } catch (e) { + setError(toErrorMessage(e)); + } finally { + setBusy(false); + } + }; + + return ( + + + + Generates a diagnostic report (versions, environment, recent logs). It may contain secrets + — share with care. + + + {error && {error}} + {report?.error && {report.error}} + {report && ( + + {report.output} + + )} + + + ); +} diff --git a/web-ui/views/admin/controllers-view.tsx b/web-ui/views/admin/controllers-view.tsx new file mode 100644 index 000000000..85ea3e977 --- /dev/null +++ b/web-ui/views/admin/controllers-view.tsx @@ -0,0 +1,326 @@ +import Button from "@mui/material/Button"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { + controllersCreate, + controllersDestroy, + controllersList, + flowMetersCreate, + flowMetersDestroy, + flowMetersList, + flowTogglesCreate, + flowTogglesDestroy, + flowTogglesList, +} from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +export function ControllersView() { + const { showMessage } = useSnackbar(); + const confirm = useConfirm(); + + const controllers = useAsyncData( + async () => (await unwrap(controllersList({ query: { page_size: 100 } }))).results ?? [], + ); + const meters = useAsyncData( + async () => (await unwrap(flowMetersList({ query: { page_size: 100 } }))).results ?? [], + ); + const toggles = useAsyncData( + async () => (await unwrap(flowTogglesList({ query: { page_size: 100 } }))).results ?? [], + ); + + const [controllerName, setControllerName] = useState(""); + const [meterForm, setMeterForm] = useState({ controllerId: "", port: "", ticksPerMl: "" }); + const [toggleForm, setToggleForm] = useState({ controllerId: "", port: "" }); + + const reloadAll = () => { + controllers.reload(); + meters.reload(); + toggles.reload(); + }; + + const act = async (action: () => Promise, message: string) => { + try { + await action(); + showMessage(message); + reloadAll(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + const addController = (event: FormEvent) => { + event.preventDefault(); + void act( + () => unwrap(controllersCreate({ body: { name: controllerName } })), + "Controller created.", + ).then(() => setControllerName("")); + }; + + const removeController = async (id: number, name: string) => { + if ( + await confirm({ + title: `Delete controller "${name}"?`, + confirmText: "Delete", + destructive: true, + }) + ) { + await act(() => unwrap(controllersDestroy({ path: { id } })), "Controller deleted."); + } + }; + + return ( + + + + + + + + + + + Name + Model + Serial + + + + + {(controllers.data ?? []).map((controller) => ( + + {controller.name} + {controller.model_name} + {controller.serial_number} + + + + + ))} + +
+
+
+ + setControllerName(e.target.value)} + size="small" + required + sx={{ flexGrow: 1 }} + /> + + +
+
+
+
+ + + + + + + + + {(meters.data ?? []).map((meter) => ( + + Meter #{meter.id} + port {meter.port_name} + {meter.ticks_per_ml} ticks/mL + + {meter.tap_id != null ? `tap #${meter.tap_id}` : "unattached"} + + + + + + ))} + +
+
+
{ + e.preventDefault(); + void act( + () => + unwrap( + flowMetersCreate({ + body: { + controller_id: Number(meterForm.controllerId), + port_name: meterForm.port, + ticks_per_ml: Number(meterForm.ticksPerMl) || undefined, + } as never, + }), + ), + "Meter created.", + ); + }} + > + + setMeterForm({ ...meterForm, controllerId: e.target.value })} + size="small" + sx={{ minWidth: 160 }} + slotProps={{ select: { native: true } }} + > + + ))} + + setMeterForm({ ...meterForm, port: e.target.value })} + size="small" + required + /> + setMeterForm({ ...meterForm, ticksPerMl: e.target.value })} + size="small" + /> + + +
+
+
+
+ + + + + + + + + {(toggles.data ?? []).map((toggle) => ( + + Toggle #{toggle.id} + port {toggle.port_name} + + {toggle.tap_id != null ? `tap #${toggle.tap_id}` : "unattached"} + + + + + + ))} + +
+
+
{ + e.preventDefault(); + void act( + () => + unwrap( + flowTogglesCreate({ + body: { + controller_id: Number(toggleForm.controllerId), + port_name: toggleForm.port, + } as never, + }), + ), + "Toggle created.", + ); + }} + > + + setToggleForm({ ...toggleForm, controllerId: e.target.value })} + size="small" + sx={{ minWidth: 160 }} + slotProps={{ select: { native: true } }} + > + + ))} + + setToggleForm({ ...toggleForm, port: e.target.value })} + size="small" + required + /> + + +
+ + Attach meters, toggles, and sensors to taps from each tap's page. + +
+
+
+
+
+ ); +} diff --git a/web-ui/views/admin/dashboard-view.tsx b/web-ui/views/admin/dashboard-view.tsx new file mode 100644 index 000000000..553771ccf --- /dev/null +++ b/web-ui/views/admin/dashboard-view.tsx @@ -0,0 +1,56 @@ +import Alert from "@mui/material/Alert"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Grid from "@mui/material/Grid"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import { adminDashboardRetrieve } from "@/api"; +import { Page } from "@/components/page"; +import { unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +function Metric({ value, caption }: { value: number; caption: string }) { + return ( + + + + {value} + + {caption} + + + + + ); +} + +export function DashboardView() { + const dashboard = useAsyncData(() => unwrap(adminDashboardRetrieve())); + + return ( + + {dashboard.data && ( + + {!dashboard.data.email_configured && ( + + E-mail is not configured; account and notification mails will not be delivered.{" "} + + Configure e-mail + + . + + )} + {dashboard.data.redis_error && ( + Redis problem: {dashboard.data.redis_error} + )} + + + + + + )} + + ); +} diff --git a/web-ui/views/admin/drinks-admin-view.tsx b/web-ui/views/admin/drinks-admin-view.tsx new file mode 100644 index 000000000..b597d5d4c --- /dev/null +++ b/web-ui/views/admin/drinks-admin-view.tsx @@ -0,0 +1,131 @@ +import Button from "@mui/material/Button"; +import MuiLink from "@mui/material/Link"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import { useState } from "react"; +import { Link } from "react-router"; +import type { Drink } from "@/api"; +import { drinksDestroy, drinksList, drinksReassignCreate } from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { useFormatters } from "@/components/use-formatters"; +import { UserLink } from "@/components/user-link"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { formatDateTime } from "@/lib/format"; +import { useCursorList } from "@/lib/use-cursor-list"; + +function DrinkActions({ drink, onChanged }: { drink: Drink; onChanged: () => void }) { + const confirm = useConfirm(); + const { showMessage } = useSnackbar(); + const [anchor, setAnchor] = useState(null); + + const cancel = async (spilled: boolean) => { + setAnchor(null); + if ( + !(await confirm({ + title: spilled ? "Cancel drink and record as spill?" : "Cancel this drink?", + message: "The drink will be permanently deleted and stats recomputed.", + confirmText: "Cancel drink", + destructive: true, + })) + ) { + return; + } + try { + await unwrap( + drinksDestroy({ + path: { id: drink.id }, + query: { spilled: spilled || undefined } as never, + }), + ); + showMessage("Drink canceled."); + onChanged(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + const reassign = async () => { + setAnchor(null); + const username = window.prompt("Reassign this drink to username:"); + if (!username) { + return; + } + try { + await unwrap(drinksReassignCreate({ path: { id: drink.id }, body: { username } })); + showMessage(`Drink reassigned to ${username}.`); + onChanged(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + return ( + <> + + setAnchor(null)}> + void reassign()}>Reassign… + void cancel(false)}>Cancel drink… + void cancel(true)}>Cancel as spill… + + + ); +} + +export function DrinksAdminView() { + const { volume } = useFormatters(); + const drinks = useCursorList((cursor) => unwrap(drinksList({ query: { cursor } }))); + + return ( + + + + + + + Drink + Time + Drinker + Volume + Keg + + + + + {drinks.items.map((drink) => ( + + + + #{drink.id} + + + {formatDateTime(drink.time)} + + + + {volume(drink.volume_ml)} + {drink.keg.beverage.name} + + + + + ))} + +
+
+ +
+
+ ); +} diff --git a/web-ui/views/admin/email-view.tsx b/web-ui/views/admin/email-view.tsx new file mode 100644 index 000000000..beca6a934 --- /dev/null +++ b/web-ui/views/admin/email-view.tsx @@ -0,0 +1,72 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { type FormEvent, useState } from "react"; +import { adminEmailTestCreate } from "@/api"; +import { LoadingZone } from "@/components/loading-zone"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import type { FormErrors } from "@/lib/api"; +import { unwrap } from "@/lib/api"; +import { fieldError, formErrorsFromException } from "@/lib/forms"; +import { useSiteSettings } from "@/views/admin/use-site-settings"; + +export function EmailView() { + const { settings } = useSiteSettings(); + const { showMessage } = useSnackbar(); + const [address, setAddress] = useState(""); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + const configured = + settings.data?.email_config?.startsWith("smtp") || + settings.data?.email_config?.startsWith("submission"); + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + setErrors(null); + try { + await unwrap(adminEmailTestCreate({ body: { address } })); + showMessage(`Test e-mail sent to ${address}.`); + } catch (error) { + setErrors(formErrorsFromException(error)); + } finally { + setBusy(false); + } + }; + + return ( + + + + {configured ? ( + E-mail is configured: {settings.data?.email_config} + ) : ( + + E-mail is not configured. Set an smtp:// or submission:// URI in Advanced settings. + + )} +
+ + setAddress(e.target.value)} + error={Boolean(fieldError(errors, "address"))} + helperText={fieldError(errors, "address")} + required + sx={{ flexGrow: 1 }} + /> + + +
+
+
+
+ ); +} diff --git a/web-ui/views/admin/export-view.tsx b/web-ui/views/admin/export-view.tsx new file mode 100644 index 000000000..c9f3c8e9d --- /dev/null +++ b/web-ui/views/admin/export-view.tsx @@ -0,0 +1,127 @@ +import Button from "@mui/material/Button"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import Typography from "@mui/material/Typography"; +import { useState } from "react"; +import { adminBackupsCreate, adminBackupsDestroy, adminBackupsRetrieve } from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +interface BackupEntry { + backup_name: string; + url: string; + size_bytes: number; + created_time?: string; + server_version?: string; +} + +function formatSize(bytes: number): string { + if (bytes > 1024 * 1024) { + return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; + } + return `${Math.round(bytes / 1024)} KB`; +} + +export function ExportView() { + const confirm = useConfirm(); + const { showMessage } = useSnackbar(); + const backups = useAsyncData( + async () => (await unwrap(adminBackupsRetrieve())) as unknown as BackupEntry[], + { pollMs: 15_000 }, + ); + const [busy, setBusy] = useState(false); + + const build = async () => { + setBusy(true); + try { + await unwrap(adminBackupsCreate()); + showMessage("Backup started; it will appear below when finished."); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + const remove = async (name: string) => { + if ( + !(await confirm({ + title: `Delete backup ${name}?`, + confirmText: "Delete", + destructive: true, + })) + ) { + return; + } + try { + await unwrap(adminBackupsDestroy({ path: { filename: name } })); + showMessage("Backup deleted."); + backups.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + return ( + void build()} disabled={busy}> + Build new backup + + } + > + {backups.data && backups.data.length === 0 ? ( + No backups yet. + ) : ( + + + + + + Backup + Created + Size + + + + + {(backups.data ?? []).map((backup) => ( + + + + {backup.backup_name} + + + {backup.created_time ?? "—"} + {formatSize(backup.size_bytes)} + + + + + ))} + +
+
+
+ )} +
+ ); +} diff --git a/web-ui/views/admin/kegs-admin-view.tsx b/web-ui/views/admin/kegs-admin-view.tsx new file mode 100644 index 000000000..cf727d2ce --- /dev/null +++ b/web-ui/views/admin/kegs-admin-view.tsx @@ -0,0 +1,290 @@ +import Button from "@mui/material/Button"; +import MuiLink from "@mui/material/Link"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import Tab from "@mui/material/Tab"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import Tabs from "@mui/material/Tabs"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { Link, useSearchParams } from "react-router"; +import type { Keg } from "@/api"; +import { + kegsCreate, + kegsDestroy, + kegsEndCreate, + kegsList, + kegsPartialUpdate, + kegsReactivateCreate, + kegsSpillCreate, +} from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { useFormatters } from "@/components/use-formatters"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import SHARED from "@/lib/shared-constants"; +import { useCursorList } from "@/lib/use-cursor-list"; +import { kegStatusChip } from "@/views/kegs/keg-list-view"; + +function KegActions({ keg, onChanged }: { keg: Keg; onChanged: () => void }) { + const confirm = useConfirm(); + const { showMessage } = useSnackbar(); + const [anchor, setAnchor] = useState(null); + + const act = async (action: () => Promise, message: string) => { + setAnchor(null); + try { + await action(); + showMessage(message); + onChanged(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + return ( + <> + + setAnchor(null)}> + {keg.status === "available" && ( + + void act(() => unwrap(kegsEndCreate({ path: { id: keg.id } })), "Keg finished.") + } + > + Mark finished + + )} + {keg.status === "finished" && ( + + void act( + () => unwrap(kegsReactivateCreate({ path: { id: keg.id } })), + "Keg reactivated.", + ) + } + > + Reactivate + + )} + { + setAnchor(null); + const volume = window.prompt("Spill volume (mL)?"); + if (!volume) { + return; + } + await act( + () => + unwrap( + kegsSpillCreate({ path: { id: keg.id }, body: { volume_ml: Number(volume) } }), + ), + "Spill recorded.", + ); + }} + > + Record spill… + + { + setAnchor(null); + if ( + await confirm({ + title: `Delete keg #${keg.id}?`, + message: "The keg and ALL of its drinks will be permanently destroyed.", + confirmText: "Delete keg", + destructive: true, + }) + ) { + await act(() => unwrap(kegsDestroy({ path: { id: keg.id } })), "Keg deleted."); + } + }} + > + Delete… + + + + ); +} + +function EditableNotes({ keg, onChanged }: { keg: Keg; onChanged: () => void }) { + const { showMessage } = useSnackbar(); + return ( + { + const description = window.prompt("Keg description:", keg.description ?? ""); + if (description === null) { + return; + } + try { + await unwrap(kegsPartialUpdate({ path: { id: keg.id }, body: { description } })); + showMessage("Keg updated."); + onChanged(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }} + > + edit + + ); +} + +const STATUS_TABS = [ + { label: "All", value: "" }, + { label: "On tap", value: "on_tap" }, + { label: "Available", value: "available" }, + { label: "Finished", value: "finished" }, +]; + +export function KegsAdminView() { + const { volume } = useFormatters(); + const { showMessage } = useSnackbar(); + const [params, setParams] = useSearchParams(); + const status = params.get("status") ?? ""; + + const kegs = useCursorList( + (cursor) => unwrap(kegsList({ query: { cursor, status: (status || undefined) as never } })), + [status], + ); + + const [beverage, setBeverage] = useState({ name: "", producer: "", style: "" }); + const [kegType, setKegType] = useState("half-barrel"); + const [busy, setBusy] = useState(false); + + const onCreate = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + try { + await unwrap( + kegsCreate({ + body: { + beverage_name: beverage.name, + producer_name: beverage.producer, + style_name: beverage.style, + keg_type: kegType as never, + }, + }), + ); + showMessage("Keg added to the keg room."); + setBeverage({ name: "", producer: "", style: "" }); + kegs.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + return ( + + + setParams(value ? { status: value } : {})} + variant="scrollable" + > + {STATUS_TABS.map((tab) => ( + + ))} + + + + + + Keg + Beverage + Status + Served + Description + + + + + {kegs.items.map((keg) => ( + + + + #{keg.id} + + + {keg.beverage.name} + {kegStatusChip(keg)} + {volume(keg.served_volume_ml)} + + + + {keg.description || "—"} + + + + + + + + + ))} + +
+
+ + Add a keg +
+ + setBeverage({ ...beverage, name: e.target.value })} + size="small" + required + /> + setBeverage({ ...beverage, producer: e.target.value })} + size="small" + required + /> + setBeverage({ ...beverage, style: e.target.value })} + size="small" + required + /> + setKegType(e.target.value)} + size="small" + sx={{ minWidth: 200 }} + > + {Object.entries(SHARED.KEG_TYPES).map(([value, label]) => ( + + {label} + + ))} + + + +
+
+
+ ); +} diff --git a/web-ui/views/admin/logs-view.tsx b/web-ui/views/admin/logs-view.tsx new file mode 100644 index 000000000..f8648162b --- /dev/null +++ b/web-ui/views/admin/logs-view.tsx @@ -0,0 +1,56 @@ +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import { adminLogsRetrieve } from "@/api"; +import { Page } from "@/components/page"; +import { unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +interface LogsPayload { + logs: unknown[]; + error: string | null; +} + +function formatRecord(record: unknown): string { + if (typeof record === "string") { + try { + const parsed = JSON.parse(record) as Record; + return `${parsed.time ?? ""} ${parsed.name ?? ""} ${parsed.msg ?? record}`; + } catch { + return record; + } + } + return JSON.stringify(record); +} + +export function LogsView() { + const logs = useAsyncData( + async () => (await unwrap(adminLogsRetrieve())) as unknown as LogsPayload, + ); + + return ( + + {logs.data?.error && {logs.data.error}} + {logs.data && logs.data.logs.length === 0 && !logs.data.error && ( + No recent log records. + )} + {logs.data && logs.data.logs.length > 0 && ( + + {logs.data.logs.map((record) => formatRecord(record)).join("\n")} + + )} + + ); +} diff --git a/web-ui/views/admin/plugin-settings-view.tsx b/web-ui/views/admin/plugin-settings-view.tsx new file mode 100644 index 000000000..7e28b5c27 --- /dev/null +++ b/web-ui/views/admin/plugin-settings-view.tsx @@ -0,0 +1,84 @@ +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { useEffect, useState } from "react"; +import { useParams } from "react-router"; +import { adminPluginsSettingsRetrieve, adminPluginsSettingsUpdate } from "@/api"; +import { useConfig } from "@/components/config-context"; +import { LoadingZone } from "@/components/loading-zone"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +/** + * Generic plugin settings editor: renders one field per key in the + * plugin's settings dict (the webhook plugin has a single URL list). + */ +export function PluginSettingsView() { + const params = useParams(); + const shortName = params.name ?? ""; + const { me } = useConfig(); + const { showMessage } = useSnackbar(); + + const plugin = me.plugins.find((p) => p.short_name === shortName); + const settings = useAsyncData( + async () => + (await unwrap( + adminPluginsSettingsRetrieve({ path: { short_name: shortName } }), + )) as unknown as Record, + { deps: [shortName] }, + ); + + const [values, setValues] = useState>({}); + const [busy, setBusy] = useState(false); + + useEffect(() => { + if (settings.data) { + setValues(Object.fromEntries(Object.entries(settings.data).map(([k, v]) => [k, v ?? ""]))); + } + }, [settings.data]); + + const save = async () => { + setBusy(true); + try { + await unwrap( + adminPluginsSettingsUpdate({ path: { short_name: shortName }, body: values as never }), + ); + showMessage("Plugin settings saved."); + settings.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + return ( + + + + {Object.entries(values).map(([key, value]) => ( + setValues((v) => ({ ...v, [key]: e.target.value }))} + multiline={key.includes("urls")} + minRows={key.includes("urls") ? 3 : 1} + helperText={key === "webhook_urls" ? "One URL per line." : undefined} + /> + ))} + + + + + ); +} diff --git a/web-ui/views/admin/producers-view.tsx b/web-ui/views/admin/producers-view.tsx new file mode 100644 index 000000000..7e6871da8 --- /dev/null +++ b/web-ui/views/admin/producers-view.tsx @@ -0,0 +1,197 @@ +import Button from "@mui/material/Button"; +import Checkbox from "@mui/material/Checkbox"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogTitle from "@mui/material/DialogTitle"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import TextField from "@mui/material/TextField"; +import { useState } from "react"; +import type { BeverageProducer } from "@/api"; +import { + beverageProducersCreate, + beverageProducersList, + beverageProducersPartialUpdate, + beverageProducersPictureCreate, +} from "@/api"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useCursorList } from "@/lib/use-cursor-list"; + +interface EditorState { + producer: BeverageProducer | null; + name: string; + country: string; + url: string; + isHomebrew: boolean; +} + +export function ProducersView() { + const { showMessage } = useSnackbar(); + const producers = useCursorList((cursor) => unwrap(beverageProducersList({ query: { cursor } }))); + const [editor, setEditor] = useState(null); + const [busy, setBusy] = useState(false); + + const save = async () => { + if (!editor) { + return; + } + setBusy(true); + const body = { + name: editor.name, + country: editor.country as never, + url: editor.url, + is_homebrew: editor.isHomebrew, + }; + try { + if (editor.producer) { + await unwrap(beverageProducersPartialUpdate({ path: { id: editor.producer.id }, body })); + showMessage("Producer updated."); + } else { + await unwrap(beverageProducersCreate({ body })); + showMessage("Producer created."); + } + setEditor(null); + producers.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + const uploadPicture = async (producer: BeverageProducer, file: File | undefined) => { + if (!file) { + return; + } + try { + await unwrap( + beverageProducersPictureCreate({ path: { id: producer.id }, body: { image: file } }), + ); + showMessage("Picture updated."); + producers.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + return ( + + setEditor({ producer: null, name: "", country: "", url: "", isHomebrew: false }) + } + > + Add producer + + } + > + + + + + + Name + Country + Homebrew? + + + + + {producers.items.map((producer) => ( + + {producer.name} + {producer.country} + {producer.is_homebrew ? "Yes" : ""} + + + + + + + + ))} + +
+
+ +
+ + setEditor(null)} fullWidth maxWidth="sm"> + {editor?.producer ? "Edit producer" : "Add producer"} + + {editor && ( + + setEditor({ ...editor, name: e.target.value })} + required + /> + setEditor({ ...editor, country: e.target.value })} + /> + setEditor({ ...editor, url: e.target.value })} + /> + setEditor({ ...editor, isHomebrew: e.target.checked })} + /> + } + label="Homebrew" + /> + + )} + + + + + + +
+ ); +} diff --git a/web-ui/views/admin/settings-advanced-view.tsx b/web-ui/views/admin/settings-advanced-view.tsx new file mode 100644 index 000000000..51cec958f --- /dev/null +++ b/web-ui/views/admin/settings-advanced-view.tsx @@ -0,0 +1,113 @@ +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useEffect, useState } from "react"; +import { siteBackgroundImageCreate } from "@/api"; +import { LoadingZone } from "@/components/loading-zone"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { fieldError } from "@/lib/forms"; +import { useSiteSettings } from "@/views/admin/use-site-settings"; + +export function SettingsAdvancedView() { + const { settings, save, busy, errors } = useSiteSettings(); + const { showMessage } = useSnackbar(); + const [sessionTimeout, setSessionTimeout] = useState("180"); + const [analyticsId, setAnalyticsId] = useState(""); + const [emailConfig, setEmailConfig] = useState(""); + const [uploading, setUploading] = useState(false); + + useEffect(() => { + if (settings.data) { + setSessionTimeout(String(settings.data.session_timeout_minutes ?? 180)); + setAnalyticsId(settings.data.google_analytics_id ?? ""); + setEmailConfig(settings.data.email_config ?? ""); + } + }, [settings.data]); + + const onSubmit = (event: FormEvent) => { + event.preventDefault(); + void save({ + session_timeout_minutes: Number(sessionTimeout), + google_analytics_id: analyticsId || null, + email_config: emailConfig, + }); + }; + + const onBackground = async (file: File | undefined) => { + if (!file) { + return; + } + setUploading(true); + try { + await unwrap(siteBackgroundImageCreate({ body: { image: file } })); + showMessage("Background image updated."); + settings.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setUploading(false); + } + }; + + return ( + + +
+ + setSessionTimeout(e.target.value)} + error={Boolean(fieldError(errors, "session_timeout_minutes"))} + helperText={ + fieldError(errors, "session_timeout_minutes") ?? + "Idle time before a drinking session is considered finished." + } + /> + setAnalyticsId(e.target.value)} + error={Boolean(fieldError(errors, "google_analytics_id"))} + helperText={fieldError(errors, "google_analytics_id")} + /> + setEmailConfig(e.target.value)} + error={Boolean(fieldError(errors, "email_config"))} + helperText={ + fieldError(errors, "email_config") ?? + "URI like smtp://user:pass@host:port or console:" + } + /> + + + Background image + + + +
+
+
+ ); +} diff --git a/web-ui/views/admin/settings-general-view.tsx b/web-ui/views/admin/settings-general-view.tsx new file mode 100644 index 000000000..b02006a33 --- /dev/null +++ b/web-ui/views/admin/settings-general-view.tsx @@ -0,0 +1,110 @@ +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import Switch from "@mui/material/Switch"; +import TextField from "@mui/material/TextField"; +import { type FormEvent, useEffect, useState } from "react"; +import { LoadingZone } from "@/components/loading-zone"; +import { Page } from "@/components/page"; +import { fieldError, nonFieldErrors } from "@/lib/forms"; +import SHARED from "@/lib/shared-constants"; +import { useSiteSettings } from "@/views/admin/use-site-settings"; + +export function SettingsGeneralView() { + const { settings, save, busy, errors } = useSiteSettings(); + const [title, setTitle] = useState(""); + const [privacy, setPrivacy] = useState("public"); + const [registrationMode, setRegistrationMode] = useState("public"); + const [enableSensing, setEnableSensing] = useState(true); + const [enableUsers, setEnableUsers] = useState(true); + + useEffect(() => { + if (settings.data) { + setTitle(settings.data.title ?? ""); + setPrivacy(settings.data.privacy ?? "public"); + setRegistrationMode(settings.data.registration_mode ?? "public"); + setEnableSensing(settings.data.enable_sensing ?? true); + setEnableUsers(settings.data.enable_users ?? true); + } + }, [settings.data]); + + const onSubmit = (event: FormEvent) => { + event.preventDefault(); + void save({ + title, + privacy: privacy as never, + registration_mode: registrationMode as never, + enable_sensing: enableSensing, + enable_users: enableUsers, + }); + }; + + return ( + + +
+ + {nonFieldErrors(errors, ["title", "privacy", "registration_mode"]).map((message) => ( + + {message} + + ))} + setTitle(e.target.value)} + error={Boolean(fieldError(errors, "title"))} + helperText={fieldError(errors, "title")} + /> + setPrivacy(e.target.value)} + helperText="Who can view this site?" + > + {Object.entries(SHARED.PRIVACY_CHOICES).map(([value, label]) => ( + + {label} + + ))} + + setRegistrationMode(e.target.value)} + helperText="Who can create accounts?" + > + {Object.entries(SHARED.REGISTRATION_MODE_CHOICES).map(([value, label]) => ( + + {label} + + ))} + + setEnableSensing(e.target.checked)} + /> + } + label="Enable hardware sensing features" + /> + setEnableUsers(e.target.checked)} /> + } + label="Enable user pour tracking" + /> + + +
+
+
+ ); +} diff --git a/web-ui/views/admin/settings-location-view.tsx b/web-ui/views/admin/settings-location-view.tsx new file mode 100644 index 000000000..b72f2bbfc --- /dev/null +++ b/web-ui/views/admin/settings-location-view.tsx @@ -0,0 +1,88 @@ +import Autocomplete from "@mui/material/Autocomplete"; +import Button from "@mui/material/Button"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { type FormEvent, useEffect, useState } from "react"; +import { LoadingZone } from "@/components/loading-zone"; +import { Page } from "@/components/page"; +import { fieldError } from "@/lib/forms"; +import SHARED from "@/lib/shared-constants"; +import { useSiteSettings } from "@/views/admin/use-site-settings"; + +const TIMEZONES = SHARED.TIMEZONES as readonly string[]; + +export function SettingsLocationView() { + const { settings, save, busy, errors } = useSiteSettings(); + const [volumeUnits, setVolumeUnits] = useState("imperial"); + const [temperatureUnits, setTemperatureUnits] = useState("f"); + const [timezone, setTimezone] = useState("UTC"); + + useEffect(() => { + if (settings.data) { + setVolumeUnits(settings.data.volume_display_units ?? "imperial"); + setTemperatureUnits(settings.data.temperature_display_units ?? "f"); + setTimezone(settings.data.timezone ?? "UTC"); + } + }, [settings.data]); + + const onSubmit = (event: FormEvent) => { + event.preventDefault(); + void save({ + volume_display_units: volumeUnits as never, + temperature_display_units: temperatureUnits as never, + timezone: timezone as never, + }); + }; + + return ( + + +
+ + setVolumeUnits(e.target.value)} + > + {Object.entries(SHARED.VOLUME_DISPLAY_UNITS_CHOICES).map(([value, label]) => ( + + {label} + + ))} + + setTemperatureUnits(e.target.value)} + > + {Object.entries(SHARED.TEMPERATURE_DISPLAY_UNITS_CHOICES).map(([value, label]) => ( + + {label} + + ))} + + setTimezone(value ?? "UTC")} + renderInput={(params) => ( + + )} + /> + + +
+
+
+ ); +} diff --git a/web-ui/views/admin/tap-detail-view.tsx b/web-ui/views/admin/tap-detail-view.tsx new file mode 100644 index 000000000..414b44f13 --- /dev/null +++ b/web-ui/views/admin/tap-detail-view.tsx @@ -0,0 +1,463 @@ +import Button from "@mui/material/Button"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import CardHeader from "@mui/material/CardHeader"; +import Grid from "@mui/material/Grid"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { type FormEvent, useState } from "react"; +import { useNavigate, useParams } from "react-router"; +import { + flowMetersList, + flowTogglesList, + kegsList, + tapsAttachKegCreate, + tapsConnectMeterCreate, + tapsConnectThermoCreate, + tapsConnectToggleCreate, + tapsDestroy, + tapsEndKegCreate, + tapsPartialUpdate, + tapsRecordDrinkCreate, + tapsRetrieve, + tapsStartKegCreate, + thermoSensorsList, + usersList, +} from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { KegProgress } from "@/components/keg-progress"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import SHARED from "@/lib/shared-constants"; +import { useAsyncData } from "@/lib/use-async-data"; + +function useAction(onDone: () => void) { + const { showMessage } = useSnackbar(); + const [busy, setBusy] = useState(false); + const run = async (action: () => Promise, successMessage: string) => { + setBusy(true); + try { + await action(); + showMessage(successMessage); + onDone(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + return { busy, run }; +} + +export function TapDetailView() { + const params = useParams(); + const tapId = Number(params.id); + const navigate = useNavigate(); + const confirm = useConfirm(); + + const tap = useAsyncData(() => unwrap(tapsRetrieve({ path: { id: tapId } })), { + deps: [tapId], + }); + const { busy, run } = useAction(() => tap.reload()); + + const availableKegs = useAsyncData( + async () => + (await unwrap(kegsList({ query: { status: "available", page_size: 100 } }))).results ?? [], + { deps: [tap.data?.current_keg_id ?? null] }, + ); + const meters = useAsyncData( + async () => (await unwrap(flowMetersList({ query: { page_size: 100 } }))).results ?? [], + ); + const toggles = useAsyncData( + async () => (await unwrap(flowTogglesList({ query: { page_size: 100 } }))).results ?? [], + ); + const sensors = useAsyncData( + async () => (await unwrap(thermoSensorsList({ query: { page_size: 100 } }))).results ?? [], + ); + + const [name, setName] = useState(null); + const [attachKegId, setAttachKegId] = useState(""); + const [newBeverage, setNewBeverage] = useState({ name: "", producer: "", style: "" }); + const [newKegType, setNewKegType] = useState( + SHARED.KEG_TYPE_OTHER === "other" ? "half-barrel" : "half-barrel", + ); + const [pour, setPour] = useState({ volume: "", username: "", shout: "", spilled: false }); + + const currentKeg = tap.data?.current_keg ?? null; + + const endKeg = async () => { + if ( + await confirm({ + title: "End this keg?", + message: "The keg will be marked finished and detached from the tap.", + confirmText: "End keg", + destructive: true, + }) + ) { + await run(() => unwrap(tapsEndKegCreate({ path: { id: tapId } })), "Keg ended."); + } + }; + + const deleteTap = async () => { + if ( + await confirm({ + title: "Delete this tap?", + confirmText: "Delete", + destructive: true, + }) + ) { + try { + await unwrap(tapsDestroy({ path: { id: tapId } })); + navigate("/kegadmin/taps"); + } catch { + // surfaced by snackbar in run(); simple fallback here + } + } + }; + + const startKeg = (event: FormEvent) => { + event.preventDefault(); + void run( + () => + unwrap( + tapsStartKegCreate({ + path: { id: tapId }, + body: { + beverage_name: newBeverage.name, + producer_name: newBeverage.producer, + style_name: newBeverage.style, + keg_type: newKegType as never, + }, + }), + ), + "New keg started.", + ); + }; + + const recordDrink = (event: FormEvent) => { + event.preventDefault(); + void run( + () => + unwrap( + tapsRecordDrinkCreate({ + path: { id: tapId }, + body: { + volume_ml: Number(pour.volume), + username: pour.username, + shout: pour.shout, + spilled: pour.spilled, + }, + }), + ), + pour.spilled ? "Spill recorded." : "Drink recorded.", + ); + }; + + const usernames = useAsyncData( + async () => (await unwrap(usersList({ query: { page_size: 100 } }))).results ?? [], + ); + + return ( + + {tap.data && ( + + + + + {currentKeg ? ( + + + {currentKeg.beverage.name}{" "} + + ({currentKeg.beverage.producer.name}) + + + + + + + + ) : ( + + + + Attach an existing keg + setAttachKegId(e.target.value)} + size="small" + > + {(availableKegs.data ?? []).map((keg) => ( + + #{keg.id} — {keg.beverage.name} + + ))} + + + + + +
+ + …or start a brand-new keg + setNewBeverage({ ...newBeverage, name: e.target.value })} + size="small" + required + /> + + setNewBeverage({ ...newBeverage, producer: e.target.value }) + } + size="small" + required + /> + + setNewBeverage({ ...newBeverage, style: e.target.value }) + } + size="small" + required + /> + setNewKegType(e.target.value)} + size="small" + > + {Object.entries(SHARED.KEG_TYPES).map(([value, label]) => ( + + {label} + + ))} + + + +
+
+
+ )} +
+
+ + {currentKeg && ( + + + +
+ + setPour({ ...pour, volume: e.target.value })} + size="small" + required + /> + setPour({ ...pour, username: e.target.value })} + size="small" + sx={{ minWidth: 160 }} + > + guest + {(usernames.data ?? []).map((user) => ( + + {user.username} + + ))} + + setPour({ ...pour, shout: e.target.value })} + size="small" + /> + setPour({ ...pour, spilled: e.target.value === "spill" })} + size="small" + > + Drink + Spill + + + +
+
+
+ )} + + + + + + m.tap_id === tapId)?.id ?? "")} + onChange={(e) => + void run( + () => + unwrap( + tapsConnectMeterCreate({ + path: { id: tapId }, + body: { meter_id: e.target.value ? Number(e.target.value) : null }, + }), + ), + "Meter connection updated.", + ) + } + size="small" + > + — not connected — + {(meters.data ?? []).map((meter) => ( + + Meter #{meter.id} (port {meter.port_name}) + + ))} + + t.tap_id === tapId)?.id ?? "")} + onChange={(e) => + void run( + () => + unwrap( + tapsConnectToggleCreate({ + path: { id: tapId }, + body: { toggle_id: e.target.value ? Number(e.target.value) : null }, + }), + ), + "Toggle connection updated.", + ) + } + size="small" + > + — not connected — + {(toggles.data ?? []).map((toggle) => ( + + Toggle #{toggle.id} (port {toggle.port_name}) + + ))} + + + void run( + () => + unwrap( + tapsConnectThermoCreate({ + path: { id: tapId }, + body: { + thermo_sensor_id: e.target.value ? Number(e.target.value) : null, + }, + }), + ), + "Sensor connection updated.", + ) + } + size="small" + > + — not connected — + {(sensors.data ?? []).map((sensor) => ( + + {sensor.nice_name || sensor.raw_name} + + ))} + + + + + + + + + + setName(e.target.value)} + size="small" + sx={{ flexGrow: 1 }} + /> + + + + + +
+ )} +
+ ); +} diff --git a/web-ui/views/admin/taps-view.tsx b/web-ui/views/admin/taps-view.tsx new file mode 100644 index 000000000..ca19cbc98 --- /dev/null +++ b/web-ui/views/admin/taps-view.tsx @@ -0,0 +1,88 @@ +import AddIcon from "@mui/icons-material/Add"; +import Button from "@mui/material/Button"; +import MuiLink from "@mui/material/Link"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import TextField from "@mui/material/TextField"; +import { type FormEvent, useState } from "react"; +import { Link } from "react-router"; +import { tapsCreate, tapsList } from "@/api"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; + +export function TapsView() { + const { showMessage } = useSnackbar(); + const taps = useAsyncData( + async () => (await unwrap(tapsList({ query: { page_size: 100 } }))).results ?? [], + ); + const [name, setName] = useState(""); + const [busy, setBusy] = useState(false); + + const onCreate = async (event: FormEvent) => { + event.preventDefault(); + setBusy(true); + try { + await unwrap(tapsCreate({ body: { name } })); + showMessage(`Tap "${name}" created.`); + setName(""); + taps.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + return ( + + + + + + + Tap + Current keg + + + + {(taps.data ?? []).map((tap) => ( + + + + {tap.name} + + + + {tap.current_keg ? tap.current_keg.beverage.name : "— empty —"} + + + ))} + +
+
+
+ + setName(e.target.value)} + size="small" + required + sx={{ flexGrow: 1 }} + /> + + +
+
+
+ ); +} diff --git a/web-ui/views/admin/tokens-view.tsx b/web-ui/views/admin/tokens-view.tsx new file mode 100644 index 000000000..fa7176fb5 --- /dev/null +++ b/web-ui/views/admin/tokens-view.tsx @@ -0,0 +1,246 @@ +import Button from "@mui/material/Button"; +import Checkbox from "@mui/material/Checkbox"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogTitle from "@mui/material/DialogTitle"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import TextField from "@mui/material/TextField"; +import { useState } from "react"; +import type { AuthenticationToken } from "@/api"; +import { + authTokensCreate, + authTokensDestroy, + authTokensList, + authTokensPartialUpdate, + usersList, +} from "@/api"; +import { useConfirm } from "@/components/confirm-context"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useAsyncData } from "@/lib/use-async-data"; +import { useCursorList } from "@/lib/use-cursor-list"; + +interface EditorState { + token: AuthenticationToken | null; + authDevice: string; + tokenValue: string; + niceName: string; + userId: string; + enabled: boolean; +} + +export function TokensView() { + const { showMessage } = useSnackbar(); + const confirm = useConfirm(); + const [search, setSearch] = useState(""); + const tokens = useCursorList( + (cursor) => unwrap(authTokensList({ query: { cursor, search: search || undefined } })), + [search], + ); + const users = useAsyncData( + async () => (await unwrap(usersList({ query: { page_size: 100 } }))).results ?? [], + ); + const [editor, setEditor] = useState(null); + const [busy, setBusy] = useState(false); + + const save = async () => { + if (!editor) { + return; + } + setBusy(true); + const body = { + auth_device: editor.authDevice, + token_value: editor.tokenValue, + nice_name: editor.niceName, + user: editor.userId ? Number(editor.userId) : null, + enabled: editor.enabled, + }; + try { + if (editor.token) { + await unwrap(authTokensPartialUpdate({ path: { id: editor.token.id }, body })); + showMessage("Token updated."); + } else { + await unwrap(authTokensCreate({ body })); + showMessage("Token created."); + } + setEditor(null); + tokens.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + const remove = async (token: AuthenticationToken) => { + if ( + await confirm({ + title: "Delete this token?", + confirmText: "Delete", + destructive: true, + }) + ) { + try { + await unwrap(authTokensDestroy({ path: { id: token.id } })); + showMessage("Token deleted."); + tokens.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + } + }; + + const usernameFor = (userId: number | null | undefined) => + users.data?.find((user) => user.id === userId)?.username ?? + (userId != null ? `#${userId}` : "—"); + + return ( + + setEditor({ + token: null, + authDevice: "core.rfid", + tokenValue: "", + niceName: "", + userId: "", + enabled: true, + }) + } + > + Add token + + } + > + + setSearch(e.target.value)} + size="small" + sx={{ maxWidth: 320 }} + /> + + + + + Device + Value + Name + User + Enabled + + + + + {tokens.items.map((token) => ( + + {token.auth_device} + {token.token_value} + {token.nice_name} + {usernameFor(token.user_id)} + {token.enabled ? "Yes" : "No"} + + + + + + + + ))} + +
+
+ +
+ + setEditor(null)} fullWidth maxWidth="xs"> + {editor?.token ? "Edit token" : "Add token"} + + {editor && ( + + setEditor({ ...editor, authDevice: e.target.value })} + helperText='Namespace, e.g. "core.rfid" or "core.onewire"' + required + /> + setEditor({ ...editor, tokenValue: e.target.value })} + required + /> + setEditor({ ...editor, niceName: e.target.value })} + /> + setEditor({ ...editor, userId: e.target.value })} + > + — unassigned — + {(users.data ?? []).map((user) => ( + + {user.username} + + ))} + + setEditor({ ...editor, enabled: e.target.checked })} + /> + } + label="Enabled" + /> + + )} + + + + + + +
+ ); +} diff --git a/web-ui/views/admin/use-site-settings.ts b/web-ui/views/admin/use-site-settings.ts new file mode 100644 index 000000000..77b56d032 --- /dev/null +++ b/web-ui/views/admin/use-site-settings.ts @@ -0,0 +1,37 @@ +import { useState } from "react"; +import type { PatchedSiteSettingsRequest } from "@/api"; +import { sitePartialUpdate, siteRetrieve } from "@/api"; +import { useConfig } from "@/components/config-context"; +import { useSnackbar } from "@/components/snackbar-context"; +import type { FormErrors } from "@/lib/api"; +import { unwrap } from "@/lib/api"; +import { formErrorsFromException } from "@/lib/forms"; +import { useAsyncData } from "@/lib/use-async-data"; + +/** Loads /api/site and provides a save helper for the settings views. */ +export function useSiteSettings() { + const { refresh } = useConfig(); + const { showMessage } = useSnackbar(); + const settings = useAsyncData(() => unwrap(siteRetrieve())); + const [busy, setBusy] = useState(false); + const [errors, setErrors] = useState(null); + + const save = async (patch: PatchedSiteSettingsRequest) => { + setBusy(true); + setErrors(null); + try { + await unwrap(sitePartialUpdate({ body: patch })); + await refresh(); + settings.reload(); + showMessage("Settings saved."); + return true; + } catch (error) { + setErrors(formErrorsFromException(error)); + return false; + } finally { + setBusy(false); + } + }; + + return { settings, save, busy, errors }; +} diff --git a/web-ui/views/admin/users-admin-view.tsx b/web-ui/views/admin/users-admin-view.tsx new file mode 100644 index 000000000..fd1b05587 --- /dev/null +++ b/web-ui/views/admin/users-admin-view.tsx @@ -0,0 +1,228 @@ +import Button from "@mui/material/Button"; +import Checkbox from "@mui/material/Checkbox"; +import Chip from "@mui/material/Chip"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogTitle from "@mui/material/DialogTitle"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import TextField from "@mui/material/TextField"; +import { useState } from "react"; +import type { User } from "@/api"; +import { usersCreate, usersList, usersPartialUpdate, usersSetPasswordCreate } from "@/api"; +import { LoadMoreButton } from "@/components/load-more-button"; +import { Page } from "@/components/page"; +import { useSnackbar } from "@/components/snackbar-context"; +import { UserLink } from "@/components/user-link"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import { useCursorList } from "@/lib/use-cursor-list"; + +function UserActions({ user, onChanged }: { user: User; onChanged: () => void }) { + const { showMessage } = useSnackbar(); + const [anchor, setAnchor] = useState(null); + + const patch = async (body: Record, message: string) => { + setAnchor(null); + try { + await unwrap(usersPartialUpdate({ path: { username: user.username }, body: body as never })); + showMessage(message); + onChanged(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + const setPassword = async () => { + setAnchor(null); + const password = window.prompt(`New password for ${user.username}:`); + if (!password) { + return; + } + try { + await unwrap( + usersSetPasswordCreate({ path: { username: user.username }, body: { password } }), + ); + showMessage("Password updated."); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } + }; + + if (user.username === "guest") { + return null; + } + + return ( + <> + + setAnchor(null)}> + {user.is_active ? ( + void patch({ is_active: false }, "Account disabled.")}> + Disable account + + ) : ( + void patch({ is_active: true }, "Account enabled.")}> + Enable account + + )} + {user.is_staff ? ( + void patch({ is_staff: false }, "Staff access revoked.")}> + Revoke staff + + ) : ( + void patch({ is_staff: true }, "Staff access granted.")}> + Grant staff + + )} + void setPassword()}>Set password… + + + ); +} + +export function UsersAdminView() { + const { showMessage } = useSnackbar(); + const [search, setSearch] = useState(""); + const users = useCursorList( + (cursor) => unwrap(usersList({ query: { cursor, search: search || undefined } })), + [search], + ); + + const [creating, setCreating] = useState(false); + const [form, setForm] = useState({ username: "", email: "", password: "", isStaff: false }); + const [busy, setBusy] = useState(false); + + const create = async () => { + setBusy(true); + try { + await unwrap( + usersCreate({ + body: { + username: form.username, + email: form.email, + password: form.password, + is_staff: form.isStaff, + }, + }), + ); + showMessage(`User ${form.username} created.`); + setCreating(false); + setForm({ username: "", email: "", password: "", isStaff: false }); + users.reload(); + } catch (error) { + showMessage(toErrorMessage(error), "error"); + } finally { + setBusy(false); + } + }; + + return ( + setCreating(true)}> + Add user + + } + > + + setSearch(e.target.value)} + size="small" + sx={{ maxWidth: 320 }} + /> + + + + + User + Display name + Status + + + + + {users.items + .filter((user) => user.username !== "guest") + .map((user) => ( + + + + + {user.display_name} + + + {!user.is_active && } + {user.is_staff && } + + + + + + + ))} + +
+
+ +
+ + setCreating(false)} fullWidth maxWidth="xs"> + Add user + + + setForm({ ...form, username: e.target.value })} + required + /> + setForm({ ...form, email: e.target.value })} + /> + setForm({ ...form, password: e.target.value })} + required + /> + setForm({ ...form, isStaff: e.target.checked })} + /> + } + label="Staff (admin access)" + /> + + + + + + + +
+ ); +} From 8f44ef622327ea8421f7990cc740fc5fdb302729 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:16:21 +0000 Subject: [PATCH 18/48] web-ui: setup wizard and upgrade flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the boot request reports setup_required or upgrade_required, the app renders a full-page flow instead of the site: a five-step wizard (migrate the database with output shown, hardware sensing toggle, user-accounts toggle, initial site settings, admin account) that submits collected choices in one settings call before creating the admin and finishing — no server-side inter-step state — or a one-click upgrade page showing installed vs. new version. Both reload into the freshly-configured app on success. --- web-ui/app.tsx | 3 +- web-ui/test/app-boot.test.tsx | 23 ++- web-ui/views/setup/setup-app.tsx | 310 +++++++++++++++++++++++++++++++ 3 files changed, 333 insertions(+), 3 deletions(-) create mode 100644 web-ui/views/setup/setup-app.tsx diff --git a/web-ui/app.tsx b/web-ui/app.tsx index cfd8a77e6..1748fb1f6 100644 --- a/web-ui/app.tsx +++ b/web-ui/app.tsx @@ -9,6 +9,7 @@ import { CurrentUserProvider } from "@/components/current-user-context"; import { SnackbarProvider } from "@/components/snackbar-context"; import { AppRoutes } from "@/routes"; import { theme } from "@/theme/theme"; +import { SetupApp } from "@/views/setup/setup-app"; export function App() { // A single splat route delegates to a classic tree; the data @@ -19,7 +20,7 @@ export function App() { - + }> diff --git a/web-ui/test/app-boot.test.tsx b/web-ui/test/app-boot.test.tsx index 67f355c60..0057513f0 100644 --- a/web-ui/test/app-boot.test.tsx +++ b/web-ui/test/app-boot.test.tsx @@ -49,10 +49,29 @@ test("staff-only site blocks a logged-in non-staff member", async () => { expect(await screen.findByText("Staff only")).toBeTruthy(); }); -test("setup-required responses render the setup notice", async () => { +test("setup-required responses render the setup wizard", async () => { ({ restore } = mockApi({ "GET /api/users/me": { status: 403, body: { error: "setup_required" } }, })); render(); - expect(await screen.findByText(/needs to be set up/)).toBeTruthy(); + expect(await screen.findByText("Welcome to Kegbot!")).toBeTruthy(); + expect(screen.getByText("Set up database")).toBeTruthy(); +}); + +test("upgrade-required responses render the upgrade flow", async () => { + ({ restore } = mockApi({ + "GET /api/users/me": { status: 403, body: { error: "upgrade_required" } }, + "GET /api/setup/status": { + status: 200, + body: { + need_setup: false, + need_upgrade: true, + installed_version: "1.0.0", + current_version: "2.0.0", + }, + }, + })); + render(); + expect(await screen.findByText("Upgrade required")).toBeTruthy(); + expect(await screen.findByText(/1\.0\.0/)).toBeTruthy(); }); diff --git a/web-ui/views/setup/setup-app.tsx b/web-ui/views/setup/setup-app.tsx new file mode 100644 index 000000000..eca5f70d9 --- /dev/null +++ b/web-ui/views/setup/setup-app.tsx @@ -0,0 +1,310 @@ +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import Container from "@mui/material/Container"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import MenuItem from "@mui/material/MenuItem"; +import Paper from "@mui/material/Paper"; +import Stack from "@mui/material/Stack"; +import Step from "@mui/material/Step"; +import StepLabel from "@mui/material/StepLabel"; +import Stepper from "@mui/material/Stepper"; +import Switch from "@mui/material/Switch"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { useState } from "react"; +import { + setupAdminUserCreate, + setupFinishCreate, + setupMigrateCreate, + setupSettingsCreate, + setupStatusRetrieve, + setupUpgradeCreate, +} from "@/api"; +import { LoadingZone } from "@/components/loading-zone"; +import { toErrorMessage, unwrap } from "@/lib/api"; +import SHARED from "@/lib/shared-constants"; +import { useAsyncData } from "@/lib/use-async-data"; + +const STEPS = ["Database", "Hardware", "Accounts", "Site settings", "Admin account"]; + +function UpgradeApp() { + const status = useAsyncData(() => unwrap(setupStatusRetrieve())); + const [busy, setBusy] = useState(false); + const [error, setError] = useState(null); + + const upgrade = async () => { + setBusy(true); + setError(null); + try { + await unwrap(setupUpgradeCreate()); + window.location.reload(); + } catch (e) { + setError(toErrorMessage(e)); + setBusy(false); + } + }; + + return ( + + + + Upgrade required + + Installed version: {status.data?.installed_version ?? "unknown"} · new version:{" "} + {status.data?.current_version} + + {error && {error}} + + + + + ); +} + +function SetupWizard() { + const [step, setStep] = useState(0); + const [busy, setBusy] = useState(false); + const [error, setError] = useState(null); + const [migrateOutput, setMigrateOutput] = useState(null); + + const [enableSensing, setEnableSensing] = useState(true); + const [enableUsers, setEnableUsers] = useState(true); + const [site, setSite] = useState({ + title: "My Kegbot", + privacy: "public", + timezone: "UTC", + volume_display_units: "imperial", + temperature_display_units: "f", + }); + const [admin, setAdmin] = useState({ username: "admin", email: "", password: "", password2: "" }); + + const runStep = async (action: () => Promise) => { + setBusy(true); + setError(null); + try { + await action(); + } catch (e) { + setError(toErrorMessage(e)); + } finally { + setBusy(false); + } + }; + + const migrate = () => + runStep(async () => { + const result = (await unwrap(setupMigrateCreate())) as { output?: string }; + setMigrateOutput(result.output ?? ""); + setStep(1); + }); + + const finish = () => + runStep(async () => { + if (admin.password !== admin.password2) { + throw new Error("The two password fields didn't match."); + } + await unwrap( + setupSettingsCreate({ + body: { + title: site.title, + privacy: site.privacy as never, + timezone: site.timezone as never, + volume_display_units: site.volume_display_units as never, + temperature_display_units: site.temperature_display_units as never, + enable_sensing: enableSensing, + enable_users: enableUsers, + }, + }), + ); + await unwrap( + setupAdminUserCreate({ + body: { username: admin.username, email: admin.email, password: admin.password }, + }), + ); + await unwrap(setupFinishCreate()); + window.location.reload(); + }); + + return ( + + Welcome to Kegbot! + + {STEPS.map((label) => ( + + {label} + + ))} + + {error && {error}} + + {step === 0 && ( + + + First, let's create (or update) the database. This may take a minute. + + + {migrateOutput != null && ( + + {migrateOutput} + + )} + + )} + + {step === 1 && ( + + Will this Kegbot have flow-sensing hardware attached? + setEnableSensing(e.target.checked)} + /> + } + label="Enable hardware sensing features" + /> + + + )} + + {step === 2 && ( + + Track individual drinkers with user accounts? + setEnableUsers(e.target.checked)} /> + } + label="Enable user pour tracking" + /> + + + )} + + {step === 3 && ( + + setSite({ ...site, title: e.target.value })} + /> + setSite({ ...site, privacy: e.target.value })} + > + {Object.entries(SHARED.PRIVACY_CHOICES).map(([value, label]) => ( + + {label} + + ))} + + setSite({ ...site, timezone: e.target.value })} + > + {SHARED.TIMEZONES.map((zone) => ( + + {zone} + + ))} + + setSite({ ...site, volume_display_units: e.target.value })} + > + {Object.entries(SHARED.VOLUME_DISPLAY_UNITS_CHOICES).map(([value, label]) => ( + + {label} + + ))} + + setSite({ ...site, temperature_display_units: e.target.value })} + > + {Object.entries(SHARED.TEMPERATURE_DISPLAY_UNITS_CHOICES).map(([value, label]) => ( + + {label} + + ))} + + + + )} + + {step === 4 && ( + + Finally, create your admin account. + setAdmin({ ...admin, username: e.target.value })} + required + /> + setAdmin({ ...admin, email: e.target.value })} + helperText="In case you lose your password." + required + /> + setAdmin({ ...admin, password: e.target.value })} + required + /> + setAdmin({ ...admin, password2: e.target.value })} + required + /> + + + )} + + ); +} + +/** Full-page setup/upgrade flow, rendered instead of the app. */ +export function SetupApp({ kind }: { kind: "setup_required" | "upgrade_required" }) { + return ( + + + {kind === "upgrade_required" ? : } + + + ); +} From d5beab5229b18b5f4a9777613bb29e489856ab5a Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:23:07 +0000 Subject: [PATCH 19/48] web: serve the spa from django; dev on localhost:8000 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Production: the vite bundle (built with base=/static/) is collected into the static tree; a catch-all route (everything except api, media, static, and admin paths) renders the SPA shell from vite's manifest via {% static %}, composing with WhiteNoise's hashed-manifest storage, and sets the CSRF cookie. The Dockerfile gains a bun build stage whose output lands before collectstatic. Both UIs coexist for now: existing server-rendered URLs still win; the SPA serves everything else. Development: browsing http://localhost:8000 now just works — vite owns 8000 and proxies /api, /media, and /static to Django, whose runserver now defaults to 8001 (pykeg.core precedes whitenoise in INSTALLED_APPS so its runserver override wins). The generated client moves from web-ui/api/ to web-ui/api-client/: with vite's root serving sources at /, the old location's module URLs collided with the /api proxy prefix and came back as HTML. The old kegweb short-link test now uses the canonical slashed URLs, since slash-less paths fall through to the SPA instead of APPEND_SLASH. --- Dockerfile | 15 +++++- biome.json | 2 +- openapi-ts.config.ts | 2 +- pykeg/core/management/commands/runserver.py | 16 ++++++ pykeg/settings.py | 7 ++- pykeg/web/kegweb/kegweb_test.py | 6 ++- pykeg/web/spa.py | 51 +++++++++++++++++++ pykeg/web/templates/spa/index.html | 13 +++++ pykeg/web/urls.py | 9 +++- vite.config.ts | 17 ++++--- web-ui/{api => api-client}/client.gen.ts | 0 .../{api => api-client}/client/client.gen.ts | 0 web-ui/{api => api-client}/client/index.ts | 0 .../{api => api-client}/client/types.gen.ts | 0 .../{api => api-client}/client/utils.gen.ts | 0 web-ui/{api => api-client}/core/auth.gen.ts | 0 .../core/bodySerializer.gen.ts | 0 web-ui/{api => api-client}/core/params.gen.ts | 0 .../core/pathSerializer.gen.ts | 0 web-ui/{api => api-client}/core/types.gen.ts | 0 web-ui/{api => api-client}/index.ts | 0 web-ui/{api => api-client}/sdk.gen.ts | 0 web-ui/{api => api-client}/types.gen.ts | 0 .../components/charts/temperature-chart.tsx | 2 +- web-ui/components/config-context.tsx | 4 +- web-ui/components/current-user-context.tsx | 4 +- web-ui/components/drink-list.tsx | 2 +- web-ui/components/event-timeline.tsx | 2 +- web-ui/components/keg-progress.tsx | 2 +- web-ui/components/tap-card-live.tsx | 4 +- web-ui/components/tap-card.tsx | 2 +- web-ui/components/user-link.tsx | 2 +- web-ui/lib/api.ts | 2 +- web-ui/test/helpers.tsx | 2 +- web-ui/views/account/account-view.tsx | 2 +- web-ui/views/account/invite-view.tsx | 2 +- web-ui/views/account/notifications-view.tsx | 4 +- web-ui/views/account/password-view.tsx | 2 +- web-ui/views/account/profile-view.tsx | 2 +- web-ui/views/admin/beverages-view.tsx | 4 +- web-ui/views/admin/bugreport-view.tsx | 2 +- web-ui/views/admin/controllers-view.tsx | 2 +- web-ui/views/admin/dashboard-view.tsx | 2 +- web-ui/views/admin/drinks-admin-view.tsx | 4 +- web-ui/views/admin/email-view.tsx | 2 +- web-ui/views/admin/export-view.tsx | 2 +- web-ui/views/admin/kegs-admin-view.tsx | 4 +- web-ui/views/admin/logs-view.tsx | 2 +- web-ui/views/admin/plugin-settings-view.tsx | 2 +- web-ui/views/admin/producers-view.tsx | 4 +- web-ui/views/admin/settings-advanced-view.tsx | 2 +- web-ui/views/admin/tap-detail-view.tsx | 2 +- web-ui/views/admin/taps-view.tsx | 2 +- web-ui/views/admin/tokens-view.tsx | 4 +- web-ui/views/admin/use-site-settings.ts | 4 +- web-ui/views/admin/users-admin-view.tsx | 4 +- web-ui/views/auth/activate-view.tsx | 2 +- web-ui/views/auth/confirm-email-view.tsx | 2 +- .../auth/password-reset-confirm-view.tsx | 2 +- web-ui/views/auth/password-reset-view.tsx | 2 +- web-ui/views/auth/register-view.tsx | 2 +- web-ui/views/drinkers/drinker-view.tsx | 2 +- web-ui/views/drinks/drink-view.tsx | 2 +- web-ui/views/fullscreen-view.tsx | 2 +- web-ui/views/home-view.tsx | 2 +- web-ui/views/kegs/keg-detail-view.tsx | 2 +- web-ui/views/kegs/keg-list-view.tsx | 4 +- web-ui/views/sessions/session-detail-view.tsx | 2 +- web-ui/views/sessions/session-list-view.tsx | 4 +- web-ui/views/setup/setup-app.tsx | 2 +- web-ui/views/stats-view.tsx | 2 +- 71 files changed, 185 insertions(+), 75 deletions(-) create mode 100644 pykeg/core/management/commands/runserver.py create mode 100644 pykeg/web/spa.py create mode 100644 pykeg/web/templates/spa/index.html rename web-ui/{api => api-client}/client.gen.ts (100%) rename web-ui/{api => api-client}/client/client.gen.ts (100%) rename web-ui/{api => api-client}/client/index.ts (100%) rename web-ui/{api => api-client}/client/types.gen.ts (100%) rename web-ui/{api => api-client}/client/utils.gen.ts (100%) rename web-ui/{api => api-client}/core/auth.gen.ts (100%) rename web-ui/{api => api-client}/core/bodySerializer.gen.ts (100%) rename web-ui/{api => api-client}/core/params.gen.ts (100%) rename web-ui/{api => api-client}/core/pathSerializer.gen.ts (100%) rename web-ui/{api => api-client}/core/types.gen.ts (100%) rename web-ui/{api => api-client}/index.ts (100%) rename web-ui/{api => api-client}/sdk.gen.ts (100%) rename web-ui/{api => api-client}/types.gen.ts (100%) diff --git a/Dockerfile b/Dockerfile index 23c57f573..1d2c8dc59 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,13 @@ +# Frontend build stage: compiles the web-ui bundle with bun + vite. +FROM oven/bun:1-slim AS frontend +WORKDIR /build +COPY package.json bun.lockb bunfig.toml ./ +RUN bun install --frozen-lockfile +COPY vite.config.ts tsconfig.json openapi-ts.config.ts ./ +COPY web-ui ./web-ui +RUN bun run build + + FROM python:3.14-slim RUN mkdir /app @@ -50,8 +60,9 @@ COPY pyproject.toml uv.lock ./ RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --locked -# Collect static files. Use fake versions of required env variables -# since they're not relevant at this step. +# Bring in the built frontend, then collect static files. Use fake +# versions of required env variables since they're not relevant here. +COPY --from=frontend /build/web-ui/dist ./web-ui/dist RUN DATABASE_URL=mysql:// \ REDIS_URL=redis:// \ KEGBOT_SECRET_KEY=changeme \ diff --git a/biome.json b/biome.json index 647b60481..1d92daf7f 100644 --- a/biome.json +++ b/biome.json @@ -10,7 +10,7 @@ "web-ui/**", "vite.config.ts", "openapi-ts.config.ts", - "!web-ui/api/**", + "!web-ui/api-client/**", "!web-ui/dist/**", "!web-ui/lib/shared-constants.ts" ] diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts index 6b81f07d4..bec2010ab 100644 --- a/openapi-ts.config.ts +++ b/openapi-ts.config.ts @@ -4,6 +4,6 @@ export default defineConfig({ // The ./ prefix matters: a bare "a/b" path parses as a Hey API // platform shorthand and crashes the generator. input: "./web-ui/schema.yaml", - output: "web-ui/api", + output: "web-ui/api-client", plugins: ["@hey-api/client-fetch"], }); diff --git a/pykeg/core/management/commands/runserver.py b/pykeg/core/management/commands/runserver.py new file mode 100644 index 000000000..4baed3185 --- /dev/null +++ b/pykeg/core/management/commands/runserver.py @@ -0,0 +1,16 @@ +"""Dev-server override: default to port 8001. + +In development the vite dev server owns http://localhost:8000 (the +address you actually browse to) and proxies backend paths here. This +command must live in an app listed *before* whitenoise.runserver_nostatic +in INSTALLED_APPS so it takes precedence; it subclasses whitenoise's +command, which in turn wraps the next-lower-priority runserver. +""" + +from whitenoise.runserver_nostatic.management.commands.runserver import ( + Command as RunserverNostaticCommand, +) + + +class Command(RunserverNostaticCommand): + default_port = "8001" diff --git a/pykeg/settings.py b/pykeg/settings.py index fed0c21e0..e76ccada2 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -30,8 +30,10 @@ } INSTALLED_APPS = ( - "whitenoise.runserver_nostatic", + # pykeg.core precedes whitenoise so its runserver override (default + # port 8001, behind the vite dev server on 8000) wins. "pykeg.core", + "whitenoise.runserver_nostatic", "pykeg.web", "pykeg.web.api", "pykeg.web.account", @@ -129,6 +131,9 @@ # Example: "http://media.lawrence.com/static/" STATIC_URL = "/static/" +# The built frontend (vite output) is collected alongside app statics. +STATICFILES_DIRS = [os.path.join(BASE_DIR, "web-ui", "dist")] + # URL prefix for admin static files -- CSS, JavaScript and images. # Make sure to use a trailing slash. # Examples: "http://foo.com/static/admin/", "/static/admin/". diff --git a/pykeg/web/kegweb/kegweb_test.py b/pykeg/web/kegweb/kegweb_test.py index 396403b21..27d5fff07 100644 --- a/pykeg/web/kegweb/kegweb_test.py +++ b/pykeg/web/kegweb/kegweb_test.py @@ -36,11 +36,13 @@ def testBasicEndpoints(self): d = models.Drink.record_drink("kegboard.flow0", ticks=100) drink_id = d.id - response = self.client.get(f"/d/{drink_id}", follow=True) + # Slash-less short links now land on the SPA catch-all (which + # redirects client-side), so exercise the canonical slashed form. + response = self.client.get(f"/d/{drink_id}/", follow=True) self.assertRedirects(response, f"/drinks/{drink_id}/", status_code=301) session_id = d.session.id - response = self.client.get(f"/s/{session_id}", follow=True) + response = self.client.get(f"/s/{session_id}/", follow=True) self.assertRedirects(response, d.session.get_absolute_url(), status_code=301) def testShout(self): diff --git a/pykeg/web/spa.py b/pykeg/web/spa.py new file mode 100644 index 000000000..f88c60ea4 --- /dev/null +++ b/pykeg/web/spa.py @@ -0,0 +1,51 @@ +"""Serves the frontend single-page app shell.""" + +import functools +import json +import os + +from django.conf import settings +from django.http import HttpResponse +from django.shortcuts import render +from django.views.decorators.csrf import ensure_csrf_cookie + +MANIFEST_PATH = os.path.join(settings.BASE_DIR, "web-ui", "dist", ".vite", "manifest.json") + + +def _read_manifest(): + with open(MANIFEST_PATH) as f: + return json.load(f) + + +@functools.cache +def _cached_manifest(): + return _read_manifest() + + +@ensure_csrf_cookie +def spa_index(request): + """Renders the SPA shell for any non-API route. + + Asset names come from vite's build manifest and are emitted through + {% static %}, so hashed-manifest storage resolves them correctly in + production. Also sets the CSRF cookie so the app can make + authenticated POSTs from its very first render. + """ + try: + # In DEBUG, re-read every request so a fresh `bun run build` is + # picked up without a server restart. + manifest = _read_manifest() if settings.DEBUG else _cached_manifest() + except OSError: + return HttpResponse( + "

Frontend not built

" + "

Run bun install && bun run build, or use the vite dev " + "server (bun run dev) during development.

", + status=503, + ) + + entry = manifest["index.html"] + context = { + "entry_js": entry["file"], + "entry_css": entry.get("css", []), + } + return render(request, "spa/index.html", context=context) diff --git a/pykeg/web/templates/spa/index.html b/pykeg/web/templates/spa/index.html new file mode 100644 index 000000000..237c2bf12 --- /dev/null +++ b/pykeg/web/templates/spa/index.html @@ -0,0 +1,13 @@ +{% load static %} + + + + + Kegbot + {% for css in entry_css %}{% endfor %} + + + +
+ + diff --git a/pykeg/web/urls.py b/pykeg/web/urls.py index 3a06006cf..64449d879 100644 --- a/pykeg/web/urls.py +++ b/pykeg/web/urls.py @@ -1,9 +1,10 @@ from django.conf import settings from django.conf.urls.static import static from django.contrib import admin -from django.urls import include, path +from django.urls import include, path, re_path from pykeg.api import urls as api_urls +from pykeg.web import spa from pykeg.web.account import urls as account_urls from pykeg.web.api import urls as legacy_api_urls from pykeg.web.kbregistration import urls as kbregistration_urls @@ -42,3 +43,9 @@ urlpatterns += [ path("", include(kegweb_urls)), ] + +# Anything not matched above is (deep-linkable) SPA territory. The +# exclusions keep API, asset, and admin 404s as real 404s. +urlpatterns += [ + re_path(r"^(?!api(?:$|/)|media/|static/|admin(?:$|/)).*$", spa.spa_index, name="spa-index"), +] diff --git a/vite.config.ts b/vite.config.ts index ef9188167..6ad64ca69 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,12 +4,17 @@ import { defineConfig } from "vite"; // All frontend source lives in web-ui/; tooling configs live at the repo // root. In development the vite server is the only origin the browser -// talks to: backend paths are proxied to Django, so requests stay -// same-origin (no CSRF/CORS special-casing) and hot reload just works. -const DJANGO = "http://localhost:8000"; +// talks to — http://localhost:8000 "just works": backend paths are +// proxied to Django (which `kegbot runserver` starts on 8001), so +// requests stay same-origin (no CSRF/CORS special-casing) and hot +// reload just works. +const DJANGO = "http://localhost:8001"; -export default defineConfig({ +export default defineConfig(({ command }) => ({ root: "web-ui", + // Production assets are collected into Django's static tree and served + // by WhiteNoise under /static/; the dev server serves from the root. + base: command === "build" ? "/static/" : "/", plugins: [react()], resolve: { alias: { @@ -17,7 +22,7 @@ export default defineConfig({ }, }, server: { - port: 5173, + port: 8000, proxy: { "/api": DJANGO, "/media": DJANGO, @@ -29,4 +34,4 @@ export default defineConfig({ emptyOutDir: true, manifest: true, }, -}); +})); diff --git a/web-ui/api/client.gen.ts b/web-ui/api-client/client.gen.ts similarity index 100% rename from web-ui/api/client.gen.ts rename to web-ui/api-client/client.gen.ts diff --git a/web-ui/api/client/client.gen.ts b/web-ui/api-client/client/client.gen.ts similarity index 100% rename from web-ui/api/client/client.gen.ts rename to web-ui/api-client/client/client.gen.ts diff --git a/web-ui/api/client/index.ts b/web-ui/api-client/client/index.ts similarity index 100% rename from web-ui/api/client/index.ts rename to web-ui/api-client/client/index.ts diff --git a/web-ui/api/client/types.gen.ts b/web-ui/api-client/client/types.gen.ts similarity index 100% rename from web-ui/api/client/types.gen.ts rename to web-ui/api-client/client/types.gen.ts diff --git a/web-ui/api/client/utils.gen.ts b/web-ui/api-client/client/utils.gen.ts similarity index 100% rename from web-ui/api/client/utils.gen.ts rename to web-ui/api-client/client/utils.gen.ts diff --git a/web-ui/api/core/auth.gen.ts b/web-ui/api-client/core/auth.gen.ts similarity index 100% rename from web-ui/api/core/auth.gen.ts rename to web-ui/api-client/core/auth.gen.ts diff --git a/web-ui/api/core/bodySerializer.gen.ts b/web-ui/api-client/core/bodySerializer.gen.ts similarity index 100% rename from web-ui/api/core/bodySerializer.gen.ts rename to web-ui/api-client/core/bodySerializer.gen.ts diff --git a/web-ui/api/core/params.gen.ts b/web-ui/api-client/core/params.gen.ts similarity index 100% rename from web-ui/api/core/params.gen.ts rename to web-ui/api-client/core/params.gen.ts diff --git a/web-ui/api/core/pathSerializer.gen.ts b/web-ui/api-client/core/pathSerializer.gen.ts similarity index 100% rename from web-ui/api/core/pathSerializer.gen.ts rename to web-ui/api-client/core/pathSerializer.gen.ts diff --git a/web-ui/api/core/types.gen.ts b/web-ui/api-client/core/types.gen.ts similarity index 100% rename from web-ui/api/core/types.gen.ts rename to web-ui/api-client/core/types.gen.ts diff --git a/web-ui/api/index.ts b/web-ui/api-client/index.ts similarity index 100% rename from web-ui/api/index.ts rename to web-ui/api-client/index.ts diff --git a/web-ui/api/sdk.gen.ts b/web-ui/api-client/sdk.gen.ts similarity index 100% rename from web-ui/api/sdk.gen.ts rename to web-ui/api-client/sdk.gen.ts diff --git a/web-ui/api/types.gen.ts b/web-ui/api-client/types.gen.ts similarity index 100% rename from web-ui/api/types.gen.ts rename to web-ui/api-client/types.gen.ts diff --git a/web-ui/components/charts/temperature-chart.tsx b/web-ui/components/charts/temperature-chart.tsx index 8e4e00fe4..ec51289c5 100644 --- a/web-ui/components/charts/temperature-chart.tsx +++ b/web-ui/components/charts/temperature-chart.tsx @@ -1,5 +1,5 @@ import { LineChart } from "@mui/x-charts/LineChart"; -import type { Thermolog } from "@/api"; +import type { Thermolog } from "@/api-client"; import { useConfig } from "@/components/config-context"; import { useFormatters } from "@/components/use-formatters"; diff --git a/web-ui/components/config-context.tsx b/web-ui/components/config-context.tsx index 95761550e..6d1590a06 100644 --- a/web-ui/components/config-context.tsx +++ b/web-ui/components/config-context.tsx @@ -3,8 +3,8 @@ import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import CircularProgress from "@mui/material/CircularProgress"; import { createContext, type ReactNode, useCallback, useContext, useEffect, useState } from "react"; -import type { Me } from "@/api"; -import { usersMeRetrieve } from "@/api"; +import type { Me } from "@/api-client"; +import { usersMeRetrieve } from "@/api-client"; import { toErrorMessage, unwrap } from "@/lib/api"; export interface ConfigValue { diff --git a/web-ui/components/current-user-context.tsx b/web-ui/components/current-user-context.tsx index 8994e8ddf..826ba1424 100644 --- a/web-ui/components/current-user-context.tsx +++ b/web-ui/components/current-user-context.tsx @@ -1,6 +1,6 @@ import { createContext, type ReactNode, useContext, useMemo } from "react"; -import type { CurrentUser } from "@/api"; -import { authLoginCreate, authLogoutCreate } from "@/api"; +import type { CurrentUser } from "@/api-client"; +import { authLoginCreate, authLogoutCreate } from "@/api-client"; import { useConfig } from "@/components/config-context"; import { unwrap } from "@/lib/api"; diff --git a/web-ui/components/drink-list.tsx b/web-ui/components/drink-list.tsx index b0c19221a..fefbdc2ab 100644 --- a/web-ui/components/drink-list.tsx +++ b/web-ui/components/drink-list.tsx @@ -7,7 +7,7 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; -import type { Drink } from "@/api"; +import type { Drink } from "@/api-client"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; import { formatDateTime } from "@/lib/format"; diff --git a/web-ui/components/event-timeline.tsx b/web-ui/components/event-timeline.tsx index defa75843..094bb1745 100644 --- a/web-ui/components/event-timeline.tsx +++ b/web-ui/components/event-timeline.tsx @@ -4,7 +4,7 @@ import ListItem from "@mui/material/ListItem"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; -import type { SystemEvent } from "@/api"; +import type { SystemEvent } from "@/api-client"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; diff --git a/web-ui/components/keg-progress.tsx b/web-ui/components/keg-progress.tsx index 261eb9bee..c4e0775b3 100644 --- a/web-ui/components/keg-progress.tsx +++ b/web-ui/components/keg-progress.tsx @@ -1,7 +1,7 @@ import Box from "@mui/material/Box"; import LinearProgress from "@mui/material/LinearProgress"; import Typography from "@mui/material/Typography"; -import type { Keg } from "@/api"; +import type { Keg } from "@/api-client"; import { useFormatters } from "@/components/use-formatters"; import { kegPercentFull } from "@/lib/format"; diff --git a/web-ui/components/tap-card-live.tsx b/web-ui/components/tap-card-live.tsx index 192e199b7..044dc7a1c 100644 --- a/web-ui/components/tap-card-live.tsx +++ b/web-ui/components/tap-card-live.tsx @@ -1,5 +1,5 @@ -import type { KegTap } from "@/api"; -import { thermoLogsList } from "@/api"; +import type { KegTap } from "@/api-client"; +import { thermoLogsList } from "@/api-client"; import { TapCard } from "@/components/tap-card"; import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; diff --git a/web-ui/components/tap-card.tsx b/web-ui/components/tap-card.tsx index 6c97f7345..66cdd217e 100644 --- a/web-ui/components/tap-card.tsx +++ b/web-ui/components/tap-card.tsx @@ -6,7 +6,7 @@ import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; -import type { KegTap } from "@/api"; +import type { KegTap } from "@/api-client"; import { KegProgress } from "@/components/keg-progress"; export interface TapCardProps { diff --git a/web-ui/components/user-link.tsx b/web-ui/components/user-link.tsx index c16130208..7d4fe26a6 100644 --- a/web-ui/components/user-link.tsx +++ b/web-ui/components/user-link.tsx @@ -3,7 +3,7 @@ import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; -import type { User } from "@/api"; +import type { User } from "@/api-client"; export interface UserLinkProps { user: User | null | undefined; diff --git a/web-ui/lib/api.ts b/web-ui/lib/api.ts index 3b6144f4c..f56fc90fc 100644 --- a/web-ui/lib/api.ts +++ b/web-ui/lib/api.ts @@ -1,4 +1,4 @@ -import { client } from "@/api/client.gen"; +import { client } from "@/api-client/client.gen"; /** DRF-style field errors: `{fieldName: ["message", ...]}`. */ export type FormErrors = Record; diff --git a/web-ui/test/helpers.tsx b/web-ui/test/helpers.tsx index 4ae62f435..81405479a 100644 --- a/web-ui/test/helpers.tsx +++ b/web-ui/test/helpers.tsx @@ -1,4 +1,4 @@ -import type { Me } from "@/api"; +import type { Me } from "@/api-client"; export interface MockResponse { status: number; diff --git a/web-ui/views/account/account-view.tsx b/web-ui/views/account/account-view.tsx index 491405bf5..9b086407e 100644 --- a/web-ui/views/account/account-view.tsx +++ b/web-ui/views/account/account-view.tsx @@ -6,7 +6,7 @@ import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { useState } from "react"; -import { accountRegenerateApiKeyCreate, apiKeysList } from "@/api"; +import { accountRegenerateApiKeyCreate, apiKeysList } from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { useCurrentUser } from "@/components/current-user-context"; import { Page } from "@/components/page"; diff --git a/web-ui/views/account/invite-view.tsx b/web-ui/views/account/invite-view.tsx index 5c47381dc..d9c219df0 100644 --- a/web-ui/views/account/invite-view.tsx +++ b/web-ui/views/account/invite-view.tsx @@ -10,7 +10,7 @@ import TableRow from "@mui/material/TableRow"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { type FormEvent, useState } from "react"; -import { invitationsCreate, invitationsDestroy, invitationsList } from "@/api"; +import { invitationsCreate, invitationsDestroy, invitationsList } from "@/api-client"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; import type { FormErrors } from "@/lib/api"; diff --git a/web-ui/views/account/notifications-view.tsx b/web-ui/views/account/notifications-view.tsx index 84a1fb149..53b39cf10 100644 --- a/web-ui/views/account/notifications-view.tsx +++ b/web-ui/views/account/notifications-view.tsx @@ -8,13 +8,13 @@ import FormGroup from "@mui/material/FormGroup"; import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import { type FormEvent, useEffect, useState } from "react"; -import type { NotificationSettings } from "@/api"; +import type { NotificationSettings } from "@/api-client"; import { accountEmailCreate, notificationSettingsCreate, notificationSettingsList, notificationSettingsPartialUpdate, -} from "@/api"; +} from "@/api-client"; import { useCurrentUser } from "@/components/current-user-context"; import { LoadingZone } from "@/components/loading-zone"; import { Page } from "@/components/page"; diff --git a/web-ui/views/account/password-view.tsx b/web-ui/views/account/password-view.tsx index 1ad62e655..b8bac9fda 100644 --- a/web-ui/views/account/password-view.tsx +++ b/web-ui/views/account/password-view.tsx @@ -3,7 +3,7 @@ import Button from "@mui/material/Button"; import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import { type FormEvent, useState } from "react"; -import { accountPasswordCreate } from "@/api"; +import { accountPasswordCreate } from "@/api-client"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; import type { FormErrors } from "@/lib/api"; diff --git a/web-ui/views/account/profile-view.tsx b/web-ui/views/account/profile-view.tsx index da3377ba3..3b9fffe06 100644 --- a/web-ui/views/account/profile-view.tsx +++ b/web-ui/views/account/profile-view.tsx @@ -3,7 +3,7 @@ import Button from "@mui/material/Button"; import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import { type FormEvent, useState } from "react"; -import { accountMugshotCreate, usersMePartialUpdate } from "@/api"; +import { accountMugshotCreate, usersMePartialUpdate } from "@/api-client"; import { useCurrentUser } from "@/components/current-user-context"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/admin/beverages-view.tsx b/web-ui/views/admin/beverages-view.tsx index f1f0be315..9706ba00d 100644 --- a/web-ui/views/admin/beverages-view.tsx +++ b/web-ui/views/admin/beverages-view.tsx @@ -13,14 +13,14 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import TextField from "@mui/material/TextField"; import { useState } from "react"; -import type { Beverage } from "@/api"; +import type { Beverage } from "@/api-client"; import { beverageProducersList, beveragesCreate, beveragesList, beveragesPartialUpdate, beveragesPictureCreate, -} from "@/api"; +} from "@/api-client"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/admin/bugreport-view.tsx b/web-ui/views/admin/bugreport-view.tsx index 3ab529c28..5415d4fde 100644 --- a/web-ui/views/admin/bugreport-view.tsx +++ b/web-ui/views/admin/bugreport-view.tsx @@ -4,7 +4,7 @@ import Button from "@mui/material/Button"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useState } from "react"; -import { adminBugreportRetrieve } from "@/api"; +import { adminBugreportRetrieve } from "@/api-client"; import { Page } from "@/components/page"; import { toErrorMessage, unwrap } from "@/lib/api"; diff --git a/web-ui/views/admin/controllers-view.tsx b/web-ui/views/admin/controllers-view.tsx index 85ea3e977..b4603db47 100644 --- a/web-ui/views/admin/controllers-view.tsx +++ b/web-ui/views/admin/controllers-view.tsx @@ -22,7 +22,7 @@ import { flowTogglesCreate, flowTogglesDestroy, flowTogglesList, -} from "@/api"; +} from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/admin/dashboard-view.tsx b/web-ui/views/admin/dashboard-view.tsx index 553771ccf..8ceb853be 100644 --- a/web-ui/views/admin/dashboard-view.tsx +++ b/web-ui/views/admin/dashboard-view.tsx @@ -6,7 +6,7 @@ import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; -import { adminDashboardRetrieve } from "@/api"; +import { adminDashboardRetrieve } from "@/api-client"; import { Page } from "@/components/page"; import { unwrap } from "@/lib/api"; import { useAsyncData } from "@/lib/use-async-data"; diff --git a/web-ui/views/admin/drinks-admin-view.tsx b/web-ui/views/admin/drinks-admin-view.tsx index b597d5d4c..6b7dc0c8d 100644 --- a/web-ui/views/admin/drinks-admin-view.tsx +++ b/web-ui/views/admin/drinks-admin-view.tsx @@ -11,8 +11,8 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import { useState } from "react"; import { Link } from "react-router"; -import type { Drink } from "@/api"; -import { drinksDestroy, drinksList, drinksReassignCreate } from "@/api"; +import type { Drink } from "@/api-client"; +import { drinksDestroy, drinksList, drinksReassignCreate } from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; diff --git a/web-ui/views/admin/email-view.tsx b/web-ui/views/admin/email-view.tsx index beca6a934..c83d5d17b 100644 --- a/web-ui/views/admin/email-view.tsx +++ b/web-ui/views/admin/email-view.tsx @@ -3,7 +3,7 @@ import Button from "@mui/material/Button"; import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import { type FormEvent, useState } from "react"; -import { adminEmailTestCreate } from "@/api"; +import { adminEmailTestCreate } from "@/api-client"; import { LoadingZone } from "@/components/loading-zone"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/admin/export-view.tsx b/web-ui/views/admin/export-view.tsx index c9f3c8e9d..9c490f0c0 100644 --- a/web-ui/views/admin/export-view.tsx +++ b/web-ui/views/admin/export-view.tsx @@ -9,7 +9,7 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; import { useState } from "react"; -import { adminBackupsCreate, adminBackupsDestroy, adminBackupsRetrieve } from "@/api"; +import { adminBackupsCreate, adminBackupsDestroy, adminBackupsRetrieve } from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/admin/kegs-admin-view.tsx b/web-ui/views/admin/kegs-admin-view.tsx index cf727d2ce..059fbc8aa 100644 --- a/web-ui/views/admin/kegs-admin-view.tsx +++ b/web-ui/views/admin/kegs-admin-view.tsx @@ -15,7 +15,7 @@ import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { type FormEvent, useState } from "react"; import { Link, useSearchParams } from "react-router"; -import type { Keg } from "@/api"; +import type { Keg } from "@/api-client"; import { kegsCreate, kegsDestroy, @@ -24,7 +24,7 @@ import { kegsPartialUpdate, kegsReactivateCreate, kegsSpillCreate, -} from "@/api"; +} from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; diff --git a/web-ui/views/admin/logs-view.tsx b/web-ui/views/admin/logs-view.tsx index f8648162b..3e68dbcde 100644 --- a/web-ui/views/admin/logs-view.tsx +++ b/web-ui/views/admin/logs-view.tsx @@ -1,7 +1,7 @@ import Alert from "@mui/material/Alert"; import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; -import { adminLogsRetrieve } from "@/api"; +import { adminLogsRetrieve } from "@/api-client"; import { Page } from "@/components/page"; import { unwrap } from "@/lib/api"; import { useAsyncData } from "@/lib/use-async-data"; diff --git a/web-ui/views/admin/plugin-settings-view.tsx b/web-ui/views/admin/plugin-settings-view.tsx index 7e28b5c27..8c507a737 100644 --- a/web-ui/views/admin/plugin-settings-view.tsx +++ b/web-ui/views/admin/plugin-settings-view.tsx @@ -3,7 +3,7 @@ import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import { useEffect, useState } from "react"; import { useParams } from "react-router"; -import { adminPluginsSettingsRetrieve, adminPluginsSettingsUpdate } from "@/api"; +import { adminPluginsSettingsRetrieve, adminPluginsSettingsUpdate } from "@/api-client"; import { useConfig } from "@/components/config-context"; import { LoadingZone } from "@/components/loading-zone"; import { Page } from "@/components/page"; diff --git a/web-ui/views/admin/producers-view.tsx b/web-ui/views/admin/producers-view.tsx index 7e6871da8..5bdb8d43a 100644 --- a/web-ui/views/admin/producers-view.tsx +++ b/web-ui/views/admin/producers-view.tsx @@ -14,13 +14,13 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import TextField from "@mui/material/TextField"; import { useState } from "react"; -import type { BeverageProducer } from "@/api"; +import type { BeverageProducer } from "@/api-client"; import { beverageProducersCreate, beverageProducersList, beverageProducersPartialUpdate, beverageProducersPictureCreate, -} from "@/api"; +} from "@/api-client"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/admin/settings-advanced-view.tsx b/web-ui/views/admin/settings-advanced-view.tsx index 51cec958f..99bb88ef0 100644 --- a/web-ui/views/admin/settings-advanced-view.tsx +++ b/web-ui/views/admin/settings-advanced-view.tsx @@ -3,7 +3,7 @@ import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { type FormEvent, useEffect, useState } from "react"; -import { siteBackgroundImageCreate } from "@/api"; +import { siteBackgroundImageCreate } from "@/api-client"; import { LoadingZone } from "@/components/loading-zone"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/admin/tap-detail-view.tsx b/web-ui/views/admin/tap-detail-view.tsx index 414b44f13..9be66d233 100644 --- a/web-ui/views/admin/tap-detail-view.tsx +++ b/web-ui/views/admin/tap-detail-view.tsx @@ -25,7 +25,7 @@ import { tapsStartKegCreate, thermoSensorsList, usersList, -} from "@/api"; +} from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { KegProgress } from "@/components/keg-progress"; import { Page } from "@/components/page"; diff --git a/web-ui/views/admin/taps-view.tsx b/web-ui/views/admin/taps-view.tsx index ca19cbc98..354eb49a6 100644 --- a/web-ui/views/admin/taps-view.tsx +++ b/web-ui/views/admin/taps-view.tsx @@ -11,7 +11,7 @@ import TableRow from "@mui/material/TableRow"; import TextField from "@mui/material/TextField"; import { type FormEvent, useState } from "react"; import { Link } from "react-router"; -import { tapsCreate, tapsList } from "@/api"; +import { tapsCreate, tapsList } from "@/api-client"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; import { toErrorMessage, unwrap } from "@/lib/api"; diff --git a/web-ui/views/admin/tokens-view.tsx b/web-ui/views/admin/tokens-view.tsx index fa7176fb5..91d17a67d 100644 --- a/web-ui/views/admin/tokens-view.tsx +++ b/web-ui/views/admin/tokens-view.tsx @@ -15,14 +15,14 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import TextField from "@mui/material/TextField"; import { useState } from "react"; -import type { AuthenticationToken } from "@/api"; +import type { AuthenticationToken } from "@/api-client"; import { authTokensCreate, authTokensDestroy, authTokensList, authTokensPartialUpdate, usersList, -} from "@/api"; +} from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; diff --git a/web-ui/views/admin/use-site-settings.ts b/web-ui/views/admin/use-site-settings.ts index 77b56d032..82850fbe2 100644 --- a/web-ui/views/admin/use-site-settings.ts +++ b/web-ui/views/admin/use-site-settings.ts @@ -1,6 +1,6 @@ import { useState } from "react"; -import type { PatchedSiteSettingsRequest } from "@/api"; -import { sitePartialUpdate, siteRetrieve } from "@/api"; +import type { PatchedSiteSettingsRequest } from "@/api-client"; +import { sitePartialUpdate, siteRetrieve } from "@/api-client"; import { useConfig } from "@/components/config-context"; import { useSnackbar } from "@/components/snackbar-context"; import type { FormErrors } from "@/lib/api"; diff --git a/web-ui/views/admin/users-admin-view.tsx b/web-ui/views/admin/users-admin-view.tsx index fd1b05587..bb472a44e 100644 --- a/web-ui/views/admin/users-admin-view.tsx +++ b/web-ui/views/admin/users-admin-view.tsx @@ -17,8 +17,8 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import TextField from "@mui/material/TextField"; import { useState } from "react"; -import type { User } from "@/api"; -import { usersCreate, usersList, usersPartialUpdate, usersSetPasswordCreate } from "@/api"; +import type { User } from "@/api-client"; +import { usersCreate, usersList, usersPartialUpdate, usersSetPasswordCreate } from "@/api-client"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; diff --git a/web-ui/views/auth/activate-view.tsx b/web-ui/views/auth/activate-view.tsx index eb8663257..aae119d3c 100644 --- a/web-ui/views/auth/activate-view.tsx +++ b/web-ui/views/auth/activate-view.tsx @@ -6,7 +6,7 @@ import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { type FormEvent, useState } from "react"; import { useNavigate, useParams } from "react-router"; -import { accountActivateCreate } from "@/api"; +import { accountActivateCreate } from "@/api-client"; import { useConfig } from "@/components/config-context"; import type { FormErrors } from "@/lib/api"; import { unwrap } from "@/lib/api"; diff --git a/web-ui/views/auth/confirm-email-view.tsx b/web-ui/views/auth/confirm-email-view.tsx index e213152a8..150a5ed52 100644 --- a/web-ui/views/auth/confirm-email-view.tsx +++ b/web-ui/views/auth/confirm-email-view.tsx @@ -5,7 +5,7 @@ import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useEffect, useRef, useState } from "react"; import { Link, useLocation, useParams } from "react-router"; -import { accountConfirmEmailCreate } from "@/api"; +import { accountConfirmEmailCreate } from "@/api-client"; import { useConfig } from "@/components/config-context"; import { useCurrentUser } from "@/components/current-user-context"; import { toErrorMessage, unwrap } from "@/lib/api"; diff --git a/web-ui/views/auth/password-reset-confirm-view.tsx b/web-ui/views/auth/password-reset-confirm-view.tsx index a9550f118..e31bb0795 100644 --- a/web-ui/views/auth/password-reset-confirm-view.tsx +++ b/web-ui/views/auth/password-reset-confirm-view.tsx @@ -6,7 +6,7 @@ import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { type FormEvent, useState } from "react"; import { Link, useParams } from "react-router"; -import { authPasswordResetConfirmCreate } from "@/api"; +import { authPasswordResetConfirmCreate } from "@/api-client"; import type { FormErrors } from "@/lib/api"; import { unwrap } from "@/lib/api"; import { fieldError, formErrorsFromException, nonFieldErrors } from "@/lib/forms"; diff --git a/web-ui/views/auth/password-reset-view.tsx b/web-ui/views/auth/password-reset-view.tsx index 18b07dc8b..39f976040 100644 --- a/web-ui/views/auth/password-reset-view.tsx +++ b/web-ui/views/auth/password-reset-view.tsx @@ -5,7 +5,7 @@ import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { type FormEvent, useState } from "react"; -import { authPasswordResetCreate } from "@/api"; +import { authPasswordResetCreate } from "@/api-client"; import type { FormErrors } from "@/lib/api"; import { unwrap } from "@/lib/api"; import { fieldError, formErrorsFromException } from "@/lib/forms"; diff --git a/web-ui/views/auth/register-view.tsx b/web-ui/views/auth/register-view.tsx index ab9b7564d..783b54298 100644 --- a/web-ui/views/auth/register-view.tsx +++ b/web-ui/views/auth/register-view.tsx @@ -6,7 +6,7 @@ import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { type FormEvent, useState } from "react"; import { useNavigate, useSearchParams } from "react-router"; -import { authRegisterCreate } from "@/api"; +import { authRegisterCreate } from "@/api-client"; import { useConfig } from "@/components/config-context"; import type { FormErrors } from "@/lib/api"; import { unwrap } from "@/lib/api"; diff --git a/web-ui/views/drinkers/drinker-view.tsx b/web-ui/views/drinkers/drinker-view.tsx index 560f44ee9..4f8c35ccc 100644 --- a/web-ui/views/drinkers/drinker-view.tsx +++ b/web-ui/views/drinkers/drinker-view.tsx @@ -6,7 +6,7 @@ import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useParams } from "react-router"; -import { drinksList, usersRetrieve, usersStatsRetrieve } from "@/api"; +import { drinksList, usersRetrieve, usersStatsRetrieve } from "@/api-client"; import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-chart"; import { DrinkList } from "@/components/drink-list"; import { LoadMoreButton } from "@/components/load-more-button"; diff --git a/web-ui/views/drinks/drink-view.tsx b/web-ui/views/drinks/drink-view.tsx index 96e0f9f86..2e2c08154 100644 --- a/web-ui/views/drinks/drink-view.tsx +++ b/web-ui/views/drinks/drink-view.tsx @@ -5,7 +5,7 @@ import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link, useParams } from "react-router"; -import { drinksPictureDestroy, drinksRetrieve } from "@/api"; +import { drinksPictureDestroy, drinksRetrieve } from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { useCurrentUser } from "@/components/current-user-context"; import { Page } from "@/components/page"; diff --git a/web-ui/views/fullscreen-view.tsx b/web-ui/views/fullscreen-view.tsx index bec52b631..552ffaba5 100644 --- a/web-ui/views/fullscreen-view.tsx +++ b/web-ui/views/fullscreen-view.tsx @@ -3,7 +3,7 @@ import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useEffect } from "react"; -import { statusRetrieve } from "@/api"; +import { statusRetrieve } from "@/api-client"; import { useConfig } from "@/components/config-context"; import { EventTimeline } from "@/components/event-timeline"; import { LoadingZone } from "@/components/loading-zone"; diff --git a/web-ui/views/home-view.tsx b/web-ui/views/home-view.tsx index 3bec01847..3cedfe863 100644 --- a/web-ui/views/home-view.tsx +++ b/web-ui/views/home-view.tsx @@ -1,7 +1,7 @@ import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; -import { statusRetrieve } from "@/api"; +import { statusRetrieve } from "@/api-client"; import { EventTimeline } from "@/components/event-timeline"; import { Page } from "@/components/page"; import { TapCardLive } from "@/components/tap-card-live"; diff --git a/web-ui/views/kegs/keg-detail-view.tsx b/web-ui/views/kegs/keg-detail-view.tsx index 25f48fef1..87722a912 100644 --- a/web-ui/views/kegs/keg-detail-view.tsx +++ b/web-ui/views/kegs/keg-detail-view.tsx @@ -5,7 +5,7 @@ import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useParams } from "react-router"; -import { drinksList, kegsRetrieve, kegsStatsRetrieve } from "@/api"; +import { drinksList, kegsRetrieve, kegsStatsRetrieve } from "@/api-client"; import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; import { DrinkList } from "@/components/drink-list"; import { KegProgress } from "@/components/keg-progress"; diff --git a/web-ui/views/kegs/keg-list-view.tsx b/web-ui/views/kegs/keg-list-view.tsx index aa07778a4..bf27048c2 100644 --- a/web-ui/views/kegs/keg-list-view.tsx +++ b/web-ui/views/kegs/keg-list-view.tsx @@ -8,8 +8,8 @@ import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import { Link } from "react-router"; -import type { Keg } from "@/api"; -import { kegsList } from "@/api"; +import type { Keg } from "@/api-client"; +import { kegsList } from "@/api-client"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; import { useFormatters } from "@/components/use-formatters"; diff --git a/web-ui/views/sessions/session-detail-view.tsx b/web-ui/views/sessions/session-detail-view.tsx index 8b7743017..85104ac84 100644 --- a/web-ui/views/sessions/session-detail-view.tsx +++ b/web-ui/views/sessions/session-detail-view.tsx @@ -5,7 +5,7 @@ import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useParams } from "react-router"; -import { drinksList, sessionsRetrieve } from "@/api"; +import { drinksList, sessionsRetrieve } from "@/api-client"; import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; import { DrinkList } from "@/components/drink-list"; import { LoadMoreButton } from "@/components/load-more-button"; diff --git a/web-ui/views/sessions/session-list-view.tsx b/web-ui/views/sessions/session-list-view.tsx index a89651574..e482d1eef 100644 --- a/web-ui/views/sessions/session-list-view.tsx +++ b/web-ui/views/sessions/session-list-view.tsx @@ -8,8 +8,8 @@ import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; import { Link, useParams } from "react-router"; -import type { DrinkingSession } from "@/api"; -import { sessionsList } from "@/api"; +import type { DrinkingSession } from "@/api-client"; +import { sessionsList } from "@/api-client"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; import { useFormatters } from "@/components/use-formatters"; diff --git a/web-ui/views/setup/setup-app.tsx b/web-ui/views/setup/setup-app.tsx index eca5f70d9..9a46c3452 100644 --- a/web-ui/views/setup/setup-app.tsx +++ b/web-ui/views/setup/setup-app.tsx @@ -20,7 +20,7 @@ import { setupSettingsCreate, setupStatusRetrieve, setupUpgradeCreate, -} from "@/api"; +} from "@/api-client"; import { LoadingZone } from "@/components/loading-zone"; import { toErrorMessage, unwrap } from "@/lib/api"; import SHARED from "@/lib/shared-constants"; diff --git a/web-ui/views/stats-view.tsx b/web-ui/views/stats-view.tsx index 57bf7e752..ed0c455bf 100644 --- a/web-ui/views/stats-view.tsx +++ b/web-ui/views/stats-view.tsx @@ -6,7 +6,7 @@ import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; -import { statsSystemRetrieve } from "@/api"; +import { statsSystemRetrieve } from "@/api-client"; import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-chart"; import { Page } from "@/components/page"; From c65e132f38e8610002a668482d95f1a0d40c2ab0 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:28:55 +0000 Subject: [PATCH 20/48] web: remove the server-rendered ui The React frontend is now the only web UI. Deleted: the kegweb, kegadmin, account, kbregistration, and setup_wizard apps (views, urls, forms, templates), the server-side chart builders, the vendored jQuery/Bootstrap/Highcharts static tree, the context processor, the staff_member_required decorator, and the crispy-forms / django-registration dependencies. What remains and moved: - e-mail templates (notification mails, registration/activation/invite mails, password reset) stay under pykeg/web/templates; their links resolve through named SPA stub routes that preserve the legacy URL names (kb-drink, registration_register, password_reset_confirm, ...) for get_absolute_url and mail rendering - PasswordResetForm relocated to pykeg.api.forms; the controller/meter forms the legacy api used relocated to pykeg.web.api.forms; the media storage backend moved to pykeg.web.kbstorage - the webhook plugin keeps its logic and settings form (managed via the plugin settings api); the plugin framework drops its template-view url hooks PrivacyMiddleware is gone: privacy is enforced solely by API permissions, with the frontend rendering the interstitials. IsSetupMiddleware now only gates /api/* (JSON 403); all other paths fall through to the SPA shell, which boots into the setup wizard, and its pre-migration session stub now covers /api/setup. --- pykeg/api/forms.py | 64 + pykeg/api/views_account.py | 2 +- pykeg/contrib/webhook/plugin.py | 5 +- .../webhook/webhook_admin_settings.html | 24 - pykeg/contrib/webhook/views.py | 24 - pykeg/core/util.py | 15 - pykeg/plugin/plugin.py | 36 - pykeg/plugin/util.py | 24 - pykeg/settings.py | 23 +- pykeg/web/account/__init__.py | 0 .../templates/account/activate_account.html | 20 - pykeg/web/account/templates/account/base.html | 36 - .../web/account/templates/account/index.html | 27 - .../web/account/templates/account/invite.html | 20 - .../templates/account/notifications.html | 38 - .../account/templates/account/profile.html | 26 - pykeg/web/account/urls.py | 24 - pykeg/web/account/views.py | 193 - pykeg/web/api/forms.py | 17 + pykeg/web/api/views.py | 2 +- pykeg/web/charts/__init__.py | 0 pykeg/web/charts/charts.py | 216 - pykeg/web/context_processors.py | 51 - pykeg/web/decorators.py | 17 - pykeg/web/kbregistration/__init__.py | 0 pykeg/web/kbregistration/forms.py | 89 - pykeg/web/kbregistration/registration_test.py | 41 - pykeg/web/kbregistration/urls.py | 36 - pykeg/web/kbregistration/views.py | 61 - pykeg/web/{kegweb => }/kbstorage.py | 0 pykeg/web/kegadmin/__init__.py | 0 pykeg/web/kegadmin/forms.py | 819 - .../templates/kegadmin/add_controller.html | 10 - .../kegadmin/templates/kegadmin/add_tap.html | 10 - .../templates/kegadmin/add_token.html | 10 - .../kegadmin/templates/kegadmin/add_user.html | 10 - .../templates/kegadmin/backup_export.html | 60 - .../web/kegadmin/templates/kegadmin/base.html | 18 - .../templates/kegadmin/beer_type_add.html | 22 - .../templates/kegadmin/beer_type_detail.html | 22 - .../templates/kegadmin/beer_type_list.html | 39 - .../templates/kegadmin/brewer_add.html | 22 - .../templates/kegadmin/brewer_detail.html | 14 - .../templates/kegadmin/brewer_list.html | 42 - .../templates/kegadmin/bugreport.html | 21 - .../templates/kegadmin/controller_detail.html | 223 - .../templates/kegadmin/controller_list.html | 42 - .../templates/kegadmin/dashboard.html | 45 - .../templates/kegadmin/drink_list.html | 14 - .../kegadmin/templates/kegadmin/email.html | 33 - .../templates/kegadmin/includes/extrajs.html | 63 - .../kegadmin/includes/keg-status-label.html | 9 - .../templates/kegadmin/includes/keg_nav.html | 9 - .../kegadmin/includes/user-status-label.html | 3 - .../kegadmin/templates/kegadmin/index.html | 10 - .../kegadmin/templates/kegadmin/keg_add.html | 33 - .../templates/kegadmin/keg_detail.html | 139 - .../kegadmin/templates/kegadmin/keg_list.html | 40 - .../web/kegadmin/templates/kegadmin/logs.html | 36 - .../templates/kegadmin/nav-items.html | 51 - .../templates/kegadmin/tap_detail.html | 139 - .../kegadmin/templates/kegadmin/tap_list.html | 51 - .../templates/kegadmin/token_detail.html | 50 - .../templates/kegadmin/token_list.html | 44 - .../templates/kegadmin/user_detail.html | 149 - .../templates/kegadmin/user_list.html | 54 - pykeg/web/kegadmin/urls.py | 61 - pykeg/web/kegadmin/views.py | 990 - pykeg/web/kegweb/__init__.py | 0 pykeg/web/kegweb/forms.py | 43 - pykeg/web/kegweb/kegweb_test.py | 286 - pykeg/web/kegweb/signals.py | 16 - .../kegweb/templates/kegweb/_pagination.html | 33 - pykeg/web/kegweb/templates/kegweb/badge.html | 4 - .../kegweb/templates/kegweb/basic-badges.html | 27 - .../kegweb/templates/kegweb/basic-stats.html | 41 - .../kegweb/templates/kegweb/drink_detail.html | 191 - .../kegweb/templates/kegweb/drinker-rank.html | 22 - .../templates/kegweb/drinker_detail.html | 182 - .../templates/kegweb/drinker_sessions.html | 32 - .../kegweb/drinkingsession_archive.html | 14 - .../kegweb/drinkingsession_archive_base.html | 30 - .../kegweb/drinkingsession_archive_day.html | 6 - .../kegweb/drinkingsession_archive_month.html | 30 - .../kegweb/drinkingsession_archive_year.html | 24 - .../kegweb/templates/kegweb/fullscreen.html | 167 - .../kegweb/includes/drink_shout.html | 5 - .../kegweb/includes/progress_bar.html | 3 - .../kegweb/includes/tap_snapshot.html | 63 - .../templates/kegweb/includes/timeline.html | 5 - .../kegweb/includes/timeline_event.html | 80 - .../kegweb/templates/kegweb/keg-session.html | 56 - .../kegweb/templates/kegweb/keg-snapshot.html | 53 - .../kegweb/templates/kegweb/keg_detail.html | 140 - .../web/kegweb/templates/kegweb/keg_list.html | 19 - .../kegweb/templates/kegweb/keg_sessions.html | 32 - .../kegweb/templates/kegweb/members_only.html | 11 - .../kegweb/templates/kegweb/mugshot_box.html | 24 - .../templates/kegweb/picture-gallery.html | 15 - .../templates/kegweb/session-badges.html | 9 - .../templates/kegweb/session_detail.html | 85 - .../kegweb/templates/kegweb/staff_only.html | 11 - .../kegweb/templates/kegweb/system-stats.html | 70 - pykeg/web/kegweb/templatetags/__init__.py | 0 pykeg/web/kegweb/templatetags/kegweblib.py | 425 - .../web/kegweb/templatetags/paginator_tags.py | 17 - pykeg/web/kegweb/urls.py | 51 - pykeg/web/kegweb/views.py | 267 - pykeg/web/middleware.py | 114 +- pykeg/web/setup_wizard/__init__.py | 0 pykeg/web/setup_wizard/forms.py | 93 - pykeg/web/setup_wizard/setup_wizard_tests.py | 69 - .../templates/setup_wizard/accounts.html | 37 - .../templates/setup_wizard/admin.html | 17 - .../templates/setup_wizard/base.html | 87 - .../templates/setup_wizard/finish.html | 26 - .../templates/setup_wizard/mode.html | 37 - .../setup_wizard/setup_required.html | 26 - .../templates/setup_wizard/site_settings.html | 22 - .../templates/setup_wizard/start.html | 33 - .../templates/setup_wizard/upgrade.html | 29 - .../setup_wizard/upgrade_required.html | 21 - pykeg/web/setup_wizard/urls.py | 13 - pykeg/web/setup_wizard/views.py | 195 - pykeg/web/spa.py | 6 +- .../static/angular/angular-resource.min.js | 10 - .../static/angular/angular-sanitize.min.js | 13 - pykeg/web/static/angular/angular.min.js | 161 - pykeg/web/static/bootstrap/LICENSE | 176 - .../img/glyphicons-halflings-white.png | Bin 8777 -> 0 bytes .../bootstrap/img/glyphicons-halflings.png | Bin 12799 -> 0 bytes pykeg/web/static/bootstrap/js/bootstrap.js | 2276 -- .../web/static/bootstrap/js/bootstrap.min.js | 6 - .../web/static/bootstrap/less/accordion.less | 34 - pykeg/web/static/bootstrap/less/alerts.less | 79 - .../web/static/bootstrap/less/bootstrap.less | 63 - .../static/bootstrap/less/breadcrumbs.less | 24 - .../static/bootstrap/less/button-groups.less | 229 - pykeg/web/static/bootstrap/less/buttons.less | 228 - pykeg/web/static/bootstrap/less/carousel.less | 158 - pykeg/web/static/bootstrap/less/close.less | 32 - pykeg/web/static/bootstrap/less/code.less | 61 - .../bootstrap/less/component-animations.less | 22 - .../web/static/bootstrap/less/dropdowns.less | 237 - pykeg/web/static/bootstrap/less/forms.less | 690 - pykeg/web/static/bootstrap/less/grid.less | 21 - .../web/static/bootstrap/less/hero-unit.less | 25 - .../static/bootstrap/less/labels-badges.less | 84 - pykeg/web/static/bootstrap/less/layouts.less | 16 - pykeg/web/static/bootstrap/less/media.less | 55 - pykeg/web/static/bootstrap/less/mixins.less | 702 - pykeg/web/static/bootstrap/less/modals.less | 95 - pykeg/web/static/bootstrap/less/navbar.less | 497 - pykeg/web/static/bootstrap/less/navs.less | 409 - pykeg/web/static/bootstrap/less/pager.less | 43 - .../web/static/bootstrap/less/pagination.less | 123 - pykeg/web/static/bootstrap/less/popovers.less | 133 - .../static/bootstrap/less/progress-bars.less | 122 - pykeg/web/static/bootstrap/less/reset.less | 216 - .../bootstrap/less/responsive-1200px-min.less | 28 - .../bootstrap/less/responsive-767px-max.less | 193 - .../less/responsive-768px-979px.less | 19 - .../bootstrap/less/responsive-navbar.less | 189 - .../bootstrap/less/responsive-utilities.less | 59 - .../web/static/bootstrap/less/responsive.less | 48 - .../static/bootstrap/less/scaffolding.less | 53 - pykeg/web/static/bootstrap/less/sprites.less | 197 - pykeg/web/static/bootstrap/less/tables.less | 244 - .../web/static/bootstrap/less/thumbnails.less | 53 - pykeg/web/static/bootstrap/less/tooltip.less | 70 - pykeg/web/static/bootstrap/less/type.less | 247 - .../web/static/bootstrap/less/utilities.less | 30 - .../web/static/bootstrap/less/variables.less | 301 - pykeg/web/static/bootstrap/less/wells.less | 29 - pykeg/web/static/css/bootstrap-cyborg.css | 9 - pykeg/web/static/css/bootstrap-variables.less | 98 - pykeg/web/static/css/kegweb.css | 5631 ----- pykeg/web/static/css/kegweb.less | 346 - pykeg/web/static/fancybox/blank.gif | Bin 43 -> 0 bytes .../web/static/fancybox/fancybox_loading.gif | Bin 3866 -> 0 bytes .../web/static/fancybox/fancybox_overlay.png | Bin 1003 -> 0 bytes pykeg/web/static/fancybox/fancybox_sprite.png | Bin 1362 -> 0 bytes .../fancybox/helpers/fancybox_buttons.png | Bin 1080 -> 0 bytes .../helpers/jquery.fancybox-buttons.css | 96 - .../helpers/jquery.fancybox-buttons.js | 121 - .../fancybox/helpers/jquery.fancybox-media.js | 196 - .../helpers/jquery.fancybox-thumbs.css | 54 - .../helpers/jquery.fancybox-thumbs.js | 162 - pykeg/web/static/fancybox/jquery.fancybox.css | 249 - pykeg/web/static/fancybox/jquery.fancybox.js | 1983 -- .../static/fancybox/jquery.fancybox.pack.js | 45 - .../highcharts/gfx/vml-radial-gradient.png | Bin 24270 -> 0 bytes .../web/static/highcharts/graphics/skies.jpg | Bin 43395 -> 0 bytes pykeg/web/static/highcharts/graphics/snow.png | Bin 4679 -> 0 bytes pykeg/web/static/highcharts/graphics/sun.png | Bin 3934 -> 0 bytes .../js/adapters/mootools-adapter.js | 13 - .../js/adapters/mootools-adapter.src.js | 316 - .../js/adapters/prototype-adapter.js | 15 - .../js/adapters/prototype-adapter.src.js | 316 - .../js/adapters/standalone-framework.js | 17 - .../js/adapters/standalone-framework.src.js | 591 - .../static/highcharts/js/highcharts-all.js | 400 - .../static/highcharts/js/highcharts-more.js | 51 - .../highcharts/js/highcharts-more.src.js | 2500 --- pykeg/web/static/highcharts/js/highcharts.js | 294 - .../static/highcharts/js/highcharts.src.js | 17356 ---------------- .../highcharts/js/modules/annotations.js | 7 - .../highcharts/js/modules/annotations.src.js | 401 - .../highcharts/js/modules/canvas-tools.js | 133 - .../highcharts/js/modules/canvas-tools.src.js | 3113 --- .../web/static/highcharts/js/modules/data.js | 16 - .../static/highcharts/js/modules/data.src.js | 598 - .../static/highcharts/js/modules/drilldown.js | 11 - .../highcharts/js/modules/drilldown.src.js | 459 - .../static/highcharts/js/modules/exporting.js | 22 - .../highcharts/js/modules/exporting.src.js | 715 - .../static/highcharts/js/modules/funnel.js | 12 - .../highcharts/js/modules/funnel.src.js | 289 - .../static/highcharts/js/modules/heatmap.js | 2 - .../highcharts/js/modules/heatmap.src.js | 60 - pykeg/web/static/highcharts/js/modules/map.js | 41 - .../static/highcharts/js/modules/map.src.js | 1656 -- .../js/modules/no-data-to-display.js | 12 - .../js/modules/no-data-to-display.src.js | 128 - .../static/highcharts/js/themes/dark-blue.js | 254 - .../static/highcharts/js/themes/dark-green.js | 255 - pykeg/web/static/highcharts/js/themes/gray.js | 257 - pykeg/web/static/highcharts/js/themes/grid.js | 103 - .../web/static/highcharts/js/themes/skies.js | 89 - pykeg/web/static/images/COPYRIGHT.txt | 5 - pykeg/web/static/images/background.png | Bin 133518 -> 0 bytes pykeg/web/static/images/chalkboard-bg.jpg | Bin 136742 -> 0 bytes pykeg/web/static/images/favicon.ico | Bin 5686 -> 0 bytes pykeg/web/static/images/info.png | Bin 376 -> 0 bytes pykeg/web/static/images/keg-header.png | Bin 109532 -> 0 bytes pykeg/web/static/images/keg.png | Bin 55113 -> 0 bytes .../static/images/keg/full/keg-srm14-0.png | Bin 415151 -> 0 bytes .../static/images/keg/full/keg-srm14-1.png | Bin 402516 -> 0 bytes .../static/images/keg/full/keg-srm14-2.png | Bin 346138 -> 0 bytes .../static/images/keg/full/keg-srm14-3.png | Bin 279080 -> 0 bytes .../static/images/keg/full/keg-srm14-4.png | Bin 224973 -> 0 bytes .../static/images/keg/full/keg-srm14-5.png | Bin 174972 -> 0 bytes .../static/images/keg/thumb/keg-srm14-0.png | Bin 27587 -> 0 bytes .../static/images/keg/thumb/keg-srm14-1.png | Bin 27446 -> 0 bytes .../static/images/keg/thumb/keg-srm14-2.png | Bin 24969 -> 0 bytes .../static/images/keg/thumb/keg-srm14-3.png | Bin 22669 -> 0 bytes .../static/images/keg/thumb/keg-srm14-4.png | Bin 20963 -> 0 bytes .../static/images/keg/thumb/keg-srm14-5.png | Bin 19087 -> 0 bytes pykeg/web/static/images/kegbot-icon-72x72.png | Bin 6480 -> 0 bytes .../static/images/kegbot-logo-full-white.png | Bin 8689 -> 0 bytes .../static/images/kegbot-unknown-square.png | Bin 56096 -> 0 bytes pykeg/web/static/images/unknown-drinker.png | Bin 6156 -> 0 bytes pykeg/web/static/images/whats-on-tap.png | Bin 12045 -> 0 bytes pykeg/web/static/js/jquery-1.9.1.min.js | 5 - pykeg/web/static/js/jquery.autounits.js | 78 - pykeg/web/static/js/jquery.cookie.js | 96 - .../web/static/js/jquery.cycle2.center.min.js | 2 - pykeg/web/static/js/jquery.cycle2.min.js | 16 - pykeg/web/static/js/jquery.lazyload.js | 239 - pykeg/web/static/js/jquery.lazyload.min.js | 15 - pykeg/web/static/js/jquery.scrollstop.js | 72 - pykeg/web/static/js/jquery.scrollstop.min.js | 15 - pykeg/web/static/js/jquery.timeago.js | 193 - .../static/lib/bootstrap-progressbar/LICENSE | 20 - .../bootstrap-progressbar.min.js | 2 - .../css/bootstrap-progressbar-2.3.1.css | 419 - .../css/bootstrap-progressbar-2.3.1.min.css | 9 - pykeg/web/static/lib/slick/ajax-loader.gif | Bin 4178 -> 0 bytes pykeg/web/static/lib/slick/config.rb | 10 - pykeg/web/static/lib/slick/fonts/slick.eot | Bin 2048 -> 0 bytes pykeg/web/static/lib/slick/fonts/slick.svg | 14 - pykeg/web/static/lib/slick/fonts/slick.ttf | Bin 1892 -> 0 bytes pykeg/web/static/lib/slick/fonts/slick.woff | Bin 1380 -> 0 bytes pykeg/web/static/lib/slick/slick.css | 55 - pykeg/web/static/lib/slick/slick.js | 1850 -- pykeg/web/static/lib/slick/slick.min.js | 1 - pykeg/web/static/lib/slick/slick.scss | 286 - pykeg/web/templates/admin/login.html | 21 - pykeg/web/templates/base.html | 127 - pykeg/web/templates/index.html | 74 - pykeg/web/templates/page-twocol.html | 11 - .../registration/activation_complete.html | 11 - .../registration/activation_email.txt | 8 - .../registration/activation_email_subject.txt | 1 - .../registration/invitation_expired.html | 12 - .../registration/invitation_required.html | 12 - .../templates/registration/logged_out.html | 9 - pykeg/web/templates/registration/login.html | 21 - .../registration/password_change_done.html | 14 - .../registration/password_change_form.html | 20 - .../registration/password_reset_complete.html | 11 - .../registration/password_reset_confirm.html | 13 - .../registration/password_reset_done.html | 11 - .../registration/password_reset_form.html | 12 - .../registration/registration_closed.html | 12 - .../registration/registration_complete.html | 12 - .../registration/registration_form.html | 17 - pykeg/web/templates/skel.html | 157 - pykeg/web/urls.py | 42 +- pyproject.toml | 3 - uv.lock | 53 - 301 files changed, 141 insertions(+), 60189 deletions(-) create mode 100644 pykeg/api/forms.py delete mode 100644 pykeg/contrib/webhook/templates/contrib/webhook/webhook_admin_settings.html delete mode 100644 pykeg/contrib/webhook/views.py delete mode 100644 pykeg/web/account/__init__.py delete mode 100644 pykeg/web/account/templates/account/activate_account.html delete mode 100644 pykeg/web/account/templates/account/base.html delete mode 100644 pykeg/web/account/templates/account/index.html delete mode 100644 pykeg/web/account/templates/account/invite.html delete mode 100644 pykeg/web/account/templates/account/notifications.html delete mode 100644 pykeg/web/account/templates/account/profile.html delete mode 100644 pykeg/web/account/urls.py delete mode 100644 pykeg/web/account/views.py delete mode 100644 pykeg/web/charts/__init__.py delete mode 100644 pykeg/web/charts/charts.py delete mode 100644 pykeg/web/context_processors.py delete mode 100644 pykeg/web/decorators.py delete mode 100644 pykeg/web/kbregistration/__init__.py delete mode 100644 pykeg/web/kbregistration/forms.py delete mode 100644 pykeg/web/kbregistration/registration_test.py delete mode 100644 pykeg/web/kbregistration/urls.py delete mode 100644 pykeg/web/kbregistration/views.py rename pykeg/web/{kegweb => }/kbstorage.py (100%) delete mode 100644 pykeg/web/kegadmin/__init__.py delete mode 100644 pykeg/web/kegadmin/forms.py delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/add_controller.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/add_tap.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/add_token.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/add_user.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/backup_export.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/base.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/beer_type_add.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/beer_type_detail.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/beer_type_list.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/brewer_add.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/brewer_detail.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/brewer_list.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/bugreport.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/controller_detail.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/controller_list.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/dashboard.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/drink_list.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/email.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/includes/extrajs.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/includes/keg-status-label.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/includes/keg_nav.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/includes/user-status-label.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/index.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/keg_add.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/keg_detail.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/keg_list.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/logs.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/nav-items.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/tap_detail.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/tap_list.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/token_detail.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/token_list.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/user_detail.html delete mode 100644 pykeg/web/kegadmin/templates/kegadmin/user_list.html delete mode 100644 pykeg/web/kegadmin/urls.py delete mode 100644 pykeg/web/kegadmin/views.py delete mode 100644 pykeg/web/kegweb/__init__.py delete mode 100644 pykeg/web/kegweb/forms.py delete mode 100644 pykeg/web/kegweb/kegweb_test.py delete mode 100644 pykeg/web/kegweb/signals.py delete mode 100644 pykeg/web/kegweb/templates/kegweb/_pagination.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/badge.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/basic-badges.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/basic-stats.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drink_detail.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinker-rank.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinker_detail.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinker_sessions.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinkingsession_archive.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_base.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_day.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_month.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_year.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/fullscreen.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/includes/drink_shout.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/includes/progress_bar.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/includes/tap_snapshot.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/includes/timeline.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/includes/timeline_event.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/keg-session.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/keg-snapshot.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/keg_detail.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/keg_list.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/keg_sessions.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/members_only.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/mugshot_box.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/picture-gallery.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/session-badges.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/session_detail.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/staff_only.html delete mode 100644 pykeg/web/kegweb/templates/kegweb/system-stats.html delete mode 100644 pykeg/web/kegweb/templatetags/__init__.py delete mode 100644 pykeg/web/kegweb/templatetags/kegweblib.py delete mode 100644 pykeg/web/kegweb/templatetags/paginator_tags.py delete mode 100644 pykeg/web/kegweb/urls.py delete mode 100644 pykeg/web/kegweb/views.py delete mode 100644 pykeg/web/setup_wizard/__init__.py delete mode 100644 pykeg/web/setup_wizard/forms.py delete mode 100644 pykeg/web/setup_wizard/setup_wizard_tests.py delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/accounts.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/admin.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/base.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/finish.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/mode.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/setup_required.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/site_settings.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/start.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/upgrade.html delete mode 100644 pykeg/web/setup_wizard/templates/setup_wizard/upgrade_required.html delete mode 100644 pykeg/web/setup_wizard/urls.py delete mode 100644 pykeg/web/setup_wizard/views.py delete mode 100644 pykeg/web/static/angular/angular-resource.min.js delete mode 100644 pykeg/web/static/angular/angular-sanitize.min.js delete mode 100644 pykeg/web/static/angular/angular.min.js delete mode 100644 pykeg/web/static/bootstrap/LICENSE delete mode 100644 pykeg/web/static/bootstrap/img/glyphicons-halflings-white.png delete mode 100644 pykeg/web/static/bootstrap/img/glyphicons-halflings.png delete mode 100644 pykeg/web/static/bootstrap/js/bootstrap.js delete mode 100644 pykeg/web/static/bootstrap/js/bootstrap.min.js delete mode 100644 pykeg/web/static/bootstrap/less/accordion.less delete mode 100644 pykeg/web/static/bootstrap/less/alerts.less delete mode 100644 pykeg/web/static/bootstrap/less/bootstrap.less delete mode 100644 pykeg/web/static/bootstrap/less/breadcrumbs.less delete mode 100644 pykeg/web/static/bootstrap/less/button-groups.less delete mode 100644 pykeg/web/static/bootstrap/less/buttons.less delete mode 100644 pykeg/web/static/bootstrap/less/carousel.less delete mode 100644 pykeg/web/static/bootstrap/less/close.less delete mode 100644 pykeg/web/static/bootstrap/less/code.less delete mode 100644 pykeg/web/static/bootstrap/less/component-animations.less delete mode 100644 pykeg/web/static/bootstrap/less/dropdowns.less delete mode 100644 pykeg/web/static/bootstrap/less/forms.less delete mode 100644 pykeg/web/static/bootstrap/less/grid.less delete mode 100644 pykeg/web/static/bootstrap/less/hero-unit.less delete mode 100644 pykeg/web/static/bootstrap/less/labels-badges.less delete mode 100644 pykeg/web/static/bootstrap/less/layouts.less delete mode 100644 pykeg/web/static/bootstrap/less/media.less delete mode 100644 pykeg/web/static/bootstrap/less/mixins.less delete mode 100644 pykeg/web/static/bootstrap/less/modals.less delete mode 100644 pykeg/web/static/bootstrap/less/navbar.less delete mode 100644 pykeg/web/static/bootstrap/less/navs.less delete mode 100644 pykeg/web/static/bootstrap/less/pager.less delete mode 100644 pykeg/web/static/bootstrap/less/pagination.less delete mode 100644 pykeg/web/static/bootstrap/less/popovers.less delete mode 100644 pykeg/web/static/bootstrap/less/progress-bars.less delete mode 100644 pykeg/web/static/bootstrap/less/reset.less delete mode 100644 pykeg/web/static/bootstrap/less/responsive-1200px-min.less delete mode 100644 pykeg/web/static/bootstrap/less/responsive-767px-max.less delete mode 100644 pykeg/web/static/bootstrap/less/responsive-768px-979px.less delete mode 100644 pykeg/web/static/bootstrap/less/responsive-navbar.less delete mode 100644 pykeg/web/static/bootstrap/less/responsive-utilities.less delete mode 100644 pykeg/web/static/bootstrap/less/responsive.less delete mode 100644 pykeg/web/static/bootstrap/less/scaffolding.less delete mode 100644 pykeg/web/static/bootstrap/less/sprites.less delete mode 100644 pykeg/web/static/bootstrap/less/tables.less delete mode 100644 pykeg/web/static/bootstrap/less/thumbnails.less delete mode 100644 pykeg/web/static/bootstrap/less/tooltip.less delete mode 100644 pykeg/web/static/bootstrap/less/type.less delete mode 100644 pykeg/web/static/bootstrap/less/utilities.less delete mode 100644 pykeg/web/static/bootstrap/less/variables.less delete mode 100644 pykeg/web/static/bootstrap/less/wells.less delete mode 100644 pykeg/web/static/css/bootstrap-cyborg.css delete mode 100644 pykeg/web/static/css/bootstrap-variables.less delete mode 100644 pykeg/web/static/css/kegweb.css delete mode 100644 pykeg/web/static/css/kegweb.less delete mode 100644 pykeg/web/static/fancybox/blank.gif delete mode 100644 pykeg/web/static/fancybox/fancybox_loading.gif delete mode 100644 pykeg/web/static/fancybox/fancybox_overlay.png delete mode 100644 pykeg/web/static/fancybox/fancybox_sprite.png delete mode 100644 pykeg/web/static/fancybox/helpers/fancybox_buttons.png delete mode 100644 pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.css delete mode 100644 pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.js delete mode 100644 pykeg/web/static/fancybox/helpers/jquery.fancybox-media.js delete mode 100644 pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.css delete mode 100644 pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.js delete mode 100644 pykeg/web/static/fancybox/jquery.fancybox.css delete mode 100644 pykeg/web/static/fancybox/jquery.fancybox.js delete mode 100644 pykeg/web/static/fancybox/jquery.fancybox.pack.js delete mode 100644 pykeg/web/static/highcharts/gfx/vml-radial-gradient.png delete mode 100644 pykeg/web/static/highcharts/graphics/skies.jpg delete mode 100644 pykeg/web/static/highcharts/graphics/snow.png delete mode 100644 pykeg/web/static/highcharts/graphics/sun.png delete mode 100644 pykeg/web/static/highcharts/js/adapters/mootools-adapter.js delete mode 100644 pykeg/web/static/highcharts/js/adapters/mootools-adapter.src.js delete mode 100644 pykeg/web/static/highcharts/js/adapters/prototype-adapter.js delete mode 100644 pykeg/web/static/highcharts/js/adapters/prototype-adapter.src.js delete mode 100644 pykeg/web/static/highcharts/js/adapters/standalone-framework.js delete mode 100644 pykeg/web/static/highcharts/js/adapters/standalone-framework.src.js delete mode 100644 pykeg/web/static/highcharts/js/highcharts-all.js delete mode 100644 pykeg/web/static/highcharts/js/highcharts-more.js delete mode 100644 pykeg/web/static/highcharts/js/highcharts-more.src.js delete mode 100644 pykeg/web/static/highcharts/js/highcharts.js delete mode 100644 pykeg/web/static/highcharts/js/highcharts.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/annotations.js delete mode 100644 pykeg/web/static/highcharts/js/modules/annotations.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/canvas-tools.js delete mode 100644 pykeg/web/static/highcharts/js/modules/canvas-tools.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/data.js delete mode 100644 pykeg/web/static/highcharts/js/modules/data.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/drilldown.js delete mode 100644 pykeg/web/static/highcharts/js/modules/drilldown.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/exporting.js delete mode 100644 pykeg/web/static/highcharts/js/modules/exporting.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/funnel.js delete mode 100644 pykeg/web/static/highcharts/js/modules/funnel.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/heatmap.js delete mode 100644 pykeg/web/static/highcharts/js/modules/heatmap.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/map.js delete mode 100644 pykeg/web/static/highcharts/js/modules/map.src.js delete mode 100644 pykeg/web/static/highcharts/js/modules/no-data-to-display.js delete mode 100644 pykeg/web/static/highcharts/js/modules/no-data-to-display.src.js delete mode 100644 pykeg/web/static/highcharts/js/themes/dark-blue.js delete mode 100644 pykeg/web/static/highcharts/js/themes/dark-green.js delete mode 100644 pykeg/web/static/highcharts/js/themes/gray.js delete mode 100644 pykeg/web/static/highcharts/js/themes/grid.js delete mode 100644 pykeg/web/static/highcharts/js/themes/skies.js delete mode 100644 pykeg/web/static/images/COPYRIGHT.txt delete mode 100644 pykeg/web/static/images/background.png delete mode 100644 pykeg/web/static/images/chalkboard-bg.jpg delete mode 100644 pykeg/web/static/images/favicon.ico delete mode 100644 pykeg/web/static/images/info.png delete mode 100644 pykeg/web/static/images/keg-header.png delete mode 100644 pykeg/web/static/images/keg.png delete mode 100644 pykeg/web/static/images/keg/full/keg-srm14-0.png delete mode 100644 pykeg/web/static/images/keg/full/keg-srm14-1.png delete mode 100644 pykeg/web/static/images/keg/full/keg-srm14-2.png delete mode 100644 pykeg/web/static/images/keg/full/keg-srm14-3.png delete mode 100644 pykeg/web/static/images/keg/full/keg-srm14-4.png delete mode 100644 pykeg/web/static/images/keg/full/keg-srm14-5.png delete mode 100644 pykeg/web/static/images/keg/thumb/keg-srm14-0.png delete mode 100644 pykeg/web/static/images/keg/thumb/keg-srm14-1.png delete mode 100644 pykeg/web/static/images/keg/thumb/keg-srm14-2.png delete mode 100644 pykeg/web/static/images/keg/thumb/keg-srm14-3.png delete mode 100644 pykeg/web/static/images/keg/thumb/keg-srm14-4.png delete mode 100644 pykeg/web/static/images/keg/thumb/keg-srm14-5.png delete mode 100644 pykeg/web/static/images/kegbot-icon-72x72.png delete mode 100644 pykeg/web/static/images/kegbot-logo-full-white.png delete mode 100644 pykeg/web/static/images/kegbot-unknown-square.png delete mode 100644 pykeg/web/static/images/unknown-drinker.png delete mode 100644 pykeg/web/static/images/whats-on-tap.png delete mode 100644 pykeg/web/static/js/jquery-1.9.1.min.js delete mode 100644 pykeg/web/static/js/jquery.autounits.js delete mode 100644 pykeg/web/static/js/jquery.cookie.js delete mode 100644 pykeg/web/static/js/jquery.cycle2.center.min.js delete mode 100644 pykeg/web/static/js/jquery.cycle2.min.js delete mode 100644 pykeg/web/static/js/jquery.lazyload.js delete mode 100644 pykeg/web/static/js/jquery.lazyload.min.js delete mode 100644 pykeg/web/static/js/jquery.scrollstop.js delete mode 100644 pykeg/web/static/js/jquery.scrollstop.min.js delete mode 100644 pykeg/web/static/js/jquery.timeago.js delete mode 100644 pykeg/web/static/lib/bootstrap-progressbar/LICENSE delete mode 100644 pykeg/web/static/lib/bootstrap-progressbar/bootstrap-progressbar.min.js delete mode 100644 pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.css delete mode 100644 pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.min.css delete mode 100755 pykeg/web/static/lib/slick/ajax-loader.gif delete mode 100755 pykeg/web/static/lib/slick/config.rb delete mode 100755 pykeg/web/static/lib/slick/fonts/slick.eot delete mode 100755 pykeg/web/static/lib/slick/fonts/slick.svg delete mode 100755 pykeg/web/static/lib/slick/fonts/slick.ttf delete mode 100755 pykeg/web/static/lib/slick/fonts/slick.woff delete mode 100755 pykeg/web/static/lib/slick/slick.css delete mode 100755 pykeg/web/static/lib/slick/slick.js delete mode 100755 pykeg/web/static/lib/slick/slick.min.js delete mode 100755 pykeg/web/static/lib/slick/slick.scss delete mode 100644 pykeg/web/templates/admin/login.html delete mode 100644 pykeg/web/templates/base.html delete mode 100644 pykeg/web/templates/index.html delete mode 100644 pykeg/web/templates/page-twocol.html delete mode 100644 pykeg/web/templates/registration/activation_complete.html delete mode 100644 pykeg/web/templates/registration/activation_email.txt delete mode 100644 pykeg/web/templates/registration/activation_email_subject.txt delete mode 100644 pykeg/web/templates/registration/invitation_expired.html delete mode 100644 pykeg/web/templates/registration/invitation_required.html delete mode 100644 pykeg/web/templates/registration/logged_out.html delete mode 100644 pykeg/web/templates/registration/login.html delete mode 100644 pykeg/web/templates/registration/password_change_done.html delete mode 100644 pykeg/web/templates/registration/password_change_form.html delete mode 100644 pykeg/web/templates/registration/password_reset_complete.html delete mode 100644 pykeg/web/templates/registration/password_reset_confirm.html delete mode 100644 pykeg/web/templates/registration/password_reset_done.html delete mode 100644 pykeg/web/templates/registration/password_reset_form.html delete mode 100644 pykeg/web/templates/registration/registration_closed.html delete mode 100644 pykeg/web/templates/registration/registration_complete.html delete mode 100644 pykeg/web/templates/registration/registration_form.html delete mode 100644 pykeg/web/templates/skel.html diff --git a/pykeg/api/forms.py b/pykeg/api/forms.py new file mode 100644 index 000000000..2cc42ab6c --- /dev/null +++ b/pykeg/api/forms.py @@ -0,0 +1,64 @@ +"""Django forms reused by API endpoints.""" + +import urllib.parse + +from django import forms +from django.conf import settings +from django.contrib.auth import get_user_model +from django.contrib.auth.tokens import default_token_generator +from django.template import loader +from django.utils.encoding import force_bytes +from django.utils.http import urlsafe_base64_encode + +from pykeg.core import models +from pykeg.web.util import get_base_url + +User = get_user_model() + + +class PasswordResetForm(forms.Form): + """Builds and mails password-reset links (relocated from the old + registration app; the reset link lands on a frontend route).""" + + email = forms.EmailField(max_length=254) + + def save( + self, + subject_template_name="registration/password_reset_subject.txt", + email_template_name="registration/password_reset_email.html", + token_generator=default_token_generator, + from_email=None, + request=None, + **kwargs, + ): + """Generates a one-use only link for resetting password and sends + it to the user.""" + from django.core.mail import send_mail + + email = self.cleaned_data["email"] + active_users = User._default_manager.filter(email__iexact=email, is_active=True) + for user in active_users: + # Make sure that no email is sent to a user that actually has + # a password marked as unusable. + if not user.has_usable_password(): + continue + from_email = settings.DEFAULT_FROM_EMAIL or from_email + + base_url = get_base_url() + parsed = urllib.parse.urlparse(base_url) + + kbsite = models.KegbotSite.get() + context = { + "email": user.email, + "site_name": kbsite.title, + "uid": urlsafe_base64_encode(force_bytes(user.pk)), + "user": user, + "token": token_generator.make_token(user), + "domain": parsed.netloc, + "protocol": parsed.scheme, + } + subject = loader.render_to_string(subject_template_name, context) + # Email subject *must not* contain newlines. + subject = "".join(subject.splitlines()) + body = loader.render_to_string(email_template_name, context) + send_mail(subject, body, from_email, [user.email]) diff --git a/pykeg/api/views_account.py b/pykeg/api/views_account.py index 0b939944d..537fe00a3 100644 --- a/pykeg/api/views_account.py +++ b/pykeg/api/views_account.py @@ -27,9 +27,9 @@ from pykeg.core import models from pykeg.util import email as email_util from pykeg.web.auth import UserExistsException -from pykeg.web.kbregistration.forms import PasswordResetForm from . import serializers +from .forms import PasswordResetForm class AuthAttemptThrottle(AnonRateThrottle): diff --git a/pykeg/contrib/webhook/plugin.py b/pykeg/contrib/webhook/plugin.py index f3d9fd7e9..1d44f1383 100644 --- a/pykeg/contrib/webhook/plugin.py +++ b/pykeg/contrib/webhook/plugin.py @@ -4,7 +4,7 @@ from pykeg.plugin import plugin from pykeg.web.api import serialize -from . import forms, tasks, views +from . import forms, tasks KEY_SITE_SETTINGS = "settings" @@ -16,9 +16,6 @@ class WebhookPlugin(plugin.Plugin): URL = "http://kegbot.org" VERSION = "1.0.0" - def get_admin_settings_view(self): - return views.admin_settings - def handle_new_events(self, events): for event in events: self.handle_event(event) diff --git a/pykeg/contrib/webhook/templates/contrib/webhook/webhook_admin_settings.html b/pykeg/contrib/webhook/templates/contrib/webhook/webhook_admin_settings.html deleted file mode 100644 index 7cc2f700b..000000000 --- a/pykeg/contrib/webhook/templates/contrib/webhook/webhook_admin_settings.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Webhook Settings | {{ block.super }}{% endblock %} -{% block pagetitle %}Webhook Settings{% endblock %} - -{% block kegadmin-main %} - -

Settings

-
-

- Site-wide settings for webhooks. -

-
- {% csrf_token %} - {{ settings_form|crispy }} - - -
-
- -{% endblock %} diff --git a/pykeg/contrib/webhook/views.py b/pykeg/contrib/webhook/views.py deleted file mode 100644 index ca5cd5859..000000000 --- a/pykeg/contrib/webhook/views.py +++ /dev/null @@ -1,24 +0,0 @@ -from django.contrib import messages -from django.shortcuts import render - -from pykeg.web.decorators import staff_member_required - -from . import forms - - -@staff_member_required -def admin_settings(request, plugin): - context = {} - settings_form = plugin.get_site_settings_form() - - if request.method == "POST": - if "submit-settings" in request.POST: - settings_form = forms.SiteSettingsForm(request.POST) - if settings_form.is_valid(): - plugin.save_site_settings_form(settings_form) - messages.success(request, "Settings updated") - - context["plugin"] = plugin - context["settings_form"] = settings_form - - return render(request, "contrib/webhook/webhook_admin_settings.html", context=context) diff --git a/pykeg/core/util.py b/pykeg/core/util.py index 194da389f..40a169108 100644 --- a/pykeg/core/util.py +++ b/pykeg/core/util.py @@ -3,7 +3,6 @@ # Note: imports should be limited to python stdlib, since methods here # may be used in models.py, settings.py, etc. -import importlib.util import logging import os import tempfile @@ -14,7 +13,6 @@ from threading import current_thread import requests -from django.core.exceptions import ImproperlyConfigured from packaging.version import Version from redis.exceptions import RedisError @@ -53,19 +51,6 @@ def CtoF(t): return ((9.0 / 5.0) * t) + 32 -def get_plugin_template_dirs(plugin_list): - ret = [] - for plugin in plugin_list: - plugin_module = ".".join(plugin.split(".")[:-1]) - spec = importlib.util.find_spec(plugin_module) - if not spec or not spec.origin: - raise ImproperlyConfigured(f'Cannot find plugin "{plugin}"') - template_dir = os.path.join(os.path.dirname(spec.origin), "templates") - if os.path.isdir(template_dir): - ret.append(template_dir) - return ret - - def get_current_request(): """Retrieve the current request. diff --git a/pykeg/plugin/plugin.py b/pykeg/plugin/plugin.py index ec7143770..82e8be263 100644 --- a/pykeg/plugin/plugin.py +++ b/pykeg/plugin/plugin.py @@ -81,42 +81,6 @@ def get_url(cls): # Plugin methods - def get_admin_settings_view(self): - """Returns the view instance for the main admin settings for this - plugin, or None. - """ - return None - - def get_extra_admin_views(self): - """Returns an iterable of additional views to be installed in the admin - site section this plugin. - - Each item should be a 3-tuple of the form: - (regex, view name, url name) - - Each view will be installed with the name - "plugin--" - """ - return [] - - def get_user_settings_view(self): - """Returns the view instance for the main user settings for this - plugin, or None. - """ - return None - - def get_extra_user_views(self): - """Returns an iterable of additional views to be installed in the - user section for this plugin. - - Each item should be a 3-tuple of the form: - (regex, view name, url name) - - Each view will be installed with the name - "plugin--" - """ - return [] - def handle_new_events(self, event): """Called synchronously when new events are posted. diff --git a/pykeg/plugin/util.py b/pykeg/plugin/util.py index 81dae99c0..d224b8c9d 100644 --- a/pykeg/plugin/util.py +++ b/pykeg/plugin/util.py @@ -4,7 +4,6 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured -from django.urls import re_path from django.utils import timezone from .plugin import Plugin @@ -44,29 +43,6 @@ def get_plugins(): return _CACHED_PLUGINS -def get_admin_urls(): - urls = [] - for plugin in list(get_plugins().values()): - urls += _to_urls(plugin.get_extra_admin_views(), plugin.get_short_name()) - return urls - - -def get_account_urls(): - urls = [] - for plugin in list(get_plugins().values()): - urls += _to_urls(plugin.get_extra_user_views(), plugin.get_short_name()) - return urls - - -def _to_urls(urllist, short_name): - urls = [] - for regex, fn, viewname in urllist: - regex = f"plugin/{short_name}/{regex}" - viewname = f"plugin-{short_name}-{viewname}" - urls.append(re_path(regex, fn, name=viewname)) - return urls - - def is_stale(time, now=None): if not now: now = timezone.now() diff --git a/pykeg/settings.py b/pykeg/settings.py index e76ccada2..bcaea433e 100644 --- a/pykeg/settings.py +++ b/pykeg/settings.py @@ -36,11 +36,6 @@ "whitenoise.runserver_nostatic", "pykeg.web", "pykeg.web.api", - "pykeg.web.account", - "pykeg.web.kbregistration", - "pykeg.web.kegadmin", - "pykeg.web.kegweb", - "pykeg.web.setup_wizard", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", @@ -49,8 +44,6 @@ "django.contrib.sessions", "django.contrib.staticfiles", "pykeg.api", - "crispy_forms", - "crispy_bootstrap4", "imagekit", "rest_framework", "drf_spectacular", @@ -59,10 +52,6 @@ "django_rq", ) -LOGIN_REDIRECT_URL = "/account/" - -KEGBOT_ADMIN_LOGIN_URL = "login" - AUTH_USER_MODEL = "core.User" # List of finder classes that know how to find static files in @@ -83,17 +72,13 @@ # Storage backends (Django 5.1+ replaced DEFAULT_FILE_STORAGE / STATICFILES_STORAGE). STORAGES = { "default": { - "BACKEND": "pykeg.web.kegweb.kbstorage.KegbotFileSystemStorage", + "BACKEND": "pykeg.web.kbstorage.KegbotFileSystemStorage", }, "staticfiles": { "BACKEND": _STATICFILES_BACKEND, }, } -# crispy-forms 2.x template pack (Bootstrap 4). -CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4" -CRISPY_TEMPLATE_PACK = "bootstrap4" - # Default session serialization. SESSION_SERIALIZER = "django.contrib.sessions.serializers.JSONSerializer" @@ -158,7 +143,6 @@ "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "pykeg.web.api.middleware.ApiRequestMiddleware", - "pykeg.web.middleware.PrivacyMiddleware", ] AUTHENTICATION_BACKENDS = ("pykeg.web.auth.local.LocalAuthBackend",) @@ -306,12 +290,10 @@ # Storage is configured via STORAGES above (Django 5.1+). -from pykeg.core.util import get_plugin_template_dirs # noqa: E402 (needs KEGBOT_PLUGINS above) - TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": ["web/templates"] + get_plugin_template_dirs(KEGBOT_PLUGINS), + "DIRS": ["web/templates"], "APP_DIRS": True, "OPTIONS": { "context_processors": [ @@ -323,7 +305,6 @@ "django.template.context_processors.static", "django.template.context_processors.tz", "django.contrib.messages.context_processors.messages", - "pykeg.web.context_processors.kbsite", ], "debug": DEBUG, }, diff --git a/pykeg/web/account/__init__.py b/pykeg/web/account/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pykeg/web/account/templates/account/activate_account.html b/pykeg/web/account/templates/account/activate_account.html deleted file mode 100644 index db7799d95..000000000 --- a/pykeg/web/account/templates/account/activate_account.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "account/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Activate Your Account{% endblock %} -{% block pagetitle %}Activate Your Account{% endblock %} - -{% block kb-account-main %} -

Choose a Password

-
-
- {% csrf_token %} - {{ form|crispy }} -
- -
-
-
- -{% endblock %} diff --git a/pykeg/web/account/templates/account/base.html b/pykeg/web/account/templates/account/base.html deleted file mode 100644 index f0f116f81..000000000 --- a/pykeg/web/account/templates/account/base.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block content %} -
-
- -
- -
- {% block kb-account-main %}{% endblock %} -
-
- -{% endblock %} diff --git a/pykeg/web/account/templates/account/index.html b/pykeg/web/account/templates/account/index.html deleted file mode 100644 index 7a1f26181..000000000 --- a/pykeg/web/account/templates/account/index.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "account/base.html" %} -{% load crispy_forms_tags %} - -{% block title %}Account Settings | {{ block.super }}{% endblock %} -{% block pagetitle %}Account Settings{% endblock %} - -{% block kb-account-main %} - -{% if user.is_staff or user.is_superuser %} -

API Access

-

- Use this API key to access the kegbot web service. Ssh! Keep it secret! -

- -
{{ user.get_api_key }}
- -
-{% csrf_token %} -{{ apikey_form.as_p }} - -
- -{% else %} -

Hello, {{user.get_full_name}}!

-{% endif %} - -{% endblock %} diff --git a/pykeg/web/account/templates/account/invite.html b/pykeg/web/account/templates/account/invite.html deleted file mode 100644 index 7a94ccc5b..000000000 --- a/pykeg/web/account/templates/account/invite.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "account/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Invite a New User | {{ block.super }}{% endblock %} -{% block pagetitle %}Invite a New User{% endblock %} - -{% block kb-account-main %} -

Invite a New User

-
-
- {% csrf_token %} - {{ form|crispy }} -
- -
-
-
- -{% endblock %} diff --git a/pykeg/web/account/templates/account/notifications.html b/pykeg/web/account/templates/account/notifications.html deleted file mode 100644 index 29bd079c5..000000000 --- a/pykeg/web/account/templates/account/notifications.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "account/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Account: E-Mail & Notifications | {{ block.super }}{% endblock %} -{% block pagetitle %}Account: E-Mail & Notifications{% endblock %} - -{% block kb-account-main %} - -

E-Mail Address

-
-
- {% csrf_token %} - {{ email_form|crispy }} - - -
-
- - -

E-Mail Notification Preferences

-
-

- Notify me via e-mail when: -

- -
- {% csrf_token %} - {{ form|crispy }} - - -
- -
- -{% endblock %} diff --git a/pykeg/web/account/templates/account/profile.html b/pykeg/web/account/templates/account/profile.html deleted file mode 100644 index 80ecf2eea..000000000 --- a/pykeg/web/account/templates/account/profile.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "account/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Account: Edit Profile | {{ block.super }}{% endblock %} -{% block pagetitle %}Account: Edit Profile{% endblock %} - -{% block kb-account-main %} -

Edit Profile

-
-
- {% csrf_token %} -
- -
- {% mugshot_box user 100 %} -
-
- {{ form|crispy }} -
- -
-
-
- -{% endblock %} diff --git a/pykeg/web/account/urls.py b/pykeg/web/account/urls.py deleted file mode 100644 index f2fa3d78f..000000000 --- a/pykeg/web/account/urls.py +++ /dev/null @@ -1,24 +0,0 @@ -from django.contrib.auth.views import PasswordChangeDoneView, PasswordChangeView -from django.urls import path - -from pykeg.plugin import util -from pykeg.web.account import views - -urlpatterns = [ - path("", views.account_main, name="kb-account-main"), - path( - "activate//", - views.activate_account, - name="activate-account", - ), - path("password/done/", PasswordChangeDoneView.as_view(), name="password_change_done"), - path("password/", PasswordChangeView.as_view(), name="password_change"), - path("profile/", views.edit_profile, name="account-profile"), - path("invite/", views.invite, name="account-invite"), - path("confirm-email/", views.confirm_email, name="account-confirm-email"), - path("notifications/", views.notifications, name="account-notifications"), - path("regenerate-api-key/", views.regenerate_api_key, name="regen-api-key"), - path("plugin//", views.plugin_settings, name="account-plugin-settings"), -] - -urlpatterns += util.get_account_urls() diff --git a/pykeg/web/account/views.py b/pykeg/web/account/views.py deleted file mode 100644 index 378e334d6..000000000 --- a/pykeg/web/account/views.py +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env python -# -"""Kegweb main views.""" - -from django.contrib import messages -from django.contrib.auth import authenticate -from django.contrib.auth import login as auth_login -from django.contrib.auth.decorators import login_required -from django.http import Http404 -from django.shortcuts import redirect, render -from django.views.decorators.cache import never_cache -from django.views.decorators.http import require_POST - -from pykeg.core import models -from pykeg.notification.forms import NotificationSettingsForm -from pykeg.util import email -from pykeg.web.kegweb import forms - - -@login_required -def account_main(request): - context = {} - context["user"] = request.user - return render(request, "account/index.html", context=context) - - -@login_required -def edit_profile(request): - context = {} - user = request.user - - context["form"] = forms.ProfileForm(initial={"display_name": user.get_full_name()}) - - if request.method == "POST": - form = forms.ProfileForm(request.POST, request.FILES) - context["form"] = form - if form.is_valid(): - if "new_mugshot" in request.FILES: - pic = models.Picture.objects.create(user=user) - image = request.FILES["new_mugshot"] - pic.image.save(image.name, image) - pic.save() - user.mugshot = pic - user.display_name = form.cleaned_data["display_name"] - user.save() - return render(request, "account/profile.html", context=context) - - -@login_required -def invite(request): - context = {} - form = forms.InvitationForm() - - if not request.kbsite.can_invite(request.user): - raise Http404("Cannot invite from this account.") - - if request.method == "POST": - form = forms.InvitationForm(request.POST) - if form.is_valid(): - email = form.cleaned_data["email"] - invite = models.Invitation.objects.create(for_email=email, invited_by=request.user) - invite.send() - messages.success(request, "Invitation mailed to " + email) - - context["form"] = form - return render(request, "account/invite.html", context=context) - - -@login_required -def notifications(request): - # TODO(mikey): Dynamically add settings forms for other e-mail - # backends (currently hardcoded to email backend). - - context = {} - existing_settings = models.NotificationSettings.objects.get_or_create( - user=request.user, backend="pykeg.notification.backends.email.EmailNotificationBackend" - )[0] - - if request.method == "POST": - if "submit-settings" in request.POST: - form = NotificationSettingsForm(request.POST, instance=existing_settings) - if form.is_valid(): - instance = form.save(commit=False) - instance.user = request.user - instance.backend = "pykeg.notification.backends.email.EmailNotificationBackend" - instance.save() - messages.success(request, "Settings updated") - existing_settings = instance - - elif "submit-email" in request.POST: - form = forms.ChangeEmailForm(request.POST) - if form.is_valid(): - new_email = form.cleaned_data["email"] - if new_email == request.user.email: - messages.warning(request, "E-mail address unchanged.") - else: - token = email.build_email_change_token(request.user, new_email) - url = models.KegbotSite.get().reverse_full( - "account-confirm-email", args=(), kwargs={"token": token} - ) - - email_context = {"url": url, "site_name": request.kbsite.title} - message = email.build_message( - new_email, "registration/email_confirm_email_change.html", email_context - ) - message.send() - messages.success( - request, f"An e-mail confirmation has been sent to {new_email}" - ) - - else: - messages.error(request, "Unknown request.") - - context["form"] = NotificationSettingsForm(instance=existing_settings) - context["email_form"] = forms.ChangeEmailForm(initial={"email": request.user.email}) - - return render(request, "account/notifications.html", context=context) - - -@login_required -def confirm_email(request, token): - try: - uid, new_address = email.verify_email_change_token(request.user, token) - if uid != request.user.id: - messages.error(request, "E-mail confirmation does not exist for this account.") - elif request.user.email != new_address: - request.user.email = new_address - request.user.save() - messages.success(request, "E-mail address successfully changed.") - else: - messages.warning(request, "E-mail address unchanged.") - except ValueError: - messages.error(request, "That token is not valid.") - - return redirect("account-notifications") - - -@never_cache -def activate_account(request, activation_key): - users = models.User.objects.filter(activation_key=activation_key) - if users.count() != 1: - raise Http404("No such activation key") - user = users[0] - - assert not user.has_usable_password(), "User already has a usable password" - - form = forms.ActivateAccountForm() - if request.method == "POST": - form = forms.ActivateAccountForm(request.POST) - if form.is_valid(): - cd = form.cleaned_data - - # Set the password and revoke the activation key. - user.set_password(cd.get("password")) - user.activation_key = None - user.save() - - # Log the user in. - user = authenticate(username=user.username, password=cd.get("password")) - auth_login(request, user) - if request.session.test_cookie_worked(): - request.session.delete_test_cookie() - - messages.success(request, "Your account has been activated!") - return redirect("kb-account-main") - - context = {} - context["form"] = form - return render(request, "account/activate_account.html", context=context) - - -@login_required -@require_POST -def regenerate_api_key(request): - form = forms.RegenerateApiKeyForm(request.POST) - if form.is_valid(): - key, is_new = models.ApiKey.objects.get_or_create(user=request.user) - key.regenerate() - key.save() - return redirect("kb-account-main") - - -@login_required -def plugin_settings(request, plugin_name): - plugin = request.plugins.get(plugin_name, None) - if not plugin: - raise Http404(f'Plugin "{plugin_name}" not loaded') - - view = plugin.get_user_settings_view() - if not view: - raise Http404("No user settings for this plugin") - - return view(request, plugin) diff --git a/pykeg/web/api/forms.py b/pykeg/web/api/forms.py index 7bcd4244f..9eb77d10f 100644 --- a/pykeg/web/api/forms.py +++ b/pykeg/web/api/forms.py @@ -1,5 +1,6 @@ from django import forms +from pykeg.core import models from pykeg.core.kb_common import USERNAME_REGEX @@ -34,3 +35,19 @@ class ThermoPostForm(forms.Form): class TapCreateForm(forms.Form): name = forms.CharField() + + +class ControllerForm(forms.ModelForm): + """Relocated from the old kegadmin app; used by legacy POSTs.""" + + class Meta: + model = models.Controller + fields = ("name", "model_name", "serial_number") + + +class NewFlowMeterForm(forms.ModelForm): + """Relocated from the old kegadmin app; used by legacy POSTs.""" + + class Meta: + model = models.FlowMeter + fields = ("port_name", "ticks_per_ml", "controller") diff --git a/pykeg/web/api/views.py b/pykeg/web/api/views.py index f851df24f..64f885606 100644 --- a/pykeg/web/api/views.py +++ b/pykeg/web/api/views.py @@ -18,7 +18,7 @@ from pykeg.core import models from pykeg.core import util as core_util from pykeg.web.api import exceptions, forms, serialize, util -from pykeg.web.kegadmin.forms import ControllerForm, NewFlowMeterForm +from pykeg.web.api.forms import ControllerForm, NewFlowMeterForm _LOGGER = logging.getLogger(__name__) diff --git a/pykeg/web/charts/__init__.py b/pykeg/web/charts/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pykeg/web/charts/charts.py b/pykeg/web/charts/charts.py deleted file mode 100644 index 4ea01d69c..000000000 --- a/pykeg/web/charts/charts.py +++ /dev/null @@ -1,216 +0,0 @@ -import datetime - -from django.utils import timezone - -from pykeg.core import models -from pykeg.core.util import CtoF -from pykeg.util import units - - -class ChartError(Exception): - """Base chart exception.""" - - -def format_volume(volume_ml, chart_kwargs): - metric_volumes = chart_kwargs.get("metric_volumes", False) - if metric_volumes: - return volume_ml / 1000.0, "L" - else: - return units.Quantity(volume_ml).InPints(), "pints" - - -def format_temperature(temp_c, chart_kwargs): - use_c = chart_kwargs.get("temperature_units", None) == "c" - if use_c: - return temp_c - else: - return CtoF(temp_c) - - -def chart_temp_sensor(sensor, *args, **kwargs): - """Shows a simple line plot of a specific temperature sensor. - - Syntax: - {% chart temp_sensor width height %} - Args: - sensorname - the nice_name of a ThermoSensor - """ - if not isinstance(sensor, models.ThermoSensor): - raise ChartError("Bad sensor given") - - hours = 6 - now = timezone.now() - start = now - (datetime.timedelta(hours=hours)) - start = start - (datetime.timedelta(seconds=start.second)) - - points = sensor.thermolog_set.filter(time__gte=start).order_by("time") - - curr = start - temps = [] - have_temps = False - for point in points: - temp = format_temperature(point.temp, kwargs) - while curr <= point.time: - curr += datetime.timedelta(minutes=1) - if curr < point.time: - temps.append(None) - else: - temps.append(temp) - have_temps = True - - if not have_temps: - raise ChartError("Not enough data") - - res = { - "series": [ - { - "data": temps, - "marker": { - "enabled": False, - }, - }, - ], - "tooltip": { - "enabled": True, - }, - "xAxis": { - "categories": ["Temperature"], - "labels": { - "enabled": False, - }, - "tickInterval": 60, - }, - "yAxis": { - "labels": { - "enabled": True, - }, - "tickInterval": 1, - }, - } - return res - - -def chart_volume_by_weekday(stats, *args, **kwargs): - """Shows a histogram of volume by day of the week. - - Syntax: - {% chart volume_by_weekday width height %} - Args: - stats - a stats object containing volume_by_day_of_week - """ - volmap = [0] * 7 - vols = stats.get("volume_by_day_of_week", {}) - if not volmap: - raise ChartError("Daily volumes unavailable") - - for weekday, volume_ml in list(vols.items()): - volmap[int(weekday)] += format_volume(volume_ml, kwargs)[0] - return _weekday_chart_common(volmap) - - -def chart_sessions_by_weekday(stats, *args, **kwargs): - data = stats.get("volume_by_day_of_week", {}) - weekdays = [0] * 7 - for weekday, volume_ml in list(data.items()): - weekdays[int(weekday)] += format_volume(volume_ml, kwargs)[0] - return _weekday_chart_common(weekdays) - - -def chart_sessions_by_volume(stats, *args, **kwargs): - buckets = [0] * 6 - labels = ["<1", "1.0-1.9", "2.0-2.9", "3.0-3.9", "4.0-4.9", "5+"] - volmap = stats.get("volume_by_session", {}) - for session_volume in list(volmap.values()): - volume = round(format_volume(session_volume, kwargs)[0], 1) - intval = int(volume) - if intval >= len(buckets): - buckets[-1] += 1 - else: - buckets[intval] += 1 - - res = { - "xAxis": { - "categories": labels, - }, - "series": [ - {"data": buckets}, - ], - "yAxis": { - "min": 0, - }, - "chart": { - "defaultSeriesType": "column", - }, - } - return res - - -def chart_users_by_volume(stats, *args, **kwargs): - vols = stats.get("volume_by_drinker") - if not vols: - raise ChartError("no data") - - data = [] - for username, volume in list(vols.items()): - if not username: - username = "Guest" - volume, units = format_volume(volume, kwargs) - label = f"{username} ({volume:.1f} {units})" - data.append((label, volume)) - - other_vol = 0 - data.sort(key=lambda item: item[1]) - for username, pints in data[10:]: - other_vol += pints - data = data[:10] - data.reverse() - - if other_vol: - label = "{} ({:.1f})".format("all others", other_vol) - data.append((label, other_vol)) - - res = { - "series": [ - { - "type": "pie", - "name": "Drinkers by Volume", - "data": data, - } - ], - "yAxis": { - "min": 0, - }, - "chart": { - "defaultSeriesType": "column", - }, - "tooltip": { - "enabled": False, - }, - } - return res - - -def _weekday_chart_common(vals): - labels = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] - - # convert from 0=Monday to 0=Sunday - # vals.insert(0, vals.pop(-1)) - - res = { - "xAxis": { - "categories": labels, - }, - "yAxis": { - "min": 0, - }, - "series": [ - {"data": vals}, - ], - "tooltip": { - "enabled": False, - }, - "chart": { - "defaultSeriesType": "column", - }, - } - return res diff --git a/pykeg/web/context_processors.py b/pykeg/web/context_processors.py deleted file mode 100644 index c55fb13c3..000000000 --- a/pykeg/web/context_processors.py +++ /dev/null @@ -1,51 +0,0 @@ -import urllib.error -import urllib.parse -import urllib.request - -from django.conf import settings - -from pykeg.core import models, util -from pykeg.web.kegweb.forms import LoginForm - - -def kbsite(request): - kbsite = getattr(request, "kbsite", None) - - redir = urllib.parse.urlencode({"redir": request.build_absolute_uri(request.path)}) - - sso_login_url = getattr(settings, "SSO_LOGIN_URL", "") - if sso_login_url: - sso_login_url = f"{sso_login_url}?{redir}" - - sso_logout_url = getattr(settings, "SSO_LOGOUT_URL", "") - if sso_logout_url: - sso_logout_url = f"{sso_logout_url}?{redir}" - - ret = { - "DEBUG": settings.DEBUG, - "VERSION": util.get_version(), - "HAVE_SESSIONS": False, - "KEGBOT_ENABLE_ADMIN": settings.KEGBOT_ENABLE_ADMIN, - "ENABLE_SENSING": kbsite.enable_sensing if kbsite else True, - "ENABLE_USERS": kbsite.enable_users if kbsite else True, - "GOOGLE_ANALYTICS_ID": None, - "SSO_LOGIN_URL": sso_login_url, - "SSO_LOGOUT_URL": sso_logout_url, - "CAN_INVITE": kbsite.can_invite(request.user) if kbsite else False, - "kbsite": kbsite, - "request_path": request.path, - "login_form": LoginForm(initial={"next_page": request.path}), - "guest_info": { - "name": "guest", - "image": None, - }, - "PLUGINS": getattr(request, "plugins", {}), - } - - if kbsite: - ret["HAVE_SESSIONS"] = models.DrinkingSession.objects.all().count() > 0 - ret["GOOGLE_ANALYTICS_ID"] = kbsite.google_analytics_id - ret["metric_volumes"] = kbsite.volume_display_units == "metric" - ret["temperature_display_units"] = kbsite.temperature_display_units - - return ret diff --git a/pykeg/web/decorators.py b/pykeg/web/decorators.py deleted file mode 100644 index a563d065e..000000000 --- a/pykeg/web/decorators.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.conf import settings -from django.contrib.auth import REDIRECT_FIELD_NAME -from django.contrib.auth.decorators import user_passes_test - - -def staff_member_required( - view_func, redirect_field_name=REDIRECT_FIELD_NAME, login_url=settings.KEGBOT_ADMIN_LOGIN_URL -): - """ - Clone of django.contrib.admin.views.decorators.staff_member_required that - uses `settings.KEGBOT_ADMIN_LOGIN_URL` as the default login URL. - """ - return user_passes_test( - lambda u: u.is_active and u.is_staff, - login_url=login_url, - redirect_field_name=redirect_field_name, - )(view_func) diff --git a/pykeg/web/kbregistration/__init__.py b/pykeg/web/kbregistration/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pykeg/web/kbregistration/forms.py b/pykeg/web/kbregistration/forms.py deleted file mode 100644 index 5d665819c..000000000 --- a/pykeg/web/kbregistration/forms.py +++ /dev/null @@ -1,89 +0,0 @@ -import urllib.parse - -from django import forms -from django.conf import settings -from django.contrib.auth.tokens import default_token_generator -from django.template import loader -from django.utils.encoding import force_bytes -from django.utils.http import urlsafe_base64_encode -from django.utils.translation import gettext_lazy as _ - -from pykeg.web.util import get_base_url - -try: - from django.contrib.auth import get_user_model - - User = get_user_model() -except ImportError: - from django.contrib.auth.models import User - -from pykeg.core import models - - -class KegbotRegistrationForm(forms.ModelForm): - class Meta: - model = models.User - fields = ("email", "username") - - password1 = forms.CharField(widget=forms.PasswordInput, label=_("Password")) - password2 = forms.CharField(widget=forms.PasswordInput, label=_("Password (again)")) - - def clean(self): - super().clean() - if "password1" in self.cleaned_data and "password2" in self.cleaned_data: - if self.cleaned_data["password1"] != self.cleaned_data["password2"]: - raise forms.ValidationError(_("The two password fields didn't match.")) - return self.cleaned_data - - -class PasswordResetForm(forms.Form): - email = forms.EmailField(label=_("Email"), max_length=254) - - def save( - self, - domain_override=None, - subject_template_name="registration/password_reset_subject.txt", - email_template_name="registration/password_reset_email.html", - use_https=False, - token_generator=default_token_generator, - from_email=None, - request=None, - html_email_template_name=None, - extra_email_context=None, - ): - """ - Generates a one-use only link for resetting password and sends to the - user. - """ - from django.core.mail import send_mail - - email = self.cleaned_data["email"] - active_users = User._default_manager.filter(email__iexact=email, is_active=True) - for user in active_users: - # Make sure that no email is sent to a user that actually has - # a password marked as unusable - if not user.has_usable_password(): - continue - from_email = settings.DEFAULT_FROM_EMAIL or from_email - - base_url = get_base_url() - parsed = urllib.parse.urlparse(base_url) - domain = parsed.netloc - protocol = parsed.scheme - - kbsite = models.KegbotSite.get() - site_name = kbsite.title - c = { - "email": user.email, - "site_name": site_name, - "uid": urlsafe_base64_encode(force_bytes(user.pk)), - "user": user, - "token": token_generator.make_token(user), - "domain": domain, - "protocol": protocol, - } - subject = loader.render_to_string(subject_template_name, c) - # Email subject *must not* contain newlines - subject = "".join(subject.splitlines()) - email = loader.render_to_string(email_template_name, c) - send_mail(subject, email, from_email, [user.email]) diff --git a/pykeg/web/kbregistration/registration_test.py b/pykeg/web/kbregistration/registration_test.py deleted file mode 100644 index f31bf61c1..000000000 --- a/pykeg/web/kbregistration/registration_test.py +++ /dev/null @@ -1,41 +0,0 @@ -"""Unittests for registration functions.""" - -from django.core import mail -from django.test import TestCase -from django.test.utils import override_settings - -from pykeg.core import defaults -from pykeg.core import models as core_models - - -class ForgotPasswordTest(TestCase): - def setUp(self): - defaults.set_defaults(set_is_setup=True) - - self.user = core_models.User.objects.create( - username="notification_user", email="test@example.com" - ) - - # Password reset requires a usable password. - self.user.set_password("1234") - self.user.save() - - @override_settings(EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend") - @override_settings(DEFAULT_FROM_EMAIL="test-from@example") - def test_notifications(self): - response = self.client.get("/accounts/password/reset/") - self.assertContains(response, "Reset Password", status_code=200) - self.assertEqual(0, len(mail.outbox)) - - response = self.client.post( - "/accounts/password/reset/", data={"email": "test@example.com"}, follow=True - ) - self.assertContains(response, "E-Mail Sent", status_code=200) - self.assertEqual(1, len(mail.outbox)) - - msg = mail.outbox[0] - - # TODO(mikey): Customize subject with `kbsite.title` - self.assertEqual("Password reset", msg.subject) - self.assertEqual(["test@example.com"], msg.to) - self.assertEqual("test-from@example", msg.from_email) diff --git a/pykeg/web/kbregistration/urls.py b/pykeg/web/kbregistration/urls.py deleted file mode 100644 index 56aee4d9b..000000000 --- a/pykeg/web/kbregistration/urls.py +++ /dev/null @@ -1,36 +0,0 @@ -from django.contrib.auth.views import ( - PasswordChangeDoneView, - PasswordChangeView, - PasswordResetCompleteView, - PasswordResetConfirmView, - PasswordResetDoneView, - PasswordResetView, -) -from django.urls import include, path - -from pykeg.web.kbregistration import views -from pykeg.web.kbregistration.forms import PasswordResetForm - -urlpatterns = [ - path("register/", views.register, name="registration_register"), - path("password/change/", PasswordChangeView.as_view(), name="password_change"), - path("password/change/done/", PasswordChangeDoneView.as_view(), name="password_change_done"), - path( - "password/reset/", - PasswordResetView.as_view(), - kwargs={"password_reset_form": PasswordResetForm}, - name="password_reset", - ), - path("password/reset/done/", PasswordResetDoneView.as_view(), name="password_reset_done"), - path( - "password/reset/complete/", - PasswordResetCompleteView.as_view(), - name="password_reset_complete", - ), - path( - "password/reset/confirm/-/", - PasswordResetConfirmView.as_view(), - name="password_reset_confirm", - ), - path("", include("django.contrib.auth.urls")), -] diff --git a/pykeg/web/kbregistration/views.py b/pykeg/web/kbregistration/views.py deleted file mode 100644 index 100d98738..000000000 --- a/pykeg/web/kbregistration/views.py +++ /dev/null @@ -1,61 +0,0 @@ -from django.contrib.auth import authenticate, login -from django.shortcuts import redirect, render - -from pykeg.core import models -from pykeg.web.kbregistration.forms import KegbotRegistrationForm - -"""Kegbot-aware registration views.""" - - -def register(request): - context = {} - form = KegbotRegistrationForm() - - # Check if we need an invitation before processing the request further. - invite = None - if request.kbsite.registration_mode != "public": - invite_code = None - if "invite_code" in request.GET: - invite_code = request.GET["invite_code"] - request.session["invite_code"] = invite_code - else: - invite_code = request.session.get("invite_code", None) - - if not invite_code: - r = render(request, "registration/invitation_required.html", context=context) - r.status_code = 401 - return r - - try: - invite = models.Invitation.objects.get(invite_code=invite_code) - except models.Invitation.DoesNotExist: - pass - - if not invite or invite.is_expired(): - r = render(request, "registration/invitation_expired.html", context=context) - r.status_code = 401 - return r - - if request.method == "POST": - form = KegbotRegistrationForm(request.POST) - if form.is_valid(): - username = form.cleaned_data["username"] - email = form.cleaned_data["email"] - password = form.cleaned_data.get("password1") - - models.User.create_new_user(username=username, email=email, password=password) - - if invite: - invite.delete() - if "invite_code" in request.session: - del request.session["invite_code"] - - if password: - new_user = authenticate(username=username, password=password) - login(request, new_user) - return redirect("kb-account-main") - - return render(request, "registration/registration_complete.html", context=context) - - context["form"] = form - return render(request, "registration/registration_form.html", context=context) diff --git a/pykeg/web/kegweb/kbstorage.py b/pykeg/web/kbstorage.py similarity index 100% rename from pykeg/web/kegweb/kbstorage.py rename to pykeg/web/kbstorage.py diff --git a/pykeg/web/kegadmin/__init__.py b/pykeg/web/kegadmin/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pykeg/web/kegadmin/forms.py b/pykeg/web/kegadmin/forms.py deleted file mode 100644 index 11a13fb00..000000000 --- a/pykeg/web/kegadmin/forms.py +++ /dev/null @@ -1,819 +0,0 @@ -from crispy_forms.bootstrap import FormActions -from crispy_forms.helper import FormHelper -from crispy_forms.layout import HTML, Field, Layout, Submit -from django import forms -from django.contrib.humanize.templatetags.humanize import naturaltime - -from pykeg.core import keg_sizes, models -from pykeg.util import units - -ALL_TAPS = models.KegTap.objects.all() -ALL_KEGS = models.Keg.objects.all() -ALL_METERS = models.FlowMeter.objects.all() -ALL_TOGGLES = models.FlowToggle.objects.all() -ALL_THERMOS = models.ThermoSensor.objects.all() - - -class ChangeKegForm(forms.Form): - keg_size = forms.ChoiceField( - choices=keg_sizes.CHOICES, initial=keg_sizes.HALF_BARREL, required=True - ) - - initial_volume = forms.FloatField( - label="Initial Volume", initial=0.0, required=False, help_text="Keg's Initial Volume" - ) - - beer_name = forms.CharField(required=False) # legacy - brewer_name = forms.CharField(required=False) # legacy - - beverage_name = forms.CharField(label="Beer Name", required=False) - beverage_id = forms.CharField(widget=forms.HiddenInput(), required=False) - producer_name = forms.CharField(label="Brewer", required=False) - producer_id = forms.CharField(widget=forms.HiddenInput(), required=False) - style_name = forms.CharField( - required=True, label="Style", help_text="Example: Pale Ale, Stout, etc." - ) - - helper = FormHelper() - helper.form_class = "form-horizontal beer-select" - helper.layout = Layout( - Field("beverage_name", css_class="input-xlarge"), - Field("beverage_id", type="hidden"), - Field("producer_name", css_class="input-xlarge"), - Field("producer_id", type="hidden"), - Field("style_name", css_class="input-xlarge"), - Field("keg_size", css_class="input-xlarge"), - Field("initial_volume", css_class="input-volume"), - FormActions( - Submit("submit_change_keg_form", "Activate Keg", css_class="btn-primary"), - ), - ) - - def clean_beverage_name(self): - beverage_name = self.cleaned_data.get("beverage_name") - if not beverage_name: - beverage_name = self.cleaned_data.get("beer_name") - if not beverage_name: - raise forms.ValidationError("Must specify a beverage name") - self.cleaned_data["beverage_name"] = beverage_name - return beverage_name - - def clean_producer_name(self): - producer_name = self.cleaned_data.get("producer_name") - if not producer_name: - producer_name = self.cleaned_data.get("brewer_name") - if not producer_name: - raise forms.ValidationError("Must specify a producer name") - self.cleaned_data["producer_name"] = producer_name - return producer_name - - def save(self, tap): - if not self.is_valid(): - raise ValueError("Form is not valid.") - - if tap.is_active(): - tap.end_current_keg() - - keg_size = self.cleaned_data.get("keg_size") - full_volume_ml = self.cleaned_data.get("full_volume_ml") - - if keg_size != "other": - full_volume_ml = None - else: - full_volume_ml = self.cleaned_data.get("initial_volume") - - # TODO(mikey): Support non-beer beverage types. - cd = self.cleaned_data - keg = models.Keg.start_keg( - tap, - beverage_name=cd["beverage_name"], - producer_name=cd["producer_name"], - beverage_type="beer", - style_name=cd["style_name"], - keg_type=cd["keg_size"], - full_volume_ml=full_volume_ml, - ) - - if cd.get("description"): - keg.description = cd["description"] - keg.save() - - -class EndKegForm(forms.Form): - keg = forms.ModelChoiceField(queryset=ALL_KEGS, widget=forms.HiddenInput) - - helper = FormHelper() - helper.form_class = "form-horizontal beer-select" - helper.layout = Layout( - Field("keg", type="hidden"), - FormActions( - Submit("submit_end_keg_form", "End Keg", css_class="btn-danger"), - ), - ) - - -class TapForm(forms.ModelForm): - class FlowMeterModelChoiceField(forms.ModelChoiceField): - def label_from_instance(self, meter): - if meter.tap: - return f"{meter} (connected to {meter.tap.name})" - else: - return str(meter) - - class FlowToggleModelChoiceField(forms.ModelChoiceField): - def label_from_instance(self, toggle): - if toggle.tap: - return f"{toggle} (connected to {toggle.tap.name})" - else: - return str(toggle) - - class ThermoSensorModelChoiceField(forms.ModelChoiceField): - def label_from_instance(self, sensor): - last_log = sensor.LastLog() - if last_log: - return f"{sensor} (Last report: {naturaltime(last_log.time)})" - else: - return str(sensor) - - meter = FlowMeterModelChoiceField( - queryset=ALL_METERS, - required=False, - empty_label="Not connected.", - help_text="Tap is routed thorough this flow meter. If unset, reporting is disabled.", - ) - - toggle = FlowToggleModelChoiceField( - queryset=ALL_TOGGLES, - required=False, - empty_label="Not connected.", - help_text="Optional flow toggle (usually a relay/valve) connected to this tap.", - ) - - temperature_sensor = ThermoSensorModelChoiceField( - queryset=ALL_THERMOS, - required=False, - empty_label="No sensor.", - help_text="Optional sensor monitoring the temperature at this tap.", - ) - - class Meta: - model = models.KegTap - fields = ("name", "notes", "temperature_sensor", "sort_order") - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - if self.instance: - self.fields["meter"].initial = self.instance.current_meter() - self.fields["toggle"].initial = self.instance.current_toggle() - self.fields["temperature_sensor"].initial = self.instance.temperature_sensor - - def save(self, commit=True): - if not commit: - raise ValueError("TapForm does not support commit=False") - tap = super().save(commit=True) - tap.connect_meter(self.cleaned_data["meter"]) - tap.connect_toggle(self.cleaned_data["toggle"]) - return tap - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("name", css_class="input-xlarge"), - Field("meter", css_class="input-xlarge"), - Field("toggle", css_class="input-xlarge"), - Field("temperature_sensor", css_class="input-xlarge"), - Field("sort_order", css_class="input-xlarge"), - Field("notes", css_class="input-block-level", rows="3"), - FormActions( - Submit("submit_tap_form", "Save Settings", css_class="btn-success"), - ), - ) - - -class DeleteTapForm(forms.Form): - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - FormActions( - Submit("submit_delete_tap_form", "Delete Tap", css_class="btn-danger"), - ) - ) - - -class KegForm(forms.Form): - keg_size = forms.ChoiceField( - choices=keg_sizes.CHOICES, initial=keg_sizes.HALF_BARREL, required=True - ) - - initial_volume = forms.FloatField( - label="Initial Volume", initial=0.0, required=False, help_text="Keg's Initial Volume" - ) - - beer_name = forms.CharField(required=False) # legacy - brewer_name = forms.CharField(required=False) # legacy - - beverage_name = forms.CharField(label="Beer Name", required=False) - beverage_id = forms.CharField(widget=forms.HiddenInput(), required=False) - producer_name = forms.CharField(label="Brewer", required=False) - producer_id = forms.CharField(widget=forms.HiddenInput(), required=False) - style_name = forms.CharField( - required=True, label="Style", help_text="Example: Pale Ale, Stout, etc." - ) - - description = forms.CharField( - max_length=256, - label="Description", - widget=forms.Textarea(), - required=False, - help_text="Optional user-visible description of the keg.", - ) - notes = forms.CharField( - label="Notes", - required=False, - widget=forms.Textarea(), - help_text="Optional private notes about this keg, viewable only by admins.", - ) - connect_to = forms.ModelChoiceField( - queryset=ALL_TAPS, - label="Connect To", - required=False, - help_text="If selected, immediately activates the keg on this tap. " - "(Any existing keg will be ended.)", - ) - - helper = FormHelper() - helper.form_class = "form-horizontal beer-select" - helper.layout = Layout( - Field("beverage_name", css_class="input-xlarge"), - Field("beverage_id", type="hidden"), - Field("producer_name", css_class="input-xlarge"), - Field("producer_id", type="hidden"), - Field("style_name", css_class="input-xlarge"), - Field("keg_size", css_class="input-xlarge"), - Field("initial_volume", css_class="input-volume"), - Field("description", css_class="input-block-level", rows="3"), - Field("notes", css_class="input-block-level", rows="3"), - Field("connect_to", css_class="input-block-level"), - FormActions( - Submit("submit_add_keg", "Save", css_class="btn-primary"), - ), - ) - - def clean_beverage_name(self): - beverage_name = self.cleaned_data.get("beverage_name") - if not beverage_name: - beverage_name = self.cleaned_data.get("beer_name") - if not beverage_name: - raise forms.ValidationError("Must specify a beverage name") - self.cleaned_data["beverage_name"] = beverage_name - return beverage_name - - def clean_producer_name(self): - producer_name = self.cleaned_data.get("producer_name") - if not producer_name: - producer_name = self.cleaned_data.get("brewer_name") - if not producer_name: - raise forms.ValidationError("Must specify a producer name") - self.cleaned_data["producer_name"] = producer_name - return producer_name - - def save(self): - if not self.is_valid(): - raise ValueError("Form is not valid.") - keg_size = self.cleaned_data.get("keg_size") - if keg_size != "other": - full_volume_ml = None - else: - full_volume_ml = self.cleaned_data.get("initial_volume") - - # TODO(mikey): Support non-beer beverage types. - cd = self.cleaned_data - keg = models.Keg.create_keg( - beverage_name=cd["beverage_name"], - producer_name=cd["producer_name"], - beverage_type="beer", - style_name=cd["style_name"], - keg_type=cd["keg_size"], - full_volume_ml=full_volume_ml, - notes=cd["notes"], - description=cd["description"], - ) - - tap = cd["connect_to"] - if tap: - if tap.is_active(): - tap.end_current_keg() - tap.attach_keg(keg) - - return keg - - -class EditKegForm(forms.ModelForm): - class Meta: - model = models.Keg - fields = ( - "type", - "keg_type", - "full_volume_ml", - "spilled_ml", - "description", - "notes", - ) - labels = { - "full_volume_ml": ("Full/Initial Volume"), - "spilled_ml": ("Spilled Volume"), - } - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("type", css_class="input-block-level", rows="3"), - Field("keg_type", css_class="input-block-level", rows="3"), - Field("full_volume_ml", css_class="input-volume"), - Field("spilled_ml", css_class="input-volume"), - Field("description", css_class="input-block-level", rows="3"), - Field("notes", css_class="input-block-level", rows="3"), - FormActions( - Submit("submit_edit_keg", "Save Keg", css_class="btn-primary"), - HTML( - """ - Permanently Delete""" - ), - ), - ) - - -class GeneralSiteSettingsForm(forms.ModelForm): - class Meta: - model = models.KegbotSite - fields = ( - "title", - "enable_sensing", - "enable_users", - "privacy", - "registration_mode", - ) - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("title", css_class="input-xlarge"), - Field("enable_sensing", css_class="input-xlarge"), - Field("enable_users", css_class="input-xlarge"), - Field("privacy", css_class="input-xlarge"), - Field("registration_mode", css_class="input-xlarge"), - FormActions( - Submit("submit", "Save Settings", css_class="btn-primary"), - ), - ) - - -class LocationSiteSettingsForm(forms.ModelForm): - guest_image = forms.ImageField(required=False, help_text='Custom image for the "guest" user.') - - class Meta: - model = models.KegbotSite - fields = ( - "volume_display_units", - "temperature_display_units", - "timezone", - ) - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("volume_display_units", css_class="input-xlarge"), - Field("temperature_display_units", css_class="input-xlarge"), - Field("timezone"), - FormActions( - Submit("submit", "Save Settings", css_class="btn-primary"), - ), - ) - - -class AdvancedSiteSettingsForm(forms.ModelForm): - class Meta: - model = models.KegbotSite - fields = ( - "session_timeout_minutes", - "google_analytics_id", - "email_config", - ) - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("session_timeout_minutes"), - Field("google_analytics_id"), - Field("email_config"), - FormActions( - Submit("submit", "Save Settings", css_class="btn-primary"), - ), - ) - - -class BeverageForm(forms.ModelForm): - class Meta: - model = models.Beverage - fields = ( - "name", - "style", - "producer", - "vintage_year", - "abv_percent", - "original_gravity", - "specific_gravity", - "ibu", - "srm", - "color_hex", - "star_rating", - "untappd_beer_id", - "description", - ) - - new_image = forms.ImageField(required=False, help_text="Set/replace image for this beer type.") - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("name", css_class="input-xlarge"), - Field("style", css_class="input-xlarge"), - Field("producer"), - Field("vintage_year"), - Field("abv_percent"), - Field("original_gravity"), - Field("specific_gravity"), - Field("ibu"), - Field("srm"), - Field("color_hex"), - Field("star_rating"), - Field("untappd_beer_id"), - Field("description"), - Field("new_image"), - FormActions( - Submit("submit", "Save", css_class="btn-primary"), - ), - ) - - -class BeverageProducerForm(forms.ModelForm): - # Django 6.0 changes the default scheme to https; set it explicitly to - # silence the transition warning. - url = forms.URLField(assume_scheme="https", required=False, help_text="Brewer's home page") - - class Meta: - model = models.BeverageProducer - fields = ( - "name", - "country", - "origin_state", - "is_homebrew", - "url", - "description", - ) - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("name", css_class="input-xlarge"), - Field("country", css_class="input-xlarge"), - Field("origin_state", css_class="input-xlarge"), - Field("origin_city", css_class="input-xlarge"), - Field("is_homebrew"), - Field("url"), - Field("description"), - FormActions( - Submit("submit", "Save", css_class="btn-primary"), - ), - ) - - -class FindUserForm(forms.Form): - username = forms.CharField() - - -class UserForm(forms.ModelForm): - class Meta: - model = models.User - fields = ( - "username", - "email", - "password", - "is_staff", - ) - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("username", css_class="input-xlarge"), - Field("email", css_class="input-xlarge"), - "password", - "is_staff", - FormActions( - Submit("submit", "Save", css_class="btn-primary"), - ), - ) - - -class UserProfileForm(forms.ModelForm): - class Meta: - model = models.User - fields = ("username", "display_name", "email") - - new_mugshot = forms.ImageField(required=False) - - def save(self, *args, **kwargs): - user = super().save(*args, **kwargs) - image = self.cleaned_data.get("new_mugshot") - if image: - pic = models.Picture.objects.create(user=user) - pic.image.save(image.name, image) - pic.save() - user.mugshot = pic - user.save() - return user - - -class TokenForm(forms.ModelForm): - class Meta: - model = models.AuthenticationToken - fields = ( - "nice_name", - "enabled", - ) - - username = forms.CharField(required=False) - - helper = FormHelper() - helper.form_class = "form-horizontal user-select" - helper.layout = Layout( - Field("username", css_class="input-xlarge"), - Field("nice_name", css_class="input-xlarge"), - "enabled", - FormActions( - Submit("submit", "Save", css_class="btn-primary"), - ), - ) - - def clean_username(self): - username = self.cleaned_data["username"] - if username == "": - self.cleaned_data["user"] = None - return - try: - self.cleaned_data["user"] = models.User.objects.get(username=username) - except models.User.DoesNotExist: - raise forms.ValidationError( - "Invalid username; use a complete user name or leave blank." - ) - return username - - -class DeleteTokenForm(forms.Form): - helper = FormHelper() - helper.form_class = "form-horizontal user-select" - helper.layout = Layout( - FormActions( - Submit("delete_token", "Delete Token", css_class="btn-danger"), - ) - ) - - -class AddTokenForm(forms.ModelForm): - class Meta: - model = models.AuthenticationToken - fields = ( - "auth_device", - "token_value", - "enabled", - ) - - CHOICES = ( - ("core.rfid", "RFID"), - ("core.onewire", "OneWire/iButton"), - ("nfc", "NFC"), - ) - auth_device = forms.ChoiceField(choices=CHOICES) - username = forms.CharField(required=False) - - helper = FormHelper() - helper.form_class = "form-horizontal user-select" - helper.layout = Layout( - Field("auth_device", css_class="input-xlarge"), - Field("token_value", css_class="input-xlarge"), - Field("username", css_class="input-xlarge"), - "enabled", - FormActions( - Submit("submit", "Save", css_class="btn-primary"), - ), - ) - - def clean_username(self): - username = self.cleaned_data["username"] - if username == "": - self.cleaned_data["user"] = None - return - try: - self.cleaned_data["user"] = models.User.objects.get(username=username) - except models.User.DoesNotExist: - raise forms.ValidationError( - "Invalid username; use a complete user name or leave blank." - ) - return username - - -class CancelDrinkForm(forms.Form): - pass - - -class DeleteDrinksForm(forms.Form): - helper = FormHelper() - helper.form_class = "form-horizontal user-select" - helper.layout = Layout( - HTML( - """ - - - - - - - - - - - -{% load kegweblib %} -{% for drink in drinks %} - - - - - - - - -{% endfor %} - -
SelectDrinkDateVolumeUserKeg
-
- Edit   - {{ drink.id }} -
{{ drink.time }}{% volume drink.volume_ml %}{{ drink.user }}{{ drink.keg }}
""" - ), - FormActions( - Submit("delete_drinks", "Delete Drinks", css_class="btn-danger"), - ), - ) - - -class ReassignDrinkForm(forms.Form): - username = forms.CharField(required=True) - - def clean_username(self): - username = self.cleaned_data["username"] - if username == "": - self.cleaned_data["user"] = None - return - try: - self.cleaned_data["user"] = models.User.objects.get(username=username) - except models.User.DoesNotExist: - raise forms.ValidationError( - "Invalid username; use a complete user name or leave blank." - ) - return username - - -class ChangeDrinkVolumeForm(forms.Form): - UNIT_CHOICES = (("mL", "mL"), ("oz", "oz")) - units = forms.ChoiceField(required=True, choices=UNIT_CHOICES) - volume = forms.FloatField(required=True, min_value=0) - - def clean_volume(self): - volume = self.cleaned_data["volume"] - if self.cleaned_data["units"] == "oz": - self.cleaned_data["volume_ml"] = float( - units.Quantity(volume, units.UNITS.Ounce).InMilliliters() - ) - else: - self.cleaned_data["volume_ml"] = volume - return volume - - -class RecordDrinkForm(forms.Form): - units = forms.ChoiceField(required=True, choices=ChangeDrinkVolumeForm.UNIT_CHOICES) - volume = forms.FloatField(required=True, min_value=0) - username = forms.CharField(required=False) - - def clean_username(self): - username = self.cleaned_data["username"] - if username == "": - self.cleaned_data["user"] = None - return - try: - self.cleaned_data["user"] = models.User.objects.get(username=username) - except models.User.DoesNotExist: - raise forms.ValidationError( - "Invalid username; use a complete user name or leave blank." - ) - return username - - def clean_volume(self): - volume = self.cleaned_data["volume"] - if self.cleaned_data["units"] == "oz": - self.cleaned_data["volume_ml"] = float( - units.Quantity(volume, units.UNITS.Ounce).InMilliliters() - ) - else: - self.cleaned_data["volume_ml"] = volume - return volume - - -class TestEmailForm(forms.Form): - address = forms.CharField(required=False) - - def clean_address(self): - address = self.cleaned_data["address"] - if address == "": - self.cleaned_data["address"] = None - return - return address - - -class NewFlowMeterForm(forms.ModelForm): - class Meta: - model = models.FlowMeter - fields = ("port_name", "ticks_per_ml", "controller") - - -class UpdateFlowMeterForm(forms.ModelForm): - class Meta: - model = models.FlowMeter - fields = ("ticks_per_ml",) - - -class AddFlowMeterForm(forms.ModelForm): - class Meta: - model = models.FlowMeter - fields = ("port_name", "ticks_per_ml", "controller") - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("port_name"), - Field("ticks_per_ml"), - Field("controller", type="hidden"), - FormActions( - Submit("add_flow_meter", "Add Flow Meter", css_class="btn-primary"), - ), - ) - - -class FlowToggleForm(forms.ModelForm): - class Meta: - model = models.FlowToggle - fields = ("port_name", "controller") - - -class AddFlowToggleForm(forms.ModelForm): - class Meta: - model = models.FlowToggle - fields = ("port_name", "controller") - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("port_name"), - Field("controller", type="hidden"), - FormActions( - Submit("add_flow_toggle", "Add Flow Toggle", css_class="btn-primary"), - ), - ) - - -class DeleteControllerForm(forms.Form): - helper = FormHelper() - helper.form_class = "form-horizontal user-select" - helper.layout = Layout( - FormActions( - Submit("delete_controller", "Delete Controller", css_class="btn-danger"), - ) - ) - - -class ControllerForm(forms.ModelForm): - class Meta: - model = models.Controller - fields = ("name", "model_name", "serial_number") - - helper = FormHelper() - helper.form_class = "form-horizontal" - helper.layout = Layout( - Field("name", css_class="input-xlarge"), - Field("model_name", css_class="input-xlarge"), - Field("serial_number", css_class="input-xlarge"), - FormActions( - Submit("submit_controller_form", "Save Controller", css_class="btn-success"), - ), - ) diff --git a/pykeg/web/kegadmin/templates/kegadmin/add_controller.html b/pykeg/web/kegadmin/templates/kegadmin/add_controller.html deleted file mode 100644 index 00c17d5ce..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/add_controller.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Add Controller | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Add Controller{% endblock %} - -{% block kegadmin-main %} -{% crispy form %} -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/add_tap.html b/pykeg/web/kegadmin/templates/kegadmin/add_tap.html deleted file mode 100644 index 20e40decc..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/add_tap.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Add Tap | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Add Tap{% endblock %} - -{% block kegadmin-main %} -{% crispy form %} -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/add_token.html b/pykeg/web/kegadmin/templates/kegadmin/add_token.html deleted file mode 100644 index 8618b07b2..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/add_token.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Add Token | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Add Token{% endblock %} - -{% block kegadmin-main %} -{% crispy form %} -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/add_user.html b/pykeg/web/kegadmin/templates/kegadmin/add_user.html deleted file mode 100644 index adc093e6d..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/add_user.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Add User | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Add User{% endblock %} - -{% block kegadmin-main %} -{% crispy form %} -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/backup_export.html b/pykeg/web/kegadmin/templates/kegadmin/backup_export.html deleted file mode 100644 index fe2a4abb5..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/backup_export.html +++ /dev/null @@ -1,60 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Backup/Export | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Backup/Export{% endblock %} - -{% block kegadmin-main %} - -

Create a Backup

-

- Experimental. Click "Export" to generate a zipfile containing all - media and database records. -

-
{% csrf_token %} - -
- -{% if backups %} -

Saved Backups

- - - - - - - - - - - - -{% for backup in backups %} - - - - - - - - -{% endfor %} -
ServerVersionSizeCreatedDownloadDelete
{{ backup.server_name }}{{ backup.server_version }} - {{ backup.size_bytes|filesizeformat }} - ({{ backup.num_tables }} tables, {{ backup.num_media_files }} media files){% timeago backup.created_time %} - - Download - - -
{% csrf_token %} - - -
-
-{% endif %} -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/base.html b/pykeg/web/kegadmin/templates/kegadmin/base.html deleted file mode 100644 index 004e62408..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/base.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block content %} - -
-
- -
- -
- {% block kegadmin-main %}{% endblock %} -
-
- -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/beer_type_add.html b/pykeg/web/kegadmin/templates/kegadmin/beer_type_add.html deleted file mode 100644 index 9ea5fe88a..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/beer_type_add.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Add Beer Type | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Add Beer Type {% endblock %} - -{% block kegadmin-main %} - -

Add Beer Type

- -{% if beer_type.picture %} -
-
-

-
-
-{% endif %} - -{% crispy form %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/beer_type_detail.html b/pykeg/web/kegadmin/templates/kegadmin/beer_type_detail.html deleted file mode 100644 index a38f7655b..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/beer_type_detail.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Edit Beer Type | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Edit Beer Type {% endblock %} - -{% block kegadmin-main %} - -

Edit Beer Type

- -{% if beer_type.picture %} -
-
-

-
-
-{% endif %} - -{% crispy form %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/beer_type_list.html b/pykeg/web/kegadmin/templates/kegadmin/beer_type_list.html deleted file mode 100644 index c12b8fab8..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/beer_type_list.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Beer Types | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Beer Types{% endblock %} - -{% block kegadmin-main %} - - - - - - - - - - -{% for beverage in beverages %} - - - - - -{% endfor %} - - - - -
NameBrewerStyle
-
- Edit   - {{ beverage.name }} -
{{ beverage.producer }}{{ beverage.style }}
- Add New Beer Type -
-{% include "kegweb/_pagination.html" with page=beverages %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/brewer_add.html b/pykeg/web/kegadmin/templates/kegadmin/brewer_add.html deleted file mode 100644 index dab479405..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/brewer_add.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Add Brewer | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Add Brewer {% endblock %} - -{% block kegadmin-main %} - -

Add Brewer

- -{% if brewer.picture %} -
-
-

-
-
-{% endif %} - -{% crispy form %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/brewer_detail.html b/pykeg/web/kegadmin/templates/kegadmin/brewer_detail.html deleted file mode 100644 index 77678650b..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/brewer_detail.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Edit Brewer | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Edit Brewer {% endblock %} - -{% block kegadmin-main %} - -

Edit Brewer

- -{% crispy form %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/brewer_list.html b/pykeg/web/kegadmin/templates/kegadmin/brewer_list.html deleted file mode 100644 index ec3d073ea..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/brewer_list.html +++ /dev/null @@ -1,42 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Brewers | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Brewers{% endblock %} - -{% block kegadmin-main %} - - - - - - - - - - - -{% for brewer in brewers %} - - - - - - -{% endfor %} - - - - -
NameCountryStateCity
-
- Edit   - {{ brewer.name }} -
{{ brewer.country }}{{ brewer.origin_state }}{{ brewer.origin_city }}
- Add New Brewer -
- -{% include "kegweb/_pagination.html" with page=brewers %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/bugreport.html b/pykeg/web/kegadmin/templates/kegadmin/bugreport.html deleted file mode 100644 index 9e5650b1b..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/bugreport.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Bugreport | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Bugreport{% endblock %} - -{% block kegadmin-main %} - -

Bugreport

- -

- Copy and paste the system information below. Warning: Bugreport - output can contain sensitive information. -

- - - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/controller_detail.html b/pykeg/web/kegadmin/templates/kegadmin/controller_detail.html deleted file mode 100644 index 8ec54bb0a..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/controller_detail.html +++ /dev/null @@ -1,223 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Edit Controller: {{ controller.name }} | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Edit Controller: {{ controller.name }}{% endblock %} - -{% block kegadmin-main %} - - - - - - - - -

{{ controller.name }} {{ controller.type }}

- - -
-
- -
-
- {% if controller.serial_number %} - - - - - - - -
Serial Number{{ controller.serial_number }}
- {% else %} -
This controller does not have a serial number associated
- {% endif %} - -
- -
- - - {% if controller.meters.all %} - - - - {% for meter in controller.meters.all %} - - - - - - {% endfor %} - {% endif %} - - - - -
NameTicks per mL
- Edit   - {{ meter }} - - {{ meter.ticks_per_ml }} -
- Add Flow Meter -
-
- -
- - - {% if controller.toggles.all %} - - - {% for toggle in controller.toggles.all %} - - - - - {% endfor %} - {% endif %} - - - - -
Name
- Edit   - {{ toggle }} -
- Add Flow Toggle -
-
- -
- -
-
- -{% endblock %} - -{% block kb-extrajs %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/controller_list.html b/pykeg/web/kegadmin/templates/kegadmin/controller_list.html deleted file mode 100644 index 65e522a43..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/controller_list.html +++ /dev/null @@ -1,42 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Controllers | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Controllers{% endblock %} - -{% block kegadmin-main %} - - - - - - - - - -{% for controller in controllers %} - - - - - -{% endfor %} - - - - -
ControllerMetersToggles
-
- Edit   - {{ controller.name }} -
- {{ controller.meters.count }} - - {{ controller.toggles.count }} -
- Add Controller -
- -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/dashboard.html b/pykeg/web/kegadmin/templates/kegadmin/dashboard.html deleted file mode 100644 index 501873864..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/dashboard.html +++ /dev/null @@ -1,45 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin{% endblock %} - -{% block kegadmin-main %} -
    -{% badge num_users "User" do_pluralize=True %} -{% badge num_new_users "New User" do_pluralize=True %} -
- -{% if redis_error %} -
-

Redis Connection Error

-

- Connection to the Redis server failed; some features of Kegbot may - not work correctly until it is fixed. -

-

- Error message was: {{ redis_error }} -

-
-{% endif %} - -{% if DEBUG %} -
-

Warning: Debug Mode

- Kegbot Server is running in DEBUG mode. For - performance and security reasons, you should disable DEBUG mode by - setting DEBUG = False in {{ localsettings_path }}. -
-{% endif %} - -{% if not email_configured %} -
-

Warning: E-Mail Configuration Problem

- E-mail is not properly configured; no mails will be sent. Please - read the docs - for more information. -
-{% endif %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/drink_list.html b/pykeg/web/kegadmin/templates/kegadmin/drink_list.html deleted file mode 100644 index 801d7acb6..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/drink_list.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Drinks | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Drinks{% endblock %} - -{% block kegadmin-main %} - -{% crispy delete_drinks_form %} -{% include "kegweb/_pagination.html" with page=drinks %} - -{% endblock %} - diff --git a/pykeg/web/kegadmin/templates/kegadmin/email.html b/pykeg/web/kegadmin/templates/kegadmin/email.html deleted file mode 100644 index 4cd29d513..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/email.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: E-Mail | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: E-Mail{% endblock %} - -{% block kegadmin-main %} -{% if not email_configured %} -
-

Warning!

- E-mail is not properly configured; no mails will be sent. Please - read the docs - for more information. -
-{% else %} -

Test E-mail Configuration

-

- Use this panel to test your server's e-mail configuration. -

-
{% csrf_token %} - - -
-

- Please check your inbox at the address above after sending a test E-mail. - Be sure to check your spam folder, and add the sender to your whitelist if necessary. -

-{% endif %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/includes/extrajs.html b/pykeg/web/kegadmin/templates/kegadmin/includes/extrajs.html deleted file mode 100644 index b0f240f69..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/includes/extrajs.html +++ /dev/null @@ -1,63 +0,0 @@ - \ No newline at end of file diff --git a/pykeg/web/kegadmin/templates/kegadmin/includes/keg-status-label.html b/pykeg/web/kegadmin/templates/kegadmin/includes/keg-status-label.html deleted file mode 100644 index 15a5339f1..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/includes/keg-status-label.html +++ /dev/null @@ -1,9 +0,0 @@ -{% if keg.is_available %} - Untapped -{% elif keg.is_on_tap %} - Online -{% elif keg.is_finished %} - Kicked -{% else %} - Unknown -{% endif %} \ No newline at end of file diff --git a/pykeg/web/kegadmin/templates/kegadmin/includes/keg_nav.html b/pykeg/web/kegadmin/templates/kegadmin/includes/keg_nav.html deleted file mode 100644 index aa07ae6fb..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/includes/keg_nav.html +++ /dev/null @@ -1,9 +0,0 @@ -{% load kegweblib %} - - \ No newline at end of file diff --git a/pykeg/web/kegadmin/templates/kegadmin/includes/user-status-label.html b/pykeg/web/kegadmin/templates/kegadmin/includes/user-status-label.html deleted file mode 100644 index 690140271..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/includes/user-status-label.html +++ /dev/null @@ -1,3 +0,0 @@ -{% if user.is_active %}Active{% else %}Disabled{% endif %} -{% if user.is_staff %}Staff{% endif %} -{% if user.is_superuser %}Superuser{% endif %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/index.html b/pykeg/web/kegadmin/templates/kegadmin/index.html deleted file mode 100644 index aba344ed2..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/index.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: General Settings | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: General Settings{% endblock %} - -{% block kegadmin-main %} - {% crispy settings_form %} -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/keg_add.html b/pykeg/web/kegadmin/templates/kegadmin/keg_add.html deleted file mode 100644 index 369b7566d..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/keg_add.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Add Keg | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Add Keg {% endblock %} - -{% block kegadmin-main %} - -{% include 'kegadmin/includes/keg_nav.html' %} - -{% crispy form %} - -{% endblock %} - -{% block kb-extrajs %} - -{% endblock %} \ No newline at end of file diff --git a/pykeg/web/kegadmin/templates/kegadmin/keg_detail.html b/pykeg/web/kegadmin/templates/kegadmin/keg_detail.html deleted file mode 100644 index d1246173a..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/keg_detail.html +++ /dev/null @@ -1,139 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Edit Keg | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Edit Keg {% endblock %} - -{% block kegadmin-main %} - -

Keg #{{keg.id}}: {{keg.type.name}} -{% include 'kegadmin/includes/keg-status-label.html' %} -

- -
-
- -
- - -
- {{ keg.percent_full|floatformat:0 }}% full -
- -
- -
- - - - {% if keg.is_on_tap or keg.is_finished %} - - - - - {% endif %} - {% if not keg.is_on_tap and keg.is_finished %} - - - - - {% endif %} - - - - - - - - - - - - - - - - - -
Started{{keg.start_time}}
End Time{{keg.end_time}}
Size{{ keg.keg_type_description }}
Initial Volume{% volume keg.full_volume_ml %}
Served Volume{% volume keg.served_volume_ml %}
Remaining Volume{% volume remaining %}
- -
- -
-
- - -
{% csrf_token %} -
- -{% if keg.is_finished %} - -
- -
- - -
- -
- This keg is marked as finished and cannot be tapped. Click Reactivate to - return the keg to active status. -
- -
- -{% else %} - -
- -
- - -
- -
- Press End Keg to mark the keg as finished. -
- -
- - -{% endif %} - -
-
- - -

Edit Keg

-{% crispy edit_form %} - - - - - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/keg_list.html b/pykeg/web/kegadmin/templates/kegadmin/keg_list.html deleted file mode 100644 index 4242d03c3..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/keg_list.html +++ /dev/null @@ -1,40 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Kegs | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Kegs{% endblock %} - -{% block kegadmin-main %} - -{% include 'kegadmin/includes/keg_nav.html' %} - -{% for keg in kegs %} - - {% if forloop.counter0|divisibleby:6 %} -
- {% endif %} - -
- -
-
{{ keg.type.name }}
-
-
- - {% if forloop.counter|divisibleby:6 or forloop.last %} -
- {% endif %} - -{% endfor %} - -{% include "kegweb/_pagination.html" with page=kegs %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/logs.html b/pykeg/web/kegadmin/templates/kegadmin/logs.html deleted file mode 100644 index 614300bda..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/logs.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Logs | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Logs{% endblock %} - -{% block kegadmin-main %} -{% if logs %} -

- {{ logs|length }} log{{ logs|length|pluralize }} recorded. -

- -{% for log in logs %} - {% ifchanged %} -
- - {{ log.level.upper.0 }} - {% if log.request_info %} - {{ log.request_info.method }} {{ log.request_info.request_path }}
- {% endif %} - {% endifchanged %} - {{ log.time }} ({{ log.name }}) {{ log.msg }} - - {% if log.traceback %} -
{{ log.traceback }}
- {% endif %} -{% endfor %} - -{% else %} -

- No logs are available. -

-{% endif %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/nav-items.html b/pykeg/web/kegadmin/templates/kegadmin/nav-items.html deleted file mode 100644 index e5ed971ed..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/nav-items.html +++ /dev/null @@ -1,51 +0,0 @@ -{% load kegweblib %} - - -{% if ENABLE_SENSING %} - {% navitem "kegadmin-controllers" "Controllers" %} -{% endif %} - -{% navitem "kegadmin-taps" "Taps" %} -{% navitem "kegadmin-kegs" "Keg Room" %} - -{% if ENABLE_SENSING %} - {% navitem "kegadmin-drinks" "Drinks" %} -{% endif %} -{% if ENABLE_USERS %} - {% navitem "kegadmin-users" "Users" %} - {% navitem "kegadmin-tokens" "Tokens" %} -{% endif %} - - -{% navitem "kegadmin-beverage-producers" "Brewers" %} -{% navitem "kegadmin-beverages" "Beer Types" %} - -{% if PLUGINS %} - -{% for plugin in PLUGINS.values %} - {% if plugin.get_admin_settings_view %} - {% url "kegadmin-plugin-settings" plugin_name=plugin.get_short_name as settings_url %} - {% navitem settings_url plugin.get_name %} - {% endif %} -{% endfor %} -{% endif %} - -
  • - -{% navitem "kegadmin-logs" "Logs" %} -{% navitem "kegadmin-bugreport" "Bugreport" %} -{% navitem "kegadmin-export" "Export Data" %} -{% if KEGBOT_ENABLE_ADMIN %} -
  • Database Admin »
  • -
  • Workers »
  • -{% endif %} -
  • Report a Bug »
  • diff --git a/pykeg/web/kegadmin/templates/kegadmin/tap_detail.html b/pykeg/web/kegadmin/templates/kegadmin/tap_detail.html deleted file mode 100644 index 8286c6426..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/tap_detail.html +++ /dev/null @@ -1,139 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Edit Tap: {{ tap.name }} | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Edit Tap: {{ tap.name }}{% endblock %} - -{% block kegadmin-main %} - - -
    - {% if not current_keg %} -
    - {% crispy activate_keg_form %} -
    - - {% if available_kegs %} -
    -
    {% csrf_token %} - - - -
    -
    - {% endif %} - - {% else %} -
    - - - - - - - - - - - - - -
    Keg{{ current_keg }}
    Tapped{{ current_keg.start_time }}
    Volume{% volume current_keg.remaining_volume_ml %} remaining ({{ current_keg.percent_full|floatformat:2 }}% full)
    - {% crispy end_keg_form %} -
    - -
    -
    - Manually record a drink using the form below. - You may leave the username field blank to - add an anonymous pour. -
    - -
    {% csrf_token %} -
    - {% if metric_volumes %} - - - mL - {% else %} - - - oz - {% endif %} - - -
    -
    -
    - -
    -
    - Manually record a spill using the form below. Spills are - not attributed to any user and are not saved as an event. - You may also update the keg's total spilled volume on the - keg admin page. -
    - -
    {% csrf_token %} -
    - {% if metric_volumes %} - - - mL - {% else %} - - - oz - {% endif %} - -
    -
    -
    - {% endif %} - -
    - {% crispy tap_settings_form %} -
    - -
    -
    - If you delete a tap with a keg currently attached, the keg - will be taken offline and marked as finished. -
    - {% crispy delete_tap_form %} -
    -
    - -{% endblock %} - -{% block kb-extrajs %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/tap_list.html b/pykeg/web/kegadmin/templates/kegadmin/tap_list.html deleted file mode 100644 index cc9fc1400..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/tap_list.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Taps | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Taps{% endblock %} - -{% block kegadmin-main %} - - - - - - - - - - -{% for tap in taps %} - - - - - -{% endfor %} - - - - -
    TapMeterStatus
    -
    - Edit   - {{ tap.name }} -
    - {% if tap.current_meter %} - {{ tap.current_meter }} - {% else %} - Not connected. - {% endif %} - - {% if tap.current_keg %} - Online: {{ tap.current_keg.type.name }} - {% else %} - Idle - {% endif %} -
    - Add Tap -
    - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/token_detail.html b/pykeg/web/kegadmin/templates/kegadmin/token_detail.html deleted file mode 100644 index da56aa4bd..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/token_detail.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Edit Token | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Edit Token {% endblock %} - -{% block kegadmin-main %} - - - -

    {{ token.token_value }} ({{ token.auth_device }})

    - - -
    -
    - -
    -
    - {% crispy form %} -
    -
    - -{% endblock %} - -{% block kb-extrajs %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/token_list.html b/pykeg/web/kegadmin/templates/kegadmin/token_list.html deleted file mode 100644 index caea7de9d..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/token_list.html +++ /dev/null @@ -1,44 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Users | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Users{% endblock %} - -{% block kegadmin-main %} - - - - - - - - - - - -{% for token in tokens %} - - - - - - -{% endfor %} - - - - -
    TokenAliasUserStatus
    -
    - Edit   - {{ token.get_auth_device }} {{ token.token_value }} -
    {% if token.nice_name %}{{ token.nice_name }}{% endif %}{{ token.user }} - {% if token.enabled %}Active{% else %}Disabled{% endif %} -
    - Add Token -
    -{% include "kegweb/_pagination.html" with page=tokens %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/user_detail.html b/pykeg/web/kegadmin/templates/kegadmin/user_detail.html deleted file mode 100644 index 520e512de..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/user_detail.html +++ /dev/null @@ -1,149 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Edit User: {{ edit_user.username }} | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Edit User: {{ edit_user.username }}{% endblock %} - -{% block kegadmin-main %} - -
    -
    - {% with edit_user as user %} - {% mugshot_box user %} - {% endwith %} -
    -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Username{{ edit_user.username }} (#{{edit_user.id }})
    Display Name{{ edit_user.display_name }}
    E-Mail - {{ edit_user.email }} -
    Date Joined{{ edit_user.date_joined }}
    Last Login{{ edit_user.last_login }}
    Access Level - {% with edit_user as user %} - {% include 'kegadmin/includes/user-status-label.html' %} - {% endwith %} -
    -
    - - {% if tokens %} - - {% endif %} - -
    -
    {% csrf_token %} - - {% if edit_user.is_active %} - - {% if not edit_user.is_superuser %} - - {% endif %} - {% else %} - - - {% endif %} - -
    - - {% if user.is_superuser %} -
    {% csrf_token %} - - {% if edit_user.is_staff %} - - {% if not edit_user.is_superuser %} - - {% endif %} - {% else %} - - - {% endif %} - -
    - {% endif %} -
    - - {% if user.is_superuser %} -
    -
    {% csrf_token %} - {{ profile_form.as_table }} - -
    -
    - {% endif %} -
    -
    - -{% endblock %} - -{% block kb-extrajs %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/templates/kegadmin/user_list.html b/pykeg/web/kegadmin/templates/kegadmin/user_list.html deleted file mode 100644 index b3dd47d6e..000000000 --- a/pykeg/web/kegadmin/templates/kegadmin/user_list.html +++ /dev/null @@ -1,54 +0,0 @@ -{% extends "kegadmin/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Kegbot Admin: Users | {{ block.super }}{% endblock %} -{% block pagetitle %}Kegbot Admin: Users{% endblock %} - -{% block kegadmin-main %} - -
    -
    {% csrf_token %} -
    - - -
    -
    -
    - - - - - - - - - - -{% for edit_user in users %} - - - - - -{% endfor %} - - - - -
    UserDate JoinedStatus
    -
    - Edit   - {{ edit_user.username }} -
    -
    {{ edit_user.date_joined }} - {% with edit_user as user %} - {% include 'kegadmin/includes/user-status-label.html' %} - {% endwith %} -
    - Add User -
    -{% include "kegweb/_pagination.html" with page=users %} - -{% endblock %} diff --git a/pykeg/web/kegadmin/urls.py b/pykeg/web/kegadmin/urls.py deleted file mode 100644 index 268d6767a..000000000 --- a/pykeg/web/kegadmin/urls.py +++ /dev/null @@ -1,61 +0,0 @@ -from django.urls import path - -from pykeg.plugin import util -from pykeg.web.kegadmin import views - -urlpatterns = [ - # main page - path(r"", views.dashboard, name="kegadmin-dashboard"), - path("settings/general/", views.general_settings, name="kegadmin-main"), - path("settings/location/", views.location_settings, name="kegadmin-location-settings"), - path("settings/advanced/", views.advanced_settings, name="kegadmin-advanced-settings"), - path("bugreport/", views.bugreport, name="kegadmin-bugreport"), - path("export/", views.export, name="kegadmin-export"), - path("beers/", views.beverages_list, name="kegadmin-beverages"), - path("beers/add/", views.beverage_add, name="kegadmin-add-beverage"), - path("beers//", views.beverage_detail, name="kegadmin-edit-beverage"), - path("kegs/", views.keg_list, name="kegadmin-kegs"), - path("kegs/online/", views.keg_list_online, name="kegadmin-kegs-online"), - path("kegs/available/", views.keg_list_available, name="kegadmin-kegs-available"), - path("kegs/kicked/", views.keg_list_kicked, name="kegadmin-kegs-kicked"), - path("kegs/add/", views.keg_add, name="kegadmin-add-keg"), - path("kegs//", views.keg_detail, name="kegadmin-edit-keg"), - path("brewers/", views.beverage_producer_list, name="kegadmin-beverage-producers"), - path("brewers/add/", views.beverage_producer_add, name="kegadmin-add-beverage-producer"), - path( - "brewers//", - views.beverage_producer_detail, - name="kegadmin-edit-beverage-producer", - ), - path("controllers/", views.controller_list, name="kegadmin-controllers"), - path("controllers/create/", views.add_controller, name="kegadmin-add-controller"), - path( - "controllers//", - views.controller_detail, - name="kegadmin-edit-controller", - ), - path("taps/", views.tap_list, name="kegadmin-taps"), - path("taps/create/", views.add_tap, name="kegadmin-add-tap"), - path("taps//", views.tap_detail, name="kegadmin-edit-tap"), - path("users/", views.user_list, name="kegadmin-users"), - path("users//", views.user_detail, name="kegadmin-edit-user"), - path("drinks/", views.drink_list, name="kegadmin-drinks"), - path("drinks//", views.drink_edit, name="kegadmin-edit-drink"), - path("tokens/", views.token_list, name="kegadmin-tokens"), - path("tokens/create/", views.add_token, name="kegadmin-add-token"), - path("tokens//", views.token_detail, name="kegadmin-edit-token"), - path( - "autocomplete/beverage/", - views.autocomplete_beverage, - name="kegadmin-autocomplete-beverage", - ), - path("autocomplete/user/", views.autocomplete_user, name="kegadmin-autocomplete-user"), - path("autocomplete/token/", views.autocomplete_token, name="kegadmin-autocomplete-token"), - path("plugin//", views.plugin_settings, name="kegadmin-plugin-settings"), - path("email/", views.email, name="kegadmin-email"), - path("logs/", views.logs, name="kegadmin-logs"), - path("users/create/", views.add_user, name="kegadmin-add-user"), -] - -if util.get_plugins(): - urlpatterns += util.get_admin_urls() diff --git a/pykeg/web/kegadmin/views.py b/pykeg/web/kegadmin/views.py deleted file mode 100644 index 90e4d4848..000000000 --- a/pykeg/web/kegadmin/views.py +++ /dev/null @@ -1,990 +0,0 @@ -#!/usr/bin/env python -# -import datetime -import logging -import os -import subprocess -import zipfile -from operator import itemgetter - -import redis -from django.conf import settings -from django.contrib import messages -from django.core.files.storage import default_storage -from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator -from django.db.models import Q -from django.http import Http404, HttpResponse -from django.shortcuts import get_object_or_404, redirect, render -from django.utils import timezone -from django.views.decorators.http import require_http_methods - -from pykeg.backup import backup -from pykeg.core import models, tasks -from pykeg.logging.handlers import RedisListHandler -from pykeg.util import kbjson -from pykeg.util.email import build_message -from pykeg.web.decorators import staff_member_required -from pykeg.web.kegadmin import forms - -logger = logging.getLogger(__name__) - - -@staff_member_required -def dashboard(request): - context = {} - - email_configured = request.kbsite.email_is_configured() - context["email_configured"] = email_configured - - try: - r = redis.StrictRedis.from_url(settings.KEGBOT["REDIS_URL"]) - r.ping() - except redis.RedisError as e: - context["redis_error"] = e.message if e.message else "Unknown error." - - active_users = models.User.objects.filter(is_active=True).exclude(username="guest") - context["num_users"] = len(active_users) - - recent_time = timezone.now() - datetime.timedelta(days=30) - new_users = models.User.objects.filter(date_joined__gte=recent_time).exclude(username="guest") - context["num_new_users"] = len(new_users) - - return render(request, "kegadmin/dashboard.html", context=context) - - -@staff_member_required -def general_settings(request): - context = {} - kbsite = request.kbsite - - form = forms.GeneralSiteSettingsForm(instance=kbsite) - - if request.method == "POST": - form = forms.GeneralSiteSettingsForm(request.POST, instance=kbsite) - if form.is_valid(): - form.save() - messages.success(request, "Settings were updated.") - return redirect("kegadmin-main") - context["settings_form"] = form - - return render(request, "kegadmin/index.html", context=context) - - -@staff_member_required -def location_settings(request): - context = {} - kbsite = request.kbsite - - form = forms.LocationSiteSettingsForm(instance=kbsite) - - if request.method == "POST": - form = forms.LocationSiteSettingsForm(request.POST, instance=kbsite) - if form.is_valid(): - form.save() - messages.success(request, "Settings were updated.") - return redirect("kegadmin-location-settings") - context["settings_form"] = form - - return render(request, "kegadmin/index.html", context=context) - - -@staff_member_required -def advanced_settings(request): - context = {} - kbsite = request.kbsite - - form = forms.AdvancedSiteSettingsForm(instance=kbsite) - - if request.method == "POST": - form = forms.AdvancedSiteSettingsForm(request.POST, instance=kbsite) - if form.is_valid(): - form.save() - guest_image = request.FILES.get("guest_image") - if guest_image: - pic = models.Picture.objects.create() - pic.image.save(guest_image.name, guest_image) - pic.save() - kbsite.guest_image = pic - kbsite.save() - messages.success(request, "Settings were updated.") - return redirect("kegadmin-advanced-settings") - context["settings_form"] = form - - return render(request, "kegadmin/index.html", context=context) - - -@staff_member_required -def email(request): - context = {} - kbsite = request.kbsite - - email_backend = getattr(settings, "EMAIL_BACKEND", None) - email_configured = ( - email_backend and email_backend != "django.core.mail.backends.dummy.EmailBackend" - ) - email_configured = email_configured and settings.DEFAULT_FROM_EMAIL - - if request.method == "POST": - if "send_test_email" in request.POST: - test_email_form = forms.TestEmailForm(request.POST) - if test_email_form.is_valid(): - address = test_email_form.cleaned_data.get("address") - context["site_name"] = kbsite.title - context["site_url"] = kbsite.base_url() - context["settings_url"] = context["site_url"] + "/account" - message = build_message(address, "notification/email_test.html", context) - message.send(fail_silently=True) - messages.success(request, f"E-mail successfully sent to {address}") - - context["email_configured"] = email_configured - - return render(request, "kegadmin/email.html", context=context) - - -@staff_member_required -def export(request): - context = {} - backups = [] - storage = default_storage - - if request.method == "POST": - if "package_backup" in request.POST: - tasks.build_backup.delay() - messages.success(request, "The backup is being generated; please reload in a few.") - - elif "delete_backup" in request.POST: - backup_file = os.path.normpath(os.path.basename(request.POST["backup_name"])) - backup_file = os.path.join(backup.BACKUPS_DIRNAME, backup_file) - if storage.exists(backup_file): - storage.delete(backup_file) - messages.success(request, "Backup deleted.") - else: - messages.warning(request, "Unknown backup file.") - - if storage.exists(backup.BACKUPS_DIRNAME): - subdirs, files = storage.listdir(backup.BACKUPS_DIRNAME) - for filename in files: - if filename[-3:] == "zip": - storage_filename = os.path.join(backup.BACKUPS_DIRNAME, filename) - with storage.open(storage_filename, mode="rb") as backup_file: - archive = zipfile.ZipFile(backup_file) - metadata = backup.read_metadata(archive) - metadata["size_bytes"] = storage.size(storage_filename) - metadata["url"] = storage.url(storage_filename) - metadata["backup_name"] = filename - backups.append(metadata) - - backups.sort(key=itemgetter(backup.META_CREATED_TIME), reverse=True) - context["backups"] = backups - - return render(request, "kegadmin/backup_export.html", context=context) - - -@staff_member_required -def bugreport(request): - context = {} - - error = None - try: - output = subprocess.check_output("kegbot bugreport --noinput", shell=True) - except subprocess.CalledProcessError as e: - logger.exception('Error running "kegbot bugreport" from admin console.') - error = e - - context["bugreport"] = output - context["error"] = error - - return render(request, "kegadmin/bugreport.html", context=context) - - -@staff_member_required -def controller_list(request): - context = {} - context["controllers"] = models.Controller.objects.all() - return render(request, "kegadmin/controller_list.html", context=context) - - -@staff_member_required -def add_controller(request): - context = {} - form = forms.ControllerForm() - if request.method == "POST": - form = forms.ControllerForm(request.POST) - if form.is_valid(): - form.save() - messages.success(request, "Controller created.") - return redirect("kegadmin-controllers") - context["form"] = form - return render(request, "kegadmin/add_controller.html", context=context) - - -@staff_member_required -def controller_detail(request, controller_id): - controller = get_object_or_404(models.Controller, id=controller_id) - delete_controller_form = forms.DeleteControllerForm() - add_flow_meter_form = forms.AddFlowMeterForm() - add_flow_meter_form.fields["controller"].initial = controller_id - add_flow_toggle_form = forms.AddFlowToggleForm() - add_flow_toggle_form.fields["controller"].initial = controller_id - context = {} - - if request.method == "POST": - if "delete_controller" in request.POST: - delete_controller_form = forms.DeleteControllerForm(request.POST) - if delete_controller_form.is_valid(): - controller.delete() - messages.success(request, "The controller was deleted.") - return redirect("kegadmin-controllers") - elif "add_flow_meter" in request.POST: - add_flow_meter_form = forms.AddFlowMeterForm(request.POST) - if add_flow_meter_form.is_valid(): - add_flow_meter_form.save() - messages.success(request, "Flow Meter added successfully.") - return redirect("kegadmin-controllers") - elif "edit_flow_meter" in request.POST: - flowmeter = models.FlowMeter.objects.filter(id=request.POST.get("flowmeter_id")) - flowmeter.update(port_name=request.POST.get("port_name")) - flowmeter.update(ticks_per_ml=request.POST.get("ticks_per_ml")) - messages.success(request, "Flow Meter successfully updated.") - return redirect("kegadmin-controllers") - elif "delete_flow_meter" in request.POST: - flowmeter = models.FlowMeter.objects.filter( - id=request.POST.get("flowmeter_id") - ).delete() - messages.success(request, "Flow Meter removed successfully.") - return redirect("kegadmin-controllers") - elif "add_flow_toggle" in request.POST: - add_flow_toggle_form = forms.AddFlowToggleForm(request.POST) - if add_flow_toggle_form.is_valid(): - add_flow_toggle_form.save() - messages.success(request, "Flow Toggle added successfully.") - return redirect("kegadmin-controllers") - elif "edit_flow_toggle" in request.POST: - flowtoggle = models.FlowToggle.objects.filter(id=request.POST.get("flowtoggle_id")) - flowtoggle.update(port_name=request.POST.get("port_name")) - messages.success(request, "Flow Toggle successfully updated.") - return redirect("kegadmin-controllers") - elif "delete_flow_toggle" in request.POST: - flowmeter = models.FlowToggle.objects.filter( - id=request.POST.get("flowtoggle_id") - ).delete() - messages.success(request, "Flow Toggle removed successfully.") - return redirect("kegadmin-controllers") - - context["controller"] = controller - context["delete_controller_form"] = delete_controller_form - context["add_flow_meter_form"] = add_flow_meter_form - context["add_flow_toggle_form"] = add_flow_toggle_form - return render(request, "kegadmin/controller_detail.html", context=context) - - -@staff_member_required -def tap_list(request): - context = {} - context["taps"] = models.KegTap.objects.all() - return render(request, "kegadmin/tap_list.html", context=context) - - -@staff_member_required -def add_tap(request): - context = {} - form = forms.TapForm() - if request.method == "POST": - form = forms.TapForm(request.POST) - if form.is_valid(): - form.save() - messages.success(request, "Tap created.") - return redirect("kegadmin-taps") - context["form"] = form - return render(request, "kegadmin/add_tap.html", context=context) - - -@staff_member_required -def tap_detail(request, tap_id): - tap = get_object_or_404(models.KegTap, id=tap_id) - available_kegs = models.Keg.objects.filter(status=models.Keg.STATUS_AVAILABLE).order_by("id") - - record_drink_form = forms.RecordDrinkForm() - activate_keg_form = forms.ChangeKegForm() - tap_settings_form = forms.TapForm(instance=tap) - - if request.method == "POST": - if "submit_change_keg_form" in request.POST: - activate_keg_form = forms.ChangeKegForm(request.POST) - if activate_keg_form.is_valid(): - activate_keg_form.save(tap) - messages.success(request, "The new keg was activated. Bottoms up!") - return redirect("kegadmin-taps") - - if "submit_keg_choice" in request.POST: - keg_id = request.POST.get("keg_id") - keg = models.Keg.objects.get(id=keg_id) - d = tap.attach_keg(keg) - messages.success(request, "The new keg was activated. Bottoms up!") - return redirect("kegadmin-taps") - - elif "submit_tap_form" in request.POST: - tap_settings_form = forms.TapForm(request.POST, instance=tap) - if tap_settings_form.is_valid(): - tap_settings_form.save() - messages.success(request, "Tap settings saved.") - tap_settings_form = forms.TapForm(instance=tap) - - elif "submit_delete_tap_form" in request.POST: - delete_form = forms.DeleteTapForm(request.POST) - if delete_form.is_valid(): - if tap.current_keg: - tap.end_current_keg() - tap.delete() - messages.success(request, "Tap deleted.") - return redirect("kegadmin-taps") - - elif "submit_end_keg_form" in request.POST: - end_keg_form = forms.EndKegForm(request.POST) - if end_keg_form.is_valid(): - old_keg = tap.end_current_keg() - messages.success(request, f"Keg {old_keg.id} was ended.") - - elif "submit_record_drink" in request.POST: - record_drink_form = forms.RecordDrinkForm(request.POST) - if record_drink_form.is_valid(): - user = record_drink_form.cleaned_data.get("user") - volume_ml = record_drink_form.cleaned_data.get("volume_ml") - d = models.Drink.record_drink(tap, ticks=0, username=user, volume_ml=volume_ml) - messages.success(request, f"Drink {d.id} recorded.") - else: - messages.error(request, "Please enter a valid volume and user.") - - elif "submit_record_spill" in request.POST: - record_drink_form = forms.RecordDrinkForm(request.POST) - if record_drink_form.is_valid(): - user = record_drink_form.cleaned_data.get("user") - volume_ml = record_drink_form.cleaned_data.get("volume_ml") - d = models.Drink.record_drink( - tap, ticks=0, username=user, volume_ml=volume_ml, spilled=True - ) - messages.success(request, "Spill recorded.") - else: - messages.error(request, "Please enter a valid volume.") - - else: - messages.warning(request, "No form data was found. Bug?") - - end_keg_form = forms.EndKegForm(initial={"keg": tap.current_keg}) - - context = {} - context["tap"] = tap - context["current_keg"] = tap.current_keg - context["available_kegs"] = available_kegs - context["activate_keg_form"] = activate_keg_form - context["record_drink_form"] = record_drink_form - context["end_keg_form"] = end_keg_form - context["tap_settings_form"] = tap_settings_form - context["delete_tap_form"] = forms.DeleteTapForm() - return render(request, "kegadmin/tap_detail.html", context=context) - - -@staff_member_required -def keg_list(request): - qs = models.Keg.objects.all().order_by("-id") - return keg_list_internal(request, qs) - - -@staff_member_required -def keg_list_available(request): - qs = models.Keg.objects.filter(status=models.Keg.STATUS_AVAILABLE).order_by("-id") - return keg_list_internal(request, qs) - - -@staff_member_required -def keg_list_online(request): - qs = models.Keg.objects.filter(status=models.Keg.STATUS_ON_TAP).order_by("-id") - return keg_list_internal(request, qs) - - -@staff_member_required -def keg_list_kicked(request): - qs = models.Keg.objects.filter(status=models.Keg.STATUS_FINISHED).order_by("-id") - return keg_list_internal(request, qs) - - -def keg_list_internal(request, qs): - context = {} - paginator = Paginator(qs, 30) - - page = request.GET.get("page") - try: - kegs = paginator.page(page) - except PageNotAnInteger: - kegs = paginator.page(1) - except EmptyPage: - kegs = paginator.page(paginator.num_pages) - - context["kegs"] = kegs - return render(request, "kegadmin/keg_list.html", context=context) - - -@staff_member_required -def keg_detail(request, keg_id): - keg = get_object_or_404(models.Keg, id=keg_id) - - edit_form = forms.EditKegForm(instance=keg) - - if request.method == "POST": - if "submit_edit_keg" in request.POST: - edit_form = forms.EditKegForm(request.POST, instance=keg) - if edit_form.is_valid(): - edit_form.save() - messages.success(request, "Keg updated.") - return redirect("kegadmin-kegs") - - elif "submit_delete_keg" in request.POST: - keg.cancel() - messages.success(request, "Keg deleted.") - return redirect("kegadmin-kegs") - - elif "submit_reactivate" in request.POST: - keg.reactivate_keg() - messages.success(request, "Keg reactivated.") - return redirect("kegadmin-edit-keg", keg_id=keg.id) - - elif "submit_end" in request.POST: - keg.end_keg() - messages.success(request, "Keg ended.") - return redirect("kegadmin-edit-keg", keg_id=keg.id) - - context = {} - context["keg"] = keg - context["remaining"] = keg.remaining_volume_ml() - context["edit_form"] = edit_form - - return render(request, "kegadmin/keg_detail.html", context=context) - - -@staff_member_required -def keg_add(request): - add_keg_form = forms.KegForm() - if request.method == "POST": - if "submit_add_keg" in request.POST: - add_keg_form = forms.KegForm(request.POST) - if add_keg_form.is_valid(): - keg = add_keg_form.save() - messages.success(request, "New keg added.") - return redirect("kegadmin-edit-keg", keg_id=keg.id) - - context = {} - context["keg"] = "new" - context["form"] = add_keg_form - return render(request, "kegadmin/keg_add.html", context=context) - - -@staff_member_required -def user_list(request): - context = {} - - if request.method == "POST": - form = forms.FindUserForm(request.POST) - if form.is_valid(): - username = form.cleaned_data.get("username") - try: - user = models.User.objects.get(username=username) - return redirect("kegadmin-edit-user", user.id) - except models.User.DoesNotExist: - messages.error(request, f'User "{username}" does not exist.') - - users = models.User.objects.exclude(username="guest").order_by("-id") - paginator = Paginator(users, 25) - - page = request.GET.get("page") - try: - users = paginator.page(page) - except PageNotAnInteger: - users = paginator.page(1) - except EmptyPage: - users = paginator.page(paginator.num_pages) - - context["users"] = users - return render(request, "kegadmin/user_list.html", context=context) - - -@staff_member_required -def add_user(request): - context = {} - form = forms.UserForm() - if request.method == "POST": - form = forms.UserForm(request.POST) - if form.is_valid(): - instance = form.save(commit=False) - instance.set_password(form.cleaned_data.get("password")) - instance.save() - messages.success(request, f'User "{instance.username}" created.') - return redirect("kegadmin-users") - context["form"] = form - return render(request, "kegadmin/add_user.html", context=context) - - -@staff_member_required -def user_detail(request, user_id): - edit_user = get_object_or_404(models.User, id=user_id) - context = {} - profile_form = forms.UserProfileForm(instance=edit_user) - - if request.method == "POST": - if "submit_enable" in request.POST: - if edit_user.is_active: - messages.error(request, "User is already enabled.") - else: - edit_user.is_active = True - edit_user.save() - messages.success(request, f"User {edit_user.username} was enabled.") - - elif "submit_disable" in request.POST: - if edit_user.is_guest(): - messages.error(request, "Cannot disable the guest user.") - elif not edit_user.is_active: - messages.error(request, "User is already disabled.") - else: - edit_user.is_active = False - edit_user.save() - messages.success(request, f"User {edit_user.username} was disabled.") - - elif "submit_add_staff" in request.POST: - if edit_user.is_staff: - messages.error(request, "User is already staff.") - else: - edit_user.is_staff = True - edit_user.save() - messages.success(request, f"User {edit_user.username} staff status enabled.") - - elif "submit_remove_staff" in request.POST: - if edit_user.is_guest(): - messages.error(request, "Cannot change staff status on the guest user.") - elif not edit_user.is_staff: - messages.error(request, "User is not currently staff.") - else: - edit_user.is_staff = False - edit_user.save() - messages.success(request, f"User {edit_user.username} staff status disabled.") - - elif "submit_update_profile" in request.POST: - profile_form = forms.UserProfileForm(request.POST, request.FILES, instance=edit_user) - if profile_form.is_valid(): - profile_form.save() - messages.success(request, f"User {edit_user.username} e-profile updated") - - else: - messages.error(request, "Unknown form submitted.") - - context["profile_form"] = profile_form - context["edit_user"] = edit_user - context["tokens"] = edit_user.tokens.all().order_by("created_time") - - return render(request, "kegadmin/user_detail.html", context=context) - - -@staff_member_required -def drink_list(request): - delete_drinks_form = forms.DeleteDrinksForm() - - if "delete_drinks" in request.POST: - form = forms.DeleteDrinksForm(request.POST) - if form.is_valid(): - delete_ids = request.POST.getlist("delete_ids[]") - drinks = models.Drink.objects.filter(Q(id__in=delete_ids)) - for drink in drinks: - drink.cancel_drink() - delete_ids.reverse() - if len(delete_ids) == 1: - messages.success(request, "Drink " + delete_ids[0] + " has been deleted.") - elif len(delete_ids) == 2: - messages.success( - request, "Drinks " + " and ".join(delete_ids) + " have been deleted." - ) - else: - messages.success( - request, - "Drinks " - + ", ".join(delete_ids[:-1]) - + ", and " - + delete_ids[-1] - + " have been deleted.", - ) - - context = {} - drinks = models.Drink.objects.all().order_by("-time") - paginator = Paginator(drinks, 25) - - page = request.GET.get("page") - try: - drinks = paginator.page(page) - except PageNotAnInteger: - drinks = paginator.page(1) - except EmptyPage: - drinks = paginator.page(paginator.num_pages) - - context["drinks"] = drinks - context["delete_drinks_form"] = delete_drinks_form - return render(request, "kegadmin/drink_list.html", context=context) - - -@staff_member_required -@require_http_methods(["POST"]) -def drink_edit(request, drink_id): - drink = get_object_or_404(models.Drink, id=drink_id) - - if "submit_cancel" in request.POST: - form = forms.CancelDrinkForm(request.POST) - old_keg = drink.keg - if form.is_valid(): - drink.cancel_drink() - messages.success(request, f"Drink {drink_id} was cancelled.") - return redirect(old_keg.get_absolute_url()) - else: - messages.error(request, "Invalid request") - return redirect(drink.get_absolute_url()) - - if "submit_spill" in request.POST: - form = forms.CancelDrinkForm(request.POST) - old_keg = drink.keg - if form.is_valid(): - drink.cancel_drink(spilled=True) - messages.success(request, f"Drink {drink_id} was spilled.") - return redirect(old_keg.get_absolute_url()) - else: - messages.error(request, "Invalid request") - return redirect(drink.get_absolute_url()) - - elif "submit_reassign" in request.POST: - form = forms.ReassignDrinkForm(request.POST) - if form.is_valid(): - new_user = form.cleaned_data["user"] - try: - drink.reassign(new_user) - messages.success(request, f"Drink {drink_id} was reassigned.") - except models.User.DoesNotExist: - messages.error(request, "No such user") - else: - messages.error(request, "Invalid request") - return redirect(drink.get_absolute_url()) - - elif "submit_edit_volume" in request.POST: - form = forms.ChangeDrinkVolumeForm(request.POST) - if form.is_valid(): - volume_ml = form.cleaned_data.get("volume_ml") - if volume_ml == drink.volume_ml: - messages.warning(request, "Drink volume unchanged.") - else: - drink.set_volume(volume_ml) - messages.success(request, f"Drink {drink_id} was updated.") - else: - messages.error(request, "Please provide a valid volume.") - return redirect(drink.get_absolute_url()) - - messages.error(request, "Unknown action.") - return redirect(drink.get_absolute_url()) - - -@staff_member_required -def token_list(request): - context = {} - tokens = models.AuthenticationToken.objects.all().order_by("-created_time") - paginator = Paginator(tokens, 25) - - page = request.GET.get("page") - try: - tokens = paginator.page(page) - except PageNotAnInteger: - tokens = paginator.page(1) - except EmptyPage: - tokens = paginator.page(paginator.num_pages) - - context["tokens"] = tokens - return render(request, "kegadmin/token_list.html", context=context) - - -@staff_member_required -def token_detail(request, token_id): - token = get_object_or_404(models.AuthenticationToken, id=token_id) - delete_token_form = forms.DeleteTokenForm() - context = {} - - username = "" - if token.user: - username = token.user.username - - if request.method == "POST": - if "delete_token" in request.POST: - delete_token_form = forms.DeleteTokenForm(request.POST) - if delete_token_form.is_valid(): - token.delete() - messages.success(request, "The token was deleted.") - return redirect("kegadmin-tokens") - else: - form = forms.TokenForm(request.POST, instance=token) - if form.is_valid(): - instance = form.save(commit=False) - instance.user = form.cleaned_data["user"] - instance.save() - messages.success(request, "Token updated.") - - form = forms.TokenForm(instance=token, initial={"username": username}) - context["token"] = token - context["delete_token_form"] = delete_token_form - context["form"] = form - return render(request, "kegadmin/token_detail.html", context=context) - - -@staff_member_required -def add_token(request): - context = {} - form = forms.AddTokenForm() - if request.method == "POST": - form = forms.AddTokenForm(request.POST) - if form.is_valid(): - instance = form.save(commit=False) - instance.user = form.cleaned_data["user"] - instance.save() - messages.success(request, "Token created.") - return redirect("kegadmin-tokens") - context["form"] = form - return render(request, "kegadmin/add_token.html", context=context) - - -@staff_member_required -def beverages_list(request): - context = {} - beers = models.Beverage.objects.all().order_by("name") - paginator = Paginator(beers, 25) - - page = request.GET.get("page") - try: - beers = paginator.page(page) - except PageNotAnInteger: - beers = paginator.page(1) - except EmptyPage: - beers = paginator.page(paginator.num_pages) - - context["beverages"] = beers - return render(request, "kegadmin/beer_type_list.html", context=context) - - -@staff_member_required -def beverage_detail(request, beer_id): - btype = get_object_or_404(models.Beverage, id=beer_id) - - form = forms.BeverageForm(instance=btype) - if request.method == "POST": - form = forms.BeverageForm(request.POST, instance=btype) - if form.is_valid(): - btype = form.save() - new_image = request.FILES.get("new_image") - if new_image: - pic = models.Picture.objects.create() - pic.image.save(new_image.name, new_image) - pic.save() - btype.picture = pic - btype.save() - - messages.success(request, "Beer type updated.") - return redirect("kegadmin-beverages") - else: - messages.error(request, "Please correct the error(s) below.") - - context = {} - context["beer_type"] = btype - context["form"] = form - return render(request, "kegadmin/beer_type_detail.html", context=context) - - -@staff_member_required -def beverage_add(request): - - form = forms.BeverageForm() - if request.method == "POST": - form = forms.BeverageForm(request.POST) - if form.is_valid(): - btype = form.save() - new_image = request.FILES.get("new_image") - if new_image: - pic = models.Picture.objects.create() - pic.image.save(new_image.name, new_image) - pic.save() - btype.picture = pic - btype.save() - - messages.success(request, "Beer type added.") - return redirect("kegadmin-beverages") - - context = {} - context["beer_type"] = "new" - context["form"] = form - return render(request, "kegadmin/beer_type_add.html", context=context) - - -@staff_member_required -def beverage_producer_list(request): - context = {} - brewers = models.BeverageProducer.objects.all().order_by("name") - paginator = Paginator(brewers, 25) - - page = request.GET.get("page") - try: - brewers = paginator.page(page) - except PageNotAnInteger: - brewers = paginator.page(1) - except EmptyPage: - brewers = paginator.page(paginator.num_pages) - - context["brewers"] = brewers - return render(request, "kegadmin/brewer_list.html", context=context) - - -@staff_member_required -def beverage_producer_detail(request, brewer_id): - brewer = get_object_or_404(models.BeverageProducer, id=brewer_id) - - form = forms.BeverageProducerForm(instance=brewer) - if request.method == "POST": - form = forms.BeverageProducerForm(request.POST, instance=brewer) - if form.is_valid(): - form.save() - messages.success(request, "Brewer updated.") - return redirect("kegadmin-beverage-producers") - - context = {} - context["brewer"] = brewer - context["form"] = form - return render(request, "kegadmin/brewer_detail.html", context=context) - - -@staff_member_required -def beverage_producer_add(request): - form = forms.BeverageProducerForm() - if request.method == "POST": - form = forms.BeverageProducerForm(request.POST) - if form.is_valid(): - btype = form.save() - new_image = request.FILES.get("new_image") - if new_image: - pic = models.Picture.objects.create() - pic.image.save(new_image.name, new_image) - pic.save() - btype.picture = pic - btype.save() - - messages.success(request, "Brewer added.") - return redirect("kegadmin-beverage-producers") - - context = {} - context["brewer"] = "new" - context["form"] = form - return render(request, "kegadmin/brewer_add.html", context=context) - - -@staff_member_required -def autocomplete_beverage(request): - search = request.GET.get("q") - if search: - beverages = models.Beverage.objects.filter( - Q(name__icontains=search) | Q(producer__name__icontains=search) - ) - else: - beverages = models.Beverage.objects.all() - beverages = beverages[:10] # autocomplete widget limited to 10 - values = [] - for beverage in beverages: - values.append( - { - "name": beverage.name, - "id": beverage.id, - "producer_name": beverage.producer.name, - "producer_id": beverage.producer.id, - "style": beverage.style, - } - ) - return HttpResponse( - kbjson.dumps(values, indent=None), content_type="application/json", status=200 - ) - - -@staff_member_required -def autocomplete_user(request): - search = request.GET.get("q") - if search: - users = models.User.objects.filter( - Q(username__icontains=search) - | Q(email__icontains=search) - | Q(display_name__icontains=search) - ) - else: - users = models.User.objects.all() - users = users[:10] # autocomplete widget limited to 10 - values = [] - for user in users: - values.append( - { - "username": user.username, - "id": user.id, - "email": user.email, - "display_name": user.get_full_name(), - "is_active": user.is_active, - } - ) - return HttpResponse( - kbjson.dumps(values, indent=None), content_type="application/json", status=200 - ) - - -@staff_member_required -def autocomplete_token(request): - search = request.GET.get("q") - if search: - tokens = models.AuthenticationToken.objects.filter( - Q(token_value__icontains=search) | Q(nice_name__icontains=search) - ) - else: - tokens = models.AuthenticationToken.objects.all() - tokens = tokens[:10] # autocomplete widget limited to 10 - values = [] - for token in tokens: - values.append( - { - "username": token.user.username, - "id": token.id, - "auth_device": token.auth_device, - "token_value": token.token_value, - "enabled": token.enabled, - } - ) - return HttpResponse( - kbjson.dumps(values, indent=None), content_type="application/json", status=200 - ) - - -@staff_member_required -def plugin_settings(request, plugin_name): - plugin = request.plugins.get(plugin_name, None) - if not plugin: - raise Http404(f'Plugin "{plugin_name}" not loaded') - - view = plugin.get_admin_settings_view() - if not view: - raise Http404("No settings for this plugin") - - return view(request, plugin) - - -@staff_member_required -def logs(request): - context = {} - handlers = logger.parent.handlers - - logs = [] - for h in handlers: - if isinstance(h, RedisListHandler): - logs = list(h.get_logs()) - logs.reverse() - break - - context["logs"] = logs - return render(request, "kegadmin/logs.html", context=context) diff --git a/pykeg/web/kegweb/__init__.py b/pykeg/web/kegweb/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pykeg/web/kegweb/forms.py b/pykeg/web/kegweb/forms.py deleted file mode 100644 index 1ce0d24d0..000000000 --- a/pykeg/web/kegweb/forms.py +++ /dev/null @@ -1,43 +0,0 @@ -from django import forms -from django.contrib.auth.forms import AuthenticationForm - -from pykeg.core import models - -ALL_PICTURES = models.Picture.objects.all() - - -class LoginForm(AuthenticationForm): - next_page = forms.CharField(required=False, widget=forms.HiddenInput) - - -class ActivateAccountForm(forms.Form): - password = forms.CharField(required=True, widget=forms.PasswordInput) - password2 = forms.CharField(required=True, widget=forms.PasswordInput) - - def clean_password2(self): - password1 = self.cleaned_data.get("password") - password2 = self.cleaned_data.get("password2") - if password1 and password2 and password1 != password2: - raise forms.ValidationError("Passwords do not match.") - return password2 - - -class InvitationForm(forms.Form): - email = forms.EmailField(required=True, help_text="E-mail address to invite") - - -class ProfileForm(forms.Form): - new_mugshot = forms.ImageField(required=False) - display_name = forms.CharField(required=True) - - -class RegenerateApiKeyForm(forms.Form): - pass - - -class DeletePictureForm(forms.Form): - picture = forms.ModelChoiceField(queryset=ALL_PICTURES, required=True, widget=forms.HiddenInput) - - -class ChangeEmailForm(forms.Form): - email = forms.CharField(required=True) diff --git a/pykeg/web/kegweb/kegweb_test.py b/pykeg/web/kegweb/kegweb_test.py deleted file mode 100644 index 27d5fff07..000000000 --- a/pykeg/web/kegweb/kegweb_test.py +++ /dev/null @@ -1,286 +0,0 @@ -"""General tests for the web interface.""" - -from django.core import mail -from django.test import TransactionTestCase -from django.test.utils import override_settings -from django.urls import reverse - -from pykeg.core import defaults, models - - -class KegwebTestCase(TransactionTestCase): - def setUp(self): - self.client.logout() - defaults.set_defaults(set_is_setup=True, create_controller=True) - - def testBasicEndpoints(self): - for endpoint in ("/kegs/", "/stats/", "/drinkers/guest/", "/drinkers/guest/sessions/"): - response = self.client.get(endpoint) - self.assertEqual(200, response.status_code) - - for endpoint in ("/sessions/",): - response = self.client.get(endpoint) - self.assertEqual(404, response.status_code) - - keg = models.Keg.start_keg( - "kegboard.flow0", - beverage_name="Unknown", - producer_name="Unknown", - beverage_type="beer", - style_name="Unknown", - ) - self.assertIsNotNone(keg) - response = self.client.get("/kegs/") - self.assertEqual(200, response.status_code) - - d = models.Drink.record_drink("kegboard.flow0", ticks=100) - drink_id = d.id - - # Slash-less short links now land on the SPA catch-all (which - # redirects client-side), so exercise the canonical slashed form. - response = self.client.get(f"/d/{drink_id}/", follow=True) - self.assertRedirects(response, f"/drinks/{drink_id}/", status_code=301) - - session_id = d.session.id - response = self.client.get(f"/s/{session_id}/", follow=True) - self.assertRedirects(response, d.session.get_absolute_url(), status_code=301) - - def testShout(self): - models.Keg.start_keg( - "kegboard.flow0", - beverage_name="Unknown", - producer_name="Unknown", - beverage_type="beer", - style_name="Unknown", - ) - d = models.Drink.record_drink("kegboard.flow0", ticks=123, shout="_UNITTEST_") - response = self.client.get(d.get_absolute_url()) - self.assertContains(response, "

    _UNITTEST_

    ", status_code=200) - - def test_privacy(self): - keg = models.Keg.start_keg( - "kegboard.flow0", - beverage_name="Unknown", - producer_name="Unknown", - beverage_type="beer", - style_name="Unknown", - ) - self.assertIsNotNone(keg) - d = models.Drink.record_drink("kegboard.flow0", ticks=100) - - # URLs to expected contents - urls = { - "/kegs/": "Keg List", - "/stats/": "System Stats", - "/sessions/": "All Sessions", - f"/kegs/{keg.id}/": f"Keg {keg.id}", - f"/drinks/{d.id}/": f"Drink {d.id}", - } - - def test_urls(expect_fail, urls=urls): - for url, expected_content in list(urls.items()): - response = self.client.get(url) - if expect_fail: - self.assertNotContains( - response, expected_content, status_code=401, msg_prefix=url - ) - else: - self.assertContains(response, expected_content, status_code=200, msg_prefix=url) - - user = models.User.create_new_user("testuser", "test@example.com", password="1234") - - kbsite = models.KegbotSite.get() - self.client.logout() - - # Public mode. - test_urls(expect_fail=False) - - # Members-only. - kbsite.privacy = "members" - kbsite.save() - test_urls(expect_fail=True) - logged_in = self.client.login(username="testuser", password="1234") - self.assertTrue(logged_in) - test_urls(expect_fail=False) - - # Staff-only - kbsite.privacy = "staff" - kbsite.save() - - test_urls(expect_fail=True) - user.is_staff = True - user.save() - test_urls(expect_fail=False) - self.client.logout() - test_urls(expect_fail=True) - - def test_whitelisted_urls(self): - """Verify always-accessible URLs.""" - urls = ( - "/accounts/password/reset/", - "/accounts/register/", - "/accounts/login/", - ) - - for url in urls: - response = self.client.get(url) - self.assertNotContains(response, "denied", status_code=200, msg_prefix=url) - - def test_activation(self): - kbsite = models.KegbotSite.get() - self.assertEqual("public", kbsite.privacy) - - user = models.User.create_new_user("testuser", "test@example.com") - self.assertIsNotNone(user.activation_key) - self.assertFalse(user.has_usable_password()) - - activation_key = user.activation_key - self.assertIsNotNone(activation_key) - - activation_url = reverse( - "activate-account", args=(), kwargs={"activation_key": activation_key} - ) - - # Activation works regardless of privacy settings. - self.client.logout() - response = self.client.get(activation_url) - self.assertContains(response, "Choose a Password", status_code=200) - - kbsite.privacy = "staff" - kbsite.save() - response = self.client.get(activation_url) - self.assertContains(response, "Choose a Password", status_code=200) - - kbsite.privacy = "members" - kbsite.save() - response = self.client.get(activation_url) - self.assertContains(response, "Choose a Password", status_code=200) - - # Activate the account. - form_data = { - "password": "123", - "password2": "123", - } - - response = self.client.post(activation_url, data=form_data, follow=True) - self.assertContains(response, "Your account has been activated!", status_code=200) - user = models.User.objects.get(pk=user.id) - self.assertIsNone(user.activation_key) - - @override_settings(EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend") - @override_settings(DEFAULT_FROM_EMAIL="test-from@example") - def test_registration(self): - kbsite = models.KegbotSite.get() - self.assertEqual("public", kbsite.privacy) - self.assertEqual("public", kbsite.registration_mode) - - response = self.client.get("/accounts/register/") - self.assertContains(response, "Register New Account", status_code=200) - - response = self.client.post( - "/accounts/register/", - data={ - "username": "newuser", - "password1": "1234", - "password2": "1234", - "email": "test2@example.com", - }, - follow=True, - ) - self.assertRedirects(response, "/account/") - self.assertContains(response, "Hello, newuser") - self.assertEqual(1, len(mail.outbox)) - - msg = mail.outbox[0] - self.assertEqual(["test2@example.com"], msg.to) - self.assertTrue("To log in to your account, please click here" in msg.body) - - response = self.client.post( - "/accounts/register/", - data={ - "username": "newuser", - "password1": "1234", - "password2": "1234", - "email": "test2@example.com", - }, - follow=False, - ) - self.assertContains(response, "User with this Username already exists", status_code=200) - - response = self.client.post( - "/accounts/register/", - data={ - "username": "newuser 2", - "password1": "1234", - "password2": "1234", - "email": "test2@example.com", - }, - follow=False, - ) - self.assertContains(response, "Enter a valid username", status_code=200) - - response = self.client.post( - "/accounts/register/", - data={ - "username": "newuser2", - "password1": "1234", - "password2": "1235", - "email": "test2@example.com", - }, - follow=False, - ) - self.assertContains( - response, "The two password fields didn't match.", status_code=200, html=True - ) - - @override_settings(EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend") - @override_settings(DEFAULT_FROM_EMAIL="test-from@example") - def test_registration_with_invite(self): - kbsite = models.KegbotSite.get() - kbsite.registration_mode = "staff-invite-online" - kbsite.save() - - response = self.client.get("/accounts/register/") - self.assertContains(response, "Invitation Required", status_code=401) - - response = self.client.get("/accounts/register/?invite_code=1234") - self.assertContains(response, "Invitation Expired", status_code=401) - - models.Invitation.objects.create(invite_code="test", for_email="test@example.com") - self.assertEqual(1, models.Invitation.objects.all().count()) - - response = self.client.get("/accounts/register/?invite_code=test") - self.assertContains(response, "Register New Account", status_code=200) - response = self.client.post( - "/accounts/register/", - data={ - "username": "newuser2", - "password1": "1234", - "password2": "1234", - "email": "test2@example.com", - }, - follow=True, - ) - self.assertRedirects(response, "/account/") - self.assertContains(response, "Hello, newuser2") - self.assertEqual(0, models.Invitation.objects.all().count()) - - response = self.client.get("/accounts/register/?invite_code=test") - self.assertContains(response, "Invitation Expired", status_code=401) - - def test_upgrade_bouncer(self): - kbsite = models.KegbotSite.get() - response = self.client.get("/") - self.assertContains(response, "My Kegbot", status_code=200) - - old_version = kbsite.server_version - kbsite.server_version = "0.0.1" - kbsite.save() - response = self.client.get("/") - self.assertContains(response, "Upgrade Required", status_code=403) - - kbsite.server_version = old_version - kbsite.is_setup = False - kbsite.save() - response = self.client.get("/") - self.assertContains(response, "Kegbot Offline", status_code=403) diff --git a/pykeg/web/kegweb/signals.py b/pykeg/web/kegweb/signals.py deleted file mode 100644 index 4132c2085..000000000 --- a/pykeg/web/kegweb/signals.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.contrib import messages -from django.contrib.auth.signals import user_logged_in, user_logged_out - - -def on_logged_in(sender, user, request, **kwargs): - messages.add_message(request, messages.INFO, "You are now logged in!", fail_silently=True) - - -user_logged_in.connect(on_logged_in) - - -def on_logged_out(sender, user, request, **kwargs): - messages.add_message(request, messages.INFO, "You have been logged out.", fail_silently=True) - - -user_logged_out.connect(on_logged_out) diff --git a/pykeg/web/kegweb/templates/kegweb/_pagination.html b/pykeg/web/kegweb/templates/kegweb/_pagination.html deleted file mode 100644 index 66a8abe91..000000000 --- a/pykeg/web/kegweb/templates/kegweb/_pagination.html +++ /dev/null @@ -1,33 +0,0 @@ -{% comment %} -Bootstrap 3 pagination for a Django Paginator Page, passed in as `page`. -Usage: {% include "kegweb/_pagination.html" with page=page_obj %} -{% endcomment %} -{% load paginator_tags %} -{% if page.paginator.num_pages > 1 %} -
      - - {% if page.has_previous %} - « - {% else %} - - {% endif %} - - {% elided_page_range page as page_numbers %} - {% for num in page_numbers %} - {% if num == page.paginator.ELLIPSIS %} -
    • {{ num }}
    • - {% elif num == page.number %} -
    • {{ num }}
    • - {% else %} -
    • {{ num }}
    • - {% endif %} - {% endfor %} - - {% if page.has_next %} - » - {% else %} - - {% endif %} - -
    -{% endif %} diff --git a/pykeg/web/kegweb/templates/kegweb/badge.html b/pykeg/web/kegweb/templates/kegweb/badge.html deleted file mode 100644 index 1bfce53db..000000000 --- a/pykeg/web/kegweb/templates/kegweb/badge.html +++ /dev/null @@ -1,4 +0,0 @@ -
  • -

    {{ badge_amount }}

    - {{ badge_caption }} -
  • diff --git a/pykeg/web/kegweb/templates/kegweb/basic-badges.html b/pykeg/web/kegweb/templates/kegweb/basic-badges.html deleted file mode 100644 index 789d02b84..000000000 --- a/pykeg/web/kegweb/templates/kegweb/basic-badges.html +++ /dev/null @@ -1,27 +0,0 @@ -{% load kegweblib %} -{% if stats %} -
      -
    • -

      {% volume stats.total_volume_ml %}

      - Poured -
    • - {% if keg %} -
    • - {% if keg.remaining_volume_ml > 0 and not keg.is_finished %} -

      {% volume keg.remaining_volume_ml %}

      - {% else %} -

      {% volume 0 %}

      - {% endif %} - Remaining -
    • - {% endif %} -
    • -

      {{ stats.registered_drinkers|length }}

      - Drinkers -
    • -
    • -

      {{ stats.sessions_count }}

      - Sessions -
    • -
    -{% endif %} diff --git a/pykeg/web/kegweb/templates/kegweb/basic-stats.html b/pykeg/web/kegweb/templates/kegweb/basic-stats.html deleted file mode 100644 index ac5f9873d..000000000 --- a/pykeg/web/kegweb/templates/kegweb/basic-stats.html +++ /dev/null @@ -1,41 +0,0 @@ -{% load kegweblib %} -{% if stats %} - - Sessions - - A total of - {{ stats.sessions_count }} drinking session{{ stats.sessions_count|pluralize }} - {% if stats.sessions_count == 1 %}has{% else %}have{% endif %} been recorded. - - - - - Drinks - - A total of - {{ stats.total_pours }} pour{{ stats.total_pours|pluralize }} have been recorded, - totalling {% volume stats.total_volume_ml %}. - - - - - Drinkers - - At least - {{ stats.registered_drinkers|length }} known - drinker{{ stats.registered_drinkers|length|pluralize }} {% if stats.has_guest_pour %}(and untold guests){% endif %} - have poured. - - - -{% if stats.average_volume_ml %} - - Average Pour - - The average pour size is - {% volume stats.average_volume_ml %}. - - -{% endif %} - -{% endif %} diff --git a/pykeg/web/kegweb/templates/kegweb/drink_detail.html b/pykeg/web/kegweb/templates/kegweb/drink_detail.html deleted file mode 100644 index 2ab56be70..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drink_detail.html +++ /dev/null @@ -1,191 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Drink {{ drink.id }} by {% drinker_name drink nolink %} | {{ block.super }}{% endblock %} -{% block pagetitle %}Drink {{ drink.id }} by {% drinker_name drink %}{% endblock %} - -{% block content %} - -{% if user.is_staff %} - - - -{% endif %} - -{% if picture_form %} - -{% endif %} - -
    - -
    - - - - - - {% if user.is_staff %} - - {% else %} - - {% endif %} - - - - - - - - {% if drink.keg %} - - - - - {% endif %} - - - - - - - - - - - - -
    Size -
    {% csrf_token %} -
    - {% if kbsite.volume_display_units == 'metric' %} - - - mL - {% else %} - - - oz - {% endif %} - -
    -
    -
    - {% volume drink.volume_ml %} - {% if drink.duration %} - - (took {{drink.duration}} second{{drink.duration|pluralize}} to pour) - - {% endif %} -
    When - {% timeago drink.time %} -
    Keg - {{drink.keg.type.name}} -
    Session - {{ drink.session.GetTitle }} - ({{ drink.session.summarize_drinkers|safe }}) -
    Permalink - {{ drink.ShortUrl }} -
    - -{% if user.is_staff %} -

    Manager Controls

    -
    {% csrf_token %} -
    - - - - Spill - - Delete -
    -
    -{% endif %} -
    - - -
    - {% if drink.picture %} - - {% if picture_form %} -
    - -
    - {% endif %} - {% endif %} - {% if drink.shout %} - {% include 'kegweb/includes/drink_shout.html' %} - {% endif %} -
    - - -
    - -{% endblock content %} diff --git a/pykeg/web/kegweb/templates/kegweb/drinker-rank.html b/pykeg/web/kegweb/templates/kegweb/drinker-rank.html deleted file mode 100644 index ffba4169d..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinker-rank.html +++ /dev/null @@ -1,22 +0,0 @@ -{% load kegweblib %} -{% load humanize %} - -{% for volume_ml,user in ranked_drinkers %} -{% with forloop.counter as rank %} -
    -
    -
    - {% mugshot_box user 64 %} -
    -
    -

    - {{ user.get_full_name }}
    - - #{{ rank }} · {% volume volume_ml %} - -

    -
    -
    -
    -{% endwith %} -{% endfor %} diff --git a/pykeg/web/kegweb/templates/kegweb/drinker_detail.html b/pykeg/web/kegweb/templates/kegweb/drinker_detail.html deleted file mode 100644 index 425f19516..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinker_detail.html +++ /dev/null @@ -1,182 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Drinker Details: {{ drinker.username }} | {{ block.super }}{% endblock %} -{% block pagetitle %}Drinker Details: {{ drinker.username }}{% endblock %} - -{% block content %} -
    -
    - {% mugshot_box drinker %} -
    - See All Drinker Sessions -


    -
    - -
    - - -
    -
    - - {% if stats %} - - - - - - - - - - - - - - - {% if stats.total_pours %} - - - - - - - - - - {% endif %} - {% endif %} - - - - - - - {% with drinker.drinks.latest as last_drink %} - {% if last_drink %} - - - - - {% endif %} - {% endwith %} - -
    Total Volume {% volume stats.total_volume_ml %}
    Total Pours{{ stats.total_pours }}
    Total Sessions - {{ stats.sessions_count }}
    Average Pour{% volume stats.average_volume_ml %}
    Largest Pour{% volume stats.greatest_volume_ml %}
    Member Since - {{ drinker.date_joined|date:"l, F j Y" }}
    - ({% timeago drinker.date_joined %}) -
    Last Drink - {{ last_drink.time|date:"l, F j Y" }}
    - ({% timeago last_drink.time%}) -
    -
    - -
    - {% if not stats.total_pours %} - Looks like {{ drinker }} has never poured a drink. Boo! - {% else %} - - - {% if kbsite.volume_display_units == 'metric' %} - - {% else %} - - {% endif %} - - - - - {% if kbsite.volume_display_units == 'metric' %} - - {% else %} - - {% endif %} - - -
    total liters, by day of weektotal pints, by day of week{% chart sessions_by_weekday stats 350 100 %}
    all sessions, by liter per sessionall sessions, by pints per session{% chart sessions_by_volume stats 350 100 %}
    - {% endif %} -
    - - {% if chunk %} -
    - - {% with chunk.session as session %} - {% include "kegweb/keg-session.html" %} - {% endwith %} - -
    - {% endif %} - - {% if largest_session %} -
    - - {% with largest_session as session %} - {% include "kegweb/keg-session.html" %} - {% endwith %} - -
    - {% endif %} -
    - - {% for drink in drinks %} -
    -
    - {% mugshot_box drink.user 48 %} -
    -
    -
    - - {% drinker_name drink.user %} poured - {% volume drink.volume_ml badge %} - of {{ drink.keg.type.name }} - - - {% timeago drink.time %} - -
    - {% with drink.picture as pic %} - {% if pic %} -

    - - - - - {% endif %} - {% endwith %} - {% if drink.shout %} - {% include 'kegweb/includes/drink_shout.html' %} - {% endif %} -
    -
    -
    - {% endfor %} - -
    - -
    -
    -
    - -{% endblock %} - - -{% block kb-extrajs %} - -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/drinker_sessions.html b/pykeg/web/kegweb/templates/kegweb/drinker_sessions.html deleted file mode 100644 index 56b6827b0..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinker_sessions.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Drinker Sessions: {{ drinker.username }} | {{ block.super }}{% endblock %} -{% block pagetitle %}Drinker Sessions: {{ drinker.username }}{% endblock %} - -{% block content %} -
    -
    - {% with drinker as user %} - {% mugshot_box user %} - {% endwith %} -
    - Back to Drinker Details -


    -
    - -
    - {% if chunks %} - {% for chunk in chunks %} - {% with chunk.session as session %} - {% include "kegweb/keg-session.html" %} - {% endwith %} - {% endfor %} - {% include "kegweb/_pagination.html" with page=chunks %} - {% endif %} -
    -
    - -{% endblock %} - diff --git a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive.html b/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive.html deleted file mode 100644 index 0e6eb6428..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "kegweb/drinkingsession_archive_base.html" %} - -{% block title %}Sessions | {{ block.super }}{% endblock %} -{% block pagetitle %}Sessions{% endblock %} - -{% block session-right %} -
      - {% for d in date_list %} -
    • - {{d.year}} -
    • - {% endfor %} -
    -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_base.html b/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_base.html deleted file mode 100644 index f9e65978f..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_base.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block content %} -
    -
    -{% for session in sessions %} - {% include "kegweb/keg-session.html" %} -{% endfor %} -
    - -{% block session-right-hide %} -
    -
    -

    All Sessions

    - {% block session-right %} - {% endblock %} -
    -
    -{% endblock %} - -
    - -
    -
    -{% include "kegweb/_pagination.html" with page=page_obj %} -
    -
    - -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_day.html b/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_day.html deleted file mode 100644 index 40901fbf1..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_day.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "kegweb/drinkingsession_archive_base.html" %} - -{% block title %}Sessions: {{day|date:"F d, Y"}} | {{ block.super }}{% endblock %} -{% block pagetitle %}Sessions: {{day|date:"F d, Y"}}{% endblock %} - -{% block session-right-hide %}{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_month.html b/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_month.html deleted file mode 100644 index 27e642a07..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_month.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "kegweb/drinkingsession_archive_base.html" %} -{% load tz %} - -{% block title %}Sessions: {{month|date:"F Y"}} | {{ block.super }}{% endblock %} -{% block pagetitle %}Sessions: {{month|date:"F Y"}}{% endblock %} - -{% block session-right %} - -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_year.html b/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_year.html deleted file mode 100644 index 06ac9fb7d..000000000 --- a/pykeg/web/kegweb/templates/kegweb/drinkingsession_archive_year.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "kegweb/drinkingsession_archive_base.html" %} -{% load tz %} -{% block title %}Sessions: {{year.year}} | {{ block.super }}{% endblock %} -{% block pagetitle %}Sessions: {{year.year}}{% endblock %} - -{% block session-right %} - -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/fullscreen.html b/pykeg/web/kegweb/templates/kegweb/fullscreen.html deleted file mode 100644 index d3047cfa4..000000000 --- a/pykeg/web/kegweb/templates/kegweb/fullscreen.html +++ /dev/null @@ -1,167 +0,0 @@ -{% extends "skel.html" %} -{% load static kegweblib %} - -{% block title %}{{ kbsite.title }} (Fullscreen Mode){% endblock %} - -{% block kb-extracss %} - - - - -{% endblock %} - -{% block body %} - -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - - -
    - -
    -
    - -{% endblock %} - -{% block kb-extrajs %} - - - -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/includes/drink_shout.html b/pykeg/web/kegweb/templates/kegweb/includes/drink_shout.html deleted file mode 100644 index ea83da09d..000000000 --- a/pykeg/web/kegweb/templates/kegweb/includes/drink_shout.html +++ /dev/null @@ -1,5 +0,0 @@ -{% load kegweblib %} -
    -

    {{ drink.shout }}

    -{% drinker_name drink %}, during pour -
    -
    -
    \ No newline at end of file diff --git a/pykeg/web/kegweb/templates/kegweb/includes/tap_snapshot.html b/pykeg/web/kegweb/templates/kegweb/includes/tap_snapshot.html deleted file mode 100644 index 2acb80b21..000000000 --- a/pykeg/web/kegweb/templates/kegweb/includes/tap_snapshot.html +++ /dev/null @@ -1,63 +0,0 @@ -{% load kegweblib %} - -{% with tap.current_keg as keg %} - -{% if keg %} -
    -{% elif user.is_staff %} -
    -{% else %} -
    -{% endif %} - -
    - {% if keg.type and keg.type.picture %} -
    - {% else %} -
    - {% endif %} -

    - {% if keg %} - {{ keg.type.name }}
    - {{ tap.name }} - {% else %} - {{ tap.name }} - {% endif %} -

    - - {% if not keg %} -

    - Tap is offline{% if user.is_staff %} (click to manage){% endif %}. -

    - - {% else %} - {% progress_bar keg.percent_full %} -  {% volume keg.remaining_volume_ml %} remaining - - {% if tap.temperature_sensor %} - {% with tap.temperature_sensor.LastLog as temp %} - {% if temp %} - · {% temperature temp.temp %} - {% endif %} - {% endwith %} - {% endif %} - {% endif %} - -
    - - {% if keg.type and keg.type.picture %} - {% url "kb-keg" keg.id as keg_url %} -
    -
    - - - -
    -
    - {% endif %} - -
    -
    -{% endwith %} diff --git a/pykeg/web/kegweb/templates/kegweb/includes/timeline.html b/pykeg/web/kegweb/templates/kegweb/includes/timeline.html deleted file mode 100644 index f3e75095c..000000000 --- a/pykeg/web/kegweb/templates/kegweb/includes/timeline.html +++ /dev/null @@ -1,5 +0,0 @@ -{% with 'timeline' as gallery_id %} -{% for event in events %} -{% include 'kegweb/includes/timeline_event.html' %} -{% endfor %} -{% endwith %} \ No newline at end of file diff --git a/pykeg/web/kegweb/templates/kegweb/includes/timeline_event.html b/pykeg/web/kegweb/templates/kegweb/includes/timeline_event.html deleted file mode 100644 index f40de973d..000000000 --- a/pykeg/web/kegweb/templates/kegweb/includes/timeline_event.html +++ /dev/null @@ -1,80 +0,0 @@ -{% load kegweblib %} -{% load humanize %} - -{% if event.kind == 'drink_poured' %} -{% with event.drink as drink %} -
    -
    - {% mugshot_box event.user 48 %} -
    -
    -
    - - {% drinker_name event.user %} poured - {% volume drink.volume_ml badge %} - of {{ drink.keg.type.name }} - - - {% timeago event.time %} - -
    - {% with drink.picture as pic %} - {% if pic %} -

    - - - - - {% endif %} - {% endwith %} - {% if drink.shout %} - {% include 'kegweb/includes/drink_shout.html' %} - {% endif %} -
    -
    -
    -{% endwith %} - -{% elif event.kind == 'session_joined' %} -
    -
    - - {% drinker_name event.user %} started drinking - - - {% timeago event.time %} - -
    -
    -
    - -{% elif event.kind == 'keg_tapped' %} -
    -
    - - Keg {{ event.keg.id }} ({{ event.keg.type.name }}) was tapped. - - - {% timeago event.time %} - -
    -
    -
    - -{% elif event.kind == 'keg_ended' %} -
    -
    - - Keg {{ event.keg.id }} ({{ event.keg.type.name }}) was finished. - - - {% timeago event.time %} - -
    -
    -
    -{% endif %} - -

    \ No newline at end of file diff --git a/pykeg/web/kegweb/templates/kegweb/keg-session.html b/pykeg/web/kegweb/templates/kegweb/keg-session.html deleted file mode 100644 index 197ddb0e6..000000000 --- a/pykeg/web/kegweb/templates/kegweb/keg-session.html +++ /dev/null @@ -1,56 +0,0 @@ -{% load kegweblib %} - -

    -
    - -

    {{ session.GetTitle }}

    - -{% with session.get_stats as stats %} - -{% with session.get_non_highlighted_pictures as pictures %} -{% with session.get_highlighted_picture as highlight %} - -{% if highlight %} -
    -
    - {% gallery highlight "span12" gallery_id=session.id %} -
    -
    -
    -
    - {% include "kegweb/session-badges.html" %} -
    -
    -
    -
    - {% gallery pictures|slice:":5" "span2" gallery_id=session.id %} -
    -
    -
    -
    -{% else %} -
    -
    - {% include "kegweb/session-badges.html" %} -
    -
    -{% endif %} -{% endwith %} -{% endwith %} - -
    -
    -

    - - {{ session.start_time|date:"M j Y, P" }} - · - {{ session.summarize_drinkers|safe }} -

    -
    -
    - -
    -
    - -{% endwith %} diff --git a/pykeg/web/kegweb/templates/kegweb/keg-snapshot.html b/pykeg/web/kegweb/templates/kegweb/keg-snapshot.html deleted file mode 100644 index 624819e1e..000000000 --- a/pykeg/web/kegweb/templates/kegweb/keg-snapshot.html +++ /dev/null @@ -1,53 +0,0 @@ -{% load static kegweblib %} -{% with keg.current_tap as tap %} -{% url "kb-keg" keg.id as keg_url %} -
    -
    - - -
    -

    {{ keg.type.name }} {% if tap %}{{ tap.name }}{% endif %}

    - -
      -
    • -

      {% volume keg.served_volume %}

      - Poured -
    • -
    • - {% if keg.remaining_volume_ml > 0 and not keg.is_finished %} -

      {% volume keg.remaining_volume_ml %}

      - {% else %} -

      {% volume 0 %}

      - {% endif %} - Remaining -
    • - - {% if tap %} - {% if tap.temperature_sensor %} -
    • - {% if kbsite.temperature_display_units == "f" %} -

      {{ tap.Temperature.TempF|floatformat:1}} °F

      - {% else %} -

      {{ tap.Temperature.TempC|floatformat:1}} °C

      - {% endif %} - Temperature -
    • - {% endif %} - {% endif %} -
    - -
    -
    - -
    - -{% endwith %} diff --git a/pykeg/web/kegweb/templates/kegweb/keg_detail.html b/pykeg/web/kegweb/templates/kegweb/keg_detail.html deleted file mode 100644 index 6c58a4305..000000000 --- a/pykeg/web/kegweb/templates/kegweb/keg_detail.html +++ /dev/null @@ -1,140 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Keg {{ keg.id }} | {{ block.super }}{% endblock %} -{% block pagetitle %}Keg {{ keg.id }}{% endblock %} - -{% block content %} -
    -
    - - -
    -
    -
    - -

    - {{keg.type.name}} - {% if keg.type.producer %} - {{keg.type.producer}} - {% if user.is_staff %} - (edit beer) - {% endif %} - {% endif %} -

    - - {% if keg.current_tap %} - {% progress_bar keg.percent_full %} - {% endif %} - - {% include "kegweb/basic-badges.html" %} - - {% if keg.description %} -
    -

    {{ keg.description}}

    -
    - {% endif %} -
    -
    - -
    - - - - - - - - {% include "kegweb/basic-stats.html" %} - - {% if keg.spilled_volume > 0 %} - - - - - {% endif %} - - -
    Status - {% if keg.current_tap %} - Keg is online, and is {{ keg.keg_age.days }} - day{{keg.keg_age.days|pluralize}} old. - - {% if keg.is_empty %} - (empty) - {% else %} - ({{ keg.percent_full|floatformat:2 }}% full) - {% endif %} - - {% else %} - Keg is offline; it lasted {{ keg.keg_age.days }} - day{{keg.keg_age.days|pluralize}}. - {% endif %} -
    Total Spilled/Lost{% volume keg.spilled_volume %}
    -
    - -
    - - - - - - - - {% with keg.current_tap as tap %} - {% if tap and tap.temperature_sensor %} - - - - - {% endif %} - {% endwith %} - -
    Volume by Weekday{% chart volume_by_weekday stats 340 100 %}
    Temperature - {{ tap.Temperature.TempC|floatformat:1}}°C / - {{ tap.Temperature.TempF|floatformat:1}}°F
    - {% chart temp_sensor tap.temperature_sensor 340 60 %} -
    -
    - - {% if last_session %} -
    - {% for session in last_session %} - {% include "kegweb/keg-session.html" %} - {% endfor %} -
    - {% endif %} - -
    -
    - -
    - {% if stats %} -

    Top Users

    - {% chart users_by_volume stats 280 220 %}
    - - {% with keg.get_top_users as ranked_drinkers %} - {% include "kegweb/drinker-rank.html" %} - {% endwith %} - See All Keg Sessions - {% endif %} -
    -
    - -{% endblock %} - -{% block kb-extrajs %} - -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/keg_list.html b/pykeg/web/kegweb/templates/kegweb/keg_list.html deleted file mode 100644 index 4a92bbdcd..000000000 --- a/pykeg/web/kegweb/templates/kegweb/keg_list.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Keg List | {{ block.super }}{% endblock %} -{% block pagetitle %}Keg List{% endblock %} - -{% block content %} - -{% for keg in kegs %} -
    -
    - {% include "kegweb/keg-snapshot.html" %} -
    -
    -{% endfor %} - -{% include "kegweb/_pagination.html" with page=page_obj %} - -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/keg_sessions.html b/pykeg/web/kegweb/templates/kegweb/keg_sessions.html deleted file mode 100644 index 8fc7b075a..000000000 --- a/pykeg/web/kegweb/templates/kegweb/keg_sessions.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Keg {{ keg.id }}: Sessions | {{ block.super }}{% endblock %} -{% block pagetitle %}Keg {{ keg.id }}: Sessions{% endblock %} - -{% block content %} -
    -
    - {% if sessions %} - {% for session in sessions %} - {% include "kegweb/keg-session.html" %} - {% endfor %} - {% include "kegweb/_pagination.html" with page=sessions %} - {% endif %} -
    - -
    -

    Top Users

    - {% chart users_by_volume stats 280 220 %}
    - - {% with keg.get_top_users as ranked_drinkers %} - {% include "kegweb/drinker-rank.html" %} - {% endwith %} - Back to Keg Detail -
    - -
    - -{% endblock %} - diff --git a/pykeg/web/kegweb/templates/kegweb/members_only.html b/pykeg/web/kegweb/templates/kegweb/members_only.html deleted file mode 100644 index f5bb43039..000000000 --- a/pykeg/web/kegweb/templates/kegweb/members_only.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Access Denied: Members Only | {{ block.super }}{% endblock %} -{% block pagetitle %}Access Denied{% endblock %} - -{% block content %} -

    -You need to log in as a registered drinker in order to see this content. -

    -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/mugshot_box.html b/pykeg/web/kegweb/templates/kegweb/mugshot_box.html deleted file mode 100644 index 43d2127d5..000000000 --- a/pykeg/web/kegweb/templates/kegweb/mugshot_box.html +++ /dev/null @@ -1,24 +0,0 @@ -{% load static %} -{% spaceless %} -
    - -{% if user %} - -{% endif %} - - - - -
    -{% endspaceless %} diff --git a/pykeg/web/kegweb/templates/kegweb/picture-gallery.html b/pykeg/web/kegweb/templates/kegweb/picture-gallery.html deleted file mode 100644 index 382a02261..000000000 --- a/pykeg/web/kegweb/templates/kegweb/picture-gallery.html +++ /dev/null @@ -1,15 +0,0 @@ -
      - -{% for pic in gallery_pictures %} -{% with pic.get_caption as caption %} -
    • - - {{ caption }} - -
    • -{% endwith %} -{% endfor %} - - -
    diff --git a/pykeg/web/kegweb/templates/kegweb/session-badges.html b/pykeg/web/kegweb/templates/kegweb/session-badges.html deleted file mode 100644 index 01a5ef51d..000000000 --- a/pykeg/web/kegweb/templates/kegweb/session-badges.html +++ /dev/null @@ -1,9 +0,0 @@ -{% load kegweblib %} -
      -{% if stats.total_volume_ml %} -{% badge stats.total_pours "Pour" do_pluralize=True style="badge-small" %} -{% badge stats.total_volume_ml "Poured" is_volume=True style="badge-small" %} -{% badge stats.average_volume_ml "Avg Pour" is_volume=True style="badge-small" %} -{% endif %} -
    - diff --git a/pykeg/web/kegweb/templates/kegweb/session_detail.html b/pykeg/web/kegweb/templates/kegweb/session_detail.html deleted file mode 100644 index d32720870..000000000 --- a/pykeg/web/kegweb/templates/kegweb/session_detail.html +++ /dev/null @@ -1,85 +0,0 @@ -{% extends "page-twocol.html" %} -{% load kegweblib %} -{% load humanize %} - -{% block title %}{{ session.GetTitle }} | {{ block.super}}{% endblock %} -{% block pagetitle %} - {{ session.GetTitle }} - {{ session.start_time|date:"l, F jS, P" }} -{% endblock %} - -{% block col-1 %} - -{% with session.events.timeline as events %} -{% include 'kegweb/includes/timeline.html' %} -{% endwith %} - -{% endblock col-1 %} - - - -{% block col-2 %} - - - - - - - - - - - - - - - - - - - - - - -
    - Session Summary -
    Keg{{kegs|pluralize}} - {% for keg in kegs %} - Keg #{{ keg.id }} ({{ keg.type }})
    - {% endfor %} -
    Total - {{ session.drinks.count }} pours, - {% volume session.volume_ml %} -
    Drinkers - {{ stats.registered_drinkers|length }} - drinker{{ stats.registered_drinkers|length|pluralize }} -
    - -{% chart users_by_volume stats 300 250 %} -
    - -{% with session.UserChunksByVolume as chunks %} -{% if chunks %} - - - - - - - - - {% for chunk in session.UserChunksByVolume %} - - - - - {% endfor %} - -
    - Drinker - - Volume -
    {% drinker_name chunk.user %}{% volume chunk.volume_ml %}
    -{% endif %} -{% endwith %} -{% endblock col-2 %} diff --git a/pykeg/web/kegweb/templates/kegweb/staff_only.html b/pykeg/web/kegweb/templates/kegweb/staff_only.html deleted file mode 100644 index be69dbf29..000000000 --- a/pykeg/web/kegweb/templates/kegweb/staff_only.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Kegbot Access Denied: Admins Only{% endblock %} -{% block pagetitle %}Access Denied{% endblock %} - -{% block content %} -

    -You need to log in as a site admin in order to see this content. -

    -{% endblock %} diff --git a/pykeg/web/kegweb/templates/kegweb/system-stats.html b/pykeg/web/kegweb/templates/kegweb/system-stats.html deleted file mode 100644 index 0eb11a1c4..000000000 --- a/pykeg/web/kegweb/templates/kegweb/system-stats.html +++ /dev/null @@ -1,70 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}System Stats | {{ block.super }}{% endblock %} -{% block pagetitle %}System Stats{% endblock %} - -{% block content%} - -
    - -{% if not stats %} -
    -
    -

    No Stats.. yet.

    -

    - This place will be a lot more interesting once somebody has - poured a drink. -

    -
    -
    - -{% else %} -
    - - -
    -
    - {% include "kegweb/basic-badges.html" %} - - - {% include "kegweb/basic-stats.html" %} - -
    -
    - - {% if largest_session %} -
    - {% with largest_session as session %} - {% include "kegweb/keg-session.html" %} - {% endwith %} -
    - {% endif %} -
    -
    -{% endif %} - -
    - {% if stats %} -

    Top Drinkers

    - {% chart users_by_volume stats 280 220 %}
    - {% with top_drinkers as ranked_drinkers %} - {% include "kegweb/drinker-rank.html" %} - {% endwith %} - {% endif %} -
    - -
    - -{% endblock %} - -{% block kb-extrajs %} - -{% endblock %} diff --git a/pykeg/web/kegweb/templatetags/__init__.py b/pykeg/web/kegweb/templatetags/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pykeg/web/kegweb/templatetags/kegweblib.py b/pykeg/web/kegweb/templatetags/kegweblib.py deleted file mode 100644 index b1e2210b1..000000000 --- a/pykeg/web/kegweb/templatetags/kegweblib.py +++ /dev/null @@ -1,425 +0,0 @@ -import zoneinfo - -from django.conf import settings -from django.template import ( - Library, - Node, - TemplateSyntaxError, - Variable, - VariableDoesNotExist, -) -from django.template.defaultfilters import pluralize -from django.urls import reverse -from django.utils import timezone -from django.utils.safestring import mark_safe - -from pykeg.core import models -from pykeg.core.util import CtoF -from pykeg.util import kbjson, units -from pykeg.web.charts import charts - -register = Library() - - -@register.inclusion_tag("kegweb/mugshot_box.html", takes_context=True) -def mugshot_box(context, user, boxsize=0): - return { - "user": user, - "boxsize": boxsize, - "guest_info": context.get("guest_info", None), - "STATIC_URL": context.get("STATIC_URL"), - } - - -@register.inclusion_tag("kegweb/picture-gallery.html") -def gallery(picture_or_pictures, thumb_size="span2", gallery_id=""): - c = {} - if not hasattr(picture_or_pictures, "__iter__"): - c["gallery_pictures"] = [picture_or_pictures] - else: - c["gallery_pictures"] = picture_or_pictures - c["thumb_size"] = thumb_size - c["gallery_id"] = gallery_id - return c - - -@register.inclusion_tag("kegweb/badge.html") -def badge(amount, caption, style="", is_volume=False, do_pluralize=False): - if is_volume: - amount = mark_safe(VolumeNode.format(amount, "mL")) - if do_pluralize: - caption += pluralize(amount) - return { - "badge_amount": amount, - "badge_caption": caption, - "badge_style": style, - } - - -@register.inclusion_tag("kegweb/includes/progress_bar.html") -def progress_bar(progress_int, extra_css=""): - c = {} - try: - progress_int = max(int(progress_int), 0) - except ValueError: - progress_int = 0 - progress_int = min(progress_int, 100) - - c["progress_int"] = progress_int - c["extra_css"] = extra_css - if progress_int < 10: - bar_type = "bar-danger" - elif progress_int < 25: - bar_type = "bar-warning" - else: - bar_type = "bar-success" - c["bar_type"] = bar_type - return c - - -# navitem - - -@register.tag("navitem") -def navitem(parser, token): - """{% navitem [exact] %}""" - tokens = token.split_contents() - if len(tokens) < 3: - raise TemplateSyntaxError(f"{tokens[0]} requires at least 3 tokens") - return NavitemNode(*tokens[1:]) - - -class NavitemNode(Node): - def __init__(self, *args): - self._viewname = args[0] - self._title = args[1] - self._exact = "exact" in args[2:] - - def render(self, context): - viewname = Variable(self._viewname).resolve(context) - title = Variable(self._title).resolve(context) - if viewname.startswith("/"): - urlbase = viewname - else: - urlbase = reverse(viewname) - - request_path = context["request_path"] - - if self._exact: - active = request_path == urlbase - else: - active = request_path.startswith(urlbase) - if active: - res = '<li class="active">' - else: - res = "<li>" - res += f'<a href="{urlbase}">{title}</a></li>' - return res - - -# timeago - - -@register.tag("timeago") -def timeago(parser, token): - """{% timeago <timestamp> %}""" - tokens = token.contents.split() - if len(tokens) != 2: - raise TemplateSyntaxError(f"{tokens[0]} requires 2 tokens") - return TimeagoNode(tokens[1]) - - -class TimeagoNode(Node): - def __init__(self, timestamp_varname): - self._timestamp_varname = timestamp_varname - - def render(self, context): - tv = Variable(self._timestamp_varname) - ts = tv.resolve(context) - - # Try to set time zone information. - if settings.TIME_ZONE and not settings.USE_TZ: - try: - tz = zoneinfo.ZoneInfo(settings.TIME_ZONE) - ts = ts.replace(tzinfo=tz) - except zoneinfo.ZoneInfoNotFoundError: - pass - - iso = ts.isoformat() - alt = timezone.localtime(ts).strftime("%A, %B %d, %Y %I:%M%p") - return f'<abbr class="timeago" title="{iso}">{alt}</abbr>' - - -# temperature - - -@register.tag("temperature") -def temperature_tag(parser, token): - """{% temperature <temp_c> %}""" - tokens = token.contents.split() - if len(tokens) < 2: - raise TemplateSyntaxError(f"{tokens[0]} requires at least 2 tokens") - return TemperatureNode(tokens[1]) - - -class TemperatureNode(Node): - TEMPLATE = "%(amount)s° %(unit)s" - - def __init__(self, varname): - self.varname = varname - - def render(self, context): - v = Variable(self.varname) - try: - amount = v.resolve(context) - except VariableDoesNotExist, ValueError: - raise - amount = "unknown" - - unit = "C" - kbsite = models.KegbotSite.get() - if kbsite.temperature_display_units == "f": - unit = "F" - amount = CtoF(amount) - - return self.TEMPLATE % {"amount": amount, "unit": unit} - - -# volume - - -@register.tag("volume") -def volumetag(parser, token): - """{% volume <amount> %}""" - tokens = token.contents.split() - if len(tokens) < 2: - raise TemplateSyntaxError(f"{tokens[0]} requires at least 2 tokens") - return VolumeNode(tokens[1], tokens[2:]) - - -class VolumeNode(Node): - TEMPLATE = """ - <span class="hmeasure %(extra_css)s" title="%(title)s"> - <span class="num">%(amount)s</span> - <span class="unit">%(units)s</span> - </span>""".strip() - - def __init__(self, volume_varname, extra_args): - self._volume_varname = volume_varname - self._extra_args = extra_args - - def render(self, context): - tv = Variable(self._volume_varname) - try: - num = float(tv.resolve(context)) - except VariableDoesNotExist, ValueError: - num = "unknown" - unit = "mL" - make_badge = "badge" in self._extra_args - return self.format(num, unit, make_badge) - - @classmethod - def format(cls, amount, units, make_badge=False): - if amount < 0: - amount = 0 - ctx = { - "units": units, - "amount": amount, - "title": f"{amount} {units}", - "extra_css": "badge " if make_badge else "", - } - return cls.TEMPLATE % ctx - - -# drinker - - -@register.tag("drinker_name") -def drinker_name_tag(parser, token): - """{% drinker_name <drink_or_user_obj> [nolink] %}""" - tokens = token.contents.split() - if len(tokens) < 2: - raise TemplateSyntaxError(f"{tokens[0]} requires at least 2 tokens") - return DrinkerNameNode(tokens[1], tokens[2:]) - - -class DrinkerNameNode(Node): - def __init__(self, drink_varname, extra_args): - self._varname = drink_varname - self._extra_args = extra_args - - def render(self, context): - obj = Variable(self._varname) - try: - obj = obj.resolve(context) - except VariableDoesNotExist, ValueError: - obj = None - - user = None - if obj: - if isinstance(obj, models.Drink) or isinstance(obj, models.SystemEvent): - user = obj.user - elif isinstance(obj, models.User): - user = obj - if user: - if "nolink" in self._extra_args: - return user.get_full_name() - else: - return '<a href="{}">{}</a>'.format( - reverse("kb-drinker", args=[user.username]), - user.get_full_name(), - ) - return context["guest_info"]["name"] - - -# chart - - -@register.tag("chart") -def chart(parser, tokens): - """{% chart <charttype> <obj> width height %}""" - tokens = tokens.contents.split() - if len(tokens) < 4: - raise TemplateSyntaxError("chart requires at least 4 arguments") - charttype = tokens[1] - try: - width = int(tokens[-2]) - height = int(tokens[-1]) - except ValueError: - raise TemplateSyntaxError("invalid width or height") - args = tokens[2:-2] - return ChartNode(charttype, width, height, args) - - -class ChartNode(Node): - CHART_TMPL = """ - <!-- begin chart %(chart_id)s --> - <div id="chart-%(chart_id)s-container" - style="height: %(height)spx; width: %(width)spx;" - class="kb-chartbox"></div> - <script type="text/javascript"> - var chart_%(chart_id)s; - $(document).ready(function() { - var chart_data = %(chart_data)s; - chart_%(chart_id)s = new Highcharts.Chart(chart_data); - }); - </script> - <!-- end chart %(chart_id)s --> - - """ - ERROR_TMPL = """ - <!-- begin chart %(chart_id)s --> - <div id="chart-%(chart_id)s-container" - style="height: %(height)spx; width: %(width)spx;" - class="kb-chartbox-error"> - %(error_str)s - </div> - <!-- end chart %(chart_id)s --> - """ - - def __init__(self, charttype, width, height, args): - self._charttype = charttype - self._width = width - self._height = height - self._args = args - - self._chart_fn = getattr(charts, f"chart_{self._charttype}", None) - - def _get_chart_id(self, context): - # TODO(mikey): Is there a better way to store _CHART_ID? - if not hasattr(context, "_CHART_ID"): - context._CHART_ID = 0 - context._CHART_ID += 1 - return context._CHART_ID - - def show_error(self, error_str): - ctx = { - "error_str": error_str, - "chart_id": 0, - "width": self._width, - "height": self._height, - } - return ChartNode.ERROR_TMPL % ctx - - def render(self, context): - if not self._chart_fn: - return self.show_error(f"Unknown chart type: {self._charttype}") - - chart_id = self._get_chart_id(context) - obj = Variable(self._args[0]).resolve(context) - - metric_volumes = context.get("metric_volumes", False) - temperature_units = context.get("temperature_display_units", "f") - - try: - chart_result = self._chart_fn( - obj, metric_volumes=metric_volumes, temperature_units=temperature_units - ) - except charts.ChartError as e: - return self.show_error(str(e)) - - chart_base = { - "chart": { - "borderColor": "#eeeeff", - "borderWidth": 0, - "renderTo": f"chart-{chart_id}-container", - }, - "credits": { - "enabled": False, - }, - "legend": { - "enabled": False, - }, - "margin": [0, 0, 0, 0], - "title": { - "text": None, - }, - "yAxis": { - "labels": {"align": "left"}, - "title": { - "text": None, - }, - }, - } - - chart_data = chart_base - for k, v in list(chart_result.items()): - if k not in chart_data: - chart_data[k] = v - elif isinstance(v, dict): - chart_data[k].update(v) - else: - chart_data[k] = v - chart_data = kbjson.dumps(chart_data, indent=None) - - ctx = { - "chart_id": chart_id, - "width": self._width, - "height": self._height, - "chart_data": chart_data, - } - - return ChartNode.CHART_TMPL % ctx - - -@register.filter -def volume(text, fmt="pints"): - try: - vol = units.Quantity(float(text)) - except ValueError: - return text - if fmt == "pints": - res = vol.InPints() - elif fmt == "liters": - res = vol.InLiters() - elif fmt == "ounces": - res = vol.InOunces() - elif fmt == "gallons": - res = vol.InUSGallons() - elif fmt == "twelveounces": - res = vol.InTwelveOunceBeers() - elif fmt == "halfbarrels": - res = vol.InHalfBarrelKegs() - else: - raise TemplateSyntaxError(f"Unknown volume format: {fmt}") - return float(res) diff --git a/pykeg/web/kegweb/templatetags/paginator_tags.py b/pykeg/web/kegweb/templatetags/paginator_tags.py deleted file mode 100644 index b7f497f25..000000000 --- a/pykeg/web/kegweb/templatetags/paginator_tags.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Template helpers for rendering Django Paginator pages. - -Replaces the unmaintained django-bootstrap-pagination package with Django's -own Paginator (see kegweb/_pagination.html for the Bootstrap 3 markup). -""" - -from django import template - -register = template.Library() - - -@register.simple_tag -def elided_page_range(page, on_each_side=2, on_ends=1): - """Return a windowed page range (with ELLIPSIS markers) for a Page.""" - return page.paginator.get_elided_page_range( - page.number, on_each_side=on_each_side, on_ends=on_ends - ) diff --git a/pykeg/web/kegweb/urls.py b/pykeg/web/kegweb/urls.py deleted file mode 100644 index d60bdfd7c..000000000 --- a/pykeg/web/kegweb/urls.py +++ /dev/null @@ -1,51 +0,0 @@ -from django.urls import path - -from . import views - -urlpatterns = [ - # main page - path("", views.index, name="kb-home"), - # stats - path("stats/", views.system_stats, name="kb-stats"), - # kegs - path("kegs/", views.KegListView.as_view(), name="kb-kegs"), - path("kegs/<int:keg_id>/", views.keg_detail, name="kb-keg"), - path("kegs/<int:keg_id>/sessions/", views.keg_sessions, name="kb-keg-sessions"), - # fullscreen mode - path("fullscreen/", views.fullscreen, name="kb-fullscreen"), - # drinkers - path("drinkers/<str:username>/", views.user_detail, name="kb-drinker"), - path( - "drinkers/<str:username>/sessions/", - views.drinker_sessions, - name="kb-drinker-sessions", - ), - # drinks - path("drinks/<int:drink_id>/", views.drink_detail, name="kb-drink"), - path("drink/<int:drink_id>/", views.short_drink_detail), - path("d/<int:drink_id>/", views.short_drink_detail, name="kb-drink-short"), - # sessions - path("session/<int:session_id>/", views.short_session_detail), - path("s/<int:session_id>/", views.short_session_detail, name="kb-session-short"), - path("sessions/", views.SessionArchiveIndexView.as_view(), name="kb-sessions"), - path( - "sessions/<int:year>/", - views.SessionYearArchiveView.as_view(), - name="kb-sessions-year", - ), - path( - "sessions/<int:year>/<int:month>/", - views.SessionMonthArchiveView.as_view(month_format="%m"), - name="kb-sessions-month", - ), - path( - "sessions/<int:year>/<int:month>/<int:day>/", - views.SessionDayArchiveView.as_view(month_format="%m"), - name="kb-sessions-day", - ), - path( - "sessions/<int:year>/<int:month>/<int:day>/<int:pk>/", - views.SessionDateDetailView.as_view(month_format="%m"), - name="kb-session-detail", - ), -] diff --git a/pykeg/web/kegweb/views.py b/pykeg/web/kegweb/views.py deleted file mode 100644 index bfb48bf8b..000000000 --- a/pykeg/web/kegweb/views.py +++ /dev/null @@ -1,267 +0,0 @@ -"""Kegweb main views.""" - -from django.contrib import messages -from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator -from django.shortcuts import get_object_or_404, redirect, render -from django.views.decorators.cache import cache_page -from django.views.generic.dates import ( - ArchiveIndexView, - DateDetailView, - DayArchiveView, - MonthArchiveView, - YearArchiveView, -) -from django.views.generic.list import ListView - -from pykeg.core import models -from pykeg.web.kegweb import forms - -# main views - - -@cache_page(30) -def index(request): - context = {} - - context["taps"] = models.KegTap.objects.all() - context["events"] = models.SystemEvent.objects.timeline()[:20] - sessions = models.DrinkingSession.objects.all().order_by("-id")[:10] - context["sessions"] = sessions - - if sessions: - last_session = sessions[0] - context["most_recent_session"] = last_session - if sessions and last_session.IsActiveNow(): - context["current_session"] = last_session - - return render(request, "index.html", context=context) - - -@cache_page(30) -def system_stats(request): - stats = models.KegbotSite.get().get_stats() - context = { - "stats": stats, - } - - top_drinkers = [] - for username, vol in list(stats.get("volume_by_drinker", {}).items()): - try: - user = models.User.objects.get(username=username) - except models.User.DoesNotExist: - continue # should not happen - top_drinkers.append((vol, user)) - top_drinkers.sort(reverse=True) - - largest_session_id = stats.get("largest_session", {}).get("session_id", None) - if largest_session_id: - try: - context["largest_session"] = models.DrinkingSession.objects.get(pk=largest_session_id) - except models.DrinkingSession.DoesNotExist: - # Stats out of date. - pass - - context["top_drinkers"] = top_drinkers[:10] - - return render(request, "kegweb/system-stats.html", context=context) - - -# object lists and detail (generic views) - - -def user_detail(request, username): - user = get_object_or_404(models.User, username=username) - stats = user.get_stats() - drinks = user.drinks.all() - - context = { - "drinks": drinks, - "stats": stats, - "drinker": user, - } - - largest_session_id = stats.get("largest_session", {}).get("session_id", None) - if largest_session_id: - context["largest_session"] = models.DrinkingSession.objects.get(pk=largest_session_id) - - return render(request, "kegweb/drinker_detail.html", context=context) - - -class KegListView(ListView): - model = models.Keg - template_name = "kegweb/keg_list.html" - context_object_name = "kegs" - paginate_by = 10 - - def get_queryset(self): - return models.Keg.objects.all().order_by("-id") - - -def fullscreen(request): - context = {} - taps = models.KegTap.objects.all() - active_taps = [t for t in taps if t.current_keg] - pages = [active_taps[i : i + 4] for i in range(0, len(active_taps), 4)] - context["pages"] = pages - - return render(request, "kegweb/fullscreen.html", context=context) - - -@cache_page(30) -def keg_detail(request, keg_id): - keg = get_object_or_404(models.Keg, id=keg_id) - sessions = keg.get_sessions() - last_session = sessions[:1] - - context = { - "keg": keg, - "stats": keg.get_stats(), - "sessions": sessions, - "last_session": last_session, - } - return render(request, "kegweb/keg_detail.html", context=context) - - -def short_drink_detail(request, drink_id): - return redirect("kb-drink", drink_id=str(drink_id), permanent=True) - - -def short_session_detail(request, session_id): - session = get_object_or_404(models.DrinkingSession, id=session_id) - url = session.get_absolute_url() - return redirect(url, permanent=True) - - -def drink_detail(request, drink_id): - drink = get_object_or_404(models.Drink, id=drink_id) - context = { - "drink": drink, - } - - can_delete = (request.user == drink.user) or request.user.is_staff - - if can_delete: - picture_form = forms.DeletePictureForm(initial={"picture": drink.picture}) - else: - picture_form = None - - if request.method == "POST": - if can_delete: - picture_form = forms.DeletePictureForm(request.POST) - if picture_form.is_valid(): - drink.picture.erase_and_delete() - picture_form = None - messages.success(request, "Erased image.") - else: - messages.error(request, "request not valid: " + str(picture_form.errors)) - else: - messages.error(request, "No permission to delete picture.") - return redirect("kb-drink", drink_id=str(drink_id)) - - context["picture_form"] = picture_form - return render(request, "kegweb/drink_detail.html", context=context) - - -def drinker_sessions(request, username): - user = get_object_or_404(models.User, username=username) - stats = user.get_stats() - drinks = user.drinks.all() - - chunks = ( - models.Stats.objects.filter( - user=user, keg__isnull=True, session__isnull=False, is_first=True - ) - .order_by("-id") - .select_related("session") - ) - - paginator = Paginator(chunks, 5) - - page = request.GET.get("page") - try: - chunks = paginator.page(page) - except PageNotAnInteger: - chunks = paginator.page(1) - except EmptyPage: - chunks = paginator.page(paginator.num_pages) - - context = { - "drinks": drinks, - "chunks": chunks, - "stats": stats, - "drinker": user, - } - - return render(request, "kegweb/drinker_sessions.html", context=context) - - -def keg_sessions(request, keg_id): - keg = get_object_or_404(models.Keg, id=keg_id) - sessions = keg.get_sessions() - - paginator = Paginator(sessions, 5) - - page = request.GET.get("page") - try: - sessions = paginator.page(page) - except PageNotAnInteger: - sessions = paginator.page(1) - except EmptyPage: - sessions = paginator.page(paginator.num_pages) - - context = { - "keg": keg, - "stats": keg.get_stats(), - "sessions": sessions, - } - return render(request, "kegweb/keg_sessions.html", context=context) - - -class SessionArchiveIndexView(ArchiveIndexView): - model = models.DrinkingSession - date_field = "start_time" - template_name = "kegweb/drinkingsession_archive.html" - context_object_name = "sessions" - paginate_by = 20 - - -class SessionYearArchiveView(YearArchiveView): - model = models.DrinkingSession - date_field = "start_time" - template_name = "kegweb/drinkingsession_archive_year.html" - make_object_list = True - context_object_name = "sessions" - paginate_by = 20 - - -class SessionMonthArchiveView(MonthArchiveView): - model = models.DrinkingSession - date_field = "start_time" - template_name = "kegweb/drinkingsession_archive_month.html" - make_object_list = True - context_object_name = "sessions" - paginate_by = 20 - - -class SessionDayArchiveView(DayArchiveView): - model = models.DrinkingSession - date_field = "start_time" - template_name = "kegweb/drinkingsession_archive_day.html" - make_object_list = True - context_object_name = "sessions" - paginate_by = 20 - - -class SessionDateDetailView(DateDetailView): - model = models.DrinkingSession - date_field = "start_time" - template_name = "kegweb/session_detail.html" - context_object_name = "session" - - def get_context_data(self, **kwargs): - """Adds `stats` to the context.""" - ret = super().get_context_data(**kwargs) - stats = ret[self.context_object_name].get_stats() - ret["stats"] = stats - ret["kegs"] = [models.Keg.objects.get(pk=pk) for pk in stats.get("keg_ids", [])] - return ret diff --git a/pykeg/web/middleware.py b/pykeg/web/middleware.py index 619b06452..3bfc19cbd 100644 --- a/pykeg/web/middleware.py +++ b/pykeg/web/middleware.py @@ -1,9 +1,7 @@ import logging -from django.conf import settings from django.db import connection -from django.http import HttpResponse, JsonResponse -from django.shortcuts import render +from django.http import JsonResponse from django.utils import timezone from pykeg.core import models @@ -14,28 +12,6 @@ logger = logging.getLogger(__name__) -# Requests are always allowed for these path prefixes. -PRIVACY_EXEMPT_PATHS = ( - "/account/activate", - "/accounts/", - "/admin/", - "/media/", - "/setup/", - "/sso/login", - "/sso/logout", - # Both apis enforce their own privacy rules. - "/api/", -) - -PRIVACY_EXEMPT_PATHS += getattr(settings, "KEGBOT_EXTRA_PRIVACY_EXEMPT_PATHS", ()) - - -def _path_allowed(path, kbsite): - for p in PRIVACY_EXEMPT_PATHS: - if path.startswith(p): - return True - return False - class CurrentRequestMiddleware: """Set/clear the current request.""" @@ -102,16 +78,15 @@ def __call__(self, request): request.need_upgrade = False request.kbsite = None - # Skip all checks if we're in the setup wizard. - if request.path.startswith("/setup"): - # On a fresh install the session table doesn't exist yet, so a real - # session read/write would crash; stub it out until migrations (run - # in the wizard's first step) create the table. Once it exists, keep - # the real session so the wizard can log the new admin in. + # On a fresh install the session table doesn't exist yet, so a + # real session read/write would crash; stub it out for the setup + # api until migrations (run in the first setup step) create the + # table. Once it exists, keep the real session so setup can log + # the new admin in. + if request.path.startswith("/api/setup"): if "django_session" not in connection.introspection.table_names(): request.session = {} request.session["_auth_user_backend"] = None - return self.get_response(request) # First confirm the database is working. try: @@ -146,37 +121,36 @@ def __call__(self, request): return self.get_response(request) def process_view(self, request, view_func, view_args, view_kwargs): + """Gates API requests while setup/upgrade is required. + + Only API paths are intercepted (with a JSON 403 the frontend + understands); everything else falls through to the SPA shell, + which reads the same signal from its boot request and renders + the setup flow. + """ if is_api_v1_request(request): - # API endpoints handle "setup required" differently. + # The legacy API handles "setup required" differently. return None if request.path.startswith("/api/setup"): # The setup API is how the frontend performs setup/upgrade. return None - if request.need_setup: - return self._setup_required(request) - elif request.need_upgrade: - return self._upgrade_required(request) - - return None + if not request.path.startswith("/api/"): + return None - def _setup_required(self, request): - if request.path.startswith("/api/"): + if request.need_setup: return JsonResponse({"error": "setup_required"}, status=403) - return render(request, "setup_wizard/setup_required.html", status=403) - - def _upgrade_required(self, request): - installed_version = getattr(request, "installed_version_string", None) - if request.path.startswith("/api/"): + elif request.need_upgrade: return JsonResponse( - {"error": "upgrade_required", "installed_version": installed_version}, + { + "error": "upgrade_required", + "installed_version": getattr(request, "installed_version_string", None), + }, status=403, ) - context = { - "installed_version": installed_version, - } - return render(request, "setup_wizard/upgrade_required.html", context=context, status=403) + + return None class KegbotSiteMiddleware: @@ -191,41 +165,3 @@ def __call__(self, request): ) return self.get_response(request) - - -class PrivacyMiddleware: - """Enforces site privacy settings. - - Must be installed after ApiRequestMiddleware (in request order) to - access is_api_v1_request attribute. - """ - - def __init__(self, get_response): - self.get_response = get_response - - def __call__(self, request): - return self.get_response(request) - - def process_view(self, request, view_func, view_args, view_kwargs): - if not hasattr(request, "kbsite"): - return None - elif _path_allowed(request.path, request.kbsite): - return None - elif request.is_api_v1_request: - # api.middleware will enforce access requirements. - return None - - privacy = request.kbsite.privacy - - if privacy == "public": - return None - elif privacy == "staff": - if not request.user.is_staff: - return render(request, "kegweb/staff_only.html", status=401) - return None - elif privacy == "members": - if not request.user.is_authenticated or not request.user.is_active: - return render(request, "kegweb/members_only.html", status=401) - return None - - return HttpResponse(f"Server misconfigured, unknown privacy setting:{privacy}", status=500) diff --git a/pykeg/web/setup_wizard/__init__.py b/pykeg/web/setup_wizard/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/pykeg/web/setup_wizard/forms.py b/pykeg/web/setup_wizard/forms.py deleted file mode 100644 index 6968c2f5c..000000000 --- a/pykeg/web/setup_wizard/forms.py +++ /dev/null @@ -1,93 +0,0 @@ -from crispy_forms.bootstrap import FormActions -from crispy_forms.helper import FormHelper -from crispy_forms.layout import Field, Layout, Submit -from django import forms - -from pykeg.core import models - - -class MiniSiteSettingsForm(forms.ModelForm): - class Meta: - model = models.KegbotSite - fields = ( - "title", - "privacy", - "timezone", - "volume_display_units", - "temperature_display_units", - ) - widgets = { - "privacy": forms.RadioSelect(), - "volume_display_units": forms.RadioSelect(), - "temperature_display_units": forms.RadioSelect(), - } - - helper = FormHelper() - helper.form_class = "setup-form span8 offset2" - helper.layout = Layout( - Field("title", css_class="span12"), - Field("privacy", css_class="span12"), - Field("timezone", css_class="span12"), - Field("volume_display_units", css_class="span12"), - Field("temperature_display_units", css_class="span12"), - FormActions( - Submit("save_changes", "Continue", css_class="btn-primary"), - ), - ) - - -class AdminUserForm(forms.Form): - username = forms.RegexField( - label="Username", - max_length=30, - regex=r"^[\w-]+$", - help_text="Your username: 30 characters or fewer. Alphanumeric characters only (letters, digits, hyphens and underscores).", - error_messages={ - "invalid": "Must contain only letters, numbers, hyphens and underscores.", - "required": "Provide a username.", - }, - ) - - password = forms.CharField(widget=forms.PasswordInput()) - confirm_password = forms.CharField(widget=forms.PasswordInput()) - email = forms.EmailField(help_text="In case you lose your password.") - - helper = FormHelper() - helper.form_class = "setup-form span8 offset2" - helper.layout = Layout( - Field("username", css_class="span12"), - Field("email", css_class="span12"), - Field("password", css_class="span12"), - Field("confirm_password", css_class="span12"), - FormActions( - Submit("save_changes", "Continue", css_class="btn-primary"), - ), - ) - - def clean_confirm_password(self): - orig = self.cleaned_data.get("password") - confirm = self.cleaned_data.get("confirm_password") - if orig and confirm and orig != confirm: - raise forms.ValidationError("Passwords must match!") - return confirm - - def clean_username(self): - username = self.cleaned_data.get("username") - if username: - try: - models.User.objects.get(username=username) - raise forms.ValidationError("Sorry, this username is taken already?!") - except models.User.DoesNotExist: - pass # expected - return username - - def save(self): - u = models.User() - u.username = self.cleaned_data.get("username") - u.email = self.cleaned_data.get("email") - u.is_staff = True - u.is_superuser = True - u.save() - u.set_password(self.cleaned_data.get("password")) - u.save() - return u diff --git a/pykeg/web/setup_wizard/setup_wizard_tests.py b/pykeg/web/setup_wizard/setup_wizard_tests.py deleted file mode 100644 index 84017e8c1..000000000 --- a/pykeg/web/setup_wizard/setup_wizard_tests.py +++ /dev/null @@ -1,69 +0,0 @@ -"""Unittests for setup wizard.""" - -from django.core.cache import cache -from django.test import TransactionTestCase -from django.test.utils import override_settings -from django.urls import reverse - -from pykeg.core import defaults, models - - -class SetupWizardTestCase(TransactionTestCase): - def setUp(self): - cache.clear() - - def test_settings_debug_false(self): - """Verify wizard is not offered (DEBUG is False).""" - for path in ("/", "/stats/"): - response = self.client.get(path) - self.assertContains(response, "<h2>Kegbot Offline</h2>", status_code=403) - self.assertNotContains(response, "Start Setup", status_code=403) - - response = self.client.get("/setup/") - self.assertEqual(response.status_code, 404) - - @override_settings(DEBUG=True) - def test_settings_debug_true(self): - """Verify wizard is offered (DEBUG is True).""" - for path in ("/", "/stats/"): - response = self.client.get(path) - self.assertContains(response, "<h2>Setup Required</h2>", status_code=403) - self.assertContains(response, "Start Setup", status_code=403) - - response = self.client.get("/setup/") - self.assertEqual(response.status_code, 200) - - @override_settings(DEBUG=True) - def test_admin_step_logs_in_new_admin(self): - """The admin-user step creates the admin and logs them in.""" - defaults.set_defaults() # site exists but is not yet set up - - response = self.client.post( - reverse("setup_admin"), - { - "username": "wizadmin", - "email": "admin@example.com", - "password": "s3cret-pass", - "confirm_password": "s3cret-pass", - }, - ) - self.assertRedirects(response, reverse("setup_finish"), fetch_redirect_response=False) - - admin = models.User.objects.get(username="wizadmin") - self.assertTrue(admin.is_superuser) - # The freshly-created admin should now be authenticated. - self.assertEqual(str(admin.pk), self.client.session.get("_auth_user_id")) - - def test_setup_not_shown(self): - """Verify wizard is not shown on set-up site.""" - site = defaults.set_defaults() - site.is_setup = True - site.save() - for path in ("/", "/stats/"): - response = self.client.get(path) - self.assertNotContains(response, "<h2>Kegbot Offline</h2>", status_code=200) - self.assertNotContains(response, "<h2>Setup Required</h2>", status_code=200) - self.assertNotContains(response, "Start Setup", status_code=200) - - response = self.client.get("/setup/") - self.assertEqual(response.status_code, 404) diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/accounts.html b/pykeg/web/setup_wizard/templates/setup_wizard/accounts.html deleted file mode 100644 index d1a00aba6..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/accounts.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "setup_wizard/base.html" %} -{% load crispy_forms_tags %} - -{% block content %} -<div class="jumbotron"> - -<h2>Sharing your Kegbot?</h2> -<p class="lead"> -Should we enable user tracking, which allows you to link pours to individual -user accounts? -</p> - -<div class="row-fluid"> - <div class="span8 offset2"> - <form action="" method="POST">{% csrf_token %} - - <p> - <input type="submit" name="enable_users" value="Enable User Tracking »" - class="btn btn-primary btn-success btn-block" id="submit-id-enable_users"> - <span class="muted">Classic mode: Enable tracking.</span> - </p> - - <br/> - - <p> - <input type="submit" name="disable_users" value="Anonymous Mode »" - class="btn btn-primary btn-info btn-block" id="submit-id-disable_users"> - <span class="muted">Tracking features are hidden.</span> - </p> - - </form> - </div> -</div> - -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/admin.html b/pykeg/web/setup_wizard/templates/setup_wizard/admin.html deleted file mode 100644 index 3ecbd215b..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/admin.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "setup_wizard/base.html" %} -{% load crispy_forms_tags %} - -{% block content %} -<div class="jumbotron"> - -<h2>Kegbot Setup: Create Admin User</h2> -<p class="lead"> - That's you! -</> -</div> - -<div class="row-fluid"> - {% crispy form %} -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/base.html b/pykeg/web/setup_wizard/templates/setup_wizard/base.html deleted file mode 100644 index e7514da55..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/base.html +++ /dev/null @@ -1,87 +0,0 @@ -{% extends "skel.html" %} - -{% block css %} -{{ block.super }} -<style type="text/css"> - body { - padding-top: 20px; - padding-bottom: 40px; - } - - /* Custom container */ - .container-narrow { - margin: 0 auto; - max-width: 700px; - } - .container-narrow > hr { - margin: 30px 0; - } - - .jumbotron { - margin: 60px 0; - text-align: center; - } - .jumbotron h1 { - font-size: 72px; - line-height: 1; - } - .jumbotron .btn { - font-size: 21px; - padding: 14px 24px; - } - - .marketing { - margin: 60px 0; - } - .marketing p + h4 { - margin-top: 28px; - } -</style> - -{% endblock css %} - -{% block body %} -<div class="container-narrow"> - -<div class="masthead"> - {% comment %} - <ul class="nav nav-pills pull-right"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">About</a></li> - <li><a href="#">Contact</a></li> - </ul> - <h3 class="muted">Kegbot</h3> - {% endcomment %} -</div> - -<hr> - -{% block messages %} -{% for message in messages %} - <div class="alert alert-{{message.tags}}"> - <a class="close" data-dismiss="alert" href="#">×</a> - <p> - {{message}} - </p> - </div> -{% endfor %} -{% endblock messages %} - -{% block content %} -{% endblock %} - -{% if error_stack %} -<div class="container"> - <div class="row-fluid"> - <div class="span10"> - <hr/> - <h3>Error logs</h3> - {% if error_message %}<h5>{{ error_message }}{% endif %} - <pre>{{ error_stack }}</pre> - </div> - </div> -</div> -{% endif %} - -</div> <!-- /container-narrow --> -{% endblock body %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/finish.html b/pykeg/web/setup_wizard/templates/setup_wizard/finish.html deleted file mode 100644 index 7cc377e19..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/finish.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "setup_wizard/base.html" %} -{% load crispy_forms_tags %} - -{% block content %} -<div class="jumbotron"> - -<h2>Kegbot Setup: Woot!</h2> -<p class="lead"> - You're done! Press <em>Finish</em> below to finish setup and activate the - your brand spankin' new Kegbot site. -</p> - -<p> - Now would also be a good time to set <code>KEGBOT_ENV=production</code> in your - settings. -</p> - -<p/> - -<form action="" method="POST"> - {% csrf_token %} - <input type="submit" class="btn btn-large btn-success" value="Finish!"/> -</form> - - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/mode.html b/pykeg/web/setup_wizard/templates/setup_wizard/mode.html deleted file mode 100644 index 154ad0309..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/mode.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "setup_wizard/base.html" %} -{% load crispy_forms_tags %} - -{% block content %} -<div class="jumbotron"> - -<h2>Kegbot Setup: Pick Mode</h2> -<p class="lead"> - Before you continue, what kind of Kegbot would you like?<br/> - (You can always change settings later.) -</p> - -<div class="row-fluid"> - <div class="span8 offset2"> - <form action="" method="POST">{% csrf_token %} - - <p> - <input type="submit" name="enable_sensing" value="Enable Sensors, Continue »" - class="btn btn-primary btn-success btn-block" id="submit-id-enable_sensing"> - <span class="muted">Classic mode: Enables features that require flow sensing hardware.</span> - </p> - - <br/> - - <p> - <input type="submit" name="disable_sensing" value="No Sensor Hardware, Continue »" - class="btn btn-primary btn-info btn-block" id="submit-id-disable_sensing"> - <span class="muted">Hides features that require flow sensing hardware.</span> - </p> - - </form> - </div> -</div> - -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/setup_required.html b/pykeg/web/setup_wizard/templates/setup_wizard/setup_required.html deleted file mode 100644 index 607658802..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/setup_required.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "setup_wizard/base.html" %} - -{% block content %} -<div class="jumbotron"> - -{% if DEBUG %} -<h2>Setup Required</h2> -<p class="lead"> - This Kegbot is not set up. Click to enter the setup wizard. -</p> -<a class="btn btn-large btn-success" href="{% url "setup_wizard_start" %}"> - Start Setup -</a> -{% else %} -<h2>Kegbot Offline</h2> -<p class="lead"> - This Kegbot is not set up. -</p> -<p class="muted"> - Hint: Set <code>DEBUG = True</code> in local settings and try again. -</p> -{% endif %} - -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/site_settings.html b/pykeg/web/setup_wizard/templates/setup_wizard/site_settings.html deleted file mode 100644 index aa51d6de7..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/site_settings.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "setup_wizard/base.html" %} -{% load crispy_forms_tags %} - -{% block content %} -<div class="jumbotron"> - -<h2>Kegbot Setup: General Settings</h2> -<p class="lead"> - Adjust the default site settings below. -</p> -<p class="muted"> - Don't worry, you can change all settings later, too. -</p> -</div> - -<div class="row-fluid"> - <div class="span12"> - {% crispy form %} - </div> -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/start.html b/pykeg/web/setup_wizard/templates/setup_wizard/start.html deleted file mode 100644 index cca0f4677..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/start.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "setup_wizard/base.html" %} -{% load crispy_forms_tags %} - -{% block content %} -<div class="jumbotron"> - -<h2>Kegbot Setup: Welcome</h2> -<p class="lead"> - {% if need_upgrade %} - Before you continue, please click below to upgrade your database. - {% elif need_install %} - Before you continue, please click below to perform database setup. - {% else %} - Please click below to continue with setup. - {% endif %} -</p> - -<div class="row-fluid"> - <div class="span8 offset2"> - <form action="" method="POST">{% csrf_token %} - - <p> - <input type="submit" name="db" - value="{% if need_install %}Install Database{% elif need_upgrade %}Upgrade Database{% else %}Continue{% endif %}" - class="btn btn-primary btn-success btn-block" id="submit-id-db"> - </p> - - </form> - </div> -</div> -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/upgrade.html b/pykeg/web/setup_wizard/templates/setup_wizard/upgrade.html deleted file mode 100644 index ec384b0e7..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/upgrade.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends "setup_wizard/base.html" %} -{% load crispy_forms_tags %} - -{% block content %} -<div class="jumbotron"> - -<h2>Upgrade Kegbot</h2> -<p class="lead"> - {% if message %} - {{ message }} - {% else %} - Please click below to upgrade your Kegbot. - {% endif %} -</p> - -<div class="row-fluid"> - <div class="span8 offset2"> - <form action="" method="POST">{% csrf_token %} - <p> - <input type="submit" name="update_db" value="Upgrade" - class="btn btn-primary btn-success btn-block" id="submit-id-update_db"> - </p> - </form> - </div> -</div> - -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/templates/setup_wizard/upgrade_required.html b/pykeg/web/setup_wizard/templates/setup_wizard/upgrade_required.html deleted file mode 100644 index 3fefebccb..000000000 --- a/pykeg/web/setup_wizard/templates/setup_wizard/upgrade_required.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "setup_wizard/base.html" %} - -{% block content %} -<div class="jumbotron"> - -<h2>Upgrade Required</h2> -<p class="lead"> - This Kegbot needs to be upgraded. -</p> -<p class="muted"> - Hint: Run <code>kegbot upgrade</code> (see <a - href="https://docs.kegbot.org/projects/kegbot-server/en/latest/upgrade.html">docs</a>). -</p> - -<p class="muted"> -Kegbot version {{ VERSION }} -{% if installed_version %}(installed version: {{ installed_version }}){% endif %} -</p> -</div> - -{% endblock content %} diff --git a/pykeg/web/setup_wizard/urls.py b/pykeg/web/setup_wizard/urls.py deleted file mode 100644 index 03c3d4889..000000000 --- a/pykeg/web/setup_wizard/urls.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.urls import path - -from pykeg.web.setup_wizard import views - -urlpatterns = [ - path("", views.start, name="setup_wizard_start"), - path("upgrade/", views.upgrade, name="setup_upgrade"), - path("mode/", views.mode, name="setup_mode"), - path("setup-accounts/", views.setup_accounts, name="setup_accounts"), - path("settings/", views.site_settings, name="setup_site_settings"), - path("admin-user/", views.admin, name="setup_admin"), - path("finished/", views.finish, name="setup_finish"), -] diff --git a/pykeg/web/setup_wizard/views.py b/pykeg/web/setup_wizard/views.py deleted file mode 100644 index b39fdb4b7..000000000 --- a/pykeg/web/setup_wizard/views.py +++ /dev/null @@ -1,195 +0,0 @@ -import logging -import traceback -from functools import wraps - -from django.conf import settings -from django.contrib import messages -from django.contrib.auth import authenticate, login -from django.core import management -from django.http import Http404 -from django.shortcuts import redirect, render -from django.views.decorators.cache import never_cache - -from pykeg.core import defaults, models -from pykeg.core.util import get_version_object -from pykeg.util import dbstatus - -from .forms import AdminUserForm, MiniSiteSettingsForm - -logger = logging.getLogger(__name__) - - -def setup_view(f): - """Decorator for setup views.""" - - def new_function(*args, **kwargs): - request = args[0] - if not settings.DEBUG: - raise Http404("Site is not in DEBUG mode.") - if request.kbsite and request.kbsite.is_setup: - raise Http404("Site is already setup, wizard disabled.") - return f(*args, **kwargs) - - return wraps(f)(new_function) - - -@setup_view -@never_cache -def start(request): - """Shows database setup button""" - context = {} - - if request.method == "POST": - try: - management.call_command("migrate", no_input=True) - return redirect("setup_mode") - except Exception as e: - logger.exception("Error installing database") - context["error_message"] = str(e) - context["error_stack"] = traceback.format_exc() - else: - try: - logger.info("Checking database status ...") - dbstatus.check_db_status() - logger.info("Database status OK.") - except dbstatus.DatabaseNotInitialized: - context["need_install"] = True - except dbstatus.NeedMigration: - context["need_upgrade"] = True - - return render(request, "setup_wizard/start.html", context=context) - - -@setup_view -@never_cache -def mode(request): - """Shows the enable/disable hardware toggle.""" - context = {} - - if request.method == "POST": - if "enable_sensing" in request.POST: - response = redirect("setup_accounts") - response.set_cookie("kb_setup_enable_sensing", "True") - return response - elif "disable_sensing" in request.POST: - response = redirect("setup_site_settings") - response.set_cookie("kb_setup_enable_sensing", "False") - response.set_cookie("kb_setup_enable_users", "False") - return response - else: - messages.error(request, "Unknown response.") - - return render(request, "setup_wizard/mode.html", context=context) - - -@setup_view -@never_cache -def upgrade(request): - context = {} - if request.method == "POST": - try: - management.call_command("migrate", no_input=True) - site = models.KegbotSite.get() - app_version = get_version_object() - site.server_version = str(app_version) - site.save() - return redirect("kb-home") - except Exception as e: - logger.exception("Error installing database") - context["error_message"] = str(e) - context["error_stack"] = traceback.format_exc() - - try: - logger.info("Checking database status ...") - dbstatus.check_db_status() - logger.info("Database status OK.") - except dbstatus.DatabaseNotInitialized: - context["message"] = "Database not initialized" - except dbstatus.NeedMigration: - context["message"] = "Database upgrade needed" - - return render(request, "setup_wizard/upgrade.html", context=context) - - -@setup_view -@never_cache -def setup_accounts(request): - """Shows the enable/disable accounts toggle.""" - context = {} - - if request.method == "POST": - if "enable_users" in request.POST: - response = redirect("setup_site_settings") - response.set_cookie("kb_setup_enable_users", "True") - return response - elif "disable_users" in request.POST: - response = redirect("setup_site_settings") - response.set_cookie("kb_setup_enable_users", "False") - return response - else: - messages.error(request, "Unknown response.") - - return render(request, "setup_wizard/accounts.html", context=context) - - -@setup_view -@never_cache -def site_settings(request): - context = {} - - if request.method == "POST": - site = models.KegbotSite.get() - form = MiniSiteSettingsForm(request.POST, instance=site) - if form.is_valid(): - form.save() - messages.success(request, "Settings saved!") - return redirect("setup_admin") - else: - try: - defaults.set_defaults() - except defaults.AlreadyInstalledError: - pass - - site = models.KegbotSite.get() - site.enable_sensing = request.COOKIES.get("kb_setup_enable_sensing") == "True" - site.enable_users = request.COOKIES.get("kb_setup_enable_users") == "True" - site.save() - form = MiniSiteSettingsForm(instance=site) - context["form"] = form - return render(request, "setup_wizard/site_settings.html", context=context) - - -@setup_view -@never_cache -def admin(request): - context = {} - form = AdminUserForm() - if request.method == "POST": - form = AdminUserForm(request.POST) - if form.is_valid(): - form.save() - # Log the freshly-created admin in so setup continues as them. By - # this step the session table exists (migrated in the first step), - # so IsSetupMiddleware leaves the real session in place. - user = authenticate( - username=form.cleaned_data.get("username"), - password=form.cleaned_data.get("password"), - ) - if user is not None: - login(request, user) - return redirect("setup_finish") - context["form"] = form - return render(request, "setup_wizard/admin.html", context=context) - - -@setup_view -@never_cache -def finish(request): - context = {} - if request.method == "POST": - site = models.KegbotSite.get() - site.is_setup = True - site.save() - messages.success(request, "Tip: Install a new Keg in Admin: Taps") - return redirect("kb-home") - return render(request, "setup_wizard/finish.html", context=context) diff --git a/pykeg/web/spa.py b/pykeg/web/spa.py index f88c60ea4..bcff9859e 100644 --- a/pykeg/web/spa.py +++ b/pykeg/web/spa.py @@ -23,9 +23,13 @@ def _cached_manifest(): @ensure_csrf_cookie -def spa_index(request): +def spa_index(request, **kwargs): """Renders the SPA shell for any non-API route. + Captured URL kwargs (from the named routes that preserve legacy URL + names for e-mail links and get_absolute_url) are ignored: routing + happens client-side. + Asset names come from vite's build manifest and are emitted through {% static %}, so hashed-manifest storage resolves them correctly in production. Also sets the CSRF cookie so the app can make diff --git a/pykeg/web/static/angular/angular-resource.min.js b/pykeg/web/static/angular/angular-resource.min.js deleted file mode 100644 index f37559c7a..000000000 --- a/pykeg/web/static/angular/angular-resource.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - AngularJS v1.0.5 - (c) 2010-2012 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(C,d,w){'use strict';d.module("ngResource",["ng"]).factory("$resource",["$http","$parse",function(x,y){function s(b,e){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(e?null:/%20/g,"+")}function t(b,e){this.template=b+="#";this.defaults=e||{};var a=this.urlParams={};h(b.split(/\W/),function(f){f&&RegExp("(^|[^\\\\]):"+f+"\\W").test(b)&&(a[f]=!0)});this.template=b.replace(/\\:/g,":")}function u(b,e,a){function f(m,a){var b= -{},a=o({},e,a);h(a,function(a,z){var c;a.charAt&&a.charAt(0)=="@"?(c=a.substr(1),c=y(c)(m)):c=a;b[z]=c});return b}function g(a){v(a||{},this)}var k=new t(b),a=o({},A,a);h(a,function(a,b){a.method=d.uppercase(a.method);var e=a.method=="POST"||a.method=="PUT"||a.method=="PATCH";g[b]=function(b,c,d,B){var j={},i,l=p,q=null;switch(arguments.length){case 4:q=B,l=d;case 3:case 2:if(r(c)){if(r(b)){l=b;q=c;break}l=c;q=d}else{j=b;i=c;l=d;break}case 1:r(b)?l=b:e?i=b:j=b;break;case 0:break;default:throw"Expected between 0-4 arguments [params, data, success, error], got "+ -arguments.length+" arguments.";}var n=this instanceof g?this:a.isArray?[]:new g(i);x({method:a.method,url:k.url(o({},f(i,a.params||{}),j)),data:i}).then(function(b){var c=b.data;if(c)a.isArray?(n.length=0,h(c,function(a){n.push(new g(a))})):v(c,n);(l||p)(n,b.headers)},q);return n};g.prototype["$"+b]=function(a,d,h){var m=f(this),j=p,i;switch(arguments.length){case 3:m=a;j=d;i=h;break;case 2:case 1:r(a)?(j=a,i=d):(m=a,j=d||p);case 0:break;default:throw"Expected between 1-3 arguments [params, success, error], got "+ -arguments.length+" arguments.";}g[b].call(this,m,e?this:w,j,i)}});g.bind=function(d){return u(b,o({},e,d),a)};return g}var A={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},p=d.noop,h=d.forEach,o=d.extend,v=d.copy,r=d.isFunction;t.prototype={url:function(b){var e=this,a=this.template,f,g,b=b||{};h(this.urlParams,function(h,c){f=b.hasOwnProperty(c)?b[c]:e.defaults[c];d.isDefined(f)&&f!==null?(g=s(f,!0).replace(/%26/gi,"&").replace(/%3D/gi, -"=").replace(/%2B/gi,"+"),a=a.replace(RegExp(":"+c+"(\\W)","g"),g+"$1")):a=a.replace(RegExp("(/?):"+c+"(\\W)","g"),function(a,b,c){return c.charAt(0)=="/"?c:b+c})});var a=a.replace(/\/?#$/,""),k=[];h(b,function(a,b){e.urlParams[b]||k.push(s(b)+"="+s(a))});k.sort();a=a.replace(/\/*$/,"");return a+(k.length?"?"+k.join("&"):"")}};return u}])})(window,window.angular); diff --git a/pykeg/web/static/angular/angular-sanitize.min.js b/pykeg/web/static/angular/angular-sanitize.min.js deleted file mode 100644 index 212a90a9d..000000000 --- a/pykeg/web/static/angular/angular-sanitize.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - AngularJS v1.0.5 - (c) 2010-2012 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(I,g){'use strict';function i(a){var d={},a=a.split(","),b;for(b=0;b<a.length;b++)d[a[b]]=!0;return d}function z(a,d){function b(a,b,c,h){b=g.lowercase(b);if(m[b])for(;f.last()&&n[f.last()];)e("",f.last());o[b]&&f.last()==b&&e("",b);(h=p[b]||!!h)||f.push(b);var j={};c.replace(A,function(a,b,d,e,c){j[b]=k(d||e||c||"")});d.start&&d.start(b,j,h)}function e(a,b){var e=0,c;if(b=g.lowercase(b))for(e=f.length-1;e>=0;e--)if(f[e]==b)break;if(e>=0){for(c=f.length-1;c>=e;c--)d.end&&d.end(f[c]);f.length= -e}}var c,h,f=[],j=a;for(f.last=function(){return f[f.length-1]};a;){h=!0;if(!f.last()||!q[f.last()]){if(a.indexOf("<\!--")===0)c=a.indexOf("--\>"),c>=0&&(d.comment&&d.comment(a.substring(4,c)),a=a.substring(c+3),h=!1);else if(B.test(a)){if(c=a.match(r))a=a.substring(c[0].length),c[0].replace(r,e),h=!1}else if(C.test(a)&&(c=a.match(s)))a=a.substring(c[0].length),c[0].replace(s,b),h=!1;h&&(c=a.indexOf("<"),h=c<0?a:a.substring(0,c),a=c<0?"":a.substring(c),d.chars&&d.chars(k(h)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+ -f.last()+"[^>]*>","i"),function(b,a){a=a.replace(D,"$1").replace(E,"$1");d.chars&&d.chars(k(a));return""}),e("",f.last());if(a==j)throw"Parse Error: "+a;j=a}e()}function k(a){l.innerHTML=a.replace(/</g,"<");return l.innerText||l.textContent||""}function t(a){return a.replace(/&/g,"&").replace(F,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"<").replace(/>/g,">")}function u(a){var d=!1,b=g.bind(a,a.push);return{start:function(a,c,h){a=g.lowercase(a);!d&&q[a]&&(d=a);!d&&v[a]== -!0&&(b("<"),b(a),g.forEach(c,function(a,c){var e=g.lowercase(c);if(G[e]==!0&&(w[e]!==!0||a.match(H)))b(" "),b(c),b('="'),b(t(a)),b('"')}),b(h?"/>":">"))},end:function(a){a=g.lowercase(a);!d&&v[a]==!0&&(b("</"),b(a),b(">"));a==d&&(d=!1)},chars:function(a){d||b(t(a))}}}var s=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,r=/^<\s*\/\s*([\w:-]+)[^>]*>/,A=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,C=/^</,B=/^<\s*\//,D=/<\!--(.*?)--\>/g, -E=/<!\[CDATA\[(.*?)]]\>/g,H=/^((ftp|https?):\/\/|mailto:|#)/,F=/([^\#-~| |!])/g,p=i("area,br,col,hr,img,wbr"),x=i("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=i("rp,rt"),o=g.extend({},y,x),m=g.extend({},x,i("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),n=g.extend({},y,i("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")), -q=i("script,style"),v=g.extend({},p,m,n,o),w=i("background,cite,href,longdesc,src,usemap"),G=g.extend({},w,i("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),l=document.createElement("pre");g.module("ngSanitize",[]).value("$sanitize",function(a){var d=[]; -z(a,u(d));return d.join("")});g.module("ngSanitize").directive("ngBindHtml",["$sanitize",function(a){return function(d,b,e){b.addClass("ng-binding").data("$binding",e.ngBindHtml);d.$watch(e.ngBindHtml,function(c){c=a(c);b.html(c||"")})}}]);g.module("ngSanitize").filter("linky",function(){var a=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,d=/^mailto:/;return function(b){if(!b)return b;for(var e=b,c=[],h=u(c),f,g;b=e.match(a);)f=b[0],b[2]==b[3]&&(f="mailto:"+f),g=b.index, -h.chars(e.substr(0,g)),h.start("a",{href:f}),h.chars(b[0].replace(d,"")),h.end("a"),e=e.substring(g+b[0].length);h.chars(e);return c.join("")}})})(window,window.angular); diff --git a/pykeg/web/static/angular/angular.min.js b/pykeg/web/static/angular/angular.min.js deleted file mode 100644 index 07ea01c58..000000000 --- a/pykeg/web/static/angular/angular.min.js +++ /dev/null @@ -1,161 +0,0 @@ -/* - AngularJS v1.0.5 - (c) 2010-2012 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(X,Y,q){'use strict';function n(b,a,c){var d;if(b)if(H(b))for(d in b)d!="prototype"&&d!="length"&&d!="name"&&b.hasOwnProperty(d)&&a.call(c,b[d],d);else if(b.forEach&&b.forEach!==n)b.forEach(a,c);else if(!b||typeof b.length!=="number"?0:typeof b.hasOwnProperty!="function"&&typeof b.constructor!="function"||b instanceof L||ca&&b instanceof ca||xa.call(b)!=="[object Object]"||typeof b.callee==="function")for(d=0;d<b.length;d++)a.call(c,b[d],d);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d], -d);return b}function mb(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push(c);return a.sort()}function fc(b,a,c){for(var d=mb(b),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function nb(b){return function(a,c){b(c,a)}}function ya(){for(var b=aa.length,a;b;){b--;a=aa[b].charCodeAt(0);if(a==57)return aa[b]="A",aa.join("");if(a==90)aa[b]="0";else return aa[b]=String.fromCharCode(a+1),aa.join("")}aa.unshift("0");return aa.join("")}function v(b){n(arguments,function(a){a!==b&&n(a,function(a,d){b[d]= -a})});return b}function E(b){return parseInt(b,10)}function za(b,a){return v(new (v(function(){},{prototype:b})),a)}function C(){}function na(b){return b}function I(b){return function(){return b}}function w(b){return typeof b=="undefined"}function x(b){return typeof b!="undefined"}function M(b){return b!=null&&typeof b=="object"}function A(b){return typeof b=="string"}function Ra(b){return typeof b=="number"}function oa(b){return xa.apply(b)=="[object Date]"}function B(b){return xa.apply(b)=="[object Array]"} -function H(b){return typeof b=="function"}function pa(b){return b&&b.document&&b.location&&b.alert&&b.setInterval}function O(b){return A(b)?b.replace(/^\s*/,"").replace(/\s*$/,""):b}function gc(b){return b&&(b.nodeName||b.bind&&b.find)}function Sa(b,a,c){var d=[];n(b,function(b,g,h){d.push(a.call(c,b,g,h))});return d}function Aa(b,a){if(b.indexOf)return b.indexOf(a);for(var c=0;c<b.length;c++)if(a===b[c])return c;return-1}function Ta(b,a){var c=Aa(b,a);c>=0&&b.splice(c,1);return a}function U(b,a){if(pa(b)|| -b&&b.$evalAsync&&b.$watch)throw Error("Can't copy Window or Scope");if(a){if(b===a)throw Error("Can't copy equivalent objects or arrays");if(B(b))for(var c=a.length=0;c<b.length;c++)a.push(U(b[c]));else for(c in n(a,function(b,c){delete a[c]}),b)a[c]=U(b[c])}else(a=b)&&(B(b)?a=U(b,[]):oa(b)?a=new Date(b.getTime()):M(b)&&(a=U(b,{})));return a}function hc(b,a){var a=a||{},c;for(c in b)b.hasOwnProperty(c)&&c.substr(0,2)!=="$$"&&(a[c]=b[c]);return a}function ga(b,a){if(b===a)return!0;if(b===null||a=== -null)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&c=="object")if(B(b)){if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ga(b[d],a[d]))return!1;return!0}}else if(oa(b))return oa(a)&&b.getTime()==a.getTime();else{if(b&&b.$evalAsync&&b.$watch||a&&a.$evalAsync&&a.$watch||pa(b)||pa(a))return!1;c={};for(d in b)if(!(d.charAt(0)==="$"||H(b[d]))){if(!ga(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c[d]&&d.charAt(0)!=="$"&&a[d]!==q&&!H(a[d]))return!1;return!0}return!1}function Ua(b,a){var c= -arguments.length>2?ha.call(arguments,2):[];return H(a)&&!(a instanceof RegExp)?c.length?function(){return arguments.length?a.apply(b,c.concat(ha.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}:a}function ic(b,a){var c=a;/^\$+/.test(b)?c=q:pa(a)?c="$WINDOW":a&&Y===a?c="$DOCUMENT":a&&a.$evalAsync&&a.$watch&&(c="$SCOPE");return c}function da(b,a){return JSON.stringify(b,ic,a?" ":null)}function ob(b){return A(b)?JSON.parse(b):b}function Va(b){b&&b.length!== -0?(b=y(""+b),b=!(b=="f"||b=="0"||b=="false"||b=="no"||b=="n"||b=="[]")):b=!1;return b}function qa(b){b=u(b).clone();try{b.html("")}catch(a){}var c=u("<div>").append(b).html();try{return b[0].nodeType===3?y(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+y(b)})}catch(d){return y(c)}}function Wa(b){var a={},c,d;n((b||"").split("&"),function(b){b&&(c=b.split("="),d=decodeURIComponent(c[0]),a[d]=x(c[1])?decodeURIComponent(c[1]):!0)});return a}function pb(b){var a=[];n(b,function(b, -d){a.push(Xa(d,!0)+(b===!0?"":"="+Xa(b,!0)))});return a.length?a.join("&"):""}function Ya(b){return Xa(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Xa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(a?null:/%20/g,"+")}function jc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,h=["ng:app","ng-app","x-ng-app","data-ng-app"],f=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;n(h,function(a){h[a]=!0;c(Y.getElementById(a)); -a=a.replace(":","\\:");b.querySelectorAll&&(n(b.querySelectorAll("."+a),c),n(b.querySelectorAll("."+a+"\\:"),c),n(b.querySelectorAll("["+a+"]"),c))});n(d,function(a){if(!e){var b=f.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):n(a.attributes,function(b){if(!e&&h[b.name])e=a,g=b.value})}});e&&a(e,g?[g]:[])}function qb(b,a){b=u(b);a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");var c=rb(a);c.invoke(["$rootScope","$rootElement","$compile","$injector", -function(a,b,c,h){a.$apply(function(){b.data("$injector",h);c(b)(a)})}]);return c}function Za(b,a){a=a||"_";return b.replace(kc,function(b,d){return(d?a:"")+b.toLowerCase()})}function $a(b,a,c){if(!b)throw Error("Argument '"+(a||"?")+"' is "+(c||"required"));return b}function ra(b,a,c){c&&B(b)&&(b=b[b.length-1]);$a(H(b),a,"not a function, got "+(b&&typeof b=="object"?b.constructor.name||"Object":typeof b));return b}function lc(b){function a(a,b,e){return a[b]||(a[b]=e())}return a(a(b,"angular",Object), -"module",function(){var b={};return function(d,e,g){e&&b.hasOwnProperty(d)&&(b[d]=null);return a(b,d,function(){function a(c,d,e){return function(){b[e||"push"]([c,d,arguments]);return k}}if(!e)throw Error("No module: "+d);var b=[],c=[],i=a("$injector","invoke"),k={_invokeQueue:b,_runBlocks:c,requires:e,name:d,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),filter:a("$filterProvider", -"register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:i,run:function(a){c.push(a);return this}};g&&i(g);return k})}})}function sb(b){return b.replace(mc,function(a,b,d,e){return e?d.toUpperCase():d}).replace(nc,"Moz$1")}function ab(b,a){function c(){var e;for(var b=[this],c=a,h,f,j,i,k,m;b.length;){h=b.shift();f=0;for(j=h.length;f<j;f++){i=u(h[f]);c?i.triggerHandler("$destroy"):c=!c;k=0;for(e=(m=i.children()).length,i=e;k<i;k++)b.push(ca(m[k]))}}return d.apply(this, -arguments)}var d=ca.fn[b],d=d.$original||d;c.$original=d;ca.fn[b]=c}function L(b){if(b instanceof L)return b;if(!(this instanceof L)){if(A(b)&&b.charAt(0)!="<")throw Error("selectors not implemented");return new L(b)}if(A(b)){var a=Y.createElement("div");a.innerHTML="<div> </div>"+b;a.removeChild(a.firstChild);bb(this,a.childNodes);this.remove()}else bb(this,b)}function cb(b){return b.cloneNode(!0)}function sa(b){tb(b);for(var a=0,b=b.childNodes||[];a<b.length;a++)sa(b[a])}function ub(b,a,c){var d= -ba(b,"events");ba(b,"handle")&&(w(a)?n(d,function(a,c){db(b,c,a);delete d[c]}):w(c)?(db(b,a,d[a]),delete d[a]):Ta(d[a],c))}function tb(b){var a=b[Ba],c=Ca[a];c&&(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),ub(b)),delete Ca[a],b[Ba]=q)}function ba(b,a,c){var d=b[Ba],d=Ca[d||-1];if(x(c))d||(b[Ba]=d=++oc,d=Ca[d]={}),d[a]=c;else return d&&d[a]}function vb(b,a,c){var d=ba(b,"data"),e=x(c),g=!e&&x(a),h=g&&!M(a);!d&&!h&&ba(b,"data",d={});if(e)d[a]=c;else if(g)if(h)return d&&d[a];else v(d,a);else return d} -function Da(b,a){return(" "+b.className+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" ")>-1}function wb(b,a){a&&n(a.split(" "),function(a){b.className=O((" "+b.className+" ").replace(/[\n\t]/g," ").replace(" "+O(a)+" "," "))})}function xb(b,a){a&&n(a.split(" "),function(a){if(!Da(b,a))b.className=O(b.className+" "+O(a))})}function bb(b,a){if(a)for(var a=!a.nodeName&&x(a.length)&&!pa(a)?a:[a],c=0;c<a.length;c++)b.push(a[c])}function yb(b,a){return Ea(b,"$"+(a||"ngController")+"Controller")}function Ea(b, -a,c){b=u(b);for(b[0].nodeType==9&&(b=b.find("html"));b.length;){if(c=b.data(a))return c;b=b.parent()}}function zb(b,a){var c=Fa[a.toLowerCase()];return c&&Ab[b.nodeName]&&c}function pc(b,a){var c=function(c,e){if(!c.preventDefault)c.preventDefault=function(){c.returnValue=!1};if(!c.stopPropagation)c.stopPropagation=function(){c.cancelBubble=!0};if(!c.target)c.target=c.srcElement||Y;if(w(c.defaultPrevented)){var g=c.preventDefault;c.preventDefault=function(){c.defaultPrevented=!0;g.call(c)};c.defaultPrevented= -!1}c.isDefaultPrevented=function(){return c.defaultPrevented};n(a[e||c.type],function(a){a.call(b,c)});Z<=8?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function fa(b){var a=typeof b,c;if(a=="object"&&b!==null)if(typeof(c=b.$$hashKey)=="function")c=b.$$hashKey();else{if(c===q)c=b.$$hashKey=ya()}else c=b;return a+":"+c}function Ga(b){n(b,this.put,this)}function eb(){}function Bb(b){var a, -c;if(typeof b=="function"){if(!(a=b.$inject))a=[],c=b.toString().replace(qc,""),c=c.match(rc),n(c[1].split(sc),function(b){b.replace(tc,function(b,c,d){a.push(d)})}),b.$inject=a}else B(b)?(c=b.length-1,ra(b[c],"fn"),a=b.slice(0,c)):ra(b,"fn",!0);return a}function rb(b){function a(a){return function(b,c){if(M(b))n(b,nb(a));else return a(b,c)}}function c(a,b){if(H(b)||B(b))b=m.instantiate(b);if(!b.$get)throw Error("Provider "+a+" must define $get factory method.");return k[a+f]=b}function d(a,b){return c(a, -{$get:b})}function e(a){var b=[];n(a,function(a){if(!i.get(a))if(i.put(a,!0),A(a)){var c=ta(a);b=b.concat(e(c.requires)).concat(c._runBlocks);try{for(var d=c._invokeQueue,c=0,f=d.length;c<f;c++){var g=d[c],h=g[0]=="$injector"?m:m.get(g[0]);h[g[1]].apply(h,g[2])}}catch(j){throw j.message&&(j.message+=" from "+a),j;}}else if(H(a))try{b.push(m.invoke(a))}catch(o){throw o.message&&(o.message+=" from "+a),o;}else if(B(a))try{b.push(m.invoke(a))}catch(k){throw k.message&&(k.message+=" from "+String(a[a.length- -1])),k;}else ra(a,"module")});return b}function g(a,b){function c(d){if(typeof d!=="string")throw Error("Service name expected");if(a.hasOwnProperty(d)){if(a[d]===h)throw Error("Circular dependency: "+j.join(" <- "));return a[d]}else try{return j.unshift(d),a[d]=h,a[d]=b(d)}finally{j.shift()}}function d(a,b,e){var f=[],i=Bb(a),g,h,j;h=0;for(g=i.length;h<g;h++)j=i[h],f.push(e&&e.hasOwnProperty(j)?e[j]:c(j));a.$inject||(a=a[g]);switch(b?-1:f.length){case 0:return a();case 1:return a(f[0]);case 2:return a(f[0], -f[1]);case 3:return a(f[0],f[1],f[2]);case 4:return a(f[0],f[1],f[2],f[3]);case 5:return a(f[0],f[1],f[2],f[3],f[4]);case 6:return a(f[0],f[1],f[2],f[3],f[4],f[5]);case 7:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6]);case 8:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7]);case 9:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8]);case 10:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9]);default:return a.apply(b,f)}}return{invoke:d,instantiate:function(a,b){var c=function(){},e;c.prototype= -(B(a)?a[a.length-1]:a).prototype;c=new c;e=d(a,c,b);return M(e)?e:c},get:c,annotate:Bb}}var h={},f="Provider",j=[],i=new Ga,k={$provide:{provider:a(c),factory:a(d),service:a(function(a,b){return d(a,["$injector",function(a){return a.instantiate(b)}])}),value:a(function(a,b){return d(a,I(b))}),constant:a(function(a,b){k[a]=b;l[a]=b}),decorator:function(a,b){var c=m.get(a+f),d=c.$get;c.$get=function(){var a=t.invoke(d,c);return t.invoke(b,null,{$delegate:a})}}}},m=g(k,function(){throw Error("Unknown provider: "+ -j.join(" <- "));}),l={},t=l.$injector=g(l,function(a){a=m.get(a+f);return t.invoke(a.$get,a)});n(e(b),function(a){t.invoke(a||C)});return t}function uc(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;n(a,function(a){!b&&y(a.nodeName)==="a"&&(b=a)});return b}function g(){var b=c.hash(),d;b?(d=h.getElementById(b))?d.scrollIntoView():(d=e(h.getElementsByName(b)))?d.scrollIntoView():b==="top"&&a.scrollTo(0,0): -a.scrollTo(0,0)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(){d.$evalAsync(g)});return g}]}function vc(b,a,c,d){function e(a){try{a.apply(null,ha.call(arguments,1))}finally{if(o--,o===0)for(;p.length;)try{p.pop()()}catch(b){c.error(b)}}}function g(a,b){(function R(){n(s,function(a){a()});J=b(R,a)})()}function h(){F!=f.url()&&(F=f.url(),n(V,function(a){a(f.url())}))}var f=this,j=a[0],i=b.location,k=b.history,m=b.setTimeout,l=b.clearTimeout,t={};f.isMock=!1;var o=0,p=[];f.$$completeOutstandingRequest= -e;f.$$incOutstandingRequestCount=function(){o++};f.notifyWhenNoOutstandingRequests=function(a){n(s,function(a){a()});o===0?a():p.push(a)};var s=[],J;f.addPollFn=function(a){w(J)&&g(100,m);s.push(a);return a};var F=i.href,z=a.find("base");f.url=function(a,b){if(a){if(F!=a)return F=a,d.history?b?k.replaceState(null,"",a):(k.pushState(null,"",a),z.attr("href",z.attr("href"))):b?i.replace(a):i.href=a,f}else return i.href.replace(/%27/g,"'")};var V=[],K=!1;f.onUrlChange=function(a){K||(d.history&&u(b).bind("popstate", -h),d.hashchange?u(b).bind("hashchange",h):f.addPollFn(h),K=!0);V.push(a);return a};f.baseHref=function(){var a=z.attr("href");return a?a.replace(/^https?\:\/\/[^\/]*/,""):""};var r={},$="",P=f.baseHref();f.cookies=function(a,b){var d,e,f,i;if(a)if(b===q)j.cookie=escape(a)+"=;path="+P+";expires=Thu, 01 Jan 1970 00:00:00 GMT";else{if(A(b))d=(j.cookie=escape(a)+"="+escape(b)+";path="+P).length+1,d>4096&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!")}else{if(j.cookie!== -$){$=j.cookie;d=$.split("; ");r={};for(f=0;f<d.length;f++)e=d[f],i=e.indexOf("="),i>0&&(r[unescape(e.substring(0,i))]=unescape(e.substring(i+1)))}return r}};f.defer=function(a,b){var c;o++;c=m(function(){delete t[c];e(a)},b||0);t[c]=!0;return c};f.defer.cancel=function(a){return t[a]?(delete t[a],l(a),e(C),!0):!1}}function wc(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new vc(b,d,a,c)}]}function xc(){this.$get=function(){function b(b,d){function e(a){if(a!=m){if(l){if(l== -a)l=a.n}else l=a;g(a.n,a.p);g(a,m);m=a;m.n=null}}function g(a,b){if(a!=b){if(a)a.p=b;if(b)b.n=a}}if(b in a)throw Error("cacheId "+b+" taken");var h=0,f=v({},d,{id:b}),j={},i=d&&d.capacity||Number.MAX_VALUE,k={},m=null,l=null;return a[b]={put:function(a,b){var c=k[a]||(k[a]={key:a});e(c);w(b)||(a in j||h++,j[a]=b,h>i&&this.remove(l.key))},get:function(a){var b=k[a];if(b)return e(b),j[a]},remove:function(a){var b=k[a];if(b){if(b==m)m=b.p;if(b==l)l=b.n;g(b.n,b.p);delete k[a];delete j[a];h--}},removeAll:function(){j= -{};h=0;k={};m=l=null},destroy:function(){k=f=j=null;delete a[b]},info:function(){return v({},f,{size:h})}}}var a={};b.info=function(){var b={};n(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function yc(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function Cb(b){var a={},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,g="Template must have exactly one root element. was: ",h=/^\s*(https?|ftp|mailto):/; -this.directive=function j(d,e){A(d)?($a(e,"directive"),a.hasOwnProperty(d)||(a[d]=[],b.factory(d+c,["$injector","$exceptionHandler",function(b,c){var e=[];n(a[d],function(a){try{var g=b.invoke(a);if(H(g))g={compile:I(g)};else if(!g.compile&&g.link)g.compile=I(g.link);g.priority=g.priority||0;g.name=g.name||d;g.require=g.require||g.controller&&g.name;g.restrict=g.restrict||"A";e.push(g)}catch(h){c(h)}});return e}])),a[d].push(e)):n(d,nb(j));return this};this.urlSanitizationWhitelist=function(a){return x(a)? -(h=a,this):h};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document",function(b,i,k,m,l,t,o,p,s){function J(a,b,c){a instanceof u||(a=u(a));n(a,function(b,c){b.nodeType==3&&b.nodeValue.match(/\S+/)&&(a[c]=u(b).wrap("<span></span>").parent()[0])});var d=z(a,b,a,c);return function(b,c){$a(b,"scope");for(var e=c?va.clone.call(a):a,g=0,i=e.length;g<i;g++){var h=e[g];(h.nodeType==1||h.nodeType==9)&&e.eq(g).data("$scope",b)}F(e, -"ng-scope");c&&c(e,b);d&&d(b,e,e);return e}}function F(a,b){try{a.addClass(b)}catch(c){}}function z(a,b,c,d){function e(a,c,d,i){var h,j,k,o,l,m,t,s=[];l=0;for(m=c.length;l<m;l++)s.push(c[l]);t=l=0;for(m=g.length;l<m;t++)j=s[t],c=g[l++],h=g[l++],c?(c.scope?(k=a.$new(M(c.scope)),u(j).data("$scope",k)):k=a,(o=c.transclude)||!i&&b?c(h,k,j,d,function(b){return function(c){var d=a.$new();d.$$transcluded=!0;return b(d,c).bind("$destroy",Ua(d,d.$destroy))}}(o||b)):c(h,k,j,q,i)):h&&h(a,j.childNodes,q,i)} -for(var g=[],i,h,j,k=0;k<a.length;k++)h=new ia,i=V(a[k],[],h,d),h=(i=i.length?K(i,a[k],h,b,c):null)&&i.terminal||!a[k].childNodes.length?null:z(a[k].childNodes,i?i.transclude:b),g.push(i),g.push(h),j=j||i||h;return j?e:null}function V(a,b,c,i){var g=c.$attr,h;switch(a.nodeType){case 1:r(b,ea(fb(a).toLowerCase()),"E",i);var j,k,l;h=a.attributes;for(var o=0,m=h&&h.length;o<m;o++)if(j=h[o],j.specified)k=j.name,l=ea(k.toLowerCase()),g[l]=k,c[l]=j=O(Z&&k=="href"?decodeURIComponent(a.getAttribute(k,2)): -j.value),zb(a,l)&&(c[l]=!0),R(a,b,j,l),r(b,l,"A",i);a=a.className;if(A(a)&&a!=="")for(;h=e.exec(a);)l=ea(h[2]),r(b,l,"C",i)&&(c[l]=O(h[3])),a=a.substr(h.index+h[0].length);break;case 3:x(b,a.nodeValue);break;case 8:try{if(h=d.exec(a.nodeValue))l=ea(h[1]),r(b,l,"M",i)&&(c[l]=O(h[2]))}catch(t){}}b.sort(G);return b}function K(a,b,c,d,e){function i(a,b){if(a)a.require=r.require,m.push(a);if(b)b.require=r.require,s.push(b)}function h(a,b){var c,d="data",e=!1;if(A(a)){for(;(c=a.charAt(0))=="^"||c=="?";)a= -a.substr(1),c=="^"&&(d="inheritedData"),e=e||c=="?";c=b[d]("$"+a+"Controller");if(!c&&!e)throw Error("No controller: "+a);}else B(a)&&(c=[],n(a,function(a){c.push(h(a,b))}));return c}function j(a,d,e,i,g){var l,p,r,D,F;l=b===e?c:hc(c,new ia(u(e),c.$attr));p=l.$$element;if(K){var J=/^\s*([@=&])\s*(\w*)\s*$/,ja=d.$parent||d;n(K.scope,function(a,b){var c=a.match(J)||[],e=c[2]||b,c=c[1],i,g,h;d.$$isolateBindings[b]=c+e;switch(c){case "@":l.$observe(e,function(a){d[b]=a});l.$$observers[e].$$scope=ja;break; -case "=":g=t(l[e]);h=g.assign||function(){i=d[b]=g(ja);throw Error(Db+l[e]+" (directive: "+K.name+")");};i=d[b]=g(ja);d.$watch(function(){var a=g(ja);a!==d[b]&&(a!==i?i=d[b]=a:h(ja,a=i=d[b]));return a});break;case "&":g=t(l[e]);d[b]=function(a){return g(ja,a)};break;default:throw Error("Invalid isolate scope definition for directive "+K.name+": "+a);}})}x&&n(x,function(a){var b={$scope:d,$element:p,$attrs:l,$transclude:g};F=a.controller;F=="@"&&(F=l[a.name]);p.data("$"+a.name+"Controller",o(F,b))}); -i=0;for(r=m.length;i<r;i++)try{D=m[i],D(d,p,l,D.require&&h(D.require,p))}catch(z){k(z,qa(p))}a&&a(d,e.childNodes,q,g);i=0;for(r=s.length;i<r;i++)try{D=s[i],D(d,p,l,D.require&&h(D.require,p))}catch(zc){k(zc,qa(p))}}for(var l=-Number.MAX_VALUE,m=[],s=[],p=null,K=null,z=null,D=c.$$element=u(b),r,G,S,ka,R=d,x,w,W,v=0,y=a.length;v<y;v++){r=a[v];S=q;if(l>r.priority)break;if(W=r.scope)ua("isolated scope",K,r,D),M(W)&&(F(D,"ng-isolate-scope"),K=r),F(D,"ng-scope"),p=p||r;G=r.name;if(W=r.controller)x=x||{}, -ua("'"+G+"' controller",x[G],r,D),x[G]=r;if(W=r.transclude)ua("transclusion",ka,r,D),ka=r,l=r.priority,W=="element"?(S=u(b),D=c.$$element=u(Y.createComment(" "+G+": "+c[G]+" ")),b=D[0],C(e,u(S[0]),b),R=J(S,d,l)):(S=u(cb(b)).contents(),D.html(""),R=J(S,d));if(W=r.template)if(ua("template",z,r,D),z=r,W=Eb(W),r.replace){S=u("<div>"+O(W)+"</div>").contents();b=S[0];if(S.length!=1||b.nodeType!==1)throw Error(g+W);C(e,D,b);G={$attr:{}};a=a.concat(V(b,a.splice(v+1,a.length-(v+1)),G));$(c,G);y=a.length}else D.html(W); -if(r.templateUrl)ua("template",z,r,D),z=r,j=P(a.splice(v,a.length-v),j,D,c,e,r.replace,R),y=a.length;else if(r.compile)try{w=r.compile(D,c,R),H(w)?i(null,w):w&&i(w.pre,w.post)}catch(E){k(E,qa(D))}if(r.terminal)j.terminal=!0,l=Math.max(l,r.priority)}j.scope=p&&p.scope;j.transclude=ka&&R;return j}function r(d,e,i,g){var h=!1;if(a.hasOwnProperty(e))for(var l,e=b.get(e+c),o=0,m=e.length;o<m;o++)try{if(l=e[o],(g===q||g>l.priority)&&l.restrict.indexOf(i)!=-1)d.push(l),h=!0}catch(t){k(t)}return h}function $(a, -b){var c=b.$attr,d=a.$attr,e=a.$$element;n(a,function(d,e){e.charAt(0)!="$"&&(b[e]&&(d+=(e==="style"?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});n(b,function(b,i){i=="class"?(F(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):i=="style"?e.attr("style",e.attr("style")+";"+b):i.charAt(0)!="$"&&!a.hasOwnProperty(i)&&(a[i]=b,d[i]=c[i])})}function P(a,b,c,d,e,i,h){var j=[],k,o,t=c[0],s=a.shift(),p=v({},s,{controller:null,templateUrl:null,transclude:null,scope:null});c.html("");m.get(s.templateUrl,{cache:l}).success(function(l){var m, -s,l=Eb(l);if(i){s=u("<div>"+O(l)+"</div>").contents();m=s[0];if(s.length!=1||m.nodeType!==1)throw Error(g+l);l={$attr:{}};C(e,c,m);V(m,a,l);$(d,l)}else m=t,c.html(l);a.unshift(p);k=K(a,m,d,h);for(o=z(c.contents(),h);j.length;){var ia=j.pop(),l=j.pop();s=j.pop();var r=j.pop(),D=m;s!==t&&(D=cb(m),C(l,u(s),D));k(function(){b(o,r,D,e,ia)},r,D,e,ia)}j=null}).error(function(a,b,c,d){throw Error("Failed to load template: "+d.url);});return function(a,c,d,e,i){j?(j.push(c),j.push(d),j.push(e),j.push(i)): -k(function(){b(o,c,d,e,i)},c,d,e,i)}}function G(a,b){return b.priority-a.priority}function ua(a,b,c,d){if(b)throw Error("Multiple directives ["+b.name+", "+c.name+"] asking for "+a+" on: "+qa(d));}function x(a,b){var c=i(b,!0);c&&a.push({priority:0,compile:I(function(a,b){var d=b.parent(),e=d.data("$binding")||[];e.push(c);F(d.data("$binding",e),"ng-binding");a.$watch(c,function(a){b[0].nodeValue=a})})})}function R(a,b,c,d){var e=i(c,!0);e&&b.push({priority:100,compile:I(function(a,b,c){b=c.$$observers|| -(c.$$observers={});d==="class"&&(e=i(c[d],!0));c[d]=q;(b[d]||(b[d]=[])).$$inter=!0;(c.$$observers&&c.$$observers[d].$$scope||a).$watch(e,function(a){c.$set(d,a)})})})}function C(a,b,c){var d=b[0],e=d.parentNode,i,g;if(a){i=0;for(g=a.length;i<g;i++)if(a[i]==d){a[i]=c;break}}e&&e.replaceChild(c,d);c[u.expando]=d[u.expando];b[0]=c}var ia=function(a,b){this.$$element=a;this.$attr=b||{}};ia.prototype={$normalize:ea,$set:function(a,b,c,d){var e=zb(this.$$element[0],a),i=this.$$observers;e&&(this.$$element.prop(a, -b),d=e);this[a]=b;d?this.$attr[a]=d:(d=this.$attr[a])||(this.$attr[a]=d=Za(a,"-"));if(fb(this.$$element[0])==="A"&&a==="href")D.setAttribute("href",b),e=D.href,e.match(h)||(this[a]=b="unsafe:"+e);c!==!1&&(b===null||b===q?this.$$element.removeAttr(d):this.$$element.attr(d,b));i&&n(i[a],function(a){try{a(b)}catch(c){k(c)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers={}),e=d[a]||(d[a]=[]);e.push(b);p.$evalAsync(function(){e.$$inter||b(c[a])});return b}};var D=s[0].createElement("a"), -S=i.startSymbol(),ka=i.endSymbol(),Eb=S=="{{"||ka=="}}"?na:function(a){return a.replace(/\{\{/g,S).replace(/}}/g,ka)};return J}]}function ea(b){return sb(b.replace(Ac,""))}function Bc(){var b={};this.register=function(a,c){M(a)?v(b,a):b[a]=c};this.$get=["$injector","$window",function(a,c){return function(d,e){if(A(d)){var g=d,d=b.hasOwnProperty(g)?b[g]:gb(e.$scope,g,!0)||gb(c,g,!0);ra(d,g,!0)}return a.instantiate(d,e)}}]}function Cc(){this.$get=["$window",function(b){return u(b.document)}]}function Dc(){this.$get= -["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Ec(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse",function(c){function d(d,f){for(var j,i,k=0,m=[],l=d.length,t=!1,o=[];k<l;)(j=d.indexOf(b,k))!=-1&&(i=d.indexOf(a,j+e))!=-1?(k!=j&&m.push(d.substring(k,j)),m.push(k=c(t=d.substring(j+e,i))),k.exp=t,k=i+g,t=!0):(k!=l&&m.push(d.substring(k)),k=l);if(!(l=m.length))m.push(""),l=1; -if(!f||t)return o.length=l,k=function(a){for(var b=0,c=l,d;b<c;b++){if(typeof(d=m[b])=="function")d=d(a),d==null||d==q?d="":typeof d!="string"&&(d=da(d));o[b]=d}return o.join("")},k.exp=d,k.parts=m,k}var e=b.length,g=a.length;d.startSymbol=function(){return b};d.endSymbol=function(){return a};return d}]}function Fb(b){for(var b=b.split("/"),a=b.length;a--;)b[a]=Ya(b[a]);return b.join("/")}function wa(b,a){var c=Gb.exec(b),c={protocol:c[1],host:c[3],port:E(c[5])||Hb[c[1]]||null,path:c[6]||"/",search:c[8], -hash:c[10]};if(a)a.$$protocol=c.protocol,a.$$host=c.host,a.$$port=c.port;return c}function la(b,a,c){return b+"://"+a+(c==Hb[b]?"":":"+c)}function Fc(b,a,c){var d=wa(b);return decodeURIComponent(d.path)!=a||w(d.hash)||d.hash.indexOf(c)!==0?b:la(d.protocol,d.host,d.port)+a.substr(0,a.lastIndexOf("/"))+d.hash.substr(c.length)}function Gc(b,a,c){var d=wa(b);if(decodeURIComponent(d.path)==a)return b;else{var e=d.search&&"?"+d.search||"",g=d.hash&&"#"+d.hash||"",h=a.substr(0,a.lastIndexOf("/")),f=d.path.substr(h.length); -if(d.path.indexOf(h)!==0)throw Error('Invalid url "'+b+'", missing path prefix "'+h+'" !');return la(d.protocol,d.host,d.port)+a+"#"+c+f+e+g}}function hb(b,a,c){a=a||"";this.$$parse=function(b){var c=wa(b,this);if(c.path.indexOf(a)!==0)throw Error('Invalid url "'+b+'", missing path prefix "'+a+'" !');this.$$path=decodeURIComponent(c.path.substr(a.length));this.$$search=Wa(c.search);this.$$hash=c.hash&&decodeURIComponent(c.hash)||"";this.$$compose()};this.$$compose=function(){var b=pb(this.$$search), -c=this.$$hash?"#"+Ya(this.$$hash):"";this.$$url=Fb(this.$$path)+(b?"?"+b:"")+c;this.$$absUrl=la(this.$$protocol,this.$$host,this.$$port)+a+this.$$url};this.$$rewriteAppUrl=function(a){if(a.indexOf(c)==0)return a};this.$$parse(b)}function Ha(b,a,c){var d;this.$$parse=function(b){var c=wa(b,this);if(c.hash&&c.hash.indexOf(a)!==0)throw Error('Invalid url "'+b+'", missing hash prefix "'+a+'" !');d=c.path+(c.search?"?"+c.search:"");c=Hc.exec((c.hash||"").substr(a.length));this.$$path=c[1]?(c[1].charAt(0)== -"/"?"":"/")+decodeURIComponent(c[1]):"";this.$$search=Wa(c[3]);this.$$hash=c[5]&&decodeURIComponent(c[5])||"";this.$$compose()};this.$$compose=function(){var b=pb(this.$$search),c=this.$$hash?"#"+Ya(this.$$hash):"";this.$$url=Fb(this.$$path)+(b?"?"+b:"")+c;this.$$absUrl=la(this.$$protocol,this.$$host,this.$$port)+d+(this.$$url?"#"+a+this.$$url:"")};this.$$rewriteAppUrl=function(a){if(a.indexOf(c)==0)return a};this.$$parse(b)}function Ib(b,a,c,d){Ha.apply(this,arguments);this.$$rewriteAppUrl=function(b){if(b.indexOf(c)== -0)return c+d+"#"+a+b.substr(c.length)}}function Ia(b){return function(){return this[b]}}function Jb(b,a){return function(c){if(w(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Ic(){var b="",a=!1;this.hashPrefix=function(a){return x(a)?(b=a,this):b};this.html5Mode=function(b){return x(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function h(a){c.$broadcast("$locationChangeSuccess",f.absUrl(),a)}var f,j,i,k=d.url(),m=wa(k);a?(j= -d.baseHref()||"/",i=j.substr(0,j.lastIndexOf("/")),m=la(m.protocol,m.host,m.port)+i+"/",f=e.history?new hb(Fc(k,j,b),i,m):new Ib(Gc(k,j,b),b,m,j.substr(i.length+1))):(m=la(m.protocol,m.host,m.port)+(m.path||"")+(m.search?"?"+m.search:"")+"#"+b+"/",f=new Ha(k,b,m));g.bind("click",function(a){if(!a.ctrlKey&&!(a.metaKey||a.which==2)){for(var b=u(a.target);y(b[0].nodeName)!=="a";)if(b[0]===g[0]||!(b=b.parent())[0])return;var d=b.prop("href"),e=f.$$rewriteAppUrl(d);d&&!b.attr("target")&&e&&(f.$$parse(e), -c.$apply(),a.preventDefault(),X.angular["ff-684208-preventDefault"]=!0)}});f.absUrl()!=k&&d.url(f.absUrl(),!0);d.onUrlChange(function(a){f.absUrl()!=a&&(c.$evalAsync(function(){var b=f.absUrl();f.$$parse(a);h(b)}),c.$$phase||c.$digest())});var l=0;c.$watch(function(){var a=d.url(),b=f.$$replace;if(!l||a!=f.absUrl())l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",f.absUrl(),a).defaultPrevented?f.$$parse(a):(d.url(f.absUrl(),b),h(a))});f.$$replace=!1;return l});return f}]}function Jc(){this.$get= -["$window",function(b){function a(a){a instanceof Error&&(a.stack?a=a.message&&a.stack.indexOf(a.message)===-1?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function c(c){var e=b.console||{},g=e[c]||e.log||C;return g.apply?function(){var b=[];n(arguments,function(c){b.push(a(c))});return g.apply(e,b)}:function(a,b){g(a,b)}}return{log:c("log"),warn:c("warn"),info:c("info"),error:c("error")}}]}function Kc(b,a){function c(a){return a.indexOf(s)!= --1}function d(){return o+1<b.length?b.charAt(o+1):!1}function e(a){return"0"<=a&&a<="9"}function g(a){return a==" "||a=="\r"||a=="\t"||a=="\n"||a=="\u000b"||a=="\u00a0"}function h(a){return"a"<=a&&a<="z"||"A"<=a&&a<="Z"||"_"==a||a=="$"}function f(a){return a=="-"||a=="+"||e(a)}function j(a,c,d){d=d||o;throw Error("Lexer Error: "+a+" at column"+(x(c)?"s "+c+"-"+o+" ["+b.substring(c,d)+"]":" "+d)+" in expression ["+b+"].");}function i(){for(var a="",c=o;o<b.length;){var i=y(b.charAt(o));if(i=="."|| -e(i))a+=i;else{var g=d();if(i=="e"&&f(g))a+=i;else if(f(i)&&g&&e(g)&&a.charAt(a.length-1)=="e")a+=i;else if(f(i)&&(!g||!e(g))&&a.charAt(a.length-1)=="e")j("Invalid exponent");else break}o++}a*=1;l.push({index:c,text:a,json:!0,fn:function(){return a}})}function k(){for(var c="",d=o,f,i,j;o<b.length;){var k=b.charAt(o);if(k=="."||h(k)||e(k))k=="."&&(f=o),c+=k;else break;o++}if(f)for(i=o;i<b.length;){k=b.charAt(i);if(k=="("){j=c.substr(f-d+1);c=c.substr(0,f-d);o=i;break}if(g(k))i++;else break}d={index:d, -text:c};if(Ja.hasOwnProperty(c))d.fn=d.json=Ja[c];else{var m=Kb(c,a);d.fn=v(function(a,b){return m(a,b)},{assign:function(a,b){return Lb(a,c,b)}})}l.push(d);j&&(l.push({index:f,text:".",json:!1}),l.push({index:f+1,text:j,json:!1}))}function m(a){var c=o;o++;for(var d="",e=a,f=!1;o<b.length;){var i=b.charAt(o);e+=i;if(f)i=="u"?(i=b.substring(o+1,o+5),i.match(/[\da-f]{4}/i)||j("Invalid unicode escape [\\u"+i+"]"),o+=4,d+=String.fromCharCode(parseInt(i,16))):(f=Lc[i],d+=f?f:i),f=!1;else if(i=="\\")f= -!0;else if(i==a){o++;l.push({index:c,text:e,string:d,json:!0,fn:function(){return d}});return}else d+=i;o++}j("Unterminated quote",c)}for(var l=[],t,o=0,p=[],s,J=":";o<b.length;){s=b.charAt(o);if(c("\"'"))m(s);else if(e(s)||c(".")&&e(d()))i();else if(h(s)){if(k(),"{,".indexOf(J)!=-1&&p[0]=="{"&&(t=l[l.length-1]))t.json=t.text.indexOf(".")==-1}else if(c("(){}[].,;:"))l.push({index:o,text:s,json:":[,".indexOf(J)!=-1&&c("{[")||c("}]:,")}),c("{[")&&p.unshift(s),c("}]")&&p.shift(),o++;else if(g(s)){o++; -continue}else{var n=s+d(),z=Ja[s],V=Ja[n];V?(l.push({index:o,text:n,fn:V}),o+=2):z?(l.push({index:o,text:s,fn:z,json:"[,:".indexOf(J)!=-1&&c("+-")}),o+=1):j("Unexpected next character ",o,o+1)}J=s}return l}function Mc(b,a,c,d){function e(a,c){throw Error("Syntax Error: Token '"+c.text+"' "+a+" at column "+(c.index+1)+" of the expression ["+b+"] starting at ["+b.substring(c.index)+"].");}function g(){if(P.length===0)throw Error("Unexpected end of expression: "+b);return P[0]}function h(a,b,c,d){if(P.length> -0){var e=P[0],f=e.text;if(f==a||f==b||f==c||f==d||!a&&!b&&!c&&!d)return e}return!1}function f(b,c,d,f){return(b=h(b,c,d,f))?(a&&!b.json&&e("is not valid json",b),P.shift(),b):!1}function j(a){f(a)||e("is unexpected, expecting ["+a+"]",h())}function i(a,b){return function(c,d){return a(c,d,b)}}function k(a,b,c){return function(d,e){return b(d,e,a,c)}}function m(){for(var a=[];;)if(P.length>0&&!h("}",")",";","]")&&a.push(w()),!f(";"))return a.length==1?a[0]:function(b,c){for(var d,e=0;e<a.length;e++){var f= -a[e];f&&(d=f(b,c))}return d}}function l(){for(var a=f(),b=c(a.text),d=[];;)if(a=f(":"))d.push(G());else{var e=function(a,c,e){for(var e=[e],f=0;f<d.length;f++)e.push(d[f](a,c));return b.apply(a,e)};return function(){return e}}}function t(){for(var a=o(),b;;)if(b=f("||"))a=k(a,b.fn,o());else return a}function o(){var a=p(),b;if(b=f("&&"))a=k(a,b.fn,o());return a}function p(){var a=s(),b;if(b=f("==","!="))a=k(a,b.fn,p());return a}function s(){var a;a=J();for(var b;b=f("+","-");)a=k(a,b.fn,J());if(b= -f("<",">","<=",">="))a=k(a,b.fn,s());return a}function J(){for(var a=n(),b;b=f("*","/","%");)a=k(a,b.fn,n());return a}function n(){var a;return f("+")?z():(a=f("-"))?k(r,a.fn,n()):(a=f("!"))?i(a.fn,n()):z()}function z(){var a;if(f("("))a=w(),j(")");else if(f("["))a=V();else if(f("{"))a=K();else{var b=f();(a=b.fn)||e("not a primary expression",b)}for(var c;b=f("(","[",".");)b.text==="("?(a=x(a,c),c=null):b.text==="["?(c=a,a=R(a)):b.text==="."?(c=a,a=u(a)):e("IMPOSSIBLE");return a}function V(){var a= -[];if(g().text!="]"){do a.push(G());while(f(","))}j("]");return function(b,c){for(var d=[],e=0;e<a.length;e++)d.push(a[e](b,c));return d}}function K(){var a=[];if(g().text!="}"){do{var b=f(),b=b.string||b.text;j(":");var c=G();a.push({key:b,value:c})}while(f(","))}j("}");return function(b,c){for(var d={},e=0;e<a.length;e++){var f=a[e],i=f.value(b,c);d[f.key]=i}return d}}var r=I(0),$,P=Kc(b,d),G=function(){var a=t(),c,d;return(d=f("="))?(a.assign||e("implies assignment but ["+b.substring(0,d.index)+ -"] can not be assigned to",d),c=t(),function(b,d){return a.assign(b,c(b,d),d)}):a},x=function(a,b){var c=[];if(g().text!=")"){do c.push(G());while(f(","))}j(")");return function(d,e){for(var f=[],i=b?b(d,e):d,g=0;g<c.length;g++)f.push(c[g](d,e));g=a(d,e)||C;return g.apply?g.apply(i,f):g(f[0],f[1],f[2],f[3],f[4])}},u=function(a){var b=f().text,c=Kb(b,d);return v(function(b,d){return c(a(b,d),d)},{assign:function(c,d,e){return Lb(a(c,e),b,d)}})},R=function(a){var b=G();j("]");return v(function(c,d){var e= -a(c,d),f=b(c,d),i;if(!e)return q;if((e=e[f])&&e.then){i=e;if(!("$$v"in e))i.$$v=q,i.then(function(a){i.$$v=a});e=e.$$v}return e},{assign:function(c,d,e){return a(c,e)[b(c,e)]=d}})},w=function(){for(var a=G(),b;;)if(b=f("|"))a=k(a,b.fn,l());else return a};a?(G=t,x=u=R=w=function(){e("is not valid json",{text:b,index:0})},$=z()):$=m();P.length!==0&&e("is an unexpected token",P[0]);return $}function Lb(b,a,c){for(var a=a.split("."),d=0;a.length>1;d++){var e=a.shift(),g=b[e];g||(g={},b[e]=g);b=g}return b[a.shift()]= -c}function gb(b,a,c){if(!a)return b;for(var a=a.split("."),d,e=b,g=a.length,h=0;h<g;h++)d=a[h],b&&(b=(e=b)[d]);return!c&&H(b)?Ua(e,b):b}function Mb(b,a,c,d,e){return function(g,h){var f=h&&h.hasOwnProperty(b)?h:g,j;if(f===null||f===q)return f;if((f=f[b])&&f.then){if(!("$$v"in f))j=f,j.$$v=q,j.then(function(a){j.$$v=a});f=f.$$v}if(!a||f===null||f===q)return f;if((f=f[a])&&f.then){if(!("$$v"in f))j=f,j.$$v=q,j.then(function(a){j.$$v=a});f=f.$$v}if(!c||f===null||f===q)return f;if((f=f[c])&&f.then){if(!("$$v"in -f))j=f,j.$$v=q,j.then(function(a){j.$$v=a});f=f.$$v}if(!d||f===null||f===q)return f;if((f=f[d])&&f.then){if(!("$$v"in f))j=f,j.$$v=q,j.then(function(a){j.$$v=a});f=f.$$v}if(!e||f===null||f===q)return f;if((f=f[e])&&f.then){if(!("$$v"in f))j=f,j.$$v=q,j.then(function(a){j.$$v=a});f=f.$$v}return f}}function Kb(b,a){if(ib.hasOwnProperty(b))return ib[b];var c=b.split("."),d=c.length,e;if(a)e=d<6?Mb(c[0],c[1],c[2],c[3],c[4]):function(a,b){var e=0,i;do i=Mb(c[e++],c[e++],c[e++],c[e++],c[e++])(a,b),b=q, -a=i;while(e<d);return i};else{var g="var l, fn, p;\n";n(c,function(a,b){g+="if(s === null || s === undefined) return s;\nl=s;\ns="+(b?"s":'((k&&k.hasOwnProperty("'+a+'"))?k:s)')+'["'+a+'"];\nif (s && s.then) {\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n'});g+="return s;";e=Function("s","k",g);e.toString=function(){return g}}return ib[b]=e}function Nc(){var b={};this.$get=["$filter","$sniffer",function(a,c){return function(d){switch(typeof d){case "string":return b.hasOwnProperty(d)? -b[d]:b[d]=Mc(d,!1,a,c.csp);case "function":return d;default:return C}}}]}function Oc(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return Pc(function(a){b.$evalAsync(a)},a)}]}function Pc(b,a){function c(a){return a}function d(a){return h(a)}var e=function(){var f=[],j,i;return i={resolve:function(a){if(f){var c=f;f=q;j=g(a);c.length&&b(function(){for(var a,b=0,d=c.length;b<d;b++)a=c[b],j.then(a[0],a[1])})}},reject:function(a){i.resolve(h(a))},promise:{then:function(b,i){var g=e(),h= -function(d){try{g.resolve((b||c)(d))}catch(e){a(e),g.reject(e)}},o=function(b){try{g.resolve((i||d)(b))}catch(c){a(c),g.reject(c)}};f?f.push([h,o]):j.then(h,o);return g.promise}}}},g=function(a){return a&&a.then?a:{then:function(c){var d=e();b(function(){d.resolve(c(a))});return d.promise}}},h=function(a){return{then:function(c,i){var g=e();b(function(){g.resolve((i||d)(a))});return g.promise}}};return{defer:e,reject:h,when:function(f,j,i){var k=e(),m,l=function(b){try{return(j||c)(b)}catch(d){return a(d), -h(d)}},t=function(b){try{return(i||d)(b)}catch(c){return a(c),h(c)}};b(function(){g(f).then(function(a){m||(m=!0,k.resolve(g(a).then(l,t)))},function(a){m||(m=!0,k.resolve(t(a)))})});return k.promise},all:function(a){var b=e(),c=a.length,d=[];c?n(a,function(a,e){g(a).then(function(a){e in d||(d[e]=a,--c||b.resolve(d))},function(a){e in d||b.reject(a)})}):b.resolve(d);return b.promise}}}function Qc(){var b={};this.when=function(a,c){b[a]=v({reloadOnSearch:!0},c);if(a){var d=a[a.length-1]=="/"?a.substr(0, -a.length-1):a+"/";b[d]={redirectTo:a}}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache",function(a,c,d,e,g,h,f){function j(a,b){for(var b="^"+b.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+"$",c="",d=[],e={},f=/:(\w+)/g,i,g=0;(i=f.exec(b))!==null;)c+=b.slice(g,i.index),c+="([^\\/]*)",d.push(i[1]),g=f.lastIndex;c+=b.substr(g);var h=a.match(RegExp(c));h&&n(d,function(a,b){e[a]=h[b+1]});return h? -e:null}function i(){var b=k(),i=t.current;if(b&&i&&b.$route===i.$route&&ga(b.pathParams,i.pathParams)&&!b.reloadOnSearch&&!l)i.params=b.params,U(i.params,d),a.$broadcast("$routeUpdate",i);else if(b||i)l=!1,a.$broadcast("$routeChangeStart",b,i),(t.current=b)&&b.redirectTo&&(A(b.redirectTo)?c.path(m(b.redirectTo,b.params)).search(b.params).replace():c.url(b.redirectTo(b.pathParams,c.path(),c.search())).replace()),e.when(b).then(function(){if(b){var a=[],c=[],d;n(b.resolve||{},function(b,d){a.push(d); -c.push(A(b)?g.get(b):g.invoke(b))});if(!x(d=b.template))if(x(d=b.templateUrl))d=h.get(d,{cache:f}).then(function(a){return a.data});x(d)&&(a.push("$template"),c.push(d));return e.all(c).then(function(b){var c={};n(b,function(b,d){c[a[d]]=b});return c})}}).then(function(c){if(b==t.current){if(b)b.locals=c,U(b.params,d);a.$broadcast("$routeChangeSuccess",b,i)}},function(c){b==t.current&&a.$broadcast("$routeChangeError",b,i,c)})}function k(){var a,d;n(b,function(b,e){if(!d&&(a=j(c.path(),e)))d=za(b, -{params:v({},c.search(),a),pathParams:a}),d.$route=b});return d||b[null]&&za(b[null],{params:{},pathParams:{}})}function m(a,b){var c=[];n((a||"").split(":"),function(a,d){if(d==0)c.push(a);else{var e=a.match(/(\w+)(.*)/),f=e[1];c.push(b[f]);c.push(e[2]||"");delete b[f]}});return c.join("")}var l=!1,t={routes:b,reload:function(){l=!0;a.$evalAsync(i)}};a.$on("$locationChangeSuccess",i);return t}]}function Rc(){this.$get=I({})}function Sc(){var b=10;this.digestTtl=function(a){arguments.length&&(b=a); -return b};this.$get=["$injector","$exceptionHandler","$parse",function(a,c,d){function e(){this.$id=ya();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this["this"]=this.$root=this;this.$$destroyed=!1;this.$$asyncQueue=[];this.$$listeners={};this.$$isolateBindings={}}function g(a){if(j.$$phase)throw Error(j.$$phase+" already in progress");j.$$phase=a}function h(a,b){var c=d(a);ra(c,b);return c}function f(){}e.prototype={$new:function(a){if(H(a))throw Error("API-CHANGE: Use $controller to instantiate controllers."); -a?(a=new e,a.$root=this.$root):(a=function(){},a.prototype=this,a=new a,a.$id=ya());a["this"]=a;a.$$listeners={};a.$parent=this;a.$$asyncQueue=[];a.$$watchers=a.$$nextSibling=a.$$childHead=a.$$childTail=null;a.$$prevSibling=this.$$childTail;this.$$childHead?this.$$childTail=this.$$childTail.$$nextSibling=a:this.$$childHead=this.$$childTail=a;return a},$watch:function(a,b,c){var d=h(a,"watch"),e=this.$$watchers,g={fn:b,last:f,get:d,exp:a,eq:!!c};if(!H(b)){var j=h(b||C,"listener");g.fn=function(a,b, -c){j(c)}}if(!e)e=this.$$watchers=[];e.unshift(g);return function(){Ta(e,g)}},$digest:function(){var a,d,e,h,t,o,p,s=b,n,F=[],z,q;g("$digest");do{p=!1;n=this;do{for(t=n.$$asyncQueue;t.length;)try{n.$eval(t.shift())}catch(K){c(K)}if(h=n.$$watchers)for(o=h.length;o--;)try{if(a=h[o],(d=a.get(n))!==(e=a.last)&&!(a.eq?ga(d,e):typeof d=="number"&&typeof e=="number"&&isNaN(d)&&isNaN(e)))p=!0,a.last=a.eq?U(d):d,a.fn(d,e===f?d:e,n),s<5&&(z=4-s,F[z]||(F[z]=[]),q=H(a.exp)?"fn: "+(a.exp.name||a.exp.toString()): -a.exp,q+="; newVal: "+da(d)+"; oldVal: "+da(e),F[z].push(q))}catch(r){c(r)}if(!(h=n.$$childHead||n!==this&&n.$$nextSibling))for(;n!==this&&!(h=n.$$nextSibling);)n=n.$parent}while(n=h);if(p&&!s--)throw j.$$phase=null,Error(b+" $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: "+da(F));}while(p||t.length);j.$$phase=null},$destroy:function(){if(!(j==this||this.$$destroyed)){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(a.$$childHead==this)a.$$childHead= -this.$$nextSibling;if(a.$$childTail==this)a.$$childTail=this.$$prevSibling;if(this.$$prevSibling)this.$$prevSibling.$$nextSibling=this.$$nextSibling;if(this.$$nextSibling)this.$$nextSibling.$$prevSibling=this.$$prevSibling;this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null}},$eval:function(a,b){return d(a)(this,b)},$evalAsync:function(a){this.$$asyncQueue.push(a)},$apply:function(a){try{return g("$apply"),this.$eval(a)}catch(b){c(b)}finally{j.$$phase=null;try{j.$digest()}catch(d){throw c(d), -d;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);return function(){c[Aa(c,b)]=null}},$emit:function(a,b){var d=[],e,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},j=[h].concat(ha.call(arguments,1)),n,q;do{e=f.$$listeners[a]||d;h.currentScope=f;n=0;for(q=e.length;n<q;n++)if(e[n])try{if(e[n].apply(null,j),g)return h}catch(z){c(z)}else e.splice(n,1),n--,q--;f=f.$parent}while(f); -return h},$broadcast:function(a,b){var d=this,e=this,f={name:a,targetScope:this,preventDefault:function(){f.defaultPrevented=!0},defaultPrevented:!1},g=[f].concat(ha.call(arguments,1)),h,j;do{d=e;f.currentScope=d;e=d.$$listeners[a]||[];h=0;for(j=e.length;h<j;h++)if(e[h])try{e[h].apply(null,g)}catch(n){c(n)}else e.splice(h,1),h--,j--;if(!(e=d.$$childHead||d!==this&&d.$$nextSibling))for(;d!==this&&!(e=d.$$nextSibling);)d=d.$parent}while(d=e);return f}};var j=new e;return j}]}function Tc(){this.$get= -["$window",function(b){var a={},c=E((/android (\d+)/.exec(y(b.navigator.userAgent))||[])[1]);return{history:!(!b.history||!b.history.pushState||c<4),hashchange:"onhashchange"in b&&(!b.document.documentMode||b.document.documentMode>7),hasEvent:function(c){if(c=="input"&&Z==9)return!1;if(w(a[c])){var e=b.document.createElement("div");a[c]="on"+c in e}return a[c]},csp:!1}}]}function Uc(){this.$get=I(X)}function Nb(b){var a={},c,d,e;if(!b)return a;n(b.split("\n"),function(b){e=b.indexOf(":");c=y(O(b.substr(0, -e)));d=O(b.substr(e+1));c&&(a[c]?a[c]+=", "+d:a[c]=d)});return a}function Ob(b){var a=M(b)?b:q;return function(c){a||(a=Nb(b));return c?a[y(c)]||null:a}}function Pb(b,a,c){if(H(c))return c(b,a);n(c,function(c){b=c(b,a)});return b}function Vc(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d=this.defaults={transformResponse:[function(d){A(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=ob(d,!0)));return d}],transformRequest:[function(a){return M(a)&&xa.apply(a)!=="[object File]"?da(a):a}], -headers:{common:{Accept:"application/json, text/plain, */*","X-Requested-With":"XMLHttpRequest"},post:{"Content-Type":"application/json;charset=utf-8"},put:{"Content-Type":"application/json;charset=utf-8"}}},e=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a,b,c,j,i,k){function m(a){function c(a){var b=v({},a,{data:Pb(a.data,a.headers,f)});return 200<=a.status&&a.status<300?b:i.reject(b)}a.method=ma(a.method);var e=a.transformRequest|| -d.transformRequest,f=a.transformResponse||d.transformResponse,g=d.headers,g=v({"X-XSRF-TOKEN":b.cookies()["XSRF-TOKEN"]},g.common,g[y(a.method)],a.headers),e=Pb(a.data,Ob(g),e),j;w(a.data)&&delete g["Content-Type"];j=l(a,e,g);j=j.then(c,c);n(p,function(a){j=a(j)});j.success=function(b){j.then(function(c){b(c.data,c.status,c.headers,a)});return j};j.error=function(b){j.then(null,function(c){b(c.data,c.status,c.headers,a)});return j};return j}function l(b,c,d){function e(a,b,c){n&&(200<=a&&a<300?n.put(q, -[a,b,Nb(c)]):n.remove(q));f(b,a,c);j.$apply()}function f(a,c,d){c=Math.max(c,0);(200<=c&&c<300?k.resolve:k.reject)({data:a,status:c,headers:Ob(d),config:b})}function h(){var a=Aa(m.pendingRequests,b);a!==-1&&m.pendingRequests.splice(a,1)}var k=i.defer(),l=k.promise,n,p,q=t(b.url,b.params);m.pendingRequests.push(b);l.then(h,h);b.cache&&b.method=="GET"&&(n=M(b.cache)?b.cache:o);if(n)if(p=n.get(q))if(p.then)return p.then(h,h),p;else B(p)?f(p[1],p[0],U(p[2])):f(p,200,{});else n.put(q,l);p||a(b.method, -q,c,e,d,b.timeout,b.withCredentials);return l}function t(a,b){if(!b)return a;var c=[];fc(b,function(a,b){a==null||a==q||(M(a)&&(a=da(a)),c.push(encodeURIComponent(b)+"="+encodeURIComponent(a)))});return a+(a.indexOf("?")==-1?"?":"&")+c.join("&")}var o=c("$http"),p=[];n(e,function(a){p.push(A(a)?k.get(a):k.invoke(a))});m.pendingRequests=[];(function(a){n(arguments,function(a){m[a]=function(b,c){return m(v(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){n(arguments,function(a){m[a]= -function(b,c,d){return m(v(d||{},{method:a,url:b,data:c}))}})})("post","put");m.defaults=d;return m}]}function Wc(){this.$get=["$browser","$window","$document",function(b,a,c){return Xc(b,Yc,b.defer,a.angular.callbacks,c[0],a.location.protocol.replace(":",""))}]}function Xc(b,a,c,d,e,g){function h(a,b){var c=e.createElement("script"),d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;Z?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror= -d;e.body.appendChild(c)}return function(e,j,i,k,m,l,t){function o(a,c,d,e){c=(j.match(Gb)||["",g])[1]=="file"?d?200:404:c;a(c==1223?204:c,d,e);b.$$completeOutstandingRequest(C)}b.$$incOutstandingRequestCount();j=j||b.url();if(y(e)=="jsonp"){var p="_"+(d.counter++).toString(36);d[p]=function(a){d[p].data=a};h(j.replace("JSON_CALLBACK","angular.callbacks."+p),function(){d[p].data?o(k,200,d[p].data):o(k,-2);delete d[p]})}else{var s=new a;s.open(e,j,!0);n(m,function(a,b){a&&s.setRequestHeader(b,a)}); -var q;s.onreadystatechange=function(){if(s.readyState==4){var a=s.getAllResponseHeaders(),b=["Cache-Control","Content-Language","Content-Type","Expires","Last-Modified","Pragma"];a||(a="",n(b,function(b){var c=s.getResponseHeader(b);c&&(a+=b+": "+c+"\n")}));o(k,q||s.status,s.responseText,a)}};if(t)s.withCredentials=!0;s.send(i||"");l>0&&c(function(){q=-1;s.abort()},l)}}}function Zc(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0, -maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),SHORTMONTH:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),DAY:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),SHORTDAY:"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","), -AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return b===1?"one":"other"}}}}function $c(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,f,j){var i=c.defer(),k=i.promise,m=x(j)&&!j,f=a.defer(function(){try{i.resolve(e())}catch(a){i.reject(a),d(a)}m||b.$apply()},f),j=function(){delete g[k.$$timeoutId]}; -k.$$timeoutId=f;g[f]=i;k.then(j,j);return k}var g={};e.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),a.defer.cancel(b.$$timeoutId)):!1};return e}]}function Qb(b){function a(a,e){return b.factory(a+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Rb);a("date",Sb);a("filter",ad);a("json",bd);a("limitTo",cd);a("lowercase",dd);a("number",Tb);a("orderBy",Ub);a("uppercase",ed)}function ad(){return function(b, -a){if(!B(b))return b;var c=[];c.check=function(a){for(var b=0;b<c.length;b++)if(!c[b](a))return!1;return!0};var d=function(a,b){if(b.charAt(0)==="!")return!d(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return(""+a).toLowerCase().indexOf(b)>-1;case "object":for(var c in a)if(c.charAt(0)!=="$"&&d(a[c],b))return!0;return!1;case "array":for(c=0;c<a.length;c++)if(d(a[c],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a= -{$:a};case "object":for(var e in a)e=="$"?function(){var b=(""+a[e]).toLowerCase();b&&c.push(function(a){return d(a,b)})}():function(){var b=e,f=(""+a[e]).toLowerCase();f&&c.push(function(a){return d(gb(a,b),f)})}();break;case "function":c.push(a);break;default:return b}for(var g=[],h=0;h<b.length;h++){var f=b[h];c.check(f)&&g.push(f)}return g}}function Rb(b){var a=b.NUMBER_FORMATS;return function(b,d){if(w(d))d=a.CURRENCY_SYM;return Vb(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,2).replace(/\u00A4/g, -d)}}function Tb(b){var a=b.NUMBER_FORMATS;return function(b,d){return Vb(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function Vb(b,a,c,d,e){if(isNaN(b)||!isFinite(b))return"";var g=b<0,b=Math.abs(b),h=b+"",f="",j=[],i=!1;if(h.indexOf("e")!==-1){var k=h.match(/([\d\.]+)e(-?)(\d+)/);k&&k[2]=="-"&&k[3]>e+1?h="0":(f=h,i=!0)}if(!i){h=(h.split(Wb)[1]||"").length;w(e)&&(e=Math.min(Math.max(a.minFrac,h),a.maxFrac));var h=Math.pow(10,e),b=Math.round(b*h)/h,b=(""+b).split(Wb),h=b[0],b=b[1]||"",i=0,k=a.lgSize, -m=a.gSize;if(h.length>=k+m)for(var i=h.length-k,l=0;l<i;l++)(i-l)%m===0&&l!==0&&(f+=c),f+=h.charAt(l);for(l=i;l<h.length;l++)(h.length-l)%k===0&&l!==0&&(f+=c),f+=h.charAt(l);for(;b.length<e;)b+="0";e&&e!=="0"&&(f+=d+b.substr(0,e))}j.push(g?a.negPre:a.posPre);j.push(f);j.push(g?a.negSuf:a.posSuf);return j.join("")}function jb(b,a,c){var d="";b<0&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function N(b,a,c,d){return function(e){e=e["get"+b]();if(c>0||e>-c)e+= -c;e===0&&c==-12&&(e=12);return jb(e,a,d)}}function Ka(b,a){return function(c,d){var e=c["get"+b](),g=ma(a?"SHORT"+b:b);return d[g][e]}}function Sb(b){function a(a){var b;if(b=a.match(c)){var a=new Date(0),g=0,h=0;b[9]&&(g=E(b[9]+b[10]),h=E(b[9]+b[11]));a.setUTCFullYear(E(b[1]),E(b[2])-1,E(b[3]));a.setUTCHours(E(b[4]||0)-g,E(b[5]||0)-h,E(b[6]||0),E(b[7]||0))}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g= -"",h=[],f,j,e=e||"mediumDate",e=b.DATETIME_FORMATS[e]||e;A(c)&&(c=fd.test(c)?E(c):a(c));Ra(c)&&(c=new Date(c));if(!oa(c))return c;for(;e;)(j=gd.exec(e))?(h=h.concat(ha.call(j,1)),e=h.pop()):(h.push(e),e=null);n(h,function(a){f=hd[a];g+=f?f(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function bd(){return function(b){return da(b,!0)}}function cd(){return function(b,a){if(!(b instanceof Array))return b;var a=E(a),c=[],d,e;if(!b||!(b instanceof Array))return c;a>b.length? -a=b.length:a<-b.length&&(a=-b.length);a>0?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function Ub(b){return function(a,c,d){function e(a,b){return Va(b)?function(b,c){return a(c,b)}:a}if(!B(a))return a;if(!c)return a;for(var c=B(c)?c:[c],c=Sa(c,function(a){var c=!1,d=a||na;if(A(a)){if(a.charAt(0)=="+"||a.charAt(0)=="-")c=a.charAt(0)=="-",a=a.substring(1);d=b(a)}return e(function(a,b){var c;c=d(a);var e=d(b),f=typeof c,g=typeof e;f==g?(f=="string"&&(c=c.toLowerCase()),f== -"string"&&(e=e.toLowerCase()),c=c===e?0:c<e?-1:1):c=f<g?-1:1;return c},c)}),g=[],h=0;h<a.length;h++)g.push(a[h]);return g.sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(e!==0)return e}return 0},d))}}function Q(b){H(b)&&(b={link:b});b.restrict=b.restrict||"AC";return I(b)}function Xb(b,a){function c(a,c){c=c?"-"+Za(c,"-"):"";b.removeClass((a?La:Ma)+c).addClass((a?Ma:La)+c)}var d=this,e=b.parent().controller("form")||Na,g=0,h=d.$error={};d.$name=a.name;d.$dirty=!1;d.$pristine=!0; -d.$valid=!0;d.$invalid=!1;e.$addControl(d);b.addClass(Oa);c(!0);d.$addControl=function(a){a.$name&&!d.hasOwnProperty(a.$name)&&(d[a.$name]=a)};d.$removeControl=function(a){a.$name&&d[a.$name]===a&&delete d[a.$name];n(h,function(b,c){d.$setValidity(c,!0,a)})};d.$setValidity=function(a,b,i){var k=h[a];if(b){if(k&&(Ta(k,i),!k.length)){g--;if(!g)c(b),d.$valid=!0,d.$invalid=!1;h[a]=!1;c(!0,a);e.$setValidity(a,!0,d)}}else{g||c(b);if(k){if(Aa(k,i)!=-1)return}else h[a]=k=[],g++,c(!1,a),e.$setValidity(a,!1, -d);k.push(i);d.$valid=!1;d.$invalid=!0}};d.$setDirty=function(){b.removeClass(Oa).addClass(Yb);d.$dirty=!0;d.$pristine=!1;e.$setDirty()}}function T(b){return w(b)||b===""||b===null||b!==b}function Pa(b,a,c,d,e,g){var h=function(){var c=O(a.val());d.$viewValue!==c&&b.$apply(function(){d.$setViewValue(c)})};if(e.hasEvent("input"))a.bind("input",h);else{var f;a.bind("keydown",function(a){a=a.keyCode;a===91||15<a&&a<19||37<=a&&a<=40||f||(f=g.defer(function(){h();f=null}))});a.bind("change",h)}d.$render= -function(){a.val(T(d.$viewValue)?"":d.$viewValue)};var j=c.ngPattern,i=function(a,b){return T(b)||a.test(b)?(d.$setValidity("pattern",!0),b):(d.$setValidity("pattern",!1),q)};j&&(j.match(/^\/(.*)\/$/)?(j=RegExp(j.substr(1,j.length-2)),e=function(a){return i(j,a)}):e=function(a){var c=b.$eval(j);if(!c||!c.test)throw Error("Expected "+j+" to be a RegExp but was "+c);return i(c,a)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var k=E(c.ngMinlength),e=function(a){return!T(a)&&a.length< -k?(d.$setValidity("minlength",!1),q):(d.$setValidity("minlength",!0),a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var m=E(c.ngMaxlength),c=function(a){return!T(a)&&a.length>m?(d.$setValidity("maxlength",!1),q):(d.$setValidity("maxlength",!0),a)};d.$parsers.push(c);d.$formatters.push(c)}}function kb(b,a){b="ngClass"+b;return Q(function(c,d,e){function g(b){if(a===!0||c.$index%2===a)j&&b!==j&&h(j),f(b);j=b}function h(a){M(a)&&!B(a)&&(a=Sa(a,function(a,b){if(a)return b}));d.removeClass(B(a)? -a.join(" "):a)}function f(a){M(a)&&!B(a)&&(a=Sa(a,function(a,b){if(a)return b}));a&&d.addClass(B(a)?a.join(" "):a)}var j=q;c.$watch(e[b],g,!0);e.$observe("class",function(){var a=c.$eval(e[b]);g(a,a)});b!=="ngClass"&&c.$watch("$index",function(d,g){var j=d%2;j!==g%2&&(j==a?f(c.$eval(e[b])):h(c.$eval(e[b])))})})}var y=function(b){return A(b)?b.toLowerCase():b},ma=function(b){return A(b)?b.toUpperCase():b},Z=E((/msie (\d+)/.exec(y(navigator.userAgent))||[])[1]),u,ca,ha=[].slice,Qa=[].push,xa=Object.prototype.toString, -Zb=X.angular||(X.angular={}),ta,fb,aa=["0","0","0"];C.$inject=[];na.$inject=[];fb=Z<9?function(b){b=b.nodeName?b:b[0];return b.scopeName&&b.scopeName!="HTML"?ma(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var kc=/[A-Z]/g,id={full:"1.0.5",major:1,minor:0,dot:5,codeName:"flatulent-propulsion"},Ca=L.cache={},Ba=L.expando="ng-"+(new Date).getTime(),oc=1,$b=X.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+ -a,c)},db=X.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},mc=/([\:\-\_]+(.))/g,nc=/^moz([A-Z])/,va=L.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;this.bind("DOMContentLoaded",a);L(X).bind("load",a)},toString:function(){var b=[];n(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return b>=0?u(this[b]):u(this[this.length+b])},length:0,push:Qa,sort:[].sort,splice:[].splice},Fa={};n("multiple,selected,checked,disabled,readOnly,required".split(","), -function(b){Fa[y(b)]=b});var Ab={};n("input,select,option,textarea,button,form".split(","),function(b){Ab[ma(b)]=!0});n({data:vb,inheritedData:Ea,scope:function(b){return Ea(b,"$scope")},controller:yb,injector:function(b){return Ea(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Da,css:function(b,a,c){a=sb(a);if(x(c))b.style[a]=c;else{var d;Z<=8&&(d=b.currentStyle&&b.currentStyle[a],d===""&&(d="auto"));d=d||b.style[a];Z<=8&&(d=d===""?q:d);return d}},attr:function(b,a,c){var d= -y(a);if(Fa[d])if(x(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||C).specified?d:q;else if(x(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),b===null?q:b},prop:function(b,a,c){if(x(c))b[a]=c;else return b[a]},text:v(Z<9?function(b,a){if(b.nodeType==1){if(w(a))return b.innerText;b.innerText=a}else{if(w(a))return b.nodeValue;b.nodeValue=a}}:function(b,a){if(w(a))return b.textContent;b.textContent=a},{$dv:""}), -val:function(b,a){if(w(a))return b.value;b.value=a},html:function(b,a){if(w(a))return b.innerHTML;for(var c=0,d=b.childNodes;c<d.length;c++)sa(d[c]);b.innerHTML=a}},function(b,a){L.prototype[a]=function(a,d){var e,g;if((b.length==2&&b!==Da&&b!==yb?a:d)===q)if(M(a)){for(e=0;e<this.length;e++)if(b===vb)b(this[e],a);else for(g in a)b(this[e],g,a[g]);return this}else{if(this.length)return b(this[0],a,d)}else{for(e=0;e<this.length;e++)b(this[e],a,d);return this}return b.$dv}});n({removeData:tb,dealoc:sa, -bind:function a(c,d,e){var g=ba(c,"events"),h=ba(c,"handle");g||ba(c,"events",g={});h||ba(c,"handle",h=pc(c,g));n(d.split(" "),function(d){var j=g[d];if(!j){if(d=="mouseenter"||d=="mouseleave"){var i=0;g.mouseenter=[];g.mouseleave=[];a(c,"mouseover",function(a){i++;i==1&&h(a,"mouseenter")});a(c,"mouseout",function(a){i--;i==0&&h(a,"mouseleave")})}else $b(c,d,h),g[d]=[];j=g[d]}j.push(e)})},unbind:ub,replaceWith:function(a,c){var d,e=a.parentNode;sa(a);n(new L(c),function(c){d?e.insertBefore(c,d.nextSibling): -e.replaceChild(c,a);d=c})},children:function(a){var c=[];n(a.childNodes,function(a){a.nodeType===1&&c.push(a)});return c},contents:function(a){return a.childNodes||[]},append:function(a,c){n(new L(c),function(c){a.nodeType===1&&a.appendChild(c)})},prepend:function(a,c){if(a.nodeType===1){var d=a.firstChild;n(new L(c),function(c){d?a.insertBefore(c,d):(a.appendChild(c),d=c)})}},wrap:function(a,c){var c=u(c)[0],d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:function(a){sa(a);var c=a.parentNode; -c&&c.removeChild(a)},after:function(a,c){var d=a,e=a.parentNode;n(new L(c),function(a){e.insertBefore(a,d.nextSibling);d=a})},addClass:xb,removeClass:wb,toggleClass:function(a,c,d){w(d)&&(d=!Da(a,c));(d?xb:wb)(a,c)},parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},next:function(a){if(a.nextElementSibling)return a.nextElementSibling;for(a=a.nextSibling;a!=null&&a.nodeType!==1;)a=a.nextSibling;return a},find:function(a,c){return a.getElementsByTagName(c)},clone:cb,triggerHandler:function(a, -c){var d=(ba(a,"events")||{})[c];n(d,function(c){c.call(a,null)})}},function(a,c){L.prototype[c]=function(c,e){for(var g,h=0;h<this.length;h++)g==q?(g=a(this[h],c,e),g!==q&&(g=u(g))):bb(g,a(this[h],c,e));return g==q?this:g}});Ga.prototype={put:function(a,c){this[fa(a)]=c},get:function(a){return this[fa(a)]},remove:function(a){var c=this[a=fa(a)];delete this[a];return c}};eb.prototype={push:function(a,c){var d=this[a=fa(a)];d?d.push(c):this[a]=[c]},shift:function(a){var c=this[a=fa(a)];if(c)return c.length== -1?(delete this[a],c[0]):c.shift()},peek:function(a){if(a=this[fa(a)])return a[0]}};var rc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,sc=/,/,tc=/^\s*(_?)(\S+?)\1\s*$/,qc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Db="Non-assignable model expression: ";Cb.$inject=["$provide"];var Ac=/^(x[\:\-_]|data[\:\-_])/i,Gb=/^([^:]+):\/\/(\w+:{0,1}\w*@)?([\w\.-]*)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,ac=/^([^\?#]*)?(\?([^#]*))?(#(.*))?$/,Hc=ac,Hb={http:80,https:443,ftp:21};hb.prototype={$$replace:!1,absUrl:Ia("$$absUrl"), -url:function(a,c){if(w(a))return this.$$url;var d=ac.exec(a);d[1]&&this.path(decodeURIComponent(d[1]));if(d[2]||d[1])this.search(d[3]||"");this.hash(d[5]||"",c);return this},protocol:Ia("$$protocol"),host:Ia("$$host"),port:Ia("$$port"),path:Jb("$$path",function(a){return a.charAt(0)=="/"?a:"/"+a}),search:function(a,c){if(w(a))return this.$$search;x(c)?c===null?delete this.$$search[a]:this.$$search[a]=c:this.$$search=A(a)?Wa(a):a;this.$$compose();return this},hash:Jb("$$hash",na),replace:function(){this.$$replace= -!0;return this}};Ha.prototype=za(hb.prototype);Ib.prototype=za(Ha.prototype);var Ja={"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:C,"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return x(d)?x(e)?d+e:d:x(e)?e:q},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(x(d)?d:0)-(x(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"^":function(a,c,d,e){return d(a,c)^e(a,c)}, -"=":C,"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Lc= -{n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'},ib={},Yc=X.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");};Qb.$inject=["$provide"];Rb.$inject=["$locale"];Tb.$inject=["$locale"];var Wb=".",hd={yyyy:N("FullYear",4),yy:N("FullYear",2,0,!0),y:N("FullYear",1),MMMM:Ka("Month"), -MMM:Ka("Month",!0),MM:N("Month",2,1),M:N("Month",1,1),dd:N("Date",2),d:N("Date",1),HH:N("Hours",2),H:N("Hours",1),hh:N("Hours",2,-12),h:N("Hours",1,-12),mm:N("Minutes",2),m:N("Minutes",1),ss:N("Seconds",2),s:N("Seconds",1),EEEE:Ka("Day"),EEE:Ka("Day",!0),a:function(a,c){return a.getHours()<12?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){var a=-1*a.getTimezoneOffset(),c=a>=0?"+":"";c+=jb(a/60,2)+jb(Math.abs(a%60),2);return c}},gd=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, -fd=/^\d+$/;Sb.$inject=["$locale"];var dd=I(y),ed=I(ma);Ub.$inject=["$parse"];var jd=I({restrict:"E",compile:function(a,c){Z<=8&&(!c.href&&!c.name&&c.$set("href",""),a.append(Y.createComment("IE fix")));return function(a,c){c.bind("click",function(a){c.attr("href")||a.preventDefault()})}}}),lb={};n(Fa,function(a,c){var d=ea("ng-"+c);lb[d]=function(){return{priority:100,compile:function(){return function(a,g,h){a.$watch(h[d],function(a){h.$set(c,!!a)})}}}}});n(["src","href"],function(a){var c=ea("ng-"+ -a);lb[c]=function(){return{priority:99,link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(a,c),Z&&e.prop(a,g[a]))})}}}});var Na={$addControl:C,$removeControl:C,$setValidity:C,$setDirty:C};Xb.$inject=["$element","$attrs","$scope"];var Qa=function(a){return["$timeout",function(c){var d={name:"form",restrict:"E",controller:Xb,compile:function(){return{pre:function(a,d,h,f){if(!h.action){var j=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};$b(d[0],"submit",j);d.bind("$destroy", -function(){c(function(){db(d[0],"submit",j)},0,!1)})}var i=d.parent().controller("form"),k=h.name||h.ngForm;k&&(a[k]=f);i&&d.bind("$destroy",function(){i.$removeControl(f);k&&(a[k]=q);v(f,Na)})}}}};return a?v(U(d),{restrict:"EAC"}):d}]},kd=Qa(),ld=Qa(!0),md=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,nd=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/,od=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,bc={text:Pa,number:function(a,c,d,e,g,h){Pa(a,c,d,e,g,h);e.$parsers.push(function(a){var c= -T(a);return c||od.test(a)?(e.$setValidity("number",!0),a===""?null:c?a:parseFloat(a)):(e.$setValidity("number",!1),q)});e.$formatters.push(function(a){return T(a)?"":""+a});if(d.min){var f=parseFloat(d.min),a=function(a){return!T(a)&&a<f?(e.$setValidity("min",!1),q):(e.$setValidity("min",!0),a)};e.$parsers.push(a);e.$formatters.push(a)}if(d.max){var j=parseFloat(d.max),d=function(a){return!T(a)&&a>j?(e.$setValidity("max",!1),q):(e.$setValidity("max",!0),a)};e.$parsers.push(d);e.$formatters.push(d)}e.$formatters.push(function(a){return T(a)|| -Ra(a)?(e.$setValidity("number",!0),a):(e.$setValidity("number",!1),q)})},url:function(a,c,d,e,g,h){Pa(a,c,d,e,g,h);a=function(a){return T(a)||md.test(a)?(e.$setValidity("url",!0),a):(e.$setValidity("url",!1),q)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,h){Pa(a,c,d,e,g,h);a=function(a){return T(a)||nd.test(a)?(e.$setValidity("email",!0),a):(e.$setValidity("email",!1),q)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){w(d.name)&&c.attr("name",ya());c.bind("click", -function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,h=d.ngFalseValue;A(g)||(g=!0);A(h)||(h=!1);c.bind("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:h})},hidden:C,button:C,submit:C,reset:C}, -cc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,h){h&&(bc[y(g.type)]||bc.text)(d,e,g,h,c,a)}}}],Ma="ng-valid",La="ng-invalid",Oa="ng-pristine",Yb="ng-dirty",pd=["$scope","$exceptionHandler","$attrs","$element","$parse",function(a,c,d,e,g){function h(a,c){c=c?"-"+Za(c,"-"):"";e.removeClass((a?La:Ma)+c).addClass((a?Ma:La)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine= -!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var f=g(d.ngModel),j=f.assign;if(!j)throw Error(Db+d.ngModel+" ("+qa(e)+")");this.$render=C;var i=e.inheritedData("$formController")||Na,k=0,m=this.$error={};e.addClass(Oa);h(!0);this.$setValidity=function(a,c){if(m[a]!==!c){if(c){if(m[a]&&k--,!k)h(!0),this.$valid=!0,this.$invalid=!1}else h(!1),this.$invalid=!0,this.$valid=!1,k++;m[a]=!c;h(c,a);i.$setValidity(a,c,this)}};this.$setViewValue=function(d){this.$viewValue=d;if(this.$pristine)this.$dirty= -!0,this.$pristine=!1,e.removeClass(Oa).addClass(Yb),i.$setDirty();n(this.$parsers,function(a){d=a(d)});if(this.$modelValue!==d)this.$modelValue=d,j(a,d),n(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};var l=this;a.$watch(function(){var c=f(a);if(l.$modelValue!==c){var d=l.$formatters,e=d.length;for(l.$modelValue=c;e--;)c=d[e](c);if(l.$viewValue!==c)l.$viewValue=c,l.$render()}})}],qd=function(){return{require:["ngModel","^?form"],controller:pd,link:function(a,c,d,e){var g=e[0],h= -e[1]||Na;h.$addControl(g);c.bind("$destroy",function(){h.$removeControl(g)})}}},rd=I({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),dc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&(T(a)||a===!1))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},sd=function(){return{require:"ngModel", -link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){var c=[];a&&n(a.split(g),function(a){a&&c.push(O(a))});return c});e.$formatters.push(function(a){return B(a)?a.join(", "):q})}}},td=/^(true|false|\d+)$/,ud=function(){return{priority:100,compile:function(a,c){return td.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a,!1)})}}}},vd=Q(function(a,c,d){c.addClass("ng-binding").data("$binding", -d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==q?"":a)})}),wd=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],xd=[function(){return function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBindHtmlUnsafe);a.$watch(d.ngBindHtmlUnsafe,function(a){c.html(a||"")})}}],yd=kb("",!0),zd=kb("Odd",0),Ad=kb("Even",1),Bd=Q({compile:function(a,c){c.$set("ngCloak",q); -a.removeClass("ng-cloak")}}),Cd=[function(){return{scope:!0,controller:"@"}}],Dd=["$sniffer",function(a){return{priority:1E3,compile:function(){a.csp=!0}}}],ec={};n("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave".split(" "),function(a){var c=ea("ng-"+a);ec[c]=["$parse",function(d){return function(e,g,h){var f=d(h[c]);g.bind(y(a),function(a){e.$apply(function(){f(e,{$event:a})})})}}]});var Ed=Q(function(a,c,d){c.bind("submit",function(){a.$apply(d.ngSubmit)})}), -Fd=["$http","$templateCache","$anchorScroll","$compile",function(a,c,d,e){return{restrict:"ECA",terminal:!0,compile:function(g,h){var f=h.ngInclude||h.src,j=h.onload||"",i=h.autoscroll;return function(g,h){var l=0,n,o=function(){n&&(n.$destroy(),n=null);h.html("")};g.$watch(f,function(f){var s=++l;f?a.get(f,{cache:c}).success(function(a){s===l&&(n&&n.$destroy(),n=g.$new(),h.html(a),e(h.contents())(n),x(i)&&(!i||g.$eval(i))&&d(),n.$emit("$includeContentLoaded"),g.$eval(j))}).error(function(){s===l&& -o()}):o()})}}}}],Gd=Q({compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Hd=Q({terminal:!0,priority:1E3}),Id=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,h){var f=h.count,j=g.attr(h.$attr.when),i=h.offset||0,k=e.$eval(j),m={},l=c.startSymbol(),t=c.endSymbol();n(k,function(a,e){m[e]=c(a.replace(d,l+f+"-"+i+t))});e.$watch(function(){var c=parseFloat(e.$eval(f));return isNaN(c)?"":(k[c]||(c=a.pluralCat(c-i)),m[c](e,g,!0))},function(a){g.text(a)})}}}], -Jd=Q({transclude:"element",priority:1E3,terminal:!0,compile:function(a,c,d){return function(a,c,h){var f=h.ngRepeat,h=f.match(/^\s*(.+)\s+in\s+(.*)\s*$/),j,i,k;if(!h)throw Error("Expected ngRepeat in form of '_item_ in _collection_' but got '"+f+"'.");f=h[1];j=h[2];h=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!h)throw Error("'item' in 'item in collection' should be identifier or (key, value) but got '"+f+"'.");i=h[3]||h[1];k=h[2];var m=new eb;a.$watch(function(a){var e,f,h=a.$eval(j), -n=c,q=new eb,x,z,u,w,r,v;if(B(h))r=h||[];else{r=[];for(u in h)h.hasOwnProperty(u)&&u.charAt(0)!="$"&&r.push(u);r.sort()}x=r.length;e=0;for(f=r.length;e<f;e++){u=h===r?e:r[e];w=h[u];if(v=m.shift(w)){z=v.scope;q.push(w,v);if(e!==v.index)v.index=e,n.after(v.element);n=v.element}else z=a.$new();z[i]=w;k&&(z[k]=u);z.$index=e;z.$first=e===0;z.$last=e===x-1;z.$middle=!(z.$first||z.$last);v||d(z,function(a){n.after(a);v={scope:z,element:n=a,index:e};q.push(w,v)})}for(u in m)if(m.hasOwnProperty(u))for(r=m[u];r.length;)w= -r.pop(),w.element.remove(),w.scope.$destroy();m=q})}}}),Kd=Q(function(a,c,d){a.$watch(d.ngShow,function(a){c.css("display",Va(a)?"":"none")})}),Ld=Q(function(a,c,d){a.$watch(d.ngHide,function(a){c.css("display",Va(a)?"none":"")})}),Md=Q(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&n(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),Nd=I({restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(a,c,d,e){var g,h,f;a.$watch(d.ngSwitch||d.on,function(j){h&& -(f.$destroy(),h.remove(),h=f=null);if(g=e.cases["!"+j]||e.cases["?"])a.$eval(d.change),f=a.$new(),g(f,function(a){h=a;c.append(a)})})}}),Od=Q({transclude:"element",priority:500,require:"^ngSwitch",compile:function(a,c,d){return function(a,g,h,f){f.cases["!"+c.ngSwitchWhen]=d}}}),Pd=Q({transclude:"element",priority:500,require:"^ngSwitch",compile:function(a,c,d){return function(a,c,h,f){f.cases["?"]=d}}}),Qd=Q({controller:["$transclude","$element",function(a,c){a(function(a){c.append(a)})}]}),Rd=["$http", -"$templateCache","$route","$anchorScroll","$compile","$controller",function(a,c,d,e,g,h){return{restrict:"ECA",terminal:!0,link:function(a,c,i){function k(){var i=d.current&&d.current.locals,k=i&&i.$template;if(k){c.html(k);m&&(m.$destroy(),m=null);var k=g(c.contents()),n=d.current;m=n.scope=a.$new();if(n.controller)i.$scope=m,i=h(n.controller,i),c.children().data("$ngControllerController",i);k(m);m.$emit("$viewContentLoaded");m.$eval(l);e()}else c.html(""),m&&(m.$destroy(),m=null)}var m,l=i.onload|| -"";a.$on("$routeChangeSuccess",k);k()}}}],Sd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){d.type=="text/ng-template"&&a.put(d.id,c[0].text)}}}],Td=I({terminal:!0}),Ud=["$compile","$parse",function(a,c){var d=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w\d]*)|(?:\(\s*([\$\w][\$\w\d]*)\s*,\s*([\$\w][\$\w\d]*)\s*\)))\s+in\s+(.*)$/,e={$setViewValue:C};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope", -"$attrs",function(a,c,d){var j=this,i={},k=e,m;j.databound=d.ngModel;j.init=function(a,c,d){k=a;m=d};j.addOption=function(c){i[c]=!0;k.$viewValue==c&&(a.val(c),m.parent()&&m.remove())};j.removeOption=function(a){this.hasOption(a)&&(delete i[a],k.$viewValue==a&&this.renderUnknownOption(a))};j.renderUnknownOption=function(c){c="? "+fa(c)+" ?";m.val(c);a.prepend(m);a.val(c);m.prop("selected",!0)};j.hasOption=function(a){return i.hasOwnProperty(a)};c.$on("$destroy",function(){j.renderUnknownOption=C})}], -link:function(e,h,f,j){function i(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(y.parent()&&y.remove(),c.val(a),a===""&&v.prop("selected",!0)):w(a)&&v?c.val(""):e.renderUnknownOption(a)};c.bind("change",function(){a.$apply(function(){y.parent()&&y.remove();d.$setViewValue(c.val())})})}function k(a,c,d){var e;d.$render=function(){var a=new Ga(d.$viewValue);n(c.find("option"),function(c){c.selected=x(a.get(c.value))})};a.$watch(function(){ga(e,d.$viewValue)||(e=U(d.$viewValue),d.$render())}); -c.bind("change",function(){a.$apply(function(){var a=[];n(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function m(e,f,g){function h(){var a={"":[]},c=[""],d,i,p,u,v;p=g.$modelValue;u=t(e)||[];var w=l?mb(u):u,x,y,A;y={};v=!1;var B,E;if(o)v=new Ga(p);else if(p===null||s)a[""].push({selected:p===null,id:"",label:""}),v=!0;for(A=0;x=w.length,A<x;A++){y[k]=u[l?y[l]=w[A]:A];d=m(e,y)||"";if(!(i=a[d]))i=a[d]=[],c.push(d);o?d=v.remove(n(e,y))!=q:(d=p===n(e,y),v=v||d);B= -j(e,y);B=B===q?"":B;i.push({id:l?w[A]:A,label:B,selected:d})}!o&&!v&&a[""].unshift({id:"?",label:"",selected:!0});y=0;for(w=c.length;y<w;y++){d=c[y];i=a[d];if(r.length<=y)p={element:z.clone().attr("label",d),label:i.label},u=[p],r.push(u),f.append(p.element);else if(u=r[y],p=u[0],p.label!=d)p.element.attr("label",p.label=d);B=null;A=0;for(x=i.length;A<x;A++)if(d=i[A],v=u[A+1]){B=v.element;if(v.label!==d.label)B.text(v.label=d.label);if(v.id!==d.id)B.val(v.id=d.id);if(v.element.selected!==d.selected)B.prop("selected", -v.selected=d.selected)}else d.id===""&&s?E=s:(E=C.clone()).val(d.id).attr("selected",d.selected).text(d.label),u.push({element:E,label:d.label,id:d.id,selected:d.selected}),B?B.after(E):p.element.append(E),B=E;for(A++;u.length>A;)u.pop().element.remove()}for(;r.length>y;)r.pop()[0].element.remove()}var i;if(!(i=p.match(d)))throw Error("Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '"+p+"'.");var j=c(i[2]||i[1]),k=i[4]||i[6],l=i[5],m=c(i[3]||""), -n=c(i[2]?i[1]:k),t=c(i[7]),r=[[{element:f,label:""}]];s&&(a(s)(e),s.removeClass("ng-scope"),s.remove());f.html("");f.bind("change",function(){e.$apply(function(){var a,c=t(e)||[],d={},h,i,j,m,p,s;if(o){i=[];m=0;for(s=r.length;m<s;m++){a=r[m];j=1;for(p=a.length;j<p;j++)if((h=a[j].element)[0].selected)h=h.val(),l&&(d[l]=h),d[k]=c[h],i.push(n(e,d))}}else h=f.val(),h=="?"?i=q:h==""?i=null:(d[k]=c[h],l&&(d[l]=h),i=n(e,d));g.$setViewValue(i)})});g.$render=h;e.$watch(h)}if(j[1]){for(var l=j[0],t=j[1],o= -f.multiple,p=f.ngOptions,s=!1,v,C=u(Y.createElement("option")),z=u(Y.createElement("optgroup")),y=C.clone(),j=0,A=h.children(),r=A.length;j<r;j++)if(A[j].value==""){v=s=A.eq(j);break}l.init(t,s,y);if(o&&(f.required||f.ngRequired)){var B=function(a){t.$setValidity("required",!f.required||a&&a.length);return a};t.$parsers.push(B);t.$formatters.unshift(B);f.$observe("required",function(){B(t.$viewValue)})}p?m(e,h,t):o?k(e,h,t):i(e,h,t,l)}}}}],Vd=["$interpolate",function(a){var c={addOption:C,removeOption:C}; -return{restrict:"E",priority:100,compile:function(d,e){if(w(e.value)){var g=a(d.text(),!0);g||e.$set("value",d.text())}return function(a,d,e){var i=d.parent(),k=i.data("$selectController")||i.parent().data("$selectController");k&&k.databound?d.prop("selected",!1):k=c;g?a.$watch(g,function(a,c){e.$set("value",a);a!==c&&k.removeOption(c);k.addOption(a)}):k.addOption(e.value);d.bind("$destroy",function(){k.removeOption(e.value)})}}}}],Wd=I({restrict:"E",terminal:!0});(ca=X.jQuery)?(u=ca,v(ca.fn,{scope:va.scope, -controller:va.controller,injector:va.injector,inheritedData:va.inheritedData}),ab("remove",!0),ab("empty"),ab("html")):u=L;Zb.element=u;(function(a){v(a,{bootstrap:qb,copy:U,extend:v,equals:ga,element:u,forEach:n,injector:rb,noop:C,bind:Ua,toJson:da,fromJson:ob,identity:na,isUndefined:w,isDefined:x,isString:A,isFunction:H,isObject:M,isNumber:Ra,isElement:gc,isArray:B,version:id,isDate:oa,lowercase:y,uppercase:ma,callbacks:{counter:0}});ta=lc(X);try{ta("ngLocale")}catch(c){ta("ngLocale",[]).provider("$locale", -Zc)}ta("ng",["ngLocale"],["$provide",function(a){a.provider("$compile",Cb).directive({a:jd,input:cc,textarea:cc,form:kd,script:Sd,select:Ud,style:Wd,option:Vd,ngBind:vd,ngBindHtmlUnsafe:xd,ngBindTemplate:wd,ngClass:yd,ngClassEven:Ad,ngClassOdd:zd,ngCsp:Dd,ngCloak:Bd,ngController:Cd,ngForm:ld,ngHide:Ld,ngInclude:Fd,ngInit:Gd,ngNonBindable:Hd,ngPluralize:Id,ngRepeat:Jd,ngShow:Kd,ngSubmit:Ed,ngStyle:Md,ngSwitch:Nd,ngSwitchWhen:Od,ngSwitchDefault:Pd,ngOptions:Td,ngView:Rd,ngTransclude:Qd,ngModel:qd,ngList:sd, -ngChange:rd,required:dc,ngRequired:dc,ngValue:ud}).directive(lb).directive(ec);a.provider({$anchorScroll:uc,$browser:wc,$cacheFactory:xc,$controller:Bc,$document:Cc,$exceptionHandler:Dc,$filter:Qb,$interpolate:Ec,$http:Vc,$httpBackend:Wc,$location:Ic,$log:Jc,$parse:Nc,$route:Qc,$routeParams:Rc,$rootScope:Sc,$q:Oc,$sniffer:Tc,$templateCache:yc,$timeout:$c,$window:Uc})}])})(Zb);u(Y).ready(function(){jc(Y,qb)})})(window,document);angular.element(document).find("head").append('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none;}ng\\:form{display:block;}</style>'); diff --git a/pykeg/web/static/bootstrap/LICENSE b/pykeg/web/static/bootstrap/LICENSE deleted file mode 100644 index 2bb9ad240..000000000 --- a/pykeg/web/static/bootstrap/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/pykeg/web/static/bootstrap/img/glyphicons-halflings-white.png b/pykeg/web/static/bootstrap/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8777 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 B7G?kd diff --git a/pykeg/web/static/bootstrap/img/glyphicons-halflings.png b/pykeg/web/static/bootstrap/img/glyphicons-halflings.png deleted file mode 100644 index a9969993201f9cee63cf9f49217646347297b643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12799 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 diff --git a/pykeg/web/static/bootstrap/js/bootstrap.js b/pykeg/web/static/bootstrap/js/bootstrap.js deleted file mode 100644 index c298ee42e..000000000 --- a/pykeg/web/static/bootstrap/js/bootstrap.js +++ /dev/null @@ -1,2276 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { - - $.support.transition = (function () { - - var transitionEnd = (function () { - - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name - - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } - - }()) - - return transitionEnd && { - end: transitionEnd - } - - })() - - }) - -}(window.jQuery);/* ========================================================== - * bootstrap-alert.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* ALERT CLASS DEFINITION - * ====================== */ - - var dismiss = '[data-dismiss="alert"]' - , Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent.trigger(e = $.Event('close')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent - .trigger('closed') - .remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() - } - - - /* ALERT PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - /* ALERT NO CONFLICT - * ================= */ - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - /* ALERT DATA-API - * ============== */ - - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery);/* ============================================================ - * bootstrap-button.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' - - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons-radio"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } - - - /* BUTTON PLUGIN DEFINITION - * ======================== */ - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.defaults = { - loadingText: 'loading...' - } - - $.fn.button.Constructor = Button - - - /* BUTTON NO CONFLICT - * ================== */ - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - /* BUTTON DATA-API - * =============== */ - - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - }) - -}(window.jQuery);/* ========================================================== - * bootstrap-carousel.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.prototype = { - - cycle: function (e) { - if (!e) this.paused = false - if (this.interval) clearInterval(this.interval); - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - return this - } - - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } - - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activeIndex == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - , pause: function (e) { - if (!e) this.paused = true - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - clearInterval(this.interval) - this.interval = null - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.item.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - , e - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction - }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) - , action = typeof option == 'string' ? option : options.slide - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL NO CONFLICT - * ==================== */ - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - /* CAROUSEL DATA-API - * ================= */ - - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = $.extend({}, $target.data(), $this.data()) - , slideIndex - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('carousel').pause().to(slideIndex).cycle() - } - - e.preventDefault() - }) - -}(window.jQuery);/* ============================================================= - * bootstrap-collapse.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension - , scroll - , actives - , hasData - - if (this.transitioning || this.$element.hasClass('in')) return - - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') - - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - $.support.transition && this.$element[dimension](this.$element[0][scroll]) - } - - , hide: function () { - var dimension - if (this.transitioning || !this.$element.hasClass('in')) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } - - , reset: function (size) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } - - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - - this.transitioning = 1 - - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* COLLAPSE PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSE NO CONFLICT - * ==================== */ - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - /* COLLAPSE DATA-API - * ================= */ - - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) - }) - -}(window.jQuery);/* ============================================================ - * bootstrap-dropdown.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle=dropdown]' - , Dropdown = function (element) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function (e) { - var $this = $(this) - , $parent - , isActive - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - $parent.toggleClass('open') - } - - $this.focus() - - return false - } - - , keydown: function (e) { - var $this - , $items - , $active - , $parent - , isActive - , index - - if (!/(38|40|27)/.test(e.keyCode)) return - - $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).focus() - return $this.click() - } - - $items = $('[role=menu] li:not(.divider):visible a', $parent) - - if (!$items.length) return - - index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items - .eq(index) - .focus() - } - - } - - function clearMenus() { - $(toggle).each(function () { - getParent($(this)).removeClass('open') - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = selector && $(selector) - - if (!$parent || !$parent.length) $parent = $this.parent() - - return $parent - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.dropdown - - $.fn.dropdown = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* DROPDOWN NO CONFLICT - * ==================== */ - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(document) - .on('click.dropdown.data-api', clearMenus) - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) - -}(window.jQuery); -/* ========================================================= - * bootstrap-modal.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - , e = $.Event('show') - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.escape() - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position - } - - that.$element.show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') - - }) - } - - , hide: function (e) { - e && e.preventDefault() - - var that = this - - e = $.Event('hide') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - - $(document).off('focusin.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } - - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } - - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } - - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } - - , hideModal: function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.removeBackdrop() - that.$element.trigger('hidden') - }) - } - - , removeBackdrop: function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } - - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(document.body) - - this.$backdrop.click( - this.options.backdrop == 'static' ? - $.proxy(this.$element[0].focus, this.$element[0]) - : $.proxy(this.hide, this) - ) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (callback) { - callback() - } - } - } - - - /* MODAL PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.modal - - $.fn.modal = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('modal') - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option]() - else if (options.show) data.show() - }) - } - - $.fn.modal.defaults = { - backdrop: true - , keyboard: true - , show: true - } - - $.fn.modal.Constructor = Modal - - - /* MODAL NO CONFLICT - * ================= */ - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - /* MODAL DATA-API - * ============== */ - - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - , href = $this.attr('href') - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) - - e.preventDefault() - - $target - .modal(option) - .one('hide', function () { - $this.focus() - }) - }) - -}(window.jQuery); -/* =========================================================== - * bootstrap-tooltip.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#tooltips - * Inspired by the original jQuery.tipsy by Jason Frame - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ - - var Tooltip = function (element, options) { - this.init('tooltip', element, options) - } - - Tooltip.prototype = { - - constructor: Tooltip - - , init: function (type, element, options) { - var eventIn - , eventOut - , triggers - , trigger - , i - - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true - - triggers = this.options.trigger.split(' ') - - for (i = triggers.length; i--;) { - trigger = triggers[i] - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - , enter: function (e) { - var defaults = $.fn[this.type].defaults - , options = {} - , self - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }, this) - - self = $(e.currentTarget)[this.type](options).data(this.type) - - if (!self.options.delay || !self.options.delay.show) return self.show() - - clearTimeout(this.timeout) - self.hoverState = 'in' - this.timeout = setTimeout(function() { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - , leave: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (this.timeout) clearTimeout(this.timeout) - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.hoverState = 'out' - this.timeout = setTimeout(function() { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - , show: function () { - var $tip - , pos - , actualWidth - , actualHeight - , placement - , tp - , e = $.Event('show') - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } - - placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - pos = this.getPosition() - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - switch (placement) { - case 'bottom': - tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'top': - tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'left': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} - break - case 'right': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} - break - } - - this.applyPlacement(tp, placement) - this.$element.trigger('shown') - } - } - - , applyPlacement: function(offset, placement){ - var $tip = this.tip() - , width = $tip[0].offsetWidth - , height = $tip[0].offsetHeight - , actualWidth - , actualHeight - , delta - , replace - - $tip - .offset(offset) - .addClass(placement) - .addClass('in') - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - replace = true - } - - if (placement == 'bottom' || placement == 'top') { - delta = 0 - - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 - $tip.offset(offset) - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } - - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') - } - - if (replace) $tip.offset(offset) - } - - , replaceArrow: function(delta, dimension, position){ - this - .arrow() - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - , hide: function () { - var that = this - , $tip = this.tip() - , e = $.Event('hide') - - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - function removeWithAnimation() { - var timeout = setTimeout(function () { - $tip.off($.support.transition.end).detach() - }, 500) - - $tip.one($.support.transition.end, function () { - clearTimeout(timeout) - $tip.detach() - }) - } - - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() - - this.$element.trigger('hidden') - - return this - } - - , fixTitle: function () { - var $e = this.$element - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - , hasContent: function () { - return this.getTitle() - } - - , getPosition: function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } - - , getTitle: function () { - var title - , $e = this.$element - , o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } - - , arrow: function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - } - - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - , enable: function () { - this.enabled = true - } - - , disable: function () { - this.enabled = false - } - - , toggleEnabled: function () { - this.enabled = !this.enabled - } - - , toggle: function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this - self.tip().hasClass('in') ? self.hide() : self.show() - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - } - - - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ - - var old = $.fn.tooltip - - $.fn.tooltip = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - $.fn.tooltip.defaults = { - animation: true - , placement: 'top' - , selector: false - , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' - , trigger: 'hover focus' - , title: '' - , delay: 0 - , html: false - , container: false - } - - - /* TOOLTIP NO CONFLICT - * =================== */ - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(window.jQuery); -/* =========================================================== - * bootstrap-popover.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#popovers - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* POPOVER PUBLIC CLASS DEFINITION - * =============================== */ - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js - ========================================== */ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { - - constructor: Popover - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - , content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - - $tip.removeClass('fade top bottom left right in') - } - - , hasContent: function () { - return this.getTitle() || this.getContent() - } - - , getContent: function () { - var content - , $e = this.$element - , o = this.options - - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) - || $e.attr('data-content') - - return content - } - - , tip: function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - } - return this.$tip - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - }) - - - /* POPOVER PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.popover - - $.fn.popover = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('popover') - , options = typeof option == 'object' && option - if (!data) $this.data('popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.popover.Constructor = Popover - - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { - placement: 'right' - , trigger: 'click' - , content: '' - , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' - }) - - - /* POPOVER NO CONFLICT - * =================== */ - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(window.jQuery); -/* ============================================================= - * bootstrap-scrollspy.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#scrollspy - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* SCROLLSPY CLASS DEFINITION - * ========================== */ - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - , $element = $(element).is('body') ? $(window) : $(element) - , href - this.options = $.extend({}, $.fn.scrollspy.defaults, options) - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) - this.selector = (this.options.target - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - || '') + ' .nav li > a' - this.$body = $('body') - this.refresh() - this.process() - } - - ScrollSpy.prototype = { - - constructor: ScrollSpy - - , refresh: function () { - var self = this - , $targets - - this.offsets = $([]) - this.targets = $([]) - - $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - , href = $el.data('target') || $el.attr('href') - , $href = /^#\w/.test(href) && $(href) - return ( $href - && $href.length - && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - self.offsets.push(this[0]) - self.targets.push(this[1]) - }) - } - - , process: function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - , maxScroll = scrollHeight - this.$scrollElement.height() - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) - && this.activate ( i ) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) - } - } - - , activate: function (target) { - var active - , selector - - this.activeTarget = target - - $(this.selector) - .parent('.active') - .removeClass('active') - - selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' - - active = $(selector) - .parent('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active.closest('li.dropdown').addClass('active') - } - - active.trigger('activate') - } - - } - - - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.scrollspy - - $.fn.scrollspy = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('scrollspy') - , options = typeof option == 'object' && option - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.scrollspy.Constructor = ScrollSpy - - $.fn.scrollspy.defaults = { - offset: 10 - } - - - /* SCROLLSPY NO CONFLICT - * ===================== */ - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - /* SCROLLSPY DATA-API - * ================== */ - - $(window).on('load', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - $spy.scrollspy($spy.data()) - }) - }) - -}(window.jQuery);/* ======================================================== - * bootstrap-tab.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#tabs - * ======================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TAB CLASS DEFINITION - * ==================== */ - - var Tab = function (element) { - this.element = $(element) - } - - Tab.prototype = { - - constructor: Tab - - , show: function () { - var $this = this.element - , $ul = $this.closest('ul:not(.dropdown-menu)') - , selector = $this.attr('data-target') - , previous - , $target - , e - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - if ( $this.parent('li').hasClass('active') ) return - - previous = $ul.find('.active:last a')[0] - - e = $.Event('show', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - $target = $(selector) - - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown' - , relatedTarget: previous - }) - }) - } - - , activate: function ( element, container, callback) { - var $active = container.find('> .active') - , transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if ( element.parent('.dropdown-menu') ) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active.one($.support.transition.end, next) : - next() - - $active.removeClass('in') - } - } - - - /* TAB PLUGIN DEFINITION - * ===================== */ - - var old = $.fn.tab - - $.fn.tab = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tab') - if (!data) $this.data('tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tab.Constructor = Tab - - - /* TAB NO CONFLICT - * =============== */ - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - /* TAB DATA-API - * ============ */ - - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - -}(window.jQuery);/* ============================================================= - * bootstrap-typeahead.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#typeahead - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function($){ - - "use strict"; // jshint ;_; - - - /* TYPEAHEAD PUBLIC CLASS DEFINITION - * ================================= */ - - var Typeahead = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.typeahead.defaults, options) - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.updater = this.options.updater || this.updater - this.source = this.options.source - this.$menu = $(this.options.menu) - this.shown = false - this.listen() - } - - Typeahead.prototype = { - - constructor: Typeahead - - , select: function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element - .val(this.updater(val)) - .change() - return this.hide() - } - - , updater: function (item) { - return item - } - - , show: function () { - var pos = $.extend({}, this.$element.position(), { - height: this.$element[0].offsetHeight - }) - - this.$menu - .insertAfter(this.$element) - .css({ - top: pos.top + pos.height - , left: pos.left - }) - .show() - - this.shown = true - return this - } - - , hide: function () { - this.$menu.hide() - this.shown = false - return this - } - - , lookup: function (event) { - var items - - this.query = this.$element.val() - - if (!this.query || this.query.length < this.options.minLength) { - return this.shown ? this.hide() : this - } - - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source - - return items ? this.process(items) : this - } - - , process: function (items) { - var that = this - - items = $.grep(items, function (item) { - return that.matcher(item) - }) - - items = this.sorter(items) - - if (!items.length) { - return this.shown ? this.hide() : this - } - - return this.render(items.slice(0, this.options.items)).show() - } - - , matcher: function (item) { - return ~item.toLowerCase().indexOf(this.query.toLowerCase()) - } - - , sorter: function (items) { - var beginswith = [] - , caseSensitive = [] - , caseInsensitive = [] - , item - - while (item = items.shift()) { - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) - else if (~item.indexOf(this.query)) caseSensitive.push(item) - else caseInsensitive.push(item) - } - - return beginswith.concat(caseSensitive, caseInsensitive) - } - - , highlighter: function (item) { - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { - return '<strong>' + match + '</strong>' - }) - } - - , render: function (items) { - var that = this - - items = $(items).map(function (i, item) { - i = $(that.options.item).attr('data-value', item) - i.find('a').html(that.highlighter(item)) - return i[0] - }) - - items.first().addClass('active') - this.$menu.html(items) - return this - } - - , next: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , next = active.next() - - if (!next.length) { - next = $(this.$menu.find('li')[0]) - } - - next.addClass('active') - } - - , prev: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , prev = active.prev() - - if (!prev.length) { - prev = this.$menu.find('li').last() - } - - prev.addClass('active') - } - - , listen: function () { - this.$element - .on('focus', $.proxy(this.focus, this)) - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) - - if (this.eventSupported('keydown')) { - this.$element.on('keydown', $.proxy(this.keydown, this)) - } - - this.$menu - .on('click', $.proxy(this.click, this)) - .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) - .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) - } - - , eventSupported: function(eventName) { - var isSupported = eventName in this.$element - if (!isSupported) { - this.$element.setAttribute(eventName, 'return;') - isSupported = typeof this.$element[eventName] === 'function' - } - return isSupported - } - - , move: function (e) { - if (!this.shown) return - - switch(e.keyCode) { - case 9: // tab - case 13: // enter - case 27: // escape - e.preventDefault() - break - - case 38: // up arrow - e.preventDefault() - this.prev() - break - - case 40: // down arrow - e.preventDefault() - this.next() - break - } - - e.stopPropagation() - } - - , keydown: function (e) { - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) - this.move(e) - } - - , keypress: function (e) { - if (this.suppressKeyPressRepeat) return - this.move(e) - } - - , keyup: function (e) { - switch(e.keyCode) { - case 40: // down arrow - case 38: // up arrow - case 16: // shift - case 17: // ctrl - case 18: // alt - break - - case 9: // tab - case 13: // enter - if (!this.shown) return - this.select() - break - - case 27: // escape - if (!this.shown) return - this.hide() - break - - default: - this.lookup() - } - - e.stopPropagation() - e.preventDefault() - } - - , focus: function (e) { - this.focused = true - } - - , blur: function (e) { - this.focused = false - if (!this.mousedover && this.shown) this.hide() - } - - , click: function (e) { - e.stopPropagation() - e.preventDefault() - this.select() - this.$element.focus() - } - - , mouseenter: function (e) { - this.mousedover = true - this.$menu.find('.active').removeClass('active') - $(e.currentTarget).addClass('active') - } - - , mouseleave: function (e) { - this.mousedover = false - if (!this.focused && this.shown) this.hide() - } - - } - - - /* TYPEAHEAD PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.typeahead - - $.fn.typeahead = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('typeahead') - , options = typeof option == 'object' && option - if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.typeahead.defaults = { - source: [] - , items: 8 - , menu: '<ul class="typeahead dropdown-menu"></ul>' - , item: '<li><a href="#"></a></li>' - , minLength: 1 - } - - $.fn.typeahead.Constructor = Typeahead - - - /* TYPEAHEAD NO CONFLICT - * =================== */ - - $.fn.typeahead.noConflict = function () { - $.fn.typeahead = old - return this - } - - - /* TYPEAHEAD DATA-API - * ================== */ - - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { - var $this = $(this) - if ($this.data('typeahead')) return - $this.typeahead($this.data()) - }) - -}(window.jQuery); -/* ========================================================== - * bootstrap-affix.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#affix - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ - - var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) - this.$window = $(window) - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) - this.$element = $(element) - this.checkPosition() - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - , scrollTop = this.$window.scrollTop() - , position = this.$element.offset() - , offset = this.options.offset - , offsetBottom = offset.bottom - , offsetTop = offset.top - , reset = 'affix affix-top affix-bottom' - , affix - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? - false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? - 'bottom' : offsetTop != null && scrollTop <= offsetTop ? - 'top' : false - - if (this.affixed === affix) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? position.top - scrollTop : null - - this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) - } - - - /* AFFIX PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.affix - - $.fn.affix = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('affix') - , options = typeof option == 'object' && option - if (!data) $this.data('affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - $.fn.affix.defaults = { - offset: 0 - } - - - /* AFFIX NO CONFLICT - * ================= */ - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - /* AFFIX DATA-API - * ============== */ - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - , data = $spy.data() - - data.offset = data.offset || {} - - data.offsetBottom && (data.offset.bottom = data.offsetBottom) - data.offsetTop && (data.offset.top = data.offsetTop) - - $spy.affix(data) - }) - }) - - -}(window.jQuery); \ No newline at end of file diff --git a/pykeg/web/static/bootstrap/js/bootstrap.min.js b/pykeg/web/static/bootstrap/js/bootstrap.min.js deleted file mode 100644 index 95c5ac5ee..000000000 --- a/pykeg/web/static/bootstrap/js/bootstrap.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! -* Bootstrap.js by @fat & @mdo -* Copyright 2012 Twitter, Inc. -* http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||s.toggleClass("open"),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery); \ No newline at end of file diff --git a/pykeg/web/static/bootstrap/less/accordion.less b/pykeg/web/static/bootstrap/less/accordion.less deleted file mode 100644 index d63523bc8..000000000 --- a/pykeg/web/static/bootstrap/less/accordion.less +++ /dev/null @@ -1,34 +0,0 @@ -// -// Accordion -// -------------------------------------------------- - - -// Parent container -.accordion { - margin-bottom: @baseLineHeight; -} - -// Group == heading + body -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - .border-radius(@baseBorderRadius); -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -// General toggle styles -.accordion-toggle { - cursor: pointer; -} - -// Inner needs the styles because you can't animate properly with any styles on the element -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} diff --git a/pykeg/web/static/bootstrap/less/alerts.less b/pykeg/web/static/bootstrap/less/alerts.less deleted file mode 100644 index 0116b191b..000000000 --- a/pykeg/web/static/bootstrap/less/alerts.less +++ /dev/null @@ -1,79 +0,0 @@ -// -// Alerts -// -------------------------------------------------- - - -// Base styles -// ------------------------- - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: @baseLineHeight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - background-color: @warningBackground; - border: 1px solid @warningBorder; - .border-radius(@baseBorderRadius); -} -.alert, -.alert h4 { - // Specified for the h4 to prevent conflicts of changing @headingsColor - color: @warningText; -} -.alert h4 { - margin: 0; -} - -// Adjust close link position -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: @baseLineHeight; -} - - -// Alternate styles -// ------------------------- - -.alert-success { - background-color: @successBackground; - border-color: @successBorder; - color: @successText; -} -.alert-success h4 { - color: @successText; -} -.alert-danger, -.alert-error { - background-color: @errorBackground; - border-color: @errorBorder; - color: @errorText; -} -.alert-danger h4, -.alert-error h4 { - color: @errorText; -} -.alert-info { - background-color: @infoBackground; - border-color: @infoBorder; - color: @infoText; -} -.alert-info h4 { - color: @infoText; -} - - -// Block alerts -// ------------------------- - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} diff --git a/pykeg/web/static/bootstrap/less/bootstrap.less b/pykeg/web/static/bootstrap/less/bootstrap.less deleted file mode 100644 index b56327adc..000000000 --- a/pykeg/web/static/bootstrap/less/bootstrap.less +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * Bootstrap v2.3.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -// Core variables and mixins -@import "variables.less"; // Modify this for custom colors, font-sizes, etc -@import "mixins.less"; - -// CSS Reset -@import "reset.less"; - -// Grid system and page structure -@import "scaffolding.less"; -@import "grid.less"; -@import "layouts.less"; - -// Base CSS -@import "type.less"; -@import "code.less"; -@import "forms.less"; -@import "tables.less"; - -// Components: common -@import "sprites.less"; -@import "dropdowns.less"; -@import "wells.less"; -@import "component-animations.less"; -@import "close.less"; - -// Components: Buttons & Alerts -@import "buttons.less"; -@import "button-groups.less"; -@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less - -// Components: Nav -@import "navs.less"; -@import "navbar.less"; -@import "breadcrumbs.less"; -@import "pagination.less"; -@import "pager.less"; - -// Components: Popovers -@import "modals.less"; -@import "tooltip.less"; -@import "popovers.less"; - -// Components: Misc -@import "thumbnails.less"; -@import "media.less"; -@import "labels-badges.less"; -@import "progress-bars.less"; -@import "accordion.less"; -@import "carousel.less"; -@import "hero-unit.less"; - -// Utility classes -@import "utilities.less"; // Has to be last to override when necessary diff --git a/pykeg/web/static/bootstrap/less/breadcrumbs.less b/pykeg/web/static/bootstrap/less/breadcrumbs.less deleted file mode 100644 index f753df6be..000000000 --- a/pykeg/web/static/bootstrap/less/breadcrumbs.less +++ /dev/null @@ -1,24 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 @baseLineHeight; - list-style: none; - background-color: #f5f5f5; - .border-radius(@baseBorderRadius); - > li { - display: inline-block; - .ie7-inline-block(); - text-shadow: 0 1px 0 @white; - > .divider { - padding: 0 5px; - color: #ccc; - } - } - > .active { - color: @grayLight; - } -} diff --git a/pykeg/web/static/bootstrap/less/button-groups.less b/pykeg/web/static/bootstrap/less/button-groups.less deleted file mode 100644 index 55cdc6033..000000000 --- a/pykeg/web/static/bootstrap/less/button-groups.less +++ /dev/null @@ -1,229 +0,0 @@ -// -// Button groups -// -------------------------------------------------- - - -// Make the div behave like a button -.btn-group { - position: relative; - display: inline-block; - .ie7-inline-block(); - font-size: 0; // remove as part 1 of font-size inline-block hack - vertical-align: middle; // match .btn alignment given font-size hack above - white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) - .ie7-restore-left-whitespace(); -} - -// Space out series of button groups -.btn-group + .btn-group { - margin-left: 5px; -} - -// Optional: Group multiple button groups together for a toolbar -.btn-toolbar { - font-size: 0; // Hack to remove whitespace that results from using inline-block - margin-top: @baseLineHeight / 2; - margin-bottom: @baseLineHeight / 2; - > .btn + .btn, - > .btn-group + .btn, - > .btn + .btn-group { - margin-left: 5px; - } -} - -// Float them, remove border radius, then re-add to first and last elements -.btn-group > .btn { - position: relative; - .border-radius(0); -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack -} - -// Reset fonts for other sizes -.btn-group > .btn-mini { - font-size: @fontSizeMini; -} -.btn-group > .btn-small { - font-size: @fontSizeSmall; -} -.btn-group > .btn-large { - font-size: @fontSizeLarge; -} - -// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match -.btn-group > .btn:first-child { - margin-left: 0; - .border-top-left-radius(@baseBorderRadius); - .border-bottom-left-radius(@baseBorderRadius); -} -// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - .border-top-right-radius(@baseBorderRadius); - .border-bottom-right-radius(@baseBorderRadius); -} -// Reset corners for large buttons -.btn-group > .btn.large:first-child { - margin-left: 0; - .border-top-left-radius(@borderRadiusLarge); - .border-bottom-left-radius(@borderRadiusLarge); -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - .border-top-right-radius(@borderRadiusLarge); - .border-bottom-right-radius(@borderRadiusLarge); -} - -// On hover/focus/active, bring the proper btn to front -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -// On active and open, don't show outline -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - - - -// Split button dropdowns -// ---------------------- - -// Give the line between buttons some depth -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - .box-shadow(~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} - -.btn-group.open { - - // The clickable button for toggling the menu - // Remove the gradient and set the same inset shadow as the :active state - .dropdown-toggle { - background-image: none; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); - } - - // Keep the hover's background when dropdown is open - .btn.dropdown-toggle { - background-color: @btnBackgroundHighlight; - } - .btn-primary.dropdown-toggle { - background-color: @btnPrimaryBackgroundHighlight; - } - .btn-warning.dropdown-toggle { - background-color: @btnWarningBackgroundHighlight; - } - .btn-danger.dropdown-toggle { - background-color: @btnDangerBackgroundHighlight; - } - .btn-success.dropdown-toggle { - background-color: @btnSuccessBackgroundHighlight; - } - .btn-info.dropdown-toggle { - background-color: @btnInfoBackgroundHighlight; - } - .btn-inverse.dropdown-toggle { - background-color: @btnInverseBackgroundHighlight; - } -} - - -// Reposition the caret -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -// Carets in other button sizes -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} -// Upside down carets for .dropup -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - - - -// Account for other colors -.btn-primary, -.btn-warning, -.btn-danger, -.btn-info, -.btn-success, -.btn-inverse { - .caret { - border-top-color: @white; - border-bottom-color: @white; - } -} - - - -// Vertical button groups -// ---------------------- - -.btn-group-vertical { - display: inline-block; // makes buttons only take up the width they need - .ie7-inline-block(); -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - .border-radius(0); -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - .border-radius(@baseBorderRadius @baseBorderRadius 0 0); -} -.btn-group-vertical > .btn:last-child { - .border-radius(0 0 @baseBorderRadius @baseBorderRadius); -} -.btn-group-vertical > .btn-large:first-child { - .border-radius(@borderRadiusLarge @borderRadiusLarge 0 0); -} -.btn-group-vertical > .btn-large:last-child { - .border-radius(0 0 @borderRadiusLarge @borderRadiusLarge); -} diff --git a/pykeg/web/static/bootstrap/less/buttons.less b/pykeg/web/static/bootstrap/less/buttons.less deleted file mode 100644 index 4cd4d862b..000000000 --- a/pykeg/web/static/bootstrap/less/buttons.less +++ /dev/null @@ -1,228 +0,0 @@ -// -// Buttons -// -------------------------------------------------- - - -// Base styles -// -------------------------------------------------- - -// Core -.btn { - display: inline-block; - .ie7-inline-block(); - padding: 4px 12px; - margin-bottom: 0; // For input.btn - font-size: @baseFontSize; - line-height: @baseLineHeight; - text-align: center; - vertical-align: middle; - cursor: pointer; - .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); - border: 1px solid @btnBorder; - *border: 0; // Remove the border to prevent IE7's black border on input:focus - border-bottom-color: darken(@btnBorder, 10%); - .border-radius(@baseBorderRadius); - .ie7-restore-left-whitespace(); // Give IE7 some love - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - - // Hover/focus state - &:hover, - &:focus { - color: @grayDark; - text-decoration: none; - background-position: 0 -15px; - - // transition is only when going to hover/focus, otherwise the background - // behind the gradient (there for IE<=9 fallback) gets mismatched - .transition(background-position .1s linear); - } - - // Focus state for keyboard and accessibility - &:focus { - .tab-focus(); - } - - // Active state - &.active, - &:active { - background-image: none; - outline: 0; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); - } - - // Disabled state - &.disabled, - &[disabled] { - cursor: default; - background-image: none; - .opacity(65); - .box-shadow(none); - } - -} - - - -// Button Sizes -// -------------------------------------------------- - -// Large -.btn-large { - padding: @paddingLarge; - font-size: @fontSizeLarge; - .border-radius(@borderRadiusLarge); -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -// Small -.btn-small { - padding: @paddingSmall; - font-size: @fontSizeSmall; - .border-radius(@borderRadiusSmall); -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -// Mini -.btn-mini { - padding: @paddingMini; - font-size: @fontSizeMini; - .border-radius(@borderRadiusSmall); -} - - -// Block button -// ------------------------- - -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - .box-sizing(border-box); -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} - - - -// Alternate buttons -// -------------------------------------------------- - -// Provide *some* extra contrast for those who can get it -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255,255,255,.75); -} - -// Set the backgrounds -// ------------------------- -.btn-primary { - .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight); -} -// Warning appears are orange -.btn-warning { - .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight); -} -// Danger and error appear as red -.btn-danger { - .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight); -} -// Success appears as green -.btn-success { - .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight); -} -// Info appears as a neutral blue -.btn-info { - .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight); -} -// Inverse appears as dark gray -.btn-inverse { - .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight); -} - - -// Cross-browser Jank -// -------------------------------------------------- - -button.btn, -input[type="submit"].btn { - - // Firefox 3.6 only I believe - &::-moz-focus-inner { - padding: 0; - border: 0; - } - - // IE7 has some default padding on button controls - *padding-top: 3px; - *padding-bottom: 3px; - - &.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; - } - &.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; - } - &.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; - } -} - - -// Link buttons -// -------------------------------------------------- - -// Make a button look and behave like a link -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - .box-shadow(none); -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: @linkColor; - .border-radius(0); -} -.btn-link:hover, -.btn-link:focus { - color: @linkColorHover; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: @grayDark; - text-decoration: none; -} diff --git a/pykeg/web/static/bootstrap/less/carousel.less b/pykeg/web/static/bootstrap/less/carousel.less deleted file mode 100644 index 55bc05014..000000000 --- a/pykeg/web/static/bootstrap/less/carousel.less +++ /dev/null @@ -1,158 +0,0 @@ -// -// Carousel -// -------------------------------------------------- - - -.carousel { - position: relative; - margin-bottom: @baseLineHeight; - line-height: 1; -} - -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} - -.carousel-inner { - - > .item { - display: none; - position: relative; - .transition(.6s ease-in-out left); - - // Account for jankitude on images - > img, - > a > img { - display: block; - line-height: 1; - } - } - - > .active, - > .next, - > .prev { display: block; } - - > .active { - left: 0; - } - - > .next, - > .prev { - position: absolute; - top: 0; - width: 100%; - } - - > .next { - left: 100%; - } - > .prev { - left: -100%; - } - > .next.left, - > .prev.right { - left: 0; - } - - > .active.left { - left: -100%; - } - > .active.right { - left: 100%; - } - -} - -// Left/right controls for nav -// --------------------------- - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: @white; - text-align: center; - background: @grayDarker; - border: 3px solid @white; - .border-radius(23px); - .opacity(50); - - // we can't have this transition here - // because webkit cancels the carousel - // animation if you trip this while - // in the middle of another animation - // ;_; - // .transition(opacity .2s linear); - - // Reposition the right one - &.right { - left: auto; - right: 15px; - } - - // Hover/focus state - &:hover, - &:focus { - color: @white; - text-decoration: none; - .opacity(90); - } -} - -// Carousel indicator pips -// ----------------------------- -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; - - li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255,255,255,.25); - border-radius: 5px; - } - .active { - background-color: #fff; - } -} - -// Caption for text below images -// ----------------------------- - -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: @grayDark; - background: rgba(0,0,0,.75); -} -.carousel-caption h4, -.carousel-caption p { - color: @white; - line-height: @baseLineHeight; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} diff --git a/pykeg/web/static/bootstrap/less/close.less b/pykeg/web/static/bootstrap/less/close.less deleted file mode 100644 index 4c626bda6..000000000 --- a/pykeg/web/static/bootstrap/less/close.less +++ /dev/null @@ -1,32 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: @baseLineHeight; - color: @black; - text-shadow: 0 1px 0 rgba(255,255,255,1); - .opacity(20); - &:hover, - &:focus { - color: @black; - text-decoration: none; - cursor: pointer; - .opacity(40); - } -} - -// Additional properties for button version -// iOS requires the button element instead of an anchor tag. -// If you want the anchor version, it requires `href="#"`. -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} \ No newline at end of file diff --git a/pykeg/web/static/bootstrap/less/code.less b/pykeg/web/static/bootstrap/less/code.less deleted file mode 100644 index 266a926e7..000000000 --- a/pykeg/web/static/bootstrap/less/code.less +++ /dev/null @@ -1,61 +0,0 @@ -// -// Code (inline and blocK) -// -------------------------------------------------- - - -// Inline and block code styles -code, -pre { - padding: 0 3px 2px; - #font > #family > .monospace; - font-size: @baseFontSize - 2; - color: @grayDark; - .border-radius(3px); -} - -// Inline code -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} - -// Blocks of code -pre { - display: block; - padding: (@baseLineHeight - 1) / 2; - margin: 0 0 @baseLineHeight / 2; - font-size: @baseFontSize - 1; // 14px to 13px - line-height: @baseLineHeight; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; // fallback for IE7-8 - border: 1px solid rgba(0,0,0,.15); - .border-radius(@baseBorderRadius); - - // Make prettyprint styles more spaced out for readability - &.prettyprint { - margin-bottom: @baseLineHeight; - } - - // Account for some code outputs that place code tags in pre tags - code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; - } -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} \ No newline at end of file diff --git a/pykeg/web/static/bootstrap/less/component-animations.less b/pykeg/web/static/bootstrap/less/component-animations.less deleted file mode 100644 index d614263a7..000000000 --- a/pykeg/web/static/bootstrap/less/component-animations.less +++ /dev/null @@ -1,22 +0,0 @@ -// -// Component animations -// -------------------------------------------------- - - -.fade { - opacity: 0; - .transition(opacity .15s linear); - &.in { - opacity: 1; - } -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - .transition(height .35s ease); - &.in { - height: auto; - } -} diff --git a/pykeg/web/static/bootstrap/less/dropdowns.less b/pykeg/web/static/bootstrap/less/dropdowns.less deleted file mode 100644 index bbfe3fd3e..000000000 --- a/pykeg/web/static/bootstrap/less/dropdowns.less +++ /dev/null @@ -1,237 +0,0 @@ -// -// Dropdown menus -// -------------------------------------------------- - - -// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - // The caret makes the toggle a bit too tall in IE7 - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -// Dropdown arrow/caret -// -------------------- -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid @black; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -// Place the caret -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -// The dropdown menu (ul) -// ---------------------- -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: @zindexDropdown; - display: none; // none by default, but block on "open" of the menu - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; // override default ul - list-style: none; - background-color: @dropdownBackground; - border: 1px solid #ccc; // Fallback for IE7-8 - border: 1px solid @dropdownBorder; - *border-right-width: 2px; - *border-bottom-width: 2px; - .border-radius(6px); - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - - // Aligns the dropdown menu to right - &.pull-right { - right: 0; - left: auto; - } - - // Dividers (basically an hr) within the dropdown - .divider { - .nav-divider(@dropdownDividerTop, @dropdownDividerBottom); - } - - // Links within the dropdown menu - > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: @baseLineHeight; - color: @dropdownLinkColor; - white-space: nowrap; - } -} - -// Hover/Focus state -// ----------- -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - text-decoration: none; - color: @dropdownLinkColorHover; - #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%)); -} - -// Active state -// ------------ -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: @dropdownLinkColorActive; - text-decoration: none; - outline: 0; - #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%)); -} - -// Disabled state -// -------------- -// Gray out text and ensure the hover/focus state remains gray -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: @grayLight; -} -// Nuke hover/focus effects -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - .reset-filter(); - cursor: default; -} - -// Open state for the dropdown -// --------------------------- -.open { - // IE7's z-index only goes to the nearest positioned ancestor, which would - // make the menu appear below buttons that appeared later on the page - *z-index: @zindexDropdown; - - & > .dropdown-menu { - display: block; - } -} - -// Right aligned dropdowns -// --------------------------- -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// ------------------------------------------------------ -// Just add .dropup after the standard .dropdown class and you're set, bro. -// TODO: abstract this so that the navbar fixed styles are not placed here? -.dropup, -.navbar-fixed-bottom .dropdown { - // Reverse the caret - .caret { - border-top: 0; - border-bottom: 4px solid @black; - content: ""; - } - // Different positioning for bottom up menu - .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; - } -} - -// Sub menus -// --------------------------- -.dropdown-submenu { - position: relative; -} -// Default dropdowns -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - .border-radius(0 6px 6px 6px); -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -// Dropups -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - .border-radius(5px 5px 5px 0); -} - -// Caret to indicate there is a submenu -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: darken(@dropdownBackground, 20%); - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: @dropdownLinkColorHover; -} - -// Left aligned submenus -.dropdown-submenu.pull-left { - // Undo the float - // Yes, this is awkward since .pull-left adds a float, but it sticks to our conventions elsewhere. - float: none; - - // Positioning the submenu - > .dropdown-menu { - left: -100%; - margin-left: 10px; - .border-radius(6px 0 6px 6px); - } -} - -// Tweak nav headers -// ----------------- -// Increase padding from 15px to 20px on sides -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} - -// Typeahead -// --------- -.typeahead { - z-index: 1051; - margin-top: 2px; // give it some space to breathe - .border-radius(@baseBorderRadius); -} diff --git a/pykeg/web/static/bootstrap/less/forms.less b/pykeg/web/static/bootstrap/less/forms.less deleted file mode 100644 index 06767bdd3..000000000 --- a/pykeg/web/static/bootstrap/less/forms.less +++ /dev/null @@ -1,690 +0,0 @@ -// -// Forms -// -------------------------------------------------- - - -// GENERAL STYLES -// -------------- - -// Make all forms have space below them -form { - margin: 0 0 @baseLineHeight; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -// Groups of fields with labels on top (legends) -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - line-height: @baseLineHeight * 2; - color: @grayDark; - border: 0; - border-bottom: 1px solid #e5e5e5; - - // Small - small { - font-size: @baseLineHeight * .75; - color: @grayLight; - } -} - -// Set font for forms -label, -input, -button, -select, -textarea { - #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here -} -input, -button, -select, -textarea { - font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element) -} - -// Identify controls by their labels -label { - display: block; - margin-bottom: 5px; -} - -// Form controls -// ------------------------- - -// Shared size and type resets -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: @baseLineHeight; - padding: 4px 6px; - margin-bottom: @baseLineHeight / 2; - font-size: @baseFontSize; - line-height: @baseLineHeight; - color: @gray; - .border-radius(@inputBorderRadius); - vertical-align: middle; -} - -// Reset appearance properties for textual inputs and textarea -// Declare width for legacy (can't be on input[type=*] selectors or it's too specific) -input, -textarea, -.uneditable-input { - width: 206px; // plus 12px padding and 2px border -} -// Reset height since textareas have rows -textarea { - height: auto; -} -// Everything else -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: @inputBackground; - border: 1px solid @inputBorder; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - .transition(~"border linear .2s, box-shadow linear .2s"); - - // Focus state - &:focus { - border-color: rgba(82,168,236,.8); - outline: 0; - outline: thin dotted \9; /* IE6-9 */ - .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)"); - } -} - -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; /* IE7 */ - margin-top: 1px \9; /* IE8-9 */ - line-height: normal; -} - -// Reset width of input images, buttons, radios, checkboxes -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; // Override of generic input selector -} - -// Set the height of select and file controls to match text inputs -select, -input[type="file"] { - height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; /* For IE7, add top margin to align select with labels */ - line-height: @inputHeight; -} - -// Make select elements obey height by applying a border -select { - width: 220px; // default input width + 10px of padding that doesn't get applied - border: 1px solid @inputBorder; - background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color -} - -// Make multiple select elements height not fixed -select[multiple], -select[size] { - height: auto; -} - -// Focus for select, file, radio, and checkbox -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - .tab-focus(); -} - - -// Uneditable inputs -// ------------------------- - -// Make uneditable inputs look inactive -.uneditable-input, -.uneditable-textarea { - color: @grayLight; - background-color: darken(@inputBackground, 1%); - border-color: @inputBorder; - .box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); - cursor: not-allowed; -} - -// For text that needs to appear as an input but should not be an input -.uneditable-input { - overflow: hidden; // prevent text from wrapping, but still cut it off like an input does - white-space: nowrap; -} - -// Make uneditable textareas behave like a textarea -.uneditable-textarea { - width: auto; - height: auto; -} - - -// Placeholder -// ------------------------- - -// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector -input, -textarea { - .placeholder(); -} - - -// CHECKBOXES & RADIOS -// ------------------- - -// Indent the labels to position radios/checkboxes as hanging -.radio, -.checkbox { - min-height: @baseLineHeight; // clear the floating input if there is no label text - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -// Move the options list down to align with labels -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; // has to be padding because margin collaspes -} - -// Radios and checkboxes on same line -// TODO v3: Convert .inline to .control-inline -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; // space out consecutive inline controls -} - - - -// INPUT SIZES -// ----------- - -// General classes for quick sizes -.input-mini { width: 60px; } -.input-small { width: 90px; } -.input-medium { width: 150px; } -.input-large { width: 210px; } -.input-xlarge { width: 270px; } -.input-xxlarge { width: 530px; } - -// Grid style input sizes -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -// Redeclare since the fluid row class is more specific -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -// Ensure input-prepend/append never wraps -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - - - -// GRID SIZING FOR INPUTS -// ---------------------- - -// Grid sizes -#grid > .input(@gridColumnWidth, @gridGutterWidth); - -// Control row for multiple inputs per line -.controls-row { - .clearfix(); // Clear the float from controls -} - -// Float to collapse white-space for proper grid alignment -.controls-row [class*="span"], -// Redeclare the fluid grid collapse since we undo the float for inputs -.row-fluid .controls-row [class*="span"] { - float: left; -} -// Explicity set top padding on all checkboxes/radios, not just first-child -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - - - - -// DISABLED STATE -// -------------- - -// Disabled and read-only inputs -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: @inputDisabledBackground; -} -// Explicitly reset the colors here -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - - - - -// FORM FIELD FEEDBACK STATES -// -------------------------- - -// Warning -.control-group.warning { - .formFieldState(@warningText, @warningText, @warningBackground); -} -// Error -.control-group.error { - .formFieldState(@errorText, @errorText, @errorBackground); -} -// Success -.control-group.success { - .formFieldState(@successText, @successText, @successBackground); -} -// Success -.control-group.info { - .formFieldState(@infoText, @infoText, @infoBackground); -} - -// HTML5 invalid states -// Shares styles with the .control-group.error above -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; - &:focus { - border-color: darken(#ee5f5b, 10%); - @shadow: 0 0 6px lighten(#ee5f5b, 20%); - .box-shadow(@shadow); - } -} - - - -// FORM ACTIONS -// ------------ - -.form-actions { - padding: (@baseLineHeight - 1) 20px @baseLineHeight; - margin-top: @baseLineHeight; - margin-bottom: @baseLineHeight; - background-color: @formActionsBackground; - border-top: 1px solid #e5e5e5; - .clearfix(); // Adding clearfix to allow for .pull-right button containers -} - - - -// HELP TEXT -// --------- - -.help-block, -.help-inline { - color: lighten(@textColor, 15%); // lighten the text some for contrast -} - -.help-block { - display: block; // account for any element using help-block - margin-bottom: @baseLineHeight / 2; -} - -.help-inline { - display: inline-block; - .ie7-inline-block(); - vertical-align: middle; - padding-left: 5px; -} - - - -// INPUT GROUPS -// ------------ - -// Allow us to put symbols and text within the input field for a cleaner look -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: @baseLineHeight / 2; - vertical-align: middle; - font-size: 0; // white space collapse hack - white-space: nowrap; // Prevent span and input from separating - - // Reset the white space collapse hack - input, - select, - .uneditable-input, - .dropdown-menu, - .popover { - font-size: @baseFontSize; - } - - input, - select, - .uneditable-input { - position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness - margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms - *margin-left: 0; - vertical-align: top; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - // Make input on top when focused so blue border and shadow always show - &:focus { - z-index: 2; - } - } - .add-on { - display: inline-block; - width: auto; - height: @baseLineHeight; - min-width: 16px; - padding: 4px 5px; - font-size: @baseFontSize; - font-weight: normal; - line-height: @baseLineHeight; - text-align: center; - text-shadow: 0 1px 0 @white; - background-color: @grayLighter; - border: 1px solid #ccc; - } - .add-on, - .btn, - .btn-group > .dropdown-toggle { - vertical-align: top; - .border-radius(0); - } - .active { - background-color: lighten(@green, 30); - border-color: @green; - } -} - -.input-prepend { - .add-on, - .btn { - margin-right: -1px; - } - .add-on:first-child, - .btn:first-child { - // FYI, `.btn:first-child` accounts for a button group that's prepended - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } -} - -.input-append { - input, - select, - .uneditable-input { - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - + .btn-group .btn:last-child { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on, - .btn, - .btn-group { - margin-left: -1px; - } - .add-on:last-child, - .btn:last-child, - .btn-group:last-child > .dropdown-toggle { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } -} - -// Remove all border-radius for inputs with both prepend and append -.input-prepend.input-append { - input, - select, - .uneditable-input { - .border-radius(0); - + .btn-group .btn { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on:first-child, - .btn:first-child { - margin-right: -1px; - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } - .add-on:last-child, - .btn:last-child { - margin-left: -1px; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - .btn-group:first-child { - margin-left: 0; - } -} - - - - -// SEARCH FORM -// ----------- - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; // Remove the default margin on all inputs - .border-radius(15px); -} - -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - .border-radius(0); // Override due to specificity -} -.form-search .input-append .search-query { - .border-radius(14px 0 0 14px); -} -.form-search .input-append .btn { - .border-radius(0 14px 14px 0); -} -.form-search .input-prepend .search-query { - .border-radius(0 14px 14px 0); -} -.form-search .input-prepend .btn { - .border-radius(14px 0 0 14px); -} - - - - -// HORIZONTAL & VERTICAL FORMS -// --------------------------- - -// Common properties -// ----------------- - -.form-search, -.form-inline, -.form-horizontal { - input, - textarea, - select, - .help-inline, - .uneditable-input, - .input-prepend, - .input-append { - display: inline-block; - .ie7-inline-block(); - margin-bottom: 0; - vertical-align: middle; - } - // Re-hide hidden elements due to specifity - .hide { - display: none; - } -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -// Remove margin for input-prepend/-append -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -// Inline checkbox/radio labels (remove padding on left) -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -// Remove float and margin, set to inline-block -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - - -// Margin to space out fieldsets -.control-group { - margin-bottom: @baseLineHeight / 2; -} - -// Legend collapses margin, so next element is responsible for spacing -legend + .control-group { - margin-top: @baseLineHeight; - -webkit-margin-top-collapse: separate; -} - -// Horizontal-specific styles -// -------------------------- - -.form-horizontal { - // Increase spacing between groups - .control-group { - margin-bottom: @baseLineHeight; - .clearfix(); - } - // Float the labels left - .control-label { - float: left; - width: @horizontalComponentOffset - 20; - padding-top: 5px; - text-align: right; - } - // Move over all input controls and content - .controls { - // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend - // don't inherit the margin of the parent, in this case .controls - *display: inline-block; - *padding-left: 20px; - margin-left: @horizontalComponentOffset; - *margin-left: 0; - &:first-child { - *padding-left: @horizontalComponentOffset; - } - } - // Remove bottom margin on block level help text since that's accounted for on .control-group - .help-block { - margin-bottom: 0; - } - // And apply it only to .help-block instances that follow a form control - input, - select, - textarea, - .uneditable-input, - .input-prepend, - .input-append { - + .help-block { - margin-top: @baseLineHeight / 2; - } - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: @horizontalComponentOffset; - } -} diff --git a/pykeg/web/static/bootstrap/less/grid.less b/pykeg/web/static/bootstrap/less/grid.less deleted file mode 100644 index 750d20351..000000000 --- a/pykeg/web/static/bootstrap/less/grid.less +++ /dev/null @@ -1,21 +0,0 @@ -// -// Grid system -// -------------------------------------------------- - - -// Fixed (940px) -#grid > .core(@gridColumnWidth, @gridGutterWidth); - -// Fluid (940px) -#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); - -// Reset utility classes due to specificity -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} diff --git a/pykeg/web/static/bootstrap/less/hero-unit.less b/pykeg/web/static/bootstrap/less/hero-unit.less deleted file mode 100644 index 763d86aee..000000000 --- a/pykeg/web/static/bootstrap/less/hero-unit.less +++ /dev/null @@ -1,25 +0,0 @@ -// -// Hero unit -// -------------------------------------------------- - - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: @baseLineHeight * 1.5; - color: @heroUnitLeadColor; - background-color: @heroUnitBackground; - .border-radius(6px); - h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: @heroUnitHeadingColor; - letter-spacing: -1px; - } - li { - line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less - } -} diff --git a/pykeg/web/static/bootstrap/less/labels-badges.less b/pykeg/web/static/bootstrap/less/labels-badges.less deleted file mode 100644 index bc321fe5c..000000000 --- a/pykeg/web/static/bootstrap/less/labels-badges.less +++ /dev/null @@ -1,84 +0,0 @@ -// -// Labels and badges -// -------------------------------------------------- - - -// Base classes -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: @baseFontSize * .846; - font-weight: bold; - line-height: 14px; // ensure proper line-height if floated - color: @white; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - background-color: @grayLight; -} -// Set unique padding and border-radii -.label { - .border-radius(3px); -} -.badge { - padding-left: 9px; - padding-right: 9px; - .border-radius(9px); -} - -// Empty labels/badges collapse -.label, -.badge { - &:empty { - display: none; - } -} - -// Hover/focus state, but only for links -a { - &.label:hover, - &.label:focus, - &.badge:hover, - &.badge:focus { - color: @white; - text-decoration: none; - cursor: pointer; - } -} - -// Colors -// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute) -.label, -.badge { - // Important (red) - &-important { background-color: @errorText; } - &-important[href] { background-color: darken(@errorText, 10%); } - // Warnings (orange) - &-warning { background-color: @orange; } - &-warning[href] { background-color: darken(@orange, 10%); } - // Success (green) - &-success { background-color: @successText; } - &-success[href] { background-color: darken(@successText, 10%); } - // Info (turquoise) - &-info { background-color: @infoText; } - &-info[href] { background-color: darken(@infoText, 10%); } - // Inverse (black) - &-inverse { background-color: @grayDark; } - &-inverse[href] { background-color: darken(@grayDark, 10%); } -} - -// Quick fix for labels/badges in buttons -.btn { - .label, - .badge { - position: relative; - top: -1px; - } -} -.btn-mini { - .label, - .badge { - top: 0; - } -} diff --git a/pykeg/web/static/bootstrap/less/layouts.less b/pykeg/web/static/bootstrap/less/layouts.less deleted file mode 100644 index 24a206211..000000000 --- a/pykeg/web/static/bootstrap/less/layouts.less +++ /dev/null @@ -1,16 +0,0 @@ -// -// Layouts -// -------------------------------------------------- - - -// Container (centered, fixed-width layouts) -.container { - .container-fixed(); -} - -// Fluid layouts (left aligned, with sidebar, min- & max-width content) -.container-fluid { - padding-right: @gridGutterWidth; - padding-left: @gridGutterWidth; - .clearfix(); -} \ No newline at end of file diff --git a/pykeg/web/static/bootstrap/less/media.less b/pykeg/web/static/bootstrap/less/media.less deleted file mode 100644 index e461e446d..000000000 --- a/pykeg/web/static/bootstrap/less/media.less +++ /dev/null @@ -1,55 +0,0 @@ -// Media objects -// Source: http://stubbornella.org/content/?p=497 -// -------------------------------------------------- - - -// Common styles -// ------------------------- - -// Clear the floats -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -// Proper spacing between instances of .media -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} - -// For images and videos, set to block -.media-object { - display: block; -} - -// Reset margins on headings for tighter default spacing -.media-heading { - margin: 0 0 5px; -} - - -// Media image alignment -// ------------------------- - -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; -} - - -// Media list variation -// ------------------------- - -// Undo default ul/ol styles -.media-list { - margin-left: 0; - list-style: none; -} diff --git a/pykeg/web/static/bootstrap/less/mixins.less b/pykeg/web/static/bootstrap/less/mixins.less deleted file mode 100644 index 79d889219..000000000 --- a/pykeg/web/static/bootstrap/less/mixins.less +++ /dev/null @@ -1,702 +0,0 @@ -// -// Mixins -// -------------------------------------------------- - - -// UTILITY MIXINS -// -------------------------------------------------- - -// Clearfix -// -------- -// For clearing floats like a boss h5bp.com/q -.clearfix { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - // Fixes Opera/contenteditable bug: - // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 - line-height: 0; - } - &:after { - clear: both; - } -} - -// Webkit-style focus -// ------------------ -.tab-focus() { - // Default - outline: thin dotted #333; - // Webkit - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -// Center-align a block level element -// ---------------------------------- -.center-block() { - display: block; - margin-left: auto; - margin-right: auto; -} - -// IE7 inline-block -// ---------------- -.ie7-inline-block() { - *display: inline; /* IE7 inline-block hack */ - *zoom: 1; -} - -// IE7 likes to collapse whitespace on either side of the inline-block elements. -// Ems because we're attempting to match the width of a space character. Left -// version is for form buttons, which typically come after other elements, and -// right version is for icons, which come before. Applying both is ok, but it will -// mean that space between those elements will be .6em (~2 space characters) in IE7, -// instead of the 1 space in other browsers. -.ie7-restore-left-whitespace() { - *margin-left: .3em; - - &:first-child { - *margin-left: 0; - } -} - -.ie7-restore-right-whitespace() { - *margin-right: .3em; -} - -// Sizing shortcuts -// ------------------------- -.size(@height, @width) { - width: @width; - height: @height; -} -.square(@size) { - .size(@size, @size); -} - -// Placeholder text -// ------------------------- -.placeholder(@color: @placeholderText) { - &:-moz-placeholder { - color: @color; - } - &:-ms-input-placeholder { - color: @color; - } - &::-webkit-input-placeholder { - color: @color; - } -} - -// Text overflow -// ------------------------- -// Requires inline-block or block for proper styling -.text-overflow() { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -// CSS image replacement -// ------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - - -// FONTS -// -------------------------------------------------- - -#font { - #family { - .serif() { - font-family: @serifFontFamily; - } - .sans-serif() { - font-family: @sansFontFamily; - } - .monospace() { - font-family: @monoFontFamily; - } - } - .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - font-size: @size; - font-weight: @weight; - line-height: @lineHeight; - } - .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .sans-serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .monospace; - #font > .shorthand(@size, @weight, @lineHeight); - } -} - - -// FORMS -// -------------------------------------------------- - -// Block level inputs -.input-block-level { - display: block; - width: 100%; - min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - .box-sizing(border-box); // Makes inputs behave like true block-level elements -} - - - -// Mixin for form field states -.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) { - // Set the text color - .control-label, - .help-block, - .help-inline { - color: @textColor; - } - // Style inputs accordingly - .checkbox, - .radio, - input, - select, - textarea { - color: @textColor; - } - input, - select, - textarea { - border-color: @borderColor; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work - &:focus { - border-color: darken(@borderColor, 10%); - @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%); - .box-shadow(@shadow); - } - } - // Give a small background color for input-prepend/-append - .input-prepend .add-on, - .input-append .add-on { - color: @textColor; - background-color: @backgroundColor; - border-color: @textColor; - } -} - - - -// CSS3 PROPERTIES -// -------------------------------------------------- - -// Border Radius -.border-radius(@radius) { - -webkit-border-radius: @radius; - -moz-border-radius: @radius; - border-radius: @radius; -} - -// Single Corner Border Radius -.border-top-left-radius(@radius) { - -webkit-border-top-left-radius: @radius; - -moz-border-radius-topleft: @radius; - border-top-left-radius: @radius; -} -.border-top-right-radius(@radius) { - -webkit-border-top-right-radius: @radius; - -moz-border-radius-topright: @radius; - border-top-right-radius: @radius; -} -.border-bottom-right-radius(@radius) { - -webkit-border-bottom-right-radius: @radius; - -moz-border-radius-bottomright: @radius; - border-bottom-right-radius: @radius; -} -.border-bottom-left-radius(@radius) { - -webkit-border-bottom-left-radius: @radius; - -moz-border-radius-bottomleft: @radius; - border-bottom-left-radius: @radius; -} - -// Single Side Border Radius -.border-top-radius(@radius) { - .border-top-right-radius(@radius); - .border-top-left-radius(@radius); -} -.border-right-radius(@radius) { - .border-top-right-radius(@radius); - .border-bottom-right-radius(@radius); -} -.border-bottom-radius(@radius) { - .border-bottom-right-radius(@radius); - .border-bottom-left-radius(@radius); -} -.border-left-radius(@radius) { - .border-top-left-radius(@radius); - .border-bottom-left-radius(@radius); -} - -// Drop shadows -.box-shadow(@shadow) { - -webkit-box-shadow: @shadow; - -moz-box-shadow: @shadow; - box-shadow: @shadow; -} - -// Transitions -.transition(@transition) { - -webkit-transition: @transition; - -moz-transition: @transition; - -o-transition: @transition; - transition: @transition; -} -.transition-delay(@transition-delay) { - -webkit-transition-delay: @transition-delay; - -moz-transition-delay: @transition-delay; - -o-transition-delay: @transition-delay; - transition-delay: @transition-delay; -} -.transition-duration(@transition-duration) { - -webkit-transition-duration: @transition-duration; - -moz-transition-duration: @transition-duration; - -o-transition-duration: @transition-duration; - transition-duration: @transition-duration; -} - -// Transformations -.rotate(@degrees) { - -webkit-transform: rotate(@degrees); - -moz-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); - -o-transform: rotate(@degrees); - transform: rotate(@degrees); -} -.scale(@ratio) { - -webkit-transform: scale(@ratio); - -moz-transform: scale(@ratio); - -ms-transform: scale(@ratio); - -o-transform: scale(@ratio); - transform: scale(@ratio); -} -.translate(@x, @y) { - -webkit-transform: translate(@x, @y); - -moz-transform: translate(@x, @y); - -ms-transform: translate(@x, @y); - -o-transform: translate(@x, @y); - transform: translate(@x, @y); -} -.skew(@x, @y) { - -webkit-transform: skew(@x, @y); - -moz-transform: skew(@x, @y); - -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885 - -o-transform: skew(@x, @y); - transform: skew(@x, @y); - -webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319 -} -.translate3d(@x, @y, @z) { - -webkit-transform: translate3d(@x, @y, @z); - -moz-transform: translate3d(@x, @y, @z); - -o-transform: translate3d(@x, @y, @z); - transform: translate3d(@x, @y, @z); -} - -// Backface visibility -// Prevent browsers from flickering when using CSS 3D transforms. -// Default value is `visible`, but can be changed to `hidden -// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples -.backface-visibility(@visibility){ - -webkit-backface-visibility: @visibility; - -moz-backface-visibility: @visibility; - backface-visibility: @visibility; -} - -// Background clipping -// Heads up: FF 3.6 and under need "padding" instead of "padding-box" -.background-clip(@clip) { - -webkit-background-clip: @clip; - -moz-background-clip: @clip; - background-clip: @clip; -} - -// Background sizing -.background-size(@size) { - -webkit-background-size: @size; - -moz-background-size: @size; - -o-background-size: @size; - background-size: @size; -} - - -// Box sizing -.box-sizing(@boxmodel) { - -webkit-box-sizing: @boxmodel; - -moz-box-sizing: @boxmodel; - box-sizing: @boxmodel; -} - -// User select -// For selecting text on the page -.user-select(@select) { - -webkit-user-select: @select; - -moz-user-select: @select; - -ms-user-select: @select; - -o-user-select: @select; - user-select: @select; -} - -// Resize anything -.resizable(@direction) { - resize: @direction; // Options: horizontal, vertical, both - overflow: auto; // Safari fix -} - -// CSS3 Content Columns -.content-columns(@columnCount, @columnGap: @gridGutterWidth) { - -webkit-column-count: @columnCount; - -moz-column-count: @columnCount; - column-count: @columnCount; - -webkit-column-gap: @columnGap; - -moz-column-gap: @columnGap; - column-gap: @columnGap; -} - -// Optional hyphenation -.hyphens(@mode: auto) { - word-wrap: break-word; - -webkit-hyphens: @mode; - -moz-hyphens: @mode; - -ms-hyphens: @mode; - -o-hyphens: @mode; - hyphens: @mode; -} - -// Opacity -.opacity(@opacity) { - opacity: @opacity / 100; - filter: ~"alpha(opacity=@{opacity})"; -} - - - -// BACKGROUNDS -// -------------------------------------------------- - -// Add an alphatransparency value to any background or border color (via Elyse Holladay) -#translucent { - .background(@color: @white, @alpha: 1) { - background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - } - .border(@color: @white, @alpha: 1) { - border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - .background-clip(padding-box); - } -} - -// Gradient Bar Colors for buttons and alerts -.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - color: @textColor; - text-shadow: @textShadow; - #gradient > .vertical(@primaryColor, @secondaryColor); - border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%); - border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%); -} - -// Gradients -#gradient { - .horizontal(@startColor: #555, @endColor: #333) { - background-color: @endColor; - background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10 - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down - } - .vertical(@startColor: #555, @endColor: #333) { - background-color: mix(@startColor, @endColor, 60%); - background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down - } - .directional(@startColor: #555, @endColor: #333, @deg: 45deg) { - background-color: @endColor; - background-repeat: repeat-x; - background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10 - } - .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback - } - - .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback - } - .radial(@innerColor: #555, @outerColor: #333) { - background-color: @outerColor; - background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor)); - background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor); - background-image: -moz-radial-gradient(circle, @innerColor, @outerColor); - background-image: -o-radial-gradient(circle, @innerColor, @outerColor); - background-repeat: no-repeat; - } - .striped(@color: #555, @angle: 45deg) { - background-color: @color; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - } -} -// Reset filters for IE -.reset-filter() { - filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); -} - - - -// COMPONENT MIXINS -// -------------------------------------------------- - -// Horizontal dividers -// ------------------------- -// Dividers (basically an hr) within dropdowns and nav lists -.nav-divider(@top: #e5e5e5, @bottom: @white) { - // IE7 needs a set width since we gave a height. Restricting just - // to IE7 to keep the 1px left/right space in other browsers. - // It is unclear where IE is getting the extra space that we need - // to negative-margin away, but so it goes. - *width: 100%; - height: 1px; - margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px - *margin: -5px 0 5px; - overflow: hidden; - background-color: @top; - border-bottom: 1px solid @bottom; -} - -// Button backgrounds -// ------------------ -.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - // gradientBar will set the background to a pleasing blend of these, to support IE<=9 - .gradientBar(@startColor, @endColor, @textColor, @textShadow); - *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - .reset-filter(); - - // in these cases the gradient won't cover the background, so we override - &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] { - color: @textColor; - background-color: @endColor; - *background-color: darken(@endColor, 5%); - } - - // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves - &:active, - &.active { - background-color: darken(@endColor, 10%) e("\9"); - } -} - -// Navbar vertical align -// ------------------------- -// Vertically center elements in the navbar. -// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin. -.navbarVerticalAlign(@elementHeight) { - margin-top: (@navbarHeight - @elementHeight) / 2; -} - - - -// Grid System -// ----------- - -// Centered container element -.container-fixed() { - margin-right: auto; - margin-left: auto; - .clearfix(); -} - -// Table columns -.tableColumns(@columnSpan: 1) { - float: none; // undo default grid column styles - width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells - margin-left: 0; // undo default grid column styles -} - -// Make a Grid -// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior -.makeRow() { - margin-left: @gridGutterWidth * -1; - .clearfix(); -} -.makeColumn(@columns: 1, @offset: 0) { - float: left; - margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2); - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); -} - -// The Grid -#grid { - - .core (@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1)); - } - - .span (@columns) { - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); - } - - .row { - margin-left: @gridGutterWidth * -1; - .clearfix(); - } - - [class*="span"] { - float: left; - min-height: 1px; // prevent collapsing columns - margin-left: @gridGutterWidth; - } - - // Set the container width, and override it for fixed navbars in media queries - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { .span(@gridColumns); } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - - } - - .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offset@{index}:first-child { .offsetFirstChild(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%); - } - - .offsetFirstChild (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - - .span (@columns) { - width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)); - *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%); - } - - .row-fluid { - width: 100%; - .clearfix(); - [class*="span"] { - .input-block-level(); - float: left; - margin-left: @fluidGridGutterWidth; - *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - [class*="span"]:first-child { - margin-left: 0; - } - - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @fluidGridGutterWidth; - } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - } - - } - - .input(@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .span(@columns) { - width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14; - } - - input, - textarea, - .uneditable-input { - margin-left: 0; // override margin-left from core grid system - } - - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @gridGutterWidth; - } - - // generate .spanX - .spanX (@gridColumns); - - } -} diff --git a/pykeg/web/static/bootstrap/less/modals.less b/pykeg/web/static/bootstrap/less/modals.less deleted file mode 100644 index 8e272d409..000000000 --- a/pykeg/web/static/bootstrap/less/modals.less +++ /dev/null @@ -1,95 +0,0 @@ -// -// Modals -// -------------------------------------------------- - -// Background -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: @zindexModalBackdrop; - background-color: @black; - // Fade for backdrop - &.fade { opacity: 0; } -} - -.modal-backdrop, -.modal-backdrop.fade.in { - .opacity(80); -} - -// Base modal -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: @zindexModal; - width: 560px; - margin-left: -280px; - background-color: @white; - border: 1px solid #999; - border: 1px solid rgba(0,0,0,.3); - *border: 1px solid #999; /* IE6-7 */ - .border-radius(6px); - .box-shadow(0 3px 7px rgba(0,0,0,0.3)); - .background-clip(padding-box); - // Remove focus outline from opened modal - outline: none; - - &.fade { - .transition(e('opacity .3s linear, top .3s ease-out')); - top: -25%; - } - &.fade.in { top: 10%; } -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; - // Close icon - .close { margin-top: 2px; } - // Heading - h3 { - margin: 0; - line-height: 30px; - } -} - -// Body (where all modal content resides) -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -// Remove bottom margin if need be -.modal-form { - margin-bottom: 0; -} - -// Footer (for actions) -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; // right align buttons - background-color: #f5f5f5; - border-top: 1px solid #ddd; - .border-radius(0 0 6px 6px); - .box-shadow(inset 0 1px 0 @white); - .clearfix(); // clear it in case folks use .pull-* classes on buttons - - // Properly space out buttons - .btn + .btn { - margin-left: 5px; - margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs - } - // but override that for button groups - .btn-group .btn + .btn { - margin-left: -1px; - } - // and override it for block buttons as well - .btn-block + .btn-block { - margin-left: 0; - } -} diff --git a/pykeg/web/static/bootstrap/less/navbar.less b/pykeg/web/static/bootstrap/less/navbar.less deleted file mode 100644 index 93d09bcad..000000000 --- a/pykeg/web/static/bootstrap/less/navbar.less +++ /dev/null @@ -1,497 +0,0 @@ -// -// Navbars (Redux) -// -------------------------------------------------- - - -// COMMON STYLES -// ------------- - -// Base class and wrapper -.navbar { - overflow: visible; - margin-bottom: @baseLineHeight; - - // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar - *position: relative; - *z-index: 2; -} - -// Inner for background effects -// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present -.navbar-inner { - min-height: @navbarHeight; - padding-left: 20px; - padding-right: 20px; - #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground); - border: 1px solid @navbarBorder; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 4px rgba(0,0,0,.065)); - - // Prevent floats from breaking the navbar - .clearfix(); -} - -// Set width to auto for default container -// We then reset it for fixed navbars in the #gridSystem mixin -.navbar .container { - width: auto; -} - -// Override the default collapsed state -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - - -// Brand: website or project name -// ------------------------- -.navbar .brand { - float: left; - display: block; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2); - margin-left: -20px; // negative indent to left-align the text down the page - font-size: 20px; - font-weight: 200; - color: @navbarBrandColor; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; - &:hover, - &:focus { - text-decoration: none; - } -} - -// Plain text in topbar -// ------------------------- -.navbar-text { - margin-bottom: 0; - line-height: @navbarHeight; - color: @navbarText; -} - -// Janky solution for now to account for links outside the .nav -// ------------------------- -.navbar-link { - color: @navbarLinkColor; - &:hover, - &:focus { - color: @navbarLinkColorHover; - } -} - -// Dividers in navbar -// ------------------------- -.navbar .divider-vertical { - height: @navbarHeight; - margin: 0 9px; - border-left: 1px solid @navbarBackground; - border-right: 1px solid @navbarBackgroundHighlight; -} - -// Buttons in navbar -// ------------------------- -.navbar .btn, -.navbar .btn-group { - .navbarVerticalAlign(30px); // Vertically center in navbar -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; // then undo the margin here so we don't accidentally double it -} - -// Navbar forms -// ------------------------- -.navbar-form { - margin-bottom: 0; // remove default bottom margin - .clearfix(); - input, - select, - .radio, - .checkbox { - .navbarVerticalAlign(30px); // Vertically center in navbar - } - input, - select, - .btn { - display: inline-block; - margin-bottom: 0; - } - input[type="image"], - input[type="checkbox"], - input[type="radio"] { - margin-top: 3px; - } - .input-append, - .input-prepend { - margin-top: 5px; - white-space: nowrap; // preven two items from separating within a .navbar-form that has .pull-left - input { - margin-top: 0; // remove the margin on top since it's on the parent - } - } -} - -// Navbar search -// ------------------------- -.navbar-search { - position: relative; - float: left; - .navbarVerticalAlign(30px); // Vertically center in navbar - margin-bottom: 0; - .search-query { - margin-bottom: 0; - padding: 4px 14px; - #font > .sans-serif(13px, normal, 1); - .border-radius(15px); // redeclare because of specificity of the type attribute - } -} - - - -// Static navbar -// ------------------------- - -.navbar-static-top { - position: static; - margin-bottom: 0; // remove 18px margin for default navbar - .navbar-inner { - .border-radius(0); - } -} - - - -// Fixed navbar -// ------------------------- - -// Shared (top/bottom) styles -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: @zindexFixedNavbar; - margin-bottom: 0; // remove 18px margin for default navbar -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - .border-radius(0); -} - -// Reset container width -// Required here as we reset the width earlier on and the grid mixins don't override early enough -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - #grid > .core > .span(@gridColumns); -} - -// Fixed to top -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top, -.navbar-static-top { - .navbar-inner { - .box-shadow(~"0 1px 10px rgba(0,0,0,.1)"); - } -} - -// Fixed to bottom -.navbar-fixed-bottom { - bottom: 0; - .navbar-inner { - .box-shadow(~"0 -1px 10px rgba(0,0,0,.1)"); - } -} - - - -// NAVIGATION -// ---------- - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; // redeclare due to specificity - margin-right: 0; // remove margin on float right nav -} -.navbar .nav > li { - float: left; -} - -// Links -.navbar .nav > li > a { - float: none; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2); - color: @navbarLinkColor; - text-decoration: none; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -// Hover/focus -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active - color: @navbarLinkColorHover; - text-decoration: none; -} - -// Active nav items -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: @navbarLinkColorActive; - text-decoration: none; - background-color: @navbarLinkBackgroundActive; - .box-shadow(inset 0 3px 8px rgba(0,0,0,.125)); -} - -// Navbar button for toggling navbar items in responsive layouts -// These definitions need to come after '.navbar .btn' -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%)); - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)"); -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - .border-radius(1px); - .box-shadow(0 1px 0 rgba(0,0,0,.25)); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - - - -// Dropdown menus -// -------------- - -// Menu position and menu carets -.navbar .nav > li > .dropdown-menu { - &:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: @dropdownBorder; - position: absolute; - top: -7px; - left: 9px; - } - &:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid @dropdownBackground; - position: absolute; - top: -6px; - left: 10px; - } -} -// Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .nav > li > .dropdown-menu { - &:before { - border-top: 7px solid #ccc; - border-top-color: @dropdownBorder; - border-bottom: 0; - bottom: -7px; - top: auto; - } - &:after { - border-top: 6px solid @dropdownBackground; - border-bottom: 0; - bottom: -6px; - top: auto; - } -} - -// Caret should match text color on hover/focus -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: @navbarLinkColorHover; - border-bottom-color: @navbarLinkColorHover; -} - -// Remove background color from open dropdown -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarLinkBackgroundActive; - color: @navbarLinkColorActive; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarLinkColor; - border-bottom-color: @navbarLinkColor; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarLinkColorActive; - border-bottom-color: @navbarLinkColorActive; -} - -// Right aligned menus need alt position -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; - &:before { - left: auto; - right: 12px; - } - &:after { - left: auto; - right: 13px; - } - .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - .border-radius(6px 0 6px 6px); - } -} - - -// Inverted navbar -// ------------------------- - -.navbar-inverse { - - .navbar-inner { - #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground); - border-color: @navbarInverseBorder; - } - - .brand, - .nav > li > a { - color: @navbarInverseLinkColor; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - &:hover, - &:focus { - color: @navbarInverseLinkColorHover; - } - } - - .brand { - color: @navbarInverseBrandColor; - } - - .navbar-text { - color: @navbarInverseText; - } - - .nav > li > a:focus, - .nav > li > a:hover { - background-color: @navbarInverseLinkBackgroundHover; - color: @navbarInverseLinkColorHover; - } - - .nav .active > a, - .nav .active > a:hover, - .nav .active > a:focus { - color: @navbarInverseLinkColorActive; - background-color: @navbarInverseLinkBackgroundActive; - } - - // Inline text links - .navbar-link { - color: @navbarInverseLinkColor; - &:hover, - &:focus { - color: @navbarInverseLinkColorHover; - } - } - - // Dividers in navbar - .divider-vertical { - border-left-color: @navbarInverseBackground; - border-right-color: @navbarInverseBackgroundHighlight; - } - - // Dropdowns - .nav li.dropdown.open > .dropdown-toggle, - .nav li.dropdown.active > .dropdown-toggle, - .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarInverseLinkBackgroundActive; - color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > a:hover .caret, - .nav li.dropdown > a:focus .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColor; - border-bottom-color: @navbarInverseLinkColor; - } - .nav li.dropdown.open > .dropdown-toggle .caret, - .nav li.dropdown.active > .dropdown-toggle .caret, - .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; - } - - // Navbar search - .navbar-search { - .search-query { - color: @white; - background-color: @navbarInverseSearchBackground; - border-color: @navbarInverseSearchBorder; - .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)"); - .transition(none); - .placeholder(@navbarInverseSearchPlaceholderColor); - - // Focus states (we use .focused since IE7-8 and down doesn't support :focus) - &:focus, - &.focused { - padding: 5px 15px; - color: @grayDark; - text-shadow: 0 1px 0 @white; - background-color: @navbarInverseSearchBackgroundFocus; - border: 0; - .box-shadow(0 0 3px rgba(0,0,0,.15)); - outline: 0; - } - } - } - - // Navbar collapse button - .btn-navbar { - .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%)); - } - -} diff --git a/pykeg/web/static/bootstrap/less/navs.less b/pykeg/web/static/bootstrap/less/navs.less deleted file mode 100644 index 01cd805bd..000000000 --- a/pykeg/web/static/bootstrap/less/navs.less +++ /dev/null @@ -1,409 +0,0 @@ -// -// Navs -// -------------------------------------------------- - - -// BASE CLASS -// ---------- - -.nav { - margin-left: 0; - margin-bottom: @baseLineHeight; - list-style: none; -} - -// Make links block level -.nav > li > a { - display: block; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: @grayLighter; -} - -// Prevent IE8 from misplacing imgs -// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 -.nav > li > a > img { - max-width: none; -} - -// Redeclare pull classes because of specifity -.nav > .pull-right { - float: right; -} - -// Nav headers (for dropdowns and lists) -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: @baseLineHeight; - color: @grayLight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - text-transform: uppercase; -} -// Space them out when they follow another list item (link) -.nav li + .nav-header { - margin-top: 9px; -} - - - -// NAV LIST -// -------- - -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255,255,255,.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: @white; - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - background-color: @linkColor; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -// Dividers (basically an hr) within the dropdown -.nav-list .divider { - .nav-divider(); -} - - - -// TABS AND PILLS -// ------------- - -// Common styles -.nav-tabs, -.nav-pills { - .clearfix(); -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; // keeps the overall height an even number -} - -// TABS -// ---- - -// Give the tabs something to sit on -.nav-tabs { - border-bottom: 1px solid #ddd; -} -// Make the list-items overlay the bottom border -.nav-tabs > li { - margin-bottom: -1px; -} -// Actual tabs (as links) -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: @baseLineHeight; - border: 1px solid transparent; - .border-radius(4px 4px 0 0); - &:hover, - &:focus { - border-color: @grayLighter @grayLighter #ddd; - } -} -// Active state, and it's :hover/:focus to override normal :hover/:focus -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: @gray; - background-color: @bodyBackground; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} - - -// PILLS -// ----- - -// Links rendered as pills -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - .border-radius(5px); -} - -// Active state -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: @white; - background-color: @linkColor; -} - - - -// STACKED NAV -// ----------- - -// Stacked tabs and pills -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; // no need for the gap between nav items -} - -// Tabs -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - .border-radius(0); -} -.nav-tabs.nav-stacked > li:first-child > a { - .border-top-radius(4px); -} -.nav-tabs.nav-stacked > li:last-child > a { - .border-bottom-radius(4px); -} -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - border-color: #ddd; - z-index: 2; -} - -// Pills -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; // decrease margin to match sizing of stacked tabs -} - - - -// DROPDOWNS -// --------- - -.nav-tabs .dropdown-menu { - .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu -} -.nav-pills .dropdown-menu { - .border-radius(6px); // make rounded corners match the pills -} - -// Default dropdown links -// ------------------------- -// Make carets use linkColor to start -.nav .dropdown-toggle .caret { - border-top-color: @linkColor; - border-bottom-color: @linkColor; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: @linkColorHover; - border-bottom-color: @linkColorHover; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -// Active dropdown links -// ------------------------- -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: @gray; - border-bottom-color: @gray; -} - -// Active:hover/:focus dropdown links -// ------------------------- -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} - -// Open dropdowns -// ------------------------- -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: @white; - background-color: @grayLight; - border-color: @grayLight; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: @white; - border-bottom-color: @white; - .opacity(100); -} - -// Dropdowns in stacked tabs -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: @grayLight; -} - - - -// TABBABLE -// -------- - - -// COMMON STYLES -// ------------- - -// Clear any floats -.tabbable { - .clearfix(); -} -.tab-content { - overflow: auto; // prevent content from running below tabs -} - -// Remove border on bottom, left, right -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -// Show/hide tabbable areas -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} - - -// BOTTOM -// ------ - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - .border-radius(0 0 4px 4px); - &:hover, - &:focus { - border-bottom-color: transparent; - border-top-color: #ddd; - } -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -// LEFT & RIGHT -// ------------ - -// Common styles -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -// Tabs on the left -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - .border-radius(4px 0 0 4px); -} -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: @grayLighter #ddd @grayLighter @grayLighter; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: @white; -} - -// Tabs on the right -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - .border-radius(0 4px 4px 0); -} -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: @grayLighter @grayLighter @grayLighter #ddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: @white; -} - - - -// DISABLED STATES -// --------------- - -// Gray out text -.nav > .disabled > a { - color: @grayLight; -} -// Nuke hover/focus effects -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - cursor: default; -} diff --git a/pykeg/web/static/bootstrap/less/pager.less b/pykeg/web/static/bootstrap/less/pager.less deleted file mode 100644 index 147618829..000000000 --- a/pykeg/web/static/bootstrap/less/pager.less +++ /dev/null @@ -1,43 +0,0 @@ -// -// Pager pagination -// -------------------------------------------------- - - -.pager { - margin: @baseLineHeight 0; - list-style: none; - text-align: center; - .clearfix(); -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - .border-radius(15px); -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: @grayLight; - background-color: #fff; - cursor: default; -} \ No newline at end of file diff --git a/pykeg/web/static/bootstrap/less/pagination.less b/pykeg/web/static/bootstrap/less/pagination.less deleted file mode 100644 index a789db2d2..000000000 --- a/pykeg/web/static/bootstrap/less/pagination.less +++ /dev/null @@ -1,123 +0,0 @@ -// -// Pagination (multiple pages) -// -------------------------------------------------- - -// Space out pagination from surrounding content -.pagination { - margin: @baseLineHeight 0; -} - -.pagination ul { - // Allow for text-based alignment - display: inline-block; - .ie7-inline-block(); - // Reset default ul styles - margin-left: 0; - margin-bottom: 0; - // Visuals - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 2px rgba(0,0,0,.05)); -} -.pagination ul > li { - display: inline; // Remove list-style and block-level defaults -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; // Collapse white-space - padding: 4px 12px; - line-height: @baseLineHeight; - text-decoration: none; - background-color: @paginationBackground; - border: 1px solid @paginationBorder; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: @paginationActiveBackground; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: @grayLight; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: @grayLight; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - .border-left-radius(@baseBorderRadius); -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - .border-right-radius(@baseBorderRadius); -} - - -// Alignment -// -------------------------------------------------- - -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} - - -// Sizing -// -------------------------------------------------- - -// Large -.pagination-large { - ul > li > a, - ul > li > span { - padding: @paddingLarge; - font-size: @fontSizeLarge; - } - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusLarge); - } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusLarge); - } -} - -// Small and mini -.pagination-mini, -.pagination-small { - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusSmall); - } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusSmall); - } -} - -// Small -.pagination-small { - ul > li > a, - ul > li > span { - padding: @paddingSmall; - font-size: @fontSizeSmall; - } -} -// Mini -.pagination-mini { - ul > li > a, - ul > li > span { - padding: @paddingMini; - font-size: @fontSizeMini; - } -} diff --git a/pykeg/web/static/bootstrap/less/popovers.less b/pykeg/web/static/bootstrap/less/popovers.less deleted file mode 100644 index aae35c8cd..000000000 --- a/pykeg/web/static/bootstrap/less/popovers.less +++ /dev/null @@ -1,133 +0,0 @@ -// -// Popovers -// -------------------------------------------------- - - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: @zindexPopover; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; // Reset given new insertion method - background-color: @popoverBackground; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); - .border-radius(6px); - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - - // Overrides for proper insertion - white-space: normal; - - // Offset the popover to account for the popover arrow - &.top { margin-top: -10px; } - &.right { margin-left: 10px; } - &.bottom { margin-top: 10px; } - &.left { margin-left: -10px; } -} - -.popover-title { - margin: 0; // reset heading margin - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: @popoverTitleBackground; - border-bottom: 1px solid darken(@popoverTitleBackground, 5%); - .border-radius(5px 5px 0 0); - - &:empty { - display: none; - } -} - -.popover-content { - padding: 9px 14px; -} - -// Arrows -// -// .arrow is outer, .arrow:after is inner - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: @popoverArrowOuterWidth; -} -.popover .arrow:after { - border-width: @popoverArrowWidth; - content: ""; -} - -.popover { - &.top .arrow { - left: 50%; - margin-left: -@popoverArrowOuterWidth; - border-bottom-width: 0; - border-top-color: #999; // IE8 fallback - border-top-color: @popoverArrowOuterColor; - bottom: -@popoverArrowOuterWidth; - &:after { - bottom: 1px; - margin-left: -@popoverArrowWidth; - border-bottom-width: 0; - border-top-color: @popoverArrowColor; - } - } - &.right .arrow { - top: 50%; - left: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; - border-left-width: 0; - border-right-color: #999; // IE8 fallback - border-right-color: @popoverArrowOuterColor; - &:after { - left: 1px; - bottom: -@popoverArrowWidth; - border-left-width: 0; - border-right-color: @popoverArrowColor; - } - } - &.bottom .arrow { - left: 50%; - margin-left: -@popoverArrowOuterWidth; - border-top-width: 0; - border-bottom-color: #999; // IE8 fallback - border-bottom-color: @popoverArrowOuterColor; - top: -@popoverArrowOuterWidth; - &:after { - top: 1px; - margin-left: -@popoverArrowWidth; - border-top-width: 0; - border-bottom-color: @popoverArrowColor; - } - } - - &.left .arrow { - top: 50%; - right: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; - border-right-width: 0; - border-left-color: #999; // IE8 fallback - border-left-color: @popoverArrowOuterColor; - &:after { - right: 1px; - border-right-width: 0; - border-left-color: @popoverArrowColor; - bottom: -@popoverArrowWidth; - } - } - -} diff --git a/pykeg/web/static/bootstrap/less/progress-bars.less b/pykeg/web/static/bootstrap/less/progress-bars.less deleted file mode 100644 index 5e0c3dda0..000000000 --- a/pykeg/web/static/bootstrap/less/progress-bars.less +++ /dev/null @@ -1,122 +0,0 @@ -// -// Progress bars -// -------------------------------------------------- - - -// ANIMATIONS -// ---------- - -// Webkit -@-webkit-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Firefox -@-moz-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// IE9 -@-ms-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Opera -@-o-keyframes progress-bar-stripes { - from { background-position: 0 0; } - to { background-position: 40px 0; } -} - -// Spec -@keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - - - -// THE BARS -// -------- - -// Outer container -.progress { - overflow: hidden; - height: @baseLineHeight; - margin-bottom: @baseLineHeight; - #gradient > .vertical(#f5f5f5, #f9f9f9); - .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); - .border-radius(@baseBorderRadius); -} - -// Bar of progress -.progress .bar { - width: 0%; - height: 100%; - color: @white; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - #gradient > .vertical(#149bdf, #0480be); - .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); - .box-sizing(border-box); - .transition(width .6s ease); -} -.progress .bar + .bar { - .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)"); -} - -// Striped bars -.progress-striped .bar { - #gradient > .striped(#149bdf); - .background-size(40px 40px); -} - -// Call animation for the active one -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - - - -// COLORS -// ------ - -// Danger (red) -.progress-danger .bar, .progress .bar-danger { - #gradient > .vertical(#ee5f5b, #c43c35); -} -.progress-danger.progress-striped .bar, .progress-striped .bar-danger { - #gradient > .striped(#ee5f5b); -} - -// Success (green) -.progress-success .bar, .progress .bar-success { - #gradient > .vertical(#62c462, #57a957); -} -.progress-success.progress-striped .bar, .progress-striped .bar-success { - #gradient > .striped(#62c462); -} - -// Info (teal) -.progress-info .bar, .progress .bar-info { - #gradient > .vertical(#5bc0de, #339bb9); -} -.progress-info.progress-striped .bar, .progress-striped .bar-info { - #gradient > .striped(#5bc0de); -} - -// Warning (orange) -.progress-warning .bar, .progress .bar-warning { - #gradient > .vertical(lighten(@orange, 15%), @orange); -} -.progress-warning.progress-striped .bar, .progress-striped .bar-warning { - #gradient > .striped(lighten(@orange, 15%)); -} diff --git a/pykeg/web/static/bootstrap/less/reset.less b/pykeg/web/static/bootstrap/less/reset.less deleted file mode 100644 index 4806bd5e5..000000000 --- a/pykeg/web/static/bootstrap/less/reset.less +++ /dev/null @@ -1,216 +0,0 @@ -// -// Reset CSS -// Adapted from http://github.com/necolas/normalize.css -// -------------------------------------------------- - - -// Display in IE6-9 and FF3 -// ------------------------- - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -// Display block in IE6-9 and FF3 -// ------------------------- - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -// Prevents modern browsers from displaying 'audio' without controls -// ------------------------- - -audio:not([controls]) { - display: none; -} - -// Base settings -// ------------------------- - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -// Focus states -a:focus { - .tab-focus(); -} -// Hover & Active -a:hover, -a:active { - outline: 0; -} - -// Prevents sub and sup affecting line-height in all browsers -// ------------------------- - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} - -// Img border in a's and image quality -// ------------------------- - -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; /* Part 1: Set a maxium relative to the parent */ - width: auto\9; /* IE7-8 need help adjusting responsive images */ - height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -// Prevent max-width from affecting Google Maps -#map_canvas img, -.google-maps img { - max-width: none; -} - -// Forms -// ------------------------- - -// Font size in all browsers, margin changes, misc consistency -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; // Inner spacing ie IE6/7 - line-height: normal; // FF3/4 have !important on line-height in UA stylesheet -} -button::-moz-focus-inner, -input::-moz-focus-inner { // Inner padding and border oddities in FF3/4 - padding: 0; - border: 0; -} -button, -html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS. - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -input[type="search"] { // Appearance in Safari/Chrome - .box-sizing(content-box); - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5 -} -textarea { - overflow: auto; // Remove vertical scrollbar in IE6-9 - vertical-align: top; // Readability and alignment cross-browser -} - - -// Printing -// ------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css - -@media print { - - * { - text-shadow: none !important; - color: #000 !important; // Black prints faster: h5bp.com/s - background: transparent !important; - box-shadow: none !important; - } - - a, - a:visited { - text-decoration: underline; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - // Don't show links for images, or javascript/internal links - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - - thead { - display: table-header-group; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page { - margin: 0.5cm; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } -} diff --git a/pykeg/web/static/bootstrap/less/responsive-1200px-min.less b/pykeg/web/static/bootstrap/less/responsive-1200px-min.less deleted file mode 100644 index 4f35ba6ca..000000000 --- a/pykeg/web/static/bootstrap/less/responsive-1200px-min.less +++ /dev/null @@ -1,28 +0,0 @@ -// -// Responsive: Large desktop and up -// -------------------------------------------------- - - -@media (min-width: 1200px) { - - // Fixed grid - #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200); - - // Input grid - #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200); - - // Thumbnails - .thumbnails { - margin-left: -@gridGutterWidth1200; - } - .thumbnails > li { - margin-left: @gridGutterWidth1200; - } - .row-fluid .thumbnails { - margin-left: 0; - } - -} diff --git a/pykeg/web/static/bootstrap/less/responsive-767px-max.less b/pykeg/web/static/bootstrap/less/responsive-767px-max.less deleted file mode 100644 index 128f4ce30..000000000 --- a/pykeg/web/static/bootstrap/less/responsive-767px-max.less +++ /dev/null @@ -1,193 +0,0 @@ -// -// Responsive: Landscape phone to desktop/tablet -// -------------------------------------------------- - - -@media (max-width: 767px) { - - // Padding to set content in a bit - body { - padding-left: 20px; - padding-right: 20px; - } - // Negative indent the now static "fixed" navbar - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - // Remove padding on container given explicit padding set on body - .container-fluid { - padding: 0; - } - - // TYPOGRAPHY - // ---------- - // Reset horizontal dl - .dl-horizontal { - dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - dd { - margin-left: 0; - } - } - - // GRID & CONTAINERS - // ----------------- - // Remove width from containers - .container { - width: auto; - } - // Fluid rows - .row-fluid { - width: 100%; - } - // Undo negative margin on rows and thumbnails - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present - } - // Make all grid-sized elements block level again - [class*="span"], - .uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - .box-sizing(border-box); - } - .span12, - .row-fluid .span12 { - width: 100%; - .box-sizing(border-box); - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - - // FORM FIELDS - // ----------- - // Make span* classes full width - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - .input-block-level(); - } - // But don't let it screw up prepend/append inputs - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; // redeclare so they don't wrap to new lines - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - - // Modals - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - &.fade { top: -100px; } - &.fade.in { top: 20px; } - } - -} - - - -// UP TO LANDSCAPE PHONE -// --------------------- - -@media (max-width: 480px) { - - // Smooth out the collapsing/expanding nav - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); // activate the GPU - } - - // Block level the page header small tag for readability - .page-header h1 small { - display: block; - line-height: @baseLineHeight; - } - - // Update checkboxes for iOS - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - - // Remove the horizontal form styles - .form-horizontal { - .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - // Move over all input controls and content - .controls { - margin-left: 0; - } - // Move the options list down to align with labels - .control-list { - padding-top: 0; // has to be padding because margin collaspes - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: 10px; - padding-right: 10px; - } - } - - // Medias - // Reset float and spacing to stack - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - // Remove side margins since we stack instead of indent - .media-object { - margin-right: 0; - margin-left: 0; - } - - // Modals - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - - // Carousel - .carousel-caption { - position: static; - } - -} diff --git a/pykeg/web/static/bootstrap/less/responsive-768px-979px.less b/pykeg/web/static/bootstrap/less/responsive-768px-979px.less deleted file mode 100644 index 8e8c486a0..000000000 --- a/pykeg/web/static/bootstrap/less/responsive-768px-979px.less +++ /dev/null @@ -1,19 +0,0 @@ -// -// Responsive: Tablet to desktop -// -------------------------------------------------- - - -@media (min-width: 768px) and (max-width: 979px) { - - // Fixed grid - #grid > .core(@gridColumnWidth768, @gridGutterWidth768); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); - - // Input grid - #grid > .input(@gridColumnWidth768, @gridGutterWidth768); - - // No need to reset .thumbnails here since it's the same @gridGutterWidth - -} diff --git a/pykeg/web/static/bootstrap/less/responsive-navbar.less b/pykeg/web/static/bootstrap/less/responsive-navbar.less deleted file mode 100644 index 21cd3ba67..000000000 --- a/pykeg/web/static/bootstrap/less/responsive-navbar.less +++ /dev/null @@ -1,189 +0,0 @@ -// -// Responsive: Navbar -// -------------------------------------------------- - - -// TABLETS AND BELOW -// ----------------- -@media (max-width: @navbarCollapseWidth) { - - // UNFIX THE TOPBAR - // ---------------- - // Remove any padding from the body - body { - padding-top: 0; - } - // Unfix the navbars - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: @baseLineHeight; - } - .navbar-fixed-bottom { - margin-top: @baseLineHeight; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - // Account for brand name - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - - // COLLAPSIBLE NAVBAR - // ------------------ - // Nav collapse clears brand - .nav-collapse { - clear: both; - } - // Block-level the nav - .nav-collapse .nav { - float: none; - margin: 0 0 (@baseLineHeight / 2); - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: @navbarText; - text-shadow: none; - } - // Nav and dropdown links in navbar - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: @navbarLinkColor; - .border-radius(3px); - } - // Buttons - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - .border-radius(@baseBorderRadius); - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .nav > li > a:focus, - .nav-collapse .dropdown-menu a:hover, - .nav-collapse .dropdown-menu a:focus { - background-color: @navbarBackground; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: @navbarInverseLinkColor; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .nav > li > a:focus, - .navbar-inverse .nav-collapse .dropdown-menu a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:focus { - background-color: @navbarInverseBackground; - } - // Buttons in the navbar - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - // Dropdowns in the navbar - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - .border-radius(0); - .box-shadow(none); - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu { - &:before, - &:after { - display: none; - } - } - // Forms in navbar - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: (@baseLineHeight / 2) 15px; - margin: (@baseLineHeight / 2) 0; - border-top: 1px solid @navbarBackground; - border-bottom: 1px solid @navbarBackground; - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)"); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: @navbarInverseBackground; - border-bottom-color: @navbarInverseBackground; - } - // Pull right (secondary) nav content - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - // Hide everything in the navbar save .brand and toggle button */ - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - // Navbar button - .navbar .btn-navbar { - display: block; - } - - // STATIC NAVBAR - // ------------- - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } - - -} - - -// DEFAULT DESKTOP -// --------------- - -@media (min-width: @navbarCollapseDesktopWidth) { - - // Required to make the collapsing navbar work on regular desktops - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } - -} diff --git a/pykeg/web/static/bootstrap/less/responsive-utilities.less b/pykeg/web/static/bootstrap/less/responsive-utilities.less deleted file mode 100644 index bf43e8ef7..000000000 --- a/pykeg/web/static/bootstrap/less/responsive-utilities.less +++ /dev/null @@ -1,59 +0,0 @@ -// -// Responsive: Utility classes -// -------------------------------------------------- - - -// IE10 Metro responsive -// Required for Windows 8 Metro split-screen snapping with IE10 -// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ -@-ms-viewport{ - width: device-width; -} - -// Hide from screenreaders and browsers -// Credit: HTML5 Boilerplate -.hidden { - display: none; - visibility: hidden; -} - -// Visibility utilities - -// For desktops -.visible-phone { display: none !important; } -.visible-tablet { display: none !important; } -.hidden-phone { } -.hidden-tablet { } -.hidden-desktop { display: none !important; } -.visible-desktop { display: inherit !important; } - -// Tablets & small desktops only -@media (min-width: 768px) and (max-width: 979px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important ; } - // Show - .visible-tablet { display: inherit !important; } - // Hide - .hidden-tablet { display: none !important; } -} - -// Phones only -@media (max-width: 767px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important; } - // Show - .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior - // Hide - .hidden-phone { display: none !important; } -} - -// Print utilities -.visible-print { display: none !important; } -.hidden-print { } - -@media print { - .visible-print { display: inherit !important; } - .hidden-print { display: none !important; } -} diff --git a/pykeg/web/static/bootstrap/less/responsive.less b/pykeg/web/static/bootstrap/less/responsive.less deleted file mode 100644 index b8366defb..000000000 --- a/pykeg/web/static/bootstrap/less/responsive.less +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * Bootstrap Responsive v2.3.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - - -// Responsive.less -// For phone and tablet devices -// ------------------------------------------------------------- - - -// REPEAT VARIABLES & MIXINS -// ------------------------- -// Required since we compile the responsive stuff separately - -@import "variables.less"; // Modify this for custom colors, font-sizes, etc -@import "mixins.less"; - - -// RESPONSIVE CLASSES -// ------------------ - -@import "responsive-utilities.less"; - - -// MEDIA QUERIES -// ------------------ - -// Large desktops -@import "responsive-1200px-min.less"; - -// Tablets to regular desktops -@import "responsive-768px-979px.less"; - -// Phones to portrait tablets and narrow desktops -@import "responsive-767px-max.less"; - - -// RESPONSIVE NAVBAR -// ------------------ - -// From 979px and below, show a button to toggle navbar contents -@import "responsive-navbar.less"; diff --git a/pykeg/web/static/bootstrap/less/scaffolding.less b/pykeg/web/static/bootstrap/less/scaffolding.less deleted file mode 100644 index f17e8cadb..000000000 --- a/pykeg/web/static/bootstrap/less/scaffolding.less +++ /dev/null @@ -1,53 +0,0 @@ -// -// Scaffolding -// -------------------------------------------------- - - -// Body reset -// ------------------------- - -body { - margin: 0; - font-family: @baseFontFamily; - font-size: @baseFontSize; - line-height: @baseLineHeight; - color: @textColor; - background-color: @bodyBackground; -} - - -// Links -// ------------------------- - -a { - color: @linkColor; - text-decoration: none; -} -a:hover, -a:focus { - color: @linkColorHover; - text-decoration: underline; -} - - -// Images -// ------------------------- - -// Rounded corners -.img-rounded { - .border-radius(6px); -} - -// Add polaroid-esque trim -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); - .box-shadow(0 1px 3px rgba(0,0,0,.1)); -} - -// Perfect circle -.img-circle { - .border-radius(500px); // crank the border-radius so it works with most reasonably sized images -} diff --git a/pykeg/web/static/bootstrap/less/sprites.less b/pykeg/web/static/bootstrap/less/sprites.less deleted file mode 100644 index 1812bf71a..000000000 --- a/pykeg/web/static/bootstrap/less/sprites.less +++ /dev/null @@ -1,197 +0,0 @@ -// -// Sprites -// -------------------------------------------------- - - -// ICONS -// ----- - -// All icons receive the styles of the <i> tag with a base class -// of .i and are then given a unique class to add width, height, -// and background-position. Your resulting HTML will look like -// <i class="icon-inbox"></i>. - -// For the white version of the icons, just add the .icon-white class: -// <i class="icon-inbox icon-white"></i> - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - .ie7-restore-right-whitespace(); - line-height: 14px; - vertical-align: text-top; - background-image: url("@{iconSpritePath}"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("@{iconWhiteSpritePath}"); -} - -.icon-glass { background-position: 0 0; } -.icon-music { background-position: -24px 0; } -.icon-search { background-position: -48px 0; } -.icon-envelope { background-position: -72px 0; } -.icon-heart { background-position: -96px 0; } -.icon-star { background-position: -120px 0; } -.icon-star-empty { background-position: -144px 0; } -.icon-user { background-position: -168px 0; } -.icon-film { background-position: -192px 0; } -.icon-th-large { background-position: -216px 0; } -.icon-th { background-position: -240px 0; } -.icon-th-list { background-position: -264px 0; } -.icon-ok { background-position: -288px 0; } -.icon-remove { background-position: -312px 0; } -.icon-zoom-in { background-position: -336px 0; } -.icon-zoom-out { background-position: -360px 0; } -.icon-off { background-position: -384px 0; } -.icon-signal { background-position: -408px 0; } -.icon-cog { background-position: -432px 0; } -.icon-trash { background-position: -456px 0; } - -.icon-home { background-position: 0 -24px; } -.icon-file { background-position: -24px -24px; } -.icon-time { background-position: -48px -24px; } -.icon-road { background-position: -72px -24px; } -.icon-download-alt { background-position: -96px -24px; } -.icon-download { background-position: -120px -24px; } -.icon-upload { background-position: -144px -24px; } -.icon-inbox { background-position: -168px -24px; } -.icon-play-circle { background-position: -192px -24px; } -.icon-repeat { background-position: -216px -24px; } -.icon-refresh { background-position: -240px -24px; } -.icon-list-alt { background-position: -264px -24px; } -.icon-lock { background-position: -287px -24px; } // 1px off -.icon-flag { background-position: -312px -24px; } -.icon-headphones { background-position: -336px -24px; } -.icon-volume-off { background-position: -360px -24px; } -.icon-volume-down { background-position: -384px -24px; } -.icon-volume-up { background-position: -408px -24px; } -.icon-qrcode { background-position: -432px -24px; } -.icon-barcode { background-position: -456px -24px; } - -.icon-tag { background-position: 0 -48px; } -.icon-tags { background-position: -25px -48px; } // 1px off -.icon-book { background-position: -48px -48px; } -.icon-bookmark { background-position: -72px -48px; } -.icon-print { background-position: -96px -48px; } -.icon-camera { background-position: -120px -48px; } -.icon-font { background-position: -144px -48px; } -.icon-bold { background-position: -167px -48px; } // 1px off -.icon-italic { background-position: -192px -48px; } -.icon-text-height { background-position: -216px -48px; } -.icon-text-width { background-position: -240px -48px; } -.icon-align-left { background-position: -264px -48px; } -.icon-align-center { background-position: -288px -48px; } -.icon-align-right { background-position: -312px -48px; } -.icon-align-justify { background-position: -336px -48px; } -.icon-list { background-position: -360px -48px; } -.icon-indent-left { background-position: -384px -48px; } -.icon-indent-right { background-position: -408px -48px; } -.icon-facetime-video { background-position: -432px -48px; } -.icon-picture { background-position: -456px -48px; } - -.icon-pencil { background-position: 0 -72px; } -.icon-map-marker { background-position: -24px -72px; } -.icon-adjust { background-position: -48px -72px; } -.icon-tint { background-position: -72px -72px; } -.icon-edit { background-position: -96px -72px; } -.icon-share { background-position: -120px -72px; } -.icon-check { background-position: -144px -72px; } -.icon-move { background-position: -168px -72px; } -.icon-step-backward { background-position: -192px -72px; } -.icon-fast-backward { background-position: -216px -72px; } -.icon-backward { background-position: -240px -72px; } -.icon-play { background-position: -264px -72px; } -.icon-pause { background-position: -288px -72px; } -.icon-stop { background-position: -312px -72px; } -.icon-forward { background-position: -336px -72px; } -.icon-fast-forward { background-position: -360px -72px; } -.icon-step-forward { background-position: -384px -72px; } -.icon-eject { background-position: -408px -72px; } -.icon-chevron-left { background-position: -432px -72px; } -.icon-chevron-right { background-position: -456px -72px; } - -.icon-plus-sign { background-position: 0 -96px; } -.icon-minus-sign { background-position: -24px -96px; } -.icon-remove-sign { background-position: -48px -96px; } -.icon-ok-sign { background-position: -72px -96px; } -.icon-question-sign { background-position: -96px -96px; } -.icon-info-sign { background-position: -120px -96px; } -.icon-screenshot { background-position: -144px -96px; } -.icon-remove-circle { background-position: -168px -96px; } -.icon-ok-circle { background-position: -192px -96px; } -.icon-ban-circle { background-position: -216px -96px; } -.icon-arrow-left { background-position: -240px -96px; } -.icon-arrow-right { background-position: -264px -96px; } -.icon-arrow-up { background-position: -289px -96px; } // 1px off -.icon-arrow-down { background-position: -312px -96px; } -.icon-share-alt { background-position: -336px -96px; } -.icon-resize-full { background-position: -360px -96px; } -.icon-resize-small { background-position: -384px -96px; } -.icon-plus { background-position: -408px -96px; } -.icon-minus { background-position: -433px -96px; } -.icon-asterisk { background-position: -456px -96px; } - -.icon-exclamation-sign { background-position: 0 -120px; } -.icon-gift { background-position: -24px -120px; } -.icon-leaf { background-position: -48px -120px; } -.icon-fire { background-position: -72px -120px; } -.icon-eye-open { background-position: -96px -120px; } -.icon-eye-close { background-position: -120px -120px; } -.icon-warning-sign { background-position: -144px -120px; } -.icon-plane { background-position: -168px -120px; } -.icon-calendar { background-position: -192px -120px; } -.icon-random { background-position: -216px -120px; width: 16px; } -.icon-comment { background-position: -240px -120px; } -.icon-magnet { background-position: -264px -120px; } -.icon-chevron-up { background-position: -288px -120px; } -.icon-chevron-down { background-position: -313px -119px; } // 1px, 1px off -.icon-retweet { background-position: -336px -120px; } -.icon-shopping-cart { background-position: -360px -120px; } -.icon-folder-close { background-position: -384px -120px; width: 16px; } -.icon-folder-open { background-position: -408px -120px; width: 16px; } -.icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off -.icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off - -.icon-hdd { background-position: 0 -144px; } -.icon-bullhorn { background-position: -24px -144px; } -.icon-bell { background-position: -48px -144px; } -.icon-certificate { background-position: -72px -144px; } -.icon-thumbs-up { background-position: -96px -144px; } -.icon-thumbs-down { background-position: -120px -144px; } -.icon-hand-right { background-position: -144px -144px; } -.icon-hand-left { background-position: -168px -144px; } -.icon-hand-up { background-position: -192px -144px; } -.icon-hand-down { background-position: -216px -144px; } -.icon-circle-arrow-right { background-position: -240px -144px; } -.icon-circle-arrow-left { background-position: -264px -144px; } -.icon-circle-arrow-up { background-position: -288px -144px; } -.icon-circle-arrow-down { background-position: -312px -144px; } -.icon-globe { background-position: -336px -144px; } -.icon-wrench { background-position: -360px -144px; } -.icon-tasks { background-position: -384px -144px; } -.icon-filter { background-position: -408px -144px; } -.icon-briefcase { background-position: -432px -144px; } -.icon-fullscreen { background-position: -456px -144px; } diff --git a/pykeg/web/static/bootstrap/less/tables.less b/pykeg/web/static/bootstrap/less/tables.less deleted file mode 100644 index 0e35271e1..000000000 --- a/pykeg/web/static/bootstrap/less/tables.less +++ /dev/null @@ -1,244 +0,0 @@ -// -// Tables -// -------------------------------------------------- - - -// BASE TABLES -// ----------------- - -table { - max-width: 100%; - background-color: @tableBackground; - border-collapse: collapse; - border-spacing: 0; -} - -// BASELINE STYLES -// --------------- - -.table { - width: 100%; - margin-bottom: @baseLineHeight; - // Cells - th, - td { - padding: 8px; - line-height: @baseLineHeight; - text-align: left; - vertical-align: top; - border-top: 1px solid @tableBorder; - } - th { - font-weight: bold; - } - // Bottom align for column headings - thead th { - vertical-align: bottom; - } - // Remove top border from thead by default - caption + thead tr:first-child th, - caption + thead tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + thead tr:first-child td, - thead:first-child tr:first-child th, - thead:first-child tr:first-child td { - border-top: 0; - } - // Account for multiple tbody instances - tbody + tbody { - border-top: 2px solid @tableBorder; - } - - // Nesting - .table { - background-color: @bodyBackground; - } -} - - - -// CONDENSED TABLE W/ HALF PADDING -// ------------------------------- - -.table-condensed { - th, - td { - padding: 4px 5px; - } -} - - -// BORDERED VERSION -// ---------------- - -.table-bordered { - border: 1px solid @tableBorder; - border-collapse: separate; // Done so we can round those corners! - *border-collapse: collapse; // IE7 can't round corners anyway - border-left: 0; - .border-radius(@baseBorderRadius); - th, - td { - border-left: 1px solid @tableBorder; - } - // Prevent a double border - caption + thead tr:first-child th, - caption + tbody tr:first-child th, - caption + tbody tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + tbody tr:first-child th, - colgroup + tbody tr:first-child td, - thead:first-child tr:first-child th, - tbody:first-child tr:first-child th, - tbody:first-child tr:first-child td { - border-top: 0; - } - // For first th/td in the first row in the first thead or tbody - thead:first-child tr:first-child > th:first-child, - tbody:first-child tr:first-child > td:first-child, - tbody:first-child tr:first-child > th:first-child { - .border-top-left-radius(@baseBorderRadius); - } - // For last th/td in the first row in the first thead or tbody - thead:first-child tr:first-child > th:last-child, - tbody:first-child tr:first-child > td:last-child, - tbody:first-child tr:first-child > th:last-child { - .border-top-right-radius(@baseBorderRadius); - } - // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot - thead:last-child tr:last-child > th:first-child, - tbody:last-child tr:last-child > td:first-child, - tbody:last-child tr:last-child > th:first-child, - tfoot:last-child tr:last-child > td:first-child, - tfoot:last-child tr:last-child > th:first-child { - .border-bottom-left-radius(@baseBorderRadius); - } - // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot - thead:last-child tr:last-child > th:last-child, - tbody:last-child tr:last-child > td:last-child, - tbody:last-child tr:last-child > th:last-child, - tfoot:last-child tr:last-child > td:last-child, - tfoot:last-child tr:last-child > th:last-child { - .border-bottom-right-radius(@baseBorderRadius); - } - - // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot - tfoot + tbody:last-child tr:last-child td:first-child { - .border-bottom-left-radius(0); - } - tfoot + tbody:last-child tr:last-child td:last-child { - .border-bottom-right-radius(0); - } - - // Special fixes to round the left border on the first td/th - caption + thead tr:first-child th:first-child, - caption + tbody tr:first-child td:first-child, - colgroup + thead tr:first-child th:first-child, - colgroup + tbody tr:first-child td:first-child { - .border-top-left-radius(@baseBorderRadius); - } - caption + thead tr:first-child th:last-child, - caption + tbody tr:first-child td:last-child, - colgroup + thead tr:first-child th:last-child, - colgroup + tbody tr:first-child td:last-child { - .border-top-right-radius(@baseBorderRadius); - } - -} - - - - -// ZEBRA-STRIPING -// -------------- - -// Default zebra-stripe styles (alternating gray and transparent backgrounds) -.table-striped { - tbody { - > tr:nth-child(odd) > td, - > tr:nth-child(odd) > th { - background-color: @tableBackgroundAccent; - } - } -} - - -// HOVER EFFECT -// ------------ -// Placed here since it has to come after the potential zebra striping -.table-hover { - tbody { - tr:hover > td, - tr:hover > th { - background-color: @tableBackgroundHover; - } - } -} - - -// TABLE CELL SIZING -// ----------------- - -// Reset default grid behavior -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; // undo default grid column styles - margin-left: 0; // undo default grid column styles -} - -// Change the column widths to account for td/th padding -.table td, -.table th { - &.span1 { .tableColumns(1); } - &.span2 { .tableColumns(2); } - &.span3 { .tableColumns(3); } - &.span4 { .tableColumns(4); } - &.span5 { .tableColumns(5); } - &.span6 { .tableColumns(6); } - &.span7 { .tableColumns(7); } - &.span8 { .tableColumns(8); } - &.span9 { .tableColumns(9); } - &.span10 { .tableColumns(10); } - &.span11 { .tableColumns(11); } - &.span12 { .tableColumns(12); } -} - - - -// TABLE BACKGROUNDS -// ----------------- -// Exact selectors below required to override .table-striped - -.table tbody tr { - &.success > td { - background-color: @successBackground; - } - &.error > td { - background-color: @errorBackground; - } - &.warning > td { - background-color: @warningBackground; - } - &.info > td { - background-color: @infoBackground; - } -} - -// Hover states for .table-hover -.table-hover tbody tr { - &.success:hover > td { - background-color: darken(@successBackground, 5%); - } - &.error:hover > td { - background-color: darken(@errorBackground, 5%); - } - &.warning:hover > td { - background-color: darken(@warningBackground, 5%); - } - &.info:hover > td { - background-color: darken(@infoBackground, 5%); - } -} diff --git a/pykeg/web/static/bootstrap/less/thumbnails.less b/pykeg/web/static/bootstrap/less/thumbnails.less deleted file mode 100644 index 4fd07d253..000000000 --- a/pykeg/web/static/bootstrap/less/thumbnails.less +++ /dev/null @@ -1,53 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files - -// Make wrapper ul behave like the grid -.thumbnails { - margin-left: -@gridGutterWidth; - list-style: none; - .clearfix(); -} -// Fluid rows have no left margin -.row-fluid .thumbnails { - margin-left: 0; -} - -// Float li to make thumbnails appear in a row -.thumbnails > li { - float: left; // Explicity set the float since we don't require .span* classes - margin-bottom: @baseLineHeight; - margin-left: @gridGutterWidth; -} - -// The actual thumbnail (can be `a` or `div`) -.thumbnail { - display: block; - padding: 4px; - line-height: @baseLineHeight; - border: 1px solid #ddd; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 3px rgba(0,0,0,.055)); - .transition(all .2s ease-in-out); -} -// Add a hover/focus state for linked versions only -a.thumbnail:hover, -a.thumbnail:focus { - border-color: @linkColor; - .box-shadow(0 1px 4px rgba(0,105,214,.25)); -} - -// Images and captions -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: @gray; -} diff --git a/pykeg/web/static/bootstrap/less/tooltip.less b/pykeg/web/static/bootstrap/less/tooltip.less deleted file mode 100644 index 83d5f2bd7..000000000 --- a/pykeg/web/static/bootstrap/less/tooltip.less +++ /dev/null @@ -1,70 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: @zindexTooltip; - display: block; - visibility: visible; - font-size: 11px; - line-height: 1.4; - .opacity(0); - &.in { .opacity(80); } - &.top { margin-top: -3px; padding: 5px 0; } - &.right { margin-left: 3px; padding: 0 5px; } - &.bottom { margin-top: 3px; padding: 5px 0; } - &.left { margin-left: -3px; padding: 0 5px; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: @tooltipColor; - text-align: center; - text-decoration: none; - background-color: @tooltipBackground; - .border-radius(@baseBorderRadius); -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth 0; - border-top-color: @tooltipArrowColor; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0; - border-right-color: @tooltipArrowColor; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth; - border-left-color: @tooltipArrowColor; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: 0 @tooltipArrowWidth @tooltipArrowWidth; - border-bottom-color: @tooltipArrowColor; - } -} diff --git a/pykeg/web/static/bootstrap/less/type.less b/pykeg/web/static/bootstrap/less/type.less deleted file mode 100644 index 337138ac8..000000000 --- a/pykeg/web/static/bootstrap/less/type.less +++ /dev/null @@ -1,247 +0,0 @@ -// -// Typography -// -------------------------------------------------- - - -// Body text -// ------------------------- - -p { - margin: 0 0 @baseLineHeight / 2; -} -.lead { - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - font-weight: 200; - line-height: @baseLineHeight * 1.5; -} - - -// Emphasis & misc -// ------------------------- - -// Ex: 14px base font * 85% = about 12px -small { font-size: 85%; } - -strong { font-weight: bold; } -em { font-style: italic; } -cite { font-style: normal; } - -// Utility classes -.muted { color: @grayLight; } -a.muted:hover, -a.muted:focus { color: darken(@grayLight, 10%); } - -.text-warning { color: @warningText; } -a.text-warning:hover, -a.text-warning:focus { color: darken(@warningText, 10%); } - -.text-error { color: @errorText; } -a.text-error:hover, -a.text-error:focus { color: darken(@errorText, 10%); } - -.text-info { color: @infoText; } -a.text-info:hover, -a.text-info:focus { color: darken(@infoText, 10%); } - -.text-success { color: @successText; } -a.text-success:hover, -a.text-success:focus { color: darken(@successText, 10%); } - -.text-left { text-align: left; } -.text-right { text-align: right; } -.text-center { text-align: center; } - - -// Headings -// ------------------------- - -h1, h2, h3, h4, h5, h6 { - margin: (@baseLineHeight / 2) 0; - font-family: @headingsFontFamily; - font-weight: @headingsFontWeight; - line-height: @baseLineHeight; - color: @headingsColor; - text-rendering: optimizelegibility; // Fix the character spacing for headings - small { - font-weight: normal; - line-height: 1; - color: @grayLight; - } -} - -h1, -h2, -h3 { line-height: @baseLineHeight * 2; } - -h1 { font-size: @baseFontSize * 2.75; } // ~38px -h2 { font-size: @baseFontSize * 2.25; } // ~32px -h3 { font-size: @baseFontSize * 1.75; } // ~24px -h4 { font-size: @baseFontSize * 1.25; } // ~18px -h5 { font-size: @baseFontSize; } -h6 { font-size: @baseFontSize * 0.85; } // ~12px - -h1 small { font-size: @baseFontSize * 1.75; } // ~24px -h2 small { font-size: @baseFontSize * 1.25; } // ~18px -h3 small { font-size: @baseFontSize; } -h4 small { font-size: @baseFontSize; } - - -// Page header -// ------------------------- - -.page-header { - padding-bottom: (@baseLineHeight / 2) - 1; - margin: @baseLineHeight 0 (@baseLineHeight * 1.5); - border-bottom: 1px solid @grayLighter; -} - - - -// Lists -// -------------------------------------------------- - -// Unordered and Ordered lists -ul, ol { - padding: 0; - margin: 0 0 @baseLineHeight / 2 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: @baseLineHeight; -} - -// Remove default list styles -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -// Single-line list items -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; - > li { - display: inline-block; - .ie7-inline-block(); - padding-left: 5px; - padding-right: 5px; - } -} - -// Description Lists -dl { - margin-bottom: @baseLineHeight; -} -dt, -dd { - line-height: @baseLineHeight; -} -dt { - font-weight: bold; -} -dd { - margin-left: @baseLineHeight / 2; -} -// Horizontal layout (like forms) -.dl-horizontal { - .clearfix(); // Ensure dl clears floats if empty dd elements present - dt { - float: left; - width: @horizontalComponentOffset - 20; - clear: left; - text-align: right; - .text-overflow(); - } - dd { - margin-left: @horizontalComponentOffset; - } -} - -// MISC -// ---- - -// Horizontal rules -hr { - margin: @baseLineHeight 0; - border: 0; - border-top: 1px solid @hrBorder; - border-bottom: 1px solid @white; -} - -// Abbreviations and acronyms -abbr[title], -// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257 -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted @grayLight; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -// Blockquotes -blockquote { - padding: 0 0 0 15px; - margin: 0 0 @baseLineHeight; - border-left: 5px solid @grayLighter; - p { - margin-bottom: 0; - font-size: @baseFontSize * 1.25; - font-weight: 300; - line-height: 1.25; - } - small { - display: block; - line-height: @baseLineHeight; - color: @grayLight; - &:before { - content: '\2014 \00A0'; - } - } - - // Float right with text-align: right - &.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid @grayLighter; - border-left: 0; - p, - small { - text-align: right; - } - small { - &:before { - content: ''; - } - &:after { - content: '\00A0 \2014'; - } - } - } -} - -// Quotes -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -// Addresses -address { - display: block; - margin-bottom: @baseLineHeight; - font-style: normal; - line-height: @baseLineHeight; -} diff --git a/pykeg/web/static/bootstrap/less/utilities.less b/pykeg/web/static/bootstrap/less/utilities.less deleted file mode 100644 index 314b4ffdb..000000000 --- a/pykeg/web/static/bootstrap/less/utilities.less +++ /dev/null @@ -1,30 +0,0 @@ -// -// Utility classes -// -------------------------------------------------- - - -// Quick floats -.pull-right { - float: right; -} -.pull-left { - float: left; -} - -// Toggling content -.hide { - display: none; -} -.show { - display: block; -} - -// Visibility -.invisible { - visibility: hidden; -} - -// For Affix plugin -.affix { - position: fixed; -} diff --git a/pykeg/web/static/bootstrap/less/variables.less b/pykeg/web/static/bootstrap/less/variables.less deleted file mode 100644 index 31c131b1e..000000000 --- a/pykeg/web/static/bootstrap/less/variables.less +++ /dev/null @@ -1,301 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -// Global values -// -------------------------------------------------- - - -// Grays -// ------------------------- -@black: #000; -@grayDarker: #222; -@grayDark: #333; -@gray: #555; -@grayLight: #999; -@grayLighter: #eee; -@white: #fff; - - -// Accent colors -// ------------------------- -@blue: #049cdb; -@blueDark: #0064cd; -@green: #46a546; -@red: #9d261d; -@yellow: #ffc40d; -@orange: #f89406; -@pink: #c3325f; -@purple: #7a43b6; - - -// Scaffolding -// ------------------------- -@bodyBackground: @white; -@textColor: @grayDark; - - -// Links -// ------------------------- -@linkColor: #08c; -@linkColorHover: darken(@linkColor, 15%); - - -// Typography -// ------------------------- -@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; -@serifFontFamily: Georgia, "Times New Roman", Times, serif; -@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; - -@baseFontSize: 14px; -@baseFontFamily: @sansFontFamily; -@baseLineHeight: 20px; -@altFontFamily: @serifFontFamily; - -@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily -@headingsFontWeight: bold; // instead of browser default, bold -@headingsColor: inherit; // empty to use BS default, @textColor - - -// Component sizing -// ------------------------- -// Based on 14px font-size and 20px line-height - -@fontSizeLarge: @baseFontSize * 1.25; // ~18px -@fontSizeSmall: @baseFontSize * 0.85; // ~12px -@fontSizeMini: @baseFontSize * 0.75; // ~11px - -@paddingLarge: 11px 19px; // 44px -@paddingSmall: 2px 10px; // 26px -@paddingMini: 0 6px; // 22px - -@baseBorderRadius: 4px; -@borderRadiusLarge: 6px; -@borderRadiusSmall: 3px; - - -// Tables -// ------------------------- -@tableBackground: transparent; // overall background-color -@tableBackgroundAccent: #f9f9f9; // for striping -@tableBackgroundHover: #f5f5f5; // for hover -@tableBorder: #ddd; // table and cell border - -// Buttons -// ------------------------- -@btnBackground: @white; -@btnBackgroundHighlight: darken(@white, 10%); -@btnBorder: #ccc; - -@btnPrimaryBackground: @linkColor; -@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); - -@btnInfoBackground: #5bc0de; -@btnInfoBackgroundHighlight: #2f96b4; - -@btnSuccessBackground: #62c462; -@btnSuccessBackgroundHighlight: #51a351; - -@btnWarningBackground: lighten(@orange, 15%); -@btnWarningBackgroundHighlight: @orange; - -@btnDangerBackground: #ee5f5b; -@btnDangerBackgroundHighlight: #bd362f; - -@btnInverseBackground: #444; -@btnInverseBackgroundHighlight: @grayDarker; - - -// Forms -// ------------------------- -@inputBackground: @white; -@inputBorder: #ccc; -@inputBorderRadius: @baseBorderRadius; -@inputDisabledBackground: @grayLighter; -@formActionsBackground: #f5f5f5; -@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border - - -// Dropdowns -// ------------------------- -@dropdownBackground: @white; -@dropdownBorder: rgba(0,0,0,.2); -@dropdownDividerTop: #e5e5e5; -@dropdownDividerBottom: @white; - -@dropdownLinkColor: @grayDark; -@dropdownLinkColorHover: @white; -@dropdownLinkColorActive: @white; - -@dropdownLinkBackgroundActive: @linkColor; -@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; - - - -// COMPONENT VARIABLES -// -------------------------------------------------- - - -// Z-index master list -// ------------------------- -// Used for a bird's eye view of components dependent on the z-axis -// Try to avoid customizing these :) -@zindexDropdown: 1000; -@zindexPopover: 1010; -@zindexTooltip: 1030; -@zindexFixedNavbar: 1030; -@zindexModalBackdrop: 1040; -@zindexModal: 1050; - - -// Sprite icons path -// ------------------------- -@iconSpritePath: "../img/glyphicons-halflings.png"; -@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; - - -// Input placeholder text color -// ------------------------- -@placeholderText: @grayLight; - - -// Hr border color -// ------------------------- -@hrBorder: @grayLighter; - - -// Horizontal forms & lists -// ------------------------- -@horizontalComponentOffset: 180px; - - -// Wells -// ------------------------- -@wellBackground: #f5f5f5; - - -// Navbar -// ------------------------- -@navbarCollapseWidth: 979px; -@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; - -@navbarHeight: 40px; -@navbarBackgroundHighlight: #ffffff; -@navbarBackground: darken(@navbarBackgroundHighlight, 5%); -@navbarBorder: darken(@navbarBackground, 12%); - -@navbarText: #777; -@navbarLinkColor: #777; -@navbarLinkColorHover: @grayDark; -@navbarLinkColorActive: @gray; -@navbarLinkBackgroundHover: transparent; -@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); - -@navbarBrandColor: @navbarLinkColor; - -// Inverted navbar -@navbarInverseBackground: #111111; -@navbarInverseBackgroundHighlight: #222222; -@navbarInverseBorder: #252525; - -@navbarInverseText: @grayLight; -@navbarInverseLinkColor: @grayLight; -@navbarInverseLinkColorHover: @white; -@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; -@navbarInverseLinkBackgroundHover: transparent; -@navbarInverseLinkBackgroundActive: @navbarInverseBackground; - -@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); -@navbarInverseSearchBackgroundFocus: @white; -@navbarInverseSearchBorder: @navbarInverseBackground; -@navbarInverseSearchPlaceholderColor: #ccc; - -@navbarInverseBrandColor: @navbarInverseLinkColor; - - -// Pagination -// ------------------------- -@paginationBackground: #fff; -@paginationBorder: #ddd; -@paginationActiveBackground: #f5f5f5; - - -// Hero unit -// ------------------------- -@heroUnitBackground: @grayLighter; -@heroUnitHeadingColor: inherit; -@heroUnitLeadColor: inherit; - - -// Form states and alerts -// ------------------------- -@warningText: #c09853; -@warningBackground: #fcf8e3; -@warningBorder: darken(spin(@warningBackground, -10), 3%); - -@errorText: #b94a48; -@errorBackground: #f2dede; -@errorBorder: darken(spin(@errorBackground, -10), 3%); - -@successText: #468847; -@successBackground: #dff0d8; -@successBorder: darken(spin(@successBackground, -10), 5%); - -@infoText: #3a87ad; -@infoBackground: #d9edf7; -@infoBorder: darken(spin(@infoBackground, -10), 7%); - - -// Tooltips and popovers -// ------------------------- -@tooltipColor: #fff; -@tooltipBackground: #000; -@tooltipArrowWidth: 5px; -@tooltipArrowColor: @tooltipBackground; - -@popoverBackground: #fff; -@popoverArrowWidth: 10px; -@popoverArrowColor: #fff; -@popoverTitleBackground: darken(@popoverBackground, 3%); - -// Special enhancement for popovers -@popoverArrowOuterWidth: @popoverArrowWidth + 1; -@popoverArrowOuterColor: rgba(0,0,0,.25); - - - -// GRID -// -------------------------------------------------- - - -// Default 940px grid -// ------------------------- -@gridColumns: 12; -@gridColumnWidth: 60px; -@gridGutterWidth: 20px; -@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); - -// 1200px min -@gridColumnWidth1200: 70px; -@gridGutterWidth1200: 30px; -@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); - -// 768px-979px -@gridColumnWidth768: 42px; -@gridGutterWidth768: 20px; -@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); - - -// Fluid grid -// ------------------------- -@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); -@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); - -// 1200px min -@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); -@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); - -// 768px-979px -@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); -@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); diff --git a/pykeg/web/static/bootstrap/less/wells.less b/pykeg/web/static/bootstrap/less/wells.less deleted file mode 100644 index 84a744b1c..000000000 --- a/pykeg/web/static/bootstrap/less/wells.less +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: @wellBackground; - border: 1px solid darken(@wellBackground, 7%); - .border-radius(@baseBorderRadius); - .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-large { - padding: 24px; - .border-radius(@borderRadiusLarge); -} -.well-small { - padding: 9px; - .border-radius(@borderRadiusSmall); -} diff --git a/pykeg/web/static/css/bootstrap-cyborg.css b/pykeg/web/static/css/bootstrap-cyborg.css deleted file mode 100644 index 04e8686c2..000000000 --- a/pykeg/web/static/css/bootstrap-cyborg.css +++ /dev/null @@ -1,9 +0,0 @@ -@import url('//fonts.googleapis.com/css?family=Droid+Sans:400,700');/*! - * Bootstrap v2.3.2 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:'Droid Sans',sans-serif;font-size:14px;line-height:20px;color:#999;background-color:#060606}a{color:#33b5e5;text-decoration:none}a:hover,a:focus{color:#fff;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#adafae}a.muted:hover,a.muted:focus{color:#939695}.text-warning{color:#a47e3c}a.text-warning:hover,a.text-warning:focus{color:#7f612e}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#09c}a.text-info:hover,a.text-info:focus{color:#007399}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:normal;line-height:20px;color:#fff;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#adafae}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #222;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #adafae}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#adafae}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#222;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#222;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#adafae}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:'Droid Sans',sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#999;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ccc;border:1px solid #bbb;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#ccc;border:1px solid #bbb}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#adafae;cursor:not-allowed;background-color:#c9c9c9;border-color:#bbb;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#adafae}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#adafae}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#adafae}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#555}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#a47e3c}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#a47e3c}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#7f612e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#a47e3c;background-color:#eee;border-color:#a47e3c}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#eee;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#eee;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#09c}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#09c}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#09c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#007399;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#09c;background-color:#eee;border-color:#09c}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#bfbfbf}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#bf3;border-color:#690}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #222}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #222}.table .table{background-color:#060606}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #222;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #222}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:rgba(100,100,100,0.1)}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#222}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#eee}.table tbody tr.error>td{background-color:#eee}.table tbody tr.warning>td{background-color:#eee}.table tbody tr.info>td{background-color:#eee}.table-hover tbody tr.success:hover>td{background-color:#e1e1e1}.table-hover tbody tr.error:hover>td{background-color:#e1e1e1}.table-hover tbody tr.warning:hover>td{background-color:#e1e1e1}.table-hover tbody tr.info:hover>td{background-color:#e1e1e1}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../bootstrap/img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../bootstrap/img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#131517;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #222}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#999;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#adafae}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#000;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#131517;border:1px solid #030303;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#222;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#616161;*background-color:#595959;background-image:-moz-linear-gradient(top,#666,#595959);background-image:-webkit-gradient(linear,0 0,0 100%,from(#666),to(#595959));background-image:-webkit-linear-gradient(top,#666,#595959);background-image:-o-linear-gradient(top,#666,#595959);background-image:linear-gradient(to bottom,#666,#595959);background-repeat:repeat-x;border:1px solid rgba(0,0,0,0);*border:0;border-color:#595959 #595959 #333;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:rgba(0,0,0,0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff666666',endColorstr='#ff595959',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#222;background-color:#595959;*background-color:#4d4d4d}.btn:active,.btn.active{background-color:#404040 \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#222;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#008ab8;*background-color:#007399;background-image:-moz-linear-gradient(top,#09c,#007399);background-image:-webkit-gradient(linear,0 0,0 100%,from(#09c),to(#007399));background-image:-webkit-linear-gradient(top,#09c,#007399);background-image:-o-linear-gradient(top,#09c,#007399);background-image:linear-gradient(to bottom,#09c,#007399);background-repeat:repeat-x;border-color:#007399 #007399 #00394d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0099cc',endColorstr='#ff007399',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#007399;*background-color:#006080}.btn-primary:active,.btn-primary.active{background-color:#004d66 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ff9d2e;*background-color:#f80;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;border-color:#f80 #f80 #b35f00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f80;*background-color:#e67a00}.btn-warning:active,.btn-warning.active{background-color:#cc6d00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#eb0000;*background-color:#c00;background-image:-moz-linear-gradient(top,#f00,#c00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f00),to(#c00));background-image:-webkit-linear-gradient(top,#f00,#c00);background-image:-o-linear-gradient(top,#f00,#c00);background-image:linear-gradient(to bottom,#f00,#c00);background-repeat:repeat-x;border-color:#c00 #c00 #800000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0000',endColorstr='#ffcc0000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#c00;*background-color:#b30000}.btn-danger:active,.btn-danger.active{background-color:#900 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#7ab800;*background-color:#690;background-image:-moz-linear-gradient(top,#8c0,#690);background-image:-webkit-gradient(linear,0 0,0 100%,from(#8c0),to(#690));background-image:-webkit-linear-gradient(top,#8c0,#690);background-image:-o-linear-gradient(top,#8c0,#690);background-image:linear-gradient(to bottom,#8c0,#690);background-repeat:repeat-x;border-color:#690 #690 #334d00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff88cc00',endColorstr='#ff669900',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#690;*background-color:#558000}.btn-success:active,.btn-success.active{background-color:#460 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#292929;*background-color:#191919;background-image:-moz-linear-gradient(top,#333,#191919);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#191919));background-image:-webkit-linear-gradient(top,#333,#191919);background-image:-o-linear-gradient(top,#333,#191919);background-image:linear-gradient(to bottom,#333,#191919);background-repeat:repeat-x;border-color:#191919 #191919 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff333333',endColorstr='#ff191919',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#191919;*background-color:#0d0d0d}.btn-info:active,.btn-info.active{background-color:#000 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9f3fcf;*background-color:#93c;background-image:-moz-linear-gradient(top,#a347d1,#93c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#93c));background-image:-webkit-linear-gradient(top,#a347d1,#93c);background-image:-o-linear-gradient(top,#a347d1,#93c);background-image:linear-gradient(to bottom,#a347d1,#93c);background-repeat:repeat-x;border-color:#93c #93c #6b248f;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff9933cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#93c;*background-color:#8a2eb8}.btn-inverse:active,.btn-inverse.active{background-color:#7a29a3 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#33b5e5;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#fff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#222;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#595959}.btn-group.open .btn-primary.dropdown-toggle{background-color:#007399}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f80}.btn-group.open .btn-danger.dropdown-toggle{background-color:#c00}.btn-group.open .btn-success.dropdown-toggle{background-color:#690}.btn-group.open .btn-info.dropdown-toggle{background-color:#191919}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#93c}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#eee;border:1px solid transparent;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#a47e3c}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#eee;border-color:#e1e1e1}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#eee;border-color:#e6e6e6}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#09c;background-color:#eee;border-color:#dcdcdc}.alert-info h4{color:#09c}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#adafae;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#33b5e5}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#999;cursor:default;background-color:#060606;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#33b5e5}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#33b5e5;border-bottom-color:#33b5e5}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#adafae;border-color:#adafae}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#adafae}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#adafae}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:50px;padding-right:20px;padding-left:20px;background-color:#020202;background-image:-moz-linear-gradient(top,#020202,#020202);background-image:-webkit-gradient(linear,0 0,0 100%,from(#020202),to(#020202));background-image:-webkit-linear-gradient(top,#020202,#020202);background-image:-o-linear-gradient(top,#020202,#020202);background-image:linear-gradient(to bottom,#020202,#020202);background-repeat:repeat-x;border:1px solid #000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202',endColorstr='#ff020202',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#adafae;text-shadow:0 1px 0 #020202}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#adafae}.navbar-link{color:#adafae}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-right:1px solid #020202;border-left:1px solid #020202}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:'Droid Sans',sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#adafae;text-decoration:none;text-shadow:0 1px 0 #020202}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#020202;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#000;*background-color:#000;background-image:-moz-linear-gradient(top,#000,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#000),to(#000));background-image:-webkit-linear-gradient(top,#000,#000);background-image:-o-linear-gradient(top,#000,#000);background-image:linear-gradient(to bottom,#000,#000);background-repeat:repeat-x;border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff000000',endColorstr='#ff000000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#000;*background-color:#000}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #131517;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #131517;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#020202}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#252a30;background-image:-moz-linear-gradient(top,#252a30,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#252a30),to(#252a30));background-image:-webkit-linear-gradient(top,#252a30,#252a30);background-image:-o-linear-gradient(top,#252a30,#252a30);background-image:linear-gradient(to bottom,#252a30,#252a30);background-repeat:repeat-x;border-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff252a30',endColorstr='#ff252a30',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#adafae;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#adafae}.navbar-inverse .navbar-text{color:#adafae}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:#242a31}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#242a31}.navbar-inverse .navbar-link{color:#adafae}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#252a30;border-left-color:#252a30}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#242a31}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#5d6978;border-color:#252a30;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#222;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1a1d22;*background-color:#1a1d22;background-image:-moz-linear-gradient(top,#1a1d22,#1a1d22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1a1d22),to(#1a1d22));background-image:-webkit-linear-gradient(top,#1a1d22,#1a1d22);background-image:-o-linear-gradient(top,#1a1d22,#1a1d22);background-image:linear-gradient(to bottom,#1a1d22,#1a1d22);background-repeat:repeat-x;border-color:#1a1d22 #1a1d22 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1d22',endColorstr='#ff1a1d22',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#1a1d22;*background-color:#0f1113}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#040405 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#adafae}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#060606;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#33b5e5}.pagination ul>.active>a,.pagination ul>.active>span{color:#adafae;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#adafae;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#adafae;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#131517;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#131517;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#131517;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#131517;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#131517;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#131517;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#131517;border-bottom:1px solid #070809;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#131517;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#131517;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#131517;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#131517;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#33b5e5;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#999}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#adafae}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f80}.label-warning[href],.badge-warning[href]{background-color:#cc6d00}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#09c}.label-info[href],.badge-info[href]{background-color:#007399}.label-inverse,.badge-inverse{background-color:#222}.label-inverse[href],.badge-inverse[href]{background-color:#080808}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9d2e;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffac4d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#020202;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#222;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#131517;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}label,input,button,select,textarea,.navbar .search-query:-moz-placeholder,.navbar .search-query::-webkit-input-placeholder{font-family:'Droid Sans',sans-serif;color:#999}code,pre{background-color:#eee}blockquote{border-left:5px solid #222}blockquote.pull-right{border-right:5px solid #222}html{min-height:100%}body{min-height:100%;background-color:#121417;background-image:-moz-linear-gradient(top,#060606,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#060606),to(#252a30));background-image:-webkit-linear-gradient(top,#060606,#252a30);background-image:-o-linear-gradient(top,#060606,#252a30);background-image:linear-gradient(to bottom,#060606,#252a30);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff060606',endColorstr='#ff252a30',GradientType=0)}.page-header{border-bottom:1px solid #222}hr{border-bottom:0}.navbar .navbar-inner{border-bottom:1px solid #222;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:15px 20px 15px;font-weight:normal;color:#eee;text-shadow:none}.navbar .nav>li>a{padding:15px 15px 14px;border-bottom:1px solid transparent}.navbar .nav>li>a:hover,.navbar .nav>.active>a,.navbar .nav>.active>a:hover{border-bottom:1px solid #33b5e5}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-text{padding:15px 15px 14px;margin-bottom:1px;line-height:inherit}.navbar .divider-vertical{margin:0;border-left:1px solid #222;border-right-width:0}.navbar .search-query,.navbar .search-query:focus,.navbar .search-query.focused{line-height:normal;color:#adafae;text-shadow:none;background-color:#222;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.navbar .search-query:-moz-placeholder,.navbar .search-query:focus:-moz-placeholder,.navbar .search-query.focused:-moz-placeholder{color:#999}.navbar .search-query:-ms-input-placeholder,.navbar .search-query:focus:-ms-input-placeholder,.navbar .search-query.focused:-ms-input-placeholder{color:#999}.navbar .search-query::-webkit-input-placeholder,.navbar .search-query:focus::-webkit-input-placeholder,.navbar .search-query.focused::-webkit-input-placeholder{color:#999}@media(max-width:979px){.navbar .nav-collapse .nav li>a{font-weight:normal;color:#eee;text-shadow:none;border:0}.navbar .nav-collapse .nav li>a:hover{background-color:#33b5e5;border:0}.navbar .nav-collapse .nav .active>a{background-color:#33b5e5;border:0}.navbar .nav-collapse .dropdown-menu a:hover{background-color:#33b5e5}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-top:0;border-bottom:0}.navbar .nav-collapse .nav-header{color:rgba(128,128,128,0.6)}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#111}.navbar-inverse .nav-collapse .nav .active>a{background-color:#111}.navbar-inverse .nav-collapse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111}}div.subnav{margin:0 1px;background-color:#020202;background-image:none;border:0;border-bottom:1px solid #222}div.subnav .nav>li>a,div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;color:#adafae;background-color:#020202;border:0}div.subnav .nav>li>a:hover,div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;color:#fff;background:transparent;border:0;border-bottom:1px solid #33b5e5}div.subnav .nav li.nav-header{text-shadow:none}div.subnav-fixed{top:50px;margin:0}.nav-tabs{border-bottom:1px solid #222}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{color:#fff;background-color:#33b5e5;border-color:transparent}.nav-tabs li.disabled>a{color:#999}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.nav-pills li>a:hover{color:#fff;background-color:#33b5e5}.nav-pills li.disabled>a{color:#999}.nav-pills .open .dropdown-toggle{background-color:#060606}.nav-pills .dropdown-menu li>a:hover{border:0}.nav-list li>a{text-shadow:none}.nav-list li>a:hover{color:#fff;background-color:#33b5e5}.nav-list .nav-header{text-shadow:none}.nav-list .divider{background-color:transparent;border-bottom:1px solid #222}.nav-stacked li>a{border:1px solid #222!important}.nav-stacked li>a:hover,.nav-stacked li.active>a{color:#fff;background-color:#33b5e5}.tabbable .nav-tabs,.tabbable .nav-tabs li.active>a{border-color:#222}.breadcrumb{font-size:14px;background-color:transparent;background-image:none;border-width:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.breadcrumb li{text-shadow:none}.breadcrumb li>a{color:#33b5e5;text-shadow:none}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{background-color:rgba(0,0,0,0.2)}.pager li>a,.pager li>span{background-color:#060606;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#33b5e5}.pager .disabled a,.pager .disabled a:hover{background-color:#060606}.btn{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);text-shadow:none;background-color:#5c5c5c;*background-color:#4d4d4d;background-image:-moz-linear-gradient(top,#666,#4d4d4d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#666),to(#4d4d4d));background-image:-webkit-linear-gradient(top,#666,#4d4d4d);background-image:-o-linear-gradient(top,#666,#4d4d4d);background-image:linear-gradient(to bottom,#666,#4d4d4d);background-repeat:repeat-x;border-color:#4d4d4d #4d4d4d #262626;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff666666',endColorstr='#ff4d4d4d',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:1px 1px 2px #111;-moz-box-shadow:1px 1px 2px #111;box-shadow:1px 1px 2px #111}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#fff;background-color:#4d4d4d;*background-color:#404040}.btn:active,.btn.active{background-color:#333 \9}.btn:hover{color:#fff;text-shadow:none}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#008ab8;*background-color:#007399;background-image:-moz-linear-gradient(top,#09c,#007399);background-image:-webkit-gradient(linear,0 0,0 100%,from(#09c),to(#007399));background-image:-webkit-linear-gradient(top,#09c,#007399);background-image:-o-linear-gradient(top,#09c,#007399);background-image:linear-gradient(to bottom,#09c,#007399);background-repeat:repeat-x;border-color:#007399 #007399 #00394d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0099cc',endColorstr='#ff007399',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#007399;*background-color:#006080}.btn-primary:active,.btn-primary.active{background-color:#004d66 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ff961f;*background-color:#f80;background-image:-moz-linear-gradient(top,#ffa033,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffa033),to(#f80));background-image:-webkit-linear-gradient(top,#ffa033,#f80);background-image:-o-linear-gradient(top,#ffa033,#f80);background-image:linear-gradient(to bottom,#ffa033,#f80);background-repeat:repeat-x;border-color:#f80 #f80 #b35f00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffa033',endColorstr='#ffff8800',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f80;*background-color:#e67a00}.btn-warning:active,.btn-warning.active{background-color:#cc6d00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#eb0000;*background-color:#c00;background-image:-moz-linear-gradient(top,#f00,#c00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f00),to(#c00));background-image:-webkit-linear-gradient(top,#f00,#c00);background-image:-o-linear-gradient(top,#f00,#c00);background-image:linear-gradient(to bottom,#f00,#c00);background-repeat:repeat-x;border-color:#c00 #c00 #800000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0000',endColorstr='#ffcc0000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#c00;*background-color:#b30000}.btn-danger:active,.btn-danger.active{background-color:#900 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#7ab800;*background-color:#690;background-image:-moz-linear-gradient(top,#8c0,#690);background-image:-webkit-gradient(linear,0 0,0 100%,from(#8c0),to(#690));background-image:-webkit-linear-gradient(top,#8c0,#690);background-image:-o-linear-gradient(top,#8c0,#690);background-image:linear-gradient(to bottom,#8c0,#690);background-repeat:repeat-x;border-color:#690 #690 #334d00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff88cc00',endColorstr='#ff669900',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#690;*background-color:#558000}.btn-success:active,.btn-success.active{background-color:#460 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#292929;*background-color:#191919;background-image:-moz-linear-gradient(top,#333,#191919);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#191919));background-image:-webkit-linear-gradient(top,#333,#191919);background-image:-o-linear-gradient(top,#333,#191919);background-image:linear-gradient(to bottom,#333,#191919);background-repeat:repeat-x;border-color:#191919 #191919 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff333333',endColorstr='#ff191919',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#191919;*background-color:#0d0d0d}.btn-info:active,.btn-info.active{background-color:#000 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9f3fcf;*background-color:#93c;background-image:-moz-linear-gradient(top,#a347d1,#93c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#93c));background-image:-webkit-linear-gradient(top,#a347d1,#93c);background-image:-o-linear-gradient(top,#a347d1,#93c);background-image:linear-gradient(to bottom,#a347d1,#93c);background-repeat:repeat-x;border-color:#93c #93c #6b248f;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff9933cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#93c;*background-color:#8a2eb8}.btn-inverse:active,.btn-inverse.active{background-color:#7a29a3 \9}.btn .caret{border-top:4px solid black;opacity:.3}.btn-group>.dropdown-menu>li>a:hover{border-bottom:0}.btn.disabled,.btn[disabled]{background-color:#adafae}input,textarea,select{border-width:2px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{color:#222}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly],.uneditable-input{border-color:#444}input:focus,textarea:focus,input.focused,textarea.focused{border-color:#52a8ec;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}legend,label{color:#999;border-bottom:0 solid #222}.form-actions{border-top:1px solid #222}.table{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.table tbody tr.success td{color:#fff;background-color:#690}.table tbody tr.error td{color:#fff;background-color:#c00}.table tbody tr.info td{color:#fff;background-color:#33b5e5}.table tbody tr.warning td{color:#fff;background-color:#f80}.dropdown-menu{-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.alert,.alert .alert-heading,.alert-success,.alert-success .alert-heading,.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading,.alert-info,.alert-info .alert-heading{color:#eee;text-shadow:none;border:0}.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:#eee}.label{color:#eee}.label,.alert{background-color:#666}.label:hover{background-color:#4d4d4d}.label-important,.alert-danger,.alert-error{background-color:#c00}.label-important:hover{background-color:#900}.label-warning,.alert-warning{background-color:#cc6d00}.label-warning:hover{background-color:#995200}.label-success,.alert-success{background-color:#5c8a00}.label-success:hover{background-color:#3a5700}.label-info,.alert-info{background-color:#007399}.label-info:hover{background-color:#004d66}.badge-inverse,.label-inverse,.alert-inverse{background-color:#7a29a3}.label-inverse:hover{background-color:#5c1f7a}.well,.hero-unit{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.well,.hero-unit{border-top:solid 1px #2f2f2f;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.thumbnail{border-color:#222}.progress{background-color:#060606;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{background-color:#222;border-top:solid 1px #2f2f2f;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.modal-header{border-bottom:1px solid #222}.modal-footer{background-color:#222;border-top:1px solid #222;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.footer{border-top:1px solid #222}@media(max-width:768px){div.subnav .nav>li+li>a,div.subnav .nav>li:first-child>a{border-top:1px solid #222;border-left:1px solid #222}.subnav .nav>li+li>a:hover,.subnav .nav>li:first-child>a:hover{background-color:#33b5e5;border-bottom:0}}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/pykeg/web/static/css/bootstrap-variables.less b/pykeg/web/static/css/bootstrap-variables.less deleted file mode 100644 index 4e14c65ce..000000000 --- a/pykeg/web/static/css/bootstrap-variables.less +++ /dev/null @@ -1,98 +0,0 @@ -/** - * bootstrap-variables.less - * Copy of bootstrap/lib/variables.less, for kegweb specific modifications. - */ - -// GLOBAL VALUES -// -------------------------------------------------- - -// Links -@linkColor: #08c; -@linkColorHover: darken(@linkColor, 15%); - -// Grays -@black: #000; -@grayDarker: #222; -@grayDark: #333; -@gray: #555; -@grayLight: #999; -@grayLighter: #eee; -@white: #fff; - -// Accent colors -@blue: #049cdb; -@blueDark: #0064cd; -@green: #46a546; -@red: #9d261d; -@yellow: #ffc40d; -@orange: #f89406; -@pink: #c3325f; -@purple: #7a43b6; - -// Typography -@baseFontSize: 13px; -@baseFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; -@baseLineHeight: 18px; -@textColor: @grayDark; - -// Buttons -@primaryButtonBackground: @linkColor; - - - -// COMPONENT VARIABLES -// -------------------------------------------------- - -// Z-index master list -// Used for a bird's eye view of components dependent on the z-axis -// Try to avoid customizing these :) -@zindexDropdown: 1000; -@zindexPopover: 1010; -@zindexTooltip: 1020; -@zindexFixedNavbar: 1030; -@zindexModalBackdrop: 1040; -@zindexModal: 1050; - -// Input placeholder text color -@placeholderText: @grayLight; - -// Navbar -@navbarHeight: 40px; -@navbarBackground: @grayDarker; -@navbarBackgroundHighlight: @grayDark; - -@navbarText: @grayLight; -@navbarLinkColor: @grayLight; -@navbarLinkColorHover: @white; - -// Form states and alerts -@warningText: #c09853; -@warningBackground: #fcf8e3; -@warningBorder: darken(spin(@warningBackground, -10), 3%); - -@errorText: #b94a48; -@errorBackground: #f2dede; -@errorBorder: darken(spin(@errorBackground, -10), 3%); - -@successText: #468847; -@successBackground: #dff0d8; -@successBorder: darken(spin(@successBackground, -10), 5%); - -@infoText: #3a87ad; -@infoBackground: #d9edf7; -@infoBorder: darken(spin(@infoBackground, -10), 7%); - - - -// GRID -// -------------------------------------------------- - -// Default 940px grid -@gridColumns: 12; -@gridColumnWidth: 60px; -@gridGutterWidth: 20px; -@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); - -// Fluid grid -@fluidGridColumnWidth: 6.382978723%; -@fluidGridGutterWidth: 2.127659574%; diff --git a/pykeg/web/static/css/kegweb.css b/pykeg/web/static/css/kegweb.css deleted file mode 100644 index 7f5757d16..000000000 --- a/pykeg/web/static/css/kegweb.css +++ /dev/null @@ -1,5631 +0,0 @@ -/*! - * Kegweb main css. - */ -/*! - * Bootstrap v2.3.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 28px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - - max-width: 100%; - /* Part 1: Set a maxium relative to the parent */ - - width: auto\9; - /* IE7-8 need help adjusting responsive images */ - - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} -#map_canvas img, -.google-maps img { - max-width: none; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -@media print { - * { - text-shadow: none !important; - color: #000 !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 18px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover, -a:focus { - color: #005580; - text-decoration: underline; -} -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 28px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574%; - *margin-left: 2.0744680846382977%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574%; -} -.row-fluid .span12 { - width: 99.99999998999999%; - *width: 99.94680850063828%; -} -.row-fluid .span11 { - width: 91.489361693%; - *width: 91.4361702036383%; -} -.row-fluid .span10 { - width: 82.97872339599999%; - *width: 82.92553190663828%; -} -.row-fluid .span9 { - width: 74.468085099%; - *width: 74.4148936096383%; -} -.row-fluid .span8 { - width: 65.95744680199999%; - *width: 65.90425531263828%; -} -.row-fluid .span7 { - width: 57.446808505%; - *width: 57.3936170156383%; -} -.row-fluid .span6 { - width: 48.93617020799999%; - *width: 48.88297871863829%; -} -.row-fluid .span5 { - width: 40.425531911%; - *width: 40.3723404216383%; -} -.row-fluid .span4 { - width: 31.914893614%; - *width: 31.8617021246383%; -} -.row-fluid .span3 { - width: 23.404255317%; - *width: 23.3510638276383%; -} -.row-fluid .span2 { - width: 14.89361702%; - *width: 14.8404255306383%; -} -.row-fluid .span1 { - width: 6.382978723%; - *width: 6.329787233638298%; -} -.row-fluid .offset12 { - margin-left: 104.25531913799999%; - *margin-left: 104.14893615927657%; -} -.row-fluid .offset12:first-child { - margin-left: 102.127659564%; - *margin-left: 102.02127658527658%; -} -.row-fluid .offset11 { - margin-left: 95.744680841%; - *margin-left: 95.63829786227659%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702126700001%; - *margin-left: 93.5106382882766%; -} -.row-fluid .offset10 { - margin-left: 87.23404254399999%; - *margin-left: 87.12765956527657%; -} -.row-fluid .offset10:first-child { - margin-left: 85.10638297%; - *margin-left: 84.99999999127658%; -} -.row-fluid .offset9 { - margin-left: 78.723404247%; - *margin-left: 78.61702126827659%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574467300001%; - *margin-left: 76.4893616942766%; -} -.row-fluid .offset8 { - margin-left: 70.21276594999999%; - *margin-left: 70.10638297127657%; -} -.row-fluid .offset8:first-child { - margin-left: 68.085106376%; - *margin-left: 67.97872339727658%; -} -.row-fluid .offset7 { - margin-left: 61.702127653%; - *margin-left: 61.595744674276595%; -} -.row-fluid .offset7:first-child { - margin-left: 59.574468079%; - *margin-left: 59.468085100276596%; -} -.row-fluid .offset6 { - margin-left: 53.19148935599999%; - *margin-left: 53.08510637727659%; -} -.row-fluid .offset6:first-child { - margin-left: 51.06382978199999%; - *margin-left: 50.95744680327659%; -} -.row-fluid .offset5 { - margin-left: 44.680851059%; - *margin-left: 44.574468080276596%; -} -.row-fluid .offset5:first-child { - margin-left: 42.553191485%; - *margin-left: 42.4468085062766%; -} -.row-fluid .offset4 { - margin-left: 36.170212762%; - *margin-left: 36.063829783276596%; -} -.row-fluid .offset4:first-child { - margin-left: 34.042553188%; - *margin-left: 33.9361702092766%; -} -.row-fluid .offset3 { - margin-left: 27.659574465%; - *margin-left: 27.553191486276596%; -} -.row-fluid .offset3:first-child { - margin-left: 25.531914891%; - *margin-left: 25.425531912276597%; -} -.row-fluid .offset2 { - margin-left: 19.148936168%; - *margin-left: 19.042553189276596%; -} -.row-fluid .offset2:first-child { - margin-left: 17.021276594%; - *margin-left: 16.914893615276597%; -} -.row-fluid .offset1 { - margin-left: 10.638297870999999%; - *margin-left: 10.531914892276596%; -} -.row-fluid .offset1:first-child { - margin-left: 8.510638297%; - *margin-left: 8.404255318276597%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 9px; -} -.lead { - margin-bottom: 18px; - font-size: 19.5px; - font-weight: 200; - line-height: 27px; -} -small { - font-size: 85%; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -cite { - font-style: normal; -} -.muted { - color: #999999; -} -a.muted:hover, -a.muted:focus { - color: #808080; -} -.text-warning { - color: #c09853; -} -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} -.text-error { - color: #b94a48; -} -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} -.text-info { - color: #3a87ad; -} -a.text-info:hover, -a.text-info:focus { - color: #2d6987; -} -.text-success { - color: #468847; -} -a.text-success:hover, -a.text-success:focus { - color: #356635; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 9px 0; - font-family: inherit; - font-weight: bold; - line-height: 18px; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} -h1, -h2, -h3 { - line-height: 36px; -} -h1 { - font-size: 35.75px; -} -h2 { - font-size: 29.25px; -} -h3 { - font-size: 22.75px; -} -h4 { - font-size: 16.25px; -} -h5 { - font-size: 13px; -} -h6 { - font-size: 11.049999999999999px; -} -h1 small { - font-size: 22.75px; -} -h2 small { - font-size: 16.25px; -} -h3 small { - font-size: 13px; -} -h4 small { - font-size: 13px; -} -.page-header { - padding-bottom: 8px; - margin: 18px 0 27px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - padding: 0; - margin: 0 0 9px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 18px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-bottom: 18px; -} -dt, -dd { - line-height: 18px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 9px; -} -.dl-horizontal { - *zoom: 1; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 180px; -} -hr { - margin: 18px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 18px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16.25px; - font-weight: 300; - line-height: 1.25; -} -blockquote small { - display: block; - line-height: 18px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -blockquote.pull-right small:before { - content: ''; -} -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 18px; - font-style: normal; - line-height: 18px; -} -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 11px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} -pre { - display: block; - padding: 8.5px; - margin: 0 0 9px; - font-size: 12px; - line-height: 18px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -pre.prettyprint { - margin-bottom: 18px; -} -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -form { - margin: 0 0 18px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 18px; - font-size: 19.5px; - line-height: 36px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -legend small { - font-size: 13.5px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 13px; - font-weight: normal; - line-height: 18px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 18px; - padding: 4px 6px; - margin-bottom: 9px; - font-size: 13px; - line-height: 18px; - color: #555555; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - vertical-align: middle; -} -input, -textarea, -.uneditable-input { - width: 206px; -} -textarea { - height: auto; -} -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear .2s, box-shadow linear .2s; - -moz-transition: border linear .2s, box-shadow linear .2s; - -o-transition: border linear .2s, box-shadow linear .2s; - transition: border linear .2s, box-shadow linear .2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; - /* IE7 */ - - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 28px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 28px; -} -select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - min-height: 18px; - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 17px 20px 18px; - margin-top: 18px; - margin-bottom: 18px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 9px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 9px; - vertical-align: middle; - font-size: 0; - white-space: nowrap; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 13px; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 18px; - min-width: 16px; - padding: 4px 5px; - font-size: 13px; - font-weight: normal; - line-height: 18px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 9px; -} -legend + .control-group { - margin-top: 18px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 18px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} -.form-horizontal .controls:first-child { - *padding-left: 180px; -} -.form-horizontal .help-block { - margin-bottom: 0; -} -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 9px; -} -.form-horizontal .form-actions { - padding-left: 180px; -} -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 18px; -} -.table th, -.table td { - padding: 8px; - line-height: 18px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child, -.table-bordered tbody:first-child tr:first-child > th:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child, -.table-bordered tbody:first-child tr:first-child > th:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tbody:last-child tr:last-child > th:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > th:first-child { - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tbody:last-child tr:last-child > th:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > th:last-child { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; -} -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} -.table tbody tr.success > td { - background-color: #dff0d8; -} -.table tbody tr.error > td { - background-color: #f2dede; -} -.table tbody tr.warning > td { - background-color: #fcf8e3; -} -.table tbody tr.info > td { - background-color: #d9edf7; -} -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../bootstrap/img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../bootstrap/img/glyphicons-halflings-white.png"); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; - width: 16px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; - width: 16px; -} -.icon-folder-open { - background-position: -408px -120px; - width: 16px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.icon-hdd { - background-position: 0 -144px; -} -.icon-bullhorn { - background-position: -24px -144px; -} -.icon-bell { - background-position: -48px -144px; -} -.icon-certificate { - background-position: -72px -144px; -} -.icon-thumbs-up { - background-position: -96px -144px; -} -.icon-thumbs-down { - background-position: -120px -144px; -} -.icon-hand-right { - background-position: -144px -144px; -} -.icon-hand-left { - background-position: -168px -144px; -} -.icon-hand-up { - background-position: -192px -144px; -} -.icon-hand-down { - background-position: -216px -144px; -} -.icon-circle-arrow-right { - background-position: -240px -144px; -} -.icon-circle-arrow-left { - background-position: -264px -144px; -} -.icon-circle-arrow-up { - background-position: -288px -144px; -} -.icon-circle-arrow-down { - background-position: -312px -144px; -} -.icon-globe { - background-position: -336px -144px; -} -.icon-wrench { - background-position: -360px -144px; -} -.icon-tasks { - background-position: -384px -144px; -} -.icon-filter { - background-position: -408px -144px; -} -.icon-briefcase { - background-position: -432px -144px; -} -.icon-fullscreen { - background-position: -456px -144px; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 8px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 18px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 18px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 13px; - line-height: 18px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #cccccc; - *border: 0; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -} -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 11px 19px; - font-size: 16.25px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} -.btn-small { - padding: 2px 10px; - font-size: 11.049999999999999px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 0 6px; - font-size: 9.75px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: #0088cc; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} -.btn-group { - position: relative; - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - font-size: 0; - margin-top: 9px; - margin-bottom: 9px; -} -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 13px; -} -.btn-group > .btn-mini { - font-size: 9.75px; -} -.btn-group > .btn-small { - font-size: 11.049999999999999px; -} -.btn-group > .btn-large { - font-size: 16.25px; -} -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} -.dropup .btn-large .caret { - border-bottom-width: 5px; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 18px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert, -.alert h4 { - color: #c09853; -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 18px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-success h4 { - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-info h4 { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.nav { - margin-left: 0; - margin-bottom: 18px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li > a > img { - max-width: none; -} -.nav > .pull-right { - float: right; -} -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 18px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 8px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 18px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.nav .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tab-content { - overflow: auto; -} -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.nav > .disabled > a { - color: #999999; -} -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - cursor: default; -} -.navbar { - overflow: visible; - margin-bottom: 18px; - *position: relative; - *z-index: 2; -} -.navbar-inner { - min-height: 40px; - padding-left: 20px; - padding-right: 20px; - background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(to bottom, #333333, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff333333', endColorstr='#ff222222', GradientType=0); - border: 1px solid #030303; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - *zoom: 1; -} -.navbar-inner:before, -.navbar-inner:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-inner:after { - clear: both; -} -.navbar .container { - width: auto; -} -.nav-collapse.collapse { - height: auto; - overflow: visible; -} -.navbar .brand { - float: left; - display: block; - padding: 11px 20px 11px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #999999; - text-shadow: 0 1px 0 #333333; -} -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #999999; -} -.navbar-link { - color: #999999; -} -.navbar-link:hover, -.navbar-link:focus { - color: #ffffff; -} -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-left: 1px solid #222222; - border-right: 1px solid #333333; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.navbar-static-top { - position: static; - margin-bottom: 0; -} -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); - box-shadow: 0 1px 10px rgba(0,0,0,.1); -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - box-shadow: 0 -1px 10px rgba(0,0,0,.1); -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 11px 15px 11px; - color: #999999; - text-decoration: none; - text-shadow: 0 1px 0 #333333; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: transparent; - color: #ffffff; - text-decoration: none; -} -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #151515; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #1f1f1f; - background-image: -moz-linear-gradient(top, #262626, #151515); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#262626), to(#151515)); - background-image: -webkit-linear-gradient(top, #262626, #151515); - background-image: -o-linear-gradient(top, #262626, #151515); - background-image: linear-gradient(to bottom, #262626, #151515); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff262626', endColorstr='#ff151515', GradientType=0); - border-color: #151515 #151515 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #151515; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #151515; - *background-color: #080808; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #000000 \9; -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.navbar .nav > li > .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .nav > li > .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #151515; - color: #555555; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); - border-color: #252525; -} -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; -} -.navbar-inverse .brand { - color: #999999; -} -.navbar-inverse .navbar-text { - color: #999999; -} -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; -} -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} -.navbar-inverse .navbar-link { - color: #999999; -} -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; -} -.navbar-inverse .divider-vertical { - border-left-color: #111111; - border-right-color: #222222; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #111111; - color: #ffffff; -} -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #040404; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} -.breadcrumb { - padding: 8px 15px; - margin: 0 0 18px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} -.breadcrumb > .active { - color: #999999; -} -.pagination { - margin: 18px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination ul > li { - display: inline; -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 18px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 16.25px; -} -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-top-left-radius: 3px; - -moz-border-radius-topleft: 3px; - border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - border-bottom-left-radius: 3px; -} -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - -moz-border-radius-topright: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -moz-border-radius-bottomright: 3px; - border-bottom-right-radius: 3px; -} -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.049999999999999px; -} -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 9.75px; -} -.pager { - margin: 18px 0; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; - line-height: 0; -} -.pager:after { - clear: both; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - background-color: #fff; - cursor: default; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; - outline: none; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 10%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.tooltip { - position: absolute; - z-index: 1020; - display: block; - visibility: visible; - font-size: 11px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.popover-title:empty { - display: none; -} -.popover-content { - padding: 9px 14px; -} -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: 11px; -} -.popover .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; - line-height: 0; -} -.thumbnails:after { - clear: both; -} -.row-fluid .thumbnails { - margin-left: 0; -} -.thumbnails > li { - float: left; - margin-bottom: 18px; - margin-left: 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 18px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: #555555; -} -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media-object { - display: block; -} -.media-heading { - margin: 0 0 5px; -} -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; -} -.media-list { - margin-left: 0; - list-style: none; -} -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 10.998px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; -} -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.badge { - padding-left: 9px; - padding-right: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} -.label:empty, -.badge:empty { - display: none; -} -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 18px; - margin-bottom: 18px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.accordion { - margin-bottom: 18px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-toggle { - cursor: pointer; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 18px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - line-height: 1; -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); - border-radius: 5px; -} -.carousel-indicators .active { - background-color: #fff; -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; - line-height: 18px; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 27px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit li { - line-height: 27px; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} -.affix { - position: fixed; -} -/** - * bootstrap-variables.less - * Copy of bootstrap/lib/variables.less, for kegweb specific modifications. - */ -body { - padding-top: 40px; - /* 40px to make the container go all the way to the bottom of the topbar */ - -} -.sidebar { - max-width: 200px; -} -.container-fluid > footer p { - text-align: center; - /* center align it with the container */ - -} -[class^="icon-"] { - background-image: url("../bootstrap/img/glyphicons-halflings.png"); -} -[class*="icon-white"] { - background-image: url("../bootstrap/img/glyphicons-halflings-white.png"); -} -.page-header { - background-color: #f5f5f5; - padding: 20px 20px 10px; - margin: 0 -20px; -} -div#content { - background-color: #fff; - padding: 20px; - margin: 0 -20px; - /* negative indent the amount of the padding to maintain the grid system */ - - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); -} -.helptext { - color: #595959; - display: block; - margin-bottom: 9px; -} -.fill-parent-width { - width: 100%; -} -.center-block { - display: block; - margin: 0 auto; - text-align: center; -} -.badge-list { - *zoom: 1; - margin-left: 0; - list-style: none; -} -.badge-list:before, -.badge-list:after { - display: table; - content: ""; - line-height: 0; -} -.badge-list:after { - clear: both; -} -.badge-list > li { - float: left; - width: 120px; - background-color: #555555; - color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - border: 1px solid #eeeeee; - text-align: center; - padding: 4px; - margin-right: 4px; -} -.badge-list > li a { - color: #eeeeee; -} -.badge-list > li h2 { - color: #eeeeee; - text-shadow: #000000 2px 2px 2px; -} -.badge-list > li small { - color: #999999; - text-transform: uppercase; - text-weight: bold; -} -.badge-list .badge-small h2 { - margin: 0px; - text-shadow: none; - font-size: 22.75px; - line-height: 31.5px; -} -.avatar-list { - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - list-style: none; -} -.avatar-list:before, -.avatar-list:after { - display: table; - content: ""; - line-height: 0; -} -.avatar-list:after { - clear: both; -} -.avatar-list > li { - margin: 0; - float: left; - padding: 1px; -} -.tap-snapshot-image { - width: 120px; - height: auto; - padding: 4px; -} -.right-col { - background-color: #eeeeee; -} -.badge-header { - font-size: 15px; - color: #333333; - font-weight: bold; - padding: 2px; - -webkit-border-radius: 6px 6px 0px 0px; - -moz-border-radius: 6px 6px 0px 0px; - border-radius: 6px 6px 0px 0px; - text-align: center; - border-bottom: 1px solid #eee; - font: bold; -} -.kb-tapbox { - *zoom: 1; - border-bottom: 1px solid #eeeeee; - margin-bottom: 16px; -} -.kb-tapbox:before, -.kb-tapbox:after { - display: table; - content: ""; - line-height: 0; -} -.kb-tapbox:after { - clear: both; -} -.session-snapshot { - border-bottom: 1px solid #eeeeee; - padding: 8px; -} -.clickable { - cursor: pointer; -} -.clickable:hover { - background-color: #eeeeee; -} -.kb-keg-description { - color: #333333; - margin-bottom: 8px; -} -.smalltext { - font-size: 11px; - color: #999999; - font-family: inherit; - font-weight: bold; -} -.arrow_box { - position: relative; - background: #ebebeb; - border: 3px solid #9fabc2; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - padding-left: 20px; - padding-right: 20px; - padding-top: 10px; - padding-bottom: 10px; -} -.arrow_box:after, -.arrow_box:before { - right: 100%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; -} -.arrow_box:after { - border-right-color: #ebebeb; - border-width: 20px; - top: 50%; - margin-top: -20px; -} -.arrow_box:before { - border-right-color: #9fabc2; - border-width: 24px; - top: 50%; - margin-top: -24px; -} -/* @end */ -/* @group Charts */ -.kb-chartbox-error { - color: #ccc; - margin-left: auto; - margin-right: auto; - display: block; - margin: 0 auto; - text-align: center; -} -/* @group Events */ -.kb-event-box-info { - font-size: 0.7em; - color: #999; -} -.kb-event-box-info a:link { - color: #999; - text-decoration: underline; - font-weight: normal; -} -.kb-event-box-info a:visited { - color: #999; - text-decoration: underline; - font-weight: normal; -} -.kb-event-box-dateline { - font-size: 0.7em; - color: #ccc; - margin-top: 4px; - font-style: italic; -} -.kb-event-box { - width: 300px; - margin-bottom: 8px; - padding: 8px; - border: 1px solid #eee; - display: inline-block; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - *zoom: 1; -} -.kb-event-box:before, -.kb-event-box:after { - display: table; - content: ""; - line-height: 0; -} -.kb-event-box:after { - clear: both; -} -.kb-event-box-session-start { - width: 300px; - text-align: center; - margin-bottom: 32px; - font-size: 0.7em; - background-color: #ddd; - color: #777; - padding: 5px; -} -.kb-event-box { - width: 300px; - margin-bottom: 8px; - padding: 8px; - border: 1px solid #eee; - vertical-align: middle; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.kb-event-box-details { - vertical-align: middle; -} -.kb-event-box-image { - vertical-align: middle; - float: left; - margin-right: 8px; -} -/* @end */ -/* @group Kegadmin Nav */ -#kb-admin-nav { - float: left; - width: 160px; - margin-right: 32px; - margin-bottom: 16px; - font-size: 0.9em; -} -.kb-admin-nav-tab { - width: 160px; - height: 32px; - line-height: 32px; - background-color: #eee; - margin-bottom: 2px; - padding-left: 4px; -} -.kb-admin-nav-tab-hover { - background-color: #aaa; - cursor: pointer; -} -.kb-admin-subnav { - font-size: 0.8em; -} -.kb-admin-subnav p { - margin: 0px; - margin-left: 10px; -} -.kb-admin-subnav-tap { - margin-bottom: 10px; -} -.setup-form .control-group { - margin-bottom: 32px; -} -.setup-form .control-group label.control-label { - font-size: 26px; - height: 200%; -} -.setup-form .control-group label.checkbox { - font-size: 26px; - height: 36px; -} -.setup-form .control-group .requiredField { - text-weight: bold; -} -.setup-form .control-group .asteriskField { - display: none; -} -.setup-form .help-block { - font-size: 15.6px; - color: #555555; -} - -/* BS3 pagination classes - needed by `django_boostrap_pagination` */ -.pagination{height:36px;margin:0;padding: 0;} -.pager,.pagination ul{margin-left:0;*zoom:1} -.pagination ul{padding:0;display:inline-block;*display:inline;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)} -.pagination li{display:inline} -.pagination a{float:left;padding:0 12px;line-height:30px;text-decoration:none;border:1px solid #ddd;border-left-width:0} -.pagination .active a,.pagination a:hover{background-color:#f5f5f5;color:#94999E} -.pagination .active a{color:#94999E;cursor:default} -.pagination .disabled a,.pagination .disabled a:hover,.pagination .disabled span{color:#94999E;background-color:transparent;cursor:default} -.pagination li:first-child a,.pagination li:first-child span{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px} -.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0} -.pagination-centered{text-align:center} -.pagination-right{text-align:right} -.pager{margin-bottom:18px;text-align:center} -.pager:after,.pager:before{display:table;content:""} -.pager li{display:inline} -.pager a{display:inline-block;padding:5px 12px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px} -.pager a:hover{text-decoration:none;background-color:#f5f5f5} -.pager .next a{float:right} -.pager .previous a{float:left} -.pager .disabled a,.pager .disabled a:hover{color:#999;background-color:#fff;cursor:default} -.pagination .prev.disabled span{float:left;padding:0 12px;line-height:30px;text-decoration:none;border:1px solid #ddd;border-left-width:1} -.pagination .next.disabled span{float:left;padding:0 12px;line-height:30px;text-decoration:none;border:1px solid #ddd;border-left-width:0} -.pagination li.active, .pagination li.disabled { - float:left;padding:0 12px;line-height:30px;text-decoration:none;border:1px solid #ddd;border-left-width:0 -} -.pagination li.active { - background: #364E63; - color: #fff; -} -.pagination li:first-child { - border-left-width: 1px; -} -/* @end */ -/* vim sw=2 ts=2 noet */ diff --git a/pykeg/web/static/css/kegweb.less b/pykeg/web/static/css/kegweb.less deleted file mode 100644 index f5f16e071..000000000 --- a/pykeg/web/static/css/kegweb.less +++ /dev/null @@ -1,346 +0,0 @@ -/*! - * Kegweb main css. - */ - -@import "../bootstrap/less/bootstrap.less"; -@import "bootstrap-variables.less"; - -body { - padding-top: 40px; /* 40px to make the container go all the way to the bottom of the topbar */ -} - -.sidebar { - // TODO(mikey): conditional on media min/max width. - max-width: 200px; -} - -.container-fluid > footer p { - text-align: center; /* center align it with the container */ -} - -[class^="icon-"] { - background-image: url("/static/bootstrap/img/glyphicons-halflings.png"); -} -[class*="icon-white"] { - background-image: url("/static/bootstrap/img/glyphicons-halflings-white.png"); -} - -.page-header { - background-color: #f5f5f5; - padding: 20px 20px 10px; - margin: 0 -20px; -} - -// Override container.content. -// Add white background. -div#content { - background-color: #fff; - padding: 20px; - margin: 0 -20px; /* negative indent the amount of the padding to maintain the grid system */ - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.15); - box-shadow: 0 1px 2px rgba(0,0,0,.15); -} - -.helptext { - .help-block(); -} - -.fill-parent-width { - width: 100%; -} - -.center-block { - display: block; - margin: 0 auto; - text-align: center; -} - -.badge-list { - .clearfix(); - margin-left: 0; - list-style: none; - - > li { - float: left; - width: 2 * @gridColumnWidth; - background-color: @gray; - color: @grayLighter; - .border-radius(6px); - border: 1px solid @grayLighter; - text-align: center; - padding: 4px; - margin-right: 4px; - - a { - color: @grayLighter; - } - h2 { - color: @grayLighter; - text-shadow: @black 2px 2px 2px; - } - small { - color: @grayLight; - text-transform: uppercase; - text-weight: bold; - } - } - - .badge-small { - h2 { - margin: 0px; - text-shadow: none; - font-size: @baseFontSize * 1.75; - line-height: @baseLineHeight * 1.75; - } - } -} - -.avatar-list { - .clearfix(); - margin-left: 0; - margin-bottom: 0; - list-style: none; - - > li { - margin: 0; - float: left; - padding: 1px; - } -} - -.tap-snapshot-image { - width: 2 * @gridColumnWidth; - height: auto; - padding: 4px; -} - -.right-col { - background-color: @grayLighter; -} - -.badge-header { - font-size: @baseFontSize + 2px; - color: @grayDark; - font-weight: bold; - padding: 2px; - .border-radius(6px 6px 0px 0px); - - text-align: center; - border-bottom: 1px solid #eee; - font: bold; -} - -.kb-tapbox { - .clearfix(); - border-bottom: 1px solid @grayLighter; - margin-bottom: 16px; -} - -.session-snapshot { - border-bottom: 1px solid @grayLighter; - padding: 8px; -} - -.clickable { - cursor: pointer; -} -.clickable:hover { - background-color: @grayLighter; -} - -.kb-keg-description { - color: @grayDark; - margin-bottom: 8px; -} - -.smalltext { - font-size: 11px; - color: @grayLight; - font-family: @headingsFontFamily; - font-weight: @headingsFontWeight; -} - -.arrow_box { - position: relative; - background: #ebebeb; - border: 3px solid #9fabc2; - .border-radius(3px); - padding-left: 20px; - padding-right: 20px; - padding-top: 10px; - padding-bottom: 10px; -} - -.arrow_box:after, .arrow_box:before { - right: 100%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; -} - -.arrow_box:after { - border-right-color: #ebebeb; - border-width: 20px; - top: 50%; - margin-top: -20px; -} - -.arrow_box:before { - border-right-color: #9fabc2; - border-width: 24px; - top: 50%; - margin-top: -24px; -} - -/* @end */ - -/* @group Charts */ - -.kb-chartbox-error { - color: #ccc; - .center-block(); -} - -/* @group Events */ - -.kb-event-box-info { - font-size: 0.7em; - color: #999; -} - -.kb-event-box-info a:link { - color: #999; - text-decoration: underline; - font-weight: normal; -} - -.kb-event-box-info a:visited { - color: #999; - text-decoration: underline; - font-weight: normal; -} - -.kb-event-box-dateline { - font-size: 0.7em; - color: #ccc; - margin-top: 4px; - font-style: italic; -} - -.kb-event-box { - width: 300px; - margin-bottom: 8px; - padding: 8px; - border: 1px solid #eee; - display: inline-block; - .border-radius(5px); - .clearfix(); -} - -.kb-event-box-session-start { - width: 300px; - text-align: center; - margin-bottom: 32px; - font-size: 0.7em; - background-color: #ddd; - color: #777; - padding: 5px; -} - -.kb-event-box { - width: 300px; - margin-bottom: 8px; - padding: 8px; - border: 1px solid #eee; - vertical-align: middle; - .border-radius(5px); -} - -.kb-event-box-details { - vertical-align: middle; -} - -.kb-event-box-image { - vertical-align: middle; - float: left; - margin-right: 8px; -} - -.kb-drink-box-details-headline { - -} - -/* @end */ - -/* @group Kegadmin Nav */ - -#kb-admin-nav { - float: left; - width: 160px; - margin-right: 32px; - margin-bottom: 16px; - font-size: 0.9em; -} - -.kb-admin-nav-tab { - width: 160px; - height: 32px; - line-height: 32px; - background-color: #eee; - margin-bottom: 2px; - padding-left: 4px; -} - -.kb-admin-nav-tab-hover { - background-color: #aaa; - cursor: pointer; -} - -.kb-admin-subnav { - font-size: 0.8em; -} - -.kb-admin-subnav p { - margin: 0px; - margin-left: 10px; -} - -.kb-admin-subnav-tap { - margin-bottom: 10px; -} - -.setup-form { - .control-group { - margin-bottom: 32px; - - label.control-label { - font-size: @baseFontSize * 2.0; - height:200%; - } - label.checkbox { - font-size: @baseFontSize * 2.0; - height: @baseLineHeight * 2.0; - } - .requiredField { - text-weight: bold; - } - .asteriskField { - display: none; - } - } - .help-block { - font-size: @baseFontSize * 1.2; - color: @gray; - } -} - -/* @end */ - -/* vim sw=2 ts=2 noet */ diff --git a/pykeg/web/static/fancybox/blank.gif b/pykeg/web/static/fancybox/blank.gif deleted file mode 100644 index 35d42e808f0a8017b8d52a06be2f8fec0b466a66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 scmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Dgb&paUX6G7L;iE{qJ;0LZEa`2YX_ diff --git a/pykeg/web/static/fancybox/fancybox_loading.gif b/pykeg/web/static/fancybox/fancybox_loading.gif deleted file mode 100644 index 01586176d793c261db6b6ca4ca7822b2d3b35703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3866 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 Hfr$SAXcF<h diff --git a/pykeg/web/static/fancybox/fancybox_overlay.png b/pykeg/web/static/fancybox/fancybox_overlay.png deleted file mode 100644 index a4391396a9d6b6d7ff3b781f16904732fea40bdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmbVLJ8#oa7&R(Fs8R<|7ht(^mx74x>m;si#gzIH8i|xBjnr(^v2PlywXeCpY1~YR z4GEC=56mo#2*Jw43=>F<Nc;f?KIa8PR3t3R_u+HS_kP;iySKJ_eN_;IwZ^X7hPBwQ zUcLn1=jx|-uw3I_m+#X)ANh<3J0a~6)QJ5f(k6a*_UI$23BpQ0>U4RxdEX3ZEcpdS z%HtH+f>7JeQ$IK+9QDXilvv`=x9>$1g_d|wZ7R*wA%kdl%*g(DuM>=q10xi-@1R<4 zf<R2TkMj5=$;{jmC%Pu=i)&d#69_-H#Hmx=W(zr#5mc4Rr9i<LX_|y9RZYXUk*Z)- zR^Zi2xMEf{Q{6(dM+9pu?3-=3KC=ZUOB`^XnzB3^jigaoqU=b<hG7&Ms#*d>DLYHJ zpO=zsW3J$mEMQT}BbuN>(eKeAw?y!C8bX{ln+xG2n<WZTCg*-CV@Z+YxQJ_l&Ul;r zabqbu>zt)TZj+1-SpfCuZ_LS%yYmedK=8(Vz#=G$f8x?$7?XrITuX#MQW%A%tvGr` zFWZLWl|78Hj`gbN7+aoWS6m%?bB$%(y6YLbXFEz+)iCx{LpKc9Q9w#{@K$BPZ6q1@ zlYq?aMqqcwwa?|64kJFNtV8L^yaQST%4s&BDRTBTw0RIEAsuBmi}FmPbqR}3Nmyqz zMw9%S(GvSM{#V>nZumbrlffCeXpX;{Wqt)6SZo)q4~NC@kOU@%!DzfWy>bD@>PExe v>EvH}>tDZp{&4r=VGmt>cI(v(`?0Vh3|<O9zCZl6UW{ME+jC#rhfjV34sJ7w diff --git a/pykeg/web/static/fancybox/fancybox_sprite.png b/pykeg/web/static/fancybox/fancybox_sprite.png deleted file mode 100644 index fd8d5ca566d47a77d9562168617bb2f6482bf9be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1362 zcmV-Y1+DstP)<h;3K|Lk000e1NJLTq001li005W>0{{R3r~&&>0002JP)t-s00000 z0000001gfg00000000000L{(K0RaKo+1UdF0|y5O0002r-`@fP0zW@L0RaI3004r5 zf*c$i<>lo7006(gzwz<$1_lOaXJ-Ha0PO7S1_lQB`1n6RKgr3-o}Qj(XJ_~K_k)9j z0002c(9rn!_^z(5+S=Ou{QT_f>;M1&`T6<%{r%qF-T(jq|Ns9^PENtW!8J8CtgNh! zjg6d~oO*hCU0q#hXlN`fEV{b7A|fKr&dxzWL2cadjQ{`uFLY8)Qvd-22n`Y$9U~_# zIz&iQRb6RmY;AdZe}{>XmZ71nva`0nz{Sba)ZXIw`TG6+j4$gO000CPNkl<ZcwX$5 zTXUjJ7=#xALy!>2x46b6u4*Y}3asYn+5i8uzL!nR%M6xSwKsc_zR;VeIz1!l=7%bc z^y9i1)H)rlQX5H}t{Ws>?{u#6gz84u?!QbIi|O0XJDu=rsP(kOm!=PlH`(sv9EkSo zO_FTZdqMae(=to80;1R*KD8?Z-XAW}75f}vpB-w-_K1jXvbyyskRKG~i0)Nd)AX*h zM0#jwkEyO{im};yhRB-mZUqXW7+c;F1v9Jy3$|wC<2h!|U!<dAO^MwQ<p&H@SP9?* zF7cwvu<b9gIsaXtB=($YQ{|{fHhO_Tc3_&>Lx#xcXj0@L!j8|xED11W*crqOmmrm2 zaNL9`2D5c~he(BkB@$-KlIa8s8Kwh<=ae59U)>sWI-q=Y6CBUZC4Z4p^bJjdEssKP z4;QpSWa-4pp=U@h!6|;59SN>-kagZ<a|oMLu=OayT4mRWpV*k6QFkzb>YW2)i=R-w zJ=+`1BBWbJw<+SWZLl#Hfl2g80BLcm$WxI5;@LL23}o63Dsxiw@i}&xZ5D^)2ZPC6 zfF$O#{~XJ>Qc0%mc*K(e-*aq}>#IqVxoO!wht#tzlWY}M#i?*j5|wTPZQ{iL5x038 z-$MSyrrbCx`a?Ami??6*t($WH7UQh<pV#g~(_aWpi*1r5>wE<)u58NP6v$8fC?65` z4W?!G9jiornqN$vX@>O$Qnk$2K;L9<Hh#mAS*D{Wl_vH9F~?=)ST_Duw9b^9P|^xd zU5YJVFjhMzHu0A0civNaqw}lY83}*`SGlV;(zMoHnN;ORJlje!zT@k7yI87^9AihS zT+OJB1R#}Ofw9|_`<X*VfRINs^ekO!es)e2=MrOIffq>5zzM*yo_XfmGCZ#pXchx2 z{#7tioQ*#A7036HeWemZIWsM6L^)Vu!zsc6-G;m=zuCI31o0^Nyk`#m7+u_-6yeZ6 z?*v!*7}4p{qP%j7+6%`VB5APEs4^y4U5O=7NO@C4lVRYnF{keNA#nV<?o$qk5ryCZ zlHS$)$%=q|zFrsk5s1Ur;lSe%GTrkBvn4(y!qMw6aBXf5mG*++U^WZGa5i}*Tc1az zNz(#(!C?4Dv?{LMmHSIwAgf0cMDkq6?izG9?dqg-Ez7oTt7{r;d+nva(k-i^u~hPV zQ@%H48*dnH+Z2GStaVcg09pH{@cqWSmQ7)$0NOT%C4i`XQ`k9a*%Uq#aJq3*RzRHH zxG5Rm#SNRX5d{5PoASLW-<#t8-(DRW0Sv=X43#f1xekys4Ew<QZ`Tp}Ly9c?xQ^;0 zod<xCWt9UW%PfOcc8lZVgM2LNqW^H?#*G^{mTz^niMs*euMLPThiV4^)7kL^UfS6f UWn2kj;s5{u07*qoM6N<$f_$EYhX4Qo diff --git a/pykeg/web/static/fancybox/helpers/fancybox_buttons.png b/pykeg/web/static/fancybox/helpers/fancybox_buttons.png deleted file mode 100644 index 07872072704114b91681e2e6f9697ce1521b64d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S903?%u>HW~n_y#YQUu0R?WSg~RSP%1Go5lD7* zbwQLpe*757ICA6&kW5WYZD?o!GK`Ilf#ib+545$lfs7|lo|Kf7golSGBqXd|yY}6? zcgK$(2by;H@Zldne!PGGe#3?hK*r6RH}~(~f9%+?@87@w1cMhZUi|v?>-O#24<9~! z_3G8{-@iY6_yAP-?b|mX`_G?0|Ns97D*W>0%coDDfKr0iiH$(}%u0g%f*BZ@S=qVy z1VzPV<Q3F3^vo@6?d|QIJ-q!x!xB<6Dr!3>E?Tl=<;G1rjvPIE`Ra{3j~;*c^fm05 z&}0S%rZ1i@jv*CsZ>PnU&vFoGYh)GcNLbUk(XcbqE{E69EG*srz@Pu~uR3~FiyV{r zKBIe^jd`)*o5yoLKHYF_zn{1F51Du38}jGBJ=VP0ecMa>bF+9K`W*ijXIeka_uU8A z*POd<y1bsg;pUq2bN9YVSQmQt?V_Cp;%Ozjebbia`+Mhjt=+QgR_-TFh6U1R84RBC zKGV4_djIfS(bru*SMJv7i#lnn6`i)_`Sok9&%Rd8eZEs*!If*5c3x^&zM<X!%3YmT z%WvG8<M&(ecI5TVVK-cgTpI2~RjDle@UN<&Kz#2k$&c?pe8~T7ofR?HIQzJ5sH?wk zcG~IJ_qZp97cmxWTY8RhRc*re<G$(PwilO1`DbORzgQUk<Yn;5+LY*e4!OAcji*>= z37@}bnmsYU%ylPY9@}5u*!t|)yNM@Xh;kTr{CTM<?yytQn)?Ua`J1nPI(izNf0cH6 ze!7s0mCQ1x6tnMZ-M;V6Pd?l8p_`Q<jk%a<!;S}GlYg6S`o3B|EA7bJ7`+Q;BzB2U zm)-98;KPag>%UpgJrq;^z1sCv#Ff{JcXH0QycQ=j-SpqK)3sqC&x%d{>uv#p4L4W% zmLHbjTwSCP^ID(pX0NGG_)`a^m0!6nD|Dt#Dvad0vf#zR<e8~2bh;X)T27oi_?Snb z`*hNxW6@kwn&o5nx}7@MzrL>8xqRnG{y^pfbH6Kc3;s;HW4p`heoW(jKH<7AtsEly z$M&AE{dQl2(Z%x9#dt|gSIbWy<4Xjtobc#5EmRoE7k>Wa#EFw7ELWat{GexP^oT7` zWJjo_z_Z6E{wwPO!J9zw9U;?iE<de(+~cj<Wgjic0Q09OmoJU0N(*+s9_1xzTCTiw zYgBBp^47nZnv5P>rx;1Arv+D^&N20C4AEY>{Ek`B=i66zn9m4$^{AUqIL)kd`}_|Y zirXZ4+!kL{DD1t`cieXN&YnLTl;^yVdNTEd730M4<~70>Dwl5dOP&;N_1dH)?&X@x qGoDO6XT>`g#8(4K<@tG^_7CJ-u|B8Hp&OWk7(8A5T-G@yGywqna}dM; diff --git a/pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.css b/pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.css deleted file mode 100644 index 9453b464d..000000000 --- a/pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.css +++ /dev/null @@ -1,96 +0,0 @@ -#fancybox-buttons { - position: fixed; - left: 0; - width: 100%; - z-index: 8050; -} - -#fancybox-buttons.top { - top: 10px; -} - -#fancybox-buttons.bottom { - bottom: 10px; -} - -#fancybox-buttons ul { - display: block; - width: 166px; - height: 30px; - margin: 0 auto; - padding: 0; - list-style: none; - border: 1px solid #111; - border-radius: 3px; - -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); - -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); - box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); - background: rgb(50,50,50); - background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); - background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); -} - -#fancybox-buttons ul li { - float: left; - margin: 0; - padding: 0; -} - -#fancybox-buttons a { - display: block; - width: 30px; - height: 30px; - text-indent: -9999px; - background-image: url('fancybox_buttons.png'); - background-repeat: no-repeat; - outline: none; - opacity: 0.8; -} - -#fancybox-buttons a:hover { - opacity: 1; -} - -#fancybox-buttons a.btnPrev { - background-position: 5px 0; -} - -#fancybox-buttons a.btnNext { - background-position: -33px 0; - border-right: 1px solid #3e3e3e; -} - -#fancybox-buttons a.btnPlay { - background-position: 0 -30px; -} - -#fancybox-buttons a.btnPlayOn { - background-position: -30px -30px; -} - -#fancybox-buttons a.btnToggle { - background-position: 3px -60px; - border-left: 1px solid #111; - border-right: 1px solid #3e3e3e; - width: 35px -} - -#fancybox-buttons a.btnToggleOn { - background-position: -27px -60px; -} - -#fancybox-buttons a.btnClose { - border-left: 1px solid #111; - width: 35px; - background-position: -56px 0px; -} - -#fancybox-buttons a.btnDisabled { - opacity : 0.4; - cursor: default; -} \ No newline at end of file diff --git a/pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.js b/pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.js deleted file mode 100644 index 50baeca42..000000000 --- a/pykeg/web/static/fancybox/helpers/jquery.fancybox-buttons.js +++ /dev/null @@ -1,121 +0,0 @@ - /*! - * Buttons helper for fancyBox - * version: 1.0.5 (Mon, 15 Oct 2012) - * @requires fancyBox v2.0 or later - * - * Usage: - * $(".fancybox").fancybox({ - * helpers : { - * buttons: { - * position : 'top' - * } - * } - * }); - * - */ -(function ($) { - //Shortcut for fancyBox object - var F = $.fancybox; - - //Add helper object - F.helpers.buttons = { - defaults : { - skipSingle : false, // disables if gallery contains single image - position : 'top', // 'top' or 'bottom' - tpl : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:jQuery.fancybox.close();"></a></li></ul></div>' - }, - - list : null, - buttons: null, - - beforeLoad: function (opts, obj) { - //Remove self if gallery do not have at least two items - - if (opts.skipSingle && obj.group.length < 2) { - obj.helpers.buttons = false; - obj.closeBtn = true; - - return; - } - - //Increase top margin to give space for buttons - obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; - }, - - onPlayStart: function () { - if (this.buttons) { - this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); - } - }, - - onPlayEnd: function () { - if (this.buttons) { - this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); - } - }, - - afterShow: function (opts, obj) { - var buttons = this.buttons; - - if (!buttons) { - this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); - - buttons = { - prev : this.list.find('.btnPrev').click( F.prev ), - next : this.list.find('.btnNext').click( F.next ), - play : this.list.find('.btnPlay').click( F.play ), - toggle : this.list.find('.btnToggle').click( F.toggle ) - } - } - - //Prev - if (obj.index > 0 || obj.loop) { - buttons.prev.removeClass('btnDisabled'); - } else { - buttons.prev.addClass('btnDisabled'); - } - - //Next / Play - if (obj.loop || obj.index < obj.group.length - 1) { - buttons.next.removeClass('btnDisabled'); - buttons.play.removeClass('btnDisabled'); - - } else { - buttons.next.addClass('btnDisabled'); - buttons.play.addClass('btnDisabled'); - } - - this.buttons = buttons; - - this.onUpdate(opts, obj); - }, - - onUpdate: function (opts, obj) { - var toggle; - - if (!this.buttons) { - return; - } - - toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); - - //Size toggle button - if (obj.canShrink) { - toggle.addClass('btnToggleOn'); - - } else if (!obj.canExpand) { - toggle.addClass('btnDisabled'); - } - }, - - beforeClose: function () { - if (this.list) { - this.list.remove(); - } - - this.list = null; - this.buttons = null; - } - }; - -}(jQuery)); \ No newline at end of file diff --git a/pykeg/web/static/fancybox/helpers/jquery.fancybox-media.js b/pykeg/web/static/fancybox/helpers/jquery.fancybox-media.js deleted file mode 100644 index 4b5e78356..000000000 --- a/pykeg/web/static/fancybox/helpers/jquery.fancybox-media.js +++ /dev/null @@ -1,196 +0,0 @@ -/*! - * Media helper for fancyBox - * version: 1.0.5 (Tue, 23 Oct 2012) - * @requires fancyBox v2.0 or later - * - * Usage: - * $(".fancybox").fancybox({ - * helpers : { - * media: true - * } - * }); - * - * Set custom URL parameters: - * $(".fancybox").fancybox({ - * helpers : { - * media: { - * youtube : { - * params : { - * autoplay : 0 - * } - * } - * } - * } - * }); - * - * Or: - * $(".fancybox").fancybox({, - * helpers : { - * media: true - * }, - * youtube : { - * autoplay: 0 - * } - * }); - * - * Supports: - * - * Youtube - * http://www.youtube.com/watch?v=opj24KnzrWo - * http://www.youtube.com/embed/opj24KnzrWo - * http://youtu.be/opj24KnzrWo - * Vimeo - * http://vimeo.com/40648169 - * http://vimeo.com/channels/staffpicks/38843628 - * http://vimeo.com/groups/surrealism/videos/36516384 - * http://player.vimeo.com/video/45074303 - * Metacafe - * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/ - * http://www.metacafe.com/watch/7635964/ - * Dailymotion - * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people - * Twitvid - * http://twitvid.com/QY7MD - * Twitpic - * http://twitpic.com/7p93st - * Instagram - * http://instagr.am/p/IejkuUGxQn/ - * http://instagram.com/p/IejkuUGxQn/ - * Google maps - * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17 - * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 - * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56 - */ -(function ($) { - "use strict"; - - //Shortcut for fancyBox object - var F = $.fancybox, - format = function( url, rez, params ) { - params = params || ''; - - if ( $.type( params ) === "object" ) { - params = $.param(params, true); - } - - $.each(rez, function(key, value) { - url = url.replace( '$' + key, value || '' ); - }); - - if (params.length) { - url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params; - } - - return url; - }; - - //Add helper object - F.helpers.media = { - defaults : { - youtube : { - matcher : /(youtube\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i, - params : { - autoplay : 1, - autohide : 1, - fs : 1, - rel : 0, - hd : 1, - wmode : 'opaque', - enablejsapi : 1 - }, - type : 'iframe', - url : '//www.youtube.com/embed/$3' - }, - vimeo : { - matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/, - params : { - autoplay : 1, - hd : 1, - show_title : 1, - show_byline : 1, - show_portrait : 0, - fullscreen : 1 - }, - type : 'iframe', - url : '//player.vimeo.com/video/$1' - }, - metacafe : { - matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/, - params : { - autoPlay : 'yes' - }, - type : 'swf', - url : function( rez, params, obj ) { - obj.swf.flashVars = 'playerVars=' + $.param( params, true ); - - return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf'; - } - }, - dailymotion : { - matcher : /dailymotion.com\/video\/(.*)\/?(.*)/, - params : { - additionalInfos : 0, - autoStart : 1 - }, - type : 'swf', - url : '//www.dailymotion.com/swf/video/$1' - }, - twitvid : { - matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i, - params : { - autoplay : 0 - }, - type : 'iframe', - url : '//www.twitvid.com/embed.php?guid=$1' - }, - twitpic : { - matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i, - type : 'image', - url : '//twitpic.com/show/full/$1/' - }, - instagram : { - matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, - type : 'image', - url : '//$1/p/$2/media/' - }, - google_maps : { - matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i, - type : 'iframe', - url : function( rez ) { - return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed'); - } - } - }, - - beforeLoad : function(opts, obj) { - var url = obj.href || '', - type = false, - what, - item, - rez, - params; - - for (what in opts) { - item = opts[ what ]; - rez = url.match( item.matcher ); - - if (rez) { - type = item.type; - params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null)); - - url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params ); - - break; - } - } - - if (type) { - obj.href = url; - obj.type = type; - - obj.autoHeight = false; - } - } - }; - -}(jQuery)); \ No newline at end of file diff --git a/pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.css b/pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.css deleted file mode 100644 index e40ae820b..000000000 --- a/pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.css +++ /dev/null @@ -1,54 +0,0 @@ -#fancybox-thumbs { - position: fixed; - left: 0; - width: 100%; - overflow: hidden; - z-index: 8050; -} - -#fancybox-thumbs.bottom { - bottom: 2px; -} - -#fancybox-thumbs.top { - top: 2px; -} - -#fancybox-thumbs ul { - position: relative; - list-style: none; - margin: 0; - padding: 0; -} - -#fancybox-thumbs ul li { - float: left; - padding: 1px; - opacity: 0.5; -} - -#fancybox-thumbs ul li.active { - opacity: 0.75; - padding: 0; - border: 1px solid #fff; -} - -#fancybox-thumbs ul li:hover { - opacity: 1; -} - -#fancybox-thumbs ul li a { - display: block; - position: relative; - overflow: hidden; - border: 1px solid #222; - background: #111; - outline: none; -} - -#fancybox-thumbs ul li img { - display: block; - position: relative; - border: 0; - padding: 0; -} \ No newline at end of file diff --git a/pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.js b/pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.js deleted file mode 100644 index 5db3d4ac2..000000000 --- a/pykeg/web/static/fancybox/helpers/jquery.fancybox-thumbs.js +++ /dev/null @@ -1,162 +0,0 @@ - /*! - * Thumbnail helper for fancyBox - * version: 1.0.7 (Mon, 01 Oct 2012) - * @requires fancyBox v2.0 or later - * - * Usage: - * $(".fancybox").fancybox({ - * helpers : { - * thumbs: { - * width : 50, - * height : 50 - * } - * } - * }); - * - */ -(function ($) { - //Shortcut for fancyBox object - var F = $.fancybox; - - //Add helper object - F.helpers.thumbs = { - defaults : { - width : 50, // thumbnail width - height : 50, // thumbnail height - position : 'bottom', // 'top' or 'bottom' - source : function ( item ) { // function to obtain the URL of the thumbnail image - var href; - - if (item.element) { - href = $(item.element).find('img').attr('src'); - } - - if (!href && item.type === 'image' && item.href) { - href = item.href; - } - - return href; - } - }, - - wrap : null, - list : null, - width : 0, - - init: function (opts, obj) { - var that = this, - list, - thumbWidth = opts.width, - thumbHeight = opts.height, - thumbSource = opts.source; - - //Build list structure - list = ''; - - for (var n = 0; n < obj.group.length; n++) { - list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>'; - } - - this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position).appendTo('body'); - this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap); - - //Load each thumbnail - $.each(obj.group, function (i) { - var href = thumbSource( obj.group[ i ] ); - - if (!href) { - return; - } - - $("<img />").load(function () { - var width = this.width, - height = this.height, - widthRatio, heightRatio, parent; - - if (!that.list || !width || !height) { - return; - } - - //Calculate thumbnail width/height and center it - widthRatio = width / thumbWidth; - heightRatio = height / thumbHeight; - - parent = that.list.children().eq(i).find('a'); - - if (widthRatio >= 1 && heightRatio >= 1) { - if (widthRatio > heightRatio) { - width = Math.floor(width / heightRatio); - height = thumbHeight; - - } else { - width = thumbWidth; - height = Math.floor(height / widthRatio); - } - } - - $(this).css({ - width : width, - height : height, - top : Math.floor(thumbHeight / 2 - height / 2), - left : Math.floor(thumbWidth / 2 - width / 2) - }); - - parent.width(thumbWidth).height(thumbHeight); - - $(this).hide().appendTo(parent).fadeIn(300); - - }).attr('src', href); - }); - - //Set initial width - this.width = this.list.children().eq(0).outerWidth(true); - - this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); - }, - - beforeLoad: function (opts, obj) { - //Remove self if gallery do not have at least two items - if (obj.group.length < 2) { - obj.helpers.thumbs = false; - - return; - } - - //Increase bottom margin to give space for thumbs - obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); - }, - - afterShow: function (opts, obj) { - //Check if exists and create or update list - if (this.list) { - this.onUpdate(opts, obj); - - } else { - this.init(opts, obj); - } - - //Set active element - this.list.children().removeClass('active').eq(obj.index).addClass('active'); - }, - - //Center list - onUpdate: function (opts, obj) { - if (this.list) { - this.list.stop(true).animate({ - 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) - }, 150); - } - }, - - beforeClose: function () { - if (this.wrap) { - this.wrap.remove(); - } - - this.wrap = null; - this.list = null; - this.width = 0; - } - } - -}(jQuery)); \ No newline at end of file diff --git a/pykeg/web/static/fancybox/jquery.fancybox.css b/pykeg/web/static/fancybox/jquery.fancybox.css deleted file mode 100644 index bd3289b2d..000000000 --- a/pykeg/web/static/fancybox/jquery.fancybox.css +++ /dev/null @@ -1,249 +0,0 @@ -/*! fancyBox v2.1.4 fancyapps.com | fancyapps.com/fancybox/#license */ -.fancybox-wrap, -.fancybox-skin, -.fancybox-outer, -.fancybox-inner, -.fancybox-image, -.fancybox-wrap iframe, -.fancybox-wrap object, -.fancybox-nav, -.fancybox-nav span, -.fancybox-tmp -{ - padding: 0; - margin: 0; - border: 0; - outline: none; - vertical-align: top; -} - -.fancybox-wrap { - position: absolute; - top: 0; - left: 0; - z-index: 8020; -} - -.fancybox-skin { - position: relative; - background: #f9f9f9; - color: #444; - text-shadow: none; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.fancybox-opened { - z-index: 8030; -} - -.fancybox-opened .fancybox-skin { - -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); -} - -.fancybox-outer, .fancybox-inner { - position: relative; -} - -.fancybox-inner { - overflow: hidden; -} - -.fancybox-type-iframe .fancybox-inner { - -webkit-overflow-scrolling: touch; -} - -.fancybox-error { - color: #444; - font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; - margin: 0; - padding: 15px; - white-space: nowrap; -} - -.fancybox-image, .fancybox-iframe { - display: block; - width: 100%; - height: 100%; -} - -.fancybox-image { - max-width: 100%; - max-height: 100%; -} - -#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { - background-image: url('fancybox_sprite.png'); -} - -#fancybox-loading { - position: fixed; - top: 50%; - left: 50%; - margin-top: -22px; - margin-left: -22px; - background-position: 0 -108px; - opacity: 0.8; - cursor: pointer; - z-index: 8060; -} - -#fancybox-loading div { - width: 44px; - height: 44px; - background: url('fancybox_loading.gif') center center no-repeat; -} - -.fancybox-close { - position: absolute; - top: -18px; - right: -18px; - width: 36px; - height: 36px; - cursor: pointer; - z-index: 8040; -} - -.fancybox-nav { - position: absolute; - top: 0; - width: 40%; - height: 100%; - cursor: pointer; - text-decoration: none; - background: transparent url('blank.gif'); /* helps IE */ - -webkit-tap-highlight-color: rgba(0,0,0,0); - z-index: 8040; -} - -.fancybox-prev { - left: 0; -} - -.fancybox-next { - right: 0; -} - -.fancybox-nav span { - position: absolute; - top: 50%; - width: 36px; - height: 34px; - margin-top: -18px; - cursor: pointer; - z-index: 8040; - visibility: hidden; -} - -.fancybox-prev span { - left: 10px; - background-position: 0 -36px; -} - -.fancybox-next span { - right: 10px; - background-position: 0 -72px; -} - -.fancybox-nav:hover span { - visibility: visible; -} - -.fancybox-tmp { - position: absolute; - top: -99999px; - left: -99999px; - visibility: hidden; - max-width: 99999px; - max-height: 99999px; - overflow: visible !important; -} - -/* Overlay helper */ - -.fancybox-lock { - overflow: hidden; -} - -.fancybox-overlay { - position: absolute; - top: 0; - left: 0; - overflow: hidden; - display: none; - z-index: 8010; - background: url('fancybox_overlay.png'); -} - -.fancybox-overlay-fixed { - position: fixed; - bottom: 0; - right: 0; -} - -.fancybox-lock .fancybox-overlay { - overflow: auto; - overflow-y: scroll; -} - -/* Title helper */ - -.fancybox-title { - visibility: hidden; - font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; - position: relative; - text-shadow: none; - z-index: 8050; -} - -.fancybox-opened .fancybox-title { - visibility: visible; -} - -.fancybox-title-float-wrap { - position: absolute; - bottom: 0; - right: 50%; - margin-bottom: -35px; - z-index: 8050; - text-align: center; -} - -.fancybox-title-float-wrap .child { - display: inline-block; - margin-right: -100%; - padding: 2px 20px; - background: transparent; /* Fallback for web browsers that doesn't support RGBa */ - background: rgba(0, 0, 0, 0.8); - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; - text-shadow: 0 1px 2px #222; - color: #FFF; - font-weight: bold; - line-height: 24px; - white-space: nowrap; -} - -.fancybox-title-outside-wrap { - position: relative; - margin-top: 10px; - color: #fff; -} - -.fancybox-title-inside-wrap { - padding-top: 10px; -} - -.fancybox-title-over-wrap { - position: absolute; - bottom: 0; - left: 0; - color: #fff; - padding: 10px; - background: #000; - background: rgba(0, 0, 0, .8); -} \ No newline at end of file diff --git a/pykeg/web/static/fancybox/jquery.fancybox.js b/pykeg/web/static/fancybox/jquery.fancybox.js deleted file mode 100644 index bd153b013..000000000 --- a/pykeg/web/static/fancybox/jquery.fancybox.js +++ /dev/null @@ -1,1983 +0,0 @@ -/*! - * fancyBox - jQuery Plugin - * version: 2.1.4 (Thu, 10 Jan 2013) - * @requires jQuery v1.6 or later - * - * Examples at http://fancyapps.com/fancybox/ - * License: www.fancyapps.com/fancybox/#license - * - * Copyright 2012 Janis Skarnelis - janis@fancyapps.com - * - */ - -(function (window, document, $, undefined) { - "use strict"; - - var W = $(window), - D = $(document), - F = $.fancybox = function () { - F.open.apply( this, arguments ); - }, - IE = navigator.userAgent.match(/msie/), - didUpdate = null, - isTouch = document.createTouch !== undefined, - - isQuery = function(obj) { - return obj && obj.hasOwnProperty && obj instanceof $; - }, - isString = function(str) { - return str && $.type(str) === "string"; - }, - isPercentage = function(str) { - return isString(str) && str.indexOf('%') > 0; - }, - isScrollable = function(el) { - return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); - }, - getScalar = function(orig, dim) { - var value = parseInt(orig, 10) || 0; - - if (dim && isPercentage(orig)) { - value = F.getViewport()[ dim ] / 100 * value; - } - - return Math.ceil(value); - }, - getValue = function(value, dim) { - return getScalar(value, dim) + 'px'; - }; - - $.extend(F, { - // The current version of fancyBox - version: '2.1.4', - - defaults: { - padding : 15, - margin : 20, - - width : 800, - height : 600, - minWidth : 100, - minHeight : 100, - maxWidth : 9999, - maxHeight : 9999, - - autoSize : true, - autoHeight : false, - autoWidth : false, - - autoResize : true, - autoCenter : !isTouch, - fitToView : true, - aspectRatio : false, - topRatio : 0.5, - leftRatio : 0.5, - - scrolling : 'auto', // 'auto', 'yes' or 'no' - wrapCSS : '', - - arrows : true, - closeBtn : true, - closeClick : false, - nextClick : false, - mouseWheel : true, - autoPlay : false, - playSpeed : 3000, - preload : 3, - modal : false, - loop : true, - - ajax : { - dataType : 'html', - headers : { 'X-fancyBox': true } - }, - iframe : { - scrolling : 'auto', - preload : true - }, - swf : { - wmode: 'transparent', - allowfullscreen : 'true', - allowscriptaccess : 'always' - }, - - keys : { - next : { - 13 : 'left', // enter - 34 : 'up', // page down - 39 : 'left', // right arrow - 40 : 'up' // down arrow - }, - prev : { - 8 : 'right', // backspace - 33 : 'down', // page up - 37 : 'right', // left arrow - 38 : 'down' // up arrow - }, - close : [27], // escape key - play : [32], // space - start/stop slideshow - toggle : [70] // letter "f" - toggle fullscreen - }, - - direction : { - next : 'left', - prev : 'right' - }, - - scrollOutside : true, - - // Override some properties - index : 0, - type : null, - href : null, - content : null, - title : null, - - // HTML templates - tpl: { - wrap : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>', - image : '<img class="fancybox-image" src="{href}" alt="" />', - iframe : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>', - error : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>', - closeBtn : '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>', - next : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>', - prev : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>' - }, - - // Properties for each animation type - // Opening fancyBox - openEffect : 'fade', // 'elastic', 'fade' or 'none' - openSpeed : 250, - openEasing : 'swing', - openOpacity : true, - openMethod : 'zoomIn', - - // Closing fancyBox - closeEffect : 'fade', // 'elastic', 'fade' or 'none' - closeSpeed : 250, - closeEasing : 'swing', - closeOpacity : true, - closeMethod : 'zoomOut', - - // Changing next gallery item - nextEffect : 'elastic', // 'elastic', 'fade' or 'none' - nextSpeed : 250, - nextEasing : 'swing', - nextMethod : 'changeIn', - - // Changing previous gallery item - prevEffect : 'elastic', // 'elastic', 'fade' or 'none' - prevSpeed : 250, - prevEasing : 'swing', - prevMethod : 'changeOut', - - // Enable default helpers - helpers : { - overlay : true, - title : true - }, - - // Callbacks - onCancel : $.noop, // If canceling - beforeLoad : $.noop, // Before loading - afterLoad : $.noop, // After loading - beforeShow : $.noop, // Before changing in current item - afterShow : $.noop, // After opening - beforeChange : $.noop, // Before changing gallery item - beforeClose : $.noop, // Before closing - afterClose : $.noop // After closing - }, - - //Current state - group : {}, // Selected group - opts : {}, // Group options - previous : null, // Previous element - coming : null, // Element being loaded - current : null, // Currently loaded element - isActive : false, // Is activated - isOpen : false, // Is currently open - isOpened : false, // Have been fully opened at least once - - wrap : null, - skin : null, - outer : null, - inner : null, - - player : { - timer : null, - isActive : false - }, - - // Loaders - ajaxLoad : null, - imgPreload : null, - - // Some collections - transitions : {}, - helpers : {}, - - /* - * Static methods - */ - - open: function (group, opts) { - if (!group) { - return; - } - - if (!$.isPlainObject(opts)) { - opts = {}; - } - - // Close if already active - if (false === F.close(true)) { - return; - } - - // Normalize group - if (!$.isArray(group)) { - group = isQuery(group) ? $(group).get() : [group]; - } - - // Recheck if the type of each element is `object` and set content type (image, ajax, etc) - $.each(group, function(i, element) { - var obj = {}, - href, - title, - content, - type, - rez, - hrefParts, - selector; - - if ($.type(element) === "object") { - // Check if is DOM element - if (element.nodeType) { - element = $(element); - } - - if (isQuery(element)) { - obj = { - href : element.data('fancybox-href') || element.attr('href'), - title : element.data('fancybox-title') || element.attr('title'), - isDom : true, - element : element - }; - - if ($.metadata) { - $.extend(true, obj, element.metadata()); - } - - } else { - obj = element; - } - } - - href = opts.href || obj.href || (isString(element) ? element : null); - title = opts.title !== undefined ? opts.title : obj.title || ''; - - content = opts.content || obj.content; - type = content ? 'html' : (opts.type || obj.type); - - if (!type && obj.isDom) { - type = element.data('fancybox-type'); - - if (!type) { - rez = element.prop('class').match(/fancybox\.(\w+)/); - type = rez ? rez[1] : null; - } - } - - if (isString(href)) { - // Try to guess the content type - if (!type) { - if (F.isImage(href)) { - type = 'image'; - - } else if (F.isSWF(href)) { - type = 'swf'; - - } else if (href.charAt(0) === '#') { - type = 'inline'; - - } else if (isString(element)) { - type = 'html'; - content = element; - } - } - - // Split url into two pieces with source url and content selector, e.g, - // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" - if (type === 'ajax') { - hrefParts = href.split(/\s+/, 2); - href = hrefParts.shift(); - selector = hrefParts.shift(); - } - } - - if (!content) { - if (type === 'inline') { - if (href) { - content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 - - } else if (obj.isDom) { - content = element; - } - - } else if (type === 'html') { - content = href; - - } else if (!type && !href && obj.isDom) { - type = 'inline'; - content = element; - } - } - - $.extend(obj, { - href : href, - type : type, - content : content, - title : title, - selector : selector - }); - - group[ i ] = obj; - }); - - // Extend the defaults - F.opts = $.extend(true, {}, F.defaults, opts); - - // All options are merged recursive except keys - if (opts.keys !== undefined) { - F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; - } - - F.group = group; - - return F._start(F.opts.index); - }, - - // Cancel image loading or abort ajax request - cancel: function () { - var coming = F.coming; - - if (!coming || false === F.trigger('onCancel')) { - return; - } - - F.hideLoading(); - - if (F.ajaxLoad) { - F.ajaxLoad.abort(); - } - - F.ajaxLoad = null; - - if (F.imgPreload) { - F.imgPreload.onload = F.imgPreload.onerror = null; - } - - if (coming.wrap) { - coming.wrap.stop(true, true).trigger('onReset').remove(); - } - - F.coming = null; - - // If the first item has been canceled, then clear everything - if (!F.current) { - F._afterZoomOut( coming ); - } - }, - - // Start closing animation if is open; remove immediately if opening/closing - close: function (event) { - F.cancel(); - - if (false === F.trigger('beforeClose')) { - return; - } - - F.unbindEvents(); - - if (!F.isActive) { - return; - } - - if (!F.isOpen || event === true) { - $('.fancybox-wrap').stop(true).trigger('onReset').remove(); - - F._afterZoomOut(); - - } else { - F.isOpen = F.isOpened = false; - F.isClosing = true; - - $('.fancybox-item, .fancybox-nav').remove(); - - F.wrap.stop(true, true).removeClass('fancybox-opened'); - - F.transitions[ F.current.closeMethod ](); - } - }, - - // Manage slideshow: - // $.fancybox.play(); - toggle slideshow - // $.fancybox.play( true ); - start - // $.fancybox.play( false ); - stop - play: function ( action ) { - var clear = function () { - clearTimeout(F.player.timer); - }, - set = function () { - clear(); - - if (F.current && F.player.isActive) { - F.player.timer = setTimeout(F.next, F.current.playSpeed); - } - }, - stop = function () { - clear(); - - $('body').unbind('.player'); - - F.player.isActive = false; - - F.trigger('onPlayEnd'); - }, - start = function () { - if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { - F.player.isActive = true; - - $('body').bind({ - 'afterShow.player onUpdate.player' : set, - 'onCancel.player beforeClose.player' : stop, - 'beforeLoad.player' : clear - }); - - set(); - - F.trigger('onPlayStart'); - } - }; - - if (action === true || (!F.player.isActive && action !== false)) { - start(); - } else { - stop(); - } - }, - - // Navigate to next gallery item - next: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.next; - } - - F.jumpto(current.index + 1, direction, 'next'); - } - }, - - // Navigate to previous gallery item - prev: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.prev; - } - - F.jumpto(current.index - 1, direction, 'prev'); - } - }, - - // Navigate to gallery item by index - jumpto: function ( index, direction, router ) { - var current = F.current; - - if (!current) { - return; - } - - index = getScalar(index); - - F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; - F.router = router || 'jumpto'; - - if (current.loop) { - if (index < 0) { - index = current.group.length + (index % current.group.length); - } - - index = index % current.group.length; - } - - if (current.group[ index ] !== undefined) { - F.cancel(); - - F._start(index); - } - }, - - // Center inside viewport and toggle position type to fixed or absolute if needed - reposition: function (e, onlyAbsolute) { - var current = F.current, - wrap = current ? current.wrap : null, - pos; - - if (wrap) { - pos = F._getPosition(onlyAbsolute); - - if (e && e.type === 'scroll') { - delete pos.position; - - wrap.stop(true, true).animate(pos, 200); - - } else { - wrap.css(pos); - - current.pos = $.extend({}, current.dim, pos); - } - } - }, - - update: function (e) { - var type = (e && e.type), - anyway = !type || type === 'orientationchange'; - - if (anyway) { - clearTimeout(didUpdate); - - didUpdate = null; - } - - if (!F.isOpen || didUpdate) { - return; - } - - didUpdate = setTimeout(function() { - var current = F.current; - - if (!current || F.isClosing) { - return; - } - - F.wrap.removeClass('fancybox-tmp'); - - if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { - F._setDimension(); - } - - if (!(type === 'scroll' && current.canShrink)) { - F.reposition(e); - } - - F.trigger('onUpdate'); - - didUpdate = null; - - }, (anyway && !isTouch ? 0 : 300)); - }, - - // Shrink content to fit inside viewport or restore if resized - toggle: function ( action ) { - if (F.isOpen) { - F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; - - // Help browser to restore document dimensions - if (isTouch) { - F.wrap.removeAttr('style').addClass('fancybox-tmp'); - - F.trigger('onUpdate'); - } - - F.update(); - } - }, - - hideLoading: function () { - D.unbind('.loading'); - - $('#fancybox-loading').remove(); - }, - - showLoading: function () { - var el, viewport; - - F.hideLoading(); - - el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body'); - - // If user will press the escape-button, the request will be canceled - D.bind('keydown.loading', function(e) { - if ((e.which || e.keyCode) === 27) { - e.preventDefault(); - - F.cancel(); - } - }); - - if (!F.defaults.fixed) { - viewport = F.getViewport(); - - el.css({ - position : 'absolute', - top : (viewport.h * 0.5) + viewport.y, - left : (viewport.w * 0.5) + viewport.x - }); - } - }, - - getViewport: function () { - var locked = (F.current && F.current.locked) || false, - rez = { - x: W.scrollLeft(), - y: W.scrollTop() - }; - - if (locked) { - rez.w = locked[0].clientWidth; - rez.h = locked[0].clientHeight; - - } else { - // See http://bugs.jquery.com/ticket/6724 - rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); - rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); - } - - return rez; - }, - - // Unbind the keyboard / clicking actions - unbindEvents: function () { - if (F.wrap && isQuery(F.wrap)) { - F.wrap.unbind('.fb'); - } - - D.unbind('.fb'); - W.unbind('.fb'); - }, - - bindEvents: function () { - var current = F.current, - keys; - - if (!current) { - return; - } - - // Changing document height on iOS devices triggers a 'resize' event, - // that can change document height... repeating infinitely - W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); - - keys = current.keys; - - if (keys) { - D.bind('keydown.fb', function (e) { - var code = e.which || e.keyCode, - target = e.target || e.srcElement; - - // Skip esc key if loading, because showLoading will cancel preloading - if (code === 27 && F.coming) { - return false; - } - - // Ignore key combinations and key events within form elements - if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { - $.each(keys, function(i, val) { - if (current.group.length > 1 && val[ code ] !== undefined) { - F[ i ]( val[ code ] ); - - e.preventDefault(); - return false; - } - - if ($.inArray(code, val) > -1) { - F[ i ] (); - - e.preventDefault(); - return false; - } - }); - } - }); - } - - if ($.fn.mousewheel && current.mouseWheel) { - F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { - var target = e.target || null, - parent = $(target), - canScroll = false; - - while (parent.length) { - if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { - break; - } - - canScroll = isScrollable( parent[0] ); - parent = $(parent).parent(); - } - - if (delta !== 0 && !canScroll) { - if (F.group.length > 1 && !current.canShrink) { - if (deltaY > 0 || deltaX > 0) { - F.prev( deltaY > 0 ? 'down' : 'left' ); - - } else if (deltaY < 0 || deltaX < 0) { - F.next( deltaY < 0 ? 'up' : 'right' ); - } - - e.preventDefault(); - } - } - }); - } - }, - - trigger: function (event, o) { - var ret, obj = o || F.coming || F.current; - - if (!obj) { - return; - } - - if ($.isFunction( obj[event] )) { - ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); - } - - if (ret === false) { - return false; - } - - if (obj.helpers) { - $.each(obj.helpers, function (helper, opts) { - if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { - opts = $.extend(true, {}, F.helpers[helper].defaults, opts); - - F.helpers[helper][event](opts, obj); - } - }); - } - - $.event.trigger(event + '.fb'); - }, - - isImage: function (str) { - return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i); - }, - - isSWF: function (str) { - return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); - }, - - _start: function (index) { - var coming = {}, - obj, - href, - type, - margin, - padding; - - index = getScalar( index ); - obj = F.group[ index ] || null; - - if (!obj) { - return false; - } - - coming = $.extend(true, {}, F.opts, obj); - - // Convert margin and padding properties to array - top, right, bottom, left - margin = coming.margin; - padding = coming.padding; - - if ($.type(margin) === 'number') { - coming.margin = [margin, margin, margin, margin]; - } - - if ($.type(padding) === 'number') { - coming.padding = [padding, padding, padding, padding]; - } - - // 'modal' propery is just a shortcut - if (coming.modal) { - $.extend(true, coming, { - closeBtn : false, - closeClick : false, - nextClick : false, - arrows : false, - mouseWheel : false, - keys : null, - helpers: { - overlay : { - closeClick : false - } - } - }); - } - - // 'autoSize' property is a shortcut, too - if (coming.autoSize) { - coming.autoWidth = coming.autoHeight = true; - } - - if (coming.width === 'auto') { - coming.autoWidth = true; - } - - if (coming.height === 'auto') { - coming.autoHeight = true; - } - - /* - * Add reference to the group, so it`s possible to access from callbacks, example: - * afterLoad : function() { - * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); - * } - */ - - coming.group = F.group; - coming.index = index; - - // Give a chance for callback or helpers to update coming item (type, title, etc) - F.coming = coming; - - if (false === F.trigger('beforeLoad')) { - F.coming = null; - - return; - } - - type = coming.type; - href = coming.href; - - if (!type) { - F.coming = null; - - //If we can not determine content type then drop silently or display next/prev item if looping through gallery - if (F.current && F.router && F.router !== 'jumpto') { - F.current.index = index; - - return F[ F.router ]( F.direction ); - } - - return false; - } - - F.isActive = true; - - if (type === 'image' || type === 'swf') { - coming.autoHeight = coming.autoWidth = false; - coming.scrolling = 'visible'; - } - - if (type === 'image') { - coming.aspectRatio = true; - } - - if (type === 'iframe' && isTouch) { - coming.scrolling = 'scroll'; - } - - // Build the neccessary markup - coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); - - $.extend(coming, { - skin : $('.fancybox-skin', coming.wrap), - outer : $('.fancybox-outer', coming.wrap), - inner : $('.fancybox-inner', coming.wrap) - }); - - $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { - coming.skin.css('padding' + v, getValue(coming.padding[ i ])); - }); - - F.trigger('onReady'); - - // Check before try to load; 'inline' and 'html' types need content, others - href - if (type === 'inline' || type === 'html') { - if (!coming.content || !coming.content.length) { - return F._error( 'content' ); - } - - } else if (!href) { - return F._error( 'href' ); - } - - if (type === 'image') { - F._loadImage(); - - } else if (type === 'ajax') { - F._loadAjax(); - - } else if (type === 'iframe') { - F._loadIframe(); - - } else { - F._afterLoad(); - } - }, - - _error: function ( type ) { - $.extend(F.coming, { - type : 'html', - autoWidth : true, - autoHeight : true, - minWidth : 0, - minHeight : 0, - scrolling : 'no', - hasError : type, - content : F.coming.tpl.error - }); - - F._afterLoad(); - }, - - _loadImage: function () { - // Reset preload image so it is later possible to check "complete" property - var img = F.imgPreload = new Image(); - - img.onload = function () { - this.onload = this.onerror = null; - - F.coming.width = this.width; - F.coming.height = this.height; - - F._afterLoad(); - }; - - img.onerror = function () { - this.onload = this.onerror = null; - - F._error( 'image' ); - }; - - img.src = F.coming.href; - - if (img.complete !== true) { - F.showLoading(); - } - }, - - _loadAjax: function () { - var coming = F.coming; - - F.showLoading(); - - F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { - url: coming.href, - error: function (jqXHR, textStatus) { - if (F.coming && textStatus !== 'abort') { - F._error( 'ajax', jqXHR ); - - } else { - F.hideLoading(); - } - }, - success: function (data, textStatus) { - if (textStatus === 'success') { - coming.content = data; - - F._afterLoad(); - } - } - })); - }, - - _loadIframe: function() { - var coming = F.coming, - iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) - .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) - .attr('src', coming.href); - - // This helps IE - $(coming.wrap).bind('onReset', function () { - try { - $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); - } catch (e) {} - }); - - if (coming.iframe.preload) { - F.showLoading(); - - iframe.one('load', function() { - $(this).data('ready', 1); - - // iOS will lose scrolling if we resize - if (!isTouch) { - $(this).bind('load.fb', F.update); - } - - // Without this trick: - // - iframe won't scroll on iOS devices - // - IE7 sometimes displays empty iframe - $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); - - F._afterLoad(); - }); - } - - coming.content = iframe.appendTo( coming.inner ); - - if (!coming.iframe.preload) { - F._afterLoad(); - } - }, - - _preloadImages: function() { - var group = F.group, - current = F.current, - len = group.length, - cnt = current.preload ? Math.min(current.preload, len - 1) : 0, - item, - i; - - for (i = 1; i <= cnt; i += 1) { - item = group[ (current.index + i ) % len ]; - - if (item.type === 'image' && item.href) { - new Image().src = item.href; - } - } - }, - - _afterLoad: function () { - var coming = F.coming, - previous = F.current, - placeholder = 'fancybox-placeholder', - current, - content, - type, - scrolling, - href, - embed; - - F.hideLoading(); - - if (!coming || F.isActive === false) { - return; - } - - if (false === F.trigger('afterLoad', coming, previous)) { - coming.wrap.stop(true).trigger('onReset').remove(); - - F.coming = null; - - return; - } - - if (previous) { - F.trigger('beforeChange', previous); - - previous.wrap.stop(true).removeClass('fancybox-opened') - .find('.fancybox-item, .fancybox-nav') - .remove(); - } - - F.unbindEvents(); - - current = coming; - content = coming.content; - type = coming.type; - scrolling = coming.scrolling; - - $.extend(F, { - wrap : current.wrap, - skin : current.skin, - outer : current.outer, - inner : current.inner, - current : current, - previous : previous - }); - - href = current.href; - - switch (type) { - case 'inline': - case 'ajax': - case 'html': - if (current.selector) { - content = $('<div>').html(content).find(current.selector); - - } else if (isQuery(content)) { - if (!content.data(placeholder)) { - content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() ); - } - - content = content.show().detach(); - - current.wrap.bind('onReset', function () { - if ($(this).find(content).length) { - content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); - } - }); - } - break; - - case 'image': - content = current.tpl.image.replace('{href}', href); - break; - - case 'swf': - content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>'; - embed = ''; - - $.each(current.swf, function(name, val) { - content += '<param name="' + name + '" value="' + val + '"></param>'; - embed += ' ' + name + '="' + val + '"'; - }); - - content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>'; - break; - } - - if (!(isQuery(content) && content.parent().is(current.inner))) { - current.inner.append( content ); - } - - // Give a chance for helpers or callbacks to update elements - F.trigger('beforeShow'); - - // Set scrolling before calculating dimensions - current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); - - // Set initial dimensions and start position - F._setDimension(); - - F.reposition(); - - F.isOpen = false; - F.coming = null; - - F.bindEvents(); - - if (!F.isOpened) { - $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); - - } else if (previous.prevMethod) { - F.transitions[ previous.prevMethod ](); - } - - F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); - - F._preloadImages(); - }, - - _setDimension: function () { - var viewport = F.getViewport(), - steps = 0, - canShrink = false, - canExpand = false, - wrap = F.wrap, - skin = F.skin, - inner = F.inner, - current = F.current, - width = current.width, - height = current.height, - minWidth = current.minWidth, - minHeight = current.minHeight, - maxWidth = current.maxWidth, - maxHeight = current.maxHeight, - scrolling = current.scrolling, - scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, - margin = current.margin, - wMargin = getScalar(margin[1] + margin[3]), - hMargin = getScalar(margin[0] + margin[2]), - wPadding, - hPadding, - wSpace, - hSpace, - origWidth, - origHeight, - origMaxWidth, - origMaxHeight, - ratio, - width_, - height_, - maxWidth_, - maxHeight_, - iframe, - body; - - // Reset dimensions so we could re-check actual size - wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); - - wPadding = getScalar(skin.outerWidth(true) - skin.width()); - hPadding = getScalar(skin.outerHeight(true) - skin.height()); - - // Any space between content and viewport (margin, padding, border, title) - wSpace = wMargin + wPadding; - hSpace = hMargin + hPadding; - - origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; - origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; - - if (current.type === 'iframe') { - iframe = current.content; - - if (current.autoHeight && iframe.data('ready') === 1) { - try { - if (iframe[0].contentWindow.document.location) { - inner.width( origWidth ).height(9999); - - body = iframe.contents().find('body'); - - if (scrollOut) { - body.css('overflow-x', 'hidden'); - } - - origHeight = body.height(); - } - - } catch (e) {} - } - - } else if (current.autoWidth || current.autoHeight) { - inner.addClass( 'fancybox-tmp' ); - - // Set width or height in case we need to calculate only one dimension - if (!current.autoWidth) { - inner.width( origWidth ); - } - - if (!current.autoHeight) { - inner.height( origHeight ); - } - - if (current.autoWidth) { - origWidth = inner.width(); - } - - if (current.autoHeight) { - origHeight = inner.height(); - } - - inner.removeClass( 'fancybox-tmp' ); - } - - width = getScalar( origWidth ); - height = getScalar( origHeight ); - - ratio = origWidth / origHeight; - - // Calculations for the content - minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); - maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); - - minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); - maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); - - // These will be used to determine if wrap can fit in the viewport - origMaxWidth = maxWidth; - origMaxHeight = maxHeight; - - if (current.fitToView) { - maxWidth = Math.min(viewport.w - wSpace, maxWidth); - maxHeight = Math.min(viewport.h - hSpace, maxHeight); - } - - maxWidth_ = viewport.w - wMargin; - maxHeight_ = viewport.h - hMargin; - - if (current.aspectRatio) { - if (width > maxWidth) { - width = maxWidth; - height = getScalar(width / ratio); - } - - if (height > maxHeight) { - height = maxHeight; - width = getScalar(height * ratio); - } - - if (width < minWidth) { - width = minWidth; - height = getScalar(width / ratio); - } - - if (height < minHeight) { - height = minHeight; - width = getScalar(height * ratio); - } - - } else { - width = Math.max(minWidth, Math.min(width, maxWidth)); - - if (current.autoHeight && current.type !== 'iframe') { - inner.width( width ); - - height = inner.height(); - } - - height = Math.max(minHeight, Math.min(height, maxHeight)); - } - - // Try to fit inside viewport (including the title) - if (current.fitToView) { - inner.width( width ).height( height ); - - wrap.width( width + wPadding ); - - // Real wrap dimensions - width_ = wrap.width(); - height_ = wrap.height(); - - if (current.aspectRatio) { - while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { - if (steps++ > 19) { - break; - } - - height = Math.max(minHeight, Math.min(maxHeight, height - 10)); - width = getScalar(height * ratio); - - if (width < minWidth) { - width = minWidth; - height = getScalar(width / ratio); - } - - if (width > maxWidth) { - width = maxWidth; - height = getScalar(width / ratio); - } - - inner.width( width ).height( height ); - - wrap.width( width + wPadding ); - - width_ = wrap.width(); - height_ = wrap.height(); - } - - } else { - width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); - height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); - } - } - - if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { - width += scrollOut; - } - - inner.width( width ).height( height ); - - wrap.width( width + wPadding ); - - width_ = wrap.width(); - height_ = wrap.height(); - - canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; - canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); - - $.extend(current, { - dim : { - width : getValue( width_ ), - height : getValue( height_ ) - }, - origWidth : origWidth, - origHeight : origHeight, - canShrink : canShrink, - canExpand : canExpand, - wPadding : wPadding, - hPadding : hPadding, - wrapSpace : height_ - skin.outerHeight(true), - skinSpace : skin.height() - height - }); - - if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { - inner.height('auto'); - } - }, - - _getPosition: function (onlyAbsolute) { - var current = F.current, - viewport = F.getViewport(), - margin = current.margin, - width = F.wrap.width() + margin[1] + margin[3], - height = F.wrap.height() + margin[0] + margin[2], - rez = { - position: 'absolute', - top : margin[0], - left : margin[3] - }; - - if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { - rez.position = 'fixed'; - - } else if (!current.locked) { - rez.top += viewport.y; - rez.left += viewport.x; - } - - rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); - rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); - - return rez; - }, - - _afterZoomIn: function () { - var current = F.current; - - if (!current) { - return; - } - - F.isOpen = F.isOpened = true; - - F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); - - F.update(); - - // Assign a click event - if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { - F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { - if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { - e.preventDefault(); - - F[ current.closeClick ? 'close' : 'next' ](); - } - }); - } - - // Create a close button - if (current.closeBtn) { - $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { - e.preventDefault(); - - F.close(); - }); - } - - // Create navigation arrows - if (current.arrows && F.group.length > 1) { - if (current.loop || current.index > 0) { - $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); - } - - if (current.loop || current.index < F.group.length - 1) { - $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); - } - } - - F.trigger('afterShow'); - - // Stop the slideshow if this is the last item - if (!current.loop && current.index === current.group.length - 1) { - F.play( false ); - - } else if (F.opts.autoPlay && !F.player.isActive) { - F.opts.autoPlay = false; - - F.play(); - } - }, - - _afterZoomOut: function ( obj ) { - obj = obj || F.current; - - $('.fancybox-wrap').trigger('onReset').remove(); - - $.extend(F, { - group : {}, - opts : {}, - router : false, - current : null, - isActive : false, - isOpened : false, - isOpen : false, - isClosing : false, - wrap : null, - skin : null, - outer : null, - inner : null - }); - - F.trigger('afterClose', obj); - } - }); - - /* - * Default transitions - */ - - F.transitions = { - getOrigPosition: function () { - var current = F.current, - element = current.element, - orig = current.orig, - pos = {}, - width = 50, - height = 50, - hPadding = current.hPadding, - wPadding = current.wPadding, - viewport = F.getViewport(); - - if (!orig && current.isDom && element.is(':visible')) { - orig = element.find('img:first'); - - if (!orig.length) { - orig = element; - } - } - - if (isQuery(orig)) { - pos = orig.offset(); - - if (orig.is('img')) { - width = orig.outerWidth(); - height = orig.outerHeight(); - } - - } else { - pos.top = viewport.y + (viewport.h - height) * current.topRatio; - pos.left = viewport.x + (viewport.w - width) * current.leftRatio; - } - - if (F.wrap.css('position') === 'fixed' || current.locked) { - pos.top -= viewport.y; - pos.left -= viewport.x; - } - - pos = { - top : getValue(pos.top - hPadding * current.topRatio), - left : getValue(pos.left - wPadding * current.leftRatio), - width : getValue(width + wPadding), - height : getValue(height + hPadding) - }; - - return pos; - }, - - step: function (now, fx) { - var ratio, - padding, - value, - prop = fx.prop, - current = F.current, - wrapSpace = current.wrapSpace, - skinSpace = current.skinSpace; - - if (prop === 'width' || prop === 'height') { - ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); - - if (F.isClosing) { - ratio = 1 - ratio; - } - - padding = prop === 'width' ? current.wPadding : current.hPadding; - value = now - padding; - - F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); - F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); - } - }, - - zoomIn: function () { - var current = F.current, - startPos = current.pos, - effect = current.openEffect, - elastic = effect === 'elastic', - endPos = $.extend({opacity : 1}, startPos); - - // Remove "position" property that breaks older IE - delete endPos.position; - - if (elastic) { - startPos = this.getOrigPosition(); - - if (current.openOpacity) { - startPos.opacity = 0.1; - } - - } else if (effect === 'fade') { - startPos.opacity = 0.1; - } - - F.wrap.css(startPos).animate(endPos, { - duration : effect === 'none' ? 0 : current.openSpeed, - easing : current.openEasing, - step : elastic ? this.step : null, - complete : F._afterZoomIn - }); - }, - - zoomOut: function () { - var current = F.current, - effect = current.closeEffect, - elastic = effect === 'elastic', - endPos = {opacity : 0.1}; - - if (elastic) { - endPos = this.getOrigPosition(); - - if (current.closeOpacity) { - endPos.opacity = 0.1; - } - } - - F.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : current.closeSpeed, - easing : current.closeEasing, - step : elastic ? this.step : null, - complete : F._afterZoomOut - }); - }, - - changeIn: function () { - var current = F.current, - effect = current.nextEffect, - startPos = current.pos, - endPos = { opacity : 1 }, - direction = F.direction, - distance = 200, - field; - - startPos.opacity = 0.1; - - if (effect === 'elastic') { - field = direction === 'down' || direction === 'up' ? 'top' : 'left'; - - if (direction === 'down' || direction === 'right') { - startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); - endPos[ field ] = '+=' + distance + 'px'; - - } else { - startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); - endPos[ field ] = '-=' + distance + 'px'; - } - } - - // Workaround for http://bugs.jquery.com/ticket/12273 - if (effect === 'none') { - F._afterZoomIn(); - - } else { - F.wrap.css(startPos).animate(endPos, { - duration : current.nextSpeed, - easing : current.nextEasing, - complete : F._afterZoomIn - }); - } - }, - - changeOut: function () { - var previous = F.previous, - effect = previous.prevEffect, - endPos = { opacity : 0.1 }, - direction = F.direction, - distance = 200; - - if (effect === 'elastic') { - endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; - } - - previous.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : previous.prevSpeed, - easing : previous.prevEasing, - complete : function () { - $(this).trigger('onReset').remove(); - } - }); - } - }; - - /* - * Overlay helper - */ - - F.helpers.overlay = { - defaults : { - closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay - speedOut : 200, // duration of fadeOut animation - showEarly : true, // indicates if should be opened immediately or wait until the content is ready - css : {}, // custom CSS properties - locked : !isTouch, // if true, the content will be locked into overlay - fixed : true // if false, the overlay CSS position property will not be set to "fixed" - }, - - overlay : null, // current handle - fixed : false, // indicates if the overlay has position "fixed" - - // Public methods - create : function(opts) { - opts = $.extend({}, this.defaults, opts); - - if (this.overlay) { - this.close(); - } - - this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( 'body' ); - this.fixed = false; - - if (opts.fixed && F.defaults.fixed) { - this.overlay.addClass('fancybox-overlay-fixed'); - - this.fixed = true; - } - }, - - open : function(opts) { - var that = this; - - opts = $.extend({}, this.defaults, opts); - - if (this.overlay) { - this.overlay.unbind('.overlay').width('auto').height('auto'); - - } else { - this.create(opts); - } - - if (!this.fixed) { - W.bind('resize.overlay', $.proxy( this.update, this) ); - - this.update(); - } - - if (opts.closeClick) { - this.overlay.bind('click.overlay', function(e) { - if ($(e.target).hasClass('fancybox-overlay')) { - if (F.isActive) { - F.close(); - } else { - that.close(); - } - } - }); - } - - this.overlay.css( opts.css ).show(); - }, - - close : function() { - $('.fancybox-overlay').remove(); - - W.unbind('resize.overlay'); - - this.overlay = null; - - if (this.margin !== false) { - $('body').css('margin-right', this.margin); - - this.margin = false; - } - - if (this.el) { - this.el.removeClass('fancybox-lock'); - } - }, - - // Private, callbacks - - update : function () { - var width = '100%', offsetWidth; - - // Reset width/height so it will not mess - this.overlay.width(width).height('100%'); - - // jQuery does not return reliable result for IE - if (IE) { - offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); - - if (D.width() > offsetWidth) { - width = D.width(); - } - - } else if (D.width() > W.width()) { - width = D.width(); - } - - this.overlay.width(width).height(D.height()); - }, - - // This is where we can manipulate DOM, because later it would cause iframes to reload - onReady : function (opts, obj) { - $('.fancybox-overlay').stop(true, true); - - if (!this.overlay) { - this.margin = D.height() > W.height() || $('body').css('overflow-y') === 'scroll' ? $('body').css('margin-right') : false; - this.el = document.all && !document.querySelector ? $('html') : $('body'); - - this.create(opts); - } - - if (opts.locked && this.fixed) { - obj.locked = this.overlay.append( obj.wrap ); - obj.fixed = false; - } - - if (opts.showEarly === true) { - this.beforeShow.apply(this, arguments); - } - }, - - beforeShow : function(opts, obj) { - if (obj.locked) { - this.el.addClass('fancybox-lock'); - - if (this.margin !== false) { - $('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth); - } - } - - this.open(opts); - }, - - onUpdate : function() { - if (!this.fixed) { - this.update(); - } - }, - - afterClose: function (opts) { - // Remove overlay if exists and fancyBox is not opening - // (e.g., it is not being open using afterClose callback) - if (this.overlay && !F.isActive) { - this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); - } - } - }; - - /* - * Title helper - */ - - F.helpers.title = { - defaults : { - type : 'float', // 'float', 'inside', 'outside' or 'over', - position : 'bottom' // 'top' or 'bottom' - }, - - beforeShow: function (opts) { - var current = F.current, - text = current.title, - type = opts.type, - title, - target; - - if ($.isFunction(text)) { - text = text.call(current.element, current); - } - - if (!isString(text) || $.trim(text) === '') { - return; - } - - title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">' + text + '</div>'); - - switch (type) { - case 'inside': - target = F.skin; - break; - - case 'outside': - target = F.wrap; - break; - - case 'over': - target = F.inner; - break; - - default: // 'float' - target = F.skin; - - title.appendTo('body'); - - if (IE) { - title.width( title.width() ); - } - - title.wrapInner('<span class="child"></span>'); - - //Increase bottom margin so this title will also fit into viewport - F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); - break; - } - - title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); - } - }; - - // jQuery plugin initialization - $.fn.fancybox = function (options) { - var index, - that = $(this), - selector = this.selector || '', - run = function(e) { - var what = $(this).blur(), idx = index, relType, relVal; - - if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { - relType = options.groupAttr || 'data-fancybox-group'; - relVal = what.attr(relType); - - if (!relVal) { - relType = 'rel'; - relVal = what.get(0)[ relType ]; - } - - if (relVal && relVal !== '' && relVal !== 'nofollow') { - what = selector.length ? $(selector) : that; - what = what.filter('[' + relType + '="' + relVal + '"]'); - idx = what.index(this); - } - - options.index = idx; - - // Stop an event from bubbling if everything is fine - if (F.open(what, options) !== false) { - e.preventDefault(); - } - } - }; - - options = options || {}; - index = options.index || 0; - - if (!selector || options.live === false) { - that.unbind('click.fb-start').bind('click.fb-start', run); - - } else { - D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); - } - - this.filter('[data-fancybox-start=1]').trigger('click'); - - return this; - }; - - // Tests that need a body at doc ready - D.ready(function() { - if ( $.scrollbarWidth === undefined ) { - // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth - $.scrollbarWidth = function() { - var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'), - child = parent.children(), - width = child.innerWidth() - child.height( 99 ).innerWidth(); - - parent.remove(); - - return width; - }; - } - - if ( $.support.fixedPosition === undefined ) { - $.support.fixedPosition = (function() { - var elem = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'), - fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); - - elem.remove(); - - return fixed; - }()); - } - - $.extend(F.defaults, { - scrollbarWidth : $.scrollbarWidth(), - fixed : $.support.fixedPosition, - parent : $('body') - }); - }); - -}(window, document, jQuery)); \ No newline at end of file diff --git a/pykeg/web/static/fancybox/jquery.fancybox.pack.js b/pykeg/web/static/fancybox/jquery.fancybox.pack.js deleted file mode 100644 index 9f6a628eb..000000000 --- a/pykeg/web/static/fancybox/jquery.fancybox.pack.js +++ /dev/null @@ -1,45 +0,0 @@ -/*! fancyBox v2.1.4 fancyapps.com | fancyapps.com/fancybox/#license */ -(function(C,z,f,r){var q=f(C),n=f(z),b=f.fancybox=function(){b.open.apply(this,arguments)},H=navigator.userAgent.match(/msie/),w=null,s=z.createTouch!==r,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},p=function(a){return a&&"string"===f.type(a)},F=function(a){return p(a)&&0<a.indexOf("%")},l=function(a,d){var e=parseInt(a,10)||0;d&&F(a)&&(e*=b.getViewport()[d]/100);return Math.ceil(e)},x=function(a,b){return l(a,b)+"px"};f.extend(b,{version:"2.1.4",defaults:{padding:15,margin:20,width:800, -height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!s,fitToView:!0,aspectRatio:!1,topRatio:0.5,leftRatio:0.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},keys:{next:{13:"left", -34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+ -(H?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, -openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, -isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, -c.metadata())):k=c);g=d.href||k.href||(p(c)?c:null);h=d.title!==r?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));p(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":p(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(p(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& -k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==r&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| -b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= -setTimeout(b.next,b.current.playSpeed))},c=function(){d();f("body").unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index<b.group.length-1))b.player.isActive=!0,f("body").bind({"afterShow.player onUpdate.player":e,"onCancel.player beforeClose.player":c,"beforeLoad.player":d}),e(),b.trigger("onPlayStart")}else c()},next:function(a){var d=b.current;d&&(p(a)||(a=d.direction.next),b.jumpto(d.index+1,a,"next"))}, -prev:function(a){var d=b.current;d&&(p(a)||(a=d.direction.prev),b.jumpto(d.index-1,a,"prev"))},jumpto:function(a,d,e){var c=b.current;c&&(a=l(a),b.direction=d||c.direction[a>=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==r&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({}, -e.dim,k)))},update:function(a){var d=a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(w),w=null);b.isOpen&&!w&&(w=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),w=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"), -b.trigger("onUpdate")),b.update())},hideLoading:function(){n.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('<div id="fancybox-loading"><div></div></div>').click(b.cancel).appendTo("body");n.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked|| -!1,d={x:q.scrollLeft(),y:q.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&C.innerWidth?C.innerWidth:q.width(),d.h=s&&C.innerHeight?C.innerHeight:q.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");n.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(q.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&n.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k= -e.target||e.srcElement;if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1<a.group.length&&k[c]!==r)return b[d](k[c]),e.preventDefault(),!1;if(-1<f.inArray(c,k))return b[d](),e.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(d,c,k,g){for(var h=f(d.target||null),j=!1;h.length&&!j&&!h.is(".fancybox-skin")&&!h.is(".fancybox-wrap");)j=h[0]&&!(h[0].style.overflow&& -"hidden"===h[0].style.overflow)&&(h[0].clientWidth&&h[0].scrollWidth>h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1<b.group.length&&!a.canShrink){if(0<g||0<k)b.prev(0<g?"down":"left");else if(0>g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d, -e){e&&(b.helpers[d]&&f.isFunction(b.helpers[d][a]))&&(e=f.extend(!0,{},b.helpers[d].defaults,e),b.helpers[d][a](e,c))});f.event.trigger(a+".fb")}},isImage:function(a){return p(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i)},isSWF:function(a){return p(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&& -(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive= -!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,x(d.padding[a]))});b.trigger("onReady"); -if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width= -this.width;b.coming.height=this.height;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g, -(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a= -b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents(); -e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("<div>").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder", -!1)}));break;case "image":e=a.tpl.image.replace("{href}",g);break;case "swf":e='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',h="",f.each(a.swf,function(a,b){e+='<param name="'+a+'" value="'+b+'"></param>';h+=" "+a+'="'+b+'"'}),e+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+h+"></embed></object>"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow"); -a.inner.css("overflow","yes"===k?"scroll":"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth, -v=h.maxHeight,s=h.scrolling,q=h.scrollOutside?h.scrollbarWidth:0,y=h.margin,p=l(y[1]+y[3]),r=l(y[0]+y[2]),z,A,t,D,B,G,C,E,w;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");y=l(k.outerWidth(!0)-k.width());z=l(k.outerHeight(!0)-k.height());A=p+y;t=r+z;D=F(c)?(a.w-A)*l(c)/100:c;B=F(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(w=h.content,h.autoHeight&&1===w.data("ready"))try{w[0].contentWindow.document.location&&(g.width(D).height(9999),G=w.contents().find("body"),q&&G.css("overflow-x", -"hidden"),B=G.height())}catch(H){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(D),h.autoHeight||g.height(B),h.autoWidth&&(D=g.width()),h.autoHeight&&(B=g.height()),g.removeClass("fancybox-tmp");c=l(D);j=l(B);E=D/B;m=l(F(m)?l(m,"w")-A:m);n=l(F(n)?l(n,"w")-A:n);u=l(F(u)?l(u,"h")-t:u);v=l(F(v)?l(v,"h")-t:v);G=n;C=v;h.fitToView&&(n=Math.min(a.w-A,n),v=Math.min(a.h-t,v));A=a.w-p;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/E)),j>v&&(j=v,c=l(j*E)),c<m&&(c=m,j=l(c/E)),j<u&& -(j=u,c=l(j*E))):(c=Math.max(m,Math.min(c,n)),h.autoHeight&&"iframe"!==h.type&&(g.width(c),j=g.height()),j=Math.max(u,Math.min(j,v)));if(h.fitToView)if(g.width(c).height(j),e.width(c+y),a=e.width(),p=e.height(),h.aspectRatio)for(;(a>A||p>r)&&(c>m&&j>u)&&!(19<d++);)j=Math.max(u,Math.min(v,j-10)),c=l(j*E),c<m&&(c=m,j=l(c/E)),c>n&&(c=n,j=l(c/E)),g.width(c).height(j),e.width(c+y),a=e.width(),p=e.height();else c=Math.max(m,Math.min(c,c-(a-A))),j=Math.max(u,Math.min(j,j-(p-r)));q&&("auto"===s&&j<B&&c+y+ -q<A)&&(c+=q);g.width(c).height(j);e.width(c+y);a=e.width();p=e.height();e=(a>A||p>r)&&c>m&&j>u;c=h.aspectRatio?c<G&&j<C&&c<D&&j<B:(c<G||j<C)&&(c<D||j<B);f.extend(h,{dim:{width:x(a),height:x(p)},origWidth:D,origHeight:B,canShrink:e,canExpand:c,wPadding:y,hPadding:z,wrapSpace:p-k.outerHeight(!0),skinSpace:k.height()-j});!w&&(h.autoHeight&&j>u&&j<v&&!c)&&g.height("auto")},_getPosition:function(a){var d=b.current,e=b.getViewport(),c=d.margin,f=b.wrap.width()+c[1]+c[3],g=b.wrap.height()+c[0]+c[2],c={position:"absolute", -top:c[0],left:c[3]};d.autoCenter&&d.fixed&&!a&&g<=e.h&&f<=e.w?c.position="fixed":d.locked||(c.top+=e.y,c.left+=e.x);c.top=x(Math.max(c.top,c.top+(e.h-g)*d.topRatio));c.left=x(Math.max(c.left,c.left+(e.w-f)*d.leftRatio));return c},_afterZoomIn:function(){var a=b.current;a&&(b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened"),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(d){!f(d.target).is("a")&&!f(d.target).parent().is("a")&& -(d.preventDefault(),b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),!a.loop&&a.index===a.group.length-1?b.play(!1):b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=!1,b.play()))},_afterZoomOut:function(a){a= -a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,d=a.element,e=a.orig,c={},f=50,g=50,h=a.hPadding,j=a.wPadding,m=b.getViewport();!e&&(a.isDom&&d.is(":visible"))&&(e=d.find("img:first"),e.length||(e=d));t(e)?(c=e.offset(),e.is("img")&&(f=e.outerWidth(),g=e.outerHeight())): -(c.top=m.y+(m.h-g)*a.topRatio,c.left=m.x+(m.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)c.top-=m.y,c.left-=m.x;return c={top:x(c.top-h*a.topRatio),left:x(c.left-j*a.leftRatio),width:x(f+j),height:x(g+h)}},step:function(a,d){var e,c,f=d.prop;c=b.current;var g=c.wrapSpace,h=c.skinSpace;if("width"===f||"height"===f)e=d.end===d.start?1:(a-d.start)/(d.end-d.start),b.isClosing&&(e=1-e),c="width"===f?c.wPadding:c.hPadding,c=a-c,b.skin[f](l("width"===f?c:c-g*e)),b.inner[f](l("width"=== -f?c:c-g*e-h*e))},zoomIn:function(){var a=b.current,d=a.pos,e=a.openEffect,c="elastic"===e,k=f.extend({opacity:1},d);delete k.position;c?(d=this.getOrigPosition(),a.openOpacity&&(d.opacity=0.1)):"fade"===e&&(d.opacity=0.1);b.wrap.css(d).animate(k,{duration:"none"===e?0:a.openSpeed,easing:a.openEasing,step:c?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,d=a.closeEffect,e="elastic"===d,c={opacity:0.1};e&&(c=this.getOrigPosition(),a.closeOpacity&&(c.opacity=0.1));b.wrap.animate(c, -{duration:"none"===d?0:a.closeSpeed,easing:a.closeEasing,step:e?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,d=a.nextEffect,e=a.pos,c={opacity:1},f=b.direction,g;e.opacity=0.1;"elastic"===d&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(e[g]=x(l(e[g])-200),c[g]="+=200px"):(e[g]=x(l(e[g])+200),c[g]="-=200px"));"none"===d?b._afterZoomIn():b.wrap.css(e).animate(c,{duration:a.nextSpeed,easing:a.nextEasing,complete:b._afterZoomIn})},changeOut:function(){var a= -b.previous,d=a.prevEffect,e={opacity:0.1},c=b.direction;"elastic"===d&&(e["down"===c||"up"===c?"top":"left"]=("up"===c||"left"===c?"-":"+")+"=200px");a.wrap.animate(e,{duration:"none"===d?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!s,fixed:!0},overlay:null,fixed:!1,create:function(a){a=f.extend({},this.defaults,a);this.overlay&&this.close();this.overlay=f('<div class="fancybox-overlay"></div>').appendTo("body"); -this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){f(a.target).hasClass("fancybox-overlay")&&(b.isActive?b.close():d.close())});this.overlay.css(a.css).show()}, -close:function(){f(".fancybox-overlay").remove();q.unbind("resize.overlay");this.overlay=null;!1!==this.margin&&(f("body").css("margin-right",this.margin),this.margin=!1);this.el&&this.el.removeClass("fancybox-lock")},update:function(){var a="100%",b;this.overlay.width(a).height("100%");H?(b=Math.max(z.documentElement.offsetWidth,z.body.offsetWidth),n.width()>b&&(a=n.width())):n.width()>q.width()&&(a=n.width());this.overlay.width(a).height(n.height())},onReady:function(a,b){f(".fancybox-overlay").stop(!0, -!0);this.overlay||(this.margin=n.height()>q.height()||"scroll"===f("body").css("overflow-y")?f("body").css("margin-right"):!1,this.el=z.all&&!z.querySelector?f("html"):f("body"),this.create(a));a.locked&&this.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&(this.el.addClass("fancybox-lock"),!1!==this.margin&&f("body").css("margin-right",l(this.margin)+b.scrollbarWidth));this.open(a)},onUpdate:function(){this.fixed|| -this.update()},afterClose:function(a){this.overlay&&!b.isActive&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(p(e)&&""!==f.trim(e)){d=f('<div class="fancybox-title fancybox-title-'+c+'-wrap">'+e+"</div>");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"), -H&&d.width(d.width()),d.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+ -'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):n.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};n.ready(function(){f.scrollbarWidth===r&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(), -b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===r){var a=f.support,d=f('<div style="position:fixed;top:20px;"></div>').appendTo("body"),e=20===d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")})})})(window,document,jQuery); \ No newline at end of file diff --git a/pykeg/web/static/highcharts/gfx/vml-radial-gradient.png b/pykeg/web/static/highcharts/gfx/vml-radial-gradient.png deleted file mode 100644 index 504ef6e09a9859007977d8d97f2246450f1586db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24270 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 N002ovPDHLkV1iUL-sk`T diff --git a/pykeg/web/static/highcharts/graphics/skies.jpg b/pykeg/web/static/highcharts/graphics/skies.jpg deleted file mode 100644 index 259f46a2cb74299aafcc105bce0b8f98b696ce89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43395 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 W`6N3Pb_5=7@xsa7@k6j6KmXaKzWcZU diff --git a/pykeg/web/static/highcharts/graphics/snow.png b/pykeg/web/static/highcharts/graphics/snow.png deleted file mode 100644 index 0171485b029105c0d6aba43eae04cf1806fb06df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4679 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 JPDHLkV1i@C%xeGu diff --git a/pykeg/web/static/highcharts/graphics/sun.png b/pykeg/web/static/highcharts/graphics/sun.png deleted file mode 100644 index 2c89e40bd3ab0f7fc985af1bfc55ac356c2960ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3934 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 diff --git a/pykeg/web/static/highcharts/js/adapters/mootools-adapter.js b/pykeg/web/static/highcharts/js/adapters/mootools-adapter.js deleted file mode 100644 index d3bb92e33..000000000 --- a/pykeg/web/static/highcharts/js/adapters/mootools-adapter.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - MooTools adapter - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(){var e=window,h=document,f=e.MooTools.version.substring(0,3),i=f==="1.2"||f==="1.1",j=i||f==="1.3",g=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr("d",a.step(f[0],f[1],d,this.toD));else return e.apply(this, -arguments)}},adapterRun:function(a,b){if(b==="width"||b==="height")return parseInt(document.id(a).getStyle(b),10)},getScript:function(a,b){var c=h.getElementsByTagName("head")[0],d=h.createElement("script");d.type="text/javascript";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var a=arguments;this.attr.call(this,a[0],a[1][0])},a.$family=function(){return!0},a.getComputedStyle=function(){return a.element.getComputedStyle.apply(a.element, -arguments)};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:document.id(a),g({transition:Fx.Transitions.Quad.easeInOut},c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent("complete",f);c.start(b);a.fx=c},each:function(a,b){return i?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){a=a.getPosition();return{left:a.x,top:a.y}},extendWithEvents:function(a){a.addEvent||(a.nodeName? -document.id(a):g(a,new Events))},addEvent:function(a,b,c){typeof b==="string"&&(b==="unload"&&(b="beforeunload"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!=="string"&&a.addEvent&&(b?(b==="unload"&&(b="beforeunload"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=g(b,c);if(!b.target&&b.event)b.target=b.event.target;b.preventDefault=function(){d= -null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){if(a.page)a.pageX=a.page.x,a.pageY=a.page.y;return a},stop:function(a){a.fx&&a.fx.cancel()}}})(); diff --git a/pykeg/web/static/highcharts/js/adapters/mootools-adapter.src.js b/pykeg/web/static/highcharts/js/adapters/mootools-adapter.src.js deleted file mode 100644 index f93554d0a..000000000 --- a/pykeg/web/static/highcharts/js/adapters/mootools-adapter.src.js +++ /dev/null @@ -1,316 +0,0 @@ -/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * MooTools adapter - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */ - -(function () { - -var win = window, - doc = document, - mooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number - legacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not. - legacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent. - $extend = win.$extend || function () { - return Object.append.apply(Object, arguments); - }; - -win.HighchartsAdapter = { - /** - * Initialize the adapter. This is run once as Highcharts is first run. - * @param {Object} pathAnim The helper object to do animations across adapters. - */ - init: function (pathAnim) { - var fxProto = Fx.prototype, - fxStart = fxProto.start, - morphProto = Fx.Morph.prototype, - morphCompute = morphProto.compute; - - // override Fx.start to allow animation of SVG element wrappers - /*jslint unparam: true*//* allow unused parameters in fx functions */ - fxProto.start = function (from, to) { - var fx = this, - elem = fx.element; - - // special for animating paths - if (from.d) { - //this.fromD = this.element.d.split(' '); - fx.paths = pathAnim.init( - elem, - elem.d, - fx.toD - ); - } - fxStart.apply(fx, arguments); - - return this; // chainable - }; - - // override Fx.step to allow animation of SVG element wrappers - morphProto.compute = function (from, to, delta) { - var fx = this, - paths = fx.paths; - - if (paths) { - fx.element.attr( - 'd', - pathAnim.step(paths[0], paths[1], delta, fx.toD) - ); - } else { - return morphCompute.apply(fx, arguments); - } - }; - /*jslint unparam: false*/ - }, - - /** - * Run a general method on the framework, following jQuery syntax - * @param {Object} el The HTML element - * @param {String} method Which method to run on the wrapped element - */ - adapterRun: function (el, method) { - - // This currently works for getting inner width and height. If adding - // more methods later, we need a conditional implementation for each. - if (method === 'width' || method === 'height') { - return parseInt(document.id(el).getStyle(method), 10); - } - }, - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - getScript: function (scriptLocation, callback) { - // We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script. - var head = doc.getElementsByTagName('head')[0]; - var script = doc.createElement('script'); - - script.type = 'text/javascript'; - script.src = scriptLocation; - script.onload = callback; - - head.appendChild(script); - }, - - /** - * Animate a HTML element or SVG element wrapper - * @param {Object} el - * @param {Object} params - * @param {Object} options jQuery-like animation options: duration, easing, callback - */ - animate: function (el, params, options) { - var isSVGElement = el.attr, - effect, - complete = options && options.complete; - - if (isSVGElement && !el.setStyle) { - // add setStyle and getStyle methods for internal use in Moo - el.getStyle = el.attr; - el.setStyle = function () { // property value is given as array in Moo - break it down - var args = arguments; - this.attr.call(this, args[0], args[1][0]); - }; - // dirty hack to trick Moo into handling el as an element wrapper - el.$family = function () { return true; }; - el.getComputedStyle = function () { - return el.element.getComputedStyle.apply(el.element, arguments); - }; - } - - // stop running animations - win.HighchartsAdapter.stop(el); - - // define and run the effect - effect = new Fx.Morph( - isSVGElement ? el : document.id(el), - $extend({ - transition: Fx.Transitions.Quad.easeInOut - }, options) - ); - - // Make sure that the element reference is set when animating svg elements - if (isSVGElement) { - effect.element = el; - } - - // special treatment for paths - if (params.d) { - effect.toD = params.d; - } - - // jQuery-like events - if (complete) { - effect.addEvent('complete', complete); - } - - // run - effect.start(params); - - // record for use in stop method - el.fx = effect; - }, - - /** - * MooTool's each function - * - */ - each: function (arr, fn) { - return legacy ? - $each(arr, fn) : - Array.each(arr, fn); - }, - - /** - * Map an array - * @param {Array} arr - * @param {Function} fn - */ - map: function (arr, fn) { - return arr.map(fn); - }, - - /** - * Grep or filter an array - * @param {Array} arr - * @param {Function} fn - */ - grep: function (arr, fn) { - return arr.filter(fn); - }, - - /** - * Return the index of an item in an array, or -1 if not matched - */ - inArray: function (item, arr, from) { - return arr ? arr.indexOf(item, from) : -1; - }, - - /** - * Get the offset of an element relative to the top left corner of the web page - */ - offset: function (el) { - var offsets = el.getPosition(); // #1496 - return { - left: offsets.x, - top: offsets.y - }; - }, - - /** - * Extends an object with Events, if its not done - */ - extendWithEvents: function (el) { - // if the addEvent method is not defined, el is a custom Highcharts object - // like series or point - if (!el.addEvent) { - if (el.nodeName) { - el = document.id(el); // a dynamically generated node - } else { - $extend(el, new Events()); // a custom object - } - } - }, - - /** - * Add an event listener - * @param {Object} el HTML element or custom object - * @param {String} type Event type - * @param {Function} fn Event handler - */ - addEvent: function (el, type, fn) { - if (typeof type === 'string') { // chart broke due to el being string, type function - - if (type === 'unload') { // Moo self destructs before custom unload events - type = 'beforeunload'; - } - - win.HighchartsAdapter.extendWithEvents(el); - - el.addEvent(type, fn); - } - }, - - removeEvent: function (el, type, fn) { - if (typeof el === 'string') { - // el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out. - return; - } - - if (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove - if (type) { - if (type === 'unload') { // Moo self destructs before custom unload events - type = 'beforeunload'; - } - - if (fn) { - el.removeEvent(type, fn); - } else if (el.removeEvents) { // #958 - el.removeEvents(type); - } - } else { - el.removeEvents(); - } - } - }, - - fireEvent: function (el, event, eventArguments, defaultFunction) { - var eventArgs = { - type: event, - target: el - }; - // create an event object that keeps all functions - event = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs); - event = $extend(event, eventArguments); - - // When running an event on the Chart.prototype, MooTools nests the target in event.event - if (!event.target && event.event) { - event.target = event.event.target; - } - - // override the preventDefault function to be able to use - // this for custom events - event.preventDefault = function () { - defaultFunction = null; - }; - // if fireEvent is not available on the object, there hasn't been added - // any events to it above - if (el.fireEvent) { - el.fireEvent(event.type, event); - } - - // fire the default if it is passed and it is not prevented above - if (defaultFunction) { - defaultFunction(event); - } - }, - - /** - * Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346. - */ - washMouseEvent: function (e) { - if (e.page) { - e.pageX = e.page.x; - e.pageY = e.page.y; - } - return e; - }, - - /** - * Stop running animations on the object - */ - stop: function (el) { - if (el.fx) { - el.fx.cancel(); - } - } -}; - -}()); diff --git a/pykeg/web/static/highcharts/js/adapters/prototype-adapter.js b/pykeg/web/static/highcharts/js/adapters/prototype-adapter.js deleted file mode 100644 index 22bb50b58..000000000 --- a/pykeg/web/static/highcharts/js/adapters/prototype-adapter.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - Prototype adapter - - @author Michael Nelson, Torstein Honsi. - - Feel free to use and modify this script. - Highcharts license: www.highcharts.com/license. -*/ -var HighchartsAdapter=function(){var f=typeof Effect!=="undefined";return{init:function(a){if(f)Effect.HighchartsTransition=Class.create(Effect.Base,{initialize:function(b,c,d,g){var e;this.element=b;this.key=c;e=b.attr?b.attr(c):$(b).getStyle(c);if(c==="d")this.paths=a.init(b,b.d,d),this.toD=d,e=0,d=1;this.start(Object.extend(g||{},{from:e,to:d,attribute:c}))},setup:function(){HighchartsAdapter._extend(this.element);if(!this.element._highchart_animation)this.element._highchart_animation={};this.element._highchart_animation[this.key]= -this},update:function(b){var c=this.paths,d=this.element;c&&(b=a.step(c[0],c[1],b,this.toD));d.attr?d.element&&d.attr(this.options.attribute,b):(c={},c[this.options.attribute]=b,$(d).setStyle(c))},finish:function(){this.element&&this.element._highchart_animation&&delete this.element._highchart_animation[this.key]}})},adapterRun:function(a,b){return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=$$("head")[0];c&&c.appendChild((new Element("script",{type:"text/javascript",src:a})).observe("load", -b))},addNS:function(a){var b=/^(?:click|mouse(?:down|up|over|move|out))$/;return/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/.test(a)||b.test(a)?a:"h:"+a},addEvent:function(a,b,c){a.addEventListener||a.attachEvent?Event.observe($(a),HighchartsAdapter.addNS(b),c):(HighchartsAdapter._extend(a),a._highcharts_observe(b,c))},animate:function(a,b,c){var d,c=c||{};c.delay=0;c.duration=(c.duration||500)/1E3;c.afterFinish=c.complete;if(f)for(d in b)new Effect.HighchartsTransition($(a), -d,b[d],c);else{if(a.attr)for(d in b)a.attr(d,b[d]);c.complete&&c.complete()}a.attr||$(a).setStyle(b)},stop:function(a){var b;if(a._highcharts_extended&&a._highchart_animation)for(b in a._highchart_animation)a._highchart_animation[b].cancel()},each:function(a,b){$A(a).each(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){return $(a).cumulativeOffset()},fireEvent:function(a,b,c,d){a.fire?a.fire(HighchartsAdapter.addNS(b),c):a._highcharts_extended&&(c=c||{},a._highcharts_fire(b, -c));c&&c.defaultPrevented&&(d=null);d&&d(c)},removeEvent:function(a,b,c){$(a).stopObserving&&(b&&(b=HighchartsAdapter.addNS(b)),$(a).stopObserving(b,c));window===a?Event.stopObserving(a,b,c):(HighchartsAdapter._extend(a),a._highcharts_stop_observing(b,c))},washMouseEvent:function(a){return a},grep:function(a,b){return a.findAll(b)},map:function(a,b){return a.map(b)},_extend:function(a){a._highcharts_extended||Object.extend(a,{_highchart_events:{},_highchart_animation:null,_highcharts_extended:!0, -_highcharts_observe:function(b,a){this._highchart_events[b]=[this._highchart_events[b],a].compact().flatten()},_highcharts_stop_observing:function(b,a){b?a?this._highchart_events[b]=[this._highchart_events[b]].compact().flatten().without(a):delete this._highchart_events[b]:this._highchart_events={}},_highcharts_fire:function(a,c){var d=this;(this._highchart_events[a]||[]).each(function(a){if(!c.stopped)c.preventDefault=function(){c.defaultPrevented=!0},c.target=d,a.bind(this)(c)===!1&&c.preventDefault()}.bind(this))}})}}}(); diff --git a/pykeg/web/static/highcharts/js/adapters/prototype-adapter.src.js b/pykeg/web/static/highcharts/js/adapters/prototype-adapter.src.js deleted file mode 100644 index 39cf39392..000000000 --- a/pykeg/web/static/highcharts/js/adapters/prototype-adapter.src.js +++ /dev/null @@ -1,316 +0,0 @@ -/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * Prototype adapter - * - * @author Michael Nelson, Torstein Honsi. - * - * Feel free to use and modify this script. - * Highcharts license: www.highcharts.com/license. - */ - -// JSLint options: -/*global Effect, Class, Event, Element, $, $$, $A */ - -// Adapter interface between prototype and the Highcharts charting library -var HighchartsAdapter = (function () { - -var hasEffect = typeof Effect !== 'undefined'; - -return { - - /** - * Initialize the adapter. This is run once as Highcharts is first run. - * @param {Object} pathAnim The helper object to do animations across adapters. - */ - init: function (pathAnim) { - if (hasEffect) { - /** - * Animation for Highcharts SVG element wrappers only - * @param {Object} element - * @param {Object} attribute - * @param {Object} to - * @param {Object} options - */ - Effect.HighchartsTransition = Class.create(Effect.Base, { - initialize: function (element, attr, to, options) { - var from, - opts; - - this.element = element; - this.key = attr; - from = element.attr ? element.attr(attr) : $(element).getStyle(attr); - - // special treatment for paths - if (attr === 'd') { - this.paths = pathAnim.init( - element, - element.d, - to - ); - this.toD = to; - - - // fake values in order to read relative position as a float in update - from = 0; - to = 1; - } - - opts = Object.extend((options || {}), { - from: from, - to: to, - attribute: attr - }); - this.start(opts); - }, - setup: function () { - HighchartsAdapter._extend(this.element); - // If this is the first animation on this object, create the _highcharts_animation helper that - // contain pointers to the animation objects. - if (!this.element._highchart_animation) { - this.element._highchart_animation = {}; - } - - // Store a reference to this animation instance. - this.element._highchart_animation[this.key] = this; - }, - update: function (position) { - var paths = this.paths, - element = this.element, - obj; - - if (paths) { - position = pathAnim.step(paths[0], paths[1], position, this.toD); - } - - if (element.attr) { // SVGElement - - if (element.element) { // If not, it has been destroyed (#1405) - element.attr(this.options.attribute, position); - } - - } else { // HTML, #409 - obj = {}; - obj[this.options.attribute] = position; - $(element).setStyle(obj); - } - - }, - finish: function () { - // Delete the property that holds this animation now that it is finished. - // Both canceled animations and complete ones gets a 'finish' call. - if (this.element && this.element._highchart_animation) { // #1405 - delete this.element._highchart_animation[this.key]; - } - } - }); - } - }, - - /** - * Run a general method on the framework, following jQuery syntax - * @param {Object} el The HTML element - * @param {String} method Which method to run on the wrapped element - */ - adapterRun: function (el, method) { - - // This currently works for getting inner width and height. If adding - // more methods later, we need a conditional implementation for each. - return parseInt($(el).getStyle(method), 10); - - }, - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - getScript: function (scriptLocation, callback) { - var head = $$('head')[0]; // Returns an array, so pick the first element. - if (head) { - // Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback - head.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback)); - } - }, - - /** - * Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of - * events that are not recognized as native. - */ - addNS: function (eventName) { - var HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/, - MouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/; - return (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ? - eventName : - 'h:' + eventName; - }, - - // el needs an event to be attached. el is not necessarily a dom element - addEvent: function (el, event, fn) { - if (el.addEventListener || el.attachEvent) { - Event.observe($(el), HighchartsAdapter.addNS(event), fn); - - } else { - HighchartsAdapter._extend(el); - el._highcharts_observe(event, fn); - } - }, - - // motion makes things pretty. use it if effects is loaded, if not... still get to the end result. - animate: function (el, params, options) { - var key, - fx; - - // default options - options = options || {}; - options.delay = 0; - options.duration = (options.duration || 500) / 1000; - options.afterFinish = options.complete; - - // animate wrappers and DOM elements - if (hasEffect) { - for (key in params) { - // The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object - // on the element itself so its not really lost. - fx = new Effect.HighchartsTransition($(el), key, params[key], options); - } - } else { - if (el.attr) { // #409 without effects - for (key in params) { - el.attr(key, params[key]); - } - } - if (options.complete) { - options.complete(); - } - } - - if (!el.attr) { // HTML element, #409 - $(el).setStyle(params); - } - }, - - // this only occurs in higcharts 2.0+ - stop: function (el) { - var key; - if (el._highcharts_extended && el._highchart_animation) { - for (key in el._highchart_animation) { - // Cancel the animation - // The 'finish' function in the Effect object will remove the reference - el._highchart_animation[key].cancel(); - } - } - }, - - // um.. each - each: function (arr, fn) { - $A(arr).each(fn); - }, - - inArray: function (item, arr, from) { - return arr ? arr.indexOf(item, from) : -1; - }, - - /** - * Get the cumulative offset relative to the top left of the page. This method, unlike its - * jQuery and MooTools counterpart, still suffers from issue #208 regarding the position - * of a chart within a fixed container. - */ - offset: function (el) { - return $(el).cumulativeOffset(); - }, - - // fire an event based on an event name (event) and an object (el). - // again, el may not be a dom element - fireEvent: function (el, event, eventArguments, defaultFunction) { - if (el.fire) { - el.fire(HighchartsAdapter.addNS(event), eventArguments); - } else if (el._highcharts_extended) { - eventArguments = eventArguments || {}; - el._highcharts_fire(event, eventArguments); - } - - if (eventArguments && eventArguments.defaultPrevented) { - defaultFunction = null; - } - - if (defaultFunction) { - defaultFunction(eventArguments); - } - }, - - removeEvent: function (el, event, handler) { - if ($(el).stopObserving) { - if (event) { - event = HighchartsAdapter.addNS(event); - } - $(el).stopObserving(event, handler); - } if (window === el) { - Event.stopObserving(el, event, handler); - } else { - HighchartsAdapter._extend(el); - el._highcharts_stop_observing(event, handler); - } - }, - - washMouseEvent: function (e) { - return e; - }, - - // um, grep - grep: function (arr, fn) { - return arr.findAll(fn); - }, - - // um, map - map: function (arr, fn) { - return arr.map(fn); - }, - - // extend an object to handle highchart events (highchart objects, not svg elements). - // this is a very simple way of handling events but whatever, it works (i think) - _extend: function (object) { - if (!object._highcharts_extended) { - Object.extend(object, { - _highchart_events: {}, - _highchart_animation: null, - _highcharts_extended: true, - _highcharts_observe: function (name, fn) { - this._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten(); - }, - _highcharts_stop_observing: function (name, fn) { - if (name) { - if (fn) { - this._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn); - } else { - delete this._highchart_events[name]; - } - } else { - this._highchart_events = {}; - } - }, - _highcharts_fire: function (name, args) { - var target = this; - (this._highchart_events[name] || []).each(function (fn) { - // args is never null here - if (args.stopped) { - return; // "throw $break" wasn't working. i think because of the scope of 'this'. - } - - // Attach a simple preventDefault function to skip default handler if called - args.preventDefault = function () { - args.defaultPrevented = true; - }; - args.target = target; - - // If the event handler return false, prevent the default handler from executing - if (fn.bind(this)(args) === false) { - args.preventDefault(); - } - } -.bind(this)); - } - }); - } - } -}; -}()); diff --git a/pykeg/web/static/highcharts/js/adapters/standalone-framework.js b/pykeg/web/static/highcharts/js/adapters/standalone-framework.js deleted file mode 100644 index 30a75c516..000000000 --- a/pykeg/web/static/highcharts/js/adapters/standalone-framework.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - - Standalone Highcharts Framework - - License: MIT License -*/ -var HighchartsAdapter=function(){function o(c){function b(b,a,d){b.removeEventListener(a,d,!1)}function d(b,a,d){d=b.HCProxiedMethods[d.toString()];b.detachEvent("on"+a,d)}function a(a,c){var f=a.HCEvents,i,g,k,j;if(a.removeEventListener)i=b;else if(a.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(a,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(a,b){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(a, -b,!1);else if(d.attachEvent){g=function(a){b.call(d,a)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[b.toString()]=g;d.attachEvent("on"+a,g)}c[a]===r&&(c[a]=[]);c[a].push(b)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?b(this,c,h):this.attachEvent&&d(this,c,h)):(a(this,c),this.HCEvents[c]=[])):(a(this),this.HCEvents={})},trigger:function(a,b){var d=this.HCEvents[a]|| -[],c=d.length,g,k,j;k=function(){b.defaultPrevented=!0};for(g=0;g<c;g++){j=d[g];if(b.stopped)break;b.preventDefault=k;b.target=this;if(!b.type)b.type=a;j.call(this,b)===!1&&b.preventDefault()}}});return c}var r,l=document,p=[],m=[],q,n;Math.easeInOutSine=function(c,b,d,a){return-d/2*(Math.cos(Math.PI*c/a)-1)+b};return{init:function(c){if(!l.defaultView)this._getStyle=function(b,d){var a;return b.style[d]?b.style[d]:(d==="opacity"&&(d="filter"),a=b.currentStyle[d.replace(/\-(\w)/g,function(b,a){return a.toUpperCase()})], -d==="filter"&&(a=a.replace(/alpha\(opacity=([0-9]+)\)/,function(b,a){return a/100})),a===""?1:a)},this.adapterRun=function(b,d){var a={width:"clientWidth",height:"clientHeight"}[d];if(a)return b.style.zoom=1,b[a]-2*parseInt(HighchartsAdapter._getStyle(b,"padding"),10)};if(!Array.prototype.forEach)this.each=function(b,d){for(var a=0,c=b.length;a<c;a++)if(d.call(b[a],b[a],a,b)===!1)return a};if(!Array.prototype.indexOf)this.inArray=function(b,d){var a,c=0;if(d)for(a=d.length;c<a;c++)if(d[c]===b)return c; -return-1};if(!Array.prototype.filter)this.grep=function(b,d){for(var a=[],c=0,h=b.length;c<h;c++)d(b[c],c)&&a.push(b[c]);return a};n=function(b,c,a){this.options=c;this.elem=b;this.prop=a};n.prototype={update:function(){var b;b=this.paths;var d=this.elem,a=d.element;b&&a?d.attr("d",c.step(b[0],b[1],this.now,this.toD)):d.attr?a&&d.attr(this.prop,this.now):(b={},b[d]=this.now+this.unit,Highcharts.css(d,b));this.options.step&&this.options.step.call(this.elem,this.now,this)},custom:function(b,c,a){var e= -this,h=function(a){return e.step(a)},f;this.startTime=+new Date;this.start=b;this.end=c;this.unit=a;this.now=this.start;this.pos=this.state=0;h.elem=this.elem;h()&&m.push(h)===1&&(q=setInterval(function(){for(f=0;f<m.length;f++)m[f]()||m.splice(f--,1);m.length||clearInterval(q)},13))},step:function(b){var c=+new Date,a;a=this.options;var e;if(this.elem.stopAnimation)a=!1;else if(b||c>=a.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();b=this.options.curAnim[this.prop]= -!0;for(e in a.curAnim)a.curAnim[e]!==!0&&(b=!1);b&&a.complete&&a.complete.call(this.elem);a=!1}else e=c-this.startTime,this.state=e/a.duration,this.pos=a.easing(e,0,1,a.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),a=!0;return a}};this.animate=function(b,d,a){var e,h="",f,i,g;b.stopAnimation=!1;if(typeof a!=="object"||a===null)e=arguments,a={duration:e[2],easing:e[3],complete:e[4]};if(typeof a.duration!=="number")a.duration=400;a.easing=Math[a.easing]||Math.easeInOutSine; -a.curAnim=Highcharts.extend({},d);for(g in d)i=new n(b,a,g),f=null,g==="d"?(i.paths=c.init(b,b.d,d.d),i.toD=d.d,e=0,f=1):b.attr?e=b.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(b,g))||0,g!=="opacity"&&(h="px")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,b){return window.getComputedStyle(c).getPropertyValue(b)},getScript:function(c,b){var d=l.getElementsByTagName("head")[0],a=l.createElement("script");a.type="text/javascript";a.src=c;a.onload=b;d.appendChild(a)},inArray:function(c, -b){return b.indexOf?b.indexOf(c):p.indexOf.call(b,c)},adapterRun:function(c,b){return parseInt(HighchartsAdapter._getStyle(c,b),10)},grep:function(c,b){return p.filter.call(c,b)},map:function(c,b){for(var d=[],a=0,e=c.length;a<e;a++)d[a]=b.call(c[a],c[a],a,c);return d},offset:function(c){for(var b=0,d=0;c;)b+=c.offsetLeft,d+=c.offsetTop,c=c.offsetParent;return{left:b,top:d}},addEvent:function(c,b,d){o(c).bind(b,d)},removeEvent:function(c,b,d){o(c).unbind(b,d)},fireEvent:function(c,b,d,a){var e;l.createEvent&& -(c.dispatchEvent||c.fireEvent)?(e=l.createEvent("Events"),e.initEvent(b,!0,!0),e.target=c,Highcharts.extend(e,d),c.dispatchEvent?c.dispatchEvent(e):c.fireEvent(b,e)):c.HCExtended===!0&&(d=d||{},c.trigger(b,d));d&&d.defaultPrevented&&(a=null);a&&a(d)},washMouseEvent:function(c){return c},stop:function(c){c.stopAnimation=!0},each:function(c,b){return Array.prototype.forEach.call(c,b)}}}(); diff --git a/pykeg/web/static/highcharts/js/adapters/standalone-framework.src.js b/pykeg/web/static/highcharts/js/adapters/standalone-framework.src.js deleted file mode 100644 index 9461d564b..000000000 --- a/pykeg/web/static/highcharts/js/adapters/standalone-framework.src.js +++ /dev/null @@ -1,591 +0,0 @@ -/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * - * Standalone Highcharts Framework - * - * License: MIT License - */ - - -/*global Highcharts */ -var HighchartsAdapter = (function () { - -var UNDEFINED, - doc = document, - emptyArray = [], - timers = [], - timerId, - Fx; - -Math.easeInOutSine = function (t, b, c, d) { - return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; -}; - - - -/** - * Extend given object with custom events - */ -function augment(obj) { - function removeOneEvent(el, type, fn) { - el.removeEventListener(type, fn, false); - } - - function IERemoveOneEvent(el, type, fn) { - fn = el.HCProxiedMethods[fn.toString()]; - el.detachEvent('on' + type, fn); - } - - function removeAllEvents(el, type) { - var events = el.HCEvents, - remove, - types, - len, - n; - - if (el.removeEventListener) { - remove = removeOneEvent; - } else if (el.attachEvent) { - remove = IERemoveOneEvent; - } else { - return; // break on non-DOM events - } - - - if (type) { - types = {}; - types[type] = true; - } else { - types = events; - } - - for (n in types) { - if (events[n]) { - len = events[n].length; - while (len--) { - remove(el, n, events[n][len]); - } - } - } - } - - if (!obj.HCExtended) { - Highcharts.extend(obj, { - HCExtended: true, - - HCEvents: {}, - - bind: function (name, fn) { - var el = this, - events = this.HCEvents, - wrappedFn; - - // handle DOM events in modern browsers - if (el.addEventListener) { - el.addEventListener(name, fn, false); - - // handle old IE implementation - } else if (el.attachEvent) { - - wrappedFn = function (e) { - fn.call(el, e); - }; - - if (!el.HCProxiedMethods) { - el.HCProxiedMethods = {}; - } - - // link wrapped fn with original fn, so we can get this in removeEvent - el.HCProxiedMethods[fn.toString()] = wrappedFn; - - el.attachEvent('on' + name, wrappedFn); - } - - - if (events[name] === UNDEFINED) { - events[name] = []; - } - - events[name].push(fn); - }, - - unbind: function (name, fn) { - var events, - index; - - if (name) { - events = this.HCEvents[name] || []; - if (fn) { - index = HighchartsAdapter.inArray(fn, events); - if (index > -1) { - events.splice(index, 1); - this.HCEvents[name] = events; - } - if (this.removeEventListener) { - removeOneEvent(this, name, fn); - } else if (this.attachEvent) { - IERemoveOneEvent(this, name, fn); - } - } else { - removeAllEvents(this, name); - this.HCEvents[name] = []; - } - } else { - removeAllEvents(this); - this.HCEvents = {}; - } - }, - - trigger: function (name, args) { - var events = this.HCEvents[name] || [], - target = this, - len = events.length, - i, - preventDefault, - fn; - - // Attach a simple preventDefault function to skip default handler if called - preventDefault = function () { - args.defaultPrevented = true; - }; - - for (i = 0; i < len; i++) { - fn = events[i]; - - // args is never null here - if (args.stopped) { - return; - } - - args.preventDefault = preventDefault; - args.target = target; - - // If the type is not set, we're running a custom event (#2297). If it is set, - // we're running a browser event, and setting it will cause en error in - // IE8 (#2465). - if (!args.type) { - args.type = name; - } - - - - // If the event handler return false, prevent the default handler from executing - if (fn.call(this, args) === false) { - args.preventDefault(); - } - } - } - }); - } - - return obj; -} - - -return { - /** - * Initialize the adapter. This is run once as Highcharts is first run. - */ - init: function (pathAnim) { - - /** - * Compatibility section to add support for legacy IE. This can be removed if old IE - * support is not needed. - */ - if (!doc.defaultView) { - this._getStyle = function (el, prop) { - var val; - if (el.style[prop]) { - return el.style[prop]; - } else { - if (prop === 'opacity') { - prop = 'filter'; - } - /*jslint unparam: true*/ - val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b) { return b.toUpperCase(); })]; - if (prop === 'filter') { - val = val.replace( - /alpha\(opacity=([0-9]+)\)/, - function (a, b) { - return b / 100; - } - ); - } - /*jslint unparam: false*/ - return val === '' ? 1 : val; - } - }; - this.adapterRun = function (elem, method) { - var alias = { width: 'clientWidth', height: 'clientHeight' }[method]; - - if (alias) { - elem.style.zoom = 1; - return elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10); - } - }; - } - - if (!Array.prototype.forEach) { - this.each = function (arr, fn) { // legacy - var i = 0, - len = arr.length; - for (; i < len; i++) { - if (fn.call(arr[i], arr[i], i, arr) === false) { - return i; - } - } - }; - } - - if (!Array.prototype.indexOf) { - this.inArray = function (item, arr) { - var len, - i = 0; - - if (arr) { - len = arr.length; - - for (; i < len; i++) { - if (arr[i] === item) { - return i; - } - } - } - - return -1; - }; - } - - if (!Array.prototype.filter) { - this.grep = function (elements, callback) { - var ret = [], - i = 0, - length = elements.length; - - for (; i < length; i++) { - if (!!callback(elements[i], i)) { - ret.push(elements[i]); - } - } - - return ret; - }; - } - - //--- End compatibility section --- - - - /** - * Start of animation specific code - */ - Fx = function (elem, options, prop) { - this.options = options; - this.elem = elem; - this.prop = prop; - }; - Fx.prototype = { - - update: function () { - var styles, - paths = this.paths, - elem = this.elem, - elemelem = elem.element; // if destroyed, it is null - - // Animating a path definition on SVGElement - if (paths && elemelem) { - elem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD)); - - // Other animations on SVGElement - } else if (elem.attr) { - if (elemelem) { - elem.attr(this.prop, this.now); - } - - // HTML styles - } else { - styles = {}; - styles[elem] = this.now + this.unit; - Highcharts.css(elem, styles); - } - - if (this.options.step) { - this.options.step.call(this.elem, this.now, this); - } - - }, - custom: function (from, to, unit) { - var self = this, - t = function (gotoEnd) { - return self.step(gotoEnd); - }, - i; - - this.startTime = +new Date(); - this.start = from; - this.end = to; - this.unit = unit; - this.now = this.start; - this.pos = this.state = 0; - - t.elem = this.elem; - - if (t() && timers.push(t) === 1) { - timerId = setInterval(function () { - - for (i = 0; i < timers.length; i++) { - if (!timers[i]()) { - timers.splice(i--, 1); - } - } - - if (!timers.length) { - clearInterval(timerId); - } - }, 13); - } - }, - - step: function (gotoEnd) { - var t = +new Date(), - ret, - done, - options = this.options, - i; - - if (this.elem.stopAnimation) { - ret = false; - - } else if (gotoEnd || t >= options.duration + this.startTime) { - this.now = this.end; - this.pos = this.state = 1; - this.update(); - - this.options.curAnim[this.prop] = true; - - done = true; - for (i in options.curAnim) { - if (options.curAnim[i] !== true) { - done = false; - } - } - - if (done) { - if (options.complete) { - options.complete.call(this.elem); - } - } - ret = false; - - } else { - var n = t - this.startTime; - this.state = n / options.duration; - this.pos = options.easing(n, 0, 1, options.duration); - this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - ret = true; - } - return ret; - } - }; - - /** - * The adapter animate method - */ - this.animate = function (el, prop, opt) { - var start, - unit = '', - end, - fx, - args, - name; - - el.stopAnimation = false; // ready for new - - if (typeof opt !== 'object' || opt === null) { - args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (typeof opt.duration !== 'number') { - opt.duration = 400; - } - opt.easing = Math[opt.easing] || Math.easeInOutSine; - opt.curAnim = Highcharts.extend({}, prop); - - for (name in prop) { - fx = new Fx(el, opt, name); - end = null; - - if (name === 'd') { - fx.paths = pathAnim.init( - el, - el.d, - prop.d - ); - fx.toD = prop.d; - start = 0; - end = 1; - } else if (el.attr) { - start = el.attr(name); - } else { - start = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0; - if (name !== 'opacity') { - unit = 'px'; - } - } - - if (!end) { - end = parseFloat(prop[name]); - } - fx.custom(start, end, unit); - } - }; - }, - - /** - * Internal method to return CSS value for given element and property - */ - _getStyle: function (el, prop) { - return window.getComputedStyle(el).getPropertyValue(prop); - }, - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - getScript: function (scriptLocation, callback) { - // We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script. - var head = doc.getElementsByTagName('head')[0], - script = doc.createElement('script'); - - script.type = 'text/javascript'; - script.src = scriptLocation; - script.onload = callback; - - head.appendChild(script); - }, - - /** - * Return the index of an item in an array, or -1 if not found - */ - inArray: function (item, arr) { - return arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item); - }, - - - /** - * A direct link to adapter methods - */ - adapterRun: function (elem, method) { - return parseInt(HighchartsAdapter._getStyle(elem, method), 10); - }, - - /** - * Filter an array - */ - grep: function (elements, callback) { - return emptyArray.filter.call(elements, callback); - }, - - /** - * Map an array - */ - map: function (arr, fn) { - var results = [], i = 0, len = arr.length; - - for (; i < len; i++) { - results[i] = fn.call(arr[i], arr[i], i, arr); - } - - return results; - }, - - offset: function (el) { - var left = 0, - top = 0; - - while (el) { - left += el.offsetLeft; - top += el.offsetTop; - el = el.offsetParent; - } - - return { - left: left, - top: top - }; - }, - - /** - * Add an event listener - */ - addEvent: function (el, type, fn) { - augment(el).bind(type, fn); - }, - - /** - * Remove event added with addEvent - */ - removeEvent: function (el, type, fn) { - augment(el).unbind(type, fn); - }, - - /** - * Fire an event on a custom object - */ - fireEvent: function (el, type, eventArguments, defaultFunction) { - var e; - - if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) { - e = doc.createEvent('Events'); - e.initEvent(type, true, true); - e.target = el; - - Highcharts.extend(e, eventArguments); - - if (el.dispatchEvent) { - el.dispatchEvent(e); - } else { - el.fireEvent(type, e); - } - - } else if (el.HCExtended === true) { - eventArguments = eventArguments || {}; - el.trigger(type, eventArguments); - } - - if (eventArguments && eventArguments.defaultPrevented) { - defaultFunction = null; - } - - if (defaultFunction) { - defaultFunction(eventArguments); - } - }, - - washMouseEvent: function (e) { - return e; - }, - - - /** - * Stop running animation - */ - stop: function (el) { - el.stopAnimation = true; - }, - - /** - * Utility for iterating over an array. Parameters are reversed compared to jQuery. - * @param {Array} arr - * @param {Function} fn - */ - each: function (arr, fn) { // modern browsers - return Array.prototype.forEach.call(arr, fn); - } -}; -}()); diff --git a/pykeg/web/static/highcharts/js/highcharts-all.js b/pykeg/web/static/highcharts/js/highcharts-all.js deleted file mode 100644 index 95bf1142b..000000000 --- a/pykeg/web/static/highcharts/js/highcharts-all.js +++ /dev/null @@ -1,400 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - - Standalone Highcharts Framework - - License: MIT License -*/ -var HighchartsAdapter=function(){function o(c){function b(b,a,d){b.removeEventListener(a,d,!1)}function d(b,a,d){d=b.HCProxiedMethods[d.toString()];b.detachEvent("on"+a,d)}function a(a,c){var f=a.HCEvents,i,g,k,j;if(a.removeEventListener)i=b;else if(a.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(a,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(a,b){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(a, -b,!1);else if(d.attachEvent){g=function(a){b.call(d,a)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[b.toString()]=g;d.attachEvent("on"+a,g)}c[a]===r&&(c[a]=[]);c[a].push(b)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?b(this,c,h):this.attachEvent&&d(this,c,h)):(a(this,c),this.HCEvents[c]=[])):(a(this),this.HCEvents={})},trigger:function(a,b){var d=this.HCEvents[a]|| -[],c=d.length,g,k,j;k=function(){b.defaultPrevented=!0};for(g=0;g<c;g++){j=d[g];if(b.stopped)break;b.preventDefault=k;b.target=this;if(!b.type)b.type=a;j.call(this,b)===!1&&b.preventDefault()}}});return c}var r,l=document,p=[],m=[],q,n;Math.easeInOutSine=function(c,b,d,a){return-d/2*(Math.cos(Math.PI*c/a)-1)+b};return{init:function(c){if(!l.defaultView)this._getStyle=function(b,d){var a;return b.style[d]?b.style[d]:(d==="opacity"&&(d="filter"),a=b.currentStyle[d.replace(/\-(\w)/g,function(b,a){return a.toUpperCase()})], -d==="filter"&&(a=a.replace(/alpha\(opacity=([0-9]+)\)/,function(b,a){return a/100})),a===""?1:a)},this.adapterRun=function(b,d){var a={width:"clientWidth",height:"clientHeight"}[d];if(a)return b.style.zoom=1,b[a]-2*parseInt(HighchartsAdapter._getStyle(b,"padding"),10)};if(!Array.prototype.forEach)this.each=function(b,d){for(var a=0,c=b.length;a<c;a++)if(d.call(b[a],b[a],a,b)===!1)return a};if(!Array.prototype.indexOf)this.inArray=function(b,d){var a,c=0;if(d)for(a=d.length;c<a;c++)if(d[c]===b)return c; -return-1};if(!Array.prototype.filter)this.grep=function(b,d){for(var a=[],c=0,h=b.length;c<h;c++)d(b[c],c)&&a.push(b[c]);return a};n=function(b,c,a){this.options=c;this.elem=b;this.prop=a};n.prototype={update:function(){var b;b=this.paths;var d=this.elem,a=d.element;b&&a?d.attr("d",c.step(b[0],b[1],this.now,this.toD)):d.attr?a&&d.attr(this.prop,this.now):(b={},b[d]=this.now+this.unit,Highcharts.css(d,b));this.options.step&&this.options.step.call(this.elem,this.now,this)},custom:function(b,c,a){var e= -this,h=function(a){return e.step(a)},f;this.startTime=+new Date;this.start=b;this.end=c;this.unit=a;this.now=this.start;this.pos=this.state=0;h.elem=this.elem;h()&&m.push(h)===1&&(q=setInterval(function(){for(f=0;f<m.length;f++)m[f]()||m.splice(f--,1);m.length||clearInterval(q)},13))},step:function(b){var c=+new Date,a;a=this.options;var e;if(this.elem.stopAnimation)a=!1;else if(b||c>=a.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();b=this.options.curAnim[this.prop]= -!0;for(e in a.curAnim)a.curAnim[e]!==!0&&(b=!1);b&&a.complete&&a.complete.call(this.elem);a=!1}else e=c-this.startTime,this.state=e/a.duration,this.pos=a.easing(e,0,1,a.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),a=!0;return a}};this.animate=function(b,d,a){var e,h="",f,i,g;b.stopAnimation=!1;if(typeof a!=="object"||a===null)e=arguments,a={duration:e[2],easing:e[3],complete:e[4]};if(typeof a.duration!=="number")a.duration=400;a.easing=Math[a.easing]||Math.easeInOutSine; -a.curAnim=Highcharts.extend({},d);for(g in d)i=new n(b,a,g),f=null,g==="d"?(i.paths=c.init(b,b.d,d.d),i.toD=d.d,e=0,f=1):b.attr?e=b.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(b,g))||0,g!=="opacity"&&(h="px")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,b){return window.getComputedStyle(c).getPropertyValue(b)},getScript:function(c,b){var d=l.getElementsByTagName("head")[0],a=l.createElement("script");a.type="text/javascript";a.src=c;a.onload=b;d.appendChild(a)},inArray:function(c, -b){return b.indexOf?b.indexOf(c):p.indexOf.call(b,c)},adapterRun:function(c,b){return parseInt(HighchartsAdapter._getStyle(c,b),10)},grep:function(c,b){return p.filter.call(c,b)},map:function(c,b){for(var d=[],a=0,e=c.length;a<e;a++)d[a]=b.call(c[a],c[a],a,c);return d},offset:function(c){for(var b=0,d=0;c;)b+=c.offsetLeft,d+=c.offsetTop,c=c.offsetParent;return{left:b,top:d}},addEvent:function(c,b,d){o(c).bind(b,d)},removeEvent:function(c,b,d){o(c).unbind(b,d)},fireEvent:function(c,b,d,a){var e;l.createEvent&& -(c.dispatchEvent||c.fireEvent)?(e=l.createEvent("Events"),e.initEvent(b,!0,!0),e.target=c,Highcharts.extend(e,d),c.dispatchEvent?c.dispatchEvent(e):c.fireEvent(b,e)):c.HCExtended===!0&&(d=d||{},c.trigger(b,d));d&&d.defaultPrevented&&(a=null);a&&a(d)},washMouseEvent:function(c){return c},stop:function(c){c.stopAnimation=!0},each:function(c,b){return Array.prototype.forEach.call(c,b)}}}(); -/* - Highcharts JS v3.0.9 (2014-01-15) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(){function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function x(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function z(a,b){return parseInt(a,b||10)}function fa(a){return typeof a=== -"string"}function S(a){return typeof a==="object"}function Ka(a){return Object.prototype.toString.call(a)==="[object Array]"}function wa(a){return typeof a==="number"}function xa(a){return P.log(a)/P.LN10}function ga(a){return P.pow(10,a)}function ha(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function t(a){return a!==u&&a!==null}function v(a,b,c){var d,e;if(fa(b))t(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(t(b)&&S(b))for(d in b)a.setAttribute(d,b[d]); -return e}function ja(a){return Ka(a)?a:[a]}function n(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!=="undefined"&&c!==null)return c}function D(a,b){if(ya&&b&&b.opacity!==u)b.filter="alpha(opacity="+b.opacity*100+")";r(a.style,b)}function T(a,b,c,d,e){a=y.createElement(a);b&&r(a,b);e&&D(a,{padding:0,border:Q,margin:0});c&&D(a,c);d&&d.appendChild(a);return a}function ia(a,b){var c=function(){};c.prototype=new a;r(c.prototype,b);return c}function Da(a,b,c,d){var e=G.lang,a=+a|| -0,f=b===-1?(a.toString().split(".")[1]||"").length:isNaN(b=M(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(z(a=M(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+M(a-c).toFixed(f).slice(2):"")}function Ea(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Va(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this, -a)}}function Fa(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(":"),g=/\.([0-9])/,h=G.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e=Da(e,i,h.decimalPoint,f.indexOf(",")>-1?h.thousandsSep:"")):e=ab(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function mb(a){return P.pow(10,N(P.log(a)/P.LN10))}function nb(a,b,c,d){var e,c=n(c, -1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Ab(){this.symbol=this.color=0}function ob(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function La(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function za(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c= -a[b]);return c}function Ma(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Na(a){bb||(bb=T(Ga));a&&bb.appendChild(a);bb.innerHTML=""}function ka(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else C.console&&console.log(c)}function aa(a){return parseFloat(a.toPrecision(14))}function Oa(a,b){oa=n(a,b.animation)}function Bb(){var a=G.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Pa=(a&&G.global.timezoneOffset||0)*6E4;cb=a? -Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,n(c,1),n(g,0),n(h,0),n(i,0))).getTime()};pb=b+"Minutes";qb=b+"Hours";rb=b+"Day";Wa=b+"Date";db=b+"Month";eb=b+"FullYear";Cb=c+"Minutes";Db=c+"Hours";sb=c+"Date";Eb=c+"Month";Fb=c+"FullYear"}function pa(){}function Qa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function qa(){this.init.apply(this,arguments)}function Gb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d; -this.total=null;this.points={};this.stack=e;this.percent=f==="percent";this.alignOptions={align:b.align||(g?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(g?"middle":c?"bottom":"top"),y:n(b.y,g?4:c?14:-6),x:n(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?"right":"left":"center")}function tb(){this.init.apply(this,arguments)}function fb(){this.init.apply(this,arguments)}var u,y=document,C=window,P=Math,w=P.round,N=P.floor,Ha=P.ceil,s=P.max,I=P.min,M=P.abs,U=P.cos,ba=P.sin,Aa=P.PI,Ba= -Aa*2/360,ra=navigator.userAgent,Hb=C.opera,ya=/msie/i.test(ra)&&!Hb,gb=y.documentMode===8,hb=/AppleWebKit/.test(ra),Xa=/Firefox/.test(ra),Ib=/(Mobile|Android|Windows Phone)/.test(ra),Ca="http://www.w3.org/2000/svg",V=!!y.createElementNS&&!!y.createElementNS(Ca,"svg").createSVGRect,Nb=Xa&&parseInt(ra.split("Firefox/")[1],10)<4,da=!V&&!ya&&!!y.createElement("canvas").getContext,Ya,ib=y.documentElement.ontouchstart!==u,Jb={},ub=0,bb,G,ab,oa,vb,E,la=function(){},Ia=[],Ga="div",Q="none",Ob=/^[0-9]+$/, -Kb="rgba(192,192,192,"+(V?1.0E-4:0.002)+")",Lb="stroke-width",cb,Pa,pb,qb,rb,Wa,db,eb,Cb,Db,sb,Eb,Fb,L={};C.Highcharts=C.Highcharts?ka(16,!0):{};ab=function(a,b,c){if(!t(b)||isNaN(b))return"Invalid date";var a=n(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b-Pa),e,f=d[qb](),g=d[rb](),h=d[Wa](),i=d[db](),j=d[eb](),k=G.lang,l=k.weekdays,d=r({a:l[g].substr(0,3),A:l[g],d:Ea(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ea(i+1),y:j.toString().substr(2,2),Y:j,H:Ea(f),I:Ea(f%12||12),l:f%12||12,M:Ea(d[pb]()),p:f<12?"AM": -"PM",P:f<12?"am":"pm",S:Ea(d.getSeconds()),L:Ea(w(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Ab.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};E=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}("millisecond",1,"second",1E3,"minute",6E4,"hour",36E5,"day", -864E5,"week",6048E5,"month",26784E5,"year",31556952E3);vb={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f, -f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};(function(a){C.HighchartsAdapter=C.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each(["cur", -"_default","width","height","opacity"],function(a,b){var e=d,k;b==="cur"?e=c.prototype:b==="_default"&&f&&(e=g[b],b="set");(k=e[b])&&(e[b]=function(c){var d,c=a?c:this;if(c.prop!=="align")return d=c.elem,d.attr?d.attr(c.prop,b==="cur"?u:c.now):k.apply(this,arguments)})});Va(e,"get",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr("d",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}: -d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a="Chart",b=arguments,c,d;fa(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,1));c=b[0];if(c!==u)c.chart=c.chart||{},c.chart.renderTo=this[0],new Highcharts[a](c,b[1]),d=this;c===u&&(d=Ia[v(this[0],"data-highcharts-chart")]);return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b, -c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?"removeEventListener":"detachEvent";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g="detached"+c,h;!ya&&d&&(delete d.layerX,delete d.layerY);r(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each(["preventDefault", -"stopPropagation"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b==="preventDefault"&&(h=!0)}}});a(b).trigger(f);b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===u)c.pageX=a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==u&&b.attr&&(c.opacity+="px");e.animate(c,d)},stop:function(b){a(b).stop()}}})(C.jQuery);var W= -C.HighchartsAdapter,J=W||{};W&&W.init.call(W,vb);var jb=J.adapterRun,Pb=J.getScript,sa=J.inArray,p=J.each,wb=J.grep,Qb=J.offset,Ra=J.map,F=J.addEvent,X=J.removeEvent,A=J.fireEvent,Rb=J.washMouseEvent,kb=J.animate,Za=J.stop,J={enabled:!0,x:0,y:15,style:{color:"#666",cursor:"default",fontSize:"11px"}};G={colors:"#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","), -shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),decimalPoint:".",numericSymbols:"k,M,G,T,P,E".split(","),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:","},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/3.0.9/modules/canvas-tools.js",VMLRadialGradientURL:"http://code.highcharts.com/3.0.9/gfx/vml-radial-gradient.png"},chart:{borderColor:"#4572A7",borderRadius:5, -defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],style:{fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',fontSize:"12px"},backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",margin:15,style:{color:"#274b6d",fontSize:"16px"}},subtitle:{text:"",align:"center",style:{color:"#4d759e"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1, -animation:{duration:1E3},events:{},lineWidth:2,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{enabled:!0},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:x(J,{align:"center",enabled:!1,formatter:function(){return this.y===null?"":Da(this.y,-1)},verticalAlign:"bottom",y:0}),cropThreshold:300,pointRange:0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3}},labels:{style:{position:"absolute",color:"#3E576F"}}, -legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderWidth:1,borderColor:"#909090",borderRadius:5,navigation:{activeColor:"#274b6d",inactiveColor:"#CCC"},shadow:!1,itemStyle:{cursor:"pointer",color:"#274b6d",fontSize:"12px"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold", -position:"relative",top:"1em"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,animation:V,backgroundColor:"rgba(255, 255, 255, .85)",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>', -pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,snap:Ib?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var Y=G.plotOptions,W=Y.line;Bb();var Sb=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, -Tb=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Ub=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,ta=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Ra(a.stops,function(a){return ta(a[1])}):(c=Sb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Tb.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Ub.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=x(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})): -f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)p(d,function(b){b.brighten(a)});else if(wa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};pa.prototype={init:function(a,b){this.element=b==="span"?T(b):y.createElementNS(Ca,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=n(b,oa,!0); -Za(this);if(b){b=x(b);if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),i=this.renderer,j,k=this.attrSetters,l=this.shadows,m,q,o=this;fa(a)&&t(b)&&(c=a,a={},a[c]=b);if(fa(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),o=v(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&c!=="fill"&&(o=parseFloat(o));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==u&&(d=e);if(c==="d")d&& -d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text")for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],v(f,"x")===v(g,"x")&&v(f,"x",d);else if(this.rotation&&(c==="x"||c==="y"))q=!0;else if(c==="fill")d=i.color(d,g,c);else if(h==="circle"&&(c==="x"||c==="y"))c={x:"cx",y:"cy"}[c]||c;else if(h==="rect"&&c==="r")v(g,{rx:d,ry:d}),j=!0;else if(c==="translateX"||c==="translateY"||c==="rotation"||c==="verticalAlign"||c==="scaleX"||c==="scaleY")j=q=!0;else if(c==="stroke")d= -i.color(d,g,c);else if(c==="dashstyle")if(c="stroke-dasharray",d=d&&d.toLowerCase(),d==="solid")d=Q;else{if(d){d=d.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=d.length;e--;)d[e]=z(d[e])*n(a["stroke-width"],this["stroke-width"]);d=d.join(",")}}else if(c==="width")d=z(d);else if(c==="align")c="text-anchor",d= -{left:"start",center:"middle",right:"end"}[d];else if(c==="title")e=g.getElementsByTagName("title")[0],e||(e=y.createElementNS(Ca,"title"),g.appendChild(e)),e.textContent=d;c==="strokeWidth"&&(c="stroke-width");if(c==="stroke-width"||c==="stroke"){this[c]=d;if(this.stroke&&this["stroke-width"])v(g,"stroke",this.stroke),v(g,"stroke-width",this["stroke-width"]),this.hasStroke=!0;else if(c==="stroke-width"&&d===0&&this.hasStroke)g.removeAttribute("stroke"),this.hasStroke=!1;j=!0}this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&& -(m||(this.symbolAttr(a),m=!0),j=!0);if(l&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c))for(e=l.length;e--;)v(l[e],c,c==="height"?s(d-(l[e].cutHeight||0),0):d);if((c==="width"||c==="height")&&h==="rect"&&d<0)d=0;this[c]=d;c==="text"?(d!==this.textStr&&delete this.bBox,this.textStr=d,this.added&&i.buildText(this)):j||v(g,c,d)}q&&this.updateTransform()}return o},addClass:function(a){var b=this.element,c=v(b,"class")||"";c.indexOf(a)===-1&&v(b,"class",c+" "+a);return this},symbolAttr:function(a){var b= -this;p("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=n(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":Q)},crisp:function(a,b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;i=w(a)%2/2;h.x=N(b||this.x||0)+i;h.y=N(c||this.y||0)+i;h.width=N((d||this.width||0)-2*i);h.height=N((e||this.height||0)-2*i);h.strokeWidth= -a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=this.element,c=this.textWidth=a&&a.width&&b.nodeName.toLowerCase()==="text"&&z(a.width),d,e="",f=function(a,b){return"-"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=r(this.styles,a);c&&delete a.width;if(ya&&!V)D(this.element,a);else{for(d in a)e+=d.replace(/([A-Z])/g,f)+":"+a[d]+";";v(b,"style",e)}c&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=this,d=c.element;ib&&a=== -"click"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(ra.indexOf("Android")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY|| -0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(this.x||0)+" "+(this.y||0)+")");(t(c)||t(d))&&a.push("scale("+n(c,1)+" "+n(d,1)+")");a.length&&v(this.element,"transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions= -a,this.alignByTranslate=b,!c||fa(c))this.alignTo=d=c||"renderer",ha(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=n(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=w(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=w(g);this[this.placed?"animate":"attr"](h);this.placed= -!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ba;d=this.textStr;var h;if(d===""||Ob.test(d))h=d.length+"|"+f.fontSize+"|"+f.fontFamily,a=b.cache[h];if(!a){if(c.namespaceURI===Ca||b.forExport){try{a=c.getBBox?r({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(ya&&f&&f.fontSize==="11px"&& -d.toPrecision(3)==="16.9")a.height=d=14;if(e)a.width=M(d*ba(g))+M(c*U(g)),a.height=M(d*U(g))+M(c*ba(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(){return this.attr({visibility:"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=v(f,"zIndex"),h;if(a)this.parentGroup=a;this.parentInverted= -a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=z(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=e[c],b=v(a,"zIndex"),a!==f&&(z(b)>g||!t(g)&&t(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;A(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point= -null;Za(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&p(c,function(b){a.safeRemoveChild(b)});d&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div,d=b;a.alignTo&&ha(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=n(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted? -"(-1,-1)":"("+n(a.offsetX,1)+", "+n(a.offsetY,1)+")";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;v(f,{isShadow:"true",stroke:a.color||"black","stroke-opacity":j*e,"stroke-width":h,transform:"translate"+k,fill:Q});if(c)v(f,"height",s(v(f,"height")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this}};var ua=function(){this.init.apply(this,arguments)};ua.prototype={Element:pa,init:function(a,b,c,d){var e=location,f,g;f=this.createElement("svg").attr({version:"1.1"}); -g=f.element;a.appendChild(g);a.innerHTML.indexOf("xmlns")===-1&&v(g,"xmlns",Ca);this.isSVG=!0;this.box=g;this.boxWrapper=f;this.alignedObjects=[];this.url=(Xa||hb)&&y.getElementsByTagName("base").length?e.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(y.createTextNode("Created with Highcharts 3.0.9"));this.defs=this.createElement("defs").add();this.forExport=d;this.gradients={};this.cache={};this.setSize(b,c,!1);var h; -if(Xa&&a.getBoundingClientRect)this.subPixelFix=b=function(){D(a,{left:0,top:0});h=a.getBoundingClientRect();D(a,{left:Ha(h.left)-h.left+"px",top:Ha(h.top)-h.top+"px"})},b(),F(C,"resize",b)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ma(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&X(C,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b= -new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=n(a.textStr,"").toString().replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g),f=b.childNodes,g=/style="([^"]+)"/,h=/href="(http[^"]+)"/,i=v(b,"x"),j=a.styles,k=a.textWidth,l=j&&j.lineHeight,m=f.length,q=function(a){return l?z(l): -c.fontMetrics(/px$/.test(a&&a.style.fontSize)?a.style.fontSize:j.fontSize||11).h};m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===""&&e.pop();p(e,function(e,f){var l,m=0,e=e.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");l=e.split("|||");p(l,function(e){if(e!==""||l.length===1){var o={},n=y.createElementNS(Ca,"tspan"),p;g.test(e)&&(p=e.match(g)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),v(n,"style",p));h.test(e)&&!d&&(v(n,"onclick",'location.href="'+ -e.match(h)[1]+'"'),D(n,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "&&(n.appendChild(y.createTextNode(e)),m?o.dx=0:o.x=i,v(n,o),!m&&f&&(!V&&d&&D(n,{display:"block"}),v(n,"dy",q(n),hb&&n.offsetHeight)),b.appendChild(n),m++,k))for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),o=e.length>1&&j.whiteSpace!=="nowrap",t,s,w=a._clipHeight,u=[],r=q(),$=1;o&&(e.length||u.length);)delete a.bBox,t=a.getBBox(),s=t.width,!V&&c.forExport&&(s=c.measureSpanWidth(n.firstChild.data, -a.styles)),t=s>k,!t||e.length===1?(e=u,u=[],e.length&&($++,w&&$*r>w?(e=["..."],a.attr("title",a.textStr)):(n=y.createElementNS(Ca,"tspan"),v(n,{dy:r,x:i}),p&&v(n,"style",p),b.appendChild(n),s>k&&(k=s)))):(n.removeChild(n.firstChild),u.unshift(e.pop())),e.length&&n.appendChild(y.createTextNode(e.join(" ").replace(/- /g,"-")))}})})},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a,b,c,i,null,null,null,null,"button"),k=0,l,m,q,o,n,p,a={x1:0,y1:0,x2:0,y2:1},e=x({"stroke-width":1,stroke:"#CCCCCC", -fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);q=e.style;delete e.style;f=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);o=f.style;delete f.style;g=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);n=g.style;delete g.style;h=x(e,{style:{color:"#CCC"}},h);p=h.style;delete h.style;F(j.element,ya?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(o)});F(j.element,ya?"mouseout":"mouseleave", -function(){k!==3&&(l=[e,f,g][k],m=[q,o,n][k],j.attr(l).css(m))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(n):a===3&&j.attr(h).css(p):j.attr(e).css(q)};return j.on("click",function(){k!==3&&d.call(j)}).attr(e).css(r({cursor:"default"},q))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=w(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=w(a[2])+b%2/2);return a},path:function(a){var b={fill:Q};Ka(a)?b.d=a:S(a)&&r(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=S(a)?a:{x:a, -y:b,r:c};return this.createElement("circle").attr(a)},arc:function(a,b,c,d,e,f){if(S(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){e=S(a)?a.r:e;e=this.createElement("rect").attr({rx:e,ry:e,fill:Q});return e.attr(S(a)?a:e.crisp(f,a,b,s(c,0),s(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[n(c,!0)?"animate":"attr"]({width:a, -height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return t(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:Q};arguments.length>1&&r(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(w(b),w(c),d,e,f),i=/^url\((.*?)\)$/, -j,k;if(h)g=this.path(h),r(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&r(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(w((d-b[0])/2),w((e-b[1])/2)))},j=a.match(i)[1],a=Jb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),T("img",{onload:function(){k(g,Jb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/ -2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=U(f),j=ba(f),k=U(g),g=ba(g),e=e.end-f<Aa?0:1;return["M",a+c*i,b+c*j,"A",c,c,0,e, -1,a+c*k,b+c*g,h?"M":"L",a+d*k,b+d*g,"A",d,d,0,e,0,a+d*i,b+d*j,h?"":"Z"]}},clipRect:function(a,b,c,d){var e="highcharts-"+ub++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g,h,i,j,k,l,m,q=[];a&&a.linearGradient?g="linearGradient":a&&a.radialGradient&&(g="radialGradient");if(g){c=a[g];h=d.gradients;j=a.stops;b=b.radialReference;Ka(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:"userSpaceOnUse"}); -g==="radialGradient"&&b&&!t(c.gradientUnits)&&(c=x(c,{cx:b[0]-b[2]/2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:"userSpaceOnUse"}));for(m in c)m!=="id"&&q.push(m,c[m]);for(m in j)q.push(j[m]);q=q.join(",");h[q]?a=h[q].id:(c.id=a="highcharts-"+ub++,h[q]=i=d.createElement(g).attr(c).add(d.defs),i.stops=[],p(j,function(a){f.test(a[1])?(e=ta(a[1]),k=e.get("rgb"),l=e.get("a")):(k=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":k,"stop-opacity":l}).add(i);i.stops.push(a)})); -return"url("+d.url+"#"+a+")"}else return f.test(a)?(e=ta(a),v(b,c+"-opacity",e.get("a")),e.get("rgb")):(b.removeAttribute(c+"-opacity"),a)},text:function(a,b,c,d){var e=G.chart.style,f=da||!V&&this.forExport;if(d&&!this.forExport)return this.html(a,b,c);b=w(n(b,0));c=w(n(c,0));a=this.createElement("text").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,fontSize:e.fontSize});f&&a.css({position:"absolute"});a.x=b;a.y=c;return a},fontMetrics:function(a){var a=z(a||11),a=a<24?a+4:w(a*1.2),b=w(a*0.8); -return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=n.element.style;va=(Z===void 0||Sa===void 0||o.styles.textAlign)&&n.getBBox();o.width=(Z||va.width||0)+2*ea+lb;o.height=(Sa||va.height||0)+2*ea;$=ea+q.fontMetrics(a&&a.fontSize).b;if(y){if(!H)a=w(-s*ea),b=h?-$:0,o.box=H=d?q.symbol(d,a,b,o.width,o.height,v):q.rect(a,b,o.width,o.height,0,v[Lb]),H.add(o);H.isImg||H.attr(x({width:o.width,height:o.height},v));v=null}}function k(){var a=o.styles,a=a&&a.textAlign,b=lb+ea*(1-s),c;c= -h?0:$;if(t(Z)&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(Z-va.width);(b!==n.x||c!==n.y)&&n.attr({x:b,y:c});n.x=b;n.y=c}function l(a,b){H?H.attr(a,b):v[a]=b}function m(){n.add(o);o.attr({text:a,x:b,y:c});H&&t(e)&&o.attr({anchorX:e,anchorY:f})}var q=this,o=q.g(i),n=q.text("",0,0,g).attr({zIndex:1}),H,va,s=0,ea=3,lb=0,Z,Sa,Ta,K,B=0,v={},$,g=o.attrSetters,y;F(o,"add",m);g.width=function(a){Z=a;return!1};g.height=function(a){Sa=a;return!1};g.padding=function(a){t(a)&&a!==ea&&(ea=a,k());return!1}; -g.paddingLeft=function(a){t(a)&&a!==lb&&(lb=a,k());return!1};g.align=function(a){s={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){n.attr(b,a);j();k();return!1};g[Lb]=function(a,b){y=!0;B=a%2/2;l(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){b==="fill"&&(y=!0);l(b,a);return!1};g.anchorX=function(a,b){e=a;l(b,a+B-Ta);return!1};g.anchorY=function(a,b){f=a;l(b,a-K);return!1};g.x=function(a){o.x=a;a-=s*((Z||va.width)+ea);Ta=w(a);o.attr("translateX",Ta);return!1};g.y=function(a){K=o.y= -w(a);o.attr("translateY",K);return!1};var z=o.css;return r(o,{css:function(a){if(a){var b={},a=x(a);p("fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow".split(","),function(c){a[c]!==u&&(b[c]=a[c],delete a[c])});n.css(b)}return z.call(o,a)},getBBox:function(){return{width:va.width+2*ea,height:va.height+2*ea,x:va.x-ea,y:va.y-ea}},shadow:function(a){H&&H.shadow(a);return o},destroy:function(){X(o,"add",m);X(o.element,"mouseenter");X(o.element,"mouseleave");n&&(n=n.destroy()); -H&&(H=H.destroy());pa.prototype.destroy.call(o);o=q=j=k=l=m=null}})}};Ya=ua;r(pa.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=r(this.styles,a);D(this.element,a);return this},htmlGetBBox:function(){var a=this.element,b=this.bBox;if(!b){if(a.nodeName==="text")a.style.position="absolute";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a= -this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=this.shadows;D(b,{marginLeft:c,marginTop:d});i&&p(i,function(a){D(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&p(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName==="SPAN"){var j=this.rotation,k,l=z(this.textWidth),m=[j,g,b.innerHTML,this.textWidth].join(",");if(m!==this.cTT){k=a.fontMetrics(b.style.fontSize).b;t(j)&&this.setSpanRotation(j, -h,k);i=n(this.elemWidth,b.offsetWidth);if(i>l&&/[ \-]/.test(b.textContent||b.innerText))D(b,{width:l+"px",display:"block",whiteSpace:"normal"}),i=l;this.getSpanCorrection(i,k,h,j,g)}D(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(hb)k=b.offsetHeight;this.cTT=m}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=ya?"-ms-transform":hb?"-webkit-transform":Xa?"MozTransform":Hb?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Xa?"Origin":"-origin")]=b*100+"% "+ -c+"px";D(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});r(ua.prototype,{html:function(a,b,c){var d=G.chart.style,e=this.createElement("span"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){a!==g.innerHTML&&delete this.bBox;g.innerHTML=a;return!1};f.x=f.y=f.align=f.rotation=function(a,b){b==="align"&&(b="textAlign");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:w(b),y:w(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:d.fontFamily, -fontSize:d.fontSize});e.css=e.htmlCss;if(h.isSVG)e.add=function(a){var b,c=h.box.parentNode,d=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)d.push(a),a=a.parentGroup;p(d.reverse(),function(a){var d;b=a.div=a.div||T(Ga,{className:v(a.element,"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;r(a.attrSetters,{translateX:function(a){d.left=a+"px"},translateY:function(a){d.top=a+"px"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(g); -e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};return e}});var R;if(!V&&!da){Highcharts.VMLElement=R={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ga;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=T(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer, -c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();A(this,"add");return this},updateTransform:pa.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=U(a*Ba),c=ba(a*Ba);D(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):Q})},getSpanCorrection:function(a, -b,c,d,e){var f=d?U(d*Ba):1,g=d?ba(d*Ba):0,h=n(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),D(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(wa(a[b]))c[b]=w(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]? -1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,q=this.attrSetters,o=this;fa(a)&&t(b)&&(c=a,a={},a[c]=b);if(fa(a))c=a,o=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=q[c]&&q[c].call(this,d,c),e!==!1&&d!==null){e!==u&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k|| -(this.symbolAttr(a),k=!0),m=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c==="visibility"){if(l)for(e=l.length;e--;)l[e].style[c]=d;h==="DIV"&&(d=d==="hidden"?"-999em":0,gb||(g[c]=d?"visible":"hidden"),c="top");g[c]=d;m=!0}else if(c==="zIndex")d&&(g[c]=d),m=!0;else if(sa(c,["x","y","width","height"])!==-1)this[c]=d,c==="x"||c==="y"?c={x:"left",y:"top"}[c]:d=s(0,d),this.updateClipping? -(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c==="class"&&h==="DIV")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,wa(d)&&(d+="px");else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||T(i.prepVML(["<stroke/>"]),null,null,f))[c]=d||"solid",this.dashstyle=d,m=!0;else if(c==="fill")if(h==="SPAN")g.color=d;else{if(h!=="IMG")f.filled=d!==Q?!0:!1,d=i.color(d,f,c,this),c="fillcolor"}else if(c=== -"opacity")m=!0;else if(h==="shape"&&c==="rotation")this[c]=f.style[c]=d,f.style.left=-w(ba(d*Ba)+1)+"px",f.style.top=w(U(d*Ba))+"px";else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),m=!0;m||(gb?f[c]=d:v(f,c,d))}return o},clip:function(a){var b=this,c;a?(c=a.members,ha(c,b),c.push(b),b.destroyClip=function(){ha(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:gb?"inherit":"rect(auto)"});return b.css(a)},css:pa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&& -Na(a)},destroy:function(){this.destroyClip&&this.destroyClip();return pa.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=C.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,q,o;k&&typeof k.value!=="string"&&(k="x");m=k;if(a){q=n(a.width,3);o=(a.opacity|| -0.15)/q;for(e=1;e<=3;e++){l=q*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow="true" strokeweight="',l,'" filled="false" path="',m,'" coordsize="10 10" style="',f.style.cssText,'" />'];h=T(g.prepVML(j),null,{left:z(i.left)+n(a.offsetX,1),top:z(i.top)+n(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color="',a.color||"black",'" opacity="',o*e,'"/>'];T(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};R=ia(pa,R); -var xb={Element:R,isIE8:ra.indexOf("MSIE 8.0")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ga);e=d.element;e.style.position="relative";a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{y.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){y.styleSheets[0].cssText+= -"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=S(a);return r(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+w(a?e:d)+"px,"+w(a?f: -b)+"px,"+w(a?b:f)+"px,"+w(a?d:e)+"px)"};!a&&gb&&c==="DIV"&&r(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){p(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,m=a.linearGradient||a.radialGradient,q,o,n,H,s,t="",a=a.stops,u,w=[],r=function(){h=['<fill colors="'+w.join(",")+'" opacity="',n,'" o:opacity2="',o,'" type="',i,'" ',t,'focus="100%" method="any" />']; -T(e.prepVML(h),null,null,b)};q=a[0];u=a[a.length-1];q[0]>0&&a.unshift([0,q[1]]);u[0]<1&&a.push([1,u[1]]);p(a,function(a,b){g.test(a[1])?(f=ta(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);w.push(a[0]*100+"% "+k);b?(n=l,H=k):(o=l,s=k)});if(c==="fill")if(i==="gradient")c=m.x1||m[0]||0,a=m.y1||m[1]||0,q=m.x2||m[2]||0,m=m.y2||m[3]||0,t='angle="'+(90-P.atan((m-a)/(q-c))*180/Aa)+'"',r();else{var j=m.r,Sa=j*2,Ta=j*2,v=m.cx,B=m.cy,x=b.radialReference,$,j=function(){x&&($=d.getBBox(),v+=(x[0]-$.x)/$.width- -0.5,B+=(x[1]-$.y)/$.height-0.5,Sa*=x[2]/$.width,Ta*=x[2]/$.height);t='src="'+G.global.VMLRadialGradientURL+'" size="'+Sa+","+Ta+'" origin="0.5,0.5" position="'+v+","+B+'" color2="'+s+'" ';r()};d.added?j():F(d,"add",j);j=H}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=ta(a),h=["<",c,' opacity="',f.get("a"),'"/>'],T(this.prepVML(h),null,null,b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(""); -b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:ua.prototype.html,path:function(a){var b={coordsize:"10 10"};Ka(a)?b.d=a:S(a)&&r(b,a);return this.createElement("shape").attr(b)},circle:function(a,b,c){var d=this.symbol("circle");if(S(a))c=a.r,b=a.y,a=a.x;d.isCircle= -!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(Ga).attr(b)},image:function(a,b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){var g=this.symbol("rect");g.r=S(a)?a.r:e;return g.attr(S(a)?a:g.crisp(f,a,b,s(c,0),s(d,0)))},invertChild:function(a,b){var c=b.style;D(a,{flip:"x",left:z(c.width)-1,top:z(c.height)-1,rotation:-90})}, -symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=U(f),i=ba(f),j=U(g),k=ba(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!t(e)||!e.r?f=ua.prototype.symbols.square.apply(0, -arguments):(h=I(e.r,c,d),f=["M",a+h,b,"L",f-h,b,"wa",f-2*h,b,f,b+2*h,f-h,b,f,b+h,"L",f,g-h,"wa",f-2*h,g-2*h,f,g,f,g-h,f-h,g,"L",a+h,g,"wa",a,g-2*h,a+2*h,g,a+h,g,a,g-h,"L",a,b+h,"wa",a,b,a+2*h,b+2*h,a,b+h,a+h,b,"x","e"]);return f}}};Highcharts.VMLRenderer=R=function(){this.init.apply(this,arguments)};R.prototype=x(ua.prototype,xb);Ya=R}ua.prototype.measureSpanWidth=function(a,b){var c=y.createElement("span"),d;d=y.createTextNode(a);c.appendChild(d);D(c,b);this.box.appendChild(c);d=c.offsetWidth;Na(c); -return d};var Mb;if(da)Highcharts.CanVGRenderer=R=function(){Ca="http://www.w3.org/1999/xhtml"},R.prototype.symbols={},Mb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Pb(d,a);b.push(c)}}}(),Ya=R;Qa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||!d&&(c.margin[3]|| -c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?n(e[g],f[g],g):g,e=this.label,m=i.info;a.isDatetimeAxis&&m&&(l=b.dateTimeLabelFormats[m.higherRanks[g]||m.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?aa(ga(f)):f});g=d&&{width:s(1,w(d-2*(h.padding||10)))+"px"};g=r(g,h.style);if(t(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(wa(h.rotation))l.rotation=h.rotation;if(d&&h.ellipsis)l._clipHeight= -a.len/i.length;this.label=t(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?a.getBBox()[b.horiz?"height":"width"]:0},getLabelSides:function(){var a=this.label.getBBox(),b=this.axis,c=b.horiz,d=b.options.labels,a=c?a.width:a.height,b=c?a*{left:0,center:0.5,right:1}[b.labelAlign]-d.x:a;return[-b,a-b]},handleOverflow:function(a,b){var B;var c=!0,d=this.axis,e=this.isFirst,f=this.isLast,g=d.horiz?b.x: -b.y,h=d.reversed,i=d.tickPositions,j=this.getLabelSides(),k=j[0],j=j[1],l=d.pos,m=l+d.len,q=this.label.line||0,o=d.labelEdge,n=d.justifyLabels&&(e||f);o[q]===u||g+k>o[q]?o[q]=g+j:n||(c=!1);if(n)B=(d=d.ticks[i[a+(e?1:-1)]])&&d.label.xy&&d.label.xy.x+d.getLabelSides()[e?0:1],i=B,e&&!h||f&&h?g+k<l&&(g=l-k,d&&g+j>i&&(c=!1)):g+j>m&&(g=m-j,d&&g+k<i&&(c=!1)),b.x=g;return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+ -e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,m=i.chart.renderer.fontMetrics(e.style.fontSize).b,q=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);q&&i.side===2&&(b-=m-m*U(q*Ba));!t(e.y)&&!q&&(b+=m-c.getBBox().height/2);if(l)c.line=g/(h||1)%l, -b+=c.line*(i.labelOffset/l);return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,m=h?h+"Grid":"grid",q=h?h+"Tick":"tick",o=e[m+"LineWidth"],p=e[m+"LineColor"],H=e[m+"LineDashStyle"],s=e[q+"Length"],m=e[q+"Width"]||0,t=e[q+"Color"],w=e[q+"Position"],q=this.mark,r=k.step,Z=!0,x=d.tickmarkOffset,v=this.getPosition(g, -j,x,b),y=v.x,v=v.y,B=g&&y===d.pos+d.len||!g&&v===d.pos?-1:1;this.isActive=!0;if(o){j=d.getPlotLinePath(j+x,o*B,b,!0);if(l===u){l={stroke:p,"stroke-width":o};if(H)l.dashstyle=H;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=o?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?"attr":"animate"]({d:j,opacity:c})}if(m&&s)w==="inside"&&(s=-s),d.opposite&&(s=-s),h=this.getMarkPath(y,v,s,m*B,g,f),q?q.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:t,"stroke-width":m,opacity:c}).add(d.axisGroup); -if(i&&!isNaN(y))i.xy=v=this.getLabelPosition(y,v,i,g,k,x,a,r),this.isFirst&&!this.isLast&&!n(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!n(e.showLastLabel,1)?Z=!1:!d.isRadial&&!k.step&&!k.rotation&&!b&&c!==0&&(Z=this.handleOverflow(a,v)),r&&a%r&&(Z=!1),Z&&!isNaN(v.y)?(v.opacity=c,i[this.isNew?"attr":"animate"](v),this.isNew=!1):i.attr("y",-9999)},destroy:function(){Ma(this,this.axis)}};var yb=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};yb.prototype={render:function(){var a=this, -b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,i=e.to,j=e.from,k=t(j)&&t(i),l=e.value,m=e.dashStyle,q=a.svgElem,o=[],p,H=e.color,w=e.zIndex,r=e.events,u=b.chart.renderer;b.isLog&&(j=xa(j),i=xa(i),l=xa(l));if(h){if(o=b.getPlotLinePath(l,h),d={stroke:H,"stroke-width":h},m)d.dashstyle=m}else if(k){if(j=s(j,b.min-d),i=I(i,b.max+d),o=b.getPlotBandPath(j,i,e),d={fill:H},e.borderWidth)d.stroke=e.borderColor,d["stroke-width"]=e.borderWidth}else return;if(t(w))d.zIndex= -w;if(q)if(o)q.animate({d:o},null,q.onGetPath);else{if(q.hide(),q.onGetPath=function(){q.show()},g)a.label=g=g.destroy()}else if(o&&o.length&&(a.svgElem=q=u.path(o).attr(d).add(),r))for(p in e=function(b){q.on(b,function(c){r[b].apply(a,[c])})},r)e(p);if(f&&t(f.text)&&o&&o.length&&b.width>0&&b.height>0){f=x({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=u.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation, -zIndex:w}).css(f.style).add();b=[o[1],o[4],n(o[6],o[1])];o=[o[2],o[5],n(o[7],o[2])];c=La(b);k=La(o);g.align(f,!1,{x:c,y:k,width:za(b)-c,height:za(o)-k});g.show()}else g&&g.hide();return a},destroy:function(){ha(this.axis.plotLinesAndBands,this);delete this.axis;Ma(this)}};qa.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:J,lineColor:"#C0D0E0", -lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#4d759e",fontWeight:"bold"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0, -maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Da(this.total,-1)},style:J.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll= -(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=t(d.linkedTo); -this.tickmarkOffset=this.categories&&d.tickmarkPlacement==="between"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stackExtremes={};this.min=this.max=null;this.crosshair=n(d.crosshair,ja(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;sa(this,a.axes)===-1&&(a.axes.push(this), -a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===u)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)F(this,f,d[f]);if(this.isLog)this.val2lin=xa,this.lin2val=ga},setOptions:function(a){this.options=x(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(G[this.coll],a))},defaultLabelFormatter:function(){var a= -this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=G.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Fa(h,this);else if(c)g=b;else if(d)g=ab(d,b);else if(f&&a>=1E3)for(;f--&&g===u;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Da(b/c,-1)+e[f]);g===u&&(g=b>=1E4?Da(b,0):Da(b,-1,u,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.stackExtremes={};a.buildStacks();p(a.series,function(c){if(c.visible|| -!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=I(n(a.dataMin,d[0]),La(d)),a.dataMax=s(n(a.dataMax,d[0]),za(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(t(c)&&t(e))a.dataMin=I(n(a.dataMin,c),c),a.dataMax=s(n(a.dataMax,e),e);if(t(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g= -this.len,h=1,i=0,j=d?this.oldTransA:this.transA,d=d?this.oldMin:this.min,k=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!j)j=this.transA;c&&(h*=-1,i=g);this.reversed&&(h*=-1,i-=h*g);b?(a=a*h+i,a-=k,a=a/j+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f==="between"&&(f=0.5),a=h*(a-d)*j+i+h*k+(wa(f)?j*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a- -(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,j,k=c&&f.oldChartHeight||f.chartHeight,l=c&&f.oldChartWidth||f.chartWidth,m;i=this.transB;e=n(e,this.translate(a,null,null,c));a=c=w(e+i);i=j=w(k-e-i);if(isNaN(e))m=!0;else if(this.horiz){if(i=h,j=k-this.bottom,a<g||a>g+this.width)m=!0}else if(a=g,c=l-this.right,i<h||i>h+this.height)m=!0;return m&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,j],b||1)},getLinearTickPositions:function(a, -b,c){for(var d,b=aa(N(b/a)*a),c=aa(Ha(c/a)*a),e=[];b<=c;){e.push(b);b=aa(b+a);if(b===d)break;d=b}return e},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,b[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval==="auto")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&d.shift();else for(b=this.min+ -(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===u&&!this.isLog)t(a.min)||t(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===u||h<f)f=h}),this.minRange=I(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,n(a.min,b-d)]; -if(e)d[2]=this.dataMin;b=za(d);c=[b+k,n(a.max,b+k)];if(e)c[2]=this.dataMax;c=La(c);c-b<k&&(d[0]=c-k,d[1]=n(a.min,c-k),b=za(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this.max-this.min,c=0,d,e=0,f=0,g=this.linkedParent,h=!!this.categories,i=this.transA;if(this.isXAxis||h)g?(e=g.minPointOffset,f=g.pointRangePadding):p(this.series,function(a){var g=s(a.pointRange,+h),i=a.options.pointPlacement,m=a.closestPointRange;g>b&&(g=0);c=s(c,g);e=s(e,fa(i)?0:g/2);f=s(f,i==="on"?0:g);!a.noSharedTooltip&& -t(m)&&(d=t(d)?I(d,m):m)}),g=this.ordinalSlope&&d?this.ordinalSlope/d:1,this.minPointOffset=e*=g,this.pointRangePadding=f*=g,this.pointRange=I(c,b),this.closestPointRange=d;if(a)this.oldTransA=i;this.translationSlope=this.transA=i=this.len/(b+f||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=i*e},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,k=d.minPadding,l=d.tickInterval, -m=d.minTickInterval,q=d.tickPixelInterval,o,ma=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=n(c.min,c.dataMin),b.max=n(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ka(11,1)):(b.min=n(b.userMin,d.min,b.dataMin),b.max=n(b.userMax,d.max,b.dataMax));if(e)!a&&I(b.min,n(b.dataMin,b.min))<=0&&ka(10,1),b.min=aa(xa(b.min)),b.max=aa(xa(b.max));if(b.range&&t(b.max))b.userMin=b.min=s(b.min,b.max-b.range),b.userMax=b.max,b.range=null;b.beforePadding&&b.beforePadding(); -b.adjustForMinRange();if(!ma&&!b.usePercentage&&!h&&t(b.min)&&t(b.max)&&(c=b.max-b.min)){if(!t(d.min)&&!t(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!t(d.max)&&!t(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&q===b.linkedParent.options.tickPixelInterval?b.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=n(l,ma?1:(b.max-b.min)*q/s(b.len,q)),!t(l)&&b.len<q&&!this.isRadial&&!ma&&d.startOnTick&& -d.endOnTick&&(o=!0,b.tickInterval/=4));g&&!a&&p(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=s(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<m)b.tickInterval=m;if(!f&&!e&&!l)b.tickInterval=nb(b.tickInterval,null,mb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval=== -"auto"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>s(2*b.len,200)&&ka(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),o&&a.splice(1,a.length-2), -b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(b.min-=0.001,b.max+=0.001)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join("-");if(!this.isLinked&&!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey, -b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==u){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(aa(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(t(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!== -this.oldAxisLength;p(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].total=null,a[b][c].cum=0;this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=this.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax}else if(!this.isXAxis){if(this.oldStacks)a= -this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=n(c,!0),e=r(e,{min:a,max:b});A(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){this.allowZoomOutside||(t(this.dataMin)&&a<=this.dataMin&&(a=u),t(this.dataMax)&&b>=this.dataMax&&(b=u));this.displayBtn=a!==u||b!==u;this.setExtremes(a,b,!1,u,{trigger:"zoom"});return!0},setAxisSize:function(){var a= -this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=n(b.left,a.plotLeft+c);this.top=f=n(b.top,a.plotTop);this.width=c=n(b.width,a.plotWidth-c+d);this.height=b=n(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=s(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a=this.isLog;return{min:a?aa(ga(this.min)):this.min,max:a?aa(ga(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}}, -getThreshold:function(a){var b=this.isLog,c=b?ga(this.min):this.min,b=b?ga(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(n(a,0)-this.side*90+720)%360;return a>15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,q=d.title,o=d.labels,ma=0,H=b.axisOffset,w=b.clipOffset,r=[-1,1,1,-1][h],v, -x=1,Z=n(o.maxStaggerLines,5),y,z,K,B;a.hasData=j=a.hasVisibleSeries||t(a.min)&&t(a.max)&&!!e;a.showAxis=b=j||n(d.showEmpty,!0);a.staggerLines=a.horiz&&o.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:o.zIndex||7}).add();if(j||a.isLinked){a.labelAlign=n(o.align||a.autoLabelAlign(o.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Qa(a,b)});if(a.horiz&& -!a.staggerLines&&Z&&!o.rotation){for(v=a.reversed?[].concat(e).reverse():e;x<Z;){j=[];y=!1;for(o=0;o<v.length;o++)z=v[o],K=(K=f[z].label&&f[z].label.getBBox())?K.width:0,B=o%x,K&&(z=a.translate(z),j[B]!==u&&z<j[B]&&(y=!0),j[B]=z+K);if(y)x++;else break}if(x>1)a.staggerLines=x}p(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign)ma=s(f[b].getLabelSize(),ma)});if(a.staggerLines)ma*=a.staggerLines,a.labelOffset=ma}else for(v in f)f[v].destroy(),delete f[v];if(q&&q.text&&q.enabled!== -!1){if(!a.axisTitle)a.axisTitle=c.text(q.text,0,0,q.useHTML).attr({zIndex:7,rotation:q.rotation||0,align:q.textAlign||{low:"left",middle:"center",high:"right"}[q.align]}).css(q.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],m=n(q.margin,g?5:10),l=q.offset;a.axisTitle[b?"show":"hide"]()}a.offset=r*n(d.offset,H[h]);a.axisTitleMargin=n(l,ma+m+(h!==2&&ma&&r*d.labels[g?"y":"x"]));H[h]=s(H[h],a.axisTitleMargin+k+r*a.offset);w[i]=s(w[i],N(d.lineWidth/2)*2)}, -getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+ -(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.stacks,m=a.ticks,q=a.minorTicks,o=a.alternateBands,n=f.stackLabels,H=f.alternateGridColor,s=a.tickmarkOffset,r=f.lineWidth,w=d.hasRendered&&t(a.oldMin)&&!isNaN(a.oldMin),v= -a.hasData,x=a.showAxis,y,z=a.justifyLabels=!a.staggerLines&&b&&f.labels.overflow==="justify",K;a.labelEdge.length=0;p([m,q,o],function(a){for(var b in a)a[b].isActive=!1});if(v||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){q[b]||(q[b]=new Qa(a,b,"minor"));w&&q[b].isNew&&q[b].render(null,!0);q[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),z&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){z&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<= -a.max)m[b]||(m[b]=new Qa(a,b)),w&&m[b].isNew&&m[b].render(c,!0,0.1),m[b].render(c,!1,1)}),s&&a.min===0&&(m[-1]||(m[-1]=new Qa(a,-1,null,!0)),m[-1].render(-1))),H&&p(i,function(b,c){if(c%2===0&&b<a.max)o[b]||(o[b]=new yb(a)),y=b+s,K=i[c+1]!==u?i[c+1]+s:a.max,o[b].options={from:g?ga(y):y,to:g?ga(K):K,color:H},o[b].render(),o[b].isActive=!0}),!a._addedPlotLB)p((f.plotLines||[]).concat(f.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;p([m,q,o],function(a){var b,c,e=[],f=oa?oa.duration|| -500:0,g=function(){for(c=e.length;c--;)a[e[c]]&&!a[e[c]].isActive&&(a[e[c]].destroy(),delete a[e[c]])};for(b in a)if(!a[b].isActive)a[b].render(b,!1,0),a[b].isActive=!1,e.push(b);a===o||!d.hasRendered||!f?g():f&&setTimeout(g,f)});if(r)b=a.getLinePath(r),a.axisLine?a.axisLine.animate({d:b}):a.axisLine=e.path(b).attr({stroke:f.lineColor,"stroke-width":r,zIndex:7}).add(a.axisGroup),a.axisLine[x?"show":"hide"]();if(k&&x)k[k.isNew?"attr":"animate"](a.getTitlePosition()),k.isNew=!1;if(n&&n.enabled){var B, -A,f=a.stackTotalGroup;if(!f)a.stackTotalGroup=f=e.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();f.translate(d.plotLeft,d.plotTop);for(B in l)for(A in e=l[B],e)e[A].render(f)}a.isDirty=!1},redraw:function(){var a=this.chart.pointer;a.reset&&a.reset(!0);this.render();p(this.plotLinesAndBands,function(a){a.render()});p(this.series,function(a){a.isDirty=!0})},buildStacks:function(){var a=this.series,b=a.length;if(!this.isXAxis){for(;b--;)a[b].setStackedPoints();if(this.usePercentage)for(b= -0;b<a.length;b++)a[b].setPercentStacks()}},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||X(b);for(d in c)Ma(c[d]),c[d]=null;p([b.ticks,b.minorTicks,b.alternateBands],function(a){Ma(a)});for(a=e.length;a--;)e[a].destroy();p("stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup".split(","),function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},drawCrosshair:function(a,b){if(this.crosshair)if((t(b)||!n(this.crosshair.snap,!0))===!1)this.hideCrosshair(); -else{var c,d=this.crosshair,e=d.animation;n(d.snap,!0)?t(b)&&(c=this.chart.inverted!=this.horiz?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos;c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:n(b.stackY,b.y)):this.getPlotLinePath(null,null,null,null,c);if(c===null)this.hideCrosshair();else if(this.cross)this.cross.attr({visibility:"visible"})[e?"animate":"attr"]({d:c},e);else{e={"stroke-width":d.width||1,stroke:d.color||"#C0C0C0",zIndex:d.zIndex||2};if(d.dashStyle)e.dashstyle= -d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}}},hideCrosshair:function(){this.cross&&this.cross.hide()}};r(qa.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],c[5],c[1],c[2]):d=null;return d},addPlotBand:function(a){this.addPlotBandOrLine(a,"plotBands")},addPlotLine:function(a){this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(a,b){var c=(new yb(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]|| -[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();p([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ha(b,b[e])})}});qa.prototype.getLogTickPositions=function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=w(a),g=this.getLinearTickPositions(a, -b,c);else if(a>=0.08)for(var f=N(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=xa(ga(f)*e[h]),j>b&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ga(b),c=ga(c),a=e[d?"minorTickInterval":"tickInterval"],a=n(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ra(this.getLinearTickPositions(a,b,c),xa),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval= -a;return g};qa.prototype.getTimeTicks=function(a,b,c,d){var e=[],f={},g=G.global.useUTC,h,i=new Date(b-Pa),j=a.unitRange,k=a.count;if(t(b)){j>=E.second&&(i.setMilliseconds(0),i.setSeconds(j>=E.minute?0:k*N(i.getSeconds()/k)));if(j>=E.minute)i[Cb](j>=E.hour?0:k*N(i[pb]()/k));if(j>=E.hour)i[Db](j>=E.day?0:k*N(i[qb]()/k));if(j>=E.day)i[sb](j>=E.month?1:k*N(i[Wa]()/k));j>=E.month&&(i[Eb](j>=E.year?0:k*N(i[db]()/k)),h=i[eb]());j>=E.year&&(h-=h%k,i[Fb](h));if(j===E.week)i[sb](i[Wa]()-i[rb]()+n(d,1));b= -1;Pa&&(i=new Date(i.getTime()+Pa));h=i[eb]();for(var d=i.getTime(),l=i[db](),m=i[Wa](),q=g?Pa:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===E.year?d=cb(h+b*k,0):j===E.month?d=cb(h,l+b*k):!g&&(j===E.day||j===E.week)?d=cb(h,l,m+b*k*(j===E.day?1:7)):d+=j*k,b++;e.push(d);p(wb(e,function(a){return j<=E.hour&&a%E.day===q}),function(a){f[a]="day"})}e.info=r(a,{higherRanks:f,totalRange:j*k});return e};qa.prototype.normalizeTimeTickInterval=function(a,b){var c=b||[["millisecond",[1,2,5,10,20, -25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]],d=c[c.length-1],e=E[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=E[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+E[c[g+1][0]])/2)break;e===E.year&&a<5*e&&(f=[1,2,5]);c=nb(a/e,f,d[0]==="year"?s(mb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};Gb.prototype={destroy:function(){Ma(this,this.axis)},render:function(a){var b=this.options, -c=b.format,c=c?Fa(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,0,0,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(this.percent?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e? -c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e.attr({visibility:this.options.crop===!1||d.isInsidePlot(f.x,f.y)?V?"inherit":"visible":"hidden"})}};tb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape,null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-999}); -da||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden;r(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:g?(2*f.anchorX+c)/3:c,anchorY:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b, -c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},n(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=ja(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===u&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i= -a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ra(c,w)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=n(this.options.distance,12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+s(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k<f+5&&(k=f+5,l&&c>=k&&c<=k+b&&(k=c+ -f+i));k+b>f+h&&(k=s(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||ja(this),c=b[0].series,d;d=[c.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});d.push(a.options.footerFormat||"");return d.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared; -clearTimeout(this.hideTimer);this.followPointer=ja(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category,y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(Za(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color|| -"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);A(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(w(c.x),w(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)}};var $a=Highcharts.Pointer=function(a,b){this.init(a,b)};$a.prototype={init:function(a,b){var c=b.chart,d=c.events,e=da?"":c.zoomType,c=a.inverted, -f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(b.tooltip.enabled)a.tooltip=new tb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||C.event;if(!a.target)a.target=a.srcElement;a=Rb(a);d=a.touches?a.touches.item(0):a;if(!b)this.chartPosition=b=Qb(this.chart.container);d.pageX===u?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX- -b.left,d=d.pageY-b.top);return r(a,{chartX:w(c),chartY:w(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this,c=b.chart,d=c.series,e=c.tooltip,f,g,h=c.hoverPoint,i=c.hoverSeries,j,k,l=c.chartWidth,m=b.getIndex(a);if(e&& -b.options.tooltip.shared&&(!i||!i.noSharedTooltip)){g=[];j=d.length;for(k=0;k<j;k++)if(d[k].visible&&d[k].options.enableMouseTracking!==!1&&!d[k].noSharedTooltip&&d[k].tooltipPoints.length&&(f=d[k].tooltipPoints[m])&&f.series)f._dist=M(m-f.clientX),l=I(l,f._dist),g.push(f);for(j=g.length;j--;)g[j]._dist>l&&g.splice(j,1);if(g.length&&g[0].clientX!==b.hoverX)e.refresh(g,a),b.hoverX=g[0].clientX}if(i&&i.tracker){if((f=i.tooltipPoints[m])&&f!==h)f.onMouseOver(a)}else e&&e.followPointer&&!e.isHidden&& -(d=e.getAnchor([{}],a),e.updatePosition({plotX:d[0],plotY:d[1]}));if(e&&!b._onDocumentMouseMove)b._onDocumentMouseMove=function(a){b.onDocumentMouseMove(a)},F(y,"mousemove",b._onDocumentMouseMove);p(c.axes,function(b){b.drawCrosshair(a,n(f,h))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&ja(f)[0].plotX===u&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)X(y, -"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=null;p(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},pinchTranslate:function(a,b,c,d,e,f,g,h){a&&this.pinchTranslateDirection(!0,c,d, -e,f,g,h);b&&this.pinchTranslateDirection(!1,c,d,e,f,g,h)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,m=a?"width":"height",q=i["plot"+(a?"Left":"Top")],o,n,p=h||1,s=i.inverted,t=i.bounds[a?"h":"v"],r=b.length===1,w=b[0][l],u=c[0][l],v=!r&&b[1][l],x=!r&&c[1][l],y,c=function(){!r&&M(w-v)>20&&(p=h||M(u-x)/M(w-v));n=(q-u)/p+w;o=i["plot"+(a?"Width":"Height")]/p};c();b=n;b<t.min?(b=t.min,y=!0):b+o>t.max&&(b=t.max-o,y=!0);y?(u-=0.8*(u-g[j][0]),r|| -(x-=0.8*(x-g[j][1])),c()):g[j]=[u,x];s||(f[j]=n-q,f[m]=o);f=s?1/p:p;e[m]=o;e[j]=b;d[s?a?"scaleY":"scaleX":"scale"+k]=p;d["translate"+k]=f*q+(u-f*w)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker,m={},q=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick),o={};(k||e)&&!q&&a.preventDefault();Ra(f, -function(a){return b.normalize(a)});if(a.type==="touchstart")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=I(e,f),e=s(e,f);b.min=I(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=r({destroy:la},c.plotBox);b.pinchTranslate(i,j,d,f,m,l,o,h);b.hasPinched= -k;b.scaleGroups(m,o);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,q=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m- -d,2)+Math.pow(q-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,q-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-q,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+q}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}}, -drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:I(c,b),max:s(c,b)}),h=!0)}}),h&&A(b,"selection",d,function(a){b.zoom(r(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy(); -c&&this.scaleGroups()}if(b)D(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){this.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft, -a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){this.reset();this.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart,a=this.normalize(a);b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=v(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a= -a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget||a.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble=!0;if(!b.cancelClick)c&&this.inClass(a.target,"highcharts-tracker")?(g=this.chartPosition,h=c.plotX,i=c.plotY,r(c,{pageX:g.left+d+(f? -b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),A(c.series,"click",r(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(r(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&A(b,"click",a))},onContainerTouchStart:function(a){var b=this.chart;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length=== -1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){this.drop(a)},setDOMEvents:function(){var a=this,b=a.chart.container,c;this._events=c=[[b,"onmousedown","onContainerMouseDown"],[b,"onmousemove","onContainerMouseMove"],[b,"onclick","onContainerClick"],[b,"mouseleave","onContainerMouseLeave"],[y,"mouseup","onDocumentMouseUp"]];ib&&c.push([b,"ontouchstart","onContainerTouchStart"],[b,"ontouchmove","onContainerTouchMove"],[y,"touchend","onDocumentTouchEnd"]);p(c,function(b){a["_"+ -b[2]]=function(c){a[b[2]](c)};b[1].indexOf("on")===0?b[0][b[1]]=a["_"+b[2]]:F(b[0],b[1],a["_"+b[2]])})},destroy:function(){var a=this;p(a._events,function(b){b[1].indexOf("on")===0?b[0][b[1]]=null:X(b[0],b[1],a["_"+b[2]])});delete a._events;clearInterval(a.tooltipTimeout)}};J=Highcharts.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode; -if(e!==u&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),ib))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer, -h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,q=function(){if(f.hoverSeries!==a)a.onMouseOver()};if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push("M",e.plotX-i,e.plotY,"L",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({"stroke-linejoin":"round",visibility:a.visible?"visible":"hidden",stroke:Kb,fill:c?Kb:Q,"stroke-width":b.lineWidth+ -(c?0:2*i),zIndex:2}).add(a.group),p([a.tracker,a.markerGroup],function(a){a.addClass("highcharts-tracker").on("mouseover",q).on("mouseout",function(a){g.onTrackerMouseOut(a)}).css(l);if(ib)a.on("touchstart",q)}))}};if(C.PointerEvent||C.MSPointerEvent){var na={};$a.prototype.getWebkitTouches=function(){var a,b=[];b.item=function(a){return this[a]};for(a in na)na.hasOwnProperty(a)&&b.push({pageX:na[a].pageX,pageY:na[a].pageY,target:na[a].target});return b};Va($a.prototype,"init",function(a,b,c){b.container.style["-ms-touch-action"]= -b.container.style["touch-action"]="none";a.call(this,b,c)});Va($a.prototype,"setDOMEvents",function(a){var b=this;a.apply(this,Array.prototype.slice.call(arguments,1));p([[this.chart.container,"PointerDown","touchstart","onContainerTouchStart",function(a){na[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}}],[this.chart.container,"PointerMove","touchmove","onContainerTouchMove",function(a){na[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!na[a.pointerId].target)na[a.pointerId].target= -a.currentTarget}],[document,"PointerUp","touchend","onDocumentTouchEnd",function(a){delete na[a.pointerId]}]],function(a){F(a[0],window.PointerEvent?a[1].toLowerCase():"MS"+a[1],function(d){d=d.originalEvent;if(d.pointerType==="touch"||d.pointerType===d.MSPOINTER_TYPE_TOUCH)a[4](d),b[a[3]]({type:a[2],target:d.currentTarget,preventDefault:la,touches:b.getWebkitTouches()})})})})}var zb=Highcharts.Legend=function(a,b){this.init(a,b)};zb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=n(b.padding, -8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=x(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=n(b.symbolWidth,16),c.pages=[],c.render(),F(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c= -b?c.itemStyle.color:g,h=b?a.legendColor||a.color:g,g=a.options&&a.options.marker,i={stroke:h,fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in g=a.convertAttribs(g),g)d=g[j],d!==u&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p(["legendItem", -"legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Na(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,D(f,{left:b.translateX+e.legendItemWidth+f.x-20+"px",top:g+"px",display:g>c-6&&g<c+d-6?"":Q}))})},renderTitle:function(){var a= -this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,"legend-title").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var B;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout==="horizontal",g=b.symbolWidth,h=e.symbolPadding,i=b.itemStyle,j=b.itemHiddenStyle,k=b.padding, -l=f?n(e.itemDistance,8):0,m=!e.rtl,q=e.width,o=e.itemMarginBottom||0,p=b.itemMarginTop,t=b.initialItemX,r=a.legendItem,u=a.series&&a.series.drawLegendSymbol?a.series:a,v=u.options,v=v&&v.showCheckbox,y=e.useHTML;if(!r&&(a.legendGroup=d.g("legend-item").attr({zIndex:1}).add(b.scrollGroup),u.drawLegendSymbol(b,a),a.legendItem=r=d.text(e.labelFormat?Fa(e.labelFormat,a):e.labelFormatter.call(a),m?g+h:-h,b.baseline,y).css(x(a.visible?i:j)).attr({align:m?"left":"right",zIndex:2}).add(a.legendGroup),(y? -r:a.legendGroup).on("mouseover",function(){a.setState("hover");r.css(b.options.itemHoverStyle)}).on("mouseout",function(){r.css(a.visible?i:j);a.setState()}).on("click",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):A(a,"legendItemClick",b,c)}),b.colorizeItem(a,a.visible),v))a.checkbox=T("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container),F(a.checkbox,"click",function(b){A(a, -"checkboxClick",{checked:b.target.checked},function(){a.select()})});d=r.getBBox();B=a.legendItemWidth=e.itemWidth||a.legendItemWidth||g+h+d.width+l+(v?20:0),e=B;b.itemHeight=g=w(a.legendItemHeight||d.height);if(f&&b.itemX-t+e>(q||c.chartWidth-2*k-t))b.itemX=t,b.itemY+=p+b.lastLineHeight+o,b.lastLineHeight=0;b.maxItemWidth=s(b.maxItemWidth,e);b.lastItemY=p+b.itemY+o;b.lastLineHeight=s(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=p+g+o,b.lastLineHeight=g);b.offsetWidth= -q||s((f?b.itemX-t-l:e)+k,b.offsetWidth)},getAllItems:function(){var a=[];p(this.chart.series,function(b){var c=b.options;if(n(c.showInLegend,!t(c.linkedTo)?u:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(), -a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp(null,null,null,g,h)), -i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,"stroke-width":l||0,fill:m||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(r({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight, -h,i=this.clipRect,j=e.navigation,k=n(j.animation,!0),l=j.arrowSize||12,m=this.nav,q=this.pages,o,s=this.allItems;e.layout==="horizontal"&&(f/=2);g&&(f=I(f,g));q.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=n(this.currentPage,1);this.fullHeight=a;p(s,function(a,b){var c=a._legendItemPos[1],d=w(a.legendItem.bBox.height),e=q.length;if(!e||c-q[e-1]>h)q.push(o||c);b===s.length-1&&c+d-q[e-1]>h&&q.push(c);c!==o&&(o=c)});if(!i)i=b.clipRect=d.clipRect(0, -this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!m)this.nav=m=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,k)}).add(m),this.pager=d.text("",15,10).css(j.style).add(m),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,k)}).add(m);b.scroll(0);a=f}else if(m)i.attr({height:c.chartHeight}),m.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages, -d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==u&&Oa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY, -this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};R=Highcharts.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,n(a.options.symbolRadius,2)).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-w(e.fontMetrics(a.options.itemStyle.fontSize).b* -0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};/Trident\/7\.0/.test(ra)&&Va(zb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};c.chart.renderer.forExport?d():setTimeout(d)});fb.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=x(G, -a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Ia.length;Ia.push(f);d.reflow!==!1&&F(f,"load",function(){f.initReflow()});if(e)for(g in e)F(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=da?!1:n(d.animation,!0);f.pointCount=0;f.counters=new Ab; -f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=L[a.type||b.type||b.defaultSeriesType])||ka(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox, -j=c.length,k=j,l=this.renderer,m=l.isHidden(),q=[];Oa(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts(); -this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,q.push(function(){A(a,"afterSetExtremes",r(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset&&d.reset(!0);l.draw();A(this,"redraw");m&&this.cloneRenderTo(!0);p(q,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id=== -a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ja(b.xAxis||{}),b=b.yAxis=ja(b.yAxis||{});p(c,function(a,b){a.index=b;a.isX=!0});p(b,function(a,b){a.index=b});c=c.concat(b);p(c,function(b){new qa(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];p(this.series,function(b){a=a.concat(wb(b.points||[], -function(a){return a.selected}))});return a},getSelectedSeries:function(){return wb(this.series,function(a){return a.selected})},getStacks:function(){var a=this;p(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});p(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+n(b.options.stack,"")})},showResetZoom:function(){var a=this,b=G.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo=== -"chart"?null:"plotBox";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;A(a,"selection",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?p(this.axes,function(a){b=a.zoom()}):p(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?"zoomX":"zoomY"]||c[h?"pinchX":"pinchY"])b= -e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&S(e))this.resetZoomButton=e.destroy();b&&this.redraw(n(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&p(d,function(a){a.setState()});p(b==="xy"?[1,0]:[1],function(b){var d=a[b?"chartX":"chartY"],h=c[b?"xAxis":"yAxis"][0],i=c[b?"mouseDownX":"mouseDownY"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+ -c[b?"plotWidth":"plotHeight"]-d,!0)-j;h.series.length&&l>I(k.dataMin,k.min)&&i<s(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:"pan"}),e=!0);c[b?"mouseDownX":"mouseDownY"]=d});e&&c.redraw(!1);D(c.container,{cursor:"move"})},setTitle:function(a,b){var f;var c=this,d=c.options,e;e=d.title=x(d.title,a);f=d.subtitle=x(d.subtitle,b),d=f;p([["title",a,e],["subtitle",b,d]],function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(c[b]=d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align, -"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add())});c.layOutTitles()},layOutTitles:function(){var a=0,b=this.title,c=this.subtitle,d=this.options,e=d.title,d=d.subtitle,f=this.spacingBox.width-44;if(b&&(b.css({width:(e.width||f)+"px"}).align(r({y:15},e),!1,"spacingBox"),!e.floating&&!e.verticalAlign))a=b.getBBox().height,a>=18&&a<=25&&(a=15);c&&(c.css({width:(d.width||f)+"px"}).align(r({y:a+e.margin},d),!1,"spacingBox"),!d.floating&&!d.verticalAlign&&(a=Ha(a+c.getBBox().height)));this.titleOffset= -a},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=jb(b,"width");this.containerHeight=jb(b,"height");this.chartWidth=s(0,a.width||this.containerWidth||600);this.chartHeight=s(0,n(a.height,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Na(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone= -b=this.renderTo.cloneNode(0),D(b,{position:"absolute",top:"-9999px",display:"block"}),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+ub++;if(fa(a))this.renderTo=a=y.getElementById(a);a||ka(13,!0);c=z(v(a,"data-highcharts-chart"));!isNaN(c)&&Ia[c]&&Ia[c].destroy();v(a,"data-highcharts-chart",this.index);a.innerHTML="";a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight; -this.container=a=T(Ga,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},r({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ua(a,c,d,!0):new Ya(a,c,d);da&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend, -f=n(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!t(d[0]))this.plotTop=s(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!t(d[1]))this.marginRight=s(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!t(d[3]))this.plotLeft=s(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!t(d[0]))this.plotTop=s(this.plotTop,c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!t(d[2]))this.marginBottom= -s(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});t(d[3])||(this.plotLeft+=b[3]);t(d[0])||(this.plotTop+=b[0]);t(d[2])||(this.marginBottom+=b[2]);t(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,"width"),f=c.height||jb(d,"height"),c= -a?a.target:C,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===C||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};F(C,"resize",b);F(a,"destroy",function(){X(C,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&A(d,"endResize",null,function(){d.isResizing-= -1})};Oa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(t(a))d.chartWidth=e=s(0,w(a)),d.hasUserSize=!!e;if(t(b))d.chartHeight=f=s(0,w(b));(oa?kb:D)(d.container,{width:e+"px",height:f+"px"},oa);d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins();d.redraw(c);d.oldChartHeight=null;A(d,"resize");oa===!1?g():setTimeout(g,oa&&oa.duration|| -500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=w(this.plotLeft);this.plotTop=j=w(this.plotTop);this.plotWidth=k=s(0,w(d-i-this.marginRight));this.plotHeight=l=s(0,w(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox= -c.plotBox={x:i,y:j,width:k,height:l};d=2*N(this.plotBorderWidth/2);b=Ha(s(d,h[3])/2);c=Ha(s(d,h[0])/2);this.clipBox={x:b,y:c,width:N(this.plotSizeX-s(d,h[1])/2-b),height:N(this.plotSizeY-s(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=n(b[0],a[0]);this.marginRight=n(b[1],a[1]);this.marginBottom=n(b[2],a[2]);this.plotLeft=n(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a= -this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,q,o=this.plotLeft,n=this.plotTop,p=this.plotWidth,s=this.plotHeight,r=this.plotBox,t=this.clipRect,w=this.clipBox;q=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null,null,null,c-q,d-q));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e["stroke-width"]= -i;this.chartBackground=b.rect(q/2,q/2,c-q,d-q,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(o,n,p,s,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(r):this.plotBGImage=b.image(l,o,n,p,s).add();t?t.animate({width:w.width,height:w.height}):this.clipRect=b.clipRect(w);if(m)g?g.animate(g.crisp(null,o,n,p,s)):this.plotBorder=b.rect(o,n,p,s,0,-m).attr({stroke:a.plotBorderColor,"stroke-width":m,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a= -this,b=a.options.chart,c,d=a.options.series,e,f;p(["inverted","angular","polar"],function(g){c=L[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=L[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(fa(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},render:function(){var a=this,b=a.axes, -c=a.renderer,d=a.options,e=d.labels,f=d.credits,g;a.setTitle();a.legend=new zb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();p(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&p(e.items,function(b){var d= -r(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;A(a,"destroy");Ia[a.index]=u;a.renderTo.removeAttribute("data-highcharts-chart"); -X(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();p("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",X(d),f&&Na(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!V&&C==C.top&&y.readyState!=="complete"||da&&!C.canvg?(da?Mb.push(function(){a.firstRender()}, -a.options.global.canvasToolsURL):y.attachEvent("onreadystatechange",function(){y.detachEvent("onreadystatechange",a.firstRender);y.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender())a.getContainer(),A(a,"init"),a.resetMargins(),a.setChartSize(),a.propFromSeries(),a.getAxes(),p(b.series||[],function(b){a.initSeries(b)}),a.linkSeries(),A(a,"beforeRender"),a.pointer=new $a(a,b),a.render(),a.renderer.draw(),c&&c.apply(a, -[a]),p(a.callbacks,function(b){b.apply(a,[a])}),a.cloneRenderTo(!0),A(a,"load")},splashArray:function(a,b){var c=b[a],c=S(c)?c:[c,c,c,c];return[n(b[a+"Top"],c[0]),n(b[a+"Right"],c[1]),n(b[a+"Bottom"],c[2]),n(b[a+"Left"],c[3])]}};fb.prototype.callbacks=[];var xb=Highcharts.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[n(b[0],"50%"),n(b[1],"50%"),a.size||"100%",a.innerSize||0],g=I(e,f),h;return Ra(a, -function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100:a)+(d?c:0)})}},Ja=function(){};Ja.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ja.prototype.optionsToObject.call(this,a);r(this, -a);this.options=this.options?r(this.options,a):a;if(d)this.y=this[d];if(this.x===u&&c)this.x=b===u?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b[d[0]]=a;else if(Ka(a)){if(a.length>e){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a==="object"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers= -!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ha(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)X(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a="graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup".split(","),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category, -y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series,e=d.chart,a=n(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[sa(c,d.data)]=c.options;c.setState(a&&"select");b||p(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[sa(a,d.data)]=a.options,a.setState(""), -a.firePointEvent("unselect")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;if(e&&e!==this)e.onMouseOut();this.firePointEvent("mouseOver");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState("hover");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;if(!b||sa(this,b)===-1)this.firePointEvent("mouseOut"),this.setState(),a.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=n(c.valueDecimals, -""),e=c.valuePrefix||"",f=c.valueSuffix||"";p(b.pointArrayMap||["y"],function(b){b="{point."+b;if(e||f)a=a.replace(b+"}",e+b+"}"+f);a=a.replace(b+"}",b+":,."+d+"f}")});return Fa(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});A(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a= -x(this.series.options.point,this.options).events,b;this.events=a;for(b in a)F(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,b){var c=this.plotX,d=this.plotY,e=this.series,f=e.options.states,g=Y[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],j=i&&i.enabled===!1,k=e.stateMarkerGraphic,l=this.marker||{},m=e.chart,q=this.pointAttr,a=a||"",b=b&&k;if(!(a===this.state&&!b||this.selected&&a!=="select"||f[a]&&f[a].enabled===!1||a&&(j||h&&!i.enabled)||a&&l.states&&l.states[a]&& -l.states[a].enabled===!1)){if(this.graphic)f=g&&this.graphic.symbolName&&q[a].r,this.graphic.attr(x(q[a],f?{x:c-f,y:d-f,width:2*f,height:2*f}:{}));else{if(a&&i)if(f=i.radius,l=l.symbol||e.symbol,k&&k.currentSymbol!==l&&(k=k.destroy()),k)k[b?"animate":"attr"]({x:c-f,y:d-f});else e.stateMarkerGraphic=k=m.renderer.symbol(l,c-f,d-f,2*f,2*f).attr(q[a]).add(e.markerGroup),k.currentSymbol=l;if(k)k[a&&m.isInsidePlot(c,d,m.inverted)?"show":"hide"]()}this.state=a}}};var O=function(){};O.prototype={isCartesian:!0, -type:"line",pointClass:Ja,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"},axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return n(a.options.index,a._i)-n(b.options.index,b._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();r(c,{name:b.name,state:"",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(da)b.animation= -!1;e=b.events;for(d in e)F(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();p(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;ob(f,g);this.yAxis&&ob(this.yAxis.series,g);p(f,function(a,b){a.index=b;a.name=a.name||"Series "+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;p(a.axisTypes||[],function(e){p(c[e],function(c){d= -c.options;if(b[e]===d.index||b[e]!==u&&b[e]===d.id||b[e]===u&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&ka(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;p(c.parallelArrays,typeof b==="number"?function(d){var f=d==="y"&&c.toYData?c.toYData(a):a[d];c[d+"Data"][b]=f}:function(a){Array.prototype[b].apply(c[a+"Data"],Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=n(b,a.pointStart,0);this.pointInterval= -n(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else p(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions= -a;c=x(e,c.series,a);this.tooltipOptions=x(G.tooltip,G.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Y[this.type].color;if(!e&&!a.colorByPoint)t(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a= -this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)t(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:R.drawLineMarker,setData:function(a,b){var c=this,d=c.points,e=c.options,f=c.chart,g=null,h=c.xAxis,i=h&&!!h.categories,j;c.xIncrement=null;c.pointRange=i?1:e.pointRange;c.colorCounter=0;var a=a||[],k=a.length; -j=e.turboThreshold;var l=this.xData,m=this.yData,q=c.pointArrayMap,q=q&&q.length;p(this.parallelArrays,function(a){c[a+"Data"].length=0});if(j&&k>j){for(j=0;g===null&&j<k;)g=a[j],j++;if(wa(g)){i=n(e.pointStart,0);e=n(e.pointInterval,1);for(j=0;j<k;j++)l[j]=i,m[j]=a[j],i+=e;c.xIncrement=i}else if(Ka(g))if(q)for(j=0;j<k;j++)e=a[j],l[j]=e[0],m[j]=e.slice(1,q+1);else for(j=0;j<k;j++)e=a[j],l[j]=e[0],m[j]=e[1];else ka(12)}else for(j=0;j<k;j++)if(a[j]!==u&&(e={series:c},c.pointClass.prototype.applyOptions.apply(e, -[a[j]]),c.updateParallelArrays(e,j),i&&e.name))h.names[e.x]=e.name;fa(m[0])&&ka(14,!0);c.data=[];c.options.data=a;for(j=d&&d.length||0;j--;)d[j]&&d[j].destroy&&d[j].destroy();if(h)h.minRange=h.userMinRange;c.isDirty=c.isDirtyData=f.isDirtyBox=!0;n(b,!0)&&f.redraw(!1)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=this.isCartesian;if(k&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(k&&this.sorted&&(!j|| -d>j||this.forceCrop))if(a=h.min,h=h.max,b[d-1]<a||b[0]>h)b=[],c=[];else if(b[0]<a||b[d-1]>h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start,f=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===u||d<g)?g=d:d<0&&this.requireSorting&&ka(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=n(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>= -c){f=s(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(ja(e[m]))):(b[i]?k=b[i]:a[i]!==u&&(b[i]=k=(new f).init(this,a[i],d[m])),l[m]=k);if(b&& -(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=u;this.data=b;this.points=l},setStackedPoints:function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i="-"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,m=k.oldStacks,q,o,n,p,r;for(n=0;n<d;n++){p=a[n];r=b[n];o=(q=j&&r<f)? -i:h;l[o]||(l[o]={});if(!l[o][p])m[o]&&m[o][p]?(l[o][p]=m[o][p],l[o][p].total=null):l[o][p]=new Gb(k,k.options.stackLabels,q,p,g,e);o=l[o][p];o.points[this.index]=[o.cum||0];e==="percent"?(q=q?h:i,j&&l[q]&&l[q][p]?(q=l[q][p],o.total=q.total=s(q.total,o.total)+M(r)||0):o.total=aa(o.total+(M(r)||0))):o.total=aa(o.total+(r||0));o.cum=(o.cum||0)+(r||0);o.points[this.index].push(o.cum);c[n]=o.cum}if(e==="percent")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}},setPercentStacks:function(){var a= -this,b=a.stackKey,c=a.yAxis.stacks;p([b,"-"+b],function(b){var d;for(var e=a.xData.length,f,g;e--;)if(f=a.xData[e],d=(g=c[b]&&c[b][f])&&g.points[a.index],f=d)g=g.total?100/g.total:0,f[0]=aa(f[0]*g),f[1]=aa(f[1]*g),a.stackedYData[e]=f[1]})},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,j,k,l,a=a||this.stackedYData||this.processedYData;d=a.length;for(l=0;l<d;l++)if(j=c[l],k=a[l],i=k!==null&&k!==u&&(!b.isLog||k.length||k>0), -j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=n(void 0,La(e));this.dataMax=n(void 0,za(e))},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||wa(i),k=a.threshold,a=0;a<g;a++){var l=f[a],m=l.x,q=l.y,o= -l.low,p=b&&e.stacks[(this.negStacks&&q<k?"-":"")+this.stackKey];if(e.isLog&&q<=0)l.y=q=null;l.plotX=c.translate(m,0,0,0,1,i,this.type==="flags");if(b&&this.visible&&p&&p[m])p=p[m],q=p.points[this.index],o=q[0],q=q[1],o===0&&(o=n(k,e.min)),e.isLog&&o<=0&&(o=null),l.total=l.stackTotal=p.total,l.percentage=b==="percent"&&l.y/p.total*100,l.stackY=q,p.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=t(o)?e.translate(o,0,1,0,1):null;h&&(q=this.modifyValue(q,l));l.plotY=typeof q==="number"&&q!==Infinity? -e.translate(q,0,1,0,1):u;l.clientX=j?c.translate(m,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==u?d[l.x]:l.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,h,i,j=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;p(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i= -0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===u?0:d+1;for(d=b[i+1]?I(s(0,N((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.dateTimeLabelFormats,d=b.xDateFormat,e=this.xAxis,f=e&&e.options.type==="datetime",b=b.headerFormat,e=e&&e.closestPointRange,g;if(f&&!d){if(e)for(g in E){if(E[g]>=e){d=c[g];break}}else d=c.day;d=d||c.year}f&&d&&wa(a.key)&&(b=b.replace("{point.key}", -"{point.key:"+d+"}"));return Fa(b,{point:a,series:this})},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&A(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&A(this,"mouseOut");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b= -this,c=b.chart,d=c.renderer,e;e=b.options.animation;var f=c.clipBox,g=c.inverted,h;if(e&&!S(e))e=Y[b.type].animation;h="_sharedClip"+e.duration+e.easing;if(a)a=c[h],e=c[h+"m"],a||(c[h]=a=d.clipRect(r(f,{width:0})),c[h+"m"]=e=d.clipRect(-99,g?-c.plotLeft:-c.plotTop,99,g?c.chartWidth:c.chartHeight)),b.group.clip(a),b.markerGroup.clip(e),b.sharedClipKey=h;else{if(a=c[h])a.animate({width:c.plotSizeX},e),c[h+"m"].animate({width:c.plotSizeX+99},e);b.animate=null;b.animationTimeout=setTimeout(function(){b.afterAnimate()}, -e.duration)}},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,c=this.group;c&&this.options.clip!==!1&&(c.clip(a.clipRect),this.markerGroup.clip());setTimeout(function(){b&&a[b]&&(a[b]=a[b].destroy(),a[b+"m"]=a[b+"m"].destroy())},100)},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m,q=this.markerGroup;if(l.enabled||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=N(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=l.enabled&&i.enabled=== -u||i.enabled,m=c.isInsidePlot(w(d),e,c.inverted),a&&e!==u&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""],h=a.r,i=n(i.symbol,this.symbol),j=i.indexOf("url")===0,k)k.attr({visibility:m?V?"inherit":"visible":"hidden"}).animate(r({x:d-h,y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else{if(m&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(q)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{}, -c=c||{},d=d||{};for(f in e)g=e[f],h[f]=n(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Y[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h={stroke:g,fill:g},i=a.points||[],j=[],k,l=a.pointAttrToOptions,m=b.negativeColor,n=c.lineColor,o=c.fillColor,s;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color||ta(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,h);p(["hover","select"],function(b){j[b]=a.convertAttribs(d[b], -j[""])});a.pointAttr=j;for(g=i.length;g--;){h=i[g];if((c=h.options&&h.options.marker||h.options)&&c.enabled===!1)c.radius=0;if(h.negative&&m)h.color=h.fillColor=m;k=b.colorByPoint||h.color;if(h.options)for(s in l)t(c[l[s]])&&(k=!0);if(k){c=c||{};k=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker)f.color=ta(f.color||h.color).brighten(f.brightness||e.brightness).get();f={color:h.color};if(!o)f.fillColor=h.color;if(!n)f.lineColor=h.color;k[""]=a.convertAttribs(r(f,c),j[""]);k.hover=a.convertAttribs(d.hover, -j.hover,k[""]);k.select=a.convertAttribs(d.select,j.select,k[""])}else k=j;h.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(ra),d,e,f=a.data||[],g,h,i;A(a,"destroy");X(a);p(a.axisTypes||[],function(b){if(i=a[b])ha(i.series,a),i.isDirty=i.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);p("area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip".split(","), -function(b){a[b]&&(d=c&&b==="group"?"hide":"destroy",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ha(b.series,a);for(h in a)delete a[h]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;p(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?"L":"M"),d&&f&&(i=a[f-1],d==="right"?c.push(i.plotX,h):d==="center"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a= -this,b=[],c,d=[];p(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!=="square",g=this.getGraphPath(),h=b.negativeColor;h&&c.push(["graphNeg",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)Za(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],"stroke-width":d,zIndex:1},e?l.dashstyle=e:f&&(l["stroke-linecap"]= -l["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=s(e,j),l=this.yAxis;if(d&&(f||g)){d=w(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth- -d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)F(c,"resize",a),F(b, -"destroy",function(){X(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis?this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG, -e=this.visible?"visible":"hidden",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup("group","series",e,f,h);this.markerGroup=this.plotGroup("markerGroup","markers",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels&&this.drawDataLabels();this.visible&&this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!==!1&&!this.sharedClipKey&& -!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:n(d&&d.left,a.plotLeft),translateY:n(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints(!0);this.render();b&&A(this,"updatedData")},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg, -e=b.states,b=b.lineWidth,a=a||"";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&(a={"stroke-width":b},c.attr(a),d&&d.attr(a)))},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===u?!h:a)?"show":"hide";p(["group","dataLabelsGroup","markerGroup","tracker"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c, -a);c.isDirty=!0;c.options.stacking&&p(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});p(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();A(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===u?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;A(this,a?"select":"unselect")},drawTracker:J.drawTrackerGraph};r(fb.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b= -n(b,!0),A(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options;new qa(this,x(a,{index:this[e].length,isX:b}));f[e]=ja(f[e]||{});f[e].push(a);n(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=T(Ga,{className:"highcharts-loading"},r(d.style,{zIndex:10,display:Q}),this.container),this.loadingSpan=T("span", -null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)D(c,{opacity:0,display:"",left:this.plotLeft+"px",top:this.plotTop+"px",width:this.plotWidth+"px",height:this.plotHeight+"px"}),kb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&kb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){D(b,{display:Q})}});this.loadingShown=!1}});r(Ja.prototype,{update:function(a, -b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=n(b,!0);d.firePointEvent("update",{options:a},function(){d.applyOptions(a);if(S(a)){e.getAttribs();if(f)a&&a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||""]);if(a&&a.dataLabels&&d.dataLabel)d.dataLabel=d.dataLabel.destroy()}g=sa(d,h);e.updateParallelArrays(d,g);j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType==="point"&&i.legend.destroyItem(d); -b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;Oa(b,f);a=n(a,!0);c.firePointEvent("remove",null,function(){g=sa(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.updateParallelArrays(c,"splice",g,1);c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&f.redraw()})}});r(O.prototype,{addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xAxis&&this.xAxis.names,k=g&&g.shift||0,l=e.data, -m,q=this.xData;Oa(d,i);c&&p([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=k+1});if(h)h.isArea=!0;b=n(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=q.length;if(this.requireSorting&&g<q[h-1])for(m=!0;h&&q[h-1]>g;)h--;this.updateParallelArrays(d,"splice",h,0,0);this.updateParallelArrays(d,h);if(j)j[g]=d.name;l.splice(h,0,a);m&&(this.data.splice(h,0,null),this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1): -(f.shift(),this.updateParallelArrays(d,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=n(a,!0);if(!c.isRemoving)c.isRemoving=!0,A(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},update:function(a,b){var c=this.chart,d=this.type,e=L[d].prototype,f,a=x(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data}, -a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=u);r(this,L[a.type||d].prototype);this.init(c,a);n(b,!0)&&c.redraw(!1)}});r(qa.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=x(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=u;this.init(c,r(a,{events:u}));c.isDirtyBox=!0;n(b,!0)&&c.redraw()},remove:function(a){var b=this.chart,c=this.coll;p(this.series,function(a){a.remove(!1)});ha(b.axes,this);ha(b[c],this); -b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;n(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});var ca=ia(O);L.line=ca;Y.area=x(W,{threshold:0});var Ua=ia(O,{type:"area",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,m,n;if(this.options.stacking&&!this.cropped){for(m= -0;m<j.length;m++)g[j[m].x]=j[m];for(n in f)f[n].total!==null&&c.push(+n);c.sort(function(a,b){return a-b});p(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:la}))});b.length&&a.push(b)}else O.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=O.prototype.getSegmentPath.call(this,a), -c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push("L",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=n(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push("L",b[b.length-1].plotX,c,"L",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];O.prototype.drawGraph.apply(this);var a=this, -b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[["area",this.color,c.fillColor]];(d||e)&&f.push(["areaNeg",d,e]);p(f,function(d){var e=d[0],f=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:n(d[2],ta(d[1]).setOpacity(n(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:R.drawRectangle});L.area=Ua;Y.spline=x(W);ca=ia(O,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j= -g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=s(a,e),k=2*e-i):i<a&&i<e&&(i=I(a,e),k=2*e-i);k>g&&k>e?(k=s(g,e),i=2*e-k):k<g&&k<e&&(k=I(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});L.spline=ca;Y.areaspline=x(Y.area);Ua=Ua.prototype;ca=ia(ca,{type:"areaspline",closedStacks:!0,getSegmentPath:Ua.getSegmentPath, -closeSegment:Ua.closeSegment,drawGraph:Ua.drawGraph,drawLegendSymbol:R.drawRectangle});L.areaspline=ca;Y.column=x(W,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,threshold:0});ca=ia(O,{type:"column",pointAttrToOptions:{stroke:"borderColor", -"stroke-width":"borderWidth",fill:"color",r:"borderRadius"},cropShoulder:0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){O.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h,i=0;b.grouping===!1?i=1:p(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos=== -e.pos)c.stacking?(f=b.stackKey,g[f]===u&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=I(M(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=t(l)?(k-l)/2:k*b.pointPadding,l=n(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this.chart,b=this.options,c=b.borderWidth,d=this.yAxis,e=this.translatedThreshold=d.getThreshold(b.threshold), -f=n(b.minPointLength,5),b=this.getColumnMetrics(),g=b.width,h=this.barW=Ha(s(g,1+2*c)),i=this.pointXOffset=b.offset,j=-(c%2?0.5:0),k=c%2?0.5:1;a.renderer.isVML&&a.inverted&&(k+=1);O.prototype.translate.apply(this);p(this.points,function(a){var b=n(a.yBottom,e),c=I(s(-999-b,a.plotY),d.len+999+b),o=a.plotX+i,p=h,r=I(c,b),t,c=s(c,b)-r;M(c)<f&&f&&(c=f,r=w(M(r-e)>f?b-f:e-(d.translate(a.y,0,1,0,1)<=e?f:0)));a.barX=o;a.pointWidth=g;b=M(o)<0.5;p=w(o+p)+j;o=w(o)+j;p-=o;t=M(r)<0.5;c=w(r+c)+k;r=w(r)+k;c-=r; -b&&(o+=1,p-=1);t&&(r-=1,c+=1);a.shapeType="rect";a.shapeArgs={x:o,y:r,width:p,height:c}})},getSymbol:la,drawLegendSymbol:R.drawRectangle,drawGraph:la,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=b.options.animationLimit||250,f;p(a.points,function(g){var h=g.plotY,i=g.graphic;if(h!==u&&!isNaN(h)&&g.y!==null)f=g.shapeArgs,i?(Za(i),i[b.pointCount<e?"animate":"attr"](x(f))):g.graphic=d[g.shapeType](f).attr(g.pointAttr[g.selected?"select":""]).add(a.group).shadow(c.shadow,null, -c.stacking&&!c.borderRadius);else if(i)g.graphic=i.destroy()})},drawTracker:J.drawTrackerPoint,animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(V)a?(e.scaleY=0.001,a=I(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?"translateX":"translateY"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type=== -a.type)b.isDirty=!0});O.prototype.remove.apply(a,arguments)}});L.column=ca;Y.bar=x(Y.column);ca=ia(ca,{type:"bar",inverted:!0});L.bar=ca;Y.scatter=x(W,{lineWidth:0,tooltip:{headerFormat:'<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>",followPointer:!0},stickyTracking:!1});ca=ia(O,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],takeOrdinalPosition:!1,drawTracker:J.drawTrackerPoint, -drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)},setTooltipPoints:la});L.scatter=ca;Y.pie=x(W,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});W={type:"pie",isCartesian:!1,pointClass:ia(Ja, -{init:function(){Ja.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;r(a,{visible:a.visible!==!1,name:n(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};F(a,"select",b);F(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart,e;b.visible=b.options.visible=a=a===u?!b.visible:a;c.options.data[sa(b,c.data)]=b.options;e=a?"show":"hide";p(["graphic","dataLabel","connector","shadowGroup"],function(a){if(b[a])b[a][e]()});b.legendItem&&d.legend.colorizeItem(b, -a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Oa(c,d.chart);n(b,!0);this.sliced=this.options.sliced=a=t(a)?a:!this.sliced;d.options.data[sa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth", -fill:"color"},getColor:la,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b){O.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();n(b,!0)&&this.chart.redraw()},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this); -c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=Aa/180*(i-90),i=(this.endAngleRad=Aa/180*((c.endAngle||i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h= -P.asin((b-a[1])/(a[2]/2+l));return a[0]+(c?-1:1)*U(h)*(a[2]/2+l)};for(m=0;m<n;m++){o=k[m];f=j+b*i;if(!c||o.visible)b+=o.percentage/100;g=j+b*i;o.shapeType="arc";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:w(f*1E3)/1E3,end:w(g*1E3)/1E3};h=(g+f)/2;h>0.75*i&&(h-=2*Aa);o.slicedTranslation={translateX:w(U(h)*d),translateY:w(ba(h)*d)};f=U(h)*a[2]/2;g=ba(h)*a[2]/2;o.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-Aa/2||h>Aa/2?1:0;o.angle=h;e=I(e,l/2);o.labelPos=[a[0]+f+U(h)*l,a[1]+g+ba(h)*l,a[0]+ -f+U(h)*e,a[1]+g+ba(h)*e,a[0]+f,a[1]+g,l<0?"center":o.half?"right":"left",h]}},setTooltipPoints:la,drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(r(g,c)):h.graphic=d=b.arc(g).setRadialReference(a.center).attr(h.pointAttr[h.selected? -"select":""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawTracker:J.drawTrackerPoint,drawLegendSymbol:R.drawRectangle,getCenter:xb.getCenter,getSymbol:la};W=ia(O,W);L.pie=W;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,b=a.points,e,f,g,h;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d), -h=a.plotGroup("dataLabelsGroup","data-labels",a.visible?"visible":"hidden",d.zIndex||6),f=d,p(b,function(b){var j,k=b.dataLabel,l,m,p=b.connector,o=!0;e=b.options&&b.options.dataLabels;j=n(e&&e.enabled,f.enabled);if(k&&!j)b.dataLabel=k.destroy();else if(j){d=x(f,e);j=d.rotation;l=b.getLabelConfig();g=d.format?Fa(d.format,l):d.formatter.call(l,d);d.style.color=n(d.color,d.style.color,a.color,"black");if(k)if(t(g))k.attr({text:g}),o=!1;else{if(b.dataLabel=k=k.destroy(),p)b.connector=p.destroy()}else if(t(g)){k= -{fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:j,padding:d.padding,zIndex:1};for(m in k)k[m]===u&&delete k[m];k=b.dataLabel=a.chart.renderer[j?"text":"label"](g,0,-999,null,null,null,d.useHTML).attr(k).css(r(d.style,c&&{cursor:c})).add(h).shadow(d.shadow)}k&&a.alignDataLabel(b,k,d,null,o)}})};O.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=n(a.plotX,-999),i=n(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL|| -f.isInsidePlot(a.plotX,a.plotY,g)))d=r({x:g?f.plotWidth-i:h,y:w(g?f.plotHeight-h:i),width:0,height:0},d),r(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c,null,d),g=b.alignAttr,n(c.overflow,"justify")==="justify"?this.justifyDataLabel(b,c,g,j,d,e):n(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a, -b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight-j,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(L.pie)L.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=n(e.connectorPadding, -10),g=n(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=n(e.softConnector,!0),l=e.distance,m=a.center,q=m[2]/2,o=m[1],r=l>0,t,u,v,x,y=[[],[]],z,A,E,K,B,D=[0,0,0,0],I=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&y[a.half].push(a)});for(K=0;!x&&b[K];)x=b[K]&&b[K].dataLabel&&(b[K].dataLabel.getBBox().height||21),K++;for(K=2;K--;){var b=[],J=[],F=y[K],G=F.length,C;a.sortByAngle(F,K-0.5);if(l> -0){for(B=o-q-l;B<=o+q+l;B+=x)b.push(B);u=b.length;if(G>u){c=[].concat(F);c.sort(I);for(B=G;B--;)c[B].rank=B;for(B=G;B--;)F[B].rank>=u&&F.splice(B,1);G=F.length}for(B=0;B<G;B++){c=F[B];v=c.labelPos;c=9999;var L,N;for(N=0;N<u;N++)L=M(b[N]-v[1]),L<c&&(c=L,C=N);if(C<B&&b[B]!==null)C=B;else for(u<G-B+C&&b[B]!==null&&(C=u-G+B);b[C]===null;)C++;J.push({i:C,y:b[C]});b[C]=null}J.sort(I)}for(B=0;B<G;B++){c=F[B];v=c.labelPos;t=c.dataLabel;E=c.visible===!1?"hidden":"visible";c=v[1];if(l>0){if(u=J.pop(),C=u.i, -A=u.y,c>A&&b[C+1]!==null||c<A&&b[C-1]!==null)A=c}else A=c;z=e.justify?m[0]+(K?-1:1)*(q+l):a.getX(C===0||C===b.length-1?c:A,K);t._attr={visibility:E,align:v[6]};t._pos={x:z+e.x+({left:f,right:-f}[v[6]]||0),y:A+e.y-10};t.connX=z;t.connY=A;if(this.options.size===null)u=t.width,z-u<f?D[3]=s(w(u-z+f),D[3]):z+u>h-f&&(D[1]=s(w(z+u-h+f),D[1])),A-x/2<0?D[0]=s(w(-A+x/2),D[0]):A+x/2>d&&(D[2]=s(w(A+x/2-d),D[2]))}}if(za(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),r&&g&&p(this.points,function(b){i= -b.connector;v=b.labelPos;if((t=b.dataLabel)&&t._pos)E=t._attr.visibility,z=t.connX,A=t.connY,j=k?["M",z+(v[6]==="left"?5:-5),A,"C",z,A,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],"L",v[4],v[5]]:["M",z+(v[6]==="left"?5:-5),A,"L",v[2],v[3],"L",v[4],v[5]],i?(i.animate({d:j}),i.attr("visibility",E)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},L.pie.prototype.placeDataLabels=function(){p(this.points, -function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},L.pie.prototype.alignDataLabel=la,L.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=s(b[2]-s(a[1],a[3]),c):(e=s(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=s(I(e,b[2]-s(a[0],a[2])),c):(e=s(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),p(this.points,function(a){if(a.dataLabel)a.dataLabel._pos= -null}),this.drawDataLabels&&this.drawDataLabels()):f=!0;return f};if(L.column)L.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>n(this.translatedThreshold,f.plotSizeY),j=n(c.inside,!!this.options.stacking);if(h&&(d=x(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=n(c.align,!g||j?"center":i?"right":"left"); -c.verticalAlign=n(c.verticalAlign,g||j?"middle":i?"top":"bottom");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};r(Highcharts,{Axis:qa,Chart:fb,Color:ta,Point:Ja,Tick:Qa,Tooltip:tb,Renderer:Ya,Series:O,SVGElement:pa,SVGRenderer:ua,arrayMin:La,arrayMax:za,charts:Ia,dateFormat:ab,format:Fa,pathAnim:vb,getOptions:function(){return G},hasBidiBug:Nb,isTouchDevice:Ib,numberFormat:Da,seriesTypes:L,setOptions:function(a){G=x(!0,G,a);Bb();return G},addEvent:F,removeEvent:X,createElement:T,discardElement:Na, -css:D,each:p,extend:r,map:Ra,merge:x,pick:n,splat:ja,extendClass:ia,pInt:z,wrap:Va,svg:V,canvas:da,vml:!V&&!da,product:"Highcharts",version:"3.0.9"})})(); -/* - Highcharts JS v3.0.9 (2014-01-15) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(k,D){function J(a,b,c){this.init.call(this,a,b,c)}var N=k.arrayMin,O=k.arrayMax,t=k.each,z=k.extend,q=k.merge,P=k.map,r=k.pick,w=k.pInt,o=k.getOptions().plotOptions,h=k.seriesTypes,u=k.extendClass,K=k.splat,p=k.wrap,L=k.Axis,A=k.Tick,H=k.Point,Q=k.Pointer,R=k.TrackerMixin,S=k.CenteredSeriesMixin,x=k.Series,v=Math,E=v.round,B=v.floor,T=v.max,U=k.Color,s=function(){};z(J.prototype,{init:function(a,b,c){var d=this,e=d.defaultOptions;d.chart=b;if(b.angular)e.background={};d.options=a=q(e,a); -(a=a.background)&&t([].concat(K(a)).reverse(),function(a){var f=a.backgroundColor,a=q(d.defaultBackgroundOptions,a);if(f)a.backgroundColor=f;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}}); -var G=L.prototype,A=A.prototype,V={getOffset:s,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:s,setCategories:s,setTitle:s},M={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,plotBands:[],tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,distance:15, -x:0,y:null},maxPadding:0,minPadding:0,plotBands:[],showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},plotBands:[],showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){this.options=q(this.defaultOptions,this.defaultRadialOptions,a)},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0;this.center=this.pane.center=S.getCenter.call(this.pane)},getLinePath:function(a,b){var c=this.center, -b=r(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center)this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.minPixelPadding=this.isXAxis?this.transA*this.minPointOffset+(this.reversed?(this.endAngleRad-this.startAngleRad)/4:0):0},beforeSetTickPositions:function(){this.autoConnect&& -(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial)this.center=this.pane.center=k.CenteredSeriesMixin.getCenter.call(this.pane),this.len=this.width=this.height=this.isCircular?this.center[2]*(this.endAngleRad-this.startAngleRad)/2:this.center[2]/2},getPosition:function(a,b){if(!this.isCircular)b=this.translate(a),a=this.min;return this.postTranslate(this.translate(a),r(b,this.center[2]/2)-this.offset)},postTranslate:function(a, -b){var c=this.chart,d=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,e=this.startAngleRad,g=d[2]/2,f=[r(c.outerRadius,"100%"),c.innerRadius,r(c.thickness,10)],j=/%$/,n,l=this.isCircular;this.options.gridLineInterpolation==="polygon"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(l||(f[0]=this.translate(a),f[1]=this.translate(b)),f=P(f,function(a){j.test(a)&&(a=w(a,10)*g/100); -return a}),c.shape==="circle"||!l?(a=-Math.PI/2,b=Math.PI*1.5,n=!0):(a=e+this.translate(a),b=e+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],f[0],f[0],{start:a,end:b,innerR:r(f[1],f[0]-f[2]),open:n}));return d},getPlotLinePath:function(a,b){var c=this.center,d=this.chart,e=this.getPosition(a),g,f,j;this.isCircular?j=["M",c[0]+d.plotLeft,c[1]+d.plotTop,"L",e.x,e.y]:this.options.gridLineInterpolation==="circle"?(a=this.translate(a))&&(j=this.getLinePath(0,a)):(g= -d.xAxis[0],j=[],a=this.translate(a),c=g.tickPositions,g.autoConnect&&(c=c.concat([c[0]])),b&&(c=[].concat(c).reverse()),t(c,function(c,b){f=g.getPosition(c,a);j.push(b?"L":"M",f.x,f.y)}));return j},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};p(G,"init",function(a,b,c){var i;var d=b.angular,e=b.polar,g=c.isX,f=d&&g,j,n;n=b.options;var l=c.pane||0;if(d){if(z(this, -f?V:M),j=!g)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)z(this,M),this.defaultRadialOptions=(j=g)?this.defaultRadialXOptions:q(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!f&&(d||e)){a=this.options;if(!b.panes)b.panes=[];this.pane=(i=b.panes[l]=b.panes[l]||new J(K(n.pane)[l],b,this),l=i);l=l.options;b.inverted=!1;n.chart.zoomType=null;this.startAngleRad=b=(l.startAngle-90)*Math.PI/180;this.endAngleRad=n=(r(l.endAngle,l.startAngle+360)-90)*Math.PI/ -180;this.offset=a.offset||0;if((this.isCircular=j)&&c.max===D&&n-b===2*Math.PI)this.autoConnect=!0}});p(A,"getPosition",function(a,b,c,d,e){var g=this.axis;return g.getPosition?g.getPosition(c):a.call(this,b,c,d,e)});p(A,"getLabelPosition",function(a,b,c,d,e,g,f,j,n){var l=this.axis,i=g.y,m=g.align,y=(l.translate(this.pos)+l.startAngleRad+Math.PI/2)/Math.PI*180%360;l.isRadial?(a=l.getPosition(this.pos,l.center[2]/2+r(g.distance,-25)),g.rotation==="auto"?d.attr({rotation:y}):i===null&&(i=l.chart.renderer.fontMetrics(d.styles.fontSize).b- -d.getBBox().height/2),m===null&&(m=l.isCircular?y>20&&y<160?"left":y>200&&y<340?"right":"center":"center",d.attr({align:m})),a.x+=g.x,a.y+=i):a=a.call(this,b,c,d,e,g,f,j,n);return a});p(A,"getMarkPath",function(a,b,c,d,e,g,f){var j=this.axis;j.isRadial?(a=j.getPosition(this.pos,j.center[2]/2+d),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,d,e,g,f);return b});o.arearange=q(o.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'}, -trackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}});h.arearange=u(h.area,{type:"arearange",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",getSegments:function(){var a=this;t(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});x.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this);t(this.points, -function(b){var c=b.low,d=b.high,e=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=e,b.plotHigh=null):(b.plotLow=e,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,e=x.prototype.getSegmentPath,g,f;f=this.options;var j=f.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)g=a[d],g.plotHigh!==null&&c.push({plotX:g.plotX,plotY:g.plotHigh});a=e.call(this,b);if(j)j=== -!0&&(j="left"),f.step={left:"right",center:"center",right:"left"}[j];c=e.call(this,c);f.step=j;f=[].concat(a,c);c[0]="L";this.areaPath=this.areaPath.concat(a,c);return f},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],e=x.prototype,g=this.options.dataLabels,f,j=this.chart.inverted;if(g.enabled||this._hasPointLabels){for(c=b;c--;)f=a[c],f.y=f.high,f.plotY=f.plotHigh,d[c]=f.dataLabel,f.dataLabel=f.dataLabelUpper,f.below=!1,j?(g.align="left",g.x=g.xHigh):g.y=g.yHigh;e.drawDataLabels&&e.drawDataLabels.apply(this, -arguments);for(c=b;c--;)f=a[c],f.dataLabelUpper=f.dataLabel,f.dataLabel=d[c],f.y=f.low,f.plotY=f.plotLow,f.below=!0,j?(g.align="right",g.x=g.xLow):g.y=g.yLow;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}},alignDataLabel:function(){h.column.prototype.alignDataLabel.apply(this,arguments)},getSymbol:h.column.prototype.getSymbol,drawPoints:s});o.areasplinerange=q(o.arearange);h.areasplinerange=u(h.arearange,{type:"areasplinerange",getPointSpline:h.spline.prototype.getPointSpline});(function(){var a= -h.column.prototype;o.columnrange=q(o.column,o.arearange,{lineWidth:1,pointRange:null});h.columnrange=u(h.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,d;a.translate.apply(b);t(b.points,function(a){var g=a.shapeArgs,f=b.options.minPointLength,j;a.plotHigh=d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;j=d;a=a.plotY-d;a<f&&(f-=a,a+=f,j-=f/2);g.height=a;g.y=j})},trackerGroups:["group","dataLabels"],drawGraph:s,pointAttrToOptions:a.pointAttrToOptions,drawPoints:a.drawPoints, -drawTracker:a.drawTracker,animate:a.animate,getColumnMetrics:a.getColumnMetrics})})();o.gauge=q(o.line,{dataLabels:{enabled:!0,y:15,borderWidth:1,borderColor:"silver",borderRadius:3,crop:!1,style:{fontWeight:"bold"},verticalAlign:"top",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:""},showInLegend:!1});H={type:"gauge",pointClass:u(H,{setState:function(a){this.state=a}}),angular:!0,drawGraph:s,fixedBox:!0,forceDL:!0,trackerGroups:["group","dataLabels"],translate:function(){var a=this.yAxis,b=this.options, -c=a.center;this.generatePoints();t(this.points,function(d){var e=q(b.dial,d.dial),g=w(r(e.radius,80))*c[2]/200,f=w(r(e.baseLength,70))*g/100,j=w(r(e.rearLength,10))*g/100,n=e.baseWidth||3,l=e.topWidth||1,i=a.startAngleRad+a.translate(d.y,null,null,null,!0);b.wrap===!1&&(i=Math.max(a.startAngleRad,Math.min(a.endAngleRad,i)));i=i*180/Math.PI;d.shapeType="path";d.shapeArgs={d:e.path||["M",-j,-n/2,"L",f,-n/2,g,-l/2,g,l/2,f,n/2,-j,n/2,"z"],translateX:c[0],translateY:c[1],rotation:i};d.plotX=c[0];d.plotY= -c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,d=a.options,e=d.pivot,g=a.chart.renderer;t(a.points,function(f){var c=f.graphic,b=f.shapeArgs,e=b.d,i=q(d.dial,f.dial);c?(c.animate(b),b.d=e):f.graphic=g[f.shapeType](b).attr({stroke:i.borderColor||"none","stroke-width":i.borderWidth||0,fill:i.backgroundColor||"black",rotation:b.rotation}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=g.circle(0,0,r(e.radius,5)).attr({"stroke-width":e.borderWidth||0,stroke:e.borderColor|| -"silver",fill:e.backgroundColor||"black"}).translate(b[0],b[1]).add(a.group)},animate:function(a){var b=this;if(!a)t(b.points,function(a){var d=a.graphic;d&&(d.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),d.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup("group","series",this.visible?"visible":"hidden",this.options.zIndex,this.chart.seriesGroup);x.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:function(a, -b){x.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();r(b,!0)&&this.chart.redraw()},drawTracker:R.drawTrackerPoint};h.gauge=u(h.line,H);o.boxplot=q(o.column,{fillColor:"#FFFFFF",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style="color:{series.color};font-weight:bold">{series.name}</span><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'}, -whiskerLength:"50%",whiskerWidth:2});h.boxplot=u(h.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:s,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);t(this.points,function(c){t(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a= -this,b=a.points,c=a.options,d=a.chart.renderer,e,g,f,j,n,l,i,m,y,h,k,I,o,p,q,u,x,s,v,w,A,z,F=a.doQuartiles!==!1,C=parseInt(a.options.whiskerLength,10)/100;t(b,function(b){y=b.graphic;A=b.shapeArgs;k={};p={};u={};z=b.color||a.color;if(b.plotY!==D)if(e=b.pointAttr[b.selected?"selected":""],x=A.width,s=B(A.x),v=s+x,w=E(x/2),g=B(F?b.q1Plot:b.lowPlot),f=B(F?b.q3Plot:b.lowPlot),j=B(b.highPlot),n=B(b.lowPlot),k.stroke=b.stemColor||c.stemColor||z,k["stroke-width"]=r(b.stemWidth,c.stemWidth,c.lineWidth),k.dashstyle= -b.stemDashStyle||c.stemDashStyle,p.stroke=b.whiskerColor||c.whiskerColor||z,p["stroke-width"]=r(b.whiskerWidth,c.whiskerWidth,c.lineWidth),u.stroke=b.medianColor||c.medianColor||z,u["stroke-width"]=r(b.medianWidth,c.medianWidth,c.lineWidth),u["stroke-linecap"]="round",i=k["stroke-width"]%2/2,m=s+w+i,h=["M",m,f,"L",m,j,"M",m,g,"L",m,n,"z"],F&&(i=e["stroke-width"]%2/2,m=B(m)+i,g=B(g)+i,f=B(f)+i,s+=i,v+=i,I=["M",s,f,"L",s,g,"L",v,g,"L",v,f,"L",s,f,"z"]),C&&(i=p["stroke-width"]%2/2,j+=i,n+=i,o=["M",m- -w*C,j,"L",m+w*C,j,"M",m-w*C,n,"L",m+w*C,n]),i=u["stroke-width"]%2/2,l=E(b.medianPlot)+i,q=["M",s,l,"L",v,l,"z"],y)b.stem.animate({d:h}),C&&b.whiskers.animate({d:o}),F&&b.box.animate({d:I}),b.medianShape.animate({d:q});else{b.graphic=y=d.g().add(a.group);b.stem=d.path(h).attr(k).add(y);if(C)b.whiskers=d.path(o).attr(p).add(y);if(F)b.box=d.path(I).attr(e).add(y);b.medianShape=d.path(q).attr(u).add(y)}})}});o.errorbar=q(o.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'}, -whiskerWidth:null});h.errorbar=u(h.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});o.waterfall=q(o.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333"});h.waterfall=u(h.column,{type:"waterfall",upColorProp:"fill",pointArrayMap:["low","y"],pointValKey:"y",init:function(a, -b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.options,b=this.yAxis,c,d,e,g,f,j,n,l,i;c=a.threshold;a=a.borderWidth%2/2;h.column.prototype.translate.apply(this);l=c;e=this.points;for(d=0,c=e.length;d<c;d++){g=e[d];f=g.shapeArgs;j=this.getStack(d);i=j.points[this.index];if(isNaN(g.y))g.y=this.yData[d];n=T(l,l+g.y)+i[0];f.y=b.translate(n,0,1);g.isSum||g.isIntermediateSum?(f.y=b.translate(i[1],0,1),f.height=b.translate(i[0],0,1)-f.y):l+=j.total;f.height<0&&(f.y+= -f.height,f.height*=-1);g.plotY=f.y=E(f.y)-a;f.height=E(f.height);g.yBottom=f.y+f.height}},processData:function(a){var b=this.yData,c=this.points,d,e=b.length,g=this.options.threshold||0,f,j,n,l,i,m;j=f=n=l=g;for(m=0;m<e;m++)i=b[m],d=c&&c[m]?c[m]:{},i==="sum"||d.isSum?b[m]=j:i==="intermediateSum"||d.isIntermediateSum?(b[m]=f,f=g):(j+=i,f+=i),n=Math.min(j,n),l=Math.max(j,l);x.prototype.processData.call(this,a);this.dataMin=n;this.dataMax=l},toYData:function(a){if(a.isSum)return"sum";else if(a.isIntermediateSum)return"intermediateSum"; -return a.y},getAttribs:function(){h.column.prototype.getAttribs.apply(this,arguments);var a=this.options,b=a.states,c=a.upColor||this.color,a=k.Color(c).brighten(0.1).get(),d=q(this.pointAttr),e=this.upColorProp;d[""][e]=c;d.hover[e]=b.hover.upColor||a;d.select[e]=b.select.upColor||c;t(this.points,function(a){if(a.y>0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length,c=E(this.options.lineWidth+this.options.borderWidth)%2/2,d=[],e,g,f;for(f=1;f<b;f++)g=a[f].shapeArgs, -e=a[f-1].shapeArgs,g=["M",e.x+e.width,e.y+c,"L",g.x,e.y+c],a[f-1].y<0&&(g[2]+=e.height,g[5]+=e.height),d=d.concat(g);return d},getExtremes:s,getStack:function(a){var b=this.yAxis.stacks,c=this.stackKey;this.processedYData[a]<this.options.threshold&&(c="-"+c);return b[c][a]},drawGraph:x.prototype.drawGraph});o.bubble=q(o.scatter,{dataLabels:{inside:!0,style:{color:"white",textShadow:"0px 0px 3px black"},verticalAlign:"middle"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:"20%",tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"}, -turboThreshold:0,zThreshold:0});h.bubble=u(h.scatter,{type:"bubble",pointArrayMap:["y","z"],parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],bubblePadding:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor"},applyOpacity:function(a){var b=this.options.marker,c=r(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=U(a).setOpacity(c).get("rgba"));return a},convertAttribs:function(){var a=x.prototype.convertAttribs.apply(this,arguments);a.fill= -this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,d){var e,g,f,j=this.zData,n=[],l=this.options.sizeBy!=="width";for(g=0,e=j.length;g<e;g++)f=b-a,f=f>0?(j[g]-a)/(b-a):0.5,l&&f>=0&&(f=Math.sqrt(f)),n.push(v.ceil(c+f*(d-c))/2);this.radii=n},animate:function(a){var b=this.options.animation;if(!a)t(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr("r",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,e=this.radii;h.scatter.prototype.translate.call(this); -for(a=b.length;a--;)c=b[a],d=e?e[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=D},drawLegendSymbol:function(a,b){var c=w(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel}); -L.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,e=b,g=this.isXAxis,f=g?"xData":"yData",j=this.min,n={},l=v.min(c.plotWidth,c.plotHeight),i=Number.MAX_VALUE,m=-Number.MAX_VALUE,h=this.max-j,k=b/h,p=[];this.tickPositions&&(t(this.series,function(b){var f=b.options;if(b.bubblePadding&&b.visible&&(a.allowZoomOutside=!0,p.push(b),g))t(["minSize","maxSize"],function(a){var b=f[a],g=/%$/.test(b),b=w(b);n[a]=g?l*b/100:b}),b.minPxSize=n.minSize,b=b.zData,b.length&&(i=v.min(i,v.max(N(b), -f.displayNegative===!1?f.zThreshold:-Number.MAX_VALUE)),m=v.max(m,O(b)))}),t(p,function(a){var b=a[f],c=b.length,l;g&&a.getRadii(i,m,n.minSize,n.maxSize);if(h>0)for(;c--;)typeof b[c]==="number"&&(l=a.radii[c],d=Math.min((b[c]-j)*k-l,d),e=Math.max((b[c]-j)*k+l,e))}),p.length&&h>0&&r(this.options.min,this.userMin)===D&&r(this.options.max,this.userMax)===D&&(e-=b,k*=(b+d-e)/b,this.min+=d/k,this.max+=e/k))};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var b= -this.xAxis.center;a.push("L",b[0],b[1])},this.closedStacks=!0}function b(a,b){var c=this.chart,d=this.options.animation,e=this.group,i=this.markerGroup,m=this.xAxis.center,h=c.plotLeft,k=c.plotTop;if(c.polar){if(c.renderer.isSVG)if(d===!0&&(d={}),b){if(c={translateX:m[0]+h,translateY:m[1]+k,scaleX:0.001,scaleY:0.001},e.attr(c),i)i.attrSetters=e.attrSetters,i.attr(c)}else c={translateX:h,translateY:k,scaleX:1,scaleY:1},e.animate(c,d),i&&i.animate(c,d),this.animate=null}else a.call(this,b)}var c=x.prototype, -d=Q.prototype,e;c.toXY=function(a){var b,c=this.chart;b=a.plotX;var d=a.plotY;a.rectPlotX=b;a.rectPlotY=d;a.clientX=(b/Math.PI*180+this.xAxis.pane.options.startAngle)%360;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-d);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};c.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,b){return a.clientX-b.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};h.area&&p(h.area.prototype,"init",a);h.areaspline&& -p(h.areaspline.prototype,"init",a);h.spline&&p(h.spline.prototype,"getPointSpline",function(a,b,c,d){var e,i,m,h,k,p,o;if(this.chart.polar){e=c.plotX;i=c.plotY;a=b[d-1];m=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),m||(m=b[1]));if(a&&m)h=a.plotX,k=a.plotY,b=m.plotX,p=m.plotY,h=(1.5*e+h)/2.5,k=(1.5*i+k)/2.5,m=(1.5*e+b)/2.5,o=(1.5*i+p)/2.5,b=Math.sqrt(Math.pow(h-e,2)+Math.pow(k-i,2)),p=Math.sqrt(Math.pow(m-e,2)+Math.pow(o-i,2)),h=Math.atan2(k-i,h-e),k=Math.atan2(o-i,m-e),o=Math.PI/2+(h+k)/2,Math.abs(h- -o)>Math.PI/2&&(o-=Math.PI),h=e+Math.cos(o)*b,k=i+Math.sin(o)*b,m=e+Math.cos(Math.PI+o)*p,o=i+Math.sin(Math.PI+o)*p,c.rightContX=m,c.rightContY=o;d?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,h||e,k||i,e,i],a.rightContX=a.rightContY=null):c=["M",e,i]}else c=a.call(this,b,c,d);return c});p(c,"translate",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});p(c,"getSegmentPath",function(a,b){var c=this.points;if(this.chart.polar&& -this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});p(c,"animate",b);p(c,"setTooltipPoints",function(a,b){this.chart.polar&&z(this.xAxis,{tooltipLen:360});return a.call(this,b)});if(h.column)e=h.column.prototype,p(e,"animate",b),p(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,e=b.startAngleRad,i=this.chart.renderer,h,k;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points; -for(k=b.length;k--;)h=b[k],a=h.barX+e,h.shapeType="path",h.shapeArgs={d:i.symbols.arc(d[0],d[1],c-h.plotY,null,{start:a,end:a+h.pointWidth,innerR:c-r(h.yBottom,c)})},this.toXY(h)}}),p(e,"alignDataLabel",function(a,b,d,e,h,i){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(e.align===null)e.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(e.verticalAlign===null)e.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,d,e,h,i)}else a.call(this,b,d,e,h, -i)});p(d,"getIndex",function(a,b){var c,d=this.chart,e;d.polar?(e=d.xAxis[0].center,c=b.chartX-e[0]-d.plotLeft,d=b.chartY-e[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});p(d,"getCoordinates",function(a,b){var c=this.chart,d={xAxis:[],yAxis:[]};c.polar?t(c.axes,function(a){var e=a.isXAxis,g=a.center,h=b.chartX-g[0]-c.plotLeft,g=b.chartY-g[1]-c.plotTop;d[e?"xAxis":"yAxis"].push({axis:a,value:a.translate(e?Math.PI-Math.atan2(h,g):Math.sqrt(Math.pow(h,2)+Math.pow(g, -2)),!0)})}):d=a.call(this,b);return d})})()})(Highcharts); -/* - Highcharts JS v3.0.9 (2014-01-15) - Exporting module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(f){var A=f.Chart,t=f.addEvent,B=f.removeEvent,l=f.createElement,o=f.discardElement,v=f.css,k=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,C=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,s=f.getOptions(),y;p(s.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});s.navigation={menuStyle:{border:"1px solid #A0A0A0", -background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:E?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};s.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu", -symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(b,a,d){var c,b=l("form",k({method:"post", -action:b,enctype:"multipart/form-data"},d),{display:"none"},j.body);for(c in a)l("input",{type:"hidden",name:c,value:a[c]},null,b);b.submit();o(b)};p(A.prototype,{getSVG:function(b){var a=this,d,c,z,h,g=k(a.options,b);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};b=l("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},j.body);c=a.renderTo.style.width;h=a.renderTo.style.height;c=g.exporting.sourceWidth||g.chart.width|| -/px$/.test(c)&&parseInt(c,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:b,forExport:!0,width:c,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=k(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r(["xAxis","yAxis"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&& -g.setExtremes(h,f,!0,!1)})});c=d.container.innerHTML;g=null;d.destroy();o(b);c=c.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ href=/g," xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/ /g," ").replace(/­/g,"­").replace(/<IMG /g,"<image ").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g, -'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});return c=c.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'")},exportChart:function(b,a){var b=b||{},d=this.options.exporting,d=this.getSVG(k({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:b.sourceWidth|| -d.sourceWidth,sourceHeight:b.sourceHeight||d.sourceHeight}})),b=k(this.options.exporting,b);f.post(b.url,{filename:b.filename||"chart",type:b.type,width:b.width||0,scale:b.scale||2,svg:d},b.formAttributes)},print:function(){var b=this,a=b.container,d=[],c=a.parentNode,f=j.body,h=f.childNodes;if(!b.isPrinting)b.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display="none"}),f.appendChild(a),C.focus(),C.print(),setTimeout(function(){c.appendChild(a);r(h,function(a,b){if(a.nodeType=== -1)a.style.display=d[b]});b.isPrinting=!1},1E3)},contextMenu:function(b,a,d,c,f,h,g){var e=this,k=e.options.navigation,q=k.menuItemStyle,m=e.chartWidth,n=e.chartHeight,j="cache-"+b,i=e[j],u=D(f,h),w,x,o,s=function(a){e.pointer.inClass(a.target,b)||x()};if(!i)e[j]=i=l("div",{className:b},{position:"absolute",zIndex:1E3,padding:u+"px"},e.container),w=l("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},k.menuStyle),i),x=function(){v(i,{display:"none"}); -g&&g.setState(0);e.openMenu=!1},t(i,"mouseleave",function(){o=setTimeout(x,500)}),t(i,"mouseenter",function(){clearTimeout(o)}),t(document,"mouseup",s),t(e,"destroy",function(){B(document,"mouseup",s)}),r(a,function(a){if(a){var b=a.separator?l("hr",null,null,w):l("div",{onmouseover:function(){v(this,k.menuItemHoverStyle)},onmouseout:function(){v(this,q)},onclick:function(){x();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:"pointer"},q),w);e.exportDivElements.push(b)}}), -e.exportDivElements.push(w,i),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:"block"};d+e.exportMenuWidth>m?a.right=m-d-f-u+"px":a.left=d-u+"px";c+h+e.exportMenuHeight>n&&g.alignOptions.verticalAlign!=="top"?a.bottom=n-c-u+"px":a.top=c+h-u+"px";v(i,a);e.openMenu=!0},addButton:function(b){var a=this,d=a.renderer,c=k(a.options.navigation.buttonOptions,b),j=c.onclick,h=c.menuItems,g,e,l={stroke:c.symbolStroke,fill:c.symbolFill},q=c.symbolSize||12;if(!a.btnCount)a.btnCount= -0;if(!a.exportDivElements)a.exportDivElements=[],a.exportSVGElements=[];if(c.enabled!==!1){var m=c.theme,n=m.states,o=n&&n.hover,n=n&&n.select,i;delete m.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});c.text&&c.symbol?m.paddingLeft=f.pick(m.paddingLeft,25):c.text||p(m,{width:c.width,height:c.height,padding:0});e=d.button(c.text,0,0,i,m,o,n).attr({title:a.options.lang[c._titleKey],"stroke-linecap":"round"}); -e.menuClassName=b.menuClassName||"highcharts-menu-"+a.btnCount++;c.symbol&&(g=d.symbol(c.symbol,c.symbolX-q/2,c.symbolY-q/2,q,q).attr(p(l,{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(c,{width:e.width,x:f.pick(c.x,y)}),!0,"spacingBox");y+=(e.width+c.buttonSpacing)*(c.align==="right"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(b){var b=b.target,a,d;for(a=0;a<b.exportSVGElements.length;a++)if(d=b.exportSVGElements[a])d.onclick=d.ontouchstart=null,b.exportSVGElements[a]= -d.destroy();for(a=0;a<b.exportDivElements.length;a++)d=b.exportDivElements[a],B(d,"mouseleave"),b.exportDivElements[a]=d.onmouseout=d.onmouseover=d.ontouchstart=d.onclick=null,o(d)}});F.menu=function(b,a,d,c){return["M",b,a+2.5,"L",b+d,a+2.5,"M",b,a+c/2+0.5,"L",b+d,a+c/2+0.5,"M",b,a+c-1.5,"L",b+d,a+c-1.5]};A.prototype.callbacks.push(function(b){var a,d=b.options.exporting,c=d.buttons;y=0;if(d.enabled!==!1){for(a in c)b.addButton(c[a]);t(b,"destroy",b.destroyExport)}})})(Highcharts); -/* - Data plugin for Highcharts - - (c) 2012-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(j){var m=j.each,o=function(b,a){this.init(b,a)};j.extend(o.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];m(b&&b.series||[],function(b){c.push((j.seriesTypes[b.type||a||"line"].prototype.pointArrayMap||[0]).length)});this.valueCount= -{global:(j.seriesTypes[a||"line"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){if(this.options.switchRowsAndColumns)this.columns=this.rowsToColumns(this.columns);this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k,j=0;c&&(k=c.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter|| -"\n"),g=a.itemDelimiter||(c.indexOf("\t")!==-1?"\t":","),m(k,function(a,c){var k=b.trim(a),n=k.indexOf("#")===0;c>=f&&c<=h&&!n&&k!==""&&(k=a.split(g),m(k,function(b,a){a>=i&&a<=e&&(d[a-i]||(d[a-i]=[]),d[a-i][j]=b)}),j+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,h=b.startColumn||0,i=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a==="string"&&(a=document.getElementById(a)),m(a.getElementsByTagName("tr"),function(a, -b){e=0;b>=d&&b<=f&&m(a.childNodes,function(a){if((a.tagName==="TD"||a.tagName==="TH")&&e>=h&&e<=i)c[e]||(c[e]=[]),c[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k;c&&jQuery.getJSON("https://spreadsheets.google.com/feeds/cells/"+c+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?", -function(a){var a=a.feed.entry,c,j=a.length,m=0,n=0,l;for(l=0;l<j;l++)c=a[l],m=Math.max(m,c.gs$cell.col),n=Math.max(n,c.gs$cell.row);for(l=0;l<m;l++)if(l>=i&&l<=e)d[l-i]=[],d[l-i].length=Math.min(n,h-f);for(l=0;l<j;l++)if(c=a[l],g=c.gs$cell.row-1,k=c.gs$cell.col-1,k>=i&&k<=e&&g>=f&&g<=h)d[k-i][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){m(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b==="string"?b.replace(/^\s+|\s+$/g,""):b},parseTypes:function(){for(var b= -this.columns,a=b.length,c,d,f,h;a--;)for(c=b[a].length;c--;)d=b[a][c],f=parseFloat(d),h=this.trim(d),h==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d==="number"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=h===""?null:h)},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b==="string")for(d in this.dateFormats)a= -this.dateFormats[d],(f=b.match(a.regex))&&(c=a.parser(f));return c},rowsToColumns:function(b){var a,c,d,f,h;if(b){h=[];c=b.length;for(a=0;a<c;a++){f=b[a].length;for(d=0;d<f;d++)h[d]||(h[d]=[]),h[d][a]=b[a][d]}}return h},parsed:function(){this.options.parsed&&this.options.parsed.call(this,this.columns)},complete:function(){var b=this.columns,a,c,d=this.options,f,h,i,e,g,k;if(d.complete){this.getColumnDistribution();b.length>1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c="datetime":a.isNumeric|| -(c="category"));for(e=0;e<b.length;e++)if(this.headerRow===0)b[e].name=b[e].shift();h=[];for(e=0,k=0;e<b.length;k++){f=j.pick(this.valueCount.individual[k],this.valueCount.global);i=[];for(g=0;g<b[e].length;g++)i[g]=[a[g],b[e][g]!==void 0?b[e][g]:null],f>1&&i[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&i[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&i[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&i[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);h[k]={name:b[e].name,data:i};e+=f}d.complete({xAxis:{type:c}, -series:h})}}});j.Data=o;j.data=function(b,a){return new o(b,a)};j.wrap(j.Chart.prototype,"init",function(b,a,c){var d=this;a&&a.data?j.data(j.extend(a.data,{complete:function(f){a.series&&m(a.series,function(b,c){a.series[c]=j.merge(b,f.series[c])});a=j.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/highcharts-more.js b/pykeg/web/static/highcharts/js/highcharts-more.js deleted file mode 100644 index d8d9b4e4b..000000000 --- a/pykeg/web/static/highcharts/js/highcharts-more.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(k,D){function J(a,b,c){this.init.call(this,a,b,c)}var N=k.arrayMin,O=k.arrayMax,t=k.each,z=k.extend,q=k.merge,P=k.map,r=k.pick,w=k.pInt,o=k.getOptions().plotOptions,h=k.seriesTypes,u=k.extendClass,K=k.splat,p=k.wrap,L=k.Axis,A=k.Tick,H=k.Point,Q=k.Pointer,R=k.TrackerMixin,S=k.CenteredSeriesMixin,x=k.Series,v=Math,E=v.round,B=v.floor,T=v.max,U=k.Color,s=function(){};z(J.prototype,{init:function(a,b,c){var d=this,e=d.defaultOptions;d.chart=b;if(b.angular)e.background={};d.options=a=q(e,a); -(a=a.background)&&t([].concat(K(a)).reverse(),function(a){var f=a.backgroundColor,a=q(d.defaultBackgroundOptions,a);if(f)a.backgroundColor=f;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}}); -var G=L.prototype,A=A.prototype,V={getOffset:s,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:s,setCategories:s,setTitle:s},M={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,plotBands:[],tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,distance:15, -x:0,y:null},maxPadding:0,minPadding:0,plotBands:[],showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},plotBands:[],showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){this.options=q(this.defaultOptions,this.defaultRadialOptions,a)},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0;this.center=this.pane.center=S.getCenter.call(this.pane)},getLinePath:function(a,b){var c=this.center, -b=r(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center)this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.minPixelPadding=this.isXAxis?this.transA*this.minPointOffset+(this.reversed?(this.endAngleRad-this.startAngleRad)/4:0):0},beforeSetTickPositions:function(){this.autoConnect&& -(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial)this.center=this.pane.center=k.CenteredSeriesMixin.getCenter.call(this.pane),this.len=this.width=this.height=this.isCircular?this.center[2]*(this.endAngleRad-this.startAngleRad)/2:this.center[2]/2},getPosition:function(a,b){if(!this.isCircular)b=this.translate(a),a=this.min;return this.postTranslate(this.translate(a),r(b,this.center[2]/2)-this.offset)},postTranslate:function(a, -b){var c=this.chart,d=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,e=this.startAngleRad,g=d[2]/2,f=[r(c.outerRadius,"100%"),c.innerRadius,r(c.thickness,10)],j=/%$/,n,l=this.isCircular;this.options.gridLineInterpolation==="polygon"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(l||(f[0]=this.translate(a),f[1]=this.translate(b)),f=P(f,function(a){j.test(a)&&(a=w(a,10)*g/100); -return a}),c.shape==="circle"||!l?(a=-Math.PI/2,b=Math.PI*1.5,n=!0):(a=e+this.translate(a),b=e+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],f[0],f[0],{start:a,end:b,innerR:r(f[1],f[0]-f[2]),open:n}));return d},getPlotLinePath:function(a,b){var c=this.center,d=this.chart,e=this.getPosition(a),g,f,j;this.isCircular?j=["M",c[0]+d.plotLeft,c[1]+d.plotTop,"L",e.x,e.y]:this.options.gridLineInterpolation==="circle"?(a=this.translate(a))&&(j=this.getLinePath(0,a)):(g= -d.xAxis[0],j=[],a=this.translate(a),c=g.tickPositions,g.autoConnect&&(c=c.concat([c[0]])),b&&(c=[].concat(c).reverse()),t(c,function(c,b){f=g.getPosition(c,a);j.push(b?"L":"M",f.x,f.y)}));return j},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};p(G,"init",function(a,b,c){var i;var d=b.angular,e=b.polar,g=c.isX,f=d&&g,j,n;n=b.options;var l=c.pane||0;if(d){if(z(this, -f?V:M),j=!g)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)z(this,M),this.defaultRadialOptions=(j=g)?this.defaultRadialXOptions:q(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!f&&(d||e)){a=this.options;if(!b.panes)b.panes=[];this.pane=(i=b.panes[l]=b.panes[l]||new J(K(n.pane)[l],b,this),l=i);l=l.options;b.inverted=!1;n.chart.zoomType=null;this.startAngleRad=b=(l.startAngle-90)*Math.PI/180;this.endAngleRad=n=(r(l.endAngle,l.startAngle+360)-90)*Math.PI/ -180;this.offset=a.offset||0;if((this.isCircular=j)&&c.max===D&&n-b===2*Math.PI)this.autoConnect=!0}});p(A,"getPosition",function(a,b,c,d,e){var g=this.axis;return g.getPosition?g.getPosition(c):a.call(this,b,c,d,e)});p(A,"getLabelPosition",function(a,b,c,d,e,g,f,j,n){var l=this.axis,i=g.y,m=g.align,y=(l.translate(this.pos)+l.startAngleRad+Math.PI/2)/Math.PI*180%360;l.isRadial?(a=l.getPosition(this.pos,l.center[2]/2+r(g.distance,-25)),g.rotation==="auto"?d.attr({rotation:y}):i===null&&(i=l.chart.renderer.fontMetrics(d.styles.fontSize).b- -d.getBBox().height/2),m===null&&(m=l.isCircular?y>20&&y<160?"left":y>200&&y<340?"right":"center":"center",d.attr({align:m})),a.x+=g.x,a.y+=i):a=a.call(this,b,c,d,e,g,f,j,n);return a});p(A,"getMarkPath",function(a,b,c,d,e,g,f){var j=this.axis;j.isRadial?(a=j.getPosition(this.pos,j.center[2]/2+d),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,d,e,g,f);return b});o.arearange=q(o.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'}, -trackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}});h.arearange=u(h.area,{type:"arearange",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",getSegments:function(){var a=this;t(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});x.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this);t(this.points, -function(b){var c=b.low,d=b.high,e=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=e,b.plotHigh=null):(b.plotLow=e,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,e=x.prototype.getSegmentPath,g,f;f=this.options;var j=f.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)g=a[d],g.plotHigh!==null&&c.push({plotX:g.plotX,plotY:g.plotHigh});a=e.call(this,b);if(j)j=== -!0&&(j="left"),f.step={left:"right",center:"center",right:"left"}[j];c=e.call(this,c);f.step=j;f=[].concat(a,c);c[0]="L";this.areaPath=this.areaPath.concat(a,c);return f},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],e=x.prototype,g=this.options.dataLabels,f,j=this.chart.inverted;if(g.enabled||this._hasPointLabels){for(c=b;c--;)f=a[c],f.y=f.high,f.plotY=f.plotHigh,d[c]=f.dataLabel,f.dataLabel=f.dataLabelUpper,f.below=!1,j?(g.align="left",g.x=g.xHigh):g.y=g.yHigh;e.drawDataLabels&&e.drawDataLabels.apply(this, -arguments);for(c=b;c--;)f=a[c],f.dataLabelUpper=f.dataLabel,f.dataLabel=d[c],f.y=f.low,f.plotY=f.plotLow,f.below=!0,j?(g.align="right",g.x=g.xLow):g.y=g.yLow;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}},alignDataLabel:function(){h.column.prototype.alignDataLabel.apply(this,arguments)},getSymbol:h.column.prototype.getSymbol,drawPoints:s});o.areasplinerange=q(o.arearange);h.areasplinerange=u(h.arearange,{type:"areasplinerange",getPointSpline:h.spline.prototype.getPointSpline});(function(){var a= -h.column.prototype;o.columnrange=q(o.column,o.arearange,{lineWidth:1,pointRange:null});h.columnrange=u(h.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,d;a.translate.apply(b);t(b.points,function(a){var g=a.shapeArgs,f=b.options.minPointLength,j;a.plotHigh=d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;j=d;a=a.plotY-d;a<f&&(f-=a,a+=f,j-=f/2);g.height=a;g.y=j})},trackerGroups:["group","dataLabels"],drawGraph:s,pointAttrToOptions:a.pointAttrToOptions,drawPoints:a.drawPoints, -drawTracker:a.drawTracker,animate:a.animate,getColumnMetrics:a.getColumnMetrics})})();o.gauge=q(o.line,{dataLabels:{enabled:!0,y:15,borderWidth:1,borderColor:"silver",borderRadius:3,crop:!1,style:{fontWeight:"bold"},verticalAlign:"top",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:""},showInLegend:!1});H={type:"gauge",pointClass:u(H,{setState:function(a){this.state=a}}),angular:!0,drawGraph:s,fixedBox:!0,forceDL:!0,trackerGroups:["group","dataLabels"],translate:function(){var a=this.yAxis,b=this.options, -c=a.center;this.generatePoints();t(this.points,function(d){var e=q(b.dial,d.dial),g=w(r(e.radius,80))*c[2]/200,f=w(r(e.baseLength,70))*g/100,j=w(r(e.rearLength,10))*g/100,n=e.baseWidth||3,l=e.topWidth||1,i=a.startAngleRad+a.translate(d.y,null,null,null,!0);b.wrap===!1&&(i=Math.max(a.startAngleRad,Math.min(a.endAngleRad,i)));i=i*180/Math.PI;d.shapeType="path";d.shapeArgs={d:e.path||["M",-j,-n/2,"L",f,-n/2,g,-l/2,g,l/2,f,n/2,-j,n/2,"z"],translateX:c[0],translateY:c[1],rotation:i};d.plotX=c[0];d.plotY= -c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,d=a.options,e=d.pivot,g=a.chart.renderer;t(a.points,function(f){var c=f.graphic,b=f.shapeArgs,e=b.d,i=q(d.dial,f.dial);c?(c.animate(b),b.d=e):f.graphic=g[f.shapeType](b).attr({stroke:i.borderColor||"none","stroke-width":i.borderWidth||0,fill:i.backgroundColor||"black",rotation:b.rotation}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=g.circle(0,0,r(e.radius,5)).attr({"stroke-width":e.borderWidth||0,stroke:e.borderColor|| -"silver",fill:e.backgroundColor||"black"}).translate(b[0],b[1]).add(a.group)},animate:function(a){var b=this;if(!a)t(b.points,function(a){var d=a.graphic;d&&(d.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),d.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup("group","series",this.visible?"visible":"hidden",this.options.zIndex,this.chart.seriesGroup);x.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:function(a, -b){x.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();r(b,!0)&&this.chart.redraw()},drawTracker:R.drawTrackerPoint};h.gauge=u(h.line,H);o.boxplot=q(o.column,{fillColor:"#FFFFFF",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style="color:{series.color};font-weight:bold">{series.name}</span><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'}, -whiskerLength:"50%",whiskerWidth:2});h.boxplot=u(h.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:s,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);t(this.points,function(c){t(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a= -this,b=a.points,c=a.options,d=a.chart.renderer,e,g,f,j,n,l,i,m,y,h,k,I,o,p,q,u,x,s,v,w,A,z,F=a.doQuartiles!==!1,C=parseInt(a.options.whiskerLength,10)/100;t(b,function(b){y=b.graphic;A=b.shapeArgs;k={};p={};u={};z=b.color||a.color;if(b.plotY!==D)if(e=b.pointAttr[b.selected?"selected":""],x=A.width,s=B(A.x),v=s+x,w=E(x/2),g=B(F?b.q1Plot:b.lowPlot),f=B(F?b.q3Plot:b.lowPlot),j=B(b.highPlot),n=B(b.lowPlot),k.stroke=b.stemColor||c.stemColor||z,k["stroke-width"]=r(b.stemWidth,c.stemWidth,c.lineWidth),k.dashstyle= -b.stemDashStyle||c.stemDashStyle,p.stroke=b.whiskerColor||c.whiskerColor||z,p["stroke-width"]=r(b.whiskerWidth,c.whiskerWidth,c.lineWidth),u.stroke=b.medianColor||c.medianColor||z,u["stroke-width"]=r(b.medianWidth,c.medianWidth,c.lineWidth),u["stroke-linecap"]="round",i=k["stroke-width"]%2/2,m=s+w+i,h=["M",m,f,"L",m,j,"M",m,g,"L",m,n,"z"],F&&(i=e["stroke-width"]%2/2,m=B(m)+i,g=B(g)+i,f=B(f)+i,s+=i,v+=i,I=["M",s,f,"L",s,g,"L",v,g,"L",v,f,"L",s,f,"z"]),C&&(i=p["stroke-width"]%2/2,j+=i,n+=i,o=["M",m- -w*C,j,"L",m+w*C,j,"M",m-w*C,n,"L",m+w*C,n]),i=u["stroke-width"]%2/2,l=E(b.medianPlot)+i,q=["M",s,l,"L",v,l,"z"],y)b.stem.animate({d:h}),C&&b.whiskers.animate({d:o}),F&&b.box.animate({d:I}),b.medianShape.animate({d:q});else{b.graphic=y=d.g().add(a.group);b.stem=d.path(h).attr(k).add(y);if(C)b.whiskers=d.path(o).attr(p).add(y);if(F)b.box=d.path(I).attr(e).add(y);b.medianShape=d.path(q).attr(u).add(y)}})}});o.errorbar=q(o.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'}, -whiskerWidth:null});h.errorbar=u(h.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});o.waterfall=q(o.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333"});h.waterfall=u(h.column,{type:"waterfall",upColorProp:"fill",pointArrayMap:["low","y"],pointValKey:"y",init:function(a, -b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.options,b=this.yAxis,c,d,e,g,f,j,n,l,i;c=a.threshold;a=a.borderWidth%2/2;h.column.prototype.translate.apply(this);l=c;e=this.points;for(d=0,c=e.length;d<c;d++){g=e[d];f=g.shapeArgs;j=this.getStack(d);i=j.points[this.index];if(isNaN(g.y))g.y=this.yData[d];n=T(l,l+g.y)+i[0];f.y=b.translate(n,0,1);g.isSum||g.isIntermediateSum?(f.y=b.translate(i[1],0,1),f.height=b.translate(i[0],0,1)-f.y):l+=j.total;f.height<0&&(f.y+= -f.height,f.height*=-1);g.plotY=f.y=E(f.y)-a;f.height=E(f.height);g.yBottom=f.y+f.height}},processData:function(a){var b=this.yData,c=this.points,d,e=b.length,g=this.options.threshold||0,f,j,n,l,i,m;j=f=n=l=g;for(m=0;m<e;m++)i=b[m],d=c&&c[m]?c[m]:{},i==="sum"||d.isSum?b[m]=j:i==="intermediateSum"||d.isIntermediateSum?(b[m]=f,f=g):(j+=i,f+=i),n=Math.min(j,n),l=Math.max(j,l);x.prototype.processData.call(this,a);this.dataMin=n;this.dataMax=l},toYData:function(a){if(a.isSum)return"sum";else if(a.isIntermediateSum)return"intermediateSum"; -return a.y},getAttribs:function(){h.column.prototype.getAttribs.apply(this,arguments);var a=this.options,b=a.states,c=a.upColor||this.color,a=k.Color(c).brighten(0.1).get(),d=q(this.pointAttr),e=this.upColorProp;d[""][e]=c;d.hover[e]=b.hover.upColor||a;d.select[e]=b.select.upColor||c;t(this.points,function(a){if(a.y>0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length,c=E(this.options.lineWidth+this.options.borderWidth)%2/2,d=[],e,g,f;for(f=1;f<b;f++)g=a[f].shapeArgs, -e=a[f-1].shapeArgs,g=["M",e.x+e.width,e.y+c,"L",g.x,e.y+c],a[f-1].y<0&&(g[2]+=e.height,g[5]+=e.height),d=d.concat(g);return d},getExtremes:s,getStack:function(a){var b=this.yAxis.stacks,c=this.stackKey;this.processedYData[a]<this.options.threshold&&(c="-"+c);return b[c][a]},drawGraph:x.prototype.drawGraph});o.bubble=q(o.scatter,{dataLabels:{inside:!0,style:{color:"white",textShadow:"0px 0px 3px black"},verticalAlign:"middle"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:"20%",tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"}, -turboThreshold:0,zThreshold:0});h.bubble=u(h.scatter,{type:"bubble",pointArrayMap:["y","z"],parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],bubblePadding:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor"},applyOpacity:function(a){var b=this.options.marker,c=r(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=U(a).setOpacity(c).get("rgba"));return a},convertAttribs:function(){var a=x.prototype.convertAttribs.apply(this,arguments);a.fill= -this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,d){var e,g,f,j=this.zData,n=[],l=this.options.sizeBy!=="width";for(g=0,e=j.length;g<e;g++)f=b-a,f=f>0?(j[g]-a)/(b-a):0.5,l&&f>=0&&(f=Math.sqrt(f)),n.push(v.ceil(c+f*(d-c))/2);this.radii=n},animate:function(a){var b=this.options.animation;if(!a)t(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr("r",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,e=this.radii;h.scatter.prototype.translate.call(this); -for(a=b.length;a--;)c=b[a],d=e?e[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=D},drawLegendSymbol:function(a,b){var c=w(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel}); -L.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,e=b,g=this.isXAxis,f=g?"xData":"yData",j=this.min,n={},l=v.min(c.plotWidth,c.plotHeight),i=Number.MAX_VALUE,m=-Number.MAX_VALUE,h=this.max-j,k=b/h,p=[];this.tickPositions&&(t(this.series,function(b){var f=b.options;if(b.bubblePadding&&b.visible&&(a.allowZoomOutside=!0,p.push(b),g))t(["minSize","maxSize"],function(a){var b=f[a],g=/%$/.test(b),b=w(b);n[a]=g?l*b/100:b}),b.minPxSize=n.minSize,b=b.zData,b.length&&(i=v.min(i,v.max(N(b), -f.displayNegative===!1?f.zThreshold:-Number.MAX_VALUE)),m=v.max(m,O(b)))}),t(p,function(a){var b=a[f],c=b.length,l;g&&a.getRadii(i,m,n.minSize,n.maxSize);if(h>0)for(;c--;)typeof b[c]==="number"&&(l=a.radii[c],d=Math.min((b[c]-j)*k-l,d),e=Math.max((b[c]-j)*k+l,e))}),p.length&&h>0&&r(this.options.min,this.userMin)===D&&r(this.options.max,this.userMax)===D&&(e-=b,k*=(b+d-e)/b,this.min+=d/k,this.max+=e/k))};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var b= -this.xAxis.center;a.push("L",b[0],b[1])},this.closedStacks=!0}function b(a,b){var c=this.chart,d=this.options.animation,e=this.group,i=this.markerGroup,m=this.xAxis.center,h=c.plotLeft,k=c.plotTop;if(c.polar){if(c.renderer.isSVG)if(d===!0&&(d={}),b){if(c={translateX:m[0]+h,translateY:m[1]+k,scaleX:0.001,scaleY:0.001},e.attr(c),i)i.attrSetters=e.attrSetters,i.attr(c)}else c={translateX:h,translateY:k,scaleX:1,scaleY:1},e.animate(c,d),i&&i.animate(c,d),this.animate=null}else a.call(this,b)}var c=x.prototype, -d=Q.prototype,e;c.toXY=function(a){var b,c=this.chart;b=a.plotX;var d=a.plotY;a.rectPlotX=b;a.rectPlotY=d;a.clientX=(b/Math.PI*180+this.xAxis.pane.options.startAngle)%360;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-d);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};c.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,b){return a.clientX-b.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};h.area&&p(h.area.prototype,"init",a);h.areaspline&& -p(h.areaspline.prototype,"init",a);h.spline&&p(h.spline.prototype,"getPointSpline",function(a,b,c,d){var e,i,m,h,k,p,o;if(this.chart.polar){e=c.plotX;i=c.plotY;a=b[d-1];m=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),m||(m=b[1]));if(a&&m)h=a.plotX,k=a.plotY,b=m.plotX,p=m.plotY,h=(1.5*e+h)/2.5,k=(1.5*i+k)/2.5,m=(1.5*e+b)/2.5,o=(1.5*i+p)/2.5,b=Math.sqrt(Math.pow(h-e,2)+Math.pow(k-i,2)),p=Math.sqrt(Math.pow(m-e,2)+Math.pow(o-i,2)),h=Math.atan2(k-i,h-e),k=Math.atan2(o-i,m-e),o=Math.PI/2+(h+k)/2,Math.abs(h- -o)>Math.PI/2&&(o-=Math.PI),h=e+Math.cos(o)*b,k=i+Math.sin(o)*b,m=e+Math.cos(Math.PI+o)*p,o=i+Math.sin(Math.PI+o)*p,c.rightContX=m,c.rightContY=o;d?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,h||e,k||i,e,i],a.rightContX=a.rightContY=null):c=["M",e,i]}else c=a.call(this,b,c,d);return c});p(c,"translate",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});p(c,"getSegmentPath",function(a,b){var c=this.points;if(this.chart.polar&& -this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});p(c,"animate",b);p(c,"setTooltipPoints",function(a,b){this.chart.polar&&z(this.xAxis,{tooltipLen:360});return a.call(this,b)});if(h.column)e=h.column.prototype,p(e,"animate",b),p(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,e=b.startAngleRad,i=this.chart.renderer,h,k;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points; -for(k=b.length;k--;)h=b[k],a=h.barX+e,h.shapeType="path",h.shapeArgs={d:i.symbols.arc(d[0],d[1],c-h.plotY,null,{start:a,end:a+h.pointWidth,innerR:c-r(h.yBottom,c)})},this.toXY(h)}}),p(e,"alignDataLabel",function(a,b,d,e,h,i){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(e.align===null)e.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(e.verticalAlign===null)e.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,d,e,h,i)}else a.call(this,b,d,e,h, -i)});p(d,"getIndex",function(a,b){var c,d=this.chart,e;d.polar?(e=d.xAxis[0].center,c=b.chartX-e[0]-d.plotLeft,d=b.chartY-e[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});p(d,"getCoordinates",function(a,b){var c=this.chart,d={xAxis:[],yAxis:[]};c.polar?t(c.axes,function(a){var e=a.isXAxis,g=a.center,h=b.chartX-g[0]-c.plotLeft,g=b.chartY-g[1]-c.plotTop;d[e?"xAxis":"yAxis"].push({axis:a,value:a.translate(e?Math.PI-Math.atan2(h,g):Math.sqrt(Math.pow(h,2)+Math.pow(g, -2)),!0)})}):d=a.call(this,b);return d})})()})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/highcharts-more.src.js b/pykeg/web/static/highcharts/js/highcharts-more.src.js deleted file mode 100644 index 501f3b0b0..000000000 --- a/pykeg/web/static/highcharts/js/highcharts-more.src.js +++ /dev/null @@ -1,2500 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Highcharts, HighchartsAdapter, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console */ - -(function (Highcharts, UNDEFINED) { -var arrayMin = Highcharts.arrayMin, - arrayMax = Highcharts.arrayMax, - each = Highcharts.each, - extend = Highcharts.extend, - merge = Highcharts.merge, - map = Highcharts.map, - pick = Highcharts.pick, - pInt = Highcharts.pInt, - defaultPlotOptions = Highcharts.getOptions().plotOptions, - seriesTypes = Highcharts.seriesTypes, - extendClass = Highcharts.extendClass, - splat = Highcharts.splat, - wrap = Highcharts.wrap, - Axis = Highcharts.Axis, - Tick = Highcharts.Tick, - Point = Highcharts.Point, - Pointer = Highcharts.Pointer, - TrackerMixin = Highcharts.TrackerMixin, - CenteredSeriesMixin = Highcharts.CenteredSeriesMixin, - Series = Highcharts.Series, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathMax = math.max, - Color = Highcharts.Color, - noop = function () {};/** - * The Pane object allows options that are common to a set of X and Y axes. - * - * In the future, this can be extended to basic Highcharts and Highstock. - */ -function Pane(options, chart, firstAxis) { - this.init.call(this, options, chart, firstAxis); -} - -// Extend the Pane prototype -extend(Pane.prototype, { - - /** - * Initiate the Pane object - */ - init: function (options, chart, firstAxis) { - var pane = this, - backgroundOption, - defaultOptions = pane.defaultOptions; - - pane.chart = chart; - - // Set options - if (chart.angular) { // gauges - defaultOptions.background = {}; // gets extended by this.defaultBackgroundOptions - } - pane.options = options = merge(defaultOptions, options); - - backgroundOption = options.background; - - // To avoid having weighty logic to place, update and remove the backgrounds, - // push them to the first axis' plot bands and borrow the existing logic there. - if (backgroundOption) { - each([].concat(splat(backgroundOption)).reverse(), function (config) { - var backgroundColor = config.backgroundColor; // if defined, replace the old one (specific for gradients) - config = merge(pane.defaultBackgroundOptions, config); - if (backgroundColor) { - config.backgroundColor = backgroundColor; - } - config.color = config.backgroundColor; // due to naming in plotBands - firstAxis.options.plotBands.unshift(config); - }); - } - }, - - /** - * The default options object - */ - defaultOptions: { - // background: {conditional}, - center: ['50%', '50%'], - size: '85%', - startAngle: 0 - //endAngle: startAngle + 360 - }, - - /** - * The default background options - */ - defaultBackgroundOptions: { - shape: 'circle', - borderWidth: 1, - borderColor: 'silver', - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#FFF'], - [1, '#DDD'] - ] - }, - from: Number.MIN_VALUE, // corrected to axis min - innerRadius: 0, - to: Number.MAX_VALUE, // corrected to axis max - outerRadius: '105%' - } - -}); -var axisProto = Axis.prototype, - tickProto = Tick.prototype; - -/** - * Augmented methods for the x axis in order to hide it completely, used for the X axis in gauges - */ -var hiddenAxisMixin = { - getOffset: noop, - redraw: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - render: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - setScale: noop, - setCategories: noop, - setTitle: noop -}; - -/** - * Augmented methods for the value axis - */ -/*jslint unparam: true*/ -var radialAxisMixin = { - isRadial: true, - - /** - * The default options extend defaultYAxisOptions - */ - defaultRadialGaugeOptions: { - labels: { - align: 'center', - x: 0, - y: null // auto - }, - minorGridLineWidth: 0, - minorTickInterval: 'auto', - minorTickLength: 10, - minorTickPosition: 'inside', - minorTickWidth: 1, - plotBands: [], - tickLength: 10, - tickPosition: 'inside', - tickWidth: 2, - title: { - rotation: 0 - }, - zIndex: 2 // behind dials, points in the series group - }, - - // Circular axis around the perimeter of a polar chart - defaultRadialXOptions: { - gridLineWidth: 1, // spokes - labels: { - align: null, // auto - distance: 15, - x: 0, - y: null // auto - }, - maxPadding: 0, - minPadding: 0, - plotBands: [], - showLastLabel: false, - tickLength: 0 - }, - - // Radial axis, like a spoke in a polar chart - defaultRadialYOptions: { - gridLineInterpolation: 'circle', - labels: { - align: 'right', - x: -3, - y: -2 - }, - plotBands: [], - showLastLabel: false, - title: { - x: 4, - text: null, - rotation: 90 - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - - this.options = merge( - this.defaultOptions, - this.defaultRadialOptions, - userOptions - ); - - }, - - /** - * Wrap the getOffset method to return zero offset for title or labels in a radial - * axis - */ - getOffset: function () { - // Call the Axis prototype method (the method we're in now is on the instance) - axisProto.getOffset.call(this); - - // Title or label offsets are not counted - this.chart.axisOffset[this.side] = 0; - - // Set the center array - this.center = this.pane.center = CenteredSeriesMixin.getCenter.call(this.pane); - }, - - - /** - * Get the path for the axis line. This method is also referenced in the getPlotLinePath - * method. - */ - getLinePath: function (lineWidth, radius) { - var center = this.center; - radius = pick(radius, center[2] / 2 - this.offset); - - return this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radius, - radius, - { - start: this.startAngleRad, - end: this.endAngleRad, - open: true, - innerR: 0 - } - ); - }, - - /** - * Override setAxisTranslation by setting the translation to the difference - * in rotation. This allows the translate method to return angle for - * any given value. - */ - setAxisTranslation: function () { - - // Call uber method - axisProto.setAxisTranslation.call(this); - - // Set transA and minPixelPadding - if (this.center) { // it's not defined the first time - if (this.isCircular) { - - this.transA = (this.endAngleRad - this.startAngleRad) / - ((this.max - this.min) || 1); - - - } else { - this.transA = (this.center[2] / 2) / ((this.max - this.min) || 1); - } - - if (this.isXAxis) { - this.minPixelPadding = this.transA * this.minPointOffset + - (this.reversed ? (this.endAngleRad - this.startAngleRad) / 4 : 0); // ??? - } else { - // This is a workaround for regression #2593, but categories still don't position correctly. - // TODO: Implement true handling of Y axis categories on gauges. - this.minPixelPadding = 0; - } - } - }, - - /** - * In case of auto connect, add one closestPointRange to the max value right before - * tickPositions are computed, so that ticks will extend passed the real max. - */ - beforeSetTickPositions: function () { - if (this.autoConnect) { - this.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260 - } - }, - - /** - * Override the setAxisSize method to use the arc's circumference as length. This - * allows tickPixelInterval to apply to pixel lengths along the perimeter - */ - setAxisSize: function () { - - axisProto.setAxisSize.call(this); - - if (this.isRadial) { - - // Set the center array - this.center = this.pane.center = Highcharts.CenteredSeriesMixin.getCenter.call(this.pane); - - this.len = this.width = this.height = this.isCircular ? - this.center[2] * (this.endAngleRad - this.startAngleRad) / 2 : - this.center[2] / 2; - } - }, - - /** - * Returns the x, y coordinate of a point given by a value and a pixel distance - * from center - */ - getPosition: function (value, length) { - if (!this.isCircular) { - length = this.translate(value); - value = this.min; - } - - return this.postTranslate( - this.translate(value), - pick(length, this.center[2] / 2) - this.offset - ); - }, - - /** - * Translate from intermediate plotX (angle), plotY (axis.len - radius) to final chart coordinates. - */ - postTranslate: function (angle, radius) { - - var chart = this.chart, - center = this.center; - - angle = this.startAngleRad + angle; - - return { - x: chart.plotLeft + center[0] + Math.cos(angle) * radius, - y: chart.plotTop + center[1] + Math.sin(angle) * radius - }; - - }, - - /** - * Find the path for plot bands along the radial axis - */ - getPlotBandPath: function (from, to, options) { - var center = this.center, - startAngleRad = this.startAngleRad, - fullRadius = center[2] / 2, - radii = [ - pick(options.outerRadius, '100%'), - options.innerRadius, - pick(options.thickness, 10) - ], - percentRegex = /%$/, - start, - end, - open, - isCircular = this.isCircular, // X axis in a polar chart - ret; - - // Polygonal plot bands - if (this.options.gridLineInterpolation === 'polygon') { - ret = this.getPlotLinePath(from).concat(this.getPlotLinePath(to, true)); - - // Circular grid bands - } else { - - // Plot bands on Y axis (radial axis) - inner and outer radius depend on to and from - if (!isCircular) { - radii[0] = this.translate(from); - radii[1] = this.translate(to); - } - - // Convert percentages to pixel values - radii = map(radii, function (radius) { - if (percentRegex.test(radius)) { - radius = (pInt(radius, 10) * fullRadius) / 100; - } - return radius; - }); - - // Handle full circle - if (options.shape === 'circle' || !isCircular) { - start = -Math.PI / 2; - end = Math.PI * 1.5; - open = true; - } else { - start = startAngleRad + this.translate(from); - end = startAngleRad + this.translate(to); - } - - - ret = this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radii[0], - radii[0], - { - start: start, - end: end, - innerR: pick(radii[1], radii[0] - radii[2]), - open: open - } - ); - } - - return ret; - }, - - /** - * Find the path for plot lines perpendicular to the radial axis. - */ - getPlotLinePath: function (value, reverse) { - var axis = this, - center = axis.center, - chart = axis.chart, - end = axis.getPosition(value), - xAxis, - xy, - tickPositions, - ret; - - // Spokes - if (axis.isCircular) { - ret = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y]; - - // Concentric circles - } else if (axis.options.gridLineInterpolation === 'circle') { - value = axis.translate(value); - if (value) { // a value of 0 is in the center - ret = axis.getLinePath(0, value); - } - // Concentric polygons - } else { - xAxis = chart.xAxis[0]; - ret = []; - value = axis.translate(value); - tickPositions = xAxis.tickPositions; - if (xAxis.autoConnect) { - tickPositions = tickPositions.concat([tickPositions[0]]); - } - // Reverse the positions for concatenation of polygonal plot bands - if (reverse) { - tickPositions = [].concat(tickPositions).reverse(); - } - - each(tickPositions, function (pos, i) { - xy = xAxis.getPosition(pos, value); - ret.push(i ? 'L' : 'M', xy.x, xy.y); - }); - - } - return ret; - }, - - /** - * Find the position for the axis title, by default inside the gauge - */ - getTitlePosition: function () { - var center = this.center, - chart = this.chart, - titleOptions = this.options.title; - - return { - x: chart.plotLeft + center[0] + (titleOptions.x || 0), - y: chart.plotTop + center[1] - ({ high: 0.5, middle: 0.25, low: 0 }[titleOptions.align] * - center[2]) + (titleOptions.y || 0) - }; - } - -}; -/*jslint unparam: false*/ - -/** - * Override axisProto.init to mix in special axis instance functions and function overrides - */ -wrap(axisProto, 'init', function (proceed, chart, userOptions) { - var axis = this, - angular = chart.angular, - polar = chart.polar, - isX = userOptions.isX, - isHidden = angular && isX, - isCircular, - startAngleRad, - endAngleRad, - options, - chartOptions = chart.options, - paneIndex = userOptions.pane || 0, - pane, - paneOptions; - - // Before prototype.init - if (angular) { - extend(this, isHidden ? hiddenAxisMixin : radialAxisMixin); - isCircular = !isX; - if (isCircular) { - this.defaultRadialOptions = this.defaultRadialGaugeOptions; - } - - } else if (polar) { - //extend(this, userOptions.isX ? radialAxisMixin : radialAxisMixin); - extend(this, radialAxisMixin); - isCircular = isX; - this.defaultRadialOptions = isX ? this.defaultRadialXOptions : merge(this.defaultYAxisOptions, this.defaultRadialYOptions); - - } - - // Run prototype.init - proceed.call(this, chart, userOptions); - - if (!isHidden && (angular || polar)) { - options = this.options; - - // Create the pane and set the pane options. - if (!chart.panes) { - chart.panes = []; - } - this.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane( - splat(chartOptions.pane)[paneIndex], - chart, - axis - ); - paneOptions = pane.options; - - - // Disable certain features on angular and polar axes - chart.inverted = false; - chartOptions.chart.zoomType = null; - - // Start and end angle options are - // given in degrees relative to top, while internal computations are - // in radians relative to right (like SVG). - this.startAngleRad = startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180; - this.endAngleRad = endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360) - 90) * Math.PI / 180; - this.offset = options.offset || 0; - - this.isCircular = isCircular; - - // Automatically connect grid lines? - if (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) { - this.autoConnect = true; - } - } - -}); - -/** - * Add special cases within the Tick class' methods for radial axes. - */ -wrap(tickProto, 'getPosition', function (proceed, horiz, pos, tickmarkOffset, old) { - var axis = this.axis; - - return axis.getPosition ? - axis.getPosition(pos) : - proceed.call(this, horiz, pos, tickmarkOffset, old); -}); - -/** - * Wrap the getLabelPosition function to find the center position of the label - * based on the distance option - */ -wrap(tickProto, 'getLabelPosition', function (proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - optionsY = labelOptions.y, - ret, - align = labelOptions.align, - angle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360; - - if (axis.isRadial) { - ret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25)); - - // Automatically rotated - if (labelOptions.rotation === 'auto') { - label.attr({ - rotation: angle - }); - - // Vertically centered - } else if (optionsY === null) { - optionsY = axis.chart.renderer.fontMetrics(label.styles.fontSize).b - label.getBBox().height / 2; - } - - // Automatic alignment - if (align === null) { - if (axis.isCircular) { - if (angle > 20 && angle < 160) { - align = 'left'; // right hemisphere - } else if (angle > 200 && angle < 340) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - } else { - align = 'center'; - } - label.attr({ - align: align - }); - } - - ret.x += labelOptions.x; - ret.y += optionsY; - - } else { - ret = proceed.call(this, x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - } - return ret; -}); - -/** - * Wrap the getMarkPath function to return the path of the radial marker - */ -wrap(tickProto, 'getMarkPath', function (proceed, x, y, tickLength, tickWidth, horiz, renderer) { - var axis = this.axis, - endPoint, - ret; - - if (axis.isRadial) { - endPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength); - ret = [ - 'M', - x, - y, - 'L', - endPoint.x, - endPoint.y - ]; - } else { - ret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer); - } - return ret; -});/* - * The AreaRangeSeries class - * - */ - -/** - * Extend the default options with map options - */ -defaultPlotOptions.arearange = merge(defaultPlotOptions.area, { - lineWidth: 1, - marker: null, - threshold: null, - tooltip: { - pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>' - }, - trackByArea: true, - dataLabels: { - verticalAlign: null, - xLow: 0, - xHigh: 0, - yLow: 0, - yHigh: 0 - } -}); - -/** - * Add the series type - */ -seriesTypes.arearange = extendClass(seriesTypes.area, { - type: 'arearange', - pointArrayMap: ['low', 'high'], - toYData: function (point) { - return [point.low, point.high]; - }, - pointValKey: 'low', - - /** - * Extend getSegments to force null points if the higher value is null. #1703. - */ - getSegments: function () { - var series = this; - - each(series.points, function (point) { - if (!series.options.connectNulls && (point.low === null || point.high === null)) { - point.y = null; - } else if (point.low === null && point.high !== null) { - point.y = point.high; - } - }); - Series.prototype.getSegments.call(this); - }, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis; - - seriesTypes.area.prototype.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - - var low = point.low, - high = point.high, - plotY = point.plotY; - - if (high === null && low === null) { - point.y = null; - } else if (low === null) { - point.plotLow = point.plotY = null; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } else if (high === null) { - point.plotLow = plotY; - point.plotHigh = null; - } else { - point.plotLow = plotY; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } - }); - }, - - /** - * Extend the line series' getSegmentPath method by applying the segment - * path to both lower and higher values of the range - */ - getSegmentPath: function (segment) { - - var lowSegment, - highSegment = [], - i = segment.length, - baseGetSegmentPath = Series.prototype.getSegmentPath, - point, - linePath, - lowerPath, - options = this.options, - step = options.step, - higherPath; - - // Remove nulls from low segment - lowSegment = HighchartsAdapter.grep(segment, function (point) { - return point.plotLow !== null; - }); - - // Make a segment with plotX and plotY for the top values - while (i--) { - point = segment[i]; - if (point.plotHigh !== null) { - highSegment.push({ - plotX: point.plotX, - plotY: point.plotHigh - }); - } - } - - // Get the paths - lowerPath = baseGetSegmentPath.call(this, lowSegment); - if (step) { - if (step === true) { - step = 'left'; - } - options.step = { left: 'right', center: 'center', right: 'left' }[step]; // swap for reading in getSegmentPath - } - higherPath = baseGetSegmentPath.call(this, highSegment); - options.step = step; - - // Create a line on both top and bottom of the range - linePath = [].concat(lowerPath, higherPath); - - // For the area path, we need to change the 'move' statement into 'lineTo' or 'curveTo' - higherPath[0] = 'L'; // this probably doesn't work for spline - this.areaPath = this.areaPath.concat(lowerPath, higherPath); - - return linePath; - }, - - /** - * Extend the basic drawDataLabels method by running it for both lower and higher - * values. - */ - drawDataLabels: function () { - - var data = this.data, - length = data.length, - i, - originalDataLabels = [], - seriesProto = Series.prototype, - dataLabelOptions = this.options.dataLabels, - point, - inverted = this.chart.inverted; - - if (dataLabelOptions.enabled || this._hasPointLabels) { - - // Step 1: set preliminary values for plotY and dataLabel and draw the upper labels - i = length; - while (i--) { - point = data[i]; - - // Set preliminary values - point.y = point.high; - point.plotY = point.plotHigh; - - // Store original data labels and set preliminary label objects to be picked up - // in the uber method - originalDataLabels[i] = point.dataLabel; - point.dataLabel = point.dataLabelUpper; - - // Set the default offset - point.below = false; - if (inverted) { - dataLabelOptions.align = 'left'; - dataLabelOptions.x = dataLabelOptions.xHigh; - } else { - dataLabelOptions.y = dataLabelOptions.yHigh; - } - } - - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); // #1209 - } - - // Step 2: reorganize and handle data labels for the lower values - i = length; - while (i--) { - point = data[i]; - - // Move the generated labels from step 1, and reassign the original data labels - point.dataLabelUpper = point.dataLabel; - point.dataLabel = originalDataLabels[i]; - - // Reset values - point.y = point.low; - point.plotY = point.plotLow; - - // Set the default offset - point.below = true; - if (inverted) { - dataLabelOptions.align = 'right'; - dataLabelOptions.x = dataLabelOptions.xLow; - } else { - dataLabelOptions.y = dataLabelOptions.yLow; - } - } - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); - } - } - - }, - - alignDataLabel: function () { - seriesTypes.column.prototype.alignDataLabel.apply(this, arguments); - }, - - getSymbol: seriesTypes.column.prototype.getSymbol, - - drawPoints: noop -});/** - * The AreaSplineRangeSeries class - */ - -defaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange); - -/** - * AreaSplineRangeSeries object - */ -seriesTypes.areasplinerange = extendClass(seriesTypes.arearange, { - type: 'areasplinerange', - getPointSpline: seriesTypes.spline.prototype.getPointSpline -}); - -(function () { - - var colProto = seriesTypes.column.prototype; - - /** - * The ColumnRangeSeries class - */ - defaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, { - lineWidth: 1, - pointRange: null - }); - - /** - * ColumnRangeSeries object - */ - seriesTypes.columnrange = extendClass(seriesTypes.arearange, { - type: 'columnrange', - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - plotHigh; - - colProto.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - var shapeArgs = point.shapeArgs, - minPointLength = series.options.minPointLength, - heightDifference, - height, - y; - - point.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1); - point.plotLow = point.plotY; - - // adjust shape - y = plotHigh; - height = point.plotY - plotHigh; - - if (height < minPointLength) { - heightDifference = (minPointLength - height); - height += heightDifference; - y -= heightDifference / 2; - } - shapeArgs.height = height; - shapeArgs.y = y; - }); - }, - trackerGroups: ['group', 'dataLabels'], - drawGraph: noop, - pointAttrToOptions: colProto.pointAttrToOptions, - drawPoints: colProto.drawPoints, - drawTracker: colProto.drawTracker, - animate: colProto.animate, - getColumnMetrics: colProto.getColumnMetrics - }); -}()); - -/* - * The GaugeSeries class - */ - - - -/** - * Extend the default options - */ -defaultPlotOptions.gauge = merge(defaultPlotOptions.line, { - dataLabels: { - enabled: true, - y: 15, - borderWidth: 1, - borderColor: 'silver', - borderRadius: 3, - crop: false, - style: { - fontWeight: 'bold' - }, - verticalAlign: 'top', - zIndex: 2 - }, - dial: { - // radius: '80%', - // backgroundColor: 'black', - // borderColor: 'silver', - // borderWidth: 0, - // baseWidth: 3, - // topWidth: 1, - // baseLength: '70%' // of radius - // rearLength: '10%' - }, - pivot: { - //radius: 5, - //borderWidth: 0 - //borderColor: 'silver', - //backgroundColor: 'black' - }, - tooltip: { - headerFormat: '' - }, - showInLegend: false -}); - -/** - * Extend the point object - */ -var GaugePoint = extendClass(Point, { - /** - * Don't do any hover colors or anything - */ - setState: function (state) { - this.state = state; - } -}); - - -/** - * Add the series type - */ -var GaugeSeries = { - type: 'gauge', - pointClass: GaugePoint, - - // chart.angular will be set to true when a gauge series is present, and this will - // be used on the axes - angular: true, - drawGraph: noop, - fixedBox: true, - forceDL: true, - trackerGroups: ['group', 'dataLabels'], - - /** - * Calculate paths etc - */ - translate: function () { - - var series = this, - yAxis = series.yAxis, - options = series.options, - center = yAxis.center; - - series.generatePoints(); - - each(series.points, function (point) { - - var dialOptions = merge(options.dial, point.dial), - radius = (pInt(pick(dialOptions.radius, 80)) * center[2]) / 200, - baseLength = (pInt(pick(dialOptions.baseLength, 70)) * radius) / 100, - rearLength = (pInt(pick(dialOptions.rearLength, 10)) * radius) / 100, - baseWidth = dialOptions.baseWidth || 3, - topWidth = dialOptions.topWidth || 1, - rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true); - - // Handle the wrap option - if (options.wrap === false) { - rotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation)); - } - rotation = rotation * 180 / Math.PI; - - point.shapeType = 'path'; - point.shapeArgs = { - d: dialOptions.path || [ - 'M', - -rearLength, -baseWidth / 2, - 'L', - baseLength, -baseWidth / 2, - radius, -topWidth / 2, - radius, topWidth / 2, - baseLength, baseWidth / 2, - -rearLength, baseWidth / 2, - 'z' - ], - translateX: center[0], - translateY: center[1], - rotation: rotation - }; - - // Positions for data label - point.plotX = center[0]; - point.plotY = center[1]; - }); - }, - - /** - * Draw the points where each point is one needle - */ - drawPoints: function () { - - var series = this, - center = series.yAxis.center, - pivot = series.pivot, - options = series.options, - pivotOptions = options.pivot, - renderer = series.chart.renderer; - - each(series.points, function (point) { - - var graphic = point.graphic, - shapeArgs = point.shapeArgs, - d = shapeArgs.d, - dialOptions = merge(options.dial, point.dial); // #1233 - - if (graphic) { - graphic.animate(shapeArgs); - shapeArgs.d = d; // animate alters it - } else { - point.graphic = renderer[point.shapeType](shapeArgs) - .attr({ - stroke: dialOptions.borderColor || 'none', - 'stroke-width': dialOptions.borderWidth || 0, - fill: dialOptions.backgroundColor || 'black', - rotation: shapeArgs.rotation // required by VML when animation is false - }) - .add(series.group); - } - }); - - // Add or move the pivot - if (pivot) { - pivot.animate({ // #1235 - translateX: center[0], - translateY: center[1] - }); - } else { - series.pivot = renderer.circle(0, 0, pick(pivotOptions.radius, 5)) - .attr({ - 'stroke-width': pivotOptions.borderWidth || 0, - stroke: pivotOptions.borderColor || 'silver', - fill: pivotOptions.backgroundColor || 'black' - }) - .translate(center[0], center[1]) - .add(series.group); - } - }, - - /** - * Animate the arrow up from startAngle - */ - animate: function (init) { - var series = this; - - if (!init) { - each(series.points, function (point) { - var graphic = point.graphic; - - if (graphic) { - // start value - graphic.attr({ - rotation: series.yAxis.startAngleRad * 180 / Math.PI - }); - - // animate - graphic.animate({ - rotation: point.shapeArgs.rotation - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - render: function () { - this.group = this.plotGroup( - 'group', - 'series', - this.visible ? 'visible' : 'hidden', - this.options.zIndex, - this.chart.seriesGroup - ); - Series.prototype.render.call(this); - this.group.clip(this.chart.clipRect); - }, - - /** - * Extend the basic setData method by running processData and generatePoints immediately, - * in order to access the points from the legend. - */ - setData: function (data, redraw) { - Series.prototype.setData.call(this, data, false); - this.processData(); - this.generatePoints(); - if (pick(redraw, true)) { - this.chart.redraw(); - } - }, - drawTracker: TrackerMixin.drawTrackerPoint -}; -seriesTypes.gauge = extendClass(seriesTypes.line, GaugeSeries); - -/* **************************************************************************** - * Start Box plot series code * - *****************************************************************************/ - -// Set default options -defaultPlotOptions.boxplot = merge(defaultPlotOptions.column, { - fillColor: '#FFFFFF', - lineWidth: 1, - //medianColor: null, - medianWidth: 2, - states: { - hover: { - brightness: -0.3 - } - }, - //stemColor: null, - //stemDashStyle: 'solid' - //stemWidth: null, - threshold: null, - tooltip: { - pointFormat: '<span style="color:{series.color};font-weight:bold">{series.name}</span><br/>' + - 'Maximum: {point.high}<br/>' + - 'Upper quartile: {point.q3}<br/>' + - 'Median: {point.median}<br/>' + - 'Lower quartile: {point.q1}<br/>' + - 'Minimum: {point.low}<br/>' - - }, - //whiskerColor: null, - whiskerLength: '50%', - whiskerWidth: 2 -}); - -// Create the series object -seriesTypes.boxplot = extendClass(seriesTypes.column, { - type: 'boxplot', - pointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.q1, point.median, point.q3, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - - /** - * One-to-one mapping from options to SVG attributes - */ - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - fill: 'fillColor', - stroke: 'color', - 'stroke-width': 'lineWidth' - }, - - /** - * Disable data labels for box plot - */ - drawDataLabels: noop, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - pointArrayMap = series.pointArrayMap; - - seriesTypes.column.prototype.translate.apply(series); - - // do the translation on each point dimension - each(series.points, function (point) { - each(pointArrayMap, function (key) { - if (point[key] !== null) { - point[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1); - } - }); - }); - }, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, //state = series.state, - points = series.points, - options = series.options, - chart = series.chart, - renderer = chart.renderer, - pointAttr, - q1Plot, - q3Plot, - highPlot, - lowPlot, - medianPlot, - crispCorr, - crispX, - graphic, - stemPath, - stemAttr, - boxPath, - whiskersPath, - whiskersAttr, - medianPath, - medianAttr, - width, - left, - right, - halfWidth, - shapeArgs, - color, - doQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles - whiskerLength = parseInt(series.options.whiskerLength, 10) / 100; - - - each(points, function (point) { - - graphic = point.graphic; - shapeArgs = point.shapeArgs; // the box - stemAttr = {}; - whiskersAttr = {}; - medianAttr = {}; - color = point.color || series.color; - - if (point.plotY !== UNDEFINED) { - - pointAttr = point.pointAttr[point.selected ? 'selected' : '']; - - // crisp vector coordinates - width = shapeArgs.width; - left = mathFloor(shapeArgs.x); - right = left + width; - halfWidth = mathRound(width / 2); - //crispX = mathRound(left + halfWidth) + crispCorr; - q1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr; - q3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr; - highPlot = mathFloor(point.highPlot);// + crispCorr; - lowPlot = mathFloor(point.lowPlot);// + crispCorr; - - // Stem attributes - stemAttr.stroke = point.stemColor || options.stemColor || color; - stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth); - stemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle; - - // Whiskers attributes - whiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color; - whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth); - - // Median attributes - medianAttr.stroke = point.medianColor || options.medianColor || color; - medianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth); - medianAttr['stroke-linecap'] = 'round'; // #1638 - - - // The stem - crispCorr = (stemAttr['stroke-width'] % 2) / 2; - crispX = left + halfWidth + crispCorr; - stemPath = [ - // stem up - 'M', - crispX, q3Plot, - 'L', - crispX, highPlot, - - // stem down - 'M', - crispX, q1Plot, - 'L', - crispX, lowPlot, - 'z' - ]; - - // The box - if (doQuartiles) { - crispCorr = (pointAttr['stroke-width'] % 2) / 2; - crispX = mathFloor(crispX) + crispCorr; - q1Plot = mathFloor(q1Plot) + crispCorr; - q3Plot = mathFloor(q3Plot) + crispCorr; - left += crispCorr; - right += crispCorr; - boxPath = [ - 'M', - left, q3Plot, - 'L', - left, q1Plot, - 'L', - right, q1Plot, - 'L', - right, q3Plot, - 'L', - left, q3Plot, - 'z' - ]; - } - - // The whiskers - if (whiskerLength) { - crispCorr = (whiskersAttr['stroke-width'] % 2) / 2; - highPlot = highPlot + crispCorr; - lowPlot = lowPlot + crispCorr; - whiskersPath = [ - // High whisker - 'M', - crispX - halfWidth * whiskerLength, - highPlot, - 'L', - crispX + halfWidth * whiskerLength, - highPlot, - - // Low whisker - 'M', - crispX - halfWidth * whiskerLength, - lowPlot, - 'L', - crispX + halfWidth * whiskerLength, - lowPlot - ]; - } - - // The median - crispCorr = (medianAttr['stroke-width'] % 2) / 2; - medianPlot = mathRound(point.medianPlot) + crispCorr; - medianPath = [ - 'M', - left, - medianPlot, - 'L', - right, - medianPlot, - 'z' - ]; - - // Create or update the graphics - if (graphic) { // update - - point.stem.animate({ d: stemPath }); - if (whiskerLength) { - point.whiskers.animate({ d: whiskersPath }); - } - if (doQuartiles) { - point.box.animate({ d: boxPath }); - } - point.medianShape.animate({ d: medianPath }); - - } else { // create new - point.graphic = graphic = renderer.g() - .add(series.group); - - point.stem = renderer.path(stemPath) - .attr(stemAttr) - .add(graphic); - - if (whiskerLength) { - point.whiskers = renderer.path(whiskersPath) - .attr(whiskersAttr) - .add(graphic); - } - if (doQuartiles) { - point.box = renderer.path(boxPath) - .attr(pointAttr) - .add(graphic); - } - point.medianShape = renderer.path(medianPath) - .attr(medianAttr) - .add(graphic); - } - } - }); - - } - - -}); - -/* **************************************************************************** - * End Box plot series code * - *****************************************************************************/ -/* **************************************************************************** - * Start error bar series code * - *****************************************************************************/ - -// 1 - set default options -defaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, { - color: '#000000', - grouping: false, - linkedTo: ':previous', - tooltip: { - pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>' - }, - whiskerWidth: null -}); - -// 2 - Create the series object -seriesTypes.errorbar = extendClass(seriesTypes.boxplot, { - type: 'errorbar', - pointArrayMap: ['low', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - doQuartiles: false, - - /** - * Get the width and X offset, either on top of the linked series column - * or standalone - */ - getColumnMetrics: function () { - return (this.linkedParent && this.linkedParent.columnMetrics) || - seriesTypes.column.prototype.getColumnMetrics.call(this); - } -}); - -/* **************************************************************************** - * End error bar series code * - *****************************************************************************/ -/* **************************************************************************** - * Start Waterfall series code * - *****************************************************************************/ - -// 1 - set default options -defaultPlotOptions.waterfall = merge(defaultPlotOptions.column, { - lineWidth: 1, - lineColor: '#333', - dashStyle: 'dot', - borderColor: '#333' -}); - - -// 2 - Create the series object -seriesTypes.waterfall = extendClass(seriesTypes.column, { - type: 'waterfall', - - upColorProp: 'fill', - - pointArrayMap: ['low', 'y'], - - pointValKey: 'y', - - /** - * Init waterfall series, force stacking - */ - init: function (chart, options) { - // force stacking - options.stacking = true; - - seriesTypes.column.prototype.init.call(this, chart, options); - }, - - - /** - * Translate data points from raw values - */ - translate: function () { - var series = this, - options = series.options, - axis = series.yAxis, - len, - i, - points, - point, - shapeArgs, - stack, - y, - previousY, - stackPoint, - threshold = options.threshold, - crispCorr = (options.borderWidth % 2) / 2; - - // run column series translate - seriesTypes.column.prototype.translate.apply(this); - - previousY = threshold; - points = series.points; - - for (i = 0, len = points.length; i < len; i++) { - // cache current point object - point = points[i]; - shapeArgs = point.shapeArgs; - - // get current stack - stack = series.getStack(i); - stackPoint = stack.points[series.index]; - - // override point value for sums - if (isNaN(point.y)) { - point.y = series.yData[i]; - } - - // up points - y = mathMax(previousY, previousY + point.y) + stackPoint[0]; - shapeArgs.y = axis.translate(y, 0, 1); - - - // sum points - if (point.isSum || point.isIntermediateSum) { - shapeArgs.y = axis.translate(stackPoint[1], 0, 1); - shapeArgs.height = axis.translate(stackPoint[0], 0, 1) - shapeArgs.y; - - // if it's not the sum point, update previous stack end position - } else { - previousY += stack.total; - } - - // negative points - if (shapeArgs.height < 0) { - shapeArgs.y += shapeArgs.height; - shapeArgs.height *= -1; - } - - point.plotY = shapeArgs.y = mathRound(shapeArgs.y) - crispCorr; - shapeArgs.height = mathRound(shapeArgs.height); - point.yBottom = shapeArgs.y + shapeArgs.height; - } - }, - - /** - * Call default processData then override yData to reflect waterfall's extremes on yAxis - */ - processData: function (force) { - var series = this, - options = series.options, - yData = series.yData, - points = series.points, - point, - dataLength = yData.length, - threshold = options.threshold || 0, - subSum, - sum, - dataMin, - dataMax, - y, - i; - - sum = subSum = dataMin = dataMax = threshold; - - for (i = 0; i < dataLength; i++) { - y = yData[i]; - point = points && points[i] ? points[i] : {}; - - if (y === "sum" || point.isSum) { - yData[i] = sum; - } else if (y === "intermediateSum" || point.isIntermediateSum) { - yData[i] = subSum; - subSum = threshold; - } else { - sum += y; - subSum += y; - } - dataMin = Math.min(sum, dataMin); - dataMax = Math.max(sum, dataMax); - } - - Series.prototype.processData.call(this, force); - - // Record extremes - series.dataMin = dataMin; - series.dataMax = dataMax; - }, - - /** - * Return y value or string if point is sum - */ - toYData: function (pt) { - if (pt.isSum) { - return "sum"; - } else if (pt.isIntermediateSum) { - return "intermediateSum"; - } - - return pt.y; - }, - - /** - * Postprocess mapping between options and SVG attributes - */ - getAttribs: function () { - seriesTypes.column.prototype.getAttribs.apply(this, arguments); - - var series = this, - options = series.options, - stateOptions = options.states, - upColor = options.upColor || series.color, - hoverColor = Highcharts.Color(upColor).brighten(0.1).get(), - seriesDownPointAttr = merge(series.pointAttr), - upColorProp = series.upColorProp; - - seriesDownPointAttr[''][upColorProp] = upColor; - seriesDownPointAttr.hover[upColorProp] = stateOptions.hover.upColor || hoverColor; - seriesDownPointAttr.select[upColorProp] = stateOptions.select.upColor || upColor; - - each(series.points, function (point) { - if (point.y > 0 && !point.color) { - point.pointAttr = seriesDownPointAttr; - point.color = upColor; - } - }); - }, - - /** - * Draw columns' connector lines - */ - getGraphPath: function () { - - var data = this.data, - length = data.length, - lineWidth = this.options.lineWidth + this.options.borderWidth, - normalizer = mathRound(lineWidth) % 2 / 2, - path = [], - M = 'M', - L = 'L', - prevArgs, - pointArgs, - i, - d; - - for (i = 1; i < length; i++) { - pointArgs = data[i].shapeArgs; - prevArgs = data[i - 1].shapeArgs; - - d = [ - M, - prevArgs.x + prevArgs.width, prevArgs.y + normalizer, - L, - pointArgs.x, prevArgs.y + normalizer - ]; - - if (data[i - 1].y < 0) { - d[2] += prevArgs.height; - d[5] += prevArgs.height; - } - - path = path.concat(d); - } - - return path; - }, - - /** - * Extremes are recorded in processData - */ - getExtremes: noop, - - /** - * Return stack for given index - */ - getStack: function (i) { - var axis = this.yAxis, - stacks = axis.stacks, - key = this.stackKey; - - if (this.processedYData[i] < this.options.threshold) { - key = '-' + key; - } - - return stacks[key][i]; - }, - - drawGraph: Series.prototype.drawGraph -}); - -/* **************************************************************************** - * End Waterfall series code * - *****************************************************************************/ -/* **************************************************************************** - * Start Bubble series code * - *****************************************************************************/ - -// 1 - set default options -defaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, { - dataLabels: { - inside: true, - style: { - color: 'white', - textShadow: '0px 0px 3px black' - }, - verticalAlign: 'middle' - }, - // displayNegative: true, - marker: { - // fillOpacity: 0.5, - lineColor: null, // inherit from series.color - lineWidth: 1 - }, - minSize: 8, - maxSize: '20%', - // negativeColor: null, - // sizeBy: 'area' - tooltip: { - pointFormat: '({point.x}, {point.y}), Size: {point.z}' - }, - turboThreshold: 0, - zThreshold: 0 -}); - -// 2 - Create the series object -seriesTypes.bubble = extendClass(seriesTypes.scatter, { - type: 'bubble', - pointArrayMap: ['y', 'z'], - parallelArrays: ['x', 'y', 'z'], - trackerGroups: ['group', 'dataLabelsGroup'], - bubblePadding: true, - - /** - * Mapping between SVG attributes and the corresponding options - */ - pointAttrToOptions: { - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor' - }, - - /** - * Apply the fillOpacity to all fill positions - */ - applyOpacity: function (fill) { - var markerOptions = this.options.marker, - fillOpacity = pick(markerOptions.fillOpacity, 0.5); - - // When called from Legend.colorizeItem, the fill isn't predefined - fill = fill || markerOptions.fillColor || this.color; - - if (fillOpacity !== 1) { - fill = Color(fill).setOpacity(fillOpacity).get('rgba'); - } - return fill; - }, - - /** - * Extend the convertAttribs method by applying opacity to the fill - */ - convertAttribs: function () { - var obj = Series.prototype.convertAttribs.apply(this, arguments); - - obj.fill = this.applyOpacity(obj.fill); - - return obj; - }, - - /** - * Get the radius for each point based on the minSize, maxSize and each point's Z value. This - * must be done prior to Series.translate because the axis needs to add padding in - * accordance with the point sizes. - */ - getRadii: function (zMin, zMax, minSize, maxSize) { - var len, - i, - pos, - zData = this.zData, - radii = [], - sizeByArea = this.options.sizeBy !== 'width', - zRange; - - // Set the shape type and arguments to be picked up in drawPoints - for (i = 0, len = zData.length; i < len; i++) { - zRange = zMax - zMin; - pos = zRange > 0 ? // relative size, a number between 0 and 1 - (zData[i] - zMin) / (zMax - zMin) : - 0.5; - if (sizeByArea && pos >= 0) { - pos = Math.sqrt(pos); - } - radii.push(math.ceil(minSize + pos * (maxSize - minSize)) / 2); - } - this.radii = radii; - }, - - /** - * Perform animation on the bubbles - */ - animate: function (init) { - var animation = this.options.animation; - - if (!init) { // run the animation - each(this.points, function (point) { - var graphic = point.graphic, - shapeArgs = point.shapeArgs; - - if (graphic && shapeArgs) { - // start values - graphic.attr('r', 1); - - // animate - graphic.animate({ - r: shapeArgs.r - }, animation); - } - }); - - // delete this function to allow it only once - this.animate = null; - } - }, - - /** - * Extend the base translate method to handle bubble size - */ - translate: function () { - - var i, - data = this.data, - point, - radius, - radii = this.radii; - - // Run the parent method - seriesTypes.scatter.prototype.translate.call(this); - - // Set the shape type and arguments to be picked up in drawPoints - i = data.length; - - while (i--) { - point = data[i]; - radius = radii ? radii[i] : 0; // #1737 - - // Flag for negativeColor to be applied in Series.js - point.negative = point.z < (this.options.zThreshold || 0); - - if (radius >= this.minPxSize / 2) { - // Shape arguments - point.shapeType = 'circle'; - point.shapeArgs = { - x: point.plotX, - y: point.plotY, - r: radius - }; - - // Alignment box for the data label - point.dlBox = { - x: point.plotX - radius, - y: point.plotY - radius, - width: 2 * radius, - height: 2 * radius - }; - } else { // below zThreshold - point.shapeArgs = point.plotY = point.dlBox = UNDEFINED; // #1691 - } - } - }, - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawLegendSymbol: function (legend, item) { - var radius = pInt(legend.itemStyle.fontSize) / 2; - - item.legendSymbol = this.chart.renderer.circle( - radius, - legend.baseline - radius, - radius - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - item.legendSymbol.isMarker = true; - - }, - - drawPoints: seriesTypes.column.prototype.drawPoints, - alignDataLabel: seriesTypes.column.prototype.alignDataLabel -}); - -/** - * Add logic to pad each axis with the amount of pixels - * necessary to avoid the bubbles to overflow. - */ -Axis.prototype.beforePadding = function () { - var axis = this, - axisLength = this.len, - chart = this.chart, - pxMin = 0, - pxMax = axisLength, - isXAxis = this.isXAxis, - dataKey = isXAxis ? 'xData' : 'yData', - min = this.min, - extremes = {}, - smallestSize = math.min(chart.plotWidth, chart.plotHeight), - zMin = Number.MAX_VALUE, - zMax = -Number.MAX_VALUE, - range = this.max - min, - transA = axisLength / range, - activeSeries = []; - - // Handle padding on the second pass, or on redraw - if (this.tickPositions) { - each(this.series, function (series) { - - var seriesOptions = series.options, - zData; - - if (series.bubblePadding && series.visible) { - - // Correction for #1673 - axis.allowZoomOutside = true; - - // Cache it - activeSeries.push(series); - - if (isXAxis) { // because X axis is evaluated first - - // For each series, translate the size extremes to pixel values - each(['minSize', 'maxSize'], function (prop) { - var length = seriesOptions[prop], - isPercent = /%$/.test(length); - - length = pInt(length); - extremes[prop] = isPercent ? - smallestSize * length / 100 : - length; - - }); - series.minPxSize = extremes.minSize; - - // Find the min and max Z - zData = series.zData; - if (zData.length) { // #1735 - zMin = math.min( - zMin, - math.max( - arrayMin(zData), - seriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE - ) - ); - zMax = math.max(zMax, arrayMax(zData)); - } - } - } - }); - - each(activeSeries, function (series) { - - var data = series[dataKey], - i = data.length, - radius; - - if (isXAxis) { - series.getRadii(zMin, zMax, extremes.minSize, extremes.maxSize); - } - - if (range > 0) { - while (i--) { - if (typeof data[i] === 'number') { - radius = series.radii[i]; - pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin); - pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax); - } - } - } - }); - - if (activeSeries.length && range > 0 && pick(this.options.min, this.userMin) === UNDEFINED && pick(this.options.max, this.userMax) === UNDEFINED) { - pxMax -= axisLength; - transA *= (axisLength + pxMin - pxMax) / axisLength; - this.min += pxMin / transA; - this.max += pxMax / transA; - } - } -}; - -/* **************************************************************************** - * End Bubble series code * - *****************************************************************************/ - -(function () { - - /** - * Extensions for polar charts. Additionally, much of the geometry required for polar charts is - * gathered in RadialAxes.js. - * - */ - - var seriesProto = Series.prototype, - pointerProto = Pointer.prototype, - colProto; - - /** - * Translate a point's plotX and plotY from the internal angle and radius measures to - * true plotX, plotY coordinates - */ - seriesProto.toXY = function (point) { - var xy, - chart = this.chart, - plotX = point.plotX, - plotY = point.plotY; - - // Save rectangular plotX, plotY for later computation - point.rectPlotX = plotX; - point.rectPlotY = plotY; - - // Record the angle in degrees for use in tooltip - point.clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360; - - // Find the polar plotX and plotY - xy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY); - point.plotX = point.polarPlotX = xy.x - chart.plotLeft; - point.plotY = point.polarPlotY = xy.y - chart.plotTop; - }; - - /** - * Order the tooltip points to get the mouse capture ranges correct. #1915. - */ - seriesProto.orderTooltipPoints = function (points) { - if (this.chart.polar) { - points.sort(function (a, b) { - return a.clientX - b.clientX; - }); - - // Wrap mouse tracking around to capture movement on the segment to the left - // of the north point (#1469, #2093). - if (points[0]) { - points[0].wrappedClientX = points[0].clientX + 360; - points.push(points[0]); - } - } - }; - - - /** - * Add some special init logic to areas and areasplines - */ - function initArea(proceed, chart, options) { - proceed.call(this, chart, options); - if (this.chart.polar) { - - /** - * Overridden method to close a segment path. While in a cartesian plane the area - * goes down to the threshold, in the polar chart it goes to the center. - */ - this.closeSegment = function (path) { - var center = this.xAxis.center; - path.push( - 'L', - center[0], - center[1] - ); - }; - - // Instead of complicated logic to draw an area around the inner area in a stack, - // just draw it behind - this.closedStacks = true; - } - } - - if (seriesTypes.area) { - wrap(seriesTypes.area.prototype, 'init', initArea); - } - if (seriesTypes.areaspline) { - wrap(seriesTypes.areaspline.prototype, 'init', initArea); - } - - if (seriesTypes.spline) { - /** - * Overridden method for calculating a spline from one point to the next - */ - wrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) { - - var ret, - smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc; - denom = smoothing + 1, - plotX, - plotY, - lastPoint, - nextPoint, - lastX, - lastY, - nextX, - nextY, - leftContX, - leftContY, - rightContX, - rightContY, - distanceLeftControlPoint, - distanceRightControlPoint, - leftContAngle, - rightContAngle, - jointAngle; - - - if (this.chart.polar) { - - plotX = point.plotX; - plotY = point.plotY; - lastPoint = segment[i - 1]; - nextPoint = segment[i + 1]; - - // Connect ends - if (this.connectEnds) { - if (!lastPoint) { - lastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected - } - if (!nextPoint) { - nextPoint = segment[1]; - } - } - - // find control points - if (lastPoint && nextPoint) { - - lastX = lastPoint.plotX; - lastY = lastPoint.plotY; - nextX = nextPoint.plotX; - nextY = nextPoint.plotY; - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - distanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2)); - distanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2)); - leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX); - rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX); - jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2); - - - // Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle - if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) { - jointAngle -= Math.PI; - } - - // Find the corrected control points for a spline straight through the point - leftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint; - leftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint; - rightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint; - rightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint; - - // Record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - - // moveTo or lineTo - if (!i) { - ret = ['M', plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - - - } else { - ret = proceed.call(this, segment, point, i); - } - return ret; - }); - } - - /** - * Extend translate. The plotX and plotY values are computed as if the polar chart were a - * cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from - * center. - */ - wrap(seriesProto, 'translate', function (proceed) { - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (this.chart.polar && !this.preventPostTranslate) { - var points = this.points, - i = points.length; - while (i--) { - // Translate plotX, plotY from angle and radius to true plot coordinates - this.toXY(points[i]); - } - } - }); - - /** - * Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in - * line-like series. - */ - wrap(seriesProto, 'getSegmentPath', function (proceed, segment) { - - var points = this.points; - - // Connect the path - if (this.chart.polar && this.options.connectEnds !== false && - segment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) { - this.connectEnds = true; // re-used in splines - segment = [].concat(segment, [points[0]]); - } - - // Run uber method - return proceed.call(this, segment); - - }); - - - function polarAnimate(proceed, init) { - var chart = this.chart, - animation = this.options.animation, - group = this.group, - markerGroup = this.markerGroup, - center = this.xAxis.center, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - attribs; - - // Specific animation for polar charts - if (chart.polar) { - - // Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation - // would be so slow it would't matter. - if (chart.renderer.isSVG) { - - if (animation === true) { - animation = {}; - } - - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - attribs = { - translateX: center[0] + plotLeft, - translateY: center[1] + plotTop, - scaleX: 0.001, // #1499 - scaleY: 0.001 - }; - - group.attr(attribs); - if (markerGroup) { - markerGroup.attrSetters = group.attrSetters; - markerGroup.attr(attribs); - } - - // Run the animation - } else { - attribs = { - translateX: plotLeft, - translateY: plotTop, - scaleX: 1, - scaleY: 1 - }; - group.animate(attribs, animation); - if (markerGroup) { - markerGroup.animate(attribs, animation); - } - - // Delete this function to allow it only once - this.animate = null; - } - } - - // For non-polar charts, revert to the basic animation - } else { - proceed.call(this, init); - } - } - - // Define the animate method for regular series - wrap(seriesProto, 'animate', polarAnimate); - - /** - * Throw in a couple of properties to let setTooltipPoints know we're indexing the points - * in degrees (0-360), not plot pixel width. - */ - wrap(seriesProto, 'setTooltipPoints', function (proceed, renew) { - - if (this.chart.polar) { - extend(this.xAxis, { - tooltipLen: 360 // degrees are the resolution unit of the tooltipPoints array - }); - } - - // Run uber method - return proceed.call(this, renew); - }); - - - if (seriesTypes.column) { - - colProto = seriesTypes.column.prototype; - /** - * Define the animate method for columnseries - */ - wrap(colProto, 'animate', polarAnimate); - - - /** - * Extend the column prototype's translate method - */ - wrap(colProto, 'translate', function (proceed) { - - var xAxis = this.xAxis, - len = this.yAxis.len, - center = xAxis.center, - startAngleRad = xAxis.startAngleRad, - renderer = this.chart.renderer, - start, - points, - point, - i; - - this.preventPostTranslate = true; - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (xAxis.isRadial) { - points = this.points; - i = points.length; - while (i--) { - point = points[i]; - start = point.barX + startAngleRad; - point.shapeType = 'path'; - point.shapeArgs = { - d: renderer.symbols.arc( - center[0], - center[1], - len - point.plotY, - null, - { - start: start, - end: start + point.pointWidth, - innerR: len - pick(point.yBottom, len) - } - ) - }; - this.toXY(point); // provide correct plotX, plotY for tooltip - } - } - }); - - - /** - * Align column data labels outside the columns. #1199. - */ - wrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) { - - if (this.chart.polar) { - var angle = point.rectPlotX / Math.PI * 180, - align, - verticalAlign; - - // Align nicely outside the perimeter of the columns - if (options.align === null) { - if (angle > 20 && angle < 160) { - align = 'left'; // right hemisphere - } else if (angle > 200 && angle < 340) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - options.align = align; - } - if (options.verticalAlign === null) { - if (angle < 45 || angle > 315) { - verticalAlign = 'bottom'; // top part - } else if (angle > 135 && angle < 225) { - verticalAlign = 'top'; // bottom part - } else { - verticalAlign = 'middle'; // left or right - } - options.verticalAlign = verticalAlign; - } - - seriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - } else { - proceed.call(this, point, dataLabel, options, alignTo, isNew); - } - - }); - } - - - /** - * Extend the mouse tracker to return the tooltip position index in terms of - * degrees rather than pixels - */ - wrap(pointerProto, 'getIndex', function (proceed, e) { - var ret, - chart = this.chart, - center, - x, - y; - - if (chart.polar) { - center = chart.xAxis[0].center; - x = e.chartX - center[0] - chart.plotLeft; - y = e.chartY - center[1] - chart.plotTop; - - ret = 180 - Math.round(Math.atan2(x, y) / Math.PI * 180); - - } else { - - // Run uber method - ret = proceed.call(this, e); - } - return ret; - }); - - /** - * Extend getCoordinates to prepare for polar axis values - */ - wrap(pointerProto, 'getCoordinates', function (proceed, e) { - var chart = this.chart, - ret = { - xAxis: [], - yAxis: [] - }; - - if (chart.polar) { - - each(chart.axes, function (axis) { - var isXAxis = axis.isXAxis, - center = axis.center, - x = e.chartX - center[0] - chart.plotLeft, - y = e.chartY - center[1] - chart.plotTop; - - ret[isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.translate( - isXAxis ? - Math.PI - Math.atan2(x, y) : // angle - Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center - true - ) - }); - }); - - } else { - ret = proceed.call(this, e); - } - - return ret; - }); - -}()); - -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/highcharts.js b/pykeg/web/static/highcharts/js/highcharts.js deleted file mode 100644 index 31565d097..000000000 --- a/pykeg/web/static/highcharts/js/highcharts.js +++ /dev/null @@ -1,294 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(){function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function x(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function z(a,b){return parseInt(a,b||10)}function fa(a){return typeof a=== -"string"}function S(a){return typeof a==="object"}function Ka(a){return Object.prototype.toString.call(a)==="[object Array]"}function wa(a){return typeof a==="number"}function xa(a){return P.log(a)/P.LN10}function ga(a){return P.pow(10,a)}function ha(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function t(a){return a!==u&&a!==null}function v(a,b,c){var d,e;if(fa(b))t(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(t(b)&&S(b))for(d in b)a.setAttribute(d,b[d]); -return e}function ja(a){return Ka(a)?a:[a]}function n(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!=="undefined"&&c!==null)return c}function D(a,b){if(ya&&b&&b.opacity!==u)b.filter="alpha(opacity="+b.opacity*100+")";r(a.style,b)}function T(a,b,c,d,e){a=y.createElement(a);b&&r(a,b);e&&D(a,{padding:0,border:Q,margin:0});c&&D(a,c);d&&d.appendChild(a);return a}function ia(a,b){var c=function(){};c.prototype=new a;r(c.prototype,b);return c}function Da(a,b,c,d){var e=G.lang,a=+a|| -0,f=b===-1?(a.toString().split(".")[1]||"").length:isNaN(b=M(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(z(a=M(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+M(a-c).toFixed(f).slice(2):"")}function Ea(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Va(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this, -a)}}function Fa(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(":"),g=/\.([0-9])/,h=G.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e=Da(e,i,h.decimalPoint,f.indexOf(",")>-1?h.thousandsSep:"")):e=ab(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function mb(a){return P.pow(10,N(P.log(a)/P.LN10))}function nb(a,b,c,d){var e,c=n(c, -1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Ab(){this.symbol=this.color=0}function ob(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function La(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function za(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c= -a[b]);return c}function Ma(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Na(a){bb||(bb=T(Ga));a&&bb.appendChild(a);bb.innerHTML=""}function ka(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else C.console&&console.log(c)}function aa(a){return parseFloat(a.toPrecision(14))}function Oa(a,b){oa=n(a,b.animation)}function Bb(){var a=G.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Pa=(a&&G.global.timezoneOffset||0)*6E4;cb=a? -Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,n(c,1),n(g,0),n(h,0),n(i,0))).getTime()};pb=b+"Minutes";qb=b+"Hours";rb=b+"Day";Wa=b+"Date";db=b+"Month";eb=b+"FullYear";Cb=c+"Minutes";Db=c+"Hours";sb=c+"Date";Eb=c+"Month";Fb=c+"FullYear"}function pa(){}function Qa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function qa(){this.init.apply(this,arguments)}function Gb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d; -this.total=null;this.points={};this.stack=e;this.percent=f==="percent";this.alignOptions={align:b.align||(g?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(g?"middle":c?"bottom":"top"),y:n(b.y,g?4:c?14:-6),x:n(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?"right":"left":"center")}function tb(){this.init.apply(this,arguments)}function fb(){this.init.apply(this,arguments)}var u,y=document,C=window,P=Math,w=P.round,N=P.floor,Ha=P.ceil,s=P.max,I=P.min,M=P.abs,U=P.cos,ba=P.sin,Aa=P.PI,Ba= -Aa*2/360,ra=navigator.userAgent,Hb=C.opera,ya=/msie/i.test(ra)&&!Hb,gb=y.documentMode===8,hb=/AppleWebKit/.test(ra),Xa=/Firefox/.test(ra),Ib=/(Mobile|Android|Windows Phone)/.test(ra),Ca="http://www.w3.org/2000/svg",V=!!y.createElementNS&&!!y.createElementNS(Ca,"svg").createSVGRect,Nb=Xa&&parseInt(ra.split("Firefox/")[1],10)<4,da=!V&&!ya&&!!y.createElement("canvas").getContext,Ya,ib=y.documentElement.ontouchstart!==u,Jb={},ub=0,bb,G,ab,oa,vb,E,la=function(){},Ia=[],Ga="div",Q="none",Ob=/^[0-9]+$/, -Kb="rgba(192,192,192,"+(V?1.0E-4:0.002)+")",Lb="stroke-width",cb,Pa,pb,qb,rb,Wa,db,eb,Cb,Db,sb,Eb,Fb,L={};C.Highcharts=C.Highcharts?ka(16,!0):{};ab=function(a,b,c){if(!t(b)||isNaN(b))return"Invalid date";var a=n(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b-Pa),e,f=d[qb](),g=d[rb](),h=d[Wa](),i=d[db](),j=d[eb](),k=G.lang,l=k.weekdays,d=r({a:l[g].substr(0,3),A:l[g],d:Ea(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ea(i+1),y:j.toString().substr(2,2),Y:j,H:Ea(f),I:Ea(f%12||12),l:f%12||12,M:Ea(d[pb]()),p:f<12?"AM": -"PM",P:f<12?"am":"pm",S:Ea(d.getSeconds()),L:Ea(w(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Ab.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};E=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}("millisecond",1,"second",1E3,"minute",6E4,"hour",36E5,"day", -864E5,"week",6048E5,"month",26784E5,"year",31556952E3);vb={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f, -f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};(function(a){C.HighchartsAdapter=C.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each(["cur", -"_default","width","height","opacity"],function(a,b){var e=d,k;b==="cur"?e=c.prototype:b==="_default"&&f&&(e=g[b],b="set");(k=e[b])&&(e[b]=function(c){var d,c=a?c:this;if(c.prop!=="align")return d=c.elem,d.attr?d.attr(c.prop,b==="cur"?u:c.now):k.apply(this,arguments)})});Va(e,"get",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr("d",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}: -d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a="Chart",b=arguments,c,d;fa(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,1));c=b[0];if(c!==u)c.chart=c.chart||{},c.chart.renderTo=this[0],new Highcharts[a](c,b[1]),d=this;c===u&&(d=Ia[v(this[0],"data-highcharts-chart")]);return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b, -c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?"removeEventListener":"detachEvent";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g="detached"+c,h;!ya&&d&&(delete d.layerX,delete d.layerY);r(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each(["preventDefault", -"stopPropagation"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b==="preventDefault"&&(h=!0)}}});a(b).trigger(f);b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===u)c.pageX=a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==u&&b.attr&&(c.opacity+="px");e.animate(c,d)},stop:function(b){a(b).stop()}}})(C.jQuery);var W= -C.HighchartsAdapter,J=W||{};W&&W.init.call(W,vb);var jb=J.adapterRun,Pb=J.getScript,sa=J.inArray,p=J.each,wb=J.grep,Qb=J.offset,Ra=J.map,F=J.addEvent,X=J.removeEvent,A=J.fireEvent,Rb=J.washMouseEvent,kb=J.animate,Za=J.stop,J={enabled:!0,x:0,y:15,style:{color:"#666",cursor:"default",fontSize:"11px"}};G={colors:"#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","), -shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),decimalPoint:".",numericSymbols:"k,M,G,T,P,E".split(","),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:","},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/3.0.9/modules/canvas-tools.js",VMLRadialGradientURL:"http://code.highcharts.com/3.0.9/gfx/vml-radial-gradient.png"},chart:{borderColor:"#4572A7",borderRadius:5, -defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],style:{fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',fontSize:"12px"},backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",margin:15,style:{color:"#274b6d",fontSize:"16px"}},subtitle:{text:"",align:"center",style:{color:"#4d759e"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1, -animation:{duration:1E3},events:{},lineWidth:2,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{enabled:!0},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:x(J,{align:"center",enabled:!1,formatter:function(){return this.y===null?"":Da(this.y,-1)},verticalAlign:"bottom",y:0}),cropThreshold:300,pointRange:0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3}},labels:{style:{position:"absolute",color:"#3E576F"}}, -legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderWidth:1,borderColor:"#909090",borderRadius:5,navigation:{activeColor:"#274b6d",inactiveColor:"#CCC"},shadow:!1,itemStyle:{cursor:"pointer",color:"#274b6d",fontSize:"12px"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold", -position:"relative",top:"1em"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,animation:V,backgroundColor:"rgba(255, 255, 255, .85)",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>', -pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,snap:Ib?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var Y=G.plotOptions,W=Y.line;Bb();var Sb=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, -Tb=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Ub=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,ta=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Ra(a.stops,function(a){return ta(a[1])}):(c=Sb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Tb.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Ub.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=x(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})): -f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)p(d,function(b){b.brighten(a)});else if(wa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};pa.prototype={init:function(a,b){this.element=b==="span"?T(b):y.createElementNS(Ca,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=n(b,oa,!0); -Za(this);if(b){b=x(b);if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),i=this.renderer,j,k=this.attrSetters,l=this.shadows,m,q,o=this;fa(a)&&t(b)&&(c=a,a={},a[c]=b);if(fa(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),o=v(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&c!=="fill"&&(o=parseFloat(o));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==u&&(d=e);if(c==="d")d&& -d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text")for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],v(f,"x")===v(g,"x")&&v(f,"x",d);else if(this.rotation&&(c==="x"||c==="y"))q=!0;else if(c==="fill")d=i.color(d,g,c);else if(h==="circle"&&(c==="x"||c==="y"))c={x:"cx",y:"cy"}[c]||c;else if(h==="rect"&&c==="r")v(g,{rx:d,ry:d}),j=!0;else if(c==="translateX"||c==="translateY"||c==="rotation"||c==="verticalAlign"||c==="scaleX"||c==="scaleY")j=q=!0;else if(c==="stroke")d= -i.color(d,g,c);else if(c==="dashstyle")if(c="stroke-dasharray",d=d&&d.toLowerCase(),d==="solid")d=Q;else{if(d){d=d.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=d.length;e--;)d[e]=z(d[e])*n(a["stroke-width"],this["stroke-width"]);d=d.join(",")}}else if(c==="width")d=z(d);else if(c==="align")c="text-anchor",d= -{left:"start",center:"middle",right:"end"}[d];else if(c==="title")e=g.getElementsByTagName("title")[0],e||(e=y.createElementNS(Ca,"title"),g.appendChild(e)),e.textContent=d;c==="strokeWidth"&&(c="stroke-width");if(c==="stroke-width"||c==="stroke"){this[c]=d;if(this.stroke&&this["stroke-width"])v(g,"stroke",this.stroke),v(g,"stroke-width",this["stroke-width"]),this.hasStroke=!0;else if(c==="stroke-width"&&d===0&&this.hasStroke)g.removeAttribute("stroke"),this.hasStroke=!1;j=!0}this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&& -(m||(this.symbolAttr(a),m=!0),j=!0);if(l&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c))for(e=l.length;e--;)v(l[e],c,c==="height"?s(d-(l[e].cutHeight||0),0):d);if((c==="width"||c==="height")&&h==="rect"&&d<0)d=0;this[c]=d;c==="text"?(d!==this.textStr&&delete this.bBox,this.textStr=d,this.added&&i.buildText(this)):j||v(g,c,d)}q&&this.updateTransform()}return o},addClass:function(a){var b=this.element,c=v(b,"class")||"";c.indexOf(a)===-1&&v(b,"class",c+" "+a);return this},symbolAttr:function(a){var b= -this;p("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=n(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":Q)},crisp:function(a,b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;i=w(a)%2/2;h.x=N(b||this.x||0)+i;h.y=N(c||this.y||0)+i;h.width=N((d||this.width||0)-2*i);h.height=N((e||this.height||0)-2*i);h.strokeWidth= -a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=this.element,c=this.textWidth=a&&a.width&&b.nodeName.toLowerCase()==="text"&&z(a.width),d,e="",f=function(a,b){return"-"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=r(this.styles,a);c&&delete a.width;if(ya&&!V)D(this.element,a);else{for(d in a)e+=d.replace(/([A-Z])/g,f)+":"+a[d]+";";v(b,"style",e)}c&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=this,d=c.element;ib&&a=== -"click"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(ra.indexOf("Android")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY|| -0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(this.x||0)+" "+(this.y||0)+")");(t(c)||t(d))&&a.push("scale("+n(c,1)+" "+n(d,1)+")");a.length&&v(this.element,"transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions= -a,this.alignByTranslate=b,!c||fa(c))this.alignTo=d=c||"renderer",ha(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=n(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=w(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=w(g);this[this.placed?"animate":"attr"](h);this.placed= -!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ba;d=this.textStr;var h;if(d===""||Ob.test(d))h=d.length+"|"+f.fontSize+"|"+f.fontFamily,a=b.cache[h];if(!a){if(c.namespaceURI===Ca||b.forExport){try{a=c.getBBox?r({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(ya&&f&&f.fontSize==="11px"&& -d.toPrecision(3)==="16.9")a.height=d=14;if(e)a.width=M(d*ba(g))+M(c*U(g)),a.height=M(d*U(g))+M(c*ba(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(){return this.attr({visibility:"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=v(f,"zIndex"),h;if(a)this.parentGroup=a;this.parentInverted= -a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=z(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=e[c],b=v(a,"zIndex"),a!==f&&(z(b)>g||!t(g)&&t(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;A(this,"add");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point= -null;Za(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&p(c,function(b){a.safeRemoveChild(b)});d&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div,d=b;a.alignTo&&ha(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=n(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted? -"(-1,-1)":"("+n(a.offsetX,1)+", "+n(a.offsetY,1)+")";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;v(f,{isShadow:"true",stroke:a.color||"black","stroke-opacity":j*e,"stroke-width":h,transform:"translate"+k,fill:Q});if(c)v(f,"height",s(v(f,"height")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this}};var ua=function(){this.init.apply(this,arguments)};ua.prototype={Element:pa,init:function(a,b,c,d){var e=location,f,g;f=this.createElement("svg").attr({version:"1.1"}); -g=f.element;a.appendChild(g);a.innerHTML.indexOf("xmlns")===-1&&v(g,"xmlns",Ca);this.isSVG=!0;this.box=g;this.boxWrapper=f;this.alignedObjects=[];this.url=(Xa||hb)&&y.getElementsByTagName("base").length?e.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(y.createTextNode("Created with Highcharts 3.0.9"));this.defs=this.createElement("defs").add();this.forExport=d;this.gradients={};this.cache={};this.setSize(b,c,!1);var h; -if(Xa&&a.getBoundingClientRect)this.subPixelFix=b=function(){D(a,{left:0,top:0});h=a.getBoundingClientRect();D(a,{left:Ha(h.left)-h.left+"px",top:Ha(h.top)-h.top+"px"})},b(),F(C,"resize",b)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ma(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&X(C,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b= -new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=n(a.textStr,"").toString().replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(/<br.*?>/g),f=b.childNodes,g=/style="([^"]+)"/,h=/href="(http[^"]+)"/,i=v(b,"x"),j=a.styles,k=a.textWidth,l=j&&j.lineHeight,m=f.length,q=function(a){return l?z(l): -c.fontMetrics(/px$/.test(a&&a.style.fontSize)?a.style.fontSize:j.fontSize||11).h};m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===""&&e.pop();p(e,function(e,f){var l,m=0,e=e.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");l=e.split("|||");p(l,function(e){if(e!==""||l.length===1){var o={},n=y.createElementNS(Ca,"tspan"),p;g.test(e)&&(p=e.match(g)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),v(n,"style",p));h.test(e)&&!d&&(v(n,"onclick",'location.href="'+ -e.match(h)[1]+'"'),D(n,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "&&(n.appendChild(y.createTextNode(e)),m?o.dx=0:o.x=i,v(n,o),!m&&f&&(!V&&d&&D(n,{display:"block"}),v(n,"dy",q(n),hb&&n.offsetHeight)),b.appendChild(n),m++,k))for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),o=e.length>1&&j.whiteSpace!=="nowrap",t,s,w=a._clipHeight,u=[],r=q(),$=1;o&&(e.length||u.length);)delete a.bBox,t=a.getBBox(),s=t.width,!V&&c.forExport&&(s=c.measureSpanWidth(n.firstChild.data, -a.styles)),t=s>k,!t||e.length===1?(e=u,u=[],e.length&&($++,w&&$*r>w?(e=["..."],a.attr("title",a.textStr)):(n=y.createElementNS(Ca,"tspan"),v(n,{dy:r,x:i}),p&&v(n,"style",p),b.appendChild(n),s>k&&(k=s)))):(n.removeChild(n.firstChild),u.unshift(e.pop())),e.length&&n.appendChild(y.createTextNode(e.join(" ").replace(/- /g,"-")))}})})},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a,b,c,i,null,null,null,null,"button"),k=0,l,m,q,o,n,p,a={x1:0,y1:0,x2:0,y2:1},e=x({"stroke-width":1,stroke:"#CCCCCC", -fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);q=e.style;delete e.style;f=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);o=f.style;delete f.style;g=x(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);n=g.style;delete g.style;h=x(e,{style:{color:"#CCC"}},h);p=h.style;delete h.style;F(j.element,ya?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(o)});F(j.element,ya?"mouseout":"mouseleave", -function(){k!==3&&(l=[e,f,g][k],m=[q,o,n][k],j.attr(l).css(m))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(n):a===3&&j.attr(h).css(p):j.attr(e).css(q)};return j.on("click",function(){k!==3&&d.call(j)}).attr(e).css(r({cursor:"default"},q))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=w(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=w(a[2])+b%2/2);return a},path:function(a){var b={fill:Q};Ka(a)?b.d=a:S(a)&&r(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=S(a)?a:{x:a, -y:b,r:c};return this.createElement("circle").attr(a)},arc:function(a,b,c,d,e,f){if(S(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){e=S(a)?a.r:e;e=this.createElement("rect").attr({rx:e,ry:e,fill:Q});return e.attr(S(a)?a:e.crisp(f,a,b,s(c,0),s(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[n(c,!0)?"animate":"attr"]({width:a, -height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return t(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:Q};arguments.length>1&&r(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(w(b),w(c),d,e,f),i=/^url\((.*?)\)$/, -j,k;if(h)g=this.path(h),r(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&r(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(w((d-b[0])/2),w((e-b[1])/2)))},j=a.match(i)[1],a=Jb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),T("img",{onload:function(){k(g,Jb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/ -2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=U(f),j=ba(f),k=U(g),g=ba(g),e=e.end-f<Aa?0:1;return["M",a+c*i,b+c*j,"A",c,c,0,e, -1,a+c*k,b+c*g,h?"M":"L",a+d*k,b+d*g,"A",d,d,0,e,0,a+d*i,b+d*j,h?"":"Z"]}},clipRect:function(a,b,c,d){var e="highcharts-"+ub++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g,h,i,j,k,l,m,q=[];a&&a.linearGradient?g="linearGradient":a&&a.radialGradient&&(g="radialGradient");if(g){c=a[g];h=d.gradients;j=a.stops;b=b.radialReference;Ka(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:"userSpaceOnUse"}); -g==="radialGradient"&&b&&!t(c.gradientUnits)&&(c=x(c,{cx:b[0]-b[2]/2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:"userSpaceOnUse"}));for(m in c)m!=="id"&&q.push(m,c[m]);for(m in j)q.push(j[m]);q=q.join(",");h[q]?a=h[q].id:(c.id=a="highcharts-"+ub++,h[q]=i=d.createElement(g).attr(c).add(d.defs),i.stops=[],p(j,function(a){f.test(a[1])?(e=ta(a[1]),k=e.get("rgb"),l=e.get("a")):(k=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":k,"stop-opacity":l}).add(i);i.stops.push(a)})); -return"url("+d.url+"#"+a+")"}else return f.test(a)?(e=ta(a),v(b,c+"-opacity",e.get("a")),e.get("rgb")):(b.removeAttribute(c+"-opacity"),a)},text:function(a,b,c,d){var e=G.chart.style,f=da||!V&&this.forExport;if(d&&!this.forExport)return this.html(a,b,c);b=w(n(b,0));c=w(n(c,0));a=this.createElement("text").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,fontSize:e.fontSize});f&&a.css({position:"absolute"});a.x=b;a.y=c;return a},fontMetrics:function(a){var a=z(a||11),a=a<24?a+4:w(a*1.2),b=w(a*0.8); -return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=n.element.style;va=(Z===void 0||Sa===void 0||o.styles.textAlign)&&n.getBBox();o.width=(Z||va.width||0)+2*ea+lb;o.height=(Sa||va.height||0)+2*ea;$=ea+q.fontMetrics(a&&a.fontSize).b;if(y){if(!H)a=w(-s*ea),b=h?-$:0,o.box=H=d?q.symbol(d,a,b,o.width,o.height,v):q.rect(a,b,o.width,o.height,0,v[Lb]),H.add(o);H.isImg||H.attr(x({width:o.width,height:o.height},v));v=null}}function k(){var a=o.styles,a=a&&a.textAlign,b=lb+ea*(1-s),c;c= -h?0:$;if(t(Z)&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(Z-va.width);(b!==n.x||c!==n.y)&&n.attr({x:b,y:c});n.x=b;n.y=c}function l(a,b){H?H.attr(a,b):v[a]=b}function m(){n.add(o);o.attr({text:a,x:b,y:c});H&&t(e)&&o.attr({anchorX:e,anchorY:f})}var q=this,o=q.g(i),n=q.text("",0,0,g).attr({zIndex:1}),H,va,s=0,ea=3,lb=0,Z,Sa,Ta,K,B=0,v={},$,g=o.attrSetters,y;F(o,"add",m);g.width=function(a){Z=a;return!1};g.height=function(a){Sa=a;return!1};g.padding=function(a){t(a)&&a!==ea&&(ea=a,k());return!1}; -g.paddingLeft=function(a){t(a)&&a!==lb&&(lb=a,k());return!1};g.align=function(a){s={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){n.attr(b,a);j();k();return!1};g[Lb]=function(a,b){y=!0;B=a%2/2;l(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){b==="fill"&&(y=!0);l(b,a);return!1};g.anchorX=function(a,b){e=a;l(b,a+B-Ta);return!1};g.anchorY=function(a,b){f=a;l(b,a-K);return!1};g.x=function(a){o.x=a;a-=s*((Z||va.width)+ea);Ta=w(a);o.attr("translateX",Ta);return!1};g.y=function(a){K=o.y= -w(a);o.attr("translateY",K);return!1};var z=o.css;return r(o,{css:function(a){if(a){var b={},a=x(a);p("fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow".split(","),function(c){a[c]!==u&&(b[c]=a[c],delete a[c])});n.css(b)}return z.call(o,a)},getBBox:function(){return{width:va.width+2*ea,height:va.height+2*ea,x:va.x-ea,y:va.y-ea}},shadow:function(a){H&&H.shadow(a);return o},destroy:function(){X(o,"add",m);X(o.element,"mouseenter");X(o.element,"mouseleave");n&&(n=n.destroy()); -H&&(H=H.destroy());pa.prototype.destroy.call(o);o=q=j=k=l=m=null}})}};Ya=ua;r(pa.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=r(this.styles,a);D(this.element,a);return this},htmlGetBBox:function(){var a=this.element,b=this.bBox;if(!b){if(a.nodeName==="text")a.style.position="absolute";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a= -this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=this.shadows;D(b,{marginLeft:c,marginTop:d});i&&p(i,function(a){D(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&p(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName==="SPAN"){var j=this.rotation,k,l=z(this.textWidth),m=[j,g,b.innerHTML,this.textWidth].join(",");if(m!==this.cTT){k=a.fontMetrics(b.style.fontSize).b;t(j)&&this.setSpanRotation(j, -h,k);i=n(this.elemWidth,b.offsetWidth);if(i>l&&/[ \-]/.test(b.textContent||b.innerText))D(b,{width:l+"px",display:"block",whiteSpace:"normal"}),i=l;this.getSpanCorrection(i,k,h,j,g)}D(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(hb)k=b.offsetHeight;this.cTT=m}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=ya?"-ms-transform":hb?"-webkit-transform":Xa?"MozTransform":Hb?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Xa?"Origin":"-origin")]=b*100+"% "+ -c+"px";D(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});r(ua.prototype,{html:function(a,b,c){var d=G.chart.style,e=this.createElement("span"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){a!==g.innerHTML&&delete this.bBox;g.innerHTML=a;return!1};f.x=f.y=f.align=f.rotation=function(a,b){b==="align"&&(b="textAlign");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:w(b),y:w(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:d.fontFamily, -fontSize:d.fontSize});e.css=e.htmlCss;if(h.isSVG)e.add=function(a){var b,c=h.box.parentNode,d=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)d.push(a),a=a.parentGroup;p(d.reverse(),function(a){var d;b=a.div=a.div||T(Ga,{className:v(a.element,"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;r(a.attrSetters,{translateX:function(a){d.left=a+"px"},translateY:function(a){d.top=a+"px"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(g); -e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};return e}});var R;if(!V&&!da){Highcharts.VMLElement=R={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ga;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=T(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer, -c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();A(this,"add");return this},updateTransform:pa.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=U(a*Ba),c=ba(a*Ba);D(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):Q})},getSpanCorrection:function(a, -b,c,d,e){var f=d?U(d*Ba):1,g=d?ba(d*Ba):0,h=n(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),D(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(wa(a[b]))c[b]=w(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]? -1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,q=this.attrSetters,o=this;fa(a)&&t(b)&&(c=a,a={},a[c]=b);if(fa(a))c=a,o=c==="strokeWidth"||c==="stroke-width"?this.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=q[c]&&q[c].call(this,d,c),e!==!1&&d!==null){e!==u&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k|| -(this.symbolAttr(a),k=!0),m=!0;else if(c==="d"){d=d||[];this.d=d.join(" ");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c==="visibility"){if(l)for(e=l.length;e--;)l[e].style[c]=d;h==="DIV"&&(d=d==="hidden"?"-999em":0,gb||(g[c]=d?"visible":"hidden"),c="top");g[c]=d;m=!0}else if(c==="zIndex")d&&(g[c]=d),m=!0;else if(sa(c,["x","y","width","height"])!==-1)this[c]=d,c==="x"||c==="y"?c={x:"left",y:"top"}[c]:d=s(0,d),this.updateClipping? -(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c==="class"&&h==="DIV")f.className=d;else if(c==="stroke")d=i.color(d,f,c),c="strokecolor";else if(c==="stroke-width"||c==="strokeWidth")f.stroked=d?!0:!1,c="strokeweight",this[c]=d,wa(d)&&(d+="px");else if(c==="dashstyle")(f.getElementsByTagName("stroke")[0]||T(i.prepVML(["<stroke/>"]),null,null,f))[c]=d||"solid",this.dashstyle=d,m=!0;else if(c==="fill")if(h==="SPAN")g.color=d;else{if(h!=="IMG")f.filled=d!==Q?!0:!1,d=i.color(d,f,c,this),c="fillcolor"}else if(c=== -"opacity")m=!0;else if(h==="shape"&&c==="rotation")this[c]=f.style[c]=d,f.style.left=-w(ba(d*Ba)+1)+"px",f.style.top=w(U(d*Ba))+"px";else if(c==="translateX"||c==="translateY"||c==="rotation")this[c]=d,this.updateTransform(),m=!0;m||(gb?f[c]=d:v(f,c,d))}return o},clip:function(a){var b=this,c;a?(c=a.members,ha(c,b),c.push(b),b.destroyClip=function(){ha(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:gb?"inherit":"rect(auto)"});return b.css(a)},css:pa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&& -Na(a)},destroy:function(){this.destroyClip&&this.destroyClip();return pa.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=C.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,q,o;k&&typeof k.value!=="string"&&(k="x");m=k;if(a){q=n(a.width,3);o=(a.opacity|| -0.15)/q;for(e=1;e<=3;e++){l=q*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow="true" strokeweight="',l,'" filled="false" path="',m,'" coordsize="10 10" style="',f.style.cssText,'" />'];h=T(g.prepVML(j),null,{left:z(i.left)+n(a.offsetX,1),top:z(i.top)+n(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color="',a.color||"black",'" opacity="',o*e,'"/>'];T(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};R=ia(pa,R); -var xb={Element:R,isIE8:ra.indexOf("MSIE 8.0")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ga);e=d.element;e.style.position="relative";a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{y.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){y.styleSheets[0].cssText+= -"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=S(a);return r(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+w(a?e:d)+"px,"+w(a?f: -b)+"px,"+w(a?b:f)+"px,"+w(a?d:e)+"px)"};!a&&gb&&c==="DIV"&&r(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){p(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,m=a.linearGradient||a.radialGradient,q,o,n,H,s,t="",a=a.stops,u,w=[],r=function(){h=['<fill colors="'+w.join(",")+'" opacity="',n,'" o:opacity2="',o,'" type="',i,'" ',t,'focus="100%" method="any" />']; -T(e.prepVML(h),null,null,b)};q=a[0];u=a[a.length-1];q[0]>0&&a.unshift([0,q[1]]);u[0]<1&&a.push([1,u[1]]);p(a,function(a,b){g.test(a[1])?(f=ta(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);w.push(a[0]*100+"% "+k);b?(n=l,H=k):(o=l,s=k)});if(c==="fill")if(i==="gradient")c=m.x1||m[0]||0,a=m.y1||m[1]||0,q=m.x2||m[2]||0,m=m.y2||m[3]||0,t='angle="'+(90-P.atan((m-a)/(q-c))*180/Aa)+'"',r();else{var j=m.r,Sa=j*2,Ta=j*2,v=m.cx,B=m.cy,x=b.radialReference,$,j=function(){x&&($=d.getBBox(),v+=(x[0]-$.x)/$.width- -0.5,B+=(x[1]-$.y)/$.height-0.5,Sa*=x[2]/$.width,Ta*=x[2]/$.height);t='src="'+G.global.VMLRadialGradientURL+'" size="'+Sa+","+Ta+'" origin="0.5,0.5" position="'+v+","+B+'" color2="'+s+'" ';r()};d.added?j():F(d,"add",j);j=H}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=ta(a),h=["<",c,' opacity="',f.get("a"),'"/>'],T(this.prepVML(h),null,null,b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(""); -b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:ua.prototype.html,path:function(a){var b={coordsize:"10 10"};Ka(a)?b.d=a:S(a)&&r(b,a);return this.createElement("shape").attr(b)},circle:function(a,b,c){var d=this.symbol("circle");if(S(a))c=a.r,b=a.y,a=a.x;d.isCircle= -!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(Ga).attr(b)},image:function(a,b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){var g=this.symbol("rect");g.r=S(a)?a.r:e;return g.attr(S(a)?a:g.crisp(f,a,b,s(c,0),s(d,0)))},invertChild:function(a,b){var c=b.style;D(a,{flip:"x",left:z(c.width)-1,top:z(c.height)-1,rotation:-90})}, -symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=U(f),i=ba(f),j=U(g),k=ba(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!t(e)||!e.r?f=ua.prototype.symbols.square.apply(0, -arguments):(h=I(e.r,c,d),f=["M",a+h,b,"L",f-h,b,"wa",f-2*h,b,f,b+2*h,f-h,b,f,b+h,"L",f,g-h,"wa",f-2*h,g-2*h,f,g,f,g-h,f-h,g,"L",a+h,g,"wa",a,g-2*h,a+2*h,g,a+h,g,a,g-h,"L",a,b+h,"wa",a,b,a+2*h,b+2*h,a,b+h,a+h,b,"x","e"]);return f}}};Highcharts.VMLRenderer=R=function(){this.init.apply(this,arguments)};R.prototype=x(ua.prototype,xb);Ya=R}ua.prototype.measureSpanWidth=function(a,b){var c=y.createElement("span"),d;d=y.createTextNode(a);c.appendChild(d);D(c,b);this.box.appendChild(c);d=c.offsetWidth;Na(c); -return d};var Mb;if(da)Highcharts.CanVGRenderer=R=function(){Ca="http://www.w3.org/1999/xhtml"},R.prototype.symbols={},Mb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Pb(d,a);b.push(c)}}}(),Ya=R;Qa.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||!d&&(c.margin[3]|| -c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?n(e[g],f[g],g):g,e=this.label,m=i.info;a.isDatetimeAxis&&m&&(l=b.dateTimeLabelFormats[m.higherRanks[g]||m.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?aa(ga(f)):f});g=d&&{width:s(1,w(d-2*(h.padding||10)))+"px"};g=r(g,h.style);if(t(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(wa(h.rotation))l.rotation=h.rotation;if(d&&h.ellipsis)l._clipHeight= -a.len/i.length;this.label=t(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?a.getBBox()[b.horiz?"height":"width"]:0},getLabelSides:function(){var a=this.label.getBBox(),b=this.axis,c=b.horiz,d=b.options.labels,a=c?a.width:a.height,b=c?a*{left:0,center:0.5,right:1}[b.labelAlign]-d.x:a;return[-b,a-b]},handleOverflow:function(a,b){var B;var c=!0,d=this.axis,e=this.isFirst,f=this.isLast,g=d.horiz?b.x: -b.y,h=d.reversed,i=d.tickPositions,j=this.getLabelSides(),k=j[0],j=j[1],l=d.pos,m=l+d.len,q=this.label.line||0,o=d.labelEdge,n=d.justifyLabels&&(e||f);o[q]===u||g+k>o[q]?o[q]=g+j:n||(c=!1);if(n)B=(d=d.ticks[i[a+(e?1:-1)]])&&d.label.xy&&d.label.xy.x+d.getLabelSides()[e?0:1],i=B,e&&!h||f&&h?g+k<l&&(g=l-k,d&&g+j>i&&(c=!1)):g+j>m&&(g=m-j,d&&g+k<i&&(c=!1)),b.x=g;return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+ -e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,m=i.chart.renderer.fontMetrics(e.style.fontSize).b,q=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);q&&i.side===2&&(b-=m-m*U(q*Ba));!t(e.y)&&!q&&(b+=m-c.getBBox().height/2);if(l)c.line=g/(h||1)%l, -b+=c.line*(i.labelOffset/l);return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,m=h?h+"Grid":"grid",q=h?h+"Tick":"tick",o=e[m+"LineWidth"],p=e[m+"LineColor"],H=e[m+"LineDashStyle"],s=e[q+"Length"],m=e[q+"Width"]||0,t=e[q+"Color"],w=e[q+"Position"],q=this.mark,r=k.step,Z=!0,x=d.tickmarkOffset,v=this.getPosition(g, -j,x,b),y=v.x,v=v.y,B=g&&y===d.pos+d.len||!g&&v===d.pos?-1:1;this.isActive=!0;if(o){j=d.getPlotLinePath(j+x,o*B,b,!0);if(l===u){l={stroke:p,"stroke-width":o};if(H)l.dashstyle=H;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=o?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?"attr":"animate"]({d:j,opacity:c})}if(m&&s)w==="inside"&&(s=-s),d.opposite&&(s=-s),h=this.getMarkPath(y,v,s,m*B,g,f),q?q.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:t,"stroke-width":m,opacity:c}).add(d.axisGroup); -if(i&&!isNaN(y))i.xy=v=this.getLabelPosition(y,v,i,g,k,x,a,r),this.isFirst&&!this.isLast&&!n(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!n(e.showLastLabel,1)?Z=!1:!d.isRadial&&!k.step&&!k.rotation&&!b&&c!==0&&(Z=this.handleOverflow(a,v)),r&&a%r&&(Z=!1),Z&&!isNaN(v.y)?(v.opacity=c,i[this.isNew?"attr":"animate"](v),this.isNew=!1):i.attr("y",-9999)},destroy:function(){Ma(this,this.axis)}};var yb=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};yb.prototype={render:function(){var a=this, -b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,i=e.to,j=e.from,k=t(j)&&t(i),l=e.value,m=e.dashStyle,q=a.svgElem,o=[],p,H=e.color,w=e.zIndex,r=e.events,u=b.chart.renderer;b.isLog&&(j=xa(j),i=xa(i),l=xa(l));if(h){if(o=b.getPlotLinePath(l,h),d={stroke:H,"stroke-width":h},m)d.dashstyle=m}else if(k){if(j=s(j,b.min-d),i=I(i,b.max+d),o=b.getPlotBandPath(j,i,e),d={fill:H},e.borderWidth)d.stroke=e.borderColor,d["stroke-width"]=e.borderWidth}else return;if(t(w))d.zIndex= -w;if(q)if(o)q.animate({d:o},null,q.onGetPath);else{if(q.hide(),q.onGetPath=function(){q.show()},g)a.label=g=g.destroy()}else if(o&&o.length&&(a.svgElem=q=u.path(o).attr(d).add(),r))for(p in e=function(b){q.on(b,function(c){r[b].apply(a,[c])})},r)e(p);if(f&&t(f.text)&&o&&o.length&&b.width>0&&b.height>0){f=x({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=u.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation, -zIndex:w}).css(f.style).add();b=[o[1],o[4],n(o[6],o[1])];o=[o[2],o[5],n(o[7],o[2])];c=La(b);k=La(o);g.align(f,!1,{x:c,y:k,width:za(b)-c,height:za(o)-k});g.show()}else g&&g.hide();return a},destroy:function(){ha(this.axis.plotLinesAndBands,this);delete this.axis;Ma(this)}};qa.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:J,lineColor:"#C0D0E0", -lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:5,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#4d759e",fontWeight:"bold"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0, -maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Da(this.total,-1)},style:J.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll= -(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=t(d.linkedTo); -this.tickmarkOffset=this.categories&&d.tickmarkPlacement==="between"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stackExtremes={};this.min=this.max=null;this.crosshair=n(d.crosshair,ja(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;sa(this,a.axes)===-1&&(a.axes.push(this), -a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===u)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)F(this,f,d[f]);if(this.isLog)this.val2lin=xa,this.lin2val=ga},setOptions:function(a){this.options=x(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(G[this.coll],a))},defaultLabelFormatter:function(){var a= -this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=G.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Fa(h,this);else if(c)g=b;else if(d)g=ab(d,b);else if(f&&a>=1E3)for(;f--&&g===u;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Da(b/c,-1)+e[f]);g===u&&(g=b>=1E4?Da(b,0):Da(b,-1,u,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.stackExtremes={};a.buildStacks();p(a.series,function(c){if(c.visible|| -!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=I(n(a.dataMin,d[0]),La(d)),a.dataMax=s(n(a.dataMax,d[0]),za(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(t(c)&&t(e))a.dataMin=I(n(a.dataMin,c),c),a.dataMax=s(n(a.dataMax,e),e);if(t(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g= -this.len,h=1,i=0,j=d?this.oldTransA:this.transA,d=d?this.oldMin:this.min,k=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!j)j=this.transA;c&&(h*=-1,i=g);this.reversed&&(h*=-1,i-=h*g);b?(a=a*h+i,a-=k,a=a/j+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f==="between"&&(f=0.5),a=h*(a-d)*j+i+h*k+(wa(f)?j*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a- -(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,j,k=c&&f.oldChartHeight||f.chartHeight,l=c&&f.oldChartWidth||f.chartWidth,m;i=this.transB;e=n(e,this.translate(a,null,null,c));a=c=w(e+i);i=j=w(k-e-i);if(isNaN(e))m=!0;else if(this.horiz){if(i=h,j=k-this.bottom,a<g||a>g+this.width)m=!0}else if(a=g,c=l-this.right,i<h||i>h+this.height)m=!0;return m&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,j],b||1)},getLinearTickPositions:function(a, -b,c){for(var d,b=aa(N(b/a)*a),c=aa(Ha(c/a)*a),e=[];b<=c;){e.push(b);b=aa(b+a);if(b===d)break;d=b}return e},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,b[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval==="auto")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&d.shift();else for(b=this.min+ -(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===u&&!this.isLog)t(a.min)||t(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===u||h<f)f=h}),this.minRange=I(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,n(a.min,b-d)]; -if(e)d[2]=this.dataMin;b=za(d);c=[b+k,n(a.max,b+k)];if(e)c[2]=this.dataMax;c=La(c);c-b<k&&(d[0]=c-k,d[1]=n(a.min,c-k),b=za(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this.max-this.min,c=0,d,e=0,f=0,g=this.linkedParent,h=!!this.categories,i=this.transA;if(this.isXAxis||h)g?(e=g.minPointOffset,f=g.pointRangePadding):p(this.series,function(a){var g=s(a.pointRange,+h),i=a.options.pointPlacement,m=a.closestPointRange;g>b&&(g=0);c=s(c,g);e=s(e,fa(i)?0:g/2);f=s(f,i==="on"?0:g);!a.noSharedTooltip&& -t(m)&&(d=t(d)?I(d,m):m)}),g=this.ordinalSlope&&d?this.ordinalSlope/d:1,this.minPointOffset=e*=g,this.pointRangePadding=f*=g,this.pointRange=I(c,b),this.closestPointRange=d;if(a)this.oldTransA=i;this.translationSlope=this.transA=i=this.len/(b+f||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=i*e},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,k=d.minPadding,l=d.tickInterval, -m=d.minTickInterval,q=d.tickPixelInterval,o,ma=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=n(c.min,c.dataMin),b.max=n(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ka(11,1)):(b.min=n(b.userMin,d.min,b.dataMin),b.max=n(b.userMax,d.max,b.dataMax));if(e)!a&&I(b.min,n(b.dataMin,b.min))<=0&&ka(10,1),b.min=aa(xa(b.min)),b.max=aa(xa(b.max));if(b.range&&t(b.max))b.userMin=b.min=s(b.min,b.max-b.range),b.userMax=b.max,b.range=null;b.beforePadding&&b.beforePadding(); -b.adjustForMinRange();if(!ma&&!b.usePercentage&&!h&&t(b.min)&&t(b.max)&&(c=b.max-b.min)){if(!t(d.min)&&!t(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!t(d.max)&&!t(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&q===b.linkedParent.options.tickPixelInterval?b.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=n(l,ma?1:(b.max-b.min)*q/s(b.len,q)),!t(l)&&b.len<q&&!this.isRadial&&!ma&&d.startOnTick&& -d.endOnTick&&(o=!0,b.tickInterval/=4));g&&!a&&p(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=s(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<m)b.tickInterval=m;if(!f&&!e&&!l)b.tickInterval=nb(b.tickInterval,null,mb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval=== -"auto"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>s(2*b.len,200)&&ka(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),o&&a.splice(1,a.length-2), -b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(b.min-=0.001,b.max+=0.001)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join("-");if(!this.isLinked&&!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey, -b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==u){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(aa(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(t(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!== -this.oldAxisLength;p(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].total=null,a[b][c].cum=0;this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=this.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax}else if(!this.isXAxis){if(this.oldStacks)a= -this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=n(c,!0),e=r(e,{min:a,max:b});A(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){this.allowZoomOutside||(t(this.dataMin)&&a<=this.dataMin&&(a=u),t(this.dataMax)&&b>=this.dataMax&&(b=u));this.displayBtn=a!==u||b!==u;this.setExtremes(a,b,!1,u,{trigger:"zoom"});return!0},setAxisSize:function(){var a= -this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=n(b.left,a.plotLeft+c);this.top=f=n(b.top,a.plotTop);this.width=c=n(b.width,a.plotWidth-c+d);this.height=b=n(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=s(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a=this.isLog;return{min:a?aa(ga(this.min)):this.min,max:a?aa(ga(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}}, -getThreshold:function(a){var b=this.isLog,c=b?ga(this.min):this.min,b=b?ga(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(n(a,0)-this.side*90+720)%360;return a>15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,q=d.title,o=d.labels,ma=0,H=b.axisOffset,w=b.clipOffset,r=[-1,1,1,-1][h],v, -x=1,Z=n(o.maxStaggerLines,5),y,z,K,B;a.hasData=j=a.hasVisibleSeries||t(a.min)&&t(a.max)&&!!e;a.showAxis=b=j||n(d.showEmpty,!0);a.staggerLines=a.horiz&&o.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:o.zIndex||7}).add();if(j||a.isLinked){a.labelAlign=n(o.align||a.autoLabelAlign(o.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Qa(a,b)});if(a.horiz&& -!a.staggerLines&&Z&&!o.rotation){for(v=a.reversed?[].concat(e).reverse():e;x<Z;){j=[];y=!1;for(o=0;o<v.length;o++)z=v[o],K=(K=f[z].label&&f[z].label.getBBox())?K.width:0,B=o%x,K&&(z=a.translate(z),j[B]!==u&&z<j[B]&&(y=!0),j[B]=z+K);if(y)x++;else break}if(x>1)a.staggerLines=x}p(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign)ma=s(f[b].getLabelSize(),ma)});if(a.staggerLines)ma*=a.staggerLines,a.labelOffset=ma}else for(v in f)f[v].destroy(),delete f[v];if(q&&q.text&&q.enabled!== -!1){if(!a.axisTitle)a.axisTitle=c.text(q.text,0,0,q.useHTML).attr({zIndex:7,rotation:q.rotation||0,align:q.textAlign||{low:"left",middle:"center",high:"right"}[q.align]}).css(q.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],m=n(q.margin,g?5:10),l=q.offset;a.axisTitle[b?"show":"hide"]()}a.offset=r*n(d.offset,H[h]);a.axisTitleMargin=n(l,ma+m+(h!==2&&ma&&r*d.labels[g?"y":"x"]));H[h]=s(H[h],a.axisTitleMargin+k+r*a.offset);w[i]=s(w[i],N(d.lineWidth/2)*2)}, -getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+ -(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.stacks,m=a.ticks,q=a.minorTicks,o=a.alternateBands,n=f.stackLabels,H=f.alternateGridColor,s=a.tickmarkOffset,r=f.lineWidth,w=d.hasRendered&&t(a.oldMin)&&!isNaN(a.oldMin),v= -a.hasData,x=a.showAxis,y,z=a.justifyLabels=!a.staggerLines&&b&&f.labels.overflow==="justify",K;a.labelEdge.length=0;p([m,q,o],function(a){for(var b in a)a[b].isActive=!1});if(v||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){q[b]||(q[b]=new Qa(a,b,"minor"));w&&q[b].isNew&&q[b].render(null,!0);q[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),z&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){z&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<= -a.max)m[b]||(m[b]=new Qa(a,b)),w&&m[b].isNew&&m[b].render(c,!0,0.1),m[b].render(c,!1,1)}),s&&a.min===0&&(m[-1]||(m[-1]=new Qa(a,-1,null,!0)),m[-1].render(-1))),H&&p(i,function(b,c){if(c%2===0&&b<a.max)o[b]||(o[b]=new yb(a)),y=b+s,K=i[c+1]!==u?i[c+1]+s:a.max,o[b].options={from:g?ga(y):y,to:g?ga(K):K,color:H},o[b].render(),o[b].isActive=!0}),!a._addedPlotLB)p((f.plotLines||[]).concat(f.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;p([m,q,o],function(a){var b,c,e=[],f=oa?oa.duration|| -500:0,g=function(){for(c=e.length;c--;)a[e[c]]&&!a[e[c]].isActive&&(a[e[c]].destroy(),delete a[e[c]])};for(b in a)if(!a[b].isActive)a[b].render(b,!1,0),a[b].isActive=!1,e.push(b);a===o||!d.hasRendered||!f?g():f&&setTimeout(g,f)});if(r)b=a.getLinePath(r),a.axisLine?a.axisLine.animate({d:b}):a.axisLine=e.path(b).attr({stroke:f.lineColor,"stroke-width":r,zIndex:7}).add(a.axisGroup),a.axisLine[x?"show":"hide"]();if(k&&x)k[k.isNew?"attr":"animate"](a.getTitlePosition()),k.isNew=!1;if(n&&n.enabled){var B, -A,f=a.stackTotalGroup;if(!f)a.stackTotalGroup=f=e.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();f.translate(d.plotLeft,d.plotTop);for(B in l)for(A in e=l[B],e)e[A].render(f)}a.isDirty=!1},redraw:function(){var a=this.chart.pointer;a.reset&&a.reset(!0);this.render();p(this.plotLinesAndBands,function(a){a.render()});p(this.series,function(a){a.isDirty=!0})},buildStacks:function(){var a=this.series,b=a.length;if(!this.isXAxis){for(;b--;)a[b].setStackedPoints();if(this.usePercentage)for(b= -0;b<a.length;b++)a[b].setPercentStacks()}},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||X(b);for(d in c)Ma(c[d]),c[d]=null;p([b.ticks,b.minorTicks,b.alternateBands],function(a){Ma(a)});for(a=e.length;a--;)e[a].destroy();p("stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup".split(","),function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},drawCrosshair:function(a,b){if(this.crosshair)if((t(b)||!n(this.crosshair.snap,!0))===!1)this.hideCrosshair(); -else{var c,d=this.crosshair,e=d.animation;n(d.snap,!0)?t(b)&&(c=this.chart.inverted!=this.horiz?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos;c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:n(b.stackY,b.y)):this.getPlotLinePath(null,null,null,null,c);if(c===null)this.hideCrosshair();else if(this.cross)this.cross.attr({visibility:"visible"})[e?"animate":"attr"]({d:c},e);else{e={"stroke-width":d.width||1,stroke:d.color||"#C0C0C0",zIndex:d.zIndex||2};if(d.dashStyle)e.dashstyle= -d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}}},hideCrosshair:function(){this.cross&&this.cross.hide()}};r(qa.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],c[5],c[1],c[2]):d=null;return d},addPlotBand:function(a){this.addPlotBandOrLine(a,"plotBands")},addPlotLine:function(a){this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(a,b){var c=(new yb(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]|| -[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();p([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ha(b,b[e])})}});qa.prototype.getLogTickPositions=function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=w(a),g=this.getLinearTickPositions(a, -b,c);else if(a>=0.08)for(var f=N(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=xa(ga(f)*e[h]),j>b&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ga(b),c=ga(c),a=e[d?"minorTickInterval":"tickInterval"],a=n(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ra(this.getLinearTickPositions(a,b,c),xa),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval= -a;return g};qa.prototype.getTimeTicks=function(a,b,c,d){var e=[],f={},g=G.global.useUTC,h,i=new Date(b-Pa),j=a.unitRange,k=a.count;if(t(b)){j>=E.second&&(i.setMilliseconds(0),i.setSeconds(j>=E.minute?0:k*N(i.getSeconds()/k)));if(j>=E.minute)i[Cb](j>=E.hour?0:k*N(i[pb]()/k));if(j>=E.hour)i[Db](j>=E.day?0:k*N(i[qb]()/k));if(j>=E.day)i[sb](j>=E.month?1:k*N(i[Wa]()/k));j>=E.month&&(i[Eb](j>=E.year?0:k*N(i[db]()/k)),h=i[eb]());j>=E.year&&(h-=h%k,i[Fb](h));if(j===E.week)i[sb](i[Wa]()-i[rb]()+n(d,1));b= -1;Pa&&(i=new Date(i.getTime()+Pa));h=i[eb]();for(var d=i.getTime(),l=i[db](),m=i[Wa](),q=g?Pa:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===E.year?d=cb(h+b*k,0):j===E.month?d=cb(h,l+b*k):!g&&(j===E.day||j===E.week)?d=cb(h,l,m+b*k*(j===E.day?1:7)):d+=j*k,b++;e.push(d);p(wb(e,function(a){return j<=E.hour&&a%E.day===q}),function(a){f[a]="day"})}e.info=r(a,{higherRanks:f,totalRange:j*k});return e};qa.prototype.normalizeTimeTickInterval=function(a,b){var c=b||[["millisecond",[1,2,5,10,20, -25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]],d=c[c.length-1],e=E[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=E[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+E[c[g+1][0]])/2)break;e===E.year&&a<5*e&&(f=[1,2,5]);c=nb(a/e,f,d[0]==="year"?s(mb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};Gb.prototype={destroy:function(){Ma(this,this.axis)},render:function(a){var b=this.options, -c=b.format,c=c?Fa(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,0,0,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(this.percent?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e? -c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e.attr({visibility:this.options.crop===!1||d.isInsidePlot(f.x,f.y)?V?"inherit":"visible":"hidden"})}};tb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape,null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-999}); -da||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden;r(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:g?(2*f.anchorX+c)/3:c,anchorY:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b, -c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},n(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=ja(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===u&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i= -a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ra(c,w)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=n(this.options.distance,12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+s(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k<f+5&&(k=f+5,l&&c>=k&&c<=k+b&&(k=c+ -f+i));k+b>f+h&&(k=s(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||ja(this),c=b[0].series,d;d=[c.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});d.push(a.options.footerFormat||"");return d.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared; -clearTimeout(this.hideTimer);this.followPointer=ja(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category,y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(Za(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color|| -"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);A(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(w(c.x),w(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)}};var $a=Highcharts.Pointer=function(a,b){this.init(a,b)};$a.prototype={init:function(a,b){var c=b.chart,d=c.events,e=da?"":c.zoomType,c=a.inverted, -f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(b.tooltip.enabled)a.tooltip=new tb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||C.event;if(!a.target)a.target=a.srcElement;a=Rb(a);d=a.touches?a.touches.item(0):a;if(!b)this.chartPosition=b=Qb(this.chart.container);d.pageX===u?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX- -b.left,d=d.pageY-b.top);return r(a,{chartX:w(c),chartY:w(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this,c=b.chart,d=c.series,e=c.tooltip,f,g,h=c.hoverPoint,i=c.hoverSeries,j,k,l=c.chartWidth,m=b.getIndex(a);if(e&& -b.options.tooltip.shared&&(!i||!i.noSharedTooltip)){g=[];j=d.length;for(k=0;k<j;k++)if(d[k].visible&&d[k].options.enableMouseTracking!==!1&&!d[k].noSharedTooltip&&d[k].tooltipPoints.length&&(f=d[k].tooltipPoints[m])&&f.series)f._dist=M(m-f.clientX),l=I(l,f._dist),g.push(f);for(j=g.length;j--;)g[j]._dist>l&&g.splice(j,1);if(g.length&&g[0].clientX!==b.hoverX)e.refresh(g,a),b.hoverX=g[0].clientX}if(i&&i.tracker){if((f=i.tooltipPoints[m])&&f!==h)f.onMouseOver(a)}else e&&e.followPointer&&!e.isHidden&& -(d=e.getAnchor([{}],a),e.updatePosition({plotX:d[0],plotY:d[1]}));if(e&&!b._onDocumentMouseMove)b._onDocumentMouseMove=function(a){b.onDocumentMouseMove(a)},F(y,"mousemove",b._onDocumentMouseMove);p(c.axes,function(b){b.drawCrosshair(a,n(f,h))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&ja(f)[0].plotX===u&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)X(y, -"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=null;p(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},pinchTranslate:function(a,b,c,d,e,f,g,h){a&&this.pinchTranslateDirection(!0,c,d, -e,f,g,h);b&&this.pinchTranslateDirection(!1,c,d,e,f,g,h)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,m=a?"width":"height",q=i["plot"+(a?"Left":"Top")],o,n,p=h||1,s=i.inverted,t=i.bounds[a?"h":"v"],r=b.length===1,w=b[0][l],u=c[0][l],v=!r&&b[1][l],x=!r&&c[1][l],y,c=function(){!r&&M(w-v)>20&&(p=h||M(u-x)/M(w-v));n=(q-u)/p+w;o=i["plot"+(a?"Width":"Height")]/p};c();b=n;b<t.min?(b=t.min,y=!0):b+o>t.max&&(b=t.max-o,y=!0);y?(u-=0.8*(u-g[j][0]),r|| -(x-=0.8*(x-g[j][1])),c()):g[j]=[u,x];s||(f[j]=n-q,f[m]=o);f=s?1/p:p;e[m]=o;e[j]=b;d[s?a?"scaleY":"scaleX":"scale"+k]=p;d["translate"+k]=f*q+(u-f*w)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker,m={},q=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick),o={};(k||e)&&!q&&a.preventDefault();Ra(f, -function(a){return b.normalize(a)});if(a.type==="touchstart")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=I(e,f),e=s(e,f);b.min=I(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=r({destroy:la},c.plotBox);b.pinchTranslate(i,j,d,f,m,l,o,h);b.hasPinched= -k;b.scaleGroups(m,o);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,q=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m- -d,2)+Math.pow(q-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,q-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-q,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+q}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}}, -drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:I(c,b),max:s(c,b)}),h=!0)}}),h&&A(b,"selection",d,function(a){b.zoom(r(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy(); -c&&this.scaleGroups()}if(b)D(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){this.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft, -a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){this.reset();this.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart,a=this.normalize(a);b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=v(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a= -a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget||a.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble=!0;if(!b.cancelClick)c&&this.inClass(a.target,"highcharts-tracker")?(g=this.chartPosition,h=c.plotX,i=c.plotY,r(c,{pageX:g.left+d+(f? -b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),A(c.series,"click",r(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(r(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&A(b,"click",a))},onContainerTouchStart:function(a){var b=this.chart;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length=== -1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){this.drop(a)},setDOMEvents:function(){var a=this,b=a.chart.container,c;this._events=c=[[b,"onmousedown","onContainerMouseDown"],[b,"onmousemove","onContainerMouseMove"],[b,"onclick","onContainerClick"],[b,"mouseleave","onContainerMouseLeave"],[y,"mouseup","onDocumentMouseUp"]];ib&&c.push([b,"ontouchstart","onContainerTouchStart"],[b,"ontouchmove","onContainerTouchMove"],[y,"touchend","onDocumentTouchEnd"]);p(c,function(b){a["_"+ -b[2]]=function(c){a[b[2]](c)};b[1].indexOf("on")===0?b[0][b[1]]=a["_"+b[2]]:F(b[0],b[1],a["_"+b[2]])})},destroy:function(){var a=this;p(a._events,function(b){b[1].indexOf("on")===0?b[0][b[1]]=null:X(b[0],b[1],a["_"+b[2]])});delete a._events;clearInterval(a.tooltipTimeout)}};J=Highcharts.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode; -if(e!==u&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),ib))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer, -h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,q=function(){if(f.hoverSeries!==a)a.onMouseOver()};if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push("M",e.plotX-i,e.plotY,"L",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({"stroke-linejoin":"round",visibility:a.visible?"visible":"hidden",stroke:Kb,fill:c?Kb:Q,"stroke-width":b.lineWidth+ -(c?0:2*i),zIndex:2}).add(a.group),p([a.tracker,a.markerGroup],function(a){a.addClass("highcharts-tracker").on("mouseover",q).on("mouseout",function(a){g.onTrackerMouseOut(a)}).css(l);if(ib)a.on("touchstart",q)}))}};if(C.PointerEvent||C.MSPointerEvent){var na={};$a.prototype.getWebkitTouches=function(){var a,b=[];b.item=function(a){return this[a]};for(a in na)na.hasOwnProperty(a)&&b.push({pageX:na[a].pageX,pageY:na[a].pageY,target:na[a].target});return b};Va($a.prototype,"init",function(a,b,c){b.container.style["-ms-touch-action"]= -b.container.style["touch-action"]="none";a.call(this,b,c)});Va($a.prototype,"setDOMEvents",function(a){var b=this;a.apply(this,Array.prototype.slice.call(arguments,1));p([[this.chart.container,"PointerDown","touchstart","onContainerTouchStart",function(a){na[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}}],[this.chart.container,"PointerMove","touchmove","onContainerTouchMove",function(a){na[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!na[a.pointerId].target)na[a.pointerId].target= -a.currentTarget}],[document,"PointerUp","touchend","onDocumentTouchEnd",function(a){delete na[a.pointerId]}]],function(a){F(a[0],window.PointerEvent?a[1].toLowerCase():"MS"+a[1],function(d){d=d.originalEvent;if(d.pointerType==="touch"||d.pointerType===d.MSPOINTER_TYPE_TOUCH)a[4](d),b[a[3]]({type:a[2],target:d.currentTarget,preventDefault:la,touches:b.getWebkitTouches()})})})})}var zb=Highcharts.Legend=function(a,b){this.init(a,b)};zb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=n(b.padding, -8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=x(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=n(b.symbolWidth,16),c.pages=[],c.render(),F(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c= -b?c.itemStyle.color:g,h=b?a.legendColor||a.color:g,g=a.options&&a.options.marker,i={stroke:h,fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in g=a.convertAttribs(g),g)d=g[j],d!==u&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p(["legendItem", -"legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Na(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,D(f,{left:b.translateX+e.legendItemWidth+f.x-20+"px",top:g+"px",display:g>c-6&&g<c+d-6?"":Q}))})},renderTitle:function(){var a= -this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,"legend-title").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var B;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout==="horizontal",g=b.symbolWidth,h=e.symbolPadding,i=b.itemStyle,j=b.itemHiddenStyle,k=b.padding, -l=f?n(e.itemDistance,8):0,m=!e.rtl,q=e.width,o=e.itemMarginBottom||0,p=b.itemMarginTop,t=b.initialItemX,r=a.legendItem,u=a.series&&a.series.drawLegendSymbol?a.series:a,v=u.options,v=v&&v.showCheckbox,y=e.useHTML;if(!r&&(a.legendGroup=d.g("legend-item").attr({zIndex:1}).add(b.scrollGroup),u.drawLegendSymbol(b,a),a.legendItem=r=d.text(e.labelFormat?Fa(e.labelFormat,a):e.labelFormatter.call(a),m?g+h:-h,b.baseline,y).css(x(a.visible?i:j)).attr({align:m?"left":"right",zIndex:2}).add(a.legendGroup),(y? -r:a.legendGroup).on("mouseover",function(){a.setState("hover");r.css(b.options.itemHoverStyle)}).on("mouseout",function(){r.css(a.visible?i:j);a.setState()}).on("click",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):A(a,"legendItemClick",b,c)}),b.colorizeItem(a,a.visible),v))a.checkbox=T("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container),F(a.checkbox,"click",function(b){A(a, -"checkboxClick",{checked:b.target.checked},function(){a.select()})});d=r.getBBox();B=a.legendItemWidth=e.itemWidth||a.legendItemWidth||g+h+d.width+l+(v?20:0),e=B;b.itemHeight=g=w(a.legendItemHeight||d.height);if(f&&b.itemX-t+e>(q||c.chartWidth-2*k-t))b.itemX=t,b.itemY+=p+b.lastLineHeight+o,b.lastLineHeight=0;b.maxItemWidth=s(b.maxItemWidth,e);b.lastItemY=p+b.itemY+o;b.lastLineHeight=s(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=p+g+o,b.lastLineHeight=g);b.offsetWidth= -q||s((f?b.itemX-t-l:e)+k,b.offsetWidth)},getAllItems:function(){var a=[];p(this.chart.series,function(b){var c=b.options;if(n(c.showInLegend,!t(c.linkedTo)?u:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(), -a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp(null,null,null,g,h)), -i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,"stroke-width":l||0,fill:m||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(r({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight, -h,i=this.clipRect,j=e.navigation,k=n(j.animation,!0),l=j.arrowSize||12,m=this.nav,q=this.pages,o,s=this.allItems;e.layout==="horizontal"&&(f/=2);g&&(f=I(f,g));q.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=n(this.currentPage,1);this.fullHeight=a;p(s,function(a,b){var c=a._legendItemPos[1],d=w(a.legendItem.bBox.height),e=q.length;if(!e||c-q[e-1]>h)q.push(o||c);b===s.length-1&&c+d-q[e-1]>h&&q.push(c);c!==o&&(o=c)});if(!i)i=b.clipRect=d.clipRect(0, -this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!m)this.nav=m=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,k)}).add(m),this.pager=d.text("",15,10).css(j.style).add(m),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,k)}).add(m);b.scroll(0);a=f}else if(m)i.attr({height:c.chartHeight}),m.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages, -d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==u&&Oa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY, -this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};R=Highcharts.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,n(a.options.symbolRadius,2)).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-w(e.fontMetrics(a.options.itemStyle.fontSize).b* -0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};/Trident\/7\.0/.test(ra)&&Va(zb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};c.chart.renderer.forExport?d():setTimeout(d)});fb.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=x(G, -a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Ia.length;Ia.push(f);d.reflow!==!1&&F(f,"load",function(){f.initReflow()});if(e)for(g in e)F(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=da?!1:n(d.animation,!0);f.pointCount=0;f.counters=new Ab; -f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=L[a.type||b.type||b.defaultSeriesType])||ka(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox, -j=c.length,k=j,l=this.renderer,m=l.isHidden(),q=[];Oa(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts(); -this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,q.push(function(){A(a,"afterSetExtremes",r(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset&&d.reset(!0);l.draw();A(this,"redraw");m&&this.cloneRenderTo(!0);p(q,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id=== -a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ja(b.xAxis||{}),b=b.yAxis=ja(b.yAxis||{});p(c,function(a,b){a.index=b;a.isX=!0});p(b,function(a,b){a.index=b});c=c.concat(b);p(c,function(b){new qa(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];p(this.series,function(b){a=a.concat(wb(b.points||[], -function(a){return a.selected}))});return a},getSelectedSeries:function(){return wb(this.series,function(a){return a.selected})},getStacks:function(){var a=this;p(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});p(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+n(b.options.stack,"")})},showResetZoom:function(){var a=this,b=G.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo=== -"chart"?null:"plotBox";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;A(a,"selection",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?p(this.axes,function(a){b=a.zoom()}):p(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?"zoomX":"zoomY"]||c[h?"pinchX":"pinchY"])b= -e.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&S(e))this.resetZoomButton=e.destroy();b&&this.redraw(n(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&p(d,function(a){a.setState()});p(b==="xy"?[1,0]:[1],function(b){var d=a[b?"chartX":"chartY"],h=c[b?"xAxis":"yAxis"][0],i=c[b?"mouseDownX":"mouseDownY"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+ -c[b?"plotWidth":"plotHeight"]-d,!0)-j;h.series.length&&l>I(k.dataMin,k.min)&&i<s(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:"pan"}),e=!0);c[b?"mouseDownX":"mouseDownY"]=d});e&&c.redraw(!1);D(c.container,{cursor:"move"})},setTitle:function(a,b){var f;var c=this,d=c.options,e;e=d.title=x(d.title,a);f=d.subtitle=x(d.subtitle,b),d=f;p([["title",a,e],["subtitle",b,d]],function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(c[b]=d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align, -"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add())});c.layOutTitles()},layOutTitles:function(){var a=0,b=this.title,c=this.subtitle,d=this.options,e=d.title,d=d.subtitle,f=this.spacingBox.width-44;if(b&&(b.css({width:(e.width||f)+"px"}).align(r({y:15},e),!1,"spacingBox"),!e.floating&&!e.verticalAlign))a=b.getBBox().height,a>=18&&a<=25&&(a=15);c&&(c.css({width:(d.width||f)+"px"}).align(r({y:a+e.margin},d),!1,"spacingBox"),!d.floating&&!d.verticalAlign&&(a=Ha(a+c.getBBox().height)));this.titleOffset= -a},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=jb(b,"width");this.containerHeight=jb(b,"height");this.chartWidth=s(0,a.width||this.containerWidth||600);this.chartHeight=s(0,n(a.height,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Na(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone= -b=this.renderTo.cloneNode(0),D(b,{position:"absolute",top:"-9999px",display:"block"}),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+ub++;if(fa(a))this.renderTo=a=y.getElementById(a);a||ka(13,!0);c=z(v(a,"data-highcharts-chart"));!isNaN(c)&&Ia[c]&&Ia[c].destroy();v(a,"data-highcharts-chart",this.index);a.innerHTML="";a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight; -this.container=a=T(Ga,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},r({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ua(a,c,d,!0):new Ya(a,c,d);da&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend, -f=n(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!t(d[0]))this.plotTop=s(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!t(d[1]))this.marginRight=s(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!t(d[3]))this.plotLeft=s(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!t(d[0]))this.plotTop=s(this.plotTop,c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!t(d[2]))this.marginBottom= -s(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});t(d[3])||(this.plotLeft+=b[3]);t(d[0])||(this.plotTop+=b[0]);t(d[2])||(this.marginBottom+=b[2]);t(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,"width"),f=c.height||jb(d,"height"),c= -a?a.target:C,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===C||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};F(C,"resize",b);F(a,"destroy",function(){X(C,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&A(d,"endResize",null,function(){d.isResizing-= -1})};Oa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(t(a))d.chartWidth=e=s(0,w(a)),d.hasUserSize=!!e;if(t(b))d.chartHeight=f=s(0,w(b));(oa?kb:D)(d.container,{width:e+"px",height:f+"px"},oa);d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins();d.redraw(c);d.oldChartHeight=null;A(d,"resize");oa===!1?g():setTimeout(g,oa&&oa.duration|| -500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=w(this.plotLeft);this.plotTop=j=w(this.plotTop);this.plotWidth=k=s(0,w(d-i-this.marginRight));this.plotHeight=l=s(0,w(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox= -c.plotBox={x:i,y:j,width:k,height:l};d=2*N(this.plotBorderWidth/2);b=Ha(s(d,h[3])/2);c=Ha(s(d,h[0])/2);this.clipBox={x:b,y:c,width:N(this.plotSizeX-s(d,h[1])/2-b),height:N(this.plotSizeY-s(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=n(b[0],a[0]);this.marginRight=n(b[1],a[1]);this.marginBottom=n(b[2],a[2]);this.plotLeft=n(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a= -this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,q,o=this.plotLeft,n=this.plotTop,p=this.plotWidth,s=this.plotHeight,r=this.plotBox,t=this.clipRect,w=this.clipBox;q=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null,null,null,c-q,d-q));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e["stroke-width"]= -i;this.chartBackground=b.rect(q/2,q/2,c-q,d-q,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(o,n,p,s,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(r):this.plotBGImage=b.image(l,o,n,p,s).add();t?t.animate({width:w.width,height:w.height}):this.clipRect=b.clipRect(w);if(m)g?g.animate(g.crisp(null,o,n,p,s)):this.plotBorder=b.rect(o,n,p,s,0,-m).attr({stroke:a.plotBorderColor,"stroke-width":m,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a= -this,b=a.options.chart,c,d=a.options.series,e,f;p(["inverted","angular","polar"],function(g){c=L[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=L[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(fa(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},render:function(){var a=this,b=a.axes, -c=a.renderer,d=a.options,e=d.labels,f=d.credits,g;a.setTitle();a.legend=new zb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();p(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&p(e.items,function(b){var d= -r(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;A(a,"destroy");Ia[a.index]=u;a.renderTo.removeAttribute("data-highcharts-chart"); -X(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();p("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",X(d),f&&Na(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!V&&C==C.top&&y.readyState!=="complete"||da&&!C.canvg?(da?Mb.push(function(){a.firstRender()}, -a.options.global.canvasToolsURL):y.attachEvent("onreadystatechange",function(){y.detachEvent("onreadystatechange",a.firstRender);y.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender())a.getContainer(),A(a,"init"),a.resetMargins(),a.setChartSize(),a.propFromSeries(),a.getAxes(),p(b.series||[],function(b){a.initSeries(b)}),a.linkSeries(),A(a,"beforeRender"),a.pointer=new $a(a,b),a.render(),a.renderer.draw(),c&&c.apply(a, -[a]),p(a.callbacks,function(b){b.apply(a,[a])}),a.cloneRenderTo(!0),A(a,"load")},splashArray:function(a,b){var c=b[a],c=S(c)?c:[c,c,c,c];return[n(b[a+"Top"],c[0]),n(b[a+"Right"],c[1]),n(b[a+"Bottom"],c[2]),n(b[a+"Left"],c[3])]}};fb.prototype.callbacks=[];var xb=Highcharts.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[n(b[0],"50%"),n(b[1],"50%"),a.size||"100%",a.innerSize||0],g=I(e,f),h;return Ra(a, -function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100:a)+(d?c:0)})}},Ja=function(){};Ja.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ja.prototype.optionsToObject.call(this,a);r(this, -a);this.options=this.options?r(this.options,a):a;if(d)this.y=this[d];if(this.x===u&&c)this.x=b===u?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b[d[0]]=a;else if(Ka(a)){if(a.length>e){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a==="object"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers= -!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ha(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)X(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a="graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup".split(","),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category, -y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series,e=d.chart,a=n(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[sa(c,d.data)]=c.options;c.setState(a&&"select");b||p(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[sa(a,d.data)]=a.options,a.setState(""), -a.firePointEvent("unselect")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;if(e&&e!==this)e.onMouseOut();this.firePointEvent("mouseOver");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState("hover");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;if(!b||sa(this,b)===-1)this.firePointEvent("mouseOut"),this.setState(),a.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=n(c.valueDecimals, -""),e=c.valuePrefix||"",f=c.valueSuffix||"";p(b.pointArrayMap||["y"],function(b){b="{point."+b;if(e||f)a=a.replace(b+"}",e+b+"}"+f);a=a.replace(b+"}",b+":,."+d+"f}")});return Fa(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});A(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a= -x(this.series.options.point,this.options).events,b;this.events=a;for(b in a)F(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,b){var c=this.plotX,d=this.plotY,e=this.series,f=e.options.states,g=Y[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],j=i&&i.enabled===!1,k=e.stateMarkerGraphic,l=this.marker||{},m=e.chart,q=this.pointAttr,a=a||"",b=b&&k;if(!(a===this.state&&!b||this.selected&&a!=="select"||f[a]&&f[a].enabled===!1||a&&(j||h&&!i.enabled)||a&&l.states&&l.states[a]&& -l.states[a].enabled===!1)){if(this.graphic)f=g&&this.graphic.symbolName&&q[a].r,this.graphic.attr(x(q[a],f?{x:c-f,y:d-f,width:2*f,height:2*f}:{}));else{if(a&&i)if(f=i.radius,l=l.symbol||e.symbol,k&&k.currentSymbol!==l&&(k=k.destroy()),k)k[b?"animate":"attr"]({x:c-f,y:d-f});else e.stateMarkerGraphic=k=m.renderer.symbol(l,c-f,d-f,2*f,2*f).attr(q[a]).add(e.markerGroup),k.currentSymbol=l;if(k)k[a&&m.isInsidePlot(c,d,m.inverted)?"show":"hide"]()}this.state=a}}};var O=function(){};O.prototype={isCartesian:!0, -type:"line",pointClass:Ja,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"},axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return n(a.options.index,a._i)-n(b.options.index,b._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();r(c,{name:b.name,state:"",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if(da)b.animation= -!1;e=b.events;for(d in e)F(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();p(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;ob(f,g);this.yAxis&&ob(this.yAxis.series,g);p(f,function(a,b){a.index=b;a.name=a.name||"Series "+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;p(a.axisTypes||[],function(e){p(c[e],function(c){d= -c.options;if(b[e]===d.index||b[e]!==u&&b[e]===d.id||b[e]===u&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&ka(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;p(c.parallelArrays,typeof b==="number"?function(d){var f=d==="y"&&c.toYData?c.toYData(a):a[d];c[d+"Data"][b]=f}:function(a){Array.prototype[b].apply(c[a+"Data"],Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=n(b,a.pointStart,0);this.pointInterval= -n(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else p(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions= -a;c=x(e,c.series,a);this.tooltipOptions=x(G.tooltip,G.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Y[this.type].color;if(!e&&!a.colorByPoint)t(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a= -this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)t(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:R.drawLineMarker,setData:function(a,b){var c=this,d=c.points,e=c.options,f=c.chart,g=null,h=c.xAxis,i=h&&!!h.categories,j;c.xIncrement=null;c.pointRange=i?1:e.pointRange;c.colorCounter=0;var a=a||[],k=a.length; -j=e.turboThreshold;var l=this.xData,m=this.yData,q=c.pointArrayMap,q=q&&q.length;p(this.parallelArrays,function(a){c[a+"Data"].length=0});if(j&&k>j){for(j=0;g===null&&j<k;)g=a[j],j++;if(wa(g)){i=n(e.pointStart,0);e=n(e.pointInterval,1);for(j=0;j<k;j++)l[j]=i,m[j]=a[j],i+=e;c.xIncrement=i}else if(Ka(g))if(q)for(j=0;j<k;j++)e=a[j],l[j]=e[0],m[j]=e.slice(1,q+1);else for(j=0;j<k;j++)e=a[j],l[j]=e[0],m[j]=e[1];else ka(12)}else for(j=0;j<k;j++)if(a[j]!==u&&(e={series:c},c.pointClass.prototype.applyOptions.apply(e, -[a[j]]),c.updateParallelArrays(e,j),i&&e.name))h.names[e.x]=e.name;fa(m[0])&&ka(14,!0);c.data=[];c.options.data=a;for(j=d&&d.length||0;j--;)d[j]&&d[j].destroy&&d[j].destroy();if(h)h.minRange=h.userMinRange;c.isDirty=c.isDirtyData=f.isDirtyBox=!0;n(b,!0)&&f.redraw(!1)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=this.isCartesian;if(k&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(k&&this.sorted&&(!j|| -d>j||this.forceCrop))if(a=h.min,h=h.max,b[d-1]<a||b[0]>h)b=[],c=[];else if(b[0]<a||b[d-1]>h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start,f=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===u||d<g)?g=d:d<0&&this.requireSorting&&ka(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=n(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>= -c){f=s(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(ja(e[m]))):(b[i]?k=b[i]:a[i]!==u&&(b[i]=k=(new f).init(this,a[i],d[m])),l[m]=k);if(b&& -(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=u;this.data=b;this.points=l},setStackedPoints:function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i="-"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,m=k.oldStacks,q,o,n,p,r;for(n=0;n<d;n++){p=a[n];r=b[n];o=(q=j&&r<f)? -i:h;l[o]||(l[o]={});if(!l[o][p])m[o]&&m[o][p]?(l[o][p]=m[o][p],l[o][p].total=null):l[o][p]=new Gb(k,k.options.stackLabels,q,p,g,e);o=l[o][p];o.points[this.index]=[o.cum||0];e==="percent"?(q=q?h:i,j&&l[q]&&l[q][p]?(q=l[q][p],o.total=q.total=s(q.total,o.total)+M(r)||0):o.total=aa(o.total+(M(r)||0))):o.total=aa(o.total+(r||0));o.cum=(o.cum||0)+(r||0);o.points[this.index].push(o.cum);c[n]=o.cum}if(e==="percent")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}},setPercentStacks:function(){var a= -this,b=a.stackKey,c=a.yAxis.stacks;p([b,"-"+b],function(b){var d;for(var e=a.xData.length,f,g;e--;)if(f=a.xData[e],d=(g=c[b]&&c[b][f])&&g.points[a.index],f=d)g=g.total?100/g.total:0,f[0]=aa(f[0]*g),f[1]=aa(f[1]*g),a.stackedYData[e]=f[1]})},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,j,k,l,a=a||this.stackedYData||this.processedYData;d=a.length;for(l=0;l<d;l++)if(j=c[l],k=a[l],i=k!==null&&k!==u&&(!b.isLog||k.length||k>0), -j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=n(void 0,La(e));this.dataMax=n(void 0,za(e))},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||wa(i),k=a.threshold,a=0;a<g;a++){var l=f[a],m=l.x,q=l.y,o= -l.low,p=b&&e.stacks[(this.negStacks&&q<k?"-":"")+this.stackKey];if(e.isLog&&q<=0)l.y=q=null;l.plotX=c.translate(m,0,0,0,1,i,this.type==="flags");if(b&&this.visible&&p&&p[m])p=p[m],q=p.points[this.index],o=q[0],q=q[1],o===0&&(o=n(k,e.min)),e.isLog&&o<=0&&(o=null),l.total=l.stackTotal=p.total,l.percentage=b==="percent"&&l.y/p.total*100,l.stackY=q,p.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=t(o)?e.translate(o,0,1,0,1):null;h&&(q=this.modifyValue(q,l));l.plotY=typeof q==="number"&&q!==Infinity? -e.translate(q,0,1,0,1):u;l.clientX=j?c.translate(m,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==u?d[l.x]:l.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,h,i,j=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;p(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i= -0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===u?0:d+1;for(d=b[i+1]?I(s(0,N((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.dateTimeLabelFormats,d=b.xDateFormat,e=this.xAxis,f=e&&e.options.type==="datetime",b=b.headerFormat,e=e&&e.closestPointRange,g;if(f&&!d){if(e)for(g in E){if(E[g]>=e){d=c[g];break}}else d=c.day;d=d||c.year}f&&d&&wa(a.key)&&(b=b.replace("{point.key}", -"{point.key:"+d+"}"));return Fa(b,{point:a,series:this})},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&A(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&A(this,"mouseOut");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b= -this,c=b.chart,d=c.renderer,e;e=b.options.animation;var f=c.clipBox,g=c.inverted,h;if(e&&!S(e))e=Y[b.type].animation;h="_sharedClip"+e.duration+e.easing;if(a)a=c[h],e=c[h+"m"],a||(c[h]=a=d.clipRect(r(f,{width:0})),c[h+"m"]=e=d.clipRect(-99,g?-c.plotLeft:-c.plotTop,99,g?c.chartWidth:c.chartHeight)),b.group.clip(a),b.markerGroup.clip(e),b.sharedClipKey=h;else{if(a=c[h])a.animate({width:c.plotSizeX},e),c[h+"m"].animate({width:c.plotSizeX+99},e);b.animate=null;b.animationTimeout=setTimeout(function(){b.afterAnimate()}, -e.duration)}},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,c=this.group;c&&this.options.clip!==!1&&(c.clip(a.clipRect),this.markerGroup.clip());setTimeout(function(){b&&a[b]&&(a[b]=a[b].destroy(),a[b+"m"]=a[b+"m"].destroy())},100)},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m,q=this.markerGroup;if(l.enabled||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=N(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=l.enabled&&i.enabled=== -u||i.enabled,m=c.isInsidePlot(w(d),e,c.inverted),a&&e!==u&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""],h=a.r,i=n(i.symbol,this.symbol),j=i.indexOf("url")===0,k)k.attr({visibility:m?V?"inherit":"visible":"hidden"}).animate(r({x:d-h,y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else{if(m&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(q)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{}, -c=c||{},d=d||{};for(f in e)g=e[f],h[f]=n(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Y[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h={stroke:g,fill:g},i=a.points||[],j=[],k,l=a.pointAttrToOptions,m=b.negativeColor,n=c.lineColor,o=c.fillColor,s;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color||ta(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,h);p(["hover","select"],function(b){j[b]=a.convertAttribs(d[b], -j[""])});a.pointAttr=j;for(g=i.length;g--;){h=i[g];if((c=h.options&&h.options.marker||h.options)&&c.enabled===!1)c.radius=0;if(h.negative&&m)h.color=h.fillColor=m;k=b.colorByPoint||h.color;if(h.options)for(s in l)t(c[l[s]])&&(k=!0);if(k){c=c||{};k=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker)f.color=ta(f.color||h.color).brighten(f.brightness||e.brightness).get();f={color:h.color};if(!o)f.fillColor=h.color;if(!n)f.lineColor=h.color;k[""]=a.convertAttribs(r(f,c),j[""]);k.hover=a.convertAttribs(d.hover, -j.hover,k[""]);k.select=a.convertAttribs(d.select,j.select,k[""])}else k=j;h.pointAttr=k}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(ra),d,e,f=a.data||[],g,h,i;A(a,"destroy");X(a);p(a.axisTypes||[],function(b){if(i=a[b])ha(i.series,a),i.isDirty=i.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);p("area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip".split(","), -function(b){a[b]&&(d=c&&b==="group"?"hide":"destroy",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ha(b.series,a);for(h in a)delete a[h]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;p(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?"L":"M"),d&&f&&(i=a[f-1],d==="right"?c.push(i.plotX,h):d==="center"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a= -this,b=[],c,d=[];p(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!=="square",g=this.getGraphPath(),h=b.negativeColor;h&&c.push(["graphNeg",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)Za(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],"stroke-width":d,zIndex:1},e?l.dashstyle=e:f&&(l["stroke-linecap"]= -l["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=s(e,j),l=this.yAxis;if(d&&(f||g)){d=w(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth- -d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)F(c,"resize",a),F(b, -"destroy",function(){X(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis?this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG, -e=this.visible?"visible":"hidden",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup("group","series",e,f,h);this.markerGroup=this.plotGroup("markerGroup","markers",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels&&this.drawDataLabels();this.visible&&this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!==!1&&!this.sharedClipKey&& -!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:n(d&&d.left,a.plotLeft),translateY:n(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints(!0);this.render();b&&A(this,"updatedData")},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg, -e=b.states,b=b.lineWidth,a=a||"";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&(a={"stroke-width":b},c.attr(a),d&&d.attr(a)))},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===u?!h:a)?"show":"hide";p(["group","dataLabelsGroup","markerGroup","tracker"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c, -a);c.isDirty=!0;c.options.stacking&&p(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});p(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();A(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===u?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;A(this,a?"select":"unselect")},drawTracker:J.drawTrackerGraph};r(fb.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b= -n(b,!0),A(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options;new qa(this,x(a,{index:this[e].length,isX:b}));f[e]=ja(f[e]||{});f[e].push(a);n(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=T(Ga,{className:"highcharts-loading"},r(d.style,{zIndex:10,display:Q}),this.container),this.loadingSpan=T("span", -null,d.labelStyle,c);this.loadingSpan.innerHTML=a||b.lang.loading;if(!this.loadingShown)D(c,{opacity:0,display:"",left:this.plotLeft+"px",top:this.plotTop+"px",width:this.plotWidth+"px",height:this.plotHeight+"px"}),kb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&kb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){D(b,{display:Q})}});this.loadingShown=!1}});r(Ja.prototype,{update:function(a, -b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=n(b,!0);d.firePointEvent("update",{options:a},function(){d.applyOptions(a);if(S(a)){e.getAttribs();if(f)a&&a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||""]);if(a&&a.dataLabels&&d.dataLabel)d.dataLabel=d.dataLabel.destroy()}g=sa(d,h);e.updateParallelArrays(d,g);j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType==="point"&&i.legend.destroyItem(d); -b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;Oa(b,f);a=n(a,!0);c.firePointEvent("remove",null,function(){g=sa(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.updateParallelArrays(c,"splice",g,1);c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&f.redraw()})}});r(O.prototype,{addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xAxis&&this.xAxis.names,k=g&&g.shift||0,l=e.data, -m,q=this.xData;Oa(d,i);c&&p([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=k+1});if(h)h.isArea=!0;b=n(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=q.length;if(this.requireSorting&&g<q[h-1])for(m=!0;h&&q[h-1]>g;)h--;this.updateParallelArrays(d,"splice",h,0,0);this.updateParallelArrays(d,h);if(j)j[g]=d.name;l.splice(h,0,a);m&&(this.data.splice(h,0,null),this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1): -(f.shift(),this.updateParallelArrays(d,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=n(a,!0);if(!c.isRemoving)c.isRemoving=!0,A(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},update:function(a,b){var c=this.chart,d=this.type,e=L[d].prototype,f,a=x(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data}, -a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=u);r(this,L[a.type||d].prototype);this.init(c,a);n(b,!0)&&c.redraw(!1)}});r(qa.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=x(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=u;this.init(c,r(a,{events:u}));c.isDirtyBox=!0;n(b,!0)&&c.redraw()},remove:function(a){var b=this.chart,c=this.coll;p(this.series,function(a){a.remove(!1)});ha(b.axes,this);ha(b[c],this); -b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;n(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});var ca=ia(O);L.line=ca;Y.area=x(W,{threshold:0});var Ua=ia(O,{type:"area",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,m,n;if(this.options.stacking&&!this.cropped){for(m= -0;m<j.length;m++)g[j[m].x]=j[m];for(n in f)f[n].total!==null&&c.push(+n);c.sort(function(a,b){return a-b});p(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:la}))});b.length&&a.push(b)}else O.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=O.prototype.getSegmentPath.call(this,a), -c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push("L",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=n(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push("L",b[b.length-1].plotX,c,"L",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];O.prototype.drawGraph.apply(this);var a=this, -b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[["area",this.color,c.fillColor]];(d||e)&&f.push(["areaNeg",d,e]);p(f,function(d){var e=d[0],f=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:n(d[2],ta(d[1]).setOpacity(n(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:R.drawRectangle});L.area=Ua;Y.spline=x(W);ca=ia(O,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j= -g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=s(a,e),k=2*e-i):i<a&&i<e&&(i=I(a,e),k=2*e-i);k>g&&k>e?(k=s(g,e),i=2*e-k):k<g&&k<e&&(k=I(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});L.spline=ca;Y.areaspline=x(Y.area);Ua=Ua.prototype;ca=ia(ca,{type:"areaspline",closedStacks:!0,getSegmentPath:Ua.getSegmentPath, -closeSegment:Ua.closeSegment,drawGraph:Ua.drawGraph,drawLegendSymbol:R.drawRectangle});L.areaspline=ca;Y.column=x(W,{borderColor:"#FFFFFF",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,threshold:0});ca=ia(O,{type:"column",pointAttrToOptions:{stroke:"borderColor", -"stroke-width":"borderWidth",fill:"color",r:"borderRadius"},cropShoulder:0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){O.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h,i=0;b.grouping===!1?i=1:p(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos=== -e.pos)c.stacking?(f=b.stackKey,g[f]===u&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=I(M(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=t(l)?(k-l)/2:k*b.pointPadding,l=n(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this.chart,b=this.options,c=b.borderWidth,d=this.yAxis,e=this.translatedThreshold=d.getThreshold(b.threshold), -f=n(b.minPointLength,5),b=this.getColumnMetrics(),g=b.width,h=this.barW=Ha(s(g,1+2*c)),i=this.pointXOffset=b.offset,j=-(c%2?0.5:0),k=c%2?0.5:1;a.renderer.isVML&&a.inverted&&(k+=1);O.prototype.translate.apply(this);p(this.points,function(a){var b=n(a.yBottom,e),c=I(s(-999-b,a.plotY),d.len+999+b),o=a.plotX+i,p=h,r=I(c,b),t,c=s(c,b)-r;M(c)<f&&f&&(c=f,r=w(M(r-e)>f?b-f:e-(d.translate(a.y,0,1,0,1)<=e?f:0)));a.barX=o;a.pointWidth=g;b=M(o)<0.5;p=w(o+p)+j;o=w(o)+j;p-=o;t=M(r)<0.5;c=w(r+c)+k;r=w(r)+k;c-=r; -b&&(o+=1,p-=1);t&&(r-=1,c+=1);a.shapeType="rect";a.shapeArgs={x:o,y:r,width:p,height:c}})},getSymbol:la,drawLegendSymbol:R.drawRectangle,drawGraph:la,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=b.options.animationLimit||250,f;p(a.points,function(g){var h=g.plotY,i=g.graphic;if(h!==u&&!isNaN(h)&&g.y!==null)f=g.shapeArgs,i?(Za(i),i[b.pointCount<e?"animate":"attr"](x(f))):g.graphic=d[g.shapeType](f).attr(g.pointAttr[g.selected?"select":""]).add(a.group).shadow(c.shadow,null, -c.stacking&&!c.borderRadius);else if(i)g.graphic=i.destroy()})},drawTracker:J.drawTrackerPoint,animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(V)a?(e.scaleY=0.001,a=I(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?"translateX":"translateY"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type=== -a.type)b.isDirty=!0});O.prototype.remove.apply(a,arguments)}});L.column=ca;Y.bar=x(Y.column);ca=ia(ca,{type:"bar",inverted:!0});L.bar=ca;Y.scatter=x(W,{lineWidth:0,tooltip:{headerFormat:'<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>",followPointer:!0},stickyTracking:!1});ca=ia(O,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],takeOrdinalPosition:!1,drawTracker:J.drawTrackerPoint, -drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)},setTooltipPoints:la});L.scatter=ca;Y.pie=x(W,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});W={type:"pie",isCartesian:!1,pointClass:ia(Ja, -{init:function(){Ja.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;r(a,{visible:a.visible!==!1,name:n(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};F(a,"select",b);F(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart,e;b.visible=b.options.visible=a=a===u?!b.visible:a;c.options.data[sa(b,c.data)]=b.options;e=a?"show":"hide";p(["graphic","dataLabel","connector","shadowGroup"],function(a){if(b[a])b[a][e]()});b.legendItem&&d.legend.colorizeItem(b, -a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Oa(c,d.chart);n(b,!0);this.sliced=this.options.sliced=a=t(a)?a:!this.sliced;d.options.data[sa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth", -fill:"color"},getColor:la,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b){O.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();n(b,!0)&&this.chart.redraw()},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this); -c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=Aa/180*(i-90),i=(this.endAngleRad=Aa/180*((c.endAngle||i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h= -P.asin((b-a[1])/(a[2]/2+l));return a[0]+(c?-1:1)*U(h)*(a[2]/2+l)};for(m=0;m<n;m++){o=k[m];f=j+b*i;if(!c||o.visible)b+=o.percentage/100;g=j+b*i;o.shapeType="arc";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:w(f*1E3)/1E3,end:w(g*1E3)/1E3};h=(g+f)/2;h>0.75*i&&(h-=2*Aa);o.slicedTranslation={translateX:w(U(h)*d),translateY:w(ba(h)*d)};f=U(h)*a[2]/2;g=ba(h)*a[2]/2;o.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-Aa/2||h>Aa/2?1:0;o.angle=h;e=I(e,l/2);o.labelPos=[a[0]+f+U(h)*l,a[1]+g+ba(h)*l,a[0]+ -f+U(h)*e,a[1]+g+ba(h)*e,a[0]+f,a[1]+g,l<0?"center":o.half?"right":"left",h]}},setTooltipPoints:la,drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(r(g,c)):h.graphic=d=b.arc(g).setRadialReference(a.center).attr(h.pointAttr[h.selected? -"select":""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawTracker:J.drawTrackerPoint,drawLegendSymbol:R.drawRectangle,getCenter:xb.getCenter,getSymbol:la};W=ia(O,W);L.pie=W;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,b=a.points,e,f,g,h;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d), -h=a.plotGroup("dataLabelsGroup","data-labels",a.visible?"visible":"hidden",d.zIndex||6),f=d,p(b,function(b){var j,k=b.dataLabel,l,m,p=b.connector,o=!0;e=b.options&&b.options.dataLabels;j=n(e&&e.enabled,f.enabled);if(k&&!j)b.dataLabel=k.destroy();else if(j){d=x(f,e);j=d.rotation;l=b.getLabelConfig();g=d.format?Fa(d.format,l):d.formatter.call(l,d);d.style.color=n(d.color,d.style.color,a.color,"black");if(k)if(t(g))k.attr({text:g}),o=!1;else{if(b.dataLabel=k=k.destroy(),p)b.connector=p.destroy()}else if(t(g)){k= -{fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:j,padding:d.padding,zIndex:1};for(m in k)k[m]===u&&delete k[m];k=b.dataLabel=a.chart.renderer[j?"text":"label"](g,0,-999,null,null,null,d.useHTML).attr(k).css(r(d.style,c&&{cursor:c})).add(h).shadow(d.shadow)}k&&a.alignDataLabel(b,k,d,null,o)}})};O.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=n(a.plotX,-999),i=n(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL|| -f.isInsidePlot(a.plotX,a.plotY,g)))d=r({x:g?f.plotWidth-i:h,y:w(g?f.plotHeight-h:i),width:0,height:0},d),r(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c,null,d),g=b.alignAttr,n(c.overflow,"justify")==="justify"?this.justifyDataLabel(b,c,g,j,d,e):n(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a, -b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight-j,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(L.pie)L.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=n(e.connectorPadding, -10),g=n(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=n(e.softConnector,!0),l=e.distance,m=a.center,q=m[2]/2,o=m[1],r=l>0,t,u,v,x,y=[[],[]],z,A,E,K,B,D=[0,0,0,0],I=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&y[a.half].push(a)});for(K=0;!x&&b[K];)x=b[K]&&b[K].dataLabel&&(b[K].dataLabel.getBBox().height||21),K++;for(K=2;K--;){var b=[],J=[],F=y[K],G=F.length,C;a.sortByAngle(F,K-0.5);if(l> -0){for(B=o-q-l;B<=o+q+l;B+=x)b.push(B);u=b.length;if(G>u){c=[].concat(F);c.sort(I);for(B=G;B--;)c[B].rank=B;for(B=G;B--;)F[B].rank>=u&&F.splice(B,1);G=F.length}for(B=0;B<G;B++){c=F[B];v=c.labelPos;c=9999;var L,N;for(N=0;N<u;N++)L=M(b[N]-v[1]),L<c&&(c=L,C=N);if(C<B&&b[B]!==null)C=B;else for(u<G-B+C&&b[B]!==null&&(C=u-G+B);b[C]===null;)C++;J.push({i:C,y:b[C]});b[C]=null}J.sort(I)}for(B=0;B<G;B++){c=F[B];v=c.labelPos;t=c.dataLabel;E=c.visible===!1?"hidden":"visible";c=v[1];if(l>0){if(u=J.pop(),C=u.i, -A=u.y,c>A&&b[C+1]!==null||c<A&&b[C-1]!==null)A=c}else A=c;z=e.justify?m[0]+(K?-1:1)*(q+l):a.getX(C===0||C===b.length-1?c:A,K);t._attr={visibility:E,align:v[6]};t._pos={x:z+e.x+({left:f,right:-f}[v[6]]||0),y:A+e.y-10};t.connX=z;t.connY=A;if(this.options.size===null)u=t.width,z-u<f?D[3]=s(w(u-z+f),D[3]):z+u>h-f&&(D[1]=s(w(z+u-h+f),D[1])),A-x/2<0?D[0]=s(w(-A+x/2),D[0]):A+x/2>d&&(D[2]=s(w(A+x/2-d),D[2]))}}if(za(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),r&&g&&p(this.points,function(b){i= -b.connector;v=b.labelPos;if((t=b.dataLabel)&&t._pos)E=t._attr.visibility,z=t.connX,A=t.connY,j=k?["M",z+(v[6]==="left"?5:-5),A,"C",z,A,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],"L",v[4],v[5]]:["M",z+(v[6]==="left"?5:-5),A,"L",v[2],v[3],"L",v[4],v[5]],i?(i.animate({d:j}),i.attr("visibility",E)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},L.pie.prototype.placeDataLabels=function(){p(this.points, -function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},L.pie.prototype.alignDataLabel=la,L.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=s(b[2]-s(a[1],a[3]),c):(e=s(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=s(I(e,b[2]-s(a[0],a[2])),c):(e=s(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),p(this.points,function(a){if(a.dataLabel)a.dataLabel._pos= -null}),this.drawDataLabels&&this.drawDataLabels()):f=!0;return f};if(L.column)L.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>n(this.translatedThreshold,f.plotSizeY),j=n(c.inside,!!this.options.stacking);if(h&&(d=x(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=n(c.align,!g||j?"center":i?"right":"left"); -c.verticalAlign=n(c.verticalAlign,g||j?"middle":i?"top":"bottom");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};r(Highcharts,{Axis:qa,Chart:fb,Color:ta,Point:Ja,Tick:Qa,Tooltip:tb,Renderer:Ya,Series:O,SVGElement:pa,SVGRenderer:ua,arrayMin:La,arrayMax:za,charts:Ia,dateFormat:ab,format:Fa,pathAnim:vb,getOptions:function(){return G},hasBidiBug:Nb,isTouchDevice:Ib,numberFormat:Da,seriesTypes:L,setOptions:function(a){G=x(!0,G,a);Bb();return G},addEvent:F,removeEvent:X,createElement:T,discardElement:Na, -css:D,each:p,extend:r,map:Ra,merge:x,pick:n,splat:ja,extendClass:ia,pInt:z,wrap:Va,svg:V,canvas:da,vml:!V&&!da,product:"Highcharts",version:"3.0.9"})})(); diff --git a/pykeg/web/static/highcharts/js/highcharts.src.js b/pykeg/web/static/highcharts/js/highcharts.src.js deleted file mode 100644 index a347d328f..000000000 --- a/pykeg/web/static/highcharts/js/highcharts.src.js +++ /dev/null @@ -1,17356 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Highcharts, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console, each, grep */ - -(function () { -// encapsulated variables -var UNDEFINED, - doc = document, - win = window, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathCeil = math.ceil, - mathMax = math.max, - mathMin = math.min, - mathAbs = math.abs, - mathCos = math.cos, - mathSin = math.sin, - mathPI = math.PI, - deg2rad = mathPI * 2 / 360, - - - // some variables - userAgent = navigator.userAgent, - isOpera = win.opera, - isIE = /msie/i.test(userAgent) && !isOpera, - docMode8 = doc.documentMode === 8, - isWebKit = /AppleWebKit/.test(userAgent), - isFirefox = /Firefox/.test(userAgent), - isTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent), - SVG_NS = 'http://www.w3.org/2000/svg', - hasSVG = !!doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect, - hasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38 - useCanVG = !hasSVG && !isIE && !!doc.createElement('canvas').getContext, - Renderer, - hasTouch = doc.documentElement.ontouchstart !== UNDEFINED, - symbolSizes = {}, - idCounter = 0, - garbageBin, - defaultOptions, - dateFormat, // function - globalAnimation, - pathAnim, - timeUnits, - noop = function () {}, - charts = [], - PRODUCT = 'Highcharts', - VERSION = '3.0.9', - - // some constants for frequently used strings - DIV = 'div', - ABSOLUTE = 'absolute', - RELATIVE = 'relative', - HIDDEN = 'hidden', - PREFIX = 'highcharts-', - VISIBLE = 'visible', - PX = 'px', - NONE = 'none', - M = 'M', - L = 'L', - numRegex = /^[0-9]+$/, - /* - * Empirical lowest possible opacities for TRACKER_FILL - * IE6: 0.002 - * IE7: 0.002 - * IE8: 0.002 - * IE9: 0.00000000001 (unlimited) - * IE10: 0.0001 (exporting only) - * FF: 0.00000000001 (unlimited) - * Chrome: 0.000001 - * Safari: 0.000001 - * Opera: 0.00000000001 (unlimited) - */ - TRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')', // invisible but clickable - //TRACKER_FILL = 'rgba(192,192,192,0.5)', - NORMAL_STATE = '', - HOVER_STATE = 'hover', - SELECT_STATE = 'select', - MILLISECOND = 'millisecond', - SECOND = 'second', - MINUTE = 'minute', - HOUR = 'hour', - DAY = 'day', - WEEK = 'week', - MONTH = 'month', - YEAR = 'year', - - // Object for extending Axis - AxisPlotLineOrBandExtension, - - // constants for attributes - LINEAR_GRADIENT = 'linearGradient', - STOPS = 'stops', - STROKE_WIDTH = 'stroke-width', - - // time methods, changed based on whether or not UTC is used - makeTime, - timezoneOffset, - getMinutes, - getHours, - getDay, - getDate, - getMonth, - getFullYear, - setMinutes, - setHours, - setDate, - setMonth, - setFullYear, - - - // lookup over the types and the associated classes - seriesTypes = {}; - -// The Highcharts namespace -win.Highcharts = win.Highcharts ? error(16, true) : {}; - -/** - * Extend an object with the members of another - * @param {Object} a The object to be extended - * @param {Object} b The object to add to the first one - */ -function extend(a, b) { - var n; - if (!a) { - a = {}; - } - for (n in b) { - a[n] = b[n]; - } - return a; -} - -/** - * Deep merge two or more objects and return a third object. If the first argument is - * true, the contents of the second object is copied into the first object. - * Previously this function redirected to jQuery.extend(true), but this had two limitations. - * First, it deep merged arrays, which lead to workarounds in Highcharts. Second, - * it copied properties from extended prototypes. - */ -function merge() { - var i, - args = arguments, - len, - ret = {}, - doCopy = function (copy, original) { - var value, key; - - // An object is replacing a primitive - if (typeof copy !== 'object') { - copy = {}; - } - - for (key in original) { - if (original.hasOwnProperty(key)) { - value = original[key]; - - // Copy the contents of objects, but not arrays or DOM nodes - if (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]' - && typeof value.nodeType !== 'number') { - copy[key] = doCopy(copy[key] || {}, value); - - // Primitives and arrays are copied over directly - } else { - copy[key] = original[key]; - } - } - } - return copy; - }; - - // If first argument is true, copy into the existing object. Used in setOptions. - if (args[0] === true) { - ret = args[1]; - args = Array.prototype.slice.call(args, 2); - } - - // For each argument, extend the return - len = args.length; - for (i = 0; i < len; i++) { - ret = doCopy(ret, args[i]); - } - - return ret; -} - -/** - * Take an array and turn into a hash with even number arguments as keys and odd numbers as - * values. Allows creating constants for commonly used style properties, attributes etc. - * Avoid it in performance critical situations like looping - */ -function hash() { - var i = 0, - args = arguments, - length = args.length, - obj = {}; - for (; i < length; i++) { - obj[args[i++]] = args[i]; - } - return obj; -} - -/** - * Shortcut for parseInt - * @param {Object} s - * @param {Number} mag Magnitude - */ -function pInt(s, mag) { - return parseInt(s, mag || 10); -} - -/** - * Check for string - * @param {Object} s - */ -function isString(s) { - return typeof s === 'string'; -} - -/** - * Check for object - * @param {Object} obj - */ -function isObject(obj) { - return typeof obj === 'object'; -} - -/** - * Check for array - * @param {Object} obj - */ -function isArray(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; -} - -/** - * Check for number - * @param {Object} n - */ -function isNumber(n) { - return typeof n === 'number'; -} - -function log2lin(num) { - return math.log(num) / math.LN10; -} -function lin2log(num) { - return math.pow(10, num); -} - -/** - * Remove last occurence of an item from an array - * @param {Array} arr - * @param {Mixed} item - */ -function erase(arr, item) { - var i = arr.length; - while (i--) { - if (arr[i] === item) { - arr.splice(i, 1); - break; - } - } - //return arr; -} - -/** - * Returns true if the object is not null or undefined. Like MooTools' $.defined. - * @param {Object} obj - */ -function defined(obj) { - return obj !== UNDEFINED && obj !== null; -} - -/** - * Set or get an attribute or an object of attributes. Can't use jQuery attr because - * it attempts to set expando properties on the SVG element, which is not allowed. - * - * @param {Object} elem The DOM element to receive the attribute(s) - * @param {String|Object} prop The property or an abject of key-value pairs - * @param {String} value The value if a single property is set - */ -function attr(elem, prop, value) { - var key, - setAttribute = 'setAttribute', - ret; - - // if the prop is a string - if (isString(prop)) { - // set the value - if (defined(value)) { - - elem[setAttribute](prop, value); - - // get the value - } else if (elem && elem.getAttribute) { // elem not defined when printing pie demo... - ret = elem.getAttribute(prop); - } - - // else if prop is defined, it is a hash of key/value pairs - } else if (defined(prop) && isObject(prop)) { - for (key in prop) { - elem[setAttribute](key, prop[key]); - } - } - return ret; -} -/** - * Check if an element is an array, and if not, make it into an array. Like - * MooTools' $.splat. - */ -function splat(obj) { - return isArray(obj) ? obj : [obj]; -} - - -/** - * Return the first value that is defined. Like MooTools' $.pick. - */ -function pick() { - var args = arguments, - i, - arg, - length = args.length; - for (i = 0; i < length; i++) { - arg = args[i]; - if (typeof arg !== 'undefined' && arg !== null) { - return arg; - } - } -} - -/** - * Set CSS on a given element - * @param {Object} el - * @param {Object} styles Style object with camel case property names - */ -function css(el, styles) { - if (isIE) { - if (styles && styles.opacity !== UNDEFINED) { - styles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')'; - } - } - extend(el.style, styles); -} - -/** - * Utility function to create element with attributes and styles - * @param {Object} tag - * @param {Object} attribs - * @param {Object} styles - * @param {Object} parent - * @param {Object} nopad - */ -function createElement(tag, attribs, styles, parent, nopad) { - var el = doc.createElement(tag); - if (attribs) { - extend(el, attribs); - } - if (nopad) { - css(el, {padding: 0, border: NONE, margin: 0}); - } - if (styles) { - css(el, styles); - } - if (parent) { - parent.appendChild(el); - } - return el; -} - -/** - * Extend a prototyped class by new members - * @param {Object} parent - * @param {Object} members - */ -function extendClass(parent, members) { - var object = function () {}; - object.prototype = new parent(); - extend(object.prototype, members); - return object; -} - -/** - * Format a number and return a string based on input settings - * @param {Number} number The input number to format - * @param {Number} decimals The amount of decimals - * @param {String} decPoint The decimal point, defaults to the one given in the lang options - * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options - */ -function numberFormat(number, decimals, decPoint, thousandsSep) { - var lang = defaultOptions.lang, - // http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/ - n = +number || 0, - c = decimals === -1 ? - (n.toString().split('.')[1] || '').length : // preserve decimals - (isNaN(decimals = mathAbs(decimals)) ? 2 : decimals), - d = decPoint === undefined ? lang.decimalPoint : decPoint, - t = thousandsSep === undefined ? lang.thousandsSep : thousandsSep, - s = n < 0 ? "-" : "", - i = String(pInt(n = mathAbs(n).toFixed(c))), - j = i.length > 3 ? i.length % 3 : 0; - - return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + - (c ? d + mathAbs(n - i).toFixed(c).slice(2) : ""); -} - -/** - * Pad a string to a given length by adding 0 to the beginning - * @param {Number} number - * @param {Number} length - */ -function pad(number, length) { - // Create an array of the remaining length +1 and join it with 0's - return new Array((length || 2) + 1 - String(number).length).join(0) + number; -} - -/** - * Wrap a method with extended functionality, preserving the original function - * @param {Object} obj The context object that the method belongs to - * @param {String} method The name of the method to extend - * @param {Function} func A wrapper function callback. This function is called with the same arguments - * as the original function, except that the original function is unshifted and passed as the first - * argument. - */ -function wrap(obj, method, func) { - var proceed = obj[method]; - obj[method] = function () { - var args = Array.prototype.slice.call(arguments); - args.unshift(proceed); - return func.apply(this, args); - }; -} - -/** - * Based on http://www.php.net/manual/en/function.strftime.php - * @param {String} format - * @param {Number} timestamp - * @param {Boolean} capitalize - */ -dateFormat = function (format, timestamp, capitalize) { - if (!defined(timestamp) || isNaN(timestamp)) { - return 'Invalid date'; - } - format = pick(format, '%Y-%m-%d %H:%M:%S'); - - var date = new Date(timestamp - timezoneOffset), - key, // used in for constuct below - // get the basic time values - hours = date[getHours](), - day = date[getDay](), - dayOfMonth = date[getDate](), - month = date[getMonth](), - fullYear = date[getFullYear](), - lang = defaultOptions.lang, - langWeekdays = lang.weekdays, - - // List all format keys. Custom formats can be added from the outside. - replacements = extend({ - - // Day - 'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon' - 'A': langWeekdays[day], // Long weekday, like 'Monday' - 'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31 - 'e': dayOfMonth, // Day of the month, 1 through 31 - - // Week (none implemented) - //'W': weekNumber(), - - // Month - 'b': lang.shortMonths[month], // Short month, like 'Jan' - 'B': lang.months[month], // Long month, like 'January' - 'm': pad(month + 1), // Two digit month number, 01 through 12 - - // Year - 'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009 - 'Y': fullYear, // Four digits year, like 2009 - - // Time - 'H': pad(hours), // Two digits hours in 24h format, 00 through 23 - 'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11 - 'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12 - 'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59 - 'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM - 'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM - 'S': pad(date.getSeconds()), // Two digits seconds, 00 through 59 - 'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby) - }, Highcharts.dateFormats); - - - // do the replaces - for (key in replacements) { - while (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster - format = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]); - } - } - - // Optionally capitalize the string and return - return capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format; -}; - -/** - * Format a single variable. Similar to sprintf, without the % prefix. - */ -function formatSingle(format, val) { - var floatRegex = /f$/, - decRegex = /\.([0-9])/, - lang = defaultOptions.lang, - decimals; - - if (floatRegex.test(format)) { // float - decimals = format.match(decRegex); - decimals = decimals ? decimals[1] : -1; - val = numberFormat( - val, - decimals, - lang.decimalPoint, - format.indexOf(',') > -1 ? lang.thousandsSep : '' - ); - } else { - val = dateFormat(format, val); - } - return val; -} - -/** - * Format a string according to a subset of the rules of Python's String.format method. - */ -function format(str, ctx) { - var splitter = '{', - isInside = false, - segment, - valueAndFormat, - path, - i, - len, - ret = [], - val, - index; - - while ((index = str.indexOf(splitter)) !== -1) { - - segment = str.slice(0, index); - if (isInside) { // we're on the closing bracket looking back - - valueAndFormat = segment.split(':'); - path = valueAndFormat.shift().split('.'); // get first and leave format - len = path.length; - val = ctx; - - // Assign deeper paths - for (i = 0; i < len; i++) { - val = val[path[i]]; - } - - // Format the replacement - if (valueAndFormat.length) { - val = formatSingle(valueAndFormat.join(':'), val); - } - - // Push the result and advance the cursor - ret.push(val); - - } else { - ret.push(segment); - - } - str = str.slice(index + 1); // the rest - isInside = !isInside; // toggle - splitter = isInside ? '}' : '{'; // now look for next matching bracket - } - ret.push(str); - return ret.join(''); -} - -/** - * Get the magnitude of a number - */ -function getMagnitude(num) { - return math.pow(10, mathFloor(math.log(num) / math.LN10)); -} - -/** - * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5 - * @param {Number} interval - * @param {Array} multiples - * @param {Number} magnitude - * @param {Object} options - */ -function normalizeTickInterval(interval, multiples, magnitude, options) { - var normalized, i; - - // round to a tenfold of 1, 2, 2.5 or 5 - magnitude = pick(magnitude, 1); - normalized = interval / magnitude; - - // multiples for a linear scale - if (!multiples) { - multiples = [1, 2, 2.5, 5, 10]; - - // the allowDecimals option - if (options && options.allowDecimals === false) { - if (magnitude === 1) { - multiples = [1, 2, 5, 10]; - } else if (magnitude <= 0.1) { - multiples = [1 / magnitude]; - } - } - } - - // normalize the interval to the nearest multiple - for (i = 0; i < multiples.length; i++) { - interval = multiples[i]; - if (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2) { - break; - } - } - - // multiply back to the correct magnitude - interval *= magnitude; - - return interval; -} - - -/** - * Helper class that contains variuos counters that are local to the chart. - */ -function ChartCounters() { - this.color = 0; - this.symbol = 0; -} - -ChartCounters.prototype = { - /** - * Wraps the color counter if it reaches the specified length. - */ - wrapColor: function (length) { - if (this.color >= length) { - this.color = 0; - } - }, - - /** - * Wraps the symbol counter if it reaches the specified length. - */ - wrapSymbol: function (length) { - if (this.symbol >= length) { - this.symbol = 0; - } - } -}; - - -/** - * Utility method that sorts an object array and keeping the order of equal items. - * ECMA script standard does not specify the behaviour when items are equal. - */ -function stableSort(arr, sortFunction) { - var length = arr.length, - sortValue, - i; - - // Add index to each item - for (i = 0; i < length; i++) { - arr[i].ss_i = i; // stable sort index - } - - arr.sort(function (a, b) { - sortValue = sortFunction(a, b); - return sortValue === 0 ? a.ss_i - b.ss_i : sortValue; - }); - - // Remove index from items - for (i = 0; i < length; i++) { - delete arr[i].ss_i; // stable sort index - } -} - -/** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ -function arrayMin(data) { - var i = data.length, - min = data[0]; - - while (i--) { - if (data[i] < min) { - min = data[i]; - } - } - return min; -} - -/** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ -function arrayMax(data) { - var i = data.length, - max = data[0]; - - while (i--) { - if (data[i] > max) { - max = data[i]; - } - } - return max; -} - -/** - * Utility method that destroys any SVGElement or VMLElement that are properties on the given object. - * It loops all properties and invokes destroy if there is a destroy method. The property is - * then delete'ed. - * @param {Object} The object to destroy properties on - * @param {Object} Exception, do not destroy this property, only delete it. - */ -function destroyObjectProperties(obj, except) { - var n; - for (n in obj) { - // If the object is non-null and destroy is defined - if (obj[n] && obj[n] !== except && obj[n].destroy) { - // Invoke the destroy - obj[n].destroy(); - } - - // Delete the property from the object. - delete obj[n]; - } -} - - -/** - * Discard an element by moving it to the bin and delete - * @param {Object} The HTML node to discard - */ -function discardElement(element) { - // create a garbage bin element, not part of the DOM - if (!garbageBin) { - garbageBin = createElement(DIV); - } - - // move the node and empty bin - if (element) { - garbageBin.appendChild(element); - } - garbageBin.innerHTML = ''; -} - -/** - * Provide error messages for debugging, with links to online explanation - */ -function error(code, stop) { - var msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code; - if (stop) { - throw msg; - } else if (win.console) { - console.log(msg); - } -} - -/** - * Fix JS round off float errors - * @param {Number} num - */ -function correctFloat(num) { - return parseFloat( - num.toPrecision(14) - ); -} - -/** - * Set the global animation to either a given value, or fall back to the - * given chart's animation option - * @param {Object} animation - * @param {Object} chart - */ -function setAnimation(animation, chart) { - globalAnimation = pick(animation, chart.animation); -} - -/** - * The time unit lookup - */ -/*jslint white: true*/ -timeUnits = hash( - MILLISECOND, 1, - SECOND, 1000, - MINUTE, 60000, - HOUR, 3600000, - DAY, 24 * 3600000, - WEEK, 7 * 24 * 3600000, - MONTH, 31 * 24 * 3600000, - YEAR, 31556952000 -); -/*jslint white: false*/ -/** - * Path interpolation algorithm used across adapters - */ -pathAnim = { - /** - * Prepare start and end values so that the path can be animated one to one - */ - init: function (elem, fromD, toD) { - fromD = fromD || ''; - var shift = elem.shift, - bezier = fromD.indexOf('C') > -1, - numParams = bezier ? 7 : 3, - endLength, - slice, - i, - start = fromD.split(' '), - end = [].concat(toD), // copy - startBaseLine, - endBaseLine, - sixify = function (arr) { // in splines make move points have six parameters like bezier curves - i = arr.length; - while (i--) { - if (arr[i] === M) { - arr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]); - } - } - }; - - if (bezier) { - sixify(start); - sixify(end); - } - - // pull out the base lines before padding - if (elem.isArea) { - startBaseLine = start.splice(start.length - 6, 6); - endBaseLine = end.splice(end.length - 6, 6); - } - - // if shifting points, prepend a dummy point to the end path - if (shift <= end.length / numParams && start.length === end.length) { - while (shift--) { - end = [].concat(end).splice(0, numParams).concat(end); - } - } - elem.shift = 0; // reset for following animations - - // copy and append last point until the length matches the end length - if (start.length) { - endLength = end.length; - while (start.length < endLength) { - - //bezier && sixify(start); - slice = [].concat(start).splice(start.length - numParams, numParams); - if (bezier) { // disable first control point - slice[numParams - 6] = slice[numParams - 2]; - slice[numParams - 5] = slice[numParams - 1]; - } - start = start.concat(slice); - } - } - - if (startBaseLine) { // append the base lines for areas - start = start.concat(startBaseLine); - end = end.concat(endBaseLine); - } - return [start, end]; - }, - - /** - * Interpolate each value of the path and return the array - */ - step: function (start, end, pos, complete) { - var ret = [], - i = start.length, - startVal; - - if (pos === 1) { // land on the final path without adjustment points appended in the ends - ret = complete; - - } else if (i === end.length && pos < 1) { - while (i--) { - startVal = parseFloat(start[i]); - ret[i] = - isNaN(startVal) ? // a letter instruction like M or L - start[i] : - pos * (parseFloat(end[i] - startVal)) + startVal; - - } - } else { // if animation is finished or length not matching, land on right value - ret = end; - } - return ret; - } -}; - -(function ($) { - /** - * The default HighchartsAdapter for jQuery - */ - win.HighchartsAdapter = win.HighchartsAdapter || ($ && { - - /** - * Initialize the adapter by applying some extensions to jQuery - */ - init: function (pathAnim) { - - // extend the animate function to allow SVG animations - var Fx = $.fx, - Step = Fx.step, - dSetter, - Tween = $.Tween, - propHooks = Tween && Tween.propHooks, - opacityHook = $.cssHooks.opacity; - - /*jslint unparam: true*//* allow unused param x in this function */ - $.extend($.easing, { - easeOutQuad: function (x, t, b, c, d) { - return -c * (t /= d) * (t - 2) + b; - } - }); - /*jslint unparam: false*/ - - // extend some methods to check for elem.attr, which means it is a Highcharts SVG object - $.each(['cur', '_default', 'width', 'height', 'opacity'], function (i, fn) { - var obj = Step, - base; - - // Handle different parent objects - if (fn === 'cur') { - obj = Fx.prototype; // 'cur', the getter, relates to Fx.prototype - - } else if (fn === '_default' && Tween) { // jQuery 1.8 model - obj = propHooks[fn]; - fn = 'set'; - } - - // Overwrite the method - base = obj[fn]; - if (base) { // step.width and step.height don't exist in jQuery < 1.7 - - // create the extended function replacement - obj[fn] = function (fx) { - - var elem; - - // Fx.prototype.cur does not use fx argument - fx = i ? fx : this; - - // Don't run animations on textual properties like align (#1821) - if (fx.prop === 'align') { - return; - } - - // shortcut - elem = fx.elem; - - // Fx.prototype.cur returns the current value. The other ones are setters - // and returning a value has no effect. - return elem.attr ? // is SVG element wrapper - elem.attr(fx.prop, fn === 'cur' ? UNDEFINED : fx.now) : // apply the SVG wrapper's method - base.apply(this, arguments); // use jQuery's built-in method - }; - } - }); - - // Extend the opacity getter, needed for fading opacity with IE9 and jQuery 1.10+ - wrap(opacityHook, 'get', function (proceed, elem, computed) { - return elem.attr ? (elem.opacity || 0) : proceed.call(this, elem, computed); - }); - - - // Define the setter function for d (path definitions) - dSetter = function (fx) { - var elem = fx.elem, - ends; - - // Normally start and end should be set in state == 0, but sometimes, - // for reasons unknown, this doesn't happen. Perhaps state == 0 is skipped - // in these cases - if (!fx.started) { - ends = pathAnim.init(elem, elem.d, elem.toD); - fx.start = ends[0]; - fx.end = ends[1]; - fx.started = true; - } - - - // interpolate each value of the path - elem.attr('d', pathAnim.step(fx.start, fx.end, fx.pos, elem.toD)); - }; - - // jQuery 1.8 style - if (Tween) { - propHooks.d = { - set: dSetter - }; - // pre 1.8 - } else { - // animate paths - Step.d = dSetter; - } - - /** - * Utility for iterating over an array. Parameters are reversed compared to jQuery. - * @param {Array} arr - * @param {Function} fn - */ - this.each = Array.prototype.forEach ? - function (arr, fn) { // modern browsers - return Array.prototype.forEach.call(arr, fn); - - } : - function (arr, fn) { // legacy - var i = 0, - len = arr.length; - for (; i < len; i++) { - if (fn.call(arr[i], arr[i], i, arr) === false) { - return i; - } - } - }; - - /** - * Register Highcharts as a plugin in the respective framework - */ - $.fn.highcharts = function () { - var constr = 'Chart', // default constructor - args = arguments, - options, - ret, - chart; - - if (isString(args[0])) { - constr = args[0]; - args = Array.prototype.slice.call(args, 1); - } - options = args[0]; - - // Create the chart - if (options !== UNDEFINED) { - /*jslint unused:false*/ - options.chart = options.chart || {}; - options.chart.renderTo = this[0]; - chart = new Highcharts[constr](options, args[1]); - ret = this; - /*jslint unused:true*/ - } - - // When called without parameters or with the return argument, get a predefined chart - if (options === UNDEFINED) { - ret = charts[attr(this[0], 'data-highcharts-chart')]; - } - - return ret; - }; - - }, - - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - getScript: $.getScript, - - /** - * Return the index of an item in an array, or -1 if not found - */ - inArray: $.inArray, - - /** - * A direct link to jQuery methods. MooTools and Prototype adapters must be implemented for each case of method. - * @param {Object} elem The HTML element - * @param {String} method Which method to run on the wrapped element - */ - adapterRun: function (elem, method) { - return $(elem)[method](); - }, - - /** - * Filter an array - */ - grep: $.grep, - - /** - * Map an array - * @param {Array} arr - * @param {Function} fn - */ - map: function (arr, fn) { - //return jQuery.map(arr, fn); - var results = [], - i = 0, - len = arr.length; - for (; i < len; i++) { - results[i] = fn.call(arr[i], arr[i], i, arr); - } - return results; - - }, - - /** - * Get the position of an element relative to the top left of the page - */ - offset: function (el) { - return $(el).offset(); - }, - - /** - * Add an event listener - * @param {Object} el A HTML element or custom object - * @param {String} event The event type - * @param {Function} fn The event handler - */ - addEvent: function (el, event, fn) { - $(el).bind(event, fn); - }, - - /** - * Remove event added with addEvent - * @param {Object} el The object - * @param {String} eventType The event type. Leave blank to remove all events. - * @param {Function} handler The function to remove - */ - removeEvent: function (el, eventType, handler) { - // workaround for jQuery issue with unbinding custom events: - // http://forum.jQuery.com/topic/javascript-error-when-unbinding-a-custom-event-using-jQuery-1-4-2 - var func = doc.removeEventListener ? 'removeEventListener' : 'detachEvent'; - if (doc[func] && el && !el[func]) { - el[func] = function () {}; - } - - $(el).unbind(eventType, handler); - }, - - /** - * Fire an event on a custom object - * @param {Object} el - * @param {String} type - * @param {Object} eventArguments - * @param {Function} defaultFunction - */ - fireEvent: function (el, type, eventArguments, defaultFunction) { - var event = $.Event(type), - detachedType = 'detached' + type, - defaultPrevented; - - // Remove warnings in Chrome when accessing layerX and layerY. Although Highcharts - // never uses these properties, Chrome includes them in the default click event and - // raises the warning when they are copied over in the extend statement below. - // - // To avoid problems in IE (see #1010) where we cannot delete the properties and avoid - // testing if they are there (warning in chrome) the only option is to test if running IE. - if (!isIE && eventArguments) { - delete eventArguments.layerX; - delete eventArguments.layerY; - } - - extend(event, eventArguments); - - // Prevent jQuery from triggering the object method that is named the - // same as the event. For example, if the event is 'select', jQuery - // attempts calling el.select and it goes into a loop. - if (el[type]) { - el[detachedType] = el[type]; - el[type] = null; - } - - // Wrap preventDefault and stopPropagation in try/catch blocks in - // order to prevent JS errors when cancelling events on non-DOM - // objects. #615. - /*jslint unparam: true*/ - $.each(['preventDefault', 'stopPropagation'], function (i, fn) { - var base = event[fn]; - event[fn] = function () { - try { - base.call(event); - } catch (e) { - if (fn === 'preventDefault') { - defaultPrevented = true; - } - } - }; - }); - /*jslint unparam: false*/ - - // trigger it - $(el).trigger(event); - - // attach the method - if (el[detachedType]) { - el[type] = el[detachedType]; - el[detachedType] = null; - } - - if (defaultFunction && !event.isDefaultPrevented() && !defaultPrevented) { - defaultFunction(event); - } - }, - - /** - * Extension method needed for MooTools - */ - washMouseEvent: function (e) { - var ret = e.originalEvent || e; - - // computed by jQuery, needed by IE8 - if (ret.pageX === UNDEFINED) { // #1236 - ret.pageX = e.pageX; - ret.pageY = e.pageY; - } - - return ret; - }, - - /** - * Animate a HTML element or SVG element wrapper - * @param {Object} el - * @param {Object} params - * @param {Object} options jQuery-like animation options: duration, easing, callback - */ - animate: function (el, params, options) { - var $el = $(el); - if (!el.style) { - el.style = {}; // #1881 - } - if (params.d) { - el.toD = params.d; // keep the array form for paths, used in $.fx.step.d - params.d = 1; // because in jQuery, animating to an array has a different meaning - } - - $el.stop(); - if (params.opacity !== UNDEFINED && el.attr) { - params.opacity += 'px'; // force jQuery to use same logic as width and height (#2161) - } - $el.animate(params, options); - - }, - /** - * Stop running animation - */ - stop: function (el) { - $(el).stop(); - } - }); -}(win.jQuery)); - - -// check for a custom HighchartsAdapter defined prior to this file -var globalAdapter = win.HighchartsAdapter, - adapter = globalAdapter || {}; - -// Initialize the adapter -if (globalAdapter) { - globalAdapter.init.call(globalAdapter, pathAnim); -} - - -// Utility functions. If the HighchartsAdapter is not defined, adapter is an empty object -// and all the utility functions will be null. In that case they are populated by the -// default adapters below. -var adapterRun = adapter.adapterRun, - getScript = adapter.getScript, - inArray = adapter.inArray, - each = adapter.each, - grep = adapter.grep, - offset = adapter.offset, - map = adapter.map, - addEvent = adapter.addEvent, - removeEvent = adapter.removeEvent, - fireEvent = adapter.fireEvent, - washMouseEvent = adapter.washMouseEvent, - animate = adapter.animate, - stop = adapter.stop; - - - -/* **************************************************************************** - * Handle the options * - *****************************************************************************/ -var - -defaultLabelOptions = { - enabled: true, - // rotation: 0, - // align: 'center', - x: 0, - y: 15, - /*formatter: function () { - return this.value; - },*/ - style: { - color: '#666', - cursor: 'default', - fontSize: '11px' - } -}; - -defaultOptions = { - colors: ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce', '#492970', - '#f28f43', '#77a1e5', '#c42525', '#a6c96a'], - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - loading: 'Loading...', - months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', - 'August', 'September', 'October', 'November', 'December'], - shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - decimalPoint: '.', - numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels - resetZoom: 'Reset zoom', - resetZoomTitle: 'Reset zoom level 1:1', - thousandsSep: ',' - }, - global: { - useUTC: true, - //timezoneOffset: 0, - canvasToolsURL: 'http://code.highcharts.com/3.0.9/modules/canvas-tools.js', - VMLRadialGradientURL: 'http://code.highcharts.com/3.0.9/gfx/vml-radial-gradient.png' - }, - chart: { - //animation: true, - //alignTicks: false, - //reflow: true, - //className: null, - //events: { load, selection }, - //margin: [null], - //marginTop: null, - //marginRight: null, - //marginBottom: null, - //marginLeft: null, - borderColor: '#4572A7', - //borderWidth: 0, - borderRadius: 5, - defaultSeriesType: 'line', - ignoreHiddenSeries: true, - //inverted: false, - //shadow: false, - spacing: [10, 10, 15, 10], - //spacingTop: 10, - //spacingRight: 10, - //spacingBottom: 15, - //spacingLeft: 10, - style: { - fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', // default font - fontSize: '12px' - }, - backgroundColor: '#FFFFFF', - //plotBackgroundColor: null, - plotBorderColor: '#C0C0C0', - //plotBorderWidth: 0, - //plotShadow: false, - //zoomType: '' - resetZoomButton: { - theme: { - zIndex: 20 - }, - position: { - align: 'right', - x: -10, - //verticalAlign: 'top', - y: 10 - } - // relativeTo: 'plot' - } - }, - title: { - text: 'Chart title', - align: 'center', - // floating: false, - margin: 15, - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#274b6d',//#3E576F', - fontSize: '16px' - } - - }, - subtitle: { - text: '', - align: 'center', - // floating: false - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#4d759e' - } - }, - - plotOptions: { - line: { // base series options - allowPointSelect: false, - showCheckbox: false, - animation: { - duration: 1000 - }, - //connectNulls: false, - //cursor: 'default', - //clip: true, - //dashStyle: null, - //enableMouseTracking: true, - events: {}, - //legendIndex: 0, - //linecap: 'round', - lineWidth: 2, - //shadow: false, - // stacking: null, - marker: { - enabled: true, - //symbol: null, - lineWidth: 0, - radius: 4, - lineColor: '#FFFFFF', - //fillColor: null, - states: { // states for a single point - hover: { - enabled: true - //radius: base + 2 - }, - select: { - fillColor: '#FFFFFF', - lineColor: '#000000', - lineWidth: 2 - } - } - }, - point: { - events: {} - }, - dataLabels: merge(defaultLabelOptions, { - align: 'center', - enabled: false, - formatter: function () { - return this.y === null ? '' : numberFormat(this.y, -1); - }, - verticalAlign: 'bottom', // above singular point - y: 0 - // backgroundColor: undefined, - // borderColor: undefined, - // borderRadius: undefined, - // borderWidth: undefined, - // padding: 3, - // shadow: false - }), - cropThreshold: 300, // draw points outside the plot area when the number of points is less than this - pointRange: 0, - //pointStart: 0, - //pointInterval: 1, - //showInLegend: null, // auto: true for standalone series, false for linked series - states: { // states for the entire series - hover: { - //enabled: false, - //lineWidth: base + 1, - marker: { - // lineWidth: base + 1, - // radius: base + 1 - } - }, - select: { - marker: {} - } - }, - stickyTracking: true, - //tooltip: { - //pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b>' - //valueDecimals: null, - //xDateFormat: '%A, %b %e, %Y', - //valuePrefix: '', - //ySuffix: '' - //} - turboThreshold: 1000 - // zIndex: null - } - }, - labels: { - //items: [], - style: { - //font: defaultFont, - position: ABSOLUTE, - color: '#3E576F' - } - }, - legend: { - enabled: true, - align: 'center', - //floating: false, - layout: 'horizontal', - labelFormatter: function () { - return this.name; - }, - borderWidth: 1, - borderColor: '#909090', - borderRadius: 5, - navigation: { - // animation: true, - activeColor: '#274b6d', - // arrowSize: 12 - inactiveColor: '#CCC' - // style: {} // text styles - }, - // margin: 10, - // reversed: false, - shadow: false, - // backgroundColor: null, - /*style: { - padding: '5px' - },*/ - itemStyle: { - cursor: 'pointer', - color: '#274b6d', - fontSize: '12px' - }, - itemHoverStyle: { - //cursor: 'pointer', removed as of #601 - color: '#000' - }, - itemHiddenStyle: { - color: '#CCC' - }, - itemCheckboxStyle: { - position: ABSOLUTE, - width: '13px', // for IE precision - height: '13px' - }, - // itemWidth: undefined, - // symbolWidth: 16, - symbolPadding: 5, - verticalAlign: 'bottom', - // width: undefined, - x: 0, - y: 0, - title: { - //text: null, - style: { - fontWeight: 'bold' - } - } - }, - - loading: { - // hideDuration: 100, - labelStyle: { - fontWeight: 'bold', - position: RELATIVE, - top: '1em' - }, - // showDuration: 0, - style: { - position: ABSOLUTE, - backgroundColor: 'white', - opacity: 0.5, - textAlign: 'center' - } - }, - - tooltip: { - enabled: true, - animation: hasSVG, - //crosshairs: null, - backgroundColor: 'rgba(255, 255, 255, .85)', - borderWidth: 1, - borderRadius: 3, - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y' - }, - //formatter: defaultFormatter, - headerFormat: '<span style="font-size: 10px">{point.key}</span><br/>', - pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>', - shadow: true, - //shared: false, - snap: isTouchDevice ? 25 : 10, - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - padding: '8px', - whiteSpace: 'nowrap' - } - //xDateFormat: '%A, %b %e, %Y', - //valueDecimals: null, - //valuePrefix: '', - //valueSuffix: '' - }, - - credits: { - enabled: true, - text: 'Highcharts.com', - href: 'http://www.highcharts.com', - position: { - align: 'right', - x: -10, - verticalAlign: 'bottom', - y: -5 - }, - style: { - cursor: 'pointer', - color: '#909090', - fontSize: '9px' - } - } -}; - - - - -// Series defaults -var defaultPlotOptions = defaultOptions.plotOptions, - defaultSeriesOptions = defaultPlotOptions.line; - -// set the default time methods -setTimeMethods(); - - - -/** - * Set the time methods globally based on the useUTC option. Time method can be either - * local time or UTC (default). - */ -function setTimeMethods() { - var useUTC = defaultOptions.global.useUTC, - GET = useUTC ? 'getUTC' : 'get', - SET = useUTC ? 'setUTC' : 'set'; - - - timezoneOffset = ((useUTC && defaultOptions.global.timezoneOffset) || 0) * 60000; - makeTime = useUTC ? Date.UTC : function (year, month, date, hours, minutes, seconds) { - return new Date( - year, - month, - pick(date, 1), - pick(hours, 0), - pick(minutes, 0), - pick(seconds, 0) - ).getTime(); - }; - getMinutes = GET + 'Minutes'; - getHours = GET + 'Hours'; - getDay = GET + 'Day'; - getDate = GET + 'Date'; - getMonth = GET + 'Month'; - getFullYear = GET + 'FullYear'; - setMinutes = SET + 'Minutes'; - setHours = SET + 'Hours'; - setDate = SET + 'Date'; - setMonth = SET + 'Month'; - setFullYear = SET + 'FullYear'; - -} - -/** - * Merge the default options with custom options and return the new options structure - * @param {Object} options The new custom options - */ -function setOptions(options) { - - // Copy in the default options - defaultOptions = merge(true, defaultOptions, options); - - // Apply UTC - setTimeMethods(); - - return defaultOptions; -} - -/** - * Get the updated default options. Until 3.0.7, merely exposing defaultOptions for outside modules - * wasn't enough because the setOptions method created a new object. - */ -function getOptions() { - return defaultOptions; -} - - -/** - * Handle color operations. The object methods are chainable. - * @param {String} input The input color in either rbga or hex format - */ -var rgbaRegEx = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - hexRegEx = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, - rgbRegEx = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/; - -var Color = function (input) { - // declare variables - var rgba = [], result, stops; - - /** - * Parse the input color to rgba array - * @param {String} input - */ - function init(input) { - - // Gradients - if (input && input.stops) { - stops = map(input.stops, function (stop) { - return Color(stop[1]); - }); - - // Solid colors - } else { - // rgba - result = rgbaRegEx.exec(input); - if (result) { - rgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)]; - } else { - // hex - result = hexRegEx.exec(input); - if (result) { - rgba = [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1]; - } else { - // rgb - result = rgbRegEx.exec(input); - if (result) { - rgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1]; - } - } - } - } - - } - /** - * Return the color a specified format - * @param {String} format - */ - function get(format) { - var ret; - - if (stops) { - ret = merge(input); - ret.stops = [].concat(ret.stops); - each(stops, function (stop, i) { - ret.stops[i] = [ret.stops[i][0], stop.get(format)]; - }); - - // it's NaN if gradient colors on a column chart - } else if (rgba && !isNaN(rgba[0])) { - if (format === 'rgb') { - ret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')'; - } else if (format === 'a') { - ret = rgba[3]; - } else { - ret = 'rgba(' + rgba.join(',') + ')'; - } - } else { - ret = input; - } - return ret; - } - - /** - * Brighten the color - * @param {Number} alpha - */ - function brighten(alpha) { - if (stops) { - each(stops, function (stop) { - stop.brighten(alpha); - }); - - } else if (isNumber(alpha) && alpha !== 0) { - var i; - for (i = 0; i < 3; i++) { - rgba[i] += pInt(alpha * 255); - - if (rgba[i] < 0) { - rgba[i] = 0; - } - if (rgba[i] > 255) { - rgba[i] = 255; - } - } - } - return this; - } - /** - * Set the color's opacity to a given alpha value - * @param {Number} alpha - */ - function setOpacity(alpha) { - rgba[3] = alpha; - return this; - } - - // initialize: parse the input - init(input); - - // public methods - return { - get: get, - brighten: brighten, - rgba: rgba, - setOpacity: setOpacity - }; -}; - - -/** - * A wrapper object for SVG elements - */ -function SVGElement() {} - -SVGElement.prototype = { - /** - * Initialize the SVG renderer - * @param {Object} renderer - * @param {String} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this; - wrapper.element = nodeName === 'span' ? - createElement(nodeName) : - doc.createElementNS(SVG_NS, nodeName); - wrapper.renderer = renderer; - /** - * A collection of attribute setters. These methods, if defined, are called right before a certain - * attribute is set on an element wrapper. Returning false prevents the default attribute - * setter to run. Returning a value causes the default setter to set that value. Used in - * Renderer.label. - */ - wrapper.attrSetters = {}; - }, - /** - * Default base for animation - */ - opacity: 1, - /** - * Animate a given attribute - * @param {Object} params - * @param {Number} options The same options as in jQuery animation - * @param {Function} complete Function to perform at the end of animation - */ - animate: function (params, options, complete) { - var animOptions = pick(options, globalAnimation, true); - stop(this); // stop regardless of animation actually running, or reverting to .attr (#607) - if (animOptions) { - animOptions = merge(animOptions); - if (complete) { // allows using a callback with the global animation without overwriting it - animOptions.complete = complete; - } - animate(this, params, animOptions); - } else { - this.attr(params); - if (complete) { - complete(); - } - } - }, - /** - * Set or get a given attribute - * @param {Object|String} hash - * @param {Mixed|Undefined} val - */ - attr: function (hash, val) { - var wrapper = this, - key, - value, - result, - i, - child, - element = wrapper.element, - nodeName = element.nodeName.toLowerCase(), // Android2 requires lower for "text" - renderer = wrapper.renderer, - skipAttr, - titleNode, - attrSetters = wrapper.attrSetters, - shadows = wrapper.shadows, - hasSetSymbolSize, - doTransform, - ret = wrapper; - - // single key-value pair - if (isString(hash) && defined(val)) { - key = hash; - hash = {}; - hash[key] = val; - } - - // used as a getter: first argument is a string, second is undefined - if (isString(hash)) { - key = hash; - if (nodeName === 'circle') { - key = { x: 'cx', y: 'cy' }[key] || key; - } else if (key === 'strokeWidth') { - key = 'stroke-width'; - } - ret = attr(element, key) || wrapper[key] || 0; - if (key !== 'd' && key !== 'visibility' && key !== 'fill') { // 'd' is string in animation step - ret = parseFloat(ret); - } - - // setter - } else { - - for (key in hash) { - skipAttr = false; // reset - value = hash[key]; - - // check for a specific attribute setter - result = attrSetters[key] && attrSetters[key].call(wrapper, value, key); - - if (result !== false) { - if (result !== UNDEFINED) { - value = result; // the attribute setter has returned a new value to set - } - - - // paths - if (key === 'd') { - if (value && value.join) { // join path - value = value.join(' '); - } - if (/(NaN| {2}|^$)/.test(value)) { - value = 'M 0 0'; - } - //wrapper.d = value; // shortcut for animations - - // update child tspans x values - } else if (key === 'x' && nodeName === 'text') { - for (i = 0; i < element.childNodes.length; i++) { - child = element.childNodes[i]; - // if the x values are equal, the tspan represents a linebreak - if (attr(child, 'x') === attr(element, 'x')) { - //child.setAttribute('x', value); - attr(child, 'x', value); - } - } - - } else if (wrapper.rotation && (key === 'x' || key === 'y')) { - doTransform = true; - - // apply gradients - } else if (key === 'fill') { - value = renderer.color(value, element, key); - - // circle x and y - } else if (nodeName === 'circle' && (key === 'x' || key === 'y')) { - key = { x: 'cx', y: 'cy' }[key] || key; - - // rectangle border radius - } else if (nodeName === 'rect' && key === 'r') { - attr(element, { - rx: value, - ry: value - }); - skipAttr = true; - - // translation and text rotation - } else if (key === 'translateX' || key === 'translateY' || key === 'rotation' || - key === 'verticalAlign' || key === 'scaleX' || key === 'scaleY') { - doTransform = true; - skipAttr = true; - - // apply opacity as subnode (required by legacy WebKit and Batik) - } else if (key === 'stroke') { - value = renderer.color(value, element, key); - - // emulate VML's dashstyle implementation - } else if (key === 'dashstyle') { - key = 'stroke-dasharray'; - value = value && value.toLowerCase(); - if (value === 'solid') { - value = NONE; - } else if (value) { - value = value - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); // ending comma - - i = value.length; - while (i--) { - value[i] = pInt(value[i]) * pick(hash['stroke-width'], wrapper['stroke-width']); - } - value = value.join(','); - } - - // IE9/MooTools combo: MooTools returns objects instead of numbers and IE9 Beta 2 - // is unable to cast them. Test again with final IE9. - } else if (key === 'width') { - value = pInt(value); - - // Text alignment - } else if (key === 'align') { - key = 'text-anchor'; - value = { left: 'start', center: 'middle', right: 'end' }[value]; - - // Title requires a subnode, #431 - } else if (key === 'title') { - titleNode = element.getElementsByTagName('title')[0]; - if (!titleNode) { - titleNode = doc.createElementNS(SVG_NS, 'title'); - element.appendChild(titleNode); - } - titleNode.textContent = value; - } - - // jQuery animate changes case - if (key === 'strokeWidth') { - key = 'stroke-width'; - } - - // In Chrome/Win < 6 as well as Batik, the stroke attribute can't be set when the stroke- - // width is 0. #1369 - if (key === 'stroke-width' || key === 'stroke') { - wrapper[key] = value; - // Only apply the stroke attribute if the stroke width is defined and larger than 0 - if (wrapper.stroke && wrapper['stroke-width']) { - attr(element, 'stroke', wrapper.stroke); - attr(element, 'stroke-width', wrapper['stroke-width']); - wrapper.hasStroke = true; - } else if (key === 'stroke-width' && value === 0 && wrapper.hasStroke) { - element.removeAttribute('stroke'); - wrapper.hasStroke = false; - } - skipAttr = true; - } - - // symbols - if (wrapper.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) { - - - if (!hasSetSymbolSize) { - wrapper.symbolAttr(hash); - hasSetSymbolSize = true; - } - skipAttr = true; - } - - // let the shadow follow the main element - if (shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) { - i = shadows.length; - while (i--) { - attr( - shadows[i], - key, - key === 'height' ? - mathMax(value - (shadows[i].cutHeight || 0), 0) : - value - ); - } - } - - // validate heights - if ((key === 'width' || key === 'height') && nodeName === 'rect' && value < 0) { - value = 0; - } - - // Record for animation and quick access without polling the DOM - wrapper[key] = value; - - - if (key === 'text') { - // Delete bBox memo when the text changes - if (value !== wrapper.textStr) { - delete wrapper.bBox; - } - wrapper.textStr = value; - if (wrapper.added) { - renderer.buildText(wrapper); - } - } else if (!skipAttr) { - attr(element, key, value); - } - - } - - } - - // Update transform. Do this outside the loop to prevent redundant updating for batch setting - // of attributes. - if (doTransform) { - wrapper.updateTransform(); - } - - } - - return ret; - }, - - - /** - * Add a class name to an element - */ - addClass: function (className) { - var element = this.element, - currentClassName = attr(element, 'class') || ''; - - if (currentClassName.indexOf(className) === -1) { - attr(element, 'class', currentClassName + ' ' + className); - } - return this; - }, - /* hasClass and removeClass are not (yet) needed - hasClass: function (className) { - return attr(this.element, 'class').indexOf(className) !== -1; - }, - removeClass: function (className) { - attr(this.element, 'class', attr(this.element, 'class').replace(className, '')); - return this; - }, - */ - - /** - * If one of the symbol size affecting parameters are changed, - * check all the others only once for each call to an element's - * .attr() method - * @param {Object} hash - */ - symbolAttr: function (hash) { - var wrapper = this; - - each(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) { - wrapper[key] = pick(hash[key], wrapper[key]); - }); - - wrapper.attr({ - d: wrapper.renderer.symbols[wrapper.symbolName]( - wrapper.x, - wrapper.y, - wrapper.width, - wrapper.height, - wrapper - ) - }); - }, - - /** - * Apply a clipping path to this object - * @param {String} id - */ - clip: function (clipRect) { - return this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE); - }, - - /** - * Calculate the coordinates needed for drawing a rectangle crisply and return the - * calculated attributes - * @param {Number} strokeWidth - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - crisp: function (strokeWidth, x, y, width, height) { - - var wrapper = this, - key, - attribs = {}, - values = {}, - normalizer; - - strokeWidth = strokeWidth || wrapper.strokeWidth || (wrapper.attr && wrapper.attr('stroke-width')) || 0; - normalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors - - // normalize for crisp edges - values.x = mathFloor(x || wrapper.x || 0) + normalizer; - values.y = mathFloor(y || wrapper.y || 0) + normalizer; - values.width = mathFloor((width || wrapper.width || 0) - 2 * normalizer); - values.height = mathFloor((height || wrapper.height || 0) - 2 * normalizer); - values.strokeWidth = strokeWidth; - - for (key in values) { - if (wrapper[key] !== values[key]) { // only set attribute if changed - wrapper[key] = attribs[key] = values[key]; - } - } - - return attribs; - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: function (styles) { - /*jslint unparam: true*//* allow unused param a in the regexp function below */ - var elemWrapper = this, - elem = elemWrapper.element, - textWidth = elemWrapper.textWidth = styles && styles.width && elem.nodeName.toLowerCase() === 'text' && pInt(styles.width), - n, - serializedCss = '', - hyphenate = function (a, b) { return '-' + b.toLowerCase(); }; - /*jslint unparam: false*/ - - // convert legacy - if (styles && styles.color) { - styles.fill = styles.color; - } - - // Merge the new styles with the old ones - styles = extend( - elemWrapper.styles, - styles - ); - - // store object - elemWrapper.styles = styles; - - if (textWidth) { - delete styles.width; - } - - // serialize and set style attribute - if (isIE && !hasSVG) { - css(elemWrapper.element, styles); - } else { - for (n in styles) { - serializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';'; - } - attr(elem, 'style', serializedCss); // #1881 - } - - - // re-build text - if (textWidth && elemWrapper.added) { - elemWrapper.renderer.buildText(elemWrapper); - } - - return elemWrapper; - }, - - /** - * Add an event listener - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - var svgElement = this, - element = svgElement.element; - - // touch - if (hasTouch && eventType === 'click') { - element.ontouchstart = function (e) { - svgElement.touchEventFired = Date.now(); - e.preventDefault(); - handler.call(element, e); - }; - element.onclick = function (e) { - if (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269 - handler.call(element, e); - } - }; - } else { - // simplest possible event model for internal use - element['on' + eventType] = handler; - } - return this; - }, - - /** - * Set the coordinates needed to draw a consistent radial gradient across - * pie slices regardless of positioning inside the chart. The format is - * [centerX, centerY, diameter] in pixels. - */ - setRadialReference: function (coordinates) { - this.element.radialReference = coordinates; - return this; - }, - - /** - * Move an object and its children by x and y values - * @param {Number} x - * @param {Number} y - */ - translate: function (x, y) { - return this.attr({ - translateX: x, - translateY: y - }); - }, - - /** - * Invert a group, rotate and flip - */ - invert: function () { - var wrapper = this; - wrapper.inverted = true; - wrapper.updateTransform(); - return wrapper; - }, - - /** - * Private method to update the transform attribute based on internal - * properties - */ - updateTransform: function () { - var wrapper = this, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - scaleX = wrapper.scaleX, - scaleY = wrapper.scaleY, - inverted = wrapper.inverted, - rotation = wrapper.rotation, - transform; - - // flipping affects translate as adjustment for flipping around the group's axis - if (inverted) { - translateX += wrapper.attr('width'); - translateY += wrapper.attr('height'); - } - - // Apply translate. Nearly all transformed elements have translation, so instead - // of checking for translate = 0, do it always (#1767, #1846). - transform = ['translate(' + translateX + ',' + translateY + ')']; - - // apply rotation - if (inverted) { - transform.push('rotate(90) scale(-1,1)'); - } else if (rotation) { // text rotation - transform.push('rotate(' + rotation + ' ' + (wrapper.x || 0) + ' ' + (wrapper.y || 0) + ')'); - } - - // apply scale - if (defined(scaleX) || defined(scaleY)) { - transform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')'); - } - - if (transform.length) { - attr(wrapper.element, 'transform', transform.join(' ')); - } - }, - /** - * Bring the element to the front - */ - toFront: function () { - var element = this.element; - element.parentNode.appendChild(element); - return this; - }, - - - /** - * Break down alignment options like align, verticalAlign, x and y - * to x and y relative to the chart. - * - * @param {Object} alignOptions - * @param {Boolean} alignByTranslate - * @param {String[Object} box The box to align to, needs a width and height. When the - * box is a string, it refers to an object in the Renderer. For example, when - * box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height - * x and y properties. - * - */ - align: function (alignOptions, alignByTranslate, box) { - var align, - vAlign, - x, - y, - attribs = {}, - alignTo, - renderer = this.renderer, - alignedObjects = renderer.alignedObjects; - - // First call on instanciate - if (alignOptions) { - this.alignOptions = alignOptions; - this.alignByTranslate = alignByTranslate; - if (!box || isString(box)) { // boxes other than renderer handle this internally - this.alignTo = alignTo = box || 'renderer'; - erase(alignedObjects, this); // prevent duplicates, like legendGroup after resize - alignedObjects.push(this); - box = null; // reassign it below - } - - // When called on resize, no arguments are supplied - } else { - alignOptions = this.alignOptions; - alignByTranslate = this.alignByTranslate; - alignTo = this.alignTo; - } - - box = pick(box, renderer[alignTo], renderer); - - // Assign variables - align = alignOptions.align; - vAlign = alignOptions.verticalAlign; - x = (box.x || 0) + (alignOptions.x || 0); // default: left align - y = (box.y || 0) + (alignOptions.y || 0); // default: top align - - // Align - if (align === 'right' || align === 'center') { - x += (box.width - (alignOptions.width || 0)) / - { right: 1, center: 2 }[align]; - } - attribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x); - - - // Vertical align - if (vAlign === 'bottom' || vAlign === 'middle') { - y += (box.height - (alignOptions.height || 0)) / - ({ bottom: 1, middle: 2 }[vAlign] || 1); - - } - attribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y); - - // Animate only if already placed - this[this.placed ? 'animate' : 'attr'](attribs); - this.placed = true; - this.alignAttr = attribs; - - return this; - }, - - /** - * Get the bounding box (width, height, x and y) for the element - */ - getBBox: function () { - var wrapper = this, - bBox = wrapper.bBox, - renderer = wrapper.renderer, - width, - height, - rotation = wrapper.rotation, - element = wrapper.element, - styles = wrapper.styles, - rad = rotation * deg2rad, - textStr = wrapper.textStr, - numKey; - - // Since numbers are monospaced, and numerical labels appear a lot in a chart, - // we assume that a label of n characters has the same bounding box as others - // of the same length. - if (textStr === '' || numRegex.test(textStr)) { - numKey = textStr.length + '|' + styles.fontSize + '|' + styles.fontFamily; - bBox = renderer.cache[numKey]; - } - - // No cache found - if (!bBox) { - - // SVG elements - if (element.namespaceURI === SVG_NS || renderer.forExport) { - try { // Fails in Firefox if the container has display: none. - - bBox = element.getBBox ? - // SVG: use extend because IE9 is not allowed to change width and height in case - // of rotation (below) - extend({}, element.getBBox()) : - // Canvas renderer and legacy IE in export mode - { - width: element.offsetWidth, - height: element.offsetHeight - }; - } catch (e) {} - - // If the bBox is not set, the try-catch block above failed. The other condition - // is for Opera that returns a width of -Infinity on hidden elements. - if (!bBox || bBox.width < 0) { - bBox = { width: 0, height: 0 }; - } - - - // VML Renderer or useHTML within SVG - } else { - - bBox = wrapper.htmlGetBBox(); - - } - - // True SVG elements as well as HTML elements in modern browsers using the .useHTML option - // need to compensated for rotation - if (renderer.isSVG) { - width = bBox.width; - height = bBox.height; - - // Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669, #2568) - if (isIE && styles && styles.fontSize === '11px' && height.toPrecision(3) === '16.9') { - bBox.height = height = 14; - } - - // Adjust for rotated text - if (rotation) { - bBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad)); - bBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad)); - } - } - - // Cache it - wrapper.bBox = bBox; - if (numKey) { - renderer.cache[numKey] = bBox; - } - } - return bBox; - }, - - /** - * Show the element - */ - show: function () { - return this.attr({ visibility: VISIBLE }); - }, - - /** - * Hide the element - */ - hide: function () { - return this.attr({ visibility: HIDDEN }); - }, - - fadeOut: function (duration) { - var elemWrapper = this; - elemWrapper.animate({ - opacity: 0 - }, { - duration: duration || 150, - complete: function () { - elemWrapper.hide(); - } - }); - }, - - /** - * Add the element - * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined - * to append the element to the renderer.box. - */ - add: function (parent) { - - var renderer = this.renderer, - parentWrapper = parent || renderer, - parentNode = parentWrapper.element || renderer.box, - childNodes = parentNode.childNodes, - element = this.element, - zIndex = attr(element, 'zIndex'), - otherElement, - otherZIndex, - i, - inserted; - - if (parent) { - this.parentGroup = parent; - } - - // mark as inverted - this.parentInverted = parent && parent.inverted; - - // build formatted text - if (this.textStr !== undefined) { - renderer.buildText(this); - } - - // mark the container as having z indexed children - if (zIndex) { - parentWrapper.handleZ = true; - zIndex = pInt(zIndex); - } - - // insert according to this and other elements' zIndex - if (parentWrapper.handleZ) { // this element or any of its siblings has a z index - for (i = 0; i < childNodes.length; i++) { - otherElement = childNodes[i]; - otherZIndex = attr(otherElement, 'zIndex'); - if (otherElement !== element && ( - // insert before the first element with a higher zIndex - pInt(otherZIndex) > zIndex || - // if no zIndex given, insert before the first element with a zIndex - (!defined(zIndex) && defined(otherZIndex)) - - )) { - parentNode.insertBefore(element, otherElement); - inserted = true; - break; - } - } - } - - // default: append at the end - if (!inserted) { - parentNode.appendChild(element); - } - - // mark as added - this.added = true; - - // fire an event for internal hooks - fireEvent(this, 'add'); - - return this; - }, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - var parentNode = element.parentNode; - if (parentNode) { - parentNode.removeChild(element); - } - }, - - /** - * Destroy the element and element wrapper - */ - destroy: function () { - var wrapper = this, - element = wrapper.element || {}, - shadows = wrapper.shadows, - parentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && wrapper.parentGroup, - grandParent, - key, - i; - - // remove events - element.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null; - stop(wrapper); // stop running animations - - if (wrapper.clipPath) { - wrapper.clipPath = wrapper.clipPath.destroy(); - } - - // Destroy stops in case this is a gradient object - if (wrapper.stops) { - for (i = 0; i < wrapper.stops.length; i++) { - wrapper.stops[i] = wrapper.stops[i].destroy(); - } - wrapper.stops = null; - } - - // remove element - wrapper.safeRemoveChild(element); - - // destroy shadows - if (shadows) { - each(shadows, function (shadow) { - wrapper.safeRemoveChild(shadow); - }); - } - - // In case of useHTML, clean up empty containers emulating SVG groups (#1960, #2393). - while (parentToClean && parentToClean.div.childNodes.length === 0) { - grandParent = parentToClean.parentGroup; - wrapper.safeRemoveChild(parentToClean.div); - delete parentToClean.div; - parentToClean = grandParent; - } - - // remove from alignObjects - if (wrapper.alignTo) { - erase(wrapper.renderer.alignedObjects, wrapper); - } - - for (key in wrapper) { - delete wrapper[key]; - } - - return null; - }, - - /** - * Add a shadow to the element. Must be done after the element is added to the DOM - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - shadow, - element = this.element, - strokeWidth, - shadowWidth, - shadowElementOpacity, - - // compensate for inverted plot area - transform; - - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - transform = this.parentInverted ? - '(-1,-1)' : - '(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')'; - for (i = 1; i <= shadowWidth; i++) { - shadow = element.cloneNode(0); - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - attr(shadow, { - 'isShadow': 'true', - 'stroke': shadowOptions.color || 'black', - 'stroke-opacity': shadowElementOpacity * i, - 'stroke-width': strokeWidth, - 'transform': 'translate' + transform, - 'fill': NONE - }); - if (cutOff) { - attr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0)); - shadow.cutHeight = strokeWidth; - } - - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - shadows.push(shadow); - } - - this.shadows = shadows; - } - return this; - - } -}; - - -/** - * The default SVG renderer - */ -var SVGRenderer = function () { - this.init.apply(this, arguments); -}; -SVGRenderer.prototype = { - Element: SVGElement, - - /** - * Initialize the SVGRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - * @param {Boolean} forExport - */ - init: function (container, width, height, forExport) { - var renderer = this, - loc = location, - boxWrapper, - element, - desc; - - boxWrapper = renderer.createElement('svg') - .attr({ - version: '1.1' - }); - element = boxWrapper.element; - container.appendChild(element); - - // For browsers other than IE, add the namespace attribute (#1978) - if (container.innerHTML.indexOf('xmlns') === -1) { - attr(element, 'xmlns', SVG_NS); - } - - // object properties - renderer.isSVG = true; - renderer.box = element; - renderer.boxWrapper = boxWrapper; - renderer.alignedObjects = []; - - // Page url used for internal references. #24, #672, #1070 - renderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ? - loc.href - .replace(/#.*?$/, '') // remove the hash - .replace(/([\('\)])/g, '\\$1') // escape parantheses and quotes - .replace(/ /g, '%20') : // replace spaces (needed for Safari only) - ''; - - // Add description - desc = this.createElement('desc').add(); - desc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION)); - - - renderer.defs = this.createElement('defs').add(); - renderer.forExport = forExport; - renderer.gradients = {}; // Object where gradient SvgElements are stored - renderer.cache = {}; // Cache for numerical bounding boxes - - renderer.setSize(width, height, false); - - - - // Issue 110 workaround: - // In Firefox, if a div is positioned by percentage, its pixel position may land - // between pixels. The container itself doesn't display this, but an SVG element - // inside this container will be drawn at subpixel precision. In order to draw - // sharp lines, this must be compensated for. This doesn't seem to work inside - // iframes though (like in jsFiddle). - var subPixelFix, rect; - if (isFirefox && container.getBoundingClientRect) { - renderer.subPixelFix = subPixelFix = function () { - css(container, { left: 0, top: 0 }); - rect = container.getBoundingClientRect(); - css(container, { - left: (mathCeil(rect.left) - rect.left) + PX, - top: (mathCeil(rect.top) - rect.top) + PX - }); - }; - - // run the fix now - subPixelFix(); - - // run it on resize - addEvent(win, 'resize', subPixelFix); - } - }, - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none. #608. - */ - isHidden: function () { - return !this.boxWrapper.getBBox().width; - }, - - /** - * Destroys the renderer and its allocated members. - */ - destroy: function () { - var renderer = this, - rendererDefs = renderer.defs; - renderer.box = null; - renderer.boxWrapper = renderer.boxWrapper.destroy(); - - // Call destroy on all gradient elements - destroyObjectProperties(renderer.gradients || {}); - renderer.gradients = null; - - // Defs are null in VMLRenderer - // Otherwise, destroy them here. - if (rendererDefs) { - renderer.defs = rendererDefs.destroy(); - } - - // Remove sub pixel fix handler - // We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed - // See issue #982 - if (renderer.subPixelFix) { - removeEvent(win, 'resize', renderer.subPixelFix); - } - - renderer.alignedObjects = null; - - return null; - }, - - /** - * Create a wrapper for an SVG element - * @param {Object} nodeName - */ - createElement: function (nodeName) { - var wrapper = new this.Element(); - wrapper.init(this, nodeName); - return wrapper; - }, - - /** - * Dummy function for use in canvas renderer - */ - draw: function () {}, - - /** - * Parse a simple HTML string into SVG tspans - * - * @param {Object} textNode The parent text SVG node - */ - buildText: function (wrapper) { - var textNode = wrapper.element, - renderer = this, - forExport = renderer.forExport, - lines = pick(wrapper.textStr, '').toString() - .replace(/<(b|strong)>/g, '<span style="font-weight:bold">') - .replace(/<(i|em)>/g, '<span style="font-style:italic">') - .replace(/<a/g, '<span') - .replace(/<\/(b|strong|i|em|a)>/g, '</span>') - .split(/<br.*?>/g), - childNodes = textNode.childNodes, - styleRegex = /style="([^"]+)"/, - hrefRegex = /href="(http[^"]+)"/, - parentX = attr(textNode, 'x'), - textStyles = wrapper.styles, - width = wrapper.textWidth, - textLineHeight = textStyles && textStyles.lineHeight, - i = childNodes.length, - getLineHeight = function (tspan) { - return textLineHeight ? - pInt(textLineHeight) : - renderer.fontMetrics( - /px$/.test(tspan && tspan.style.fontSize) ? - tspan.style.fontSize : - (textStyles.fontSize || 11) - ).h; - }; - - /// remove old text - while (i--) { - textNode.removeChild(childNodes[i]); - } - - if (width && !wrapper.added) { - this.box.appendChild(textNode); // attach it to the DOM to read offset width - } - - // remove empty line at end - if (lines[lines.length - 1] === '') { - lines.pop(); - } - - // build the lines - each(lines, function (line, lineNo) { - var spans, spanNo = 0; - - line = line.replace(/<span/g, '|||<span').replace(/<\/span>/g, '</span>|||'); - spans = line.split('|||'); - - each(spans, function (span) { - if (span !== '' || spans.length === 1) { - var attributes = {}, - tspan = doc.createElementNS(SVG_NS, 'tspan'), - spanStyle; // #390 - if (styleRegex.test(span)) { - spanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2'); - attr(tspan, 'style', spanStyle); - } - if (hrefRegex.test(span) && !forExport) { // Not for export - #1529 - attr(tspan, 'onclick', 'location.href=\"' + span.match(hrefRegex)[1] + '\"'); - css(tspan, { cursor: 'pointer' }); - } - - span = (span.replace(/<(.|\n)*?>/g, '') || ' ') - .replace(/</g, '<') - .replace(/>/g, '>'); - - // Nested tags aren't supported, and cause crash in Safari (#1596) - if (span !== ' ') { - - // add the text node - tspan.appendChild(doc.createTextNode(span)); - - if (!spanNo) { // first span in a line, align it to the left - attributes.x = parentX; - } else { - attributes.dx = 0; // #16 - } - - // add attributes - attr(tspan, attributes); - - // first span on subsequent line, add the line height - if (!spanNo && lineNo) { - - // allow getting the right offset height in exporting in IE - if (!hasSVG && forExport) { - css(tspan, { display: 'block' }); - } - - // Set the line height based on the font size of either - // the text element or the tspan element - attr( - tspan, - 'dy', - getLineHeight(tspan), - // Safari 6.0.2 - too optimized for its own good (#1539) - // TODO: revisit this with future versions of Safari - isWebKit && tspan.offsetHeight - ); - } - - // Append it - textNode.appendChild(tspan); - - spanNo++; - - // check width and apply soft breaks - if (width) { - var words = span.replace(/([^\^])-/g, '$1- ').split(' '), // #1273 - hasWhiteSpace = words.length > 1 && textStyles.whiteSpace !== 'nowrap', - tooLong, - actualWidth, - clipHeight = wrapper._clipHeight, - rest = [], - dy = getLineHeight(), - softLineNo = 1, - bBox; - - while (hasWhiteSpace && (words.length || rest.length)) { - delete wrapper.bBox; // delete cache - bBox = wrapper.getBBox(); - actualWidth = bBox.width; - - // Old IE cannot measure the actualWidth for SVG elements (#2314) - if (!hasSVG && renderer.forExport) { - actualWidth = renderer.measureSpanWidth(tspan.firstChild.data, wrapper.styles); - } - - tooLong = actualWidth > width; - if (!tooLong || words.length === 1) { // new line needed - words = rest; - rest = []; - if (words.length) { - softLineNo++; - - if (clipHeight && softLineNo * dy > clipHeight) { - words = ['...']; - wrapper.attr('title', wrapper.textStr); - } else { - - tspan = doc.createElementNS(SVG_NS, 'tspan'); - attr(tspan, { - dy: dy, - x: parentX - }); - if (spanStyle) { // #390 - attr(tspan, 'style', spanStyle); - } - textNode.appendChild(tspan); - - if (actualWidth > width) { // a single word is pressing it out - width = actualWidth; - } - } - } - } else { // append to existing line tspan - tspan.removeChild(tspan.firstChild); - rest.unshift(words.pop()); - } - if (words.length) { - tspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-'))); - } - } - } - } - } - }); - }); - }, - - /** - * Create a button with preset states - * @param {String} text - * @param {Number} x - * @param {Number} y - * @param {Function} callback - * @param {Object} normalState - * @param {Object} hoverState - * @param {Object} pressedState - */ - button: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState, shape) { - var label = this.label(text, x, y, shape, null, null, null, null, 'button'), - curState = 0, - stateOptions, - stateStyle, - normalStyle, - hoverStyle, - pressedStyle, - disabledStyle, - STYLE = 'style', - verticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 }; - - // Normal state - prepare the attributes - normalState = merge({ - 'stroke-width': 1, - stroke: '#CCCCCC', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FEFEFE'], - [1, '#F6F6F6'] - ] - }, - r: 2, - padding: 5, - style: { - color: 'black' - } - }, normalState); - normalStyle = normalState[STYLE]; - delete normalState[STYLE]; - - // Hover state - hoverState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FFF'], - [1, '#ACF'] - ] - } - }, hoverState); - hoverStyle = hoverState[STYLE]; - delete hoverState[STYLE]; - - // Pressed state - pressedState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#9BD'], - [1, '#CDF'] - ] - } - }, pressedState); - pressedStyle = pressedState[STYLE]; - delete pressedState[STYLE]; - - // Disabled state - disabledState = merge(normalState, { - style: { - color: '#CCC' - } - }, disabledState); - disabledStyle = disabledState[STYLE]; - delete disabledState[STYLE]; - - // Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667). - addEvent(label.element, isIE ? 'mouseover' : 'mouseenter', function () { - if (curState !== 3) { - label.attr(hoverState) - .css(hoverStyle); - } - }); - addEvent(label.element, isIE ? 'mouseout' : 'mouseleave', function () { - if (curState !== 3) { - stateOptions = [normalState, hoverState, pressedState][curState]; - stateStyle = [normalStyle, hoverStyle, pressedStyle][curState]; - label.attr(stateOptions) - .css(stateStyle); - } - }); - - label.setState = function (state) { - label.state = curState = state; - if (!state) { - label.attr(normalState) - .css(normalStyle); - } else if (state === 2) { - label.attr(pressedState) - .css(pressedStyle); - } else if (state === 3) { - label.attr(disabledState) - .css(disabledStyle); - } - }; - - return label - .on('click', function () { - if (curState !== 3) { - callback.call(label); - } - }) - .attr(normalState) - .css(extend({ cursor: 'default' }, normalStyle)); - }, - - /** - * Make a straight line crisper by not spilling out to neighbour pixels - * @param {Array} points - * @param {Number} width - */ - crispLine: function (points, width) { - // points format: [M, 0, 0, L, 100, 0] - // normalize to a crisp line - if (points[1] === points[4]) { - // Substract due to #1129. Now bottom and left axis gridlines behave the same. - points[1] = points[4] = mathRound(points[1]) - (width % 2 / 2); - } - if (points[2] === points[5]) { - points[2] = points[5] = mathRound(points[2]) + (width % 2 / 2); - } - return points; - }, - - - /** - * Draw a path - * @param {Array} path An SVG path in array form - */ - path: function (path) { - var attr = { - fill: NONE - }; - if (isArray(path)) { - attr.d = path; - } else if (isObject(path)) { // attributes - extend(attr, path); - } - return this.createElement('path').attr(attr); - }, - - /** - * Draw and return an SVG circle - * @param {Number} x The x position - * @param {Number} y The y position - * @param {Number} r The radius - */ - circle: function (x, y, r) { - var attr = isObject(x) ? - x : - { - x: x, - y: y, - r: r - }; - - return this.createElement('circle').attr(attr); - }, - - /** - * Draw and return an arc - * @param {Number} x X position - * @param {Number} y Y position - * @param {Number} r Radius - * @param {Number} innerR Inner radius like used in donut charts - * @param {Number} start Starting angle - * @param {Number} end Ending angle - */ - arc: function (x, y, r, innerR, start, end) { - var arc; - - if (isObject(x)) { - y = x.y; - r = x.r; - innerR = x.innerR; - start = x.start; - end = x.end; - x = x.x; - } - - // Arcs are defined as symbols for the ability to set - // attributes in attr and animate - arc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, { - innerR: innerR || 0, - start: start || 0, - end: end || 0 - }); - arc.r = r; // #959 - return arc; - }, - - /** - * Draw and return a rectangle - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Number} width - * @param {Number} height - * @param {Number} r Border corner radius - * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing - */ - rect: function (x, y, width, height, r, strokeWidth) { - - r = isObject(x) ? x.r : r; - - var wrapper = this.createElement('rect').attr({ - rx: r, - ry: r, - fill: NONE - }); - return wrapper.attr( - isObject(x) ? - x : - // do not crispify when an object is passed in (as in column charts) - wrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0)) - ); - }, - - /** - * Resize the box and re-align all aligned elements - * @param {Object} width - * @param {Object} height - * @param {Boolean} animate - * - */ - setSize: function (width, height, animate) { - var renderer = this, - alignedObjects = renderer.alignedObjects, - i = alignedObjects.length; - - renderer.width = width; - renderer.height = height; - - renderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({ - width: width, - height: height - }); - - while (i--) { - alignedObjects[i].align(); - } - }, - - /** - * Create a group - * @param {String} name The group will be given a class name of 'highcharts-{name}'. - * This can be used for styling and scripting. - */ - g: function (name) { - var elem = this.createElement('g'); - return defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem; - }, - - /** - * Display an image - * @param {String} src - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - image: function (src, x, y, width, height) { - var attribs = { - preserveAspectRatio: NONE - }, - elemWrapper; - - // optional properties - if (arguments.length > 1) { - extend(attribs, { - x: x, - y: y, - width: width, - height: height - }); - } - - elemWrapper = this.createElement('image').attr(attribs); - - // set the href in the xlink namespace - if (elemWrapper.element.setAttributeNS) { - elemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink', - 'href', src); - } else { - // could be exporting in IE - // using href throws "not supported" in ie7 and under, requries regex shim to fix later - elemWrapper.element.setAttribute('hc-svg-href', src); - } - - return elemWrapper; - }, - - /** - * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object. - * - * @param {Object} symbol - * @param {Object} x - * @param {Object} y - * @param {Object} radius - * @param {Object} options - */ - symbol: function (symbol, x, y, width, height, options) { - - var obj, - - // get the symbol definition function - symbolFn = this.symbols[symbol], - - // check if there's a path defined for this symbol - path = symbolFn && symbolFn( - mathRound(x), - mathRound(y), - width, - height, - options - ), - - imageElement, - imageRegex = /^url\((.*?)\)$/, - imageSrc, - imageSize, - centerImage; - - if (path) { - - obj = this.path(path); - // expando properties for use in animate and attr - extend(obj, { - symbolName: symbol, - x: x, - y: y, - width: width, - height: height - }); - if (options) { - extend(obj, options); - } - - - // image symbols - } else if (imageRegex.test(symbol)) { - - // On image load, set the size and position - centerImage = function (img, size) { - if (img.element) { // it may be destroyed in the meantime (#1390) - img.attr({ - width: size[0], - height: size[1] - }); - - if (!img.alignByTranslate) { // #185 - img.translate( - mathRound((width - size[0]) / 2), // #1378 - mathRound((height - size[1]) / 2) - ); - } - } - }; - - imageSrc = symbol.match(imageRegex)[1]; - imageSize = symbolSizes[imageSrc]; - - // Ireate the image synchronously, add attribs async - obj = this.image(imageSrc) - .attr({ - x: x, - y: y - }); - obj.isImg = true; - - if (imageSize) { - centerImage(obj, imageSize); - } else { - // Initialize image to be 0 size so export will still function if there's no cached sizes. - // - obj.attr({ width: 0, height: 0 }); - - // Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8, - // the created element must be assigned to a variable in order to load (#292). - imageElement = createElement('img', { - onload: function () { - centerImage(obj, symbolSizes[imageSrc] = [this.width, this.height]); - }, - src: imageSrc - }); - } - } - - return obj; - }, - - /** - * An extendable collection of functions for defining symbol paths. - */ - symbols: { - 'circle': function (x, y, w, h) { - var cpw = 0.166 * w; - return [ - M, x + w / 2, y, - 'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h, - 'C', x - cpw, y + h, x - cpw, y, x + w / 2, y, - 'Z' - ]; - }, - - 'square': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle-down': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w / 2, y + h, - 'Z' - ]; - }, - 'diamond': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h / 2, - x + w / 2, y + h, - x, y + h / 2, - 'Z' - ]; - }, - 'arc': function (x, y, w, h, options) { - var start = options.start, - radius = options.r || w || h, - end = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561) - innerRadius = options.innerR, - open = options.open, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - longArc = options.end - start < mathPI ? 0 : 1; - - return [ - M, - x + radius * cosStart, - y + radius * sinStart, - 'A', // arcTo - radius, // x radius - radius, // y radius - 0, // slanting - longArc, // long or short arc - 1, // clockwise - x + radius * cosEnd, - y + radius * sinEnd, - open ? M : L, - x + innerRadius * cosEnd, - y + innerRadius * sinEnd, - 'A', // arcTo - innerRadius, // x radius - innerRadius, // y radius - 0, // slanting - longArc, // long or short arc - 0, // clockwise - x + innerRadius * cosStart, - y + innerRadius * sinStart, - - open ? '' : 'Z' // close - ]; - } - }, - - /** - * Define a clipping rectangle - * @param {String} id - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - var wrapper, - id = PREFIX + idCounter++, - - clipPath = this.createElement('clipPath').attr({ - id: id - }).add(this.defs); - - wrapper = this.rect(x, y, width, height, 0).add(clipPath); - wrapper.id = id; - wrapper.clipPath = clipPath; - - return wrapper; - }, - - - /** - * Take a color and return it if it's a string, make it a gradient if it's a - * gradient configuration object. Prior to Highstock, an array was used to define - * a linear gradient with pixel positions relative to the SVG. In newer versions - * we change the coordinates to apply relative to the shape, using coordinates - * 0-1 within the shape. To preserve backwards compatibility, linearGradient - * in this definition is an object of x1, y1, x2 and y2. - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop) { - var renderer = this, - colorObject, - regexRgba = /^rgba/, - gradName, - gradAttr, - gradients, - gradientObject, - stops, - stopColor, - stopOpacity, - radialReference, - n, - id, - key = []; - - // Apply linear or radial gradients - if (color && color.linearGradient) { - gradName = 'linearGradient'; - } else if (color && color.radialGradient) { - gradName = 'radialGradient'; - } - - if (gradName) { - gradAttr = color[gradName]; - gradients = renderer.gradients; - stops = color.stops; - radialReference = elem.radialReference; - - // Keep < 2.2 kompatibility - if (isArray(gradAttr)) { - color[gradName] = gradAttr = { - x1: gradAttr[0], - y1: gradAttr[1], - x2: gradAttr[2], - y2: gradAttr[3], - gradientUnits: 'userSpaceOnUse' - }; - } - - // Correct the radial gradient for the radial reference system - if (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) { - gradAttr = merge(gradAttr, { - cx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2], - cy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2], - r: gradAttr.r * radialReference[2], - gradientUnits: 'userSpaceOnUse' - }); - } - - // Build the unique key to detect whether we need to create a new element (#1282) - for (n in gradAttr) { - if (n !== 'id') { - key.push(n, gradAttr[n]); - } - } - for (n in stops) { - key.push(stops[n]); - } - key = key.join(','); - - // Check if a gradient object with the same config object is created within this renderer - if (gradients[key]) { - id = gradients[key].id; - - } else { - - // Set the id and create the element - gradAttr.id = id = PREFIX + idCounter++; - gradients[key] = gradientObject = renderer.createElement(gradName) - .attr(gradAttr) - .add(renderer.defs); - - - // The gradient needs to keep a list of stops to be able to destroy them - gradientObject.stops = []; - each(stops, function (stop) { - var stopObject; - if (regexRgba.test(stop[1])) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - stopObject = renderer.createElement('stop').attr({ - offset: stop[0], - 'stop-color': stopColor, - 'stop-opacity': stopOpacity - }).add(gradientObject); - - // Add the stop element to the gradient - gradientObject.stops.push(stopObject); - }); - } - - // Return the reference to the gradient object - return 'url(' + renderer.url + '#' + id + ')'; - - // Webkit and Batik can't show rgba. - } else if (regexRgba.test(color)) { - colorObject = Color(color); - attr(elem, prop + '-opacity', colorObject.get('a')); - - return colorObject.get('rgb'); - - - } else { - // Remove the opacity attribute added above. Does not throw if the attribute is not there. - elem.removeAttribute(prop + '-opacity'); - - return color; - } - - }, - - - /** - * Add text to the SVG object - * @param {String} str - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Boolean} useHTML Use HTML to render the text - */ - text: function (str, x, y, useHTML) { - - // declare variables - var renderer = this, - defaultChartStyle = defaultOptions.chart.style, - fakeSVG = useCanVG || (!hasSVG && renderer.forExport), - wrapper; - - if (useHTML && !renderer.forExport) { - return renderer.html(str, x, y); - } - - x = mathRound(pick(x, 0)); - y = mathRound(pick(y, 0)); - - wrapper = renderer.createElement('text') - .attr({ - x: x, - y: y, - text: str - }) - .css({ - fontFamily: defaultChartStyle.fontFamily, - fontSize: defaultChartStyle.fontSize - }); - - // Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063) - if (fakeSVG) { - wrapper.css({ - position: ABSOLUTE - }); - } - - wrapper.x = x; - wrapper.y = y; - return wrapper; - }, - - /** - * Utility to return the baseline offset and total line height from the font size - */ - fontMetrics: function (fontSize) { - fontSize = pInt(fontSize || 11); - - // Empirical values found by comparing font size and bounding box height. - // Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/ - var lineHeight = fontSize < 24 ? fontSize + 4 : mathRound(fontSize * 1.2), - baseline = mathRound(lineHeight * 0.8); - - return { - h: lineHeight, - b: baseline - }; - }, - - /** - * Add a label, a text item that can hold a colored or gradient background - * as well as a border and shadow. - * @param {string} str - * @param {Number} x - * @param {Number} y - * @param {String} shape - * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the - * coordinates it should be pinned to - * @param {Number} anchorY - * @param {Boolean} baseline Whether to position the label relative to the text baseline, - * like renderer.text, or to the upper border of the rectangle. - * @param {String} className Class name for the group - */ - label: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) { - - var renderer = this, - wrapper = renderer.g(className), - text = renderer.text('', 0, 0, useHTML) - .attr({ - zIndex: 1 - }), - //.add(wrapper), - box, - bBox, - alignFactor = 0, - padding = 3, - paddingLeft = 0, - width, - height, - wrapperX, - wrapperY, - crispAdjust = 0, - deferredAttr = {}, - baselineOffset, - attrSetters = wrapper.attrSetters, - needsBox; - - /** - * This function runs after the label is added to the DOM (when the bounding box is - * available), and after the text of the label is updated to detect the new bounding - * box and reflect it in the border box. - */ - function updateBoxSize() { - var boxX, - boxY, - style = text.element.style; - - bBox = (width === undefined || height === undefined || wrapper.styles.textAlign) && - text.getBBox(); - wrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft; - wrapper.height = (height || bBox.height || 0) + 2 * padding; - - // update the label-scoped y offset - baselineOffset = padding + renderer.fontMetrics(style && style.fontSize).b; - - if (needsBox) { - - // create the border box if it is not already present - if (!box) { - boxX = mathRound(-alignFactor * padding); - boxY = baseline ? -baselineOffset : 0; - - wrapper.box = box = shape ? - renderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height, deferredAttr) : - renderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]); - box.add(wrapper); - } - - // apply the box attributes - if (!box.isImg) { // #1630 - box.attr(merge({ - width: wrapper.width, - height: wrapper.height - }, deferredAttr)); - } - deferredAttr = null; - } - } - - /** - * This function runs after setting text or padding, but only if padding is changed - */ - function updateTextPadding() { - var styles = wrapper.styles, - textAlign = styles && styles.textAlign, - x = paddingLeft + padding * (1 - alignFactor), - y; - - // determin y based on the baseline - y = baseline ? 0 : baselineOffset; - - // compensate for alignment - if (defined(width) && (textAlign === 'center' || textAlign === 'right')) { - x += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width); - } - - // update if anything changed - if (x !== text.x || y !== text.y) { - text.attr({ - x: x, - y: y - }); - } - - // record current values - text.x = x; - text.y = y; - } - - /** - * Set a box attribute, or defer it if the box is not yet created - * @param {Object} key - * @param {Object} value - */ - function boxAttr(key, value) { - if (box) { - box.attr(key, value); - } else { - deferredAttr[key] = value; - } - } - - function getSizeAfterAdd() { - text.add(wrapper); - wrapper.attr({ - text: str, // alignment is available now - x: x, - y: y - }); - - if (box && defined(anchorX)) { - wrapper.attr({ - anchorX: anchorX, - anchorY: anchorY - }); - } - } - - /** - * After the text element is added, get the desired size of the border box - * and add it before the text in the DOM. - */ - addEvent(wrapper, 'add', getSizeAfterAdd); - - /* - * Add specific attribute setters. - */ - - // only change local variables - attrSetters.width = function (value) { - width = value; - return false; - }; - attrSetters.height = function (value) { - height = value; - return false; - }; - attrSetters.padding = function (value) { - if (defined(value) && value !== padding) { - padding = value; - updateTextPadding(); - } - return false; - }; - attrSetters.paddingLeft = function (value) { - if (defined(value) && value !== paddingLeft) { - paddingLeft = value; - updateTextPadding(); - } - return false; - }; - - - // change local variable and set attribue as well - attrSetters.align = function (value) { - alignFactor = { left: 0, center: 0.5, right: 1 }[value]; - return false; // prevent setting text-anchor on the group - }; - - // apply these to the box and the text alike - attrSetters.text = function (value, key) { - text.attr(key, value); - updateBoxSize(); - updateTextPadding(); - return false; - }; - - // apply these to the box but not to the text - attrSetters[STROKE_WIDTH] = function (value, key) { - needsBox = true; - crispAdjust = value % 2 / 2; - boxAttr(key, value); - return false; - }; - attrSetters.stroke = attrSetters.fill = attrSetters.r = function (value, key) { - if (key === 'fill') { - needsBox = true; - } - boxAttr(key, value); - return false; - }; - attrSetters.anchorX = function (value, key) { - anchorX = value; - boxAttr(key, value + crispAdjust - wrapperX); - return false; - }; - attrSetters.anchorY = function (value, key) { - anchorY = value; - boxAttr(key, value - wrapperY); - return false; - }; - - // rename attributes - attrSetters.x = function (value) { - wrapper.x = value; // for animation getter - value -= alignFactor * ((width || bBox.width) + padding); - wrapperX = mathRound(value); - - wrapper.attr('translateX', wrapperX); - return false; - }; - attrSetters.y = function (value) { - wrapperY = wrapper.y = mathRound(value); - wrapper.attr('translateY', wrapperY); - return false; - }; - - // Redirect certain methods to either the box or the text - var baseCss = wrapper.css; - return extend(wrapper, { - /** - * Pick up some properties and apply them to the text instead of the wrapper - */ - css: function (styles) { - if (styles) { - var textStyles = {}; - styles = merge(styles); // create a copy to avoid altering the original object (#537) - each(['fontSize', 'fontWeight', 'fontFamily', 'color', 'lineHeight', 'width', 'textDecoration', 'textShadow'], function (prop) { - if (styles[prop] !== UNDEFINED) { - textStyles[prop] = styles[prop]; - delete styles[prop]; - } - }); - text.css(textStyles); - } - return baseCss.call(wrapper, styles); - }, - /** - * Return the bounding box of the box, not the group - */ - getBBox: function () { - return { - width: bBox.width + 2 * padding, - height: bBox.height + 2 * padding, - x: bBox.x - padding, - y: bBox.y - padding - }; - }, - /** - * Apply the shadow to the box - */ - shadow: function (b) { - if (box) { - box.shadow(b); - } - return wrapper; - }, - /** - * Destroy and release memory. - */ - destroy: function () { - removeEvent(wrapper, 'add', getSizeAfterAdd); - - // Added by button implementation - removeEvent(wrapper.element, 'mouseenter'); - removeEvent(wrapper.element, 'mouseleave'); - - if (text) { - text = text.destroy(); - } - if (box) { - box = box.destroy(); - } - // Call base implementation to destroy the rest - SVGElement.prototype.destroy.call(wrapper); - - // Release local pointers (#1298) - wrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = getSizeAfterAdd = null; - } - }); - } -}; // end SVGRenderer - - -// general renderer -Renderer = SVGRenderer; -// extend SvgElement for useHTML option -extend(SVGElement.prototype, { - /** - * Apply CSS to HTML elements. This is used in text within SVG rendering and - * by the VML renderer - */ - htmlCss: function (styles) { - var wrapper = this, - element = wrapper.element, - textWidth = styles && element.tagName === 'SPAN' && styles.width; - - if (textWidth) { - delete styles.width; - wrapper.textWidth = textWidth; - wrapper.updateTransform(); - } - - wrapper.styles = extend(wrapper.styles, styles); - css(wrapper.element, styles); - - return wrapper; - }, - - /** - * VML and useHTML method for calculating the bounding box based on offsets - * @param {Boolean} refresh Whether to force a fresh value from the DOM or to - * use the cached value - * - * @return {Object} A hash containing values for x, y, width and height - */ - - htmlGetBBox: function () { - var wrapper = this, - element = wrapper.element, - bBox = wrapper.bBox; - - // faking getBBox in exported SVG in legacy IE - if (!bBox) { - // faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?) - if (element.nodeName === 'text') { - element.style.position = ABSOLUTE; - } - - bBox = wrapper.bBox = { - x: element.offsetLeft, - y: element.offsetTop, - width: element.offsetWidth, - height: element.offsetHeight - }; - } - - return bBox; - }, - - /** - * VML override private method to update elements based on internal - * properties based on SVG transform - */ - htmlUpdateTransform: function () { - // aligning non added elements is expensive - if (!this.added) { - this.alignOnAdd = true; - return; - } - - var wrapper = this, - renderer = wrapper.renderer, - elem = wrapper.element, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - x = wrapper.x || 0, - y = wrapper.y || 0, - align = wrapper.textAlign || 'left', - alignCorrection = { left: 0, center: 0.5, right: 1 }[align], - shadows = wrapper.shadows; - - // apply translate - css(elem, { - marginLeft: translateX, - marginTop: translateY - }); - if (shadows) { // used in labels/tooltip - each(shadows, function (shadow) { - css(shadow, { - marginLeft: translateX + 1, - marginTop: translateY + 1 - }); - }); - } - - // apply inversion - if (wrapper.inverted) { // wrapper is a group - each(elem.childNodes, function (child) { - renderer.invertChild(child, elem); - }); - } - - if (elem.tagName === 'SPAN') { - - var width, - rotation = wrapper.rotation, - baseline, - textWidth = pInt(wrapper.textWidth), - currentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth].join(','); - - if (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed - - - baseline = renderer.fontMetrics(elem.style.fontSize).b; - - // Renderer specific handling of span rotation - if (defined(rotation)) { - wrapper.setSpanRotation(rotation, alignCorrection, baseline); - } - - width = pick(wrapper.elemWidth, elem.offsetWidth); - - // Update textWidth - if (width > textWidth && /[ \-]/.test(elem.textContent || elem.innerText)) { // #983, #1254 - css(elem, { - width: textWidth + PX, - display: 'block', - whiteSpace: 'normal' - }); - width = textWidth; - } - - wrapper.getSpanCorrection(width, baseline, alignCorrection, rotation, align); - } - - // apply position with correction - css(elem, { - left: (x + (wrapper.xCorr || 0)) + PX, - top: (y + (wrapper.yCorr || 0)) + PX - }); - - // force reflow in webkit to apply the left and top on useHTML element (#1249) - if (isWebKit) { - baseline = elem.offsetHeight; // assigned to baseline for JSLint purpose - } - - // record current text transform - wrapper.cTT = currentTextTransform; - } - }, - - /** - * Set the rotation of an individual HTML span - */ - setSpanRotation: function (rotation, alignCorrection, baseline) { - var rotationStyle = {}, - cssTransformKey = isIE ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : ''; - - rotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)'; - rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = (alignCorrection * 100) + '% ' + baseline + 'px'; - css(this.element, rotationStyle); - }, - - /** - * Get the correction in X and Y positioning as the element is rotated. - */ - getSpanCorrection: function (width, baseline, alignCorrection) { - this.xCorr = -width * alignCorrection; - this.yCorr = -baseline; - } -}); - -// Extend SvgRenderer for useHTML option. -extend(SVGRenderer.prototype, { - /** - * Create HTML text node. This is used by the VML renderer as well as the SVG - * renderer through the useHTML option. - * - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - html: function (str, x, y) { - var defaultChartStyle = defaultOptions.chart.style, - wrapper = this.createElement('span'), - attrSetters = wrapper.attrSetters, - element = wrapper.element, - renderer = wrapper.renderer; - - // Text setter - attrSetters.text = function (value) { - if (value !== element.innerHTML) { - delete this.bBox; - } - element.innerHTML = value; - return false; - }; - - // Various setters which rely on update transform - attrSetters.x = attrSetters.y = attrSetters.align = attrSetters.rotation = function (value, key) { - if (key === 'align') { - key = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML. - } - wrapper[key] = value; - wrapper.htmlUpdateTransform(); - return false; - }; - - // Set the default attributes - wrapper.attr({ - text: str, - x: mathRound(x), - y: mathRound(y) - }) - .css({ - position: ABSOLUTE, - whiteSpace: 'nowrap', - fontFamily: defaultChartStyle.fontFamily, - fontSize: defaultChartStyle.fontSize - }); - - // Use the HTML specific .css method - wrapper.css = wrapper.htmlCss; - - // This is specific for HTML within SVG - if (renderer.isSVG) { - wrapper.add = function (svgGroupWrapper) { - - var htmlGroup, - container = renderer.box.parentNode, - parentGroup, - parents = []; - - this.parentGroup = svgGroupWrapper; - - // Create a mock group to hold the HTML elements - if (svgGroupWrapper) { - htmlGroup = svgGroupWrapper.div; - if (!htmlGroup) { - - // Read the parent chain into an array and read from top down - parentGroup = svgGroupWrapper; - while (parentGroup) { - - parents.push(parentGroup); - - // Move up to the next parent group - parentGroup = parentGroup.parentGroup; - } - - // Ensure dynamically updating position when any parent is translated - each(parents.reverse(), function (parentGroup) { - var htmlGroupStyle; - - // Create a HTML div and append it to the parent div to emulate - // the SVG group structure - htmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, { - className: attr(parentGroup.element, 'class') - }, { - position: ABSOLUTE, - left: (parentGroup.translateX || 0) + PX, - top: (parentGroup.translateY || 0) + PX - }, htmlGroup || container); // the top group is appended to container - - // Shortcut - htmlGroupStyle = htmlGroup.style; - - // Set listeners to update the HTML div's position whenever the SVG group - // position is changed - extend(parentGroup.attrSetters, { - translateX: function (value) { - htmlGroupStyle.left = value + PX; - }, - translateY: function (value) { - htmlGroupStyle.top = value + PX; - }, - visibility: function (value, key) { - htmlGroupStyle[key] = value; - } - }); - }); - - } - } else { - htmlGroup = container; - } - - htmlGroup.appendChild(element); - - // Shared with VML: - wrapper.added = true; - if (wrapper.alignOnAdd) { - wrapper.htmlUpdateTransform(); - } - - return wrapper; - }; - } - return wrapper; - } -}); - -/* **************************************************************************** - * * - * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - * For applications and websites that don't need IE support, like platform * - * targeted mobile apps and web apps, this code can be removed. * - * * - *****************************************************************************/ - -/** - * @constructor - */ -var VMLRenderer, VMLElement; -if (!hasSVG && !useCanVG) { - -/** - * The VML element wrapper. - */ -Highcharts.VMLElement = VMLElement = { - - /** - * Initialize a new VML element wrapper. It builds the markup as a string - * to minimize DOM traffic. - * @param {Object} renderer - * @param {Object} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this, - markup = ['<', nodeName, ' filled="f" stroked="f"'], - style = ['position: ', ABSOLUTE, ';'], - isDiv = nodeName === DIV; - - // divs and shapes need size - if (nodeName === 'shape' || isDiv) { - style.push('left:0;top:0;width:1px;height:1px;'); - } - style.push('visibility: ', isDiv ? HIDDEN : VISIBLE); - - markup.push(' style="', style.join(''), '"/>'); - - // create element with default attributes and style - if (nodeName) { - markup = isDiv || nodeName === 'span' || nodeName === 'img' ? - markup.join('') - : renderer.prepVML(markup); - wrapper.element = createElement(markup); - } - - wrapper.renderer = renderer; - wrapper.attrSetters = {}; - }, - - /** - * Add the node to the given parent - * @param {Object} parent - */ - add: function (parent) { - var wrapper = this, - renderer = wrapper.renderer, - element = wrapper.element, - box = renderer.box, - inverted = parent && parent.inverted, - - // get the parent node - parentNode = parent ? - parent.element || parent : - box; - - - // if the parent group is inverted, apply inversion on all children - if (inverted) { // only on groups - renderer.invertChild(element, parentNode); - } - - // append it - parentNode.appendChild(element); - - // align text after adding to be able to read offset - wrapper.added = true; - if (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) { - wrapper.updateTransform(); - } - - // fire an event for internal hooks - fireEvent(wrapper, 'add'); - - return wrapper; - }, - - /** - * VML always uses htmlUpdateTransform - */ - updateTransform: SVGElement.prototype.htmlUpdateTransform, - - /** - * Set the rotation of a span with oldIE's filter - */ - setSpanRotation: function () { - // Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented - // but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+ - // has support for CSS3 transform. The getBBox method also needs to be updated - // to compensate for the rotation, like it currently does for SVG. - // Test case: http://jsfiddle.net/highcharts/Ybt44/ - - var rotation = this.rotation, - costheta = mathCos(rotation * deg2rad), - sintheta = mathSin(rotation * deg2rad); - - css(this.element, { - filter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta, - ', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta, - ', sizingMethod=\'auto expand\')'].join('') : NONE - }); - }, - - /** - * Get the positioning correction for the span after rotating. - */ - getSpanCorrection: function (width, baseline, alignCorrection, rotation, align) { - - var costheta = rotation ? mathCos(rotation * deg2rad) : 1, - sintheta = rotation ? mathSin(rotation * deg2rad) : 0, - height = pick(this.elemHeight, this.element.offsetHeight), - quad, - nonLeft = align && align !== 'left'; - - // correct x and y - this.xCorr = costheta < 0 && -width; - this.yCorr = sintheta < 0 && -height; - - // correct for baseline and corners spilling out after rotation - quad = costheta * sintheta < 0; - this.xCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection); - this.yCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1); - // correct for the length/height of the text - if (nonLeft) { - this.xCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1); - if (rotation) { - this.yCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1); - } - css(this.element, { - textAlign: align - }); - } - }, - - /** - * Converts a subset of an SVG path definition to its VML counterpart. Takes an array - * as the parameter and returns a string. - */ - pathToVML: function (value) { - // convert paths - var i = value.length, - path = []; - - while (i--) { - - // Multiply by 10 to allow subpixel precision. - // Substracting half a pixel seems to make the coordinates - // align with SVG, but this hasn't been tested thoroughly - if (isNumber(value[i])) { - path[i] = mathRound(value[i] * 10) - 5; - } else if (value[i] === 'Z') { // close the path - path[i] = 'x'; - } else { - path[i] = value[i]; - - // When the start X and end X coordinates of an arc are too close, - // they are rounded to the same value above. In this case, substract or - // add 1 from the end X and Y positions. #186, #760, #1371, #1410. - if (value.isArc && (value[i] === 'wa' || value[i] === 'at')) { - // Start and end X - if (path[i + 5] === path[i + 7]) { - path[i + 7] += value[i + 7] > value[i + 5] ? 1 : -1; - } - // Start and end Y - if (path[i + 6] === path[i + 8]) { - path[i + 8] += value[i + 8] > value[i + 6] ? 1 : -1; - } - } - } - } - - - // Loop up again to handle path shortcuts (#2132) - /*while (i++ < path.length) { - if (path[i] === 'H') { // horizontal line to - path[i] = 'L'; - path.splice(i + 2, 0, path[i - 1]); - } else if (path[i] === 'V') { // vertical line to - path[i] = 'L'; - path.splice(i + 1, 0, path[i - 2]); - } - }*/ - return path.join(' ') || 'x'; - }, - - /** - * Get or set attributes - */ - attr: function (hash, val) { - var wrapper = this, - key, - value, - i, - result, - element = wrapper.element || {}, - elemStyle = element.style, - nodeName = element.nodeName, - renderer = wrapper.renderer, - symbolName = wrapper.symbolName, - hasSetSymbolSize, - shadows = wrapper.shadows, - skipAttr, - attrSetters = wrapper.attrSetters, - ret = wrapper; - - // single key-value pair - if (isString(hash) && defined(val)) { - key = hash; - hash = {}; - hash[key] = val; - } - - // used as a getter, val is undefined - if (isString(hash)) { - key = hash; - if (key === 'strokeWidth' || key === 'stroke-width') { - ret = wrapper.strokeweight; - } else { - ret = wrapper[key]; - } - - // setter - } else { - for (key in hash) { - value = hash[key]; - skipAttr = false; - - // check for a specific attribute setter - result = attrSetters[key] && attrSetters[key].call(wrapper, value, key); - - if (result !== false && value !== null) { // #620 - - if (result !== UNDEFINED) { - value = result; // the attribute setter has returned a new value to set - } - - - // prepare paths - // symbols - if (symbolName && /^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(key)) { - // if one of the symbol size affecting parameters are changed, - // check all the others only once for each call to an element's - // .attr() method - if (!hasSetSymbolSize) { - wrapper.symbolAttr(hash); - - hasSetSymbolSize = true; - } - skipAttr = true; - - } else if (key === 'd') { - value = value || []; - wrapper.d = value.join(' '); // used in getter for animation - - element.path = value = wrapper.pathToVML(value); - - // update shadows - if (shadows) { - i = shadows.length; - while (i--) { - shadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value; - } - } - skipAttr = true; - - // handle visibility - } else if (key === 'visibility') { - - // let the shadow follow the main element - if (shadows) { - i = shadows.length; - while (i--) { - shadows[i].style[key] = value; - } - } - - // Instead of toggling the visibility CSS property, move the div out of the viewport. - // This works around #61 and #586 - if (nodeName === 'DIV') { - value = value === HIDDEN ? '-999em' : 0; - - // In order to redraw, IE7 needs the div to be visible when tucked away - // outside the viewport. So the visibility is actually opposite of - // the expected value. This applies to the tooltip only. - if (!docMode8) { - elemStyle[key] = value ? VISIBLE : HIDDEN; - } - key = 'top'; - } - elemStyle[key] = value; - skipAttr = true; - - // directly mapped to css - } else if (key === 'zIndex') { - - if (value) { - elemStyle[key] = value; - } - skipAttr = true; - - // x, y, width, height - } else if (inArray(key, ['x', 'y', 'width', 'height']) !== -1) { - - wrapper[key] = value; // used in getter - - if (key === 'x' || key === 'y') { - key = { x: 'left', y: 'top' }[key]; - } else { - value = mathMax(0, value); // don't set width or height below zero (#311) - } - - // clipping rectangle special - if (wrapper.updateClipping) { - wrapper[key] = value; // the key is now 'left' or 'top' for 'x' and 'y' - wrapper.updateClipping(); - } else { - // normal - elemStyle[key] = value; - } - - skipAttr = true; - - // class name - } else if (key === 'class' && nodeName === 'DIV') { - // IE8 Standards mode has problems retrieving the className - element.className = value; - - // stroke - } else if (key === 'stroke') { - - value = renderer.color(value, element, key); - - key = 'strokecolor'; - - // stroke width - } else if (key === 'stroke-width' || key === 'strokeWidth') { - element.stroked = value ? true : false; - key = 'strokeweight'; - wrapper[key] = value; // used in getter, issue #113 - if (isNumber(value)) { - value += PX; - } - - // dashStyle - } else if (key === 'dashstyle') { - var strokeElem = element.getElementsByTagName('stroke')[0] || - createElement(renderer.prepVML(['<stroke/>']), null, null, element); - strokeElem[key] = value || 'solid'; - wrapper.dashstyle = value; /* because changing stroke-width will change the dash length - and cause an epileptic effect */ - skipAttr = true; - - // fill - } else if (key === 'fill') { - - if (nodeName === 'SPAN') { // text color - elemStyle.color = value; - } else if (nodeName !== 'IMG') { // #1336 - element.filled = value !== NONE ? true : false; - - value = renderer.color(value, element, key, wrapper); - - key = 'fillcolor'; - } - - // opacity: don't bother - animation is too slow and filters introduce artifacts - } else if (key === 'opacity') { - /*css(element, { - opacity: value - });*/ - skipAttr = true; - - // rotation on VML elements - } else if (nodeName === 'shape' && key === 'rotation') { - - wrapper[key] = element.style[key] = value; // style is for #1873 - - // Correction for the 1x1 size of the shape container. Used in gauge needles. - element.style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX; - element.style.top = mathRound(mathCos(value * deg2rad)) + PX; - - // translation for animation - } else if (key === 'translateX' || key === 'translateY' || key === 'rotation') { - wrapper[key] = value; - wrapper.updateTransform(); - - skipAttr = true; - - } - - - if (!skipAttr) { - if (docMode8) { // IE8 setAttribute bug - element[key] = value; - } else { - attr(element, key, value); - } - } - - } - } - } - return ret; - }, - - /** - * Set the element's clipping to a predefined rectangle - * - * @param {String} id The id of the clip rectangle - */ - clip: function (clipRect) { - var wrapper = this, - clipMembers, - cssRet; - - if (clipRect) { - clipMembers = clipRect.members; - erase(clipMembers, wrapper); // Ensure unique list of elements (#1258) - clipMembers.push(wrapper); - wrapper.destroyClip = function () { - erase(clipMembers, wrapper); - }; - cssRet = clipRect.getCSS(wrapper); - - } else { - if (wrapper.destroyClip) { - wrapper.destroyClip(); - } - cssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214 - } - - return wrapper.css(cssRet); - - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: SVGElement.prototype.htmlCss, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - // discardElement will detach the node from its parent before attaching it - // to the garbage bin. Therefore it is important that the node is attached and have parent. - if (element.parentNode) { - discardElement(element); - } - }, - - /** - * Extend element.destroy by removing it from the clip members array - */ - destroy: function () { - if (this.destroyClip) { - this.destroyClip(); - } - - return SVGElement.prototype.destroy.apply(this); - }, - - /** - * Add an event listener. VML override for normalizing event parameters. - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - // simplest possible event model for internal use - this.element['on' + eventType] = function () { - var evt = win.event; - evt.target = evt.srcElement; - handler(evt); - }; - return this; - }, - - /** - * In stacked columns, cut off the shadows so that they don't overlap - */ - cutOffPath: function (path, length) { - - var len; - - path = path.split(/[ ,]/); - len = path.length; - - if (len === 9 || len === 11) { - path[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length; - } - return path.join(' '); - }, - - /** - * Apply a drop shadow by copying elements and giving them different strokes - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - element = this.element, - renderer = this.renderer, - shadow, - elemStyle = element.style, - markup, - path = element.path, - strokeWidth, - modifiedPath, - shadowWidth, - shadowElementOpacity; - - // some times empty paths are not strings - if (path && typeof path.value !== 'string') { - path = 'x'; - } - modifiedPath = path; - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - for (i = 1; i <= 3; i++) { - - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - - // Cut off shadows for stacked column items - if (cutOff) { - modifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5); - } - - markup = ['<shape isShadow="true" strokeweight="', strokeWidth, - '" filled="false" path="', modifiedPath, - '" coordsize="10 10" style="', element.style.cssText, '" />']; - - shadow = createElement(renderer.prepVML(markup), - null, { - left: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1), - top: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1) - } - ); - if (cutOff) { - shadow.cutOff = strokeWidth + 1; - } - - // apply the opacity - markup = ['<stroke color="', shadowOptions.color || 'black', '" opacity="', shadowElementOpacity * i, '"/>']; - createElement(renderer.prepVML(markup), null, null, shadow); - - - // insert it - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - // record it - shadows.push(shadow); - - } - - this.shadows = shadows; - } - return this; - - } -}; -VMLElement = extendClass(SVGElement, VMLElement); - -/** - * The VML renderer - */ -var VMLRendererExtension = { // inherit SVGRenderer - - Element: VMLElement, - isIE8: userAgent.indexOf('MSIE 8.0') > -1, - - - /** - * Initialize the VMLRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - */ - init: function (container, width, height) { - var renderer = this, - boxWrapper, - box, - css; - - renderer.alignedObjects = []; - - boxWrapper = renderer.createElement(DIV); - box = boxWrapper.element; - box.style.position = RELATIVE; // for freeform drawing using renderer directly - container.appendChild(boxWrapper.element); - - - // generate the containing box - renderer.isVML = true; - renderer.box = box; - renderer.boxWrapper = boxWrapper; - renderer.cache = {}; - - - renderer.setSize(width, height, false); - - // The only way to make IE6 and IE7 print is to use a global namespace. However, - // with IE8 the only way to make the dynamic shapes visible in screen and print mode - // seems to be to add the xmlns attribute and the behaviour style inline. - if (!doc.namespaces.hcv) { - - doc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml'); - - // Setup default CSS (#2153, #2368, #2384) - css = 'hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke' + - '{ behavior:url(#default#VML); display: inline-block; } '; - try { - doc.createStyleSheet().cssText = css; - } catch (e) { - doc.styleSheets[0].cssText += css; - } - - } - }, - - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none - */ - isHidden: function () { - return !this.box.offsetWidth; - }, - - /** - * Define a clipping rectangle. In VML it is accomplished by storing the values - * for setting the CSS style to all associated members. - * - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - - // create a dummy element - var clipRect = this.createElement(), - isObj = isObject(x); - - // mimic a rectangle with its style object for automatic updating in attr - return extend(clipRect, { - members: [], - left: (isObj ? x.x : x) + 1, - top: (isObj ? x.y : y) + 1, - width: (isObj ? x.width : width) - 1, - height: (isObj ? x.height : height) - 1, - getCSS: function (wrapper) { - var element = wrapper.element, - nodeName = element.nodeName, - isShape = nodeName === 'shape', - inverted = wrapper.inverted, - rect = this, - top = rect.top - (isShape ? element.offsetTop : 0), - left = rect.left, - right = left + rect.width, - bottom = top + rect.height, - ret = { - clip: 'rect(' + - mathRound(inverted ? left : top) + 'px,' + - mathRound(inverted ? bottom : right) + 'px,' + - mathRound(inverted ? right : bottom) + 'px,' + - mathRound(inverted ? top : left) + 'px)' - }; - - // issue 74 workaround - if (!inverted && docMode8 && nodeName === 'DIV') { - extend(ret, { - width: right + PX, - height: bottom + PX - }); - } - return ret; - }, - - // used in attr and animation to update the clipping of all members - updateClipping: function () { - each(clipRect.members, function (member) { - member.css(clipRect.getCSS(member)); - }); - } - }); - - }, - - - /** - * Take a color and return it if it's a string, make it a gradient if it's a - * gradient configuration object, and apply opacity. - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop, wrapper) { - var renderer = this, - colorObject, - regexRgba = /^rgba/, - markup, - fillType, - ret = NONE; - - // Check for linear or radial gradient - if (color && color.linearGradient) { - fillType = 'gradient'; - } else if (color && color.radialGradient) { - fillType = 'pattern'; - } - - - if (fillType) { - - var stopColor, - stopOpacity, - gradient = color.linearGradient || color.radialGradient, - x1, - y1, - x2, - y2, - opacity1, - opacity2, - color1, - color2, - fillAttr = '', - stops = color.stops, - firstStop, - lastStop, - colors = [], - addFillNode = function () { - // Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2 - // are reversed. - markup = ['<fill colors="' + colors.join(',') + '" opacity="', opacity2, '" o:opacity2="', opacity1, - '" type="', fillType, '" ', fillAttr, 'focus="100%" method="any" />']; - createElement(renderer.prepVML(markup), null, null, elem); - }; - - // Extend from 0 to 1 - firstStop = stops[0]; - lastStop = stops[stops.length - 1]; - if (firstStop[0] > 0) { - stops.unshift([ - 0, - firstStop[1] - ]); - } - if (lastStop[0] < 1) { - stops.push([ - 1, - lastStop[1] - ]); - } - - // Compute the stops - each(stops, function (stop, i) { - if (regexRgba.test(stop[1])) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - - // Build the color attribute - colors.push((stop[0] * 100) + '% ' + stopColor); - - // Only start and end opacities are allowed, so we use the first and the last - if (!i) { - opacity1 = stopOpacity; - color2 = stopColor; - } else { - opacity2 = stopOpacity; - color1 = stopColor; - } - }); - - // Apply the gradient to fills only. - if (prop === 'fill') { - - // Handle linear gradient angle - if (fillType === 'gradient') { - x1 = gradient.x1 || gradient[0] || 0; - y1 = gradient.y1 || gradient[1] || 0; - x2 = gradient.x2 || gradient[2] || 0; - y2 = gradient.y2 || gradient[3] || 0; - fillAttr = 'angle="' + (90 - math.atan( - (y2 - y1) / // y vector - (x2 - x1) // x vector - ) * 180 / mathPI) + '"'; - - addFillNode(); - - // Radial (circular) gradient - } else { - - var r = gradient.r, - sizex = r * 2, - sizey = r * 2, - cx = gradient.cx, - cy = gradient.cy, - radialReference = elem.radialReference, - bBox, - applyRadialGradient = function () { - if (radialReference) { - bBox = wrapper.getBBox(); - cx += (radialReference[0] - bBox.x) / bBox.width - 0.5; - cy += (radialReference[1] - bBox.y) / bBox.height - 0.5; - sizex *= radialReference[2] / bBox.width; - sizey *= radialReference[2] / bBox.height; - } - fillAttr = 'src="' + defaultOptions.global.VMLRadialGradientURL + '" ' + - 'size="' + sizex + ',' + sizey + '" ' + - 'origin="0.5,0.5" ' + - 'position="' + cx + ',' + cy + '" ' + - 'color2="' + color2 + '" '; - - addFillNode(); - }; - - // Apply radial gradient - if (wrapper.added) { - applyRadialGradient(); - } else { - // We need to know the bounding box to get the size and position right - addEvent(wrapper, 'add', applyRadialGradient); - } - - // The fill element's color attribute is broken in IE8 standards mode, so we - // need to set the parent shape's fillcolor attribute instead. - ret = color1; - } - - // Gradients are not supported for VML stroke, return the first color. #722. - } else { - ret = stopColor; - } - - // if the color is an rgba color, split it and add a fill node - // to hold the opacity component - } else if (regexRgba.test(color) && elem.tagName !== 'IMG') { - - colorObject = Color(color); - - markup = ['<', prop, ' opacity="', colorObject.get('a'), '"/>']; - createElement(this.prepVML(markup), null, null, elem); - - ret = colorObject.get('rgb'); - - - } else { - var propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node - if (propNodes.length) { - propNodes[0].opacity = 1; - propNodes[0].type = 'solid'; - } - ret = color; - } - - return ret; - }, - - /** - * Take a VML string and prepare it for either IE8 or IE6/IE7. - * @param {Array} markup A string array of the VML markup to prepare - */ - prepVML: function (markup) { - var vmlStyle = 'display:inline-block;behavior:url(#default#VML);', - isIE8 = this.isIE8; - - markup = markup.join(''); - - if (isIE8) { // add xmlns and style inline - markup = markup.replace('/>', ' xmlns="urn:schemas-microsoft-com:vml" />'); - if (markup.indexOf('style="') === -1) { - markup = markup.replace('/>', ' style="' + vmlStyle + '" />'); - } else { - markup = markup.replace('style="', 'style="' + vmlStyle); - } - - } else { // add namespace - markup = markup.replace('<', '<hcv:'); - } - - return markup; - }, - - /** - * Create rotated and aligned text - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - text: SVGRenderer.prototype.html, - - /** - * Create and return a path element - * @param {Array} path - */ - path: function (path) { - var attr = { - // subpixel precision down to 0.1 (width and height = 1px) - coordsize: '10 10' - }; - if (isArray(path)) { - attr.d = path; - } else if (isObject(path)) { // attributes - extend(attr, path); - } - // create the shape - return this.createElement('shape').attr(attr); - }, - - /** - * Create and return a circle element. In VML circles are implemented as - * shapes, which is faster than v:oval - * @param {Number} x - * @param {Number} y - * @param {Number} r - */ - circle: function (x, y, r) { - var circle = this.symbol('circle'); - if (isObject(x)) { - r = x.r; - y = x.y; - x = x.x; - } - circle.isCircle = true; // Causes x and y to mean center (#1682) - circle.r = r; - return circle.attr({ x: x, y: y }); - }, - - /** - * Create a group using an outer div and an inner v:group to allow rotating - * and flipping. A simple v:group would have problems with positioning - * child HTML elements and CSS clip. - * - * @param {String} name The name of the group - */ - g: function (name) { - var wrapper, - attribs; - - // set the class name - if (name) { - attribs = { 'className': PREFIX + name, 'class': PREFIX + name }; - } - - // the div to hold HTML and clipping - wrapper = this.createElement(DIV).attr(attribs); - - return wrapper; - }, - - /** - * VML override to create a regular HTML image - * @param {String} src - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - image: function (src, x, y, width, height) { - var obj = this.createElement('img') - .attr({ src: src }); - - if (arguments.length > 1) { - obj.attr({ - x: x, - y: y, - width: width, - height: height - }); - } - return obj; - }, - - /** - * VML uses a shape for rect to overcome bugs and rotation problems - */ - rect: function (x, y, width, height, r, strokeWidth) { - - var wrapper = this.symbol('rect'); - wrapper.r = isObject(x) ? x.r : r; - - //return wrapper.attr(wrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0))); - return wrapper.attr( - isObject(x) ? - x : - // do not crispify when an object is passed in (as in column charts) - wrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0)) - ); - }, - - /** - * In the VML renderer, each child of an inverted div (group) is inverted - * @param {Object} element - * @param {Object} parentNode - */ - invertChild: function (element, parentNode) { - var parentStyle = parentNode.style; - css(element, { - flip: 'x', - left: pInt(parentStyle.width) - 1, - top: pInt(parentStyle.height) - 1, - rotation: -90 - }); - }, - - /** - * Symbol definitions that override the parent SVG renderer's symbols - * - */ - symbols: { - // VML specific arc function - arc: function (x, y, w, h, options) { - var start = options.start, - end = options.end, - radius = options.r || w || h, - innerRadius = options.innerR, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - ret; - - if (end - start === 0) { // no angle, don't show it. - return ['x']; - } - - ret = [ - 'wa', // clockwise arc to - x - radius, // left - y - radius, // top - x + radius, // right - y + radius, // bottom - x + radius * cosStart, // start x - y + radius * sinStart, // start y - x + radius * cosEnd, // end x - y + radius * sinEnd // end y - ]; - - if (options.open && !innerRadius) { - ret.push( - 'e', - M, - x,// - innerRadius, - y// - innerRadius - ); - } - - ret.push( - 'at', // anti clockwise arc to - x - innerRadius, // left - y - innerRadius, // top - x + innerRadius, // right - y + innerRadius, // bottom - x + innerRadius * cosEnd, // start x - y + innerRadius * sinEnd, // start y - x + innerRadius * cosStart, // end x - y + innerRadius * sinStart, // end y - 'x', // finish path - 'e' // close - ); - - ret.isArc = true; - return ret; - - }, - // Add circle symbol path. This performs significantly faster than v:oval. - circle: function (x, y, w, h, wrapper) { - - if (wrapper) { - w = h = 2 * wrapper.r; - } - - // Center correction, #1682 - if (wrapper && wrapper.isCircle) { - x -= w / 2; - y -= h / 2; - } - - // Return the path - return [ - 'wa', // clockwisearcto - x, // left - y, // top - x + w, // right - y + h, // bottom - x + w, // start x - y + h / 2, // start y - x + w, // end x - y + h / 2, // end y - //'x', // finish path - 'e' // close - ]; - }, - /** - * Add rectangle symbol path which eases rotation and omits arcsize problems - * compared to the built-in VML roundrect shape - * - * @param {Number} left Left position - * @param {Number} top Top position - * @param {Number} r Border radius - * @param {Object} options Width and height - */ - - rect: function (left, top, width, height, options) { - - var right = left + width, - bottom = top + height, - ret, - r; - - // No radius, return the more lightweight square - if (!defined(options) || !options.r) { - ret = SVGRenderer.prototype.symbols.square.apply(0, arguments); - - // Has radius add arcs for the corners - } else { - - r = mathMin(options.r, width, height); - ret = [ - M, - left + r, top, - - L, - right - r, top, - 'wa', - right - 2 * r, top, - right, top + 2 * r, - right - r, top, - right, top + r, - - L, - right, bottom - r, - 'wa', - right - 2 * r, bottom - 2 * r, - right, bottom, - right, bottom - r, - right - r, bottom, - - L, - left + r, bottom, - 'wa', - left, bottom - 2 * r, - left + 2 * r, bottom, - left + r, bottom, - left, bottom - r, - - L, - left, top + r, - 'wa', - left, top, - left + 2 * r, top + 2 * r, - left, top + r, - left + r, top, - - - 'x', - 'e' - ]; - } - return ret; - } - } -}; -Highcharts.VMLRenderer = VMLRenderer = function () { - this.init.apply(this, arguments); -}; -VMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension); - - // general renderer - Renderer = VMLRenderer; -} - -// This method is used with exporting in old IE, when emulating SVG (see #2314) -SVGRenderer.prototype.measureSpanWidth = function (text, styles) { - var measuringSpan = doc.createElement('span'), - offsetWidth, - textNode = doc.createTextNode(text); - - measuringSpan.appendChild(textNode); - css(measuringSpan, styles); - this.box.appendChild(measuringSpan); - offsetWidth = measuringSpan.offsetWidth; - discardElement(measuringSpan); // #2463 - return offsetWidth; -}; - - -/* **************************************************************************** - * * - * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - *****************************************************************************/ -/* **************************************************************************** - * * - * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT * - * TARGETING THAT SYSTEM. * - * * - *****************************************************************************/ -var CanVGRenderer, - CanVGController; - -if (useCanVG) { - /** - * The CanVGRenderer is empty from start to keep the source footprint small. - * When requested, the CanVGController downloads the rest of the source packaged - * together with the canvg library. - */ - Highcharts.CanVGRenderer = CanVGRenderer = function () { - // Override the global SVG namespace to fake SVG/HTML that accepts CSS - SVG_NS = 'http://www.w3.org/1999/xhtml'; - }; - - /** - * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but - * the implementation from SvgRenderer will not be merged in until first render. - */ - CanVGRenderer.prototype.symbols = {}; - - /** - * Handles on demand download of canvg rendering support. - */ - CanVGController = (function () { - // List of renderering calls - var deferredRenderCalls = []; - - /** - * When downloaded, we are ready to draw deferred charts. - */ - function drawDeferred() { - var callLength = deferredRenderCalls.length, - callIndex; - - // Draw all pending render calls - for (callIndex = 0; callIndex < callLength; callIndex++) { - deferredRenderCalls[callIndex](); - } - // Clear the list - deferredRenderCalls = []; - } - - return { - push: function (func, scriptLocation) { - // Only get the script once - if (deferredRenderCalls.length === 0) { - getScript(scriptLocation, drawDeferred); - } - // Register render call - deferredRenderCalls.push(func); - } - }; - }()); - - Renderer = CanVGRenderer; -} // end CanVGRenderer - -/* **************************************************************************** - * * - * END OF ANDROID < 3 SPECIFIC CODE * - * * - *****************************************************************************/ - -/** - * The Tick class - */ -function Tick(axis, pos, type, noLabel) { - this.axis = axis; - this.pos = pos; - this.type = type || ''; - this.isNew = true; - - if (!type && !noLabel) { - this.addLabel(); - } -} - -Tick.prototype = { - /** - * Write the tick label - */ - addLabel: function () { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - horiz = axis.horiz, - categories = axis.categories, - names = axis.names, - pos = tick.pos, - labelOptions = options.labels, - str, - tickPositions = axis.tickPositions, - width = (horiz && categories && - !labelOptions.step && !labelOptions.staggerLines && - !labelOptions.rotation && - chart.plotWidth / tickPositions.length) || - (!horiz && (chart.margin[3] || chart.chartWidth * 0.33)), // #1580, #1931 - isFirst = pos === tickPositions[0], - isLast = pos === tickPositions[tickPositions.length - 1], - css, - attr, - value = categories ? - pick(categories[pos], names[pos], pos) : - pos, - label = tick.label, - tickPositionInfo = tickPositions.info, - dateTimeLabelFormat; - - // Set the datetime label format. If a higher rank is set for this position, use that. If not, - // use the general format. - if (axis.isDatetimeAxis && tickPositionInfo) { - dateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName]; - } - - // set properties for access in render method - tick.isFirst = isFirst; - tick.isLast = isLast; - - // get the string - str = axis.labelFormatter.call({ - axis: axis, - chart: chart, - isFirst: isFirst, - isLast: isLast, - dateTimeLabelFormat: dateTimeLabelFormat, - value: axis.isLog ? correctFloat(lin2log(value)) : value - }); - - // prepare CSS - css = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX }; - css = extend(css, labelOptions.style); - - // first call - if (!defined(label)) { - attr = { - align: axis.labelAlign - }; - if (isNumber(labelOptions.rotation)) { - attr.rotation = labelOptions.rotation; - } - if (width && labelOptions.ellipsis) { - attr._clipHeight = axis.len / tickPositions.length; - } - - tick.label = - defined(str) && labelOptions.enabled ? - chart.renderer.text( - str, - 0, - 0, - labelOptions.useHTML - ) - .attr(attr) - // without position absolute, IE export sometimes is wrong - .css(css) - .add(axis.labelGroup) : - null; - - // update - } else if (label) { - label.attr({ - text: str - }) - .css(css); - } - }, - - /** - * Get the offset height or width of the label - */ - getLabelSize: function () { - var label = this.label, - axis = this.axis; - return label ? - label.getBBox()[axis.horiz ? 'height' : 'width'] : - 0; - }, - - /** - * Find how far the labels extend to the right and left of the tick's x position. Used for anti-collision - * detection with overflow logic. - */ - getLabelSides: function () { - var bBox = this.label.getBBox(), - axis = this.axis, - horiz = axis.horiz, - options = axis.options, - labelOptions = options.labels, - size = horiz ? bBox.width : bBox.height, - leftSide = horiz ? - size * { left: 0, center: 0.5, right: 1 }[axis.labelAlign] - labelOptions.x : - size; - - return [-leftSide, size - leftSide]; - }, - - /** - * Handle the label overflow by adjusting the labels to the left and right edge, or - * hide them if they collide into the neighbour label. - */ - handleOverflow: function (index, xy) { - var show = true, - axis = this.axis, - isFirst = this.isFirst, - isLast = this.isLast, - horiz = axis.horiz, - pxPos = horiz ? xy.x : xy.y, - reversed = axis.reversed, - tickPositions = axis.tickPositions, - sides = this.getLabelSides(), - leftSide = sides[0], - rightSide = sides[1], - axisLeft = axis.pos, - axisRight = axisLeft + axis.len, - neighbour, - neighbourEdge, - line = this.label.line || 0, - labelEdge = axis.labelEdge, - justifyLabel = axis.justifyLabels && (isFirst || isLast); - - // Hide it if it now overlaps the neighbour label - if (labelEdge[line] === UNDEFINED || pxPos + leftSide > labelEdge[line]) { - labelEdge[line] = pxPos + rightSide; - - } else if (!justifyLabel) { - show = false; - } - - if (justifyLabel) { - neighbour = axis.ticks[tickPositions[index + (isFirst ? 1 : -1)]]; - neighbourEdge = neighbour && neighbour.label.xy && neighbour.label.xy.x + neighbour.getLabelSides()[isFirst ? 0 : 1]; - - if ((isFirst && !reversed) || (isLast && reversed)) { - // Is the label spilling out to the left of the plot area? - if (pxPos + leftSide < axisLeft) { - - // Align it to plot left - pxPos = axisLeft - leftSide; - - // Hide it if it now overlaps the neighbour label - if (neighbour && pxPos + rightSide > neighbourEdge) { - show = false; - } - } - - } else { - // Is the label spilling out to the right of the plot area? - if (pxPos + rightSide > axisRight) { - - // Align it to plot right - pxPos = axisRight - rightSide; - - // Hide it if it now overlaps the neighbour label - if (neighbour && pxPos + leftSide < neighbourEdge) { - show = false; - } - - } - } - - // Set the modified x position of the label - xy.x = pxPos; - } - return show; - }, - - /** - * Get the x and y position for ticks and labels - */ - getPosition: function (horiz, pos, tickmarkOffset, old) { - var axis = this.axis, - chart = axis.chart, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight; - - return { - x: horiz ? - axis.translate(pos + tickmarkOffset, null, null, old) + axis.transB : - axis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0), - - y: horiz ? - cHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) : - cHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB - }; - - }, - - /** - * Get the x, y position of the tick label - */ - getLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - transA = axis.transA, - reversed = axis.reversed, - staggerLines = axis.staggerLines, - baseline = axis.chart.renderer.fontMetrics(labelOptions.style.fontSize).b, - rotation = labelOptions.rotation; - - x = x + labelOptions.x - (tickmarkOffset && horiz ? - tickmarkOffset * transA * (reversed ? -1 : 1) : 0); - y = y + labelOptions.y - (tickmarkOffset && !horiz ? - tickmarkOffset * transA * (reversed ? 1 : -1) : 0); - - // Correct for rotation (#1764) - if (rotation && axis.side === 2) { - y -= baseline - baseline * mathCos(rotation * deg2rad); - } - - // Vertically centered - if (!defined(labelOptions.y) && !rotation) { // #1951 - y += baseline - label.getBBox().height / 2; - } - - // Correct for staggered labels - if (staggerLines) { - label.line = (index / (step || 1) % staggerLines); - y += label.line * (axis.labelOffset / staggerLines); - } - - return { - x: x, - y: y - }; - }, - - /** - * Extendible method to return the path of the marker - */ - getMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) { - return renderer.crispLine([ - M, - x, - y, - L, - x + (horiz ? 0 : -tickLength), - y + (horiz ? tickLength : 0) - ], tickWidth); - }, - - /** - * Put everything in place - * - * @param index {Number} - * @param old {Boolean} Use old coordinates to prepare an animation into new position - */ - render: function (index, old, opacity) { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - renderer = chart.renderer, - horiz = axis.horiz, - type = tick.type, - label = tick.label, - pos = tick.pos, - labelOptions = options.labels, - gridLine = tick.gridLine, - gridPrefix = type ? type + 'Grid' : 'grid', - tickPrefix = type ? type + 'Tick' : 'tick', - gridLineWidth = options[gridPrefix + 'LineWidth'], - gridLineColor = options[gridPrefix + 'LineColor'], - dashStyle = options[gridPrefix + 'LineDashStyle'], - tickLength = options[tickPrefix + 'Length'], - tickWidth = options[tickPrefix + 'Width'] || 0, - tickColor = options[tickPrefix + 'Color'], - tickPosition = options[tickPrefix + 'Position'], - gridLinePath, - mark = tick.mark, - markPath, - step = labelOptions.step, - attribs, - show = true, - tickmarkOffset = axis.tickmarkOffset, - xy = tick.getPosition(horiz, pos, tickmarkOffset, old), - x = xy.x, - y = xy.y, - reverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687 - - this.isActive = true; - - // create the grid line - if (gridLineWidth) { - gridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true); - - if (gridLine === UNDEFINED) { - attribs = { - stroke: gridLineColor, - 'stroke-width': gridLineWidth - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - if (!type) { - attribs.zIndex = 1; - } - if (old) { - attribs.opacity = 0; - } - tick.gridLine = gridLine = - gridLineWidth ? - renderer.path(gridLinePath) - .attr(attribs).add(axis.gridGroup) : - null; - } - - // If the parameter 'old' is set, the current call will be followed - // by another call, therefore do not do any animations this time - if (!old && gridLine && gridLinePath) { - gridLine[tick.isNew ? 'attr' : 'animate']({ - d: gridLinePath, - opacity: opacity - }); - } - } - - // create the tick mark - if (tickWidth && tickLength) { - - // negate the length - if (tickPosition === 'inside') { - tickLength = -tickLength; - } - if (axis.opposite) { - tickLength = -tickLength; - } - - markPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer); - - if (mark) { // updating - mark.animate({ - d: markPath, - opacity: opacity - }); - } else { // first time - tick.mark = renderer.path( - markPath - ).attr({ - stroke: tickColor, - 'stroke-width': tickWidth, - opacity: opacity - }).add(axis.axisGroup); - } - } - - // the label is created on init - now move it into place - if (label && !isNaN(x)) { - label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - - // Apply show first and show last. If the tick is both first and last, it is - // a single centered tick, in which case we show the label anyway (#2100). - if ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) || - (tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) { - show = false; - - // Handle label overflow and show or hide accordingly - } else if (!axis.isRadial && !labelOptions.step && !labelOptions.rotation && !old && opacity !== 0) { - show = tick.handleOverflow(index, xy); - } - - // apply step - if (step && index % step) { - // show those indices dividable by step - show = false; - } - - // Set the new position, and show or hide - if (show && !isNaN(xy.y)) { - xy.opacity = opacity; - label[tick.isNew ? 'attr' : 'animate'](xy); - tick.isNew = false; - } else { - label.attr('y', -9999); // #1338 - } - } - }, - - /** - * Destructor for the tick prototype - */ - destroy: function () { - destroyObjectProperties(this, this.axis); - } -}; - -/** - * The object wrapper for plot lines and plot bands - * @param {Object} options - */ -var PlotLineOrBand = function (axis, options) { - this.axis = axis; - - if (options) { - this.options = options; - this.id = options.id; - } -}; - -PlotLineOrBand.prototype = { - - /** - * Render the plot line or plot band. If it is already existing, - * move it. - */ - render: function () { - var plotLine = this, - axis = plotLine.axis, - horiz = axis.horiz, - halfPointRange = (axis.pointRange || 0) / 2, - options = plotLine.options, - optionsLabel = options.label, - label = plotLine.label, - width = options.width, - to = options.to, - from = options.from, - isBand = defined(from) && defined(to), - value = options.value, - dashStyle = options.dashStyle, - svgElem = plotLine.svgElem, - path = [], - addEvent, - eventType, - xs, - ys, - x, - y, - color = options.color, - zIndex = options.zIndex, - events = options.events, - attribs, - renderer = axis.chart.renderer; - - // logarithmic conversion - if (axis.isLog) { - from = log2lin(from); - to = log2lin(to); - value = log2lin(value); - } - - // plot line - if (width) { - path = axis.getPlotLinePath(value, width); - attribs = { - stroke: color, - 'stroke-width': width - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - } else if (isBand) { // plot band - - // keep within plot area - from = mathMax(from, axis.min - halfPointRange); - to = mathMin(to, axis.max + halfPointRange); - - path = axis.getPlotBandPath(from, to, options); - attribs = { - fill: color - }; - if (options.borderWidth) { - attribs.stroke = options.borderColor; - attribs['stroke-width'] = options.borderWidth; - } - } else { - return; - } - // zIndex - if (defined(zIndex)) { - attribs.zIndex = zIndex; - } - - // common for lines and bands - if (svgElem) { - if (path) { - svgElem.animate({ - d: path - }, null, svgElem.onGetPath); - } else { - svgElem.hide(); - svgElem.onGetPath = function () { - svgElem.show(); - }; - if (label) { - plotLine.label = label = label.destroy(); - } - } - } else if (path && path.length) { - plotLine.svgElem = svgElem = renderer.path(path) - .attr(attribs).add(); - - // events - if (events) { - addEvent = function (eventType) { - svgElem.on(eventType, function (e) { - events[eventType].apply(plotLine, [e]); - }); - }; - for (eventType in events) { - addEvent(eventType); - } - } - } - - // the plot band/line label - if (optionsLabel && defined(optionsLabel.text) && path && path.length && axis.width > 0 && axis.height > 0) { - // apply defaults - optionsLabel = merge({ - align: horiz && isBand && 'center', - x: horiz ? !isBand && 4 : 10, - verticalAlign : !horiz && isBand && 'middle', - y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, - rotation: horiz && !isBand && 90 - }, optionsLabel); - - // add the SVG element - if (!label) { - plotLine.label = label = renderer.text( - optionsLabel.text, - 0, - 0, - optionsLabel.useHTML - ) - .attr({ - align: optionsLabel.textAlign || optionsLabel.align, - rotation: optionsLabel.rotation, - zIndex: zIndex - }) - .css(optionsLabel.style) - .add(); - } - - // get the bounding box and align the label - xs = [path[1], path[4], pick(path[6], path[1])]; - ys = [path[2], path[5], pick(path[7], path[2])]; - x = arrayMin(xs); - y = arrayMin(ys); - - label.align(optionsLabel, false, { - x: x, - y: y, - width: arrayMax(xs) - x, - height: arrayMax(ys) - y - }); - label.show(); - - } else if (label) { // move out of sight - label.hide(); - } - - // chainable - return plotLine; - }, - - /** - * Remove the plot line or band - */ - destroy: function () { - // remove it from the lookup - erase(this.axis.plotLinesAndBands, this); - - delete this.axis; - destroyObjectProperties(this); - } -}; - -/** - * Object with members for extending the Axis prototype - */ - -AxisPlotLineOrBandExtension = { - - /** - * Create the path for a plot band - */ - getPlotBandPath: function (from, to) { - var toPath = this.getPlotLinePath(to), - path = this.getPlotLinePath(from); - - if (path && toPath) { - path.push( - toPath[4], - toPath[5], - toPath[1], - toPath[2] - ); - } else { // outside the axis area - path = null; - } - - return path; - }, - - addPlotBand: function (options) { - this.addPlotBandOrLine(options, 'plotBands'); - }, - - addPlotLine: function (options) { - this.addPlotBandOrLine(options, 'plotLines'); - }, - - /** - * Add a plot band or plot line after render time - * - * @param options {Object} The plotBand or plotLine configuration object - */ - addPlotBandOrLine: function (options, coll) { - var obj = new PlotLineOrBand(this, options).render(), - userOptions = this.userOptions; - - if (obj) { // #2189 - // Add it to the user options for exporting and Axis.update - if (coll) { - userOptions[coll] = userOptions[coll] || []; - userOptions[coll].push(options); - } - this.plotLinesAndBands.push(obj); - } - - return obj; - }, - - /** - * Remove a plot band or plot line from the chart by id - * @param {Object} id - */ - removePlotBandOrLine: function (id) { - var plotLinesAndBands = this.plotLinesAndBands, - options = this.options, - userOptions = this.userOptions, - i = plotLinesAndBands.length; - while (i--) { - if (plotLinesAndBands[i].id === id) { - plotLinesAndBands[i].destroy(); - } - } - each([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) { - i = arr.length; - while (i--) { - if (arr[i].id === id) { - erase(arr, arr[i]); - } - } - }); - } -}; - -/** - * Create a new axis object - * @param {Object} chart - * @param {Object} options - */ -function Axis() { - this.init.apply(this, arguments); -} - -Axis.prototype = { - - /** - * Default options for the X axis - the Y axis has extended defaults - */ - defaultOptions: { - // allowDecimals: null, - // alternateGridColor: null, - // categories: [], - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: '%b \'%y', - year: '%Y' - }, - endOnTick: false, - gridLineColor: '#C0C0C0', - // gridLineDashStyle: 'solid', - // gridLineWidth: 0, - // reversed: false, - - labels: defaultLabelOptions, - // { step: null }, - lineColor: '#C0D0E0', - lineWidth: 1, - //linkedTo: null, - //max: undefined, - //min: undefined, - minPadding: 0.01, - maxPadding: 0.01, - //minRange: null, - minorGridLineColor: '#E0E0E0', - // minorGridLineDashStyle: null, - minorGridLineWidth: 1, - minorTickColor: '#A0A0A0', - //minorTickInterval: null, - minorTickLength: 2, - minorTickPosition: 'outside', // inside or outside - //minorTickWidth: 0, - //opposite: false, - //offset: 0, - //plotBands: [{ - // events: {}, - // zIndex: 1, - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //plotLines: [{ - // events: {} - // dashStyle: {} - // zIndex: - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //reversed: false, - // showFirstLabel: true, - // showLastLabel: true, - startOfWeek: 1, - startOnTick: false, - tickColor: '#C0D0E0', - //tickInterval: null, - tickLength: 5, - tickmarkPlacement: 'between', // on or between - tickPixelInterval: 100, - tickPosition: 'outside', - tickWidth: 1, - title: { - //text: null, - align: 'middle', // low, middle or high - //margin: 0 for horizontal, 10 for vertical axes, - //rotation: 0, - //side: 'outside', - style: { - color: '#4d759e', - //font: defaultFont.replace('normal', 'bold') - fontWeight: 'bold' - } - //x: 0, - //y: 0 - }, - type: 'linear' // linear, logarithmic or datetime - }, - - /** - * This options set extends the defaultOptions for Y axes - */ - defaultYAxisOptions: { - endOnTick: true, - gridLineWidth: 1, - tickPixelInterval: 72, - showLastLabel: true, - labels: { - x: -8, - y: 3 - }, - lineWidth: 0, - maxPadding: 0.05, - minPadding: 0.05, - startOnTick: true, - tickWidth: 0, - title: { - rotation: 270, - text: 'Values' - }, - stackLabels: { - enabled: false, - //align: dynamic, - //y: dynamic, - //x: dynamic, - //verticalAlign: dynamic, - //textAlign: dynamic, - //rotation: 0, - formatter: function () { - return numberFormat(this.total, -1); - }, - style: defaultLabelOptions.style - } - }, - - /** - * These options extend the defaultOptions for left axes - */ - defaultLeftAxisOptions: { - labels: { - x: -8, - y: null - }, - title: { - rotation: 270 - } - }, - - /** - * These options extend the defaultOptions for right axes - */ - defaultRightAxisOptions: { - labels: { - x: 8, - y: null - }, - title: { - rotation: 90 - } - }, - - /** - * These options extend the defaultOptions for bottom axes - */ - defaultBottomAxisOptions: { - labels: { - x: 0, - y: 14 - // overflow: undefined, - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - /** - * These options extend the defaultOptions for left axes - */ - defaultTopAxisOptions: { - labels: { - x: 0, - y: -5 - // overflow: undefined - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - - /** - * Initialize the axis - */ - init: function (chart, userOptions) { - - - var isXAxis = userOptions.isX, - axis = this; - - // Flag, is the axis horizontal - axis.horiz = chart.inverted ? !isXAxis : isXAxis; - - // Flag, isXAxis - axis.isXAxis = isXAxis; - axis.coll = isXAxis ? 'xAxis' : 'yAxis'; - - axis.opposite = userOptions.opposite; // needed in setOptions - axis.side = userOptions.side || (axis.horiz ? - (axis.opposite ? 0 : 2) : // top : bottom - (axis.opposite ? 1 : 3)); // right : left - - axis.setOptions(userOptions); - - - var options = this.options, - type = options.type, - isDatetimeAxis = type === 'datetime'; - - axis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format - - - // Flag, stagger lines or not - axis.userOptions = userOptions; - - //axis.axisTitleMargin = UNDEFINED,// = options.title.margin, - axis.minPixelPadding = 0; - //axis.ignoreMinPadding = UNDEFINED; // can be set to true by a column or bar series - //axis.ignoreMaxPadding = UNDEFINED; - - axis.chart = chart; - axis.reversed = options.reversed; - axis.zoomEnabled = options.zoomEnabled !== false; - - // Initial categories - axis.categories = options.categories || type === 'category'; - axis.names = []; - - // Elements - //axis.axisGroup = UNDEFINED; - //axis.gridGroup = UNDEFINED; - //axis.axisTitle = UNDEFINED; - //axis.axisLine = UNDEFINED; - - // Shorthand types - axis.isLog = type === 'logarithmic'; - axis.isDatetimeAxis = isDatetimeAxis; - - // Flag, if axis is linked to another axis - axis.isLinked = defined(options.linkedTo); - // Linked axis. - //axis.linkedParent = UNDEFINED; - - // Tick positions - //axis.tickPositions = UNDEFINED; // array containing predefined positions - // Tick intervals - //axis.tickInterval = UNDEFINED; - //axis.minorTickInterval = UNDEFINED; - - axis.tickmarkOffset = (axis.categories && options.tickmarkPlacement === 'between') ? 0.5 : 0; - - // Major ticks - axis.ticks = {}; - axis.labelEdge = []; - // Minor ticks - axis.minorTicks = {}; - //axis.tickAmount = UNDEFINED; - - // List of plotLines/Bands - axis.plotLinesAndBands = []; - - // Alternate bands - axis.alternateBands = {}; - - // Axis metrics - //axis.left = UNDEFINED; - //axis.top = UNDEFINED; - //axis.width = UNDEFINED; - //axis.height = UNDEFINED; - //axis.bottom = UNDEFINED; - //axis.right = UNDEFINED; - //axis.transA = UNDEFINED; - //axis.transB = UNDEFINED; - //axis.oldTransA = UNDEFINED; - axis.len = 0; - //axis.oldMin = UNDEFINED; - //axis.oldMax = UNDEFINED; - //axis.oldUserMin = UNDEFINED; - //axis.oldUserMax = UNDEFINED; - //axis.oldAxisLength = UNDEFINED; - axis.minRange = axis.userMinRange = options.minRange || options.maxZoom; - axis.range = options.range; - axis.offset = options.offset || 0; - - - // Dictionary for stacks - axis.stacks = {}; - axis.oldStacks = {}; - - // Dictionary for stacks max values - axis.stackExtremes = {}; - - // Min and max in the data - //axis.dataMin = UNDEFINED, - //axis.dataMax = UNDEFINED, - - // The axis range - axis.max = null; - axis.min = null; - - // User set min and max - //axis.userMin = UNDEFINED, - //axis.userMax = UNDEFINED, - - // Crosshair options - axis.crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1], false); - // Run Axis - - var eventType, - events = axis.options.events; - - // Register - if (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update() - chart.axes.push(axis); - chart[axis.coll].push(axis); - } - - axis.series = axis.series || []; // populated by Series - - // inverted charts have reversed xAxes as default - if (chart.inverted && isXAxis && axis.reversed === UNDEFINED) { - axis.reversed = true; - } - - axis.removePlotBand = axis.removePlotBandOrLine; - axis.removePlotLine = axis.removePlotBandOrLine; - - - // register event listeners - for (eventType in events) { - addEvent(axis, eventType, events[eventType]); - } - - // extend logarithmic axis - if (axis.isLog) { - axis.val2lin = log2lin; - axis.lin2val = lin2log; - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - this.options = merge( - this.defaultOptions, - this.isXAxis ? {} : this.defaultYAxisOptions, - [this.defaultTopAxisOptions, this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side], - merge( - defaultOptions[this.coll], // if set in setOptions (#1053) - userOptions - ) - ); - }, - - /** - * The default label formatter. The context is a special config object for the label. - */ - defaultLabelFormatter: function () { - var axis = this.axis, - value = this.value, - categories = axis.categories, - dateTimeLabelFormat = this.dateTimeLabelFormat, - numericSymbols = defaultOptions.lang.numericSymbols, - i = numericSymbols && numericSymbols.length, - multi, - ret, - formatOption = axis.options.labels.format, - - // make sure the same symbol is added for all labels on a linear axis - numericSymbolDetector = axis.isLog ? value : axis.tickInterval; - - if (formatOption) { - ret = format(formatOption, this); - - } else if (categories) { - ret = value; - - } else if (dateTimeLabelFormat) { // datetime axis - ret = dateFormat(dateTimeLabelFormat, value); - - } else if (i && numericSymbolDetector >= 1000) { - // Decide whether we should add a numeric symbol like k (thousands) or M (millions). - // If we are to enable this in tooltip or other places as well, we can move this - // logic to the numberFormatter and enable it by a parameter. - while (i-- && ret === UNDEFINED) { - multi = Math.pow(1000, i + 1); - if (numericSymbolDetector >= multi && numericSymbols[i] !== null) { - ret = numberFormat(value / multi, -1) + numericSymbols[i]; - } - } - } - - if (ret === UNDEFINED) { - if (value >= 10000) { // add thousands separators - ret = numberFormat(value, 0); - - } else { // small numbers - ret = numberFormat(value, -1, UNDEFINED, ''); // #2466 - } - } - - return ret; - }, - - /** - * Get the minimum and maximum for the series of each axis - */ - getSeriesExtremes: function () { - var axis = this, - chart = axis.chart; - - axis.hasVisibleSeries = false; - - // reset dataMin and dataMax in case we're redrawing - axis.dataMin = axis.dataMax = null; - - // reset cached stacking extremes - axis.stackExtremes = {}; - - axis.buildStacks(); - - // loop through this axis' series - each(axis.series, function (series) { - - if (series.visible || !chart.options.chart.ignoreHiddenSeries) { - - var seriesOptions = series.options, - xData, - threshold = seriesOptions.threshold, - seriesDataMin, - seriesDataMax; - - axis.hasVisibleSeries = true; - - // Validate threshold in logarithmic axes - if (axis.isLog && threshold <= 0) { - threshold = null; - } - - // Get dataMin and dataMax for X axes - if (axis.isXAxis) { - xData = series.xData; - if (xData.length) { - axis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData)); - axis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData)); - } - - // Get dataMin and dataMax for Y axes, as well as handle stacking and processed data - } else { - - // Get this particular series extremes - series.getExtremes(); - seriesDataMax = series.dataMax; - seriesDataMin = series.dataMin; - - // Get the dataMin and dataMax so far. If percentage is used, the min and max are - // always 0 and 100. If seriesDataMin and seriesDataMax is null, then series - // doesn't have active y data, we continue with nulls - if (defined(seriesDataMin) && defined(seriesDataMax)) { - axis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin); - axis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax); - } - - // Adjust to threshold - if (defined(threshold)) { - if (axis.dataMin >= threshold) { - axis.dataMin = threshold; - axis.ignoreMinPadding = true; - } else if (axis.dataMax < threshold) { - axis.dataMax = threshold; - axis.ignoreMaxPadding = true; - } - } - } - } - }); - }, - - /** - * Translate from axis value to pixel position on the chart, or back - * - */ - translate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) { - var axis = this, - axisLength = axis.len, - sign = 1, - cvsOffset = 0, - localA = old ? axis.oldTransA : axis.transA, - localMin = old ? axis.oldMin : axis.min, - returnValue, - minPixelPadding = axis.minPixelPadding, - postTranslate = (axis.options.ordinal || (axis.isLog && handleLog)) && axis.lin2val; - - if (!localA) { - localA = axis.transA; - } - - // In vertical axes, the canvas coordinates start from 0 at the top like in - // SVG. - if (cvsCoord) { - sign *= -1; // canvas coordinates inverts the value - cvsOffset = axisLength; - } - - // Handle reversed axis - if (axis.reversed) { - sign *= -1; - cvsOffset -= sign * axisLength; - } - - // From pixels to value - if (backwards) { // reverse translation - - val = val * sign + cvsOffset; - val -= minPixelPadding; - returnValue = val / localA + localMin; // from chart pixel to value - if (postTranslate) { // log and ordinal axes - returnValue = axis.lin2val(returnValue); - } - - // From value to pixels - } else { - if (postTranslate) { // log and ordinal axes - val = axis.val2lin(val); - } - if (pointPlacement === 'between') { - pointPlacement = 0.5; - } - returnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) + - (isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0); - } - - return returnValue; - }, - - /** - * Utility method to translate an axis value to pixel position. - * @param {Number} value A value in terms of axis units - * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart - * or just the axis/pane itself. - */ - toPixels: function (value, paneCoordinates) { - return this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos); - }, - - /* - * Utility method to translate a pixel position in to an axis value - * @param {Number} pixel The pixel value coordinate - * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the - * axis/pane itself. - */ - toValue: function (pixel, paneCoordinates) { - return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true); - }, - - /** - * Create the path for a plot line that goes from the given value on - * this axis, across the plot to the opposite side - * @param {Number} value - * @param {Number} lineWidth Used for calculation crisp line - * @param {Number] old Use old coordinates (for resizing and rescaling) - */ - getPlotLinePath: function (value, lineWidth, old, force, translatedValue) { - var axis = this, - chart = axis.chart, - axisLeft = axis.left, - axisTop = axis.top, - x1, - y1, - x2, - y2, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight, - cWidth = (old && chart.oldChartWidth) || chart.chartWidth, - skip, - transB = axis.transB; - - translatedValue = pick(translatedValue, axis.translate(value, null, null, old)); - x1 = x2 = mathRound(translatedValue + transB); - y1 = y2 = mathRound(cHeight - translatedValue - transB); - - if (isNaN(translatedValue)) { // no min or max - skip = true; - - } else if (axis.horiz) { - y1 = axisTop; - y2 = cHeight - axis.bottom; - if (x1 < axisLeft || x1 > axisLeft + axis.width) { - skip = true; - } - } else { - x1 = axisLeft; - x2 = cWidth - axis.right; - - if (y1 < axisTop || y1 > axisTop + axis.height) { - skip = true; - } - } - return skip && !force ? - null : - chart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 1); - }, - - /** - * Set the tick positions of a linear axis to round values like whole tens or every five. - */ - getLinearTickPositions: function (tickInterval, min, max) { - var pos, - lastPos, - roundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval), - roundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval), - tickPositions = []; - - // Populate the intermediate values - pos = roundedMin; - while (pos <= roundedMax) { - - // Place the tick on the rounded value - tickPositions.push(pos); - - // Always add the raw tickInterval, not the corrected one. - pos = correctFloat(pos + tickInterval); - - // If the interval is not big enough in the current min - max range to actually increase - // the loop variable, we need to break out to prevent endless loop. Issue #619 - if (pos === lastPos) { - break; - } - - // Record the last value - lastPos = pos; - } - return tickPositions; - }, - - /** - * Return the minor tick positions. For logarithmic axes, reuse the same logic - * as for major ticks. - */ - getMinorTickPositions: function () { - var axis = this, - options = axis.options, - tickPositions = axis.tickPositions, - minorTickInterval = axis.minorTickInterval, - minorTickPositions = [], - pos, - i, - len; - - if (axis.isLog) { - len = tickPositions.length; - for (i = 1; i < len; i++) { - minorTickPositions = minorTickPositions.concat( - axis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true) - ); - } - } else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314 - minorTickPositions = minorTickPositions.concat( - axis.getTimeTicks( - axis.normalizeTimeTickInterval(minorTickInterval), - axis.min, - axis.max, - options.startOfWeek - ) - ); - if (minorTickPositions[0] < axis.min) { - minorTickPositions.shift(); - } - } else { - for (pos = axis.min + (tickPositions[0] - axis.min) % minorTickInterval; pos <= axis.max; pos += minorTickInterval) { - minorTickPositions.push(pos); - } - } - return minorTickPositions; - }, - - /** - * Adjust the min and max for the minimum range. Keep in mind that the series data is - * not yet processed, so we don't have information on data cropping and grouping, or - * updated axis.pointRange or series.pointRange. The data can't be processed until - * we have finally established min and max. - */ - adjustForMinRange: function () { - var axis = this, - options = axis.options, - min = axis.min, - max = axis.max, - zoomOffset, - spaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange, - closestDataRange, - i, - distance, - xData, - loopLength, - minArgs, - maxArgs; - - // Set the automatic minimum range based on the closest point distance - if (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) { - - if (defined(options.min) || defined(options.max)) { - axis.minRange = null; // don't do this again - - } else { - - // Find the closest distance between raw data points, as opposed to - // closestPointRange that applies to processed points (cropped and grouped) - each(axis.series, function (series) { - xData = series.xData; - loopLength = series.xIncrement ? 1 : xData.length - 1; - for (i = loopLength; i > 0; i--) { - distance = xData[i] - xData[i - 1]; - if (closestDataRange === UNDEFINED || distance < closestDataRange) { - closestDataRange = distance; - } - } - }); - axis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin); - } - } - - // if minRange is exceeded, adjust - if (max - min < axis.minRange) { - var minRange = axis.minRange; - zoomOffset = (minRange - max + min) / 2; - - // if min and max options have been set, don't go beyond it - minArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)]; - if (spaceAvailable) { // if space is available, stay within the data range - minArgs[2] = axis.dataMin; - } - min = arrayMax(minArgs); - - maxArgs = [min + minRange, pick(options.max, min + minRange)]; - if (spaceAvailable) { // if space is availabe, stay within the data range - maxArgs[2] = axis.dataMax; - } - - max = arrayMin(maxArgs); - - // now if the max is adjusted, adjust the min back - if (max - min < minRange) { - minArgs[0] = max - minRange; - minArgs[1] = pick(options.min, max - minRange); - min = arrayMax(minArgs); - } - } - - // Record modified extremes - axis.min = min; - axis.max = max; - }, - - /** - * Update translation information - */ - setAxisTranslation: function (saveOld) { - var axis = this, - range = axis.max - axis.min, - pointRange = 0, - closestPointRange, - minPointOffset = 0, - pointRangePadding = 0, - linkedParent = axis.linkedParent, - ordinalCorrection, - hasCategories = !!axis.categories, - transA = axis.transA; - - // Adjust translation for padding. Y axis with categories need to go through the same (#1784). - if (axis.isXAxis || hasCategories) { - if (linkedParent) { - minPointOffset = linkedParent.minPointOffset; - pointRangePadding = linkedParent.pointRangePadding; - - } else { - each(axis.series, function (series) { - var seriesPointRange = mathMax(series.pointRange, +hasCategories), - pointPlacement = series.options.pointPlacement, - seriesClosestPointRange = series.closestPointRange; - - if (seriesPointRange > range) { // #1446 - seriesPointRange = 0; - } - pointRange = mathMax(pointRange, seriesPointRange); - - // minPointOffset is the value padding to the left of the axis in order to make - // room for points with a pointRange, typically columns. When the pointPlacement option - // is 'between' or 'on', this padding does not apply. - minPointOffset = mathMax( - minPointOffset, - isString(pointPlacement) ? 0 : seriesPointRange / 2 - ); - - // Determine the total padding needed to the length of the axis to make room for the - // pointRange. If the series' pointPlacement is 'on', no padding is added. - pointRangePadding = mathMax( - pointRangePadding, - pointPlacement === 'on' ? 0 : seriesPointRange - ); - - // Set the closestPointRange - if (!series.noSharedTooltip && defined(seriesClosestPointRange)) { - closestPointRange = defined(closestPointRange) ? - mathMin(closestPointRange, seriesClosestPointRange) : - seriesClosestPointRange; - } - }); - } - - // Record minPointOffset and pointRangePadding - ordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853 - axis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection; - axis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection; - - // pointRange means the width reserved for each point, like in a column chart - axis.pointRange = mathMin(pointRange, range); - - // closestPointRange means the closest distance between points. In columns - // it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange - // is some other value - axis.closestPointRange = closestPointRange; - } - - // Secondary values - if (saveOld) { - axis.oldTransA = transA; - } - axis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1); - axis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend - axis.minPixelPadding = transA * minPointOffset; - }, - - /** - * Set the tick positions to round values and optionally extend the extremes - * to the nearest tick - */ - setTickPositions: function (secondPass) { - var axis = this, - chart = axis.chart, - options = axis.options, - isLog = axis.isLog, - isDatetimeAxis = axis.isDatetimeAxis, - isXAxis = axis.isXAxis, - isLinked = axis.isLinked, - tickPositioner = axis.options.tickPositioner, - maxPadding = options.maxPadding, - minPadding = options.minPadding, - length, - linkedParentExtremes, - tickIntervalOption = options.tickInterval, - minTickIntervalOption = options.minTickInterval, - tickPixelIntervalOption = options.tickPixelInterval, - tickPositions, - keepTwoTicksOnly, - categories = axis.categories; - - // linked axis gets the extremes from the parent axis - if (isLinked) { - axis.linkedParent = chart[axis.coll][options.linkedTo]; - linkedParentExtremes = axis.linkedParent.getExtremes(); - axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin); - axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax); - if (options.type !== axis.linkedParent.options.type) { - error(11, 1); // Can't link axes of different type - } - } else { // initial min and max from the extreme data values - axis.min = pick(axis.userMin, options.min, axis.dataMin); - axis.max = pick(axis.userMax, options.max, axis.dataMax); - } - - if (isLog) { - if (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978 - error(10, 1); // Can't plot negative values on log axis - } - axis.min = correctFloat(log2lin(axis.min)); // correctFloat cures #934 - axis.max = correctFloat(log2lin(axis.max)); - } - - // handle zoomed range - if (axis.range && defined(axis.max)) { - axis.userMin = axis.min = mathMax(axis.min, axis.max - axis.range); // #618 - axis.userMax = axis.max; - - axis.range = null; // don't use it when running setExtremes - } - - // Hook for adjusting this.min and this.max. Used by bubble series. - if (axis.beforePadding) { - axis.beforePadding(); - } - - // adjust min and max for the minimum range - axis.adjustForMinRange(); - - // Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding - // into account, we do this after computing tick interval (#1337). - if (!categories && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) { - length = axis.max - axis.min; - if (length) { - if (!defined(options.min) && !defined(axis.userMin) && minPadding && (axis.dataMin < 0 || !axis.ignoreMinPadding)) { - axis.min -= length * minPadding; - } - if (!defined(options.max) && !defined(axis.userMax) && maxPadding && (axis.dataMax > 0 || !axis.ignoreMaxPadding)) { - axis.max += length * maxPadding; - } - } - } - - // get tickInterval - if (axis.min === axis.max || axis.min === undefined || axis.max === undefined) { - axis.tickInterval = 1; - } else if (isLinked && !tickIntervalOption && - tickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) { - axis.tickInterval = axis.linkedParent.tickInterval; - } else { - axis.tickInterval = pick( - tickIntervalOption, - categories ? // for categoried axis, 1 is default, for linear axis use tickPix - 1 : - // don't let it be more than the data range - (axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption) - ); - // For squished axes, set only two ticks - if (!defined(tickIntervalOption) && axis.len < tickPixelIntervalOption && !this.isRadial && - !categories && options.startOnTick && options.endOnTick) { - keepTwoTicksOnly = true; - axis.tickInterval /= 4; // tick extremes closer to the real values - } - } - - // Now we're finished detecting min and max, crop and group series data. This - // is in turn needed in order to find tick positions in ordinal axes. - if (isXAxis && !secondPass) { - each(axis.series, function (series) { - series.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax); - }); - } - - // set the translation factor used in translate function - axis.setAxisTranslation(true); - - // hook for ordinal axes and radial axes - if (axis.beforeSetTickPositions) { - axis.beforeSetTickPositions(); - } - - // hook for extensions, used in Highstock ordinal axes - if (axis.postProcessTickInterval) { - axis.tickInterval = axis.postProcessTickInterval(axis.tickInterval); - } - - // In column-like charts, don't cramp in more ticks than there are points (#1943) - if (axis.pointRange) { - axis.tickInterval = mathMax(axis.pointRange, axis.tickInterval); - } - - // Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined. - if (!tickIntervalOption && axis.tickInterval < minTickIntervalOption) { - axis.tickInterval = minTickIntervalOption; - } - - // for linear axes, get magnitude and normalize the interval - if (!isDatetimeAxis && !isLog) { // linear - if (!tickIntervalOption) { - axis.tickInterval = normalizeTickInterval(axis.tickInterval, null, getMagnitude(axis.tickInterval), options); - } - } - - // get minorTickInterval - axis.minorTickInterval = options.minorTickInterval === 'auto' && axis.tickInterval ? - axis.tickInterval / 5 : options.minorTickInterval; - - // find the tick positions - axis.tickPositions = tickPositions = options.tickPositions ? - [].concat(options.tickPositions) : // Work on a copy (#1565) - (tickPositioner && tickPositioner.apply(axis, [axis.min, axis.max])); - if (!tickPositions) { - - // Too many ticks - if (!axis.ordinalPositions && (axis.max - axis.min) / axis.tickInterval > mathMax(2 * axis.len, 200)) { - error(19, true); - } - - if (isDatetimeAxis) { - tickPositions = axis.getTimeTicks( - axis.normalizeTimeTickInterval(axis.tickInterval, options.units), - axis.min, - axis.max, - options.startOfWeek, - axis.ordinalPositions, - axis.closestPointRange, - true - ); - } else if (isLog) { - tickPositions = axis.getLogTickPositions(axis.tickInterval, axis.min, axis.max); - } else { - tickPositions = axis.getLinearTickPositions(axis.tickInterval, axis.min, axis.max); - } - - if (keepTwoTicksOnly) { - tickPositions.splice(1, tickPositions.length - 2); - } - - axis.tickPositions = tickPositions; - } - - if (!isLinked) { - - // reset min/max or remove extremes based on start/end on tick - var roundedMin = tickPositions[0], - roundedMax = tickPositions[tickPositions.length - 1], - minPointOffset = axis.minPointOffset || 0, - singlePad; - - if (options.startOnTick) { - axis.min = roundedMin; - } else if (axis.min - minPointOffset > roundedMin) { - tickPositions.shift(); - } - - if (options.endOnTick) { - axis.max = roundedMax; - } else if (axis.max + minPointOffset < roundedMax) { - tickPositions.pop(); - } - - // When there is only one point, or all points have the same value on this axis, then min - // and max are equal and tickPositions.length is 1. In this case, add some padding - // in order to center the point, but leave it with one tick. #1337. - if (tickPositions.length === 1) { - singlePad = 0.001; // The lowest possible number to avoid extra padding on columns - axis.min -= singlePad; - axis.max += singlePad; - } - } - }, - - /** - * Set the max ticks of either the x and y axis collection - */ - setMaxTicks: function () { - - var chart = this.chart, - maxTicks = chart.maxTicks || {}, - tickPositions = this.tickPositions, - key = this._maxTicksKey = [this.coll, this.pos, this.len].join('-'); - - if (!this.isLinked && !this.isDatetimeAxis && tickPositions && tickPositions.length > (maxTicks[key] || 0) && this.options.alignTicks !== false) { - maxTicks[key] = tickPositions.length; - } - chart.maxTicks = maxTicks; - }, - - /** - * When using multiple axes, adjust the number of ticks to match the highest - * number of ticks in that group - */ - adjustTickAmount: function () { - var axis = this, - chart = axis.chart, - key = axis._maxTicksKey, - tickPositions = axis.tickPositions, - maxTicks = chart.maxTicks; - - if (maxTicks && maxTicks[key] && !axis.isDatetimeAxis && !axis.categories && !axis.isLinked && - axis.options.alignTicks !== false && this.min !== UNDEFINED) { - var oldTickAmount = axis.tickAmount, - calculatedTickAmount = tickPositions.length, - tickAmount; - - // set the axis-level tickAmount to use below - axis.tickAmount = tickAmount = maxTicks[key]; - - if (calculatedTickAmount < tickAmount) { - while (tickPositions.length < tickAmount) { - tickPositions.push(correctFloat( - tickPositions[tickPositions.length - 1] + axis.tickInterval - )); - } - axis.transA *= (calculatedTickAmount - 1) / (tickAmount - 1); - axis.max = tickPositions[tickPositions.length - 1]; - - } - if (defined(oldTickAmount) && tickAmount !== oldTickAmount) { - axis.isDirty = true; - } - } - }, - - /** - * Set the scale based on data min and max, user set min and max or options - * - */ - setScale: function () { - var axis = this, - stacks = axis.stacks, - type, - i, - isDirtyData, - isDirtyAxisLength; - - axis.oldMin = axis.min; - axis.oldMax = axis.max; - axis.oldAxisLength = axis.len; - - // set the new axisLength - axis.setAxisSize(); - //axisLength = horiz ? axisWidth : axisHeight; - isDirtyAxisLength = axis.len !== axis.oldAxisLength; - - // is there new data? - each(axis.series, function (series) { - if (series.isDirtyData || series.isDirty || - series.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well - isDirtyData = true; - } - }); - - // do we really need to go through all this? - if (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw || - axis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax) { - - // reset stacks - if (!axis.isXAxis) { - for (type in stacks) { - for (i in stacks[type]) { - stacks[type][i].total = null; - stacks[type][i].cum = 0; - } - } - } - - axis.forceRedraw = false; - - // get data extremes if needed - axis.getSeriesExtremes(); - - // get fixed positions based on tickInterval - axis.setTickPositions(); - - // record old values to decide whether a rescale is necessary later on (#540) - axis.oldUserMin = axis.userMin; - axis.oldUserMax = axis.userMax; - - // Mark as dirty if it is not already set to dirty and extremes have changed. #595. - if (!axis.isDirty) { - axis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax; - } - } else if (!axis.isXAxis) { - if (axis.oldStacks) { - stacks = axis.stacks = axis.oldStacks; - } - - // reset stacks - for (type in stacks) { - for (i in stacks[type]) { - stacks[type][i].cum = stacks[type][i].total; - } - } - } - - // Set the maximum tick amount - axis.setMaxTicks(); - }, - - /** - * Set the extremes and optionally redraw - * @param {Number} newMin - * @param {Number} newMax - * @param {Boolean} redraw - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * @param {Object} eventArguments - * - */ - setExtremes: function (newMin, newMax, redraw, animation, eventArguments) { - var axis = this, - chart = axis.chart; - - redraw = pick(redraw, true); // defaults to true - - // Extend the arguments with min and max - eventArguments = extend(eventArguments, { - min: newMin, - max: newMax - }); - - // Fire the event - fireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler - - axis.userMin = newMin; - axis.userMax = newMax; - axis.eventArgs = eventArguments; - - // Mark for running afterSetExtremes - axis.isDirtyExtremes = true; - - // redraw - if (redraw) { - chart.redraw(animation); - } - }); - }, - - /** - * Overridable method for zooming chart. Pulled out in a separate method to allow overriding - * in stock charts. - */ - zoom: function (newMin, newMax) { - - // Prevent pinch zooming out of range. Check for defined is for #1946. - if (!this.allowZoomOutside) { - if (defined(this.dataMin) && newMin <= this.dataMin) { - newMin = UNDEFINED; - } - if (defined(this.dataMax) && newMax >= this.dataMax) { - newMax = UNDEFINED; - } - } - - // In full view, displaying the reset zoom button is not required - this.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED; - - // Do it - this.setExtremes( - newMin, - newMax, - false, - UNDEFINED, - { trigger: 'zoom' } - ); - return true; - }, - - /** - * Update the axis metrics - */ - setAxisSize: function () { - var chart = this.chart, - options = this.options, - offsetLeft = options.offsetLeft || 0, - offsetRight = options.offsetRight || 0, - horiz = this.horiz, - width, - height, - top, - left; - - // Expose basic values to use in Series object and navigator - this.left = left = pick(options.left, chart.plotLeft + offsetLeft); - this.top = top = pick(options.top, chart.plotTop); - this.width = width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight); - this.height = height = pick(options.height, chart.plotHeight); - this.bottom = chart.chartHeight - height - top; - this.right = chart.chartWidth - width - left; - - // Direction agnostic properties - this.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905 - this.pos = horiz ? left : top; // distance from SVG origin - }, - - /** - * Get the actual axis extremes - */ - getExtremes: function () { - var axis = this, - isLog = axis.isLog; - - return { - min: isLog ? correctFloat(lin2log(axis.min)) : axis.min, - max: isLog ? correctFloat(lin2log(axis.max)) : axis.max, - dataMin: axis.dataMin, - dataMax: axis.dataMax, - userMin: axis.userMin, - userMax: axis.userMax - }; - }, - - /** - * Get the zero plane either based on zero or on the min or max value. - * Used in bar and area plots - */ - getThreshold: function (threshold) { - var axis = this, - isLog = axis.isLog; - - var realMin = isLog ? lin2log(axis.min) : axis.min, - realMax = isLog ? lin2log(axis.max) : axis.max; - - if (realMin > threshold || threshold === null) { - threshold = realMin; - } else if (realMax < threshold) { - threshold = realMax; - } - - return axis.translate(threshold, 0, 1, 0, 1); - }, - - /** - * Compute auto alignment for the axis label based on which side the axis is on - * and the given rotation for the label - */ - autoLabelAlign: function (rotation) { - var ret, - angle = (pick(rotation, 0) - (this.side * 90) + 720) % 360; - - if (angle > 15 && angle < 165) { - ret = 'right'; - } else if (angle > 195 && angle < 345) { - ret = 'left'; - } else { - ret = 'center'; - } - return ret; - }, - - /** - * Render the tick labels to a preliminary position to get their sizes - */ - getOffset: function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - tickPositions = axis.tickPositions, - ticks = axis.ticks, - horiz = axis.horiz, - side = axis.side, - invertedSide = chart.inverted ? [1, 0, 3, 2][side] : side, - hasData, - showAxis, - titleOffset = 0, - titleOffsetOption, - titleMargin = 0, - axisTitleOptions = options.title, - labelOptions = options.labels, - labelOffset = 0, // reset - axisOffset = chart.axisOffset, - clipOffset = chart.clipOffset, - directionFactor = [-1, 1, 1, -1][side], - n, - i, - autoStaggerLines = 1, - maxStaggerLines = pick(labelOptions.maxStaggerLines, 5), - sortedPositions, - lastRight, - overlap, - pos, - bBox, - x, - w, - lineNo; - - // For reuse in Axis.render - axis.hasData = hasData = (axis.hasVisibleSeries || (defined(axis.min) && defined(axis.max) && !!tickPositions)); - axis.showAxis = showAxis = hasData || pick(options.showEmpty, true); - - // Set/reset staggerLines - axis.staggerLines = axis.horiz && labelOptions.staggerLines; - - // Create the axisGroup and gridGroup elements on first iteration - if (!axis.axisGroup) { - axis.gridGroup = renderer.g('grid') - .attr({ zIndex: options.gridZIndex || 1 }) - .add(); - axis.axisGroup = renderer.g('axis') - .attr({ zIndex: options.zIndex || 2 }) - .add(); - axis.labelGroup = renderer.g('axis-labels') - .attr({ zIndex: labelOptions.zIndex || 7 }) - .add(); - } - - if (hasData || axis.isLinked) { - - // Set the explicit or automatic label alignment - axis.labelAlign = pick(labelOptions.align || axis.autoLabelAlign(labelOptions.rotation)); - - // Generate ticks - each(tickPositions, function (pos) { - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } else { - ticks[pos].addLabel(); // update labels depending on tick interval - } - }); - - // Handle automatic stagger lines - if (axis.horiz && !axis.staggerLines && maxStaggerLines && !labelOptions.rotation) { - sortedPositions = axis.reversed ? [].concat(tickPositions).reverse() : tickPositions; - while (autoStaggerLines < maxStaggerLines) { - lastRight = []; - overlap = false; - - for (i = 0; i < sortedPositions.length; i++) { - pos = sortedPositions[i]; - bBox = ticks[pos].label && ticks[pos].label.getBBox(); - w = bBox ? bBox.width : 0; - lineNo = i % autoStaggerLines; - - if (w) { - x = axis.translate(pos); // don't handle log - if (lastRight[lineNo] !== UNDEFINED && x < lastRight[lineNo]) { - overlap = true; - } - lastRight[lineNo] = x + w; - } - } - if (overlap) { - autoStaggerLines++; - } else { - break; - } - } - - if (autoStaggerLines > 1) { - axis.staggerLines = autoStaggerLines; - } - } - - - each(tickPositions, function (pos) { - // left side must be align: right and right side must have align: left for labels - if (side === 0 || side === 2 || { 1: 'left', 3: 'right' }[side] === axis.labelAlign) { - - // get the highest offset - labelOffset = mathMax( - ticks[pos].getLabelSize(), - labelOffset - ); - } - - }); - if (axis.staggerLines) { - labelOffset *= axis.staggerLines; - axis.labelOffset = labelOffset; - } - - - } else { // doesn't have data - for (n in ticks) { - ticks[n].destroy(); - delete ticks[n]; - } - } - - if (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { - if (!axis.axisTitle) { - axis.axisTitle = renderer.text( - axisTitleOptions.text, - 0, - 0, - axisTitleOptions.useHTML - ) - .attr({ - zIndex: 7, - rotation: axisTitleOptions.rotation || 0, - align: - axisTitleOptions.textAlign || - { low: 'left', middle: 'center', high: 'right' }[axisTitleOptions.align] - }) - .css(axisTitleOptions.style) - .add(axis.axisGroup); - axis.axisTitle.isNew = true; - } - - if (showAxis) { - titleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width']; - titleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10); - titleOffsetOption = axisTitleOptions.offset; - } - - // hide or show the title depending on whether showEmpty is set - axis.axisTitle[showAxis ? 'show' : 'hide'](); - } - - // handle automatic or user set offset - axis.offset = directionFactor * pick(options.offset, axisOffset[side]); - - axis.axisTitleMargin = - pick(titleOffsetOption, - labelOffset + titleMargin + - (side !== 2 && labelOffset && directionFactor * options.labels[horiz ? 'y' : 'x']) - ); - - axisOffset[side] = mathMax( - axisOffset[side], - axis.axisTitleMargin + titleOffset + directionFactor * axis.offset - ); - clipOffset[invertedSide] = mathMax(clipOffset[invertedSide], mathFloor(options.lineWidth / 2) * 2); - }, - - /** - * Get the path for the axis line - */ - getLinePath: function (lineWidth) { - var chart = this.chart, - opposite = this.opposite, - offset = this.offset, - horiz = this.horiz, - lineLeft = this.left + (opposite ? this.width : 0) + offset, - lineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset; - - if (opposite) { - lineWidth *= -1; // crispify the other way - #1480, #1687 - } - - return chart.renderer.crispLine([ - M, - horiz ? - this.left : - lineLeft, - horiz ? - lineTop : - this.top, - L, - horiz ? - chart.chartWidth - this.right : - lineLeft, - horiz ? - lineTop : - chart.chartHeight - this.bottom - ], lineWidth); - }, - - /** - * Position the title - */ - getTitlePosition: function () { - // compute anchor points for each of the title align options - var horiz = this.horiz, - axisLeft = this.left, - axisTop = this.top, - axisLength = this.len, - axisTitleOptions = this.options.title, - margin = horiz ? axisLeft : axisTop, - opposite = this.opposite, - offset = this.offset, - fontSize = pInt(axisTitleOptions.style.fontSize || 12), - - // the position in the length direction of the axis - alongAxis = { - low: margin + (horiz ? 0 : axisLength), - middle: margin + axisLength / 2, - high: margin + (horiz ? axisLength : 0) - }[axisTitleOptions.align], - - // the position in the perpendicular direction of the axis - offAxis = (horiz ? axisTop + this.height : axisLeft) + - (horiz ? 1 : -1) * // horizontal axis reverses the margin - (opposite ? -1 : 1) * // so does opposite axes - this.axisTitleMargin + - (this.side === 2 ? fontSize : 0); - - return { - x: horiz ? - alongAxis : - offAxis + (opposite ? this.width : 0) + offset + - (axisTitleOptions.x || 0), // x - y: horiz ? - offAxis - (opposite ? this.height : 0) + offset : - alongAxis + (axisTitleOptions.y || 0) // y - }; - }, - - /** - * Render the axis - */ - render: function () { - var axis = this, - horiz = axis.horiz, - reversed = axis.reversed, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - isLog = axis.isLog, - isLinked = axis.isLinked, - tickPositions = axis.tickPositions, - sortedPositions, - axisTitle = axis.axisTitle, - stacks = axis.stacks, - ticks = axis.ticks, - minorTicks = axis.minorTicks, - alternateBands = axis.alternateBands, - stackLabelOptions = options.stackLabels, - alternateGridColor = options.alternateGridColor, - tickmarkOffset = axis.tickmarkOffset, - lineWidth = options.lineWidth, - linePath, - hasRendered = chart.hasRendered, - slideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin), - hasData = axis.hasData, - showAxis = axis.showAxis, - from, - justifyLabels = axis.justifyLabels = !axis.staggerLines && horiz && options.labels.overflow === 'justify', - to; - - // Reset - axis.labelEdge.length = 0; - - // Mark all elements inActive before we go over and mark the active ones - each([ticks, minorTicks, alternateBands], function (coll) { - var pos; - for (pos in coll) { - coll[pos].isActive = false; - } - }); - - // If the series has data draw the ticks. Else only the line and title - if (hasData || isLinked) { - - // minor ticks - if (axis.minorTickInterval && !axis.categories) { - each(axis.getMinorTickPositions(), function (pos) { - if (!minorTicks[pos]) { - minorTicks[pos] = new Tick(axis, pos, 'minor'); - } - - // render new ticks in old position - if (slideInTicks && minorTicks[pos].isNew) { - minorTicks[pos].render(null, true); - } - - minorTicks[pos].render(null, false, 1); - }); - } - - // Major ticks. Pull out the first item and render it last so that - // we can get the position of the neighbour label. #808. - if (tickPositions.length) { // #1300 - sortedPositions = tickPositions.slice(); - if ((horiz && reversed) || (!horiz && !reversed)) { - sortedPositions.reverse(); - } - if (justifyLabels) { - sortedPositions = sortedPositions.slice(1).concat([sortedPositions[0]]); - } - each(sortedPositions, function (pos, i) { - - // Reorganize the indices - if (justifyLabels) { - i = (i === sortedPositions.length - 1) ? 0 : i + 1; - } - - // linked axes need an extra check to find out if - if (!isLinked || (pos >= axis.min && pos <= axis.max)) { - - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } - - // render new ticks in old position - if (slideInTicks && ticks[pos].isNew) { - ticks[pos].render(i, true, 0.1); - } - - ticks[pos].render(i, false, 1); - } - - }); - // In a categorized axis, the tick marks are displayed between labels. So - // we need to add a tick mark and grid line at the left edge of the X axis. - if (tickmarkOffset && axis.min === 0) { - if (!ticks[-1]) { - ticks[-1] = new Tick(axis, -1, null, true); - } - ticks[-1].render(-1); - } - - } - - // alternate grid color - if (alternateGridColor) { - each(tickPositions, function (pos, i) { - if (i % 2 === 0 && pos < axis.max) { - if (!alternateBands[pos]) { - alternateBands[pos] = new PlotLineOrBand(axis); - } - from = pos + tickmarkOffset; // #949 - to = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max; - alternateBands[pos].options = { - from: isLog ? lin2log(from) : from, - to: isLog ? lin2log(to) : to, - color: alternateGridColor - }; - alternateBands[pos].render(); - alternateBands[pos].isActive = true; - } - }); - } - - // custom plot lines and bands - if (!axis._addedPlotLB) { // only first time - each((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) { - axis.addPlotBandOrLine(plotLineOptions); - }); - axis._addedPlotLB = true; - } - - } // end if hasData - - // Remove inactive ticks - each([ticks, minorTicks, alternateBands], function (coll) { - var pos, - i, - forDestruction = [], - delay = globalAnimation ? globalAnimation.duration || 500 : 0, - destroyInactiveItems = function () { - i = forDestruction.length; - while (i--) { - // When resizing rapidly, the same items may be destroyed in different timeouts, - // or the may be reactivated - if (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) { - coll[forDestruction[i]].destroy(); - delete coll[forDestruction[i]]; - } - } - - }; - - for (pos in coll) { - - if (!coll[pos].isActive) { - // Render to zero opacity - coll[pos].render(pos, false, 0); - coll[pos].isActive = false; - forDestruction.push(pos); - } - } - - // When the objects are finished fading out, destroy them - if (coll === alternateBands || !chart.hasRendered || !delay) { - destroyInactiveItems(); - } else if (delay) { - setTimeout(destroyInactiveItems, delay); - } - }); - - // Static items. As the axis group is cleared on subsequent calls - // to render, these items are added outside the group. - // axis line - if (lineWidth) { - linePath = axis.getLinePath(lineWidth); - if (!axis.axisLine) { - axis.axisLine = renderer.path(linePath) - .attr({ - stroke: options.lineColor, - 'stroke-width': lineWidth, - zIndex: 7 - }) - .add(axis.axisGroup); - } else { - axis.axisLine.animate({ d: linePath }); - } - - // show or hide the line depending on options.showEmpty - axis.axisLine[showAxis ? 'show' : 'hide'](); - } - - if (axisTitle && showAxis) { - - axisTitle[axisTitle.isNew ? 'attr' : 'animate']( - axis.getTitlePosition() - ); - axisTitle.isNew = false; - } - - // Stacked totals: - if (stackLabelOptions && stackLabelOptions.enabled) { - var stackKey, oneStack, stackCategory, - stackTotalGroup = axis.stackTotalGroup; - - // Create a separate group for the stack total labels - if (!stackTotalGroup) { - axis.stackTotalGroup = stackTotalGroup = - renderer.g('stack-labels') - .attr({ - visibility: VISIBLE, - zIndex: 6 - }) - .add(); - } - - // plotLeft/Top will change when y axis gets wider so we need to translate the - // stackTotalGroup at every render call. See bug #506 and #516 - stackTotalGroup.translate(chart.plotLeft, chart.plotTop); - - // Render each stack total - for (stackKey in stacks) { - oneStack = stacks[stackKey]; - for (stackCategory in oneStack) { - oneStack[stackCategory].render(stackTotalGroup); - } - } - } - // End stacked totals - - axis.isDirty = false; - }, - - /** - * Redraw the axis to reflect changes in the data or axis extremes - */ - redraw: function () { - var axis = this, - chart = axis.chart, - pointer = chart.pointer; - - // hide tooltip and hover states - if (pointer.reset) { - pointer.reset(true); - } - - // render the axis - axis.render(); - - // move plot lines and bands - each(axis.plotLinesAndBands, function (plotLine) { - plotLine.render(); - }); - - // mark associated series as dirty and ready for redraw - each(axis.series, function (series) { - series.isDirty = true; - }); - - }, - - /** - * Build the stacks from top down - */ - buildStacks: function () { - var series = this.series, - i = series.length; - if (!this.isXAxis) { - while (i--) { - series[i].setStackedPoints(); - } - // Loop up again to compute percent stack - if (this.usePercentage) { - for (i = 0; i < series.length; i++) { - series[i].setPercentStacks(); - } - } - } - }, - - /** - * Destroys an Axis instance. - */ - destroy: function (keepEvents) { - var axis = this, - stacks = axis.stacks, - stackKey, - plotLinesAndBands = axis.plotLinesAndBands, - i; - - // Remove the events - if (!keepEvents) { - removeEvent(axis); - } - - // Destroy each stack total - for (stackKey in stacks) { - destroyObjectProperties(stacks[stackKey]); - - stacks[stackKey] = null; - } - - // Destroy collections - each([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) { - destroyObjectProperties(coll); - }); - i = plotLinesAndBands.length; - while (i--) { // #1975 - plotLinesAndBands[i].destroy(); - } - - // Destroy local variables - each(['stackTotalGroup', 'axisLine', 'axisTitle', 'axisGroup', 'cross', 'gridGroup', 'labelGroup'], function (prop) { - if (axis[prop]) { - axis[prop] = axis[prop].destroy(); - } - }); - - // Destroy crosshair - if (this.cross) { - this.cross.destroy(); - } - }, - - /** - * Draw the crosshair - */ - drawCrosshair: function (e, point) { - if (!this.crosshair) { return; }// Do not draw crosshairs if you don't have too. - - if ((defined(point) || !pick(this.crosshair.snap, true)) === false) { - this.hideCrosshair(); - return; - } - - var path, - options = this.crosshair, - animation = options.animation, - pos; - - // Get the path - if (!pick(options.snap, true)) { - pos = (this.horiz ? e.chartX - this.pos : this.len - e.chartY + this.pos); - } else if (defined(point)) { - /*jslint eqeq: true*/ - pos = (this.chart.inverted != this.horiz) ? point.plotX : this.len - point.plotY; - /*jslint eqeq: false*/ - } - - if (this.isRadial) { - path = this.getPlotLinePath(this.isXAxis ? point.x : pick(point.stackY, point.y)); - } else { - path = this.getPlotLinePath(null, null, null, null, pos); - } - - if (path === null) { - this.hideCrosshair(); - return; - } - - // Draw the cross - if (this.cross) { - this.cross - .attr({ visibility: VISIBLE })[animation ? 'animate' : 'attr']({ d: path }, animation); - } else { - var attribs = { - 'stroke-width': options.width || 1, - stroke: options.color || '#C0C0C0', - zIndex: options.zIndex || 2 - }; - if (options.dashStyle) { - attribs.dashstyle = options.dashStyle; - } - this.cross = this.chart.renderer.path(path).attr(attribs).add(); - } - }, - - /** - * Hide the crosshair. - */ - hideCrosshair: function () { - if (this.cross) { - this.cross.hide(); - } - } -}; // end Axis - -extend(Axis.prototype, AxisPlotLineOrBandExtension); -/** - * Methods defined on the Axis prototype - */ - -/** - * Set the tick positions of a logarithmic axis - */ -Axis.prototype.getLogTickPositions = function (interval, min, max, minor) { - var axis = this, - options = axis.options, - axisLength = axis.len, - // Since we use this method for both major and minor ticks, - // use a local variable and return the result - positions = []; - - // Reset - if (!minor) { - axis._minorAutoInterval = null; - } - - // First case: All ticks fall on whole logarithms: 1, 10, 100 etc. - if (interval >= 0.5) { - interval = mathRound(interval); - positions = axis.getLinearTickPositions(interval, min, max); - - // Second case: We need intermediary ticks. For example - // 1, 2, 4, 6, 8, 10, 20, 40 etc. - } else if (interval >= 0.08) { - var roundedMin = mathFloor(min), - intermediate, - i, - j, - len, - pos, - lastPos, - break2; - - if (interval > 0.3) { - intermediate = [1, 2, 4]; - } else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 4, 6, 8]; - } else { // 0.1 equals ten minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9]; - } - - for (i = roundedMin; i < max + 1 && !break2; i++) { - len = intermediate.length; - for (j = 0; j < len && !break2; j++) { - pos = log2lin(lin2log(i) * intermediate[j]); - - if (pos > min && (!minor || lastPos <= max)) { // #1670 - positions.push(lastPos); - } - - if (lastPos > max) { - break2 = true; - } - lastPos = pos; - } - } - - // Third case: We are so deep in between whole logarithmic values that - // we might as well handle the tick positions like a linear axis. For - // example 1.01, 1.02, 1.03, 1.04. - } else { - var realMin = lin2log(min), - realMax = lin2log(max), - tickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'], - filteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption, - tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), - totalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength; - - interval = pick( - filteredTickIntervalOption, - axis._minorAutoInterval, - (realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1) - ); - - interval = normalizeTickInterval( - interval, - null, - getMagnitude(interval) - ); - - positions = map(axis.getLinearTickPositions( - interval, - realMin, - realMax - ), log2lin); - - if (!minor) { - axis._minorAutoInterval = interval / 5; - } - } - - // Set the axis-level tickInterval variable - if (!minor) { - axis.tickInterval = interval; - } - return positions; -}; -/** - * Set the tick positions to a time unit that makes sense, for example - * on the first of each month or on every Monday. Return an array - * with the time positions. Used in datetime axes as well as for grouping - * data on a datetime axis. - * - * @param {Object} normalizedInterval The interval in axis values (ms) and the count - * @param {Number} min The minimum in axis values - * @param {Number} max The maximum in axis values - * @param {Number} startOfWeek - */ -Axis.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) { - var tickPositions = [], - i, - higherRanks = {}, - useUTC = defaultOptions.global.useUTC, - minYear, // used in months and years as a basis for Date.UTC() - minDate = new Date(min - timezoneOffset), - interval = normalizedInterval.unitRange, - count = normalizedInterval.count; - - if (defined(min)) { // #1300 - if (interval >= timeUnits[SECOND]) { // second - minDate.setMilliseconds(0); - minDate.setSeconds(interval >= timeUnits[MINUTE] ? 0 : - count * mathFloor(minDate.getSeconds() / count)); - } - - if (interval >= timeUnits[MINUTE]) { // minute - minDate[setMinutes](interval >= timeUnits[HOUR] ? 0 : - count * mathFloor(minDate[getMinutes]() / count)); - } - - if (interval >= timeUnits[HOUR]) { // hour - minDate[setHours](interval >= timeUnits[DAY] ? 0 : - count * mathFloor(minDate[getHours]() / count)); - } - - if (interval >= timeUnits[DAY]) { // day - minDate[setDate](interval >= timeUnits[MONTH] ? 1 : - count * mathFloor(minDate[getDate]() / count)); - } - - if (interval >= timeUnits[MONTH]) { // month - minDate[setMonth](interval >= timeUnits[YEAR] ? 0 : - count * mathFloor(minDate[getMonth]() / count)); - minYear = minDate[getFullYear](); - } - - if (interval >= timeUnits[YEAR]) { // year - minYear -= minYear % count; - minDate[setFullYear](minYear); - } - - // week is a special case that runs outside the hierarchy - if (interval === timeUnits[WEEK]) { - // get start of current week, independent of count - minDate[setDate](minDate[getDate]() - minDate[getDay]() + - pick(startOfWeek, 1)); - } - - - // get tick positions - i = 1; - if (timezoneOffset) { - minDate = new Date(minDate.getTime() + timezoneOffset); - } - minYear = minDate[getFullYear](); - var time = minDate.getTime(), - minMonth = minDate[getMonth](), - minDateDate = minDate[getDate](), - localTimezoneOffset = useUTC ? - timezoneOffset : - (24 * 3600 * 1000 + minDate.getTimezoneOffset() * 60 * 1000) % (24 * 3600 * 1000); // #950 - - // iterate and add tick positions at appropriate values - while (time < max) { - tickPositions.push(time); - - // if the interval is years, use Date.UTC to increase years - if (interval === timeUnits[YEAR]) { - time = makeTime(minYear + i * count, 0); - - // if the interval is months, use Date.UTC to increase months - } else if (interval === timeUnits[MONTH]) { - time = makeTime(minYear, minMonth + i * count); - - // if we're using global time, the interval is not fixed as it jumps - // one hour at the DST crossover - } else if (!useUTC && (interval === timeUnits[DAY] || interval === timeUnits[WEEK])) { - time = makeTime(minYear, minMonth, minDateDate + - i * count * (interval === timeUnits[DAY] ? 1 : 7)); - - // else, the interval is fixed and we use simple addition - } else { - time += interval * count; - } - - i++; - } - - // push the last time - tickPositions.push(time); - - - // mark new days if the time is dividible by day (#1649, #1760) - each(grep(tickPositions, function (time) { - return interval <= timeUnits[HOUR] && time % timeUnits[DAY] === localTimezoneOffset; - }), function (time) { - higherRanks[time] = DAY; - }); - } - - - // record information on the chosen unit - for dynamic label formatter - tickPositions.info = extend(normalizedInterval, { - higherRanks: higherRanks, - totalRange: interval * count - }); - - return tickPositions; -}; - -/** - * Get a normalized tick interval for dates. Returns a configuration object with - * unit range (interval), count and name. Used to prepare data for getTimeTicks. - * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs - * of segments in stock charts, the normalizing logic was extracted in order to - * prevent it for running over again for each segment having the same interval. - * #662, #697. - */ -Axis.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) { - var units = unitsOption || [[ - MILLISECOND, // unit name - [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples - ], [ - SECOND, - [1, 2, 5, 10, 15, 30] - ], [ - MINUTE, - [1, 2, 5, 10, 15, 30] - ], [ - HOUR, - [1, 2, 3, 4, 6, 8, 12] - ], [ - DAY, - [1, 2] - ], [ - WEEK, - [1, 2] - ], [ - MONTH, - [1, 2, 3, 4, 6] - ], [ - YEAR, - null - ]], - unit = units[units.length - 1], // default unit is years - interval = timeUnits[unit[0]], - multiples = unit[1], - count, - i; - - // loop through the units to find the one that best fits the tickInterval - for (i = 0; i < units.length; i++) { - unit = units[i]; - interval = timeUnits[unit[0]]; - multiples = unit[1]; - - - if (units[i + 1]) { - // lessThan is in the middle between the highest multiple and the next unit. - var lessThan = (interval * multiples[multiples.length - 1] + - timeUnits[units[i + 1][0]]) / 2; - - // break and keep the current unit - if (tickInterval <= lessThan) { - break; - } - } - } - - // prevent 2.5 years intervals, though 25, 250 etc. are allowed - if (interval === timeUnits[YEAR] && tickInterval < 5 * interval) { - multiples = [1, 2, 5]; - } - - // get the count - count = normalizeTickInterval( - tickInterval / interval, - multiples, - unit[0] === YEAR ? mathMax(getMagnitude(tickInterval / interval), 1) : 1 // #1913, #2360 - ); - - return { - unitRange: interval, - count: count, - unitName: unit[0] - }; -};/** - * The class for stack items - */ -function StackItem(axis, options, isNegative, x, stackOption, stacking) { - - var inverted = axis.chart.inverted; - - this.axis = axis; - - // Tells if the stack is negative - this.isNegative = isNegative; - - // Save the options to be able to style the label - this.options = options; - - // Save the x value to be able to position the label later - this.x = x; - - // Initialize total value - this.total = null; - - // This will keep each points' extremes stored by series.index - this.points = {}; - - // Save the stack option on the series configuration object, and whether to treat it as percent - this.stack = stackOption; - this.percent = stacking === 'percent'; - - // The align options and text align varies on whether the stack is negative and - // if the chart is inverted or not. - // First test the user supplied value, then use the dynamic. - this.alignOptions = { - align: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'), - verticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')), - y: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)), - x: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0) - }; - - this.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center'); -} - -StackItem.prototype = { - destroy: function () { - destroyObjectProperties(this, this.axis); - }, - - /** - * Renders the stack total label and adds it to the stack label group. - */ - render: function (group) { - var options = this.options, - formatOption = options.format, - str = formatOption ? - format(formatOption, this) : - options.formatter.call(this); // format the text in the label - - // Change the text to reflect the new total and set visibility to hidden in case the serie is hidden - if (this.label) { - this.label.attr({text: str, visibility: HIDDEN}); - // Create new label - } else { - this.label = - this.axis.chart.renderer.text(str, 0, 0, options.useHTML) // dummy positions, actual position updated with setOffset method in columnseries - .css(options.style) // apply style - .attr({ - align: this.textAlign, // fix the text-anchor - rotation: options.rotation, // rotation - visibility: HIDDEN // hidden until setOffset is called - }) - .add(group); // add to the labels-group - } - }, - - /** - * Sets the offset that the stack has from the x value and repositions the label. - */ - setOffset: function (xOffset, xWidth) { - var stackItem = this, - axis = stackItem.axis, - chart = axis.chart, - inverted = chart.inverted, - neg = this.isNegative, // special treatment is needed for negative stacks - y = axis.translate(this.percent ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates - yZero = axis.translate(0), // stack origin - h = mathAbs(y - yZero), // stack height - x = chart.xAxis[0].translate(this.x) + xOffset, // stack x position - plotHeight = chart.plotHeight, - stackBox = { // this is the box for the complete stack - x: inverted ? (neg ? y : y - h) : x, - y: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y), - width: inverted ? h : xWidth, - height: inverted ? xWidth : h - }, - label = this.label, - alignAttr; - - if (label) { - label.align(this.alignOptions, null, stackBox); // align the label to the box - - // Set visibility (#678) - alignAttr = label.alignAttr; - label.attr({ - visibility: this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? - (hasSVG ? 'inherit' : VISIBLE) : - HIDDEN - }); - } - } -}; -/** - * The tooltip object - * @param {Object} chart The chart instance - * @param {Object} options Tooltip options - */ -function Tooltip() { - this.init.apply(this, arguments); -} - -Tooltip.prototype = { - - init: function (chart, options) { - - var borderWidth = options.borderWidth, - style = options.style, - padding = pInt(style.padding); - - // Save the chart and options - this.chart = chart; - this.options = options; - - // Keep track of the current series - //this.currentSeries = UNDEFINED; - - // List of crosshairs - this.crosshairs = []; - - // Current values of x and y when animating - this.now = { x: 0, y: 0 }; - - // The tooltip is initially hidden - this.isHidden = true; - - - // create the label - this.label = chart.renderer.label('', 0, 0, options.shape, null, null, options.useHTML, null, 'tooltip') - .attr({ - padding: padding, - fill: options.backgroundColor, - 'stroke-width': borderWidth, - r: options.borderRadius, - zIndex: 8 - }) - .css(style) - .css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117) - .add() - .attr({ y: -999 }); // #2301 - - // When using canVG the shadow shows up as a gray circle - // even if the tooltip is hidden. - if (!useCanVG) { - this.label.shadow(options.shadow); - } - - // Public property for getting the shared state. - this.shared = options.shared; - }, - - /** - * Destroy the tooltip and its elements. - */ - destroy: function () { - // Destroy and clear local variables - if (this.label) { - this.label = this.label.destroy(); - } - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - - /** - * Provide a soft movement for the tooltip - * - * @param {Number} x - * @param {Number} y - * @private - */ - move: function (x, y, anchorX, anchorY) { - var tooltip = this, - now = tooltip.now, - animate = tooltip.options.animation !== false && !tooltip.isHidden; - - // get intermediate values for animation - extend(now, { - x: animate ? (2 * now.x + x) / 3 : x, - y: animate ? (now.y + y) / 2 : y, - anchorX: animate ? (2 * now.anchorX + anchorX) / 3 : anchorX, - anchorY: animate ? (now.anchorY + anchorY) / 2 : anchorY - }); - - // move to the intermediate value - tooltip.label.attr(now); - - - // run on next tick of the mouse tracker - if (animate && (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1)) { - - // never allow two timeouts - clearTimeout(this.tooltipTimeout); - - // set the fixed interval ticking for the smooth tooltip - this.tooltipTimeout = setTimeout(function () { - // The interval function may still be running during destroy, so check that the chart is really there before calling. - if (tooltip) { - tooltip.move(x, y, anchorX, anchorY); - } - }, 32); - - } - }, - - /** - * Hide the tooltip - */ - hide: function () { - var tooltip = this, - hoverPoints; - - clearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766) - if (!this.isHidden) { - hoverPoints = this.chart.hoverPoints; - - this.hideTimer = setTimeout(function () { - tooltip.label.fadeOut(); - tooltip.isHidden = true; - }, pick(this.options.hideDelay, 500)); - - // hide previous hoverPoints and set new - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - this.chart.hoverPoints = null; - } - }, - - /** - * Extendable method to get the anchor position of the tooltip - * from a point or set of points - */ - getAnchor: function (points, mouseEvent) { - var ret, - chart = this.chart, - inverted = chart.inverted, - plotTop = chart.plotTop, - plotX = 0, - plotY = 0, - yAxis; - - points = splat(points); - - // Pie uses a special tooltipPos - ret = points[0].tooltipPos; - - // When tooltip follows mouse, relate the position to the mouse - if (this.followPointer && mouseEvent) { - if (mouseEvent.chartX === UNDEFINED) { - mouseEvent = chart.pointer.normalize(mouseEvent); - } - ret = [ - mouseEvent.chartX - chart.plotLeft, - mouseEvent.chartY - plotTop - ]; - } - // When shared, use the average position - if (!ret) { - each(points, function (point) { - yAxis = point.series.yAxis; - plotX += point.plotX; - plotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) + - (!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151 - }); - - plotX /= points.length; - plotY /= points.length; - - ret = [ - inverted ? chart.plotWidth - plotY : plotX, - this.shared && !inverted && points.length > 1 && mouseEvent ? - mouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424) - inverted ? chart.plotHeight - plotX : plotY - ]; - } - - return map(ret, mathRound); - }, - - /** - * Place the tooltip in a chart without spilling over - * and not covering the point it self. - */ - getPosition: function (boxWidth, boxHeight, point) { - - // Set up the variables - var chart = this.chart, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - distance = pick(this.options.distance, 12), - pointX = point.plotX, - pointY = point.plotY, - x = pointX + plotLeft + (chart.inverted ? distance : -boxWidth - distance), - y = pointY - boxHeight + plotTop + 15, // 15 means the point is 15 pixels up from the bottom of the tooltip - alignedRight; - - // It is too far to the left, adjust it - if (x < 7) { - x = plotLeft + mathMax(pointX, 0) + distance; - } - - // Test to see if the tooltip is too far to the right, - // if it is, move it back to be inside and then up to not cover the point. - if ((x + boxWidth) > (plotLeft + plotWidth)) { - x -= (x + boxWidth) - (plotLeft + plotWidth); - y = pointY - boxHeight + plotTop - distance; - alignedRight = true; - } - - // If it is now above the plot area, align it to the top of the plot area - if (y < plotTop + 5) { - y = plotTop + 5; - - // If the tooltip is still covering the point, move it below instead - if (alignedRight && pointY >= y && pointY <= (y + boxHeight)) { - y = pointY + plotTop + distance; // below - } - } - - // Now if the tooltip is below the chart, move it up. It's better to cover the - // point than to disappear outside the chart. #834. - if (y + boxHeight > plotTop + plotHeight) { - y = mathMax(plotTop, plotTop + plotHeight - boxHeight - distance); // below - } - - return {x: x, y: y}; - }, - - /** - * In case no user defined formatter is given, this will be used. Note that the context - * here is an object holding point, series, x, y etc. - */ - defaultFormatter: function (tooltip) { - var items = this.points || splat(this), - series = items[0].series, - s; - - // build the header - s = [series.tooltipHeaderFormatter(items[0])]; - - // build the values - each(items, function (item) { - series = item.series; - s.push((series.tooltipFormatter && series.tooltipFormatter(item)) || - item.point.tooltipFormatter(series.tooltipOptions.pointFormat)); - }); - - // footer - s.push(tooltip.options.footerFormat || ''); - - return s.join(''); - }, - - /** - * Refresh the tooltip's text and position. - * @param {Object} point - */ - refresh: function (point, mouseEvent) { - var tooltip = this, - chart = tooltip.chart, - label = tooltip.label, - options = tooltip.options, - x, - y, - anchor, - textConfig = {}, - text, - pointConfig = [], - formatter = options.formatter || tooltip.defaultFormatter, - hoverPoints = chart.hoverPoints, - borderColor, - shared = tooltip.shared, - currentSeries; - - clearTimeout(this.hideTimer); - - // get the reference point coordinates (pie charts use tooltipPos) - tooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer; - anchor = tooltip.getAnchor(point, mouseEvent); - x = anchor[0]; - y = anchor[1]; - - // shared tooltip, array is sent over - if (shared && !(point.series && point.series.noSharedTooltip)) { - - // hide previous hoverPoints and set new - - chart.hoverPoints = point; - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(point, function (item) { - item.setState(HOVER_STATE); - - pointConfig.push(item.getLabelConfig()); - }); - - textConfig = { - x: point[0].category, - y: point[0].y - }; - textConfig.points = pointConfig; - point = point[0]; - - // single point tooltip - } else { - textConfig = point.getLabelConfig(); - } - text = formatter.call(textConfig, tooltip); - - // register the current series - currentSeries = point.series; - - // update the inner HTML - if (text === false) { - this.hide(); - } else { - - // show it - if (tooltip.isHidden) { - stop(label); - label.attr('opacity', 1).show(); - } - - // update text - label.attr({ - text: text - }); - - // set the stroke color of the box - borderColor = options.borderColor || point.color || currentSeries.color || '#606060'; - label.attr({ - stroke: borderColor - }); - - tooltip.updatePosition({ plotX: x, plotY: y }); - - this.isHidden = false; - } - fireEvent(chart, 'tooltipRefresh', { - text: text, - x: x + chart.plotLeft, - y: y + chart.plotTop, - borderColor: borderColor - }); - }, - - /** - * Find the new position and perform the move - */ - updatePosition: function (point) { - var chart = this.chart, - label = this.label, - pos = (this.options.positioner || this.getPosition).call( - this, - label.width, - label.height, - point - ); - - // do the move - this.move( - mathRound(pos.x), - mathRound(pos.y), - point.plotX + chart.plotLeft, - point.plotY + chart.plotTop - ); - } -}; -/** - * The mouse tracker object. All methods starting with "on" are primary DOM event handlers. - * Subsequent methods should be named differently from what they are doing. - * @param {Object} chart The Chart instance - * @param {Object} options The root options object - */ -var Pointer = Highcharts.Pointer = function (chart, options) { - this.init(chart, options); -}; - -Pointer.prototype = { - /** - * Initialize Pointer - */ - init: function (chart, options) { - - var chartOptions = options.chart, - chartEvents = chartOptions.events, - zoomType = useCanVG ? '' : chartOptions.zoomType, - inverted = chart.inverted, - zoomX, - zoomY; - - // Store references - this.options = options; - this.chart = chart; - - // Zoom status - this.zoomX = zoomX = /x/.test(zoomType); - this.zoomY = zoomY = /y/.test(zoomType); - this.zoomHor = (zoomX && !inverted) || (zoomY && inverted); - this.zoomVert = (zoomY && !inverted) || (zoomX && inverted); - - // Do we need to handle click on a touch device? - this.runChartClick = chartEvents && !!chartEvents.click; - - this.pinchDown = []; - this.lastValidTouch = {}; - - if (options.tooltip.enabled) { - chart.tooltip = new Tooltip(chart, options.tooltip); - } - - this.setDOMEvents(); - }, - - /** - * Add crossbrowser support for chartX and chartY - * @param {Object} e The event object in standard browsers - */ - normalize: function (e, chartPosition) { - var chartX, - chartY, - ePos; - - // common IE normalizing - e = e || win.event; - if (!e.target) { - e.target = e.srcElement; - } - - // Framework specific normalizing (#1165) - e = washMouseEvent(e); - - // iOS - ePos = e.touches ? e.touches.item(0) : e; - - // Get mouse position - if (!chartPosition) { - this.chartPosition = chartPosition = offset(this.chart.container); - } - - // chartX and chartY - if (ePos.pageX === UNDEFINED) { // IE < 9. #886. - chartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is - // for IE10 quirks mode within framesets - chartY = e.y; - } else { - chartX = ePos.pageX - chartPosition.left; - chartY = ePos.pageY - chartPosition.top; - } - - return extend(e, { - chartX: mathRound(chartX), - chartY: mathRound(chartY) - }); - }, - - /** - * Get the click position in terms of axis values. - * - * @param {Object} e A pointer event - */ - getCoordinates: function (e) { - var coordinates = { - xAxis: [], - yAxis: [] - }; - - each(this.chart.axes, function (axis) { - coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY']) - }); - }); - return coordinates; - }, - - /** - * Return the index in the tooltipPoints array, corresponding to pixel position in - * the plot area. - */ - getIndex: function (e) { - var chart = this.chart; - return chart.inverted ? - chart.plotHeight + chart.plotTop - e.chartY : - e.chartX - chart.plotLeft; - }, - - /** - * With line type charts with a single tracker, get the point closest to the mouse. - * Run Point.onMouseOver and display tooltip for the point or points. - */ - runPointActions: function (e) { - var pointer = this, - chart = pointer.chart, - series = chart.series, - tooltip = chart.tooltip, - point, - points, - hoverPoint = chart.hoverPoint, - hoverSeries = chart.hoverSeries, - i, - j, - distance = chart.chartWidth, - index = pointer.getIndex(e), - anchor; - - // shared tooltip - if (tooltip && pointer.options.tooltip.shared && !(hoverSeries && hoverSeries.noSharedTooltip)) { - points = []; - - // loop over all series and find the ones with points closest to the mouse - i = series.length; - for (j = 0; j < i; j++) { - if (series[j].visible && - series[j].options.enableMouseTracking !== false && - !series[j].noSharedTooltip && series[j].tooltipPoints.length) { - point = series[j].tooltipPoints[index]; - if (point && point.series) { // not a dummy point, #1544 - point._dist = mathAbs(index - point.clientX); - distance = mathMin(distance, point._dist); - points.push(point); - } - } - } - // remove furthest points - i = points.length; - while (i--) { - if (points[i]._dist > distance) { - points.splice(i, 1); - } - } - // refresh the tooltip if necessary - if (points.length && (points[0].clientX !== pointer.hoverX)) { - tooltip.refresh(points, e); - pointer.hoverX = points[0].clientX; - } - } - - // separate tooltip and general mouse events - if (hoverSeries && hoverSeries.tracker) { // only use for line-type series with common tracker - - // get the point - point = hoverSeries.tooltipPoints[index]; - - // a new point is hovered, refresh the tooltip - if (point && point !== hoverPoint) { - - // trigger the events - point.onMouseOver(e); - - } - - } else if (tooltip && tooltip.followPointer && !tooltip.isHidden) { - anchor = tooltip.getAnchor([{}], e); - tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] }); - } - - // Start the event listener to pick up the tooltip - if (tooltip && !pointer._onDocumentMouseMove) { - pointer._onDocumentMouseMove = function (e) { - pointer.onDocumentMouseMove(e); - }; - addEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - } - - // Draw independent crosshairs - each(chart.axes, function (axis) { - axis.drawCrosshair(e, pick(point, hoverPoint)); - }); - }, - - - - /** - * Reset the tracking by hiding the tooltip, the hover series state and the hover point - * - * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible - */ - reset: function (allowMove) { - var pointer = this, - chart = pointer.chart, - hoverSeries = chart.hoverSeries, - hoverPoint = chart.hoverPoint, - tooltip = chart.tooltip, - tooltipPoints = tooltip && tooltip.shared ? chart.hoverPoints : hoverPoint; - - // Narrow in allowMove - allowMove = allowMove && tooltip && tooltipPoints; - - // Check if the points have moved outside the plot area, #1003 - if (allowMove && splat(tooltipPoints)[0].plotX === UNDEFINED) { - allowMove = false; - } - - // Just move the tooltip, #349 - if (allowMove) { - tooltip.refresh(tooltipPoints); - if (hoverPoint) { // #2500 - hoverPoint.setState(hoverPoint.state, true); - } - - // Full reset - } else { - - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - if (hoverSeries) { - hoverSeries.onMouseOut(); - } - - if (tooltip) { - tooltip.hide(); - } - - if (pointer._onDocumentMouseMove) { - removeEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - pointer._onDocumentMouseMove = null; - } - - // Remove crosshairs - each(chart.axes, function (axis) { - axis.hideCrosshair(); - }); - - pointer.hoverX = null; - - } - }, - - /** - * Scale series groups to a certain scale and translation - */ - scaleGroups: function (attribs, clip) { - - var chart = this.chart, - seriesAttribs; - - // Scale each series - each(chart.series, function (series) { - seriesAttribs = attribs || series.getPlotBox(); // #1701 - if (series.xAxis && series.xAxis.zoomEnabled) { - series.group.attr(seriesAttribs); - if (series.markerGroup) { - series.markerGroup.attr(seriesAttribs); - series.markerGroup.clip(clip ? chart.clipRect : null); - } - if (series.dataLabelsGroup) { - series.dataLabelsGroup.attr(seriesAttribs); - } - } - }); - - // Clip - chart.clipRect.attr(clip || chart.clipBox); - }, - - /** - * Run translation operations - */ - pinchTranslate: function (zoomHor, zoomVert, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) { - if (zoomHor) { - this.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - if (zoomVert) { - this.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - }, - - /** - * Run translation operations for each direction (horizontal and vertical) independently - */ - pinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch, forcedScale) { - var chart = this.chart, - xy = horiz ? 'x' : 'y', - XY = horiz ? 'X' : 'Y', - sChartXY = 'chart' + XY, - wh = horiz ? 'width' : 'height', - plotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')], - selectionWH, - selectionXY, - clipXY, - scale = forcedScale || 1, - inverted = chart.inverted, - bounds = chart.bounds[horiz ? 'h' : 'v'], - singleTouch = pinchDown.length === 1, - touch0Start = pinchDown[0][sChartXY], - touch0Now = touches[0][sChartXY], - touch1Start = !singleTouch && pinchDown[1][sChartXY], - touch1Now = !singleTouch && touches[1][sChartXY], - outOfBounds, - transformScale, - scaleKey, - setScale = function () { - if (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis - scale = forcedScale || mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start); - } - - clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start; - selectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale; - }; - - // Set the scale, first pass - setScale(); - - selectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not - - // Out of bounds - if (selectionXY < bounds.min) { - selectionXY = bounds.min; - outOfBounds = true; - } else if (selectionXY + selectionWH > bounds.max) { - selectionXY = bounds.max - selectionWH; - outOfBounds = true; - } - - // Is the chart dragged off its bounds, determined by dataMin and dataMax? - if (outOfBounds) { - - // Modify the touchNow position in order to create an elastic drag movement. This indicates - // to the user that the chart is responsive but can't be dragged further. - touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]); - if (!singleTouch) { - touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]); - } - - // Set the scale, second pass to adapt to the modified touchNow positions - setScale(); - - } else { - lastValidTouch[xy] = [touch0Now, touch1Now]; - } - - // Set geometry for clipping, selection and transformation - if (!inverted) { // TODO: implement clipping for inverted charts - clip[xy] = clipXY - plotLeftTop; - clip[wh] = selectionWH; - } - scaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY; - transformScale = inverted ? 1 / scale : scale; - - selectionMarker[wh] = selectionWH; - selectionMarker[xy] = selectionXY; - transform[scaleKey] = scale; - transform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start)); - }, - - /** - * Handle touch events with two touches - */ - pinch: function (e) { - - var self = this, - chart = self.chart, - pinchDown = self.pinchDown, - followTouchMove = chart.tooltip && chart.tooltip.options.followTouchMove, - touches = e.touches, - touchesLength = touches.length, - lastValidTouch = self.lastValidTouch, - zoomHor = self.zoomHor || self.pinchHor, - zoomVert = self.zoomVert || self.pinchVert, - hasZoom = zoomHor || zoomVert, - selectionMarker = self.selectionMarker, - transform = {}, - fireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && - chart.runTrackerClick) || chart.runChartClick), - clip = {}; - - // On touch devices, only proceed to trigger click if a handler is defined - if ((hasZoom || followTouchMove) && !fireClickEvent) { - e.preventDefault(); - } - - // Normalize each touch - map(touches, function (e) { - return self.normalize(e); - }); - - // Register the touch start position - if (e.type === 'touchstart') { - each(touches, function (e, i) { - pinchDown[i] = { chartX: e.chartX, chartY: e.chartY }; - }); - lastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX]; - lastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY]; - - // Identify the data bounds in pixels - each(chart.axes, function (axis) { - if (axis.zoomEnabled) { - var bounds = chart.bounds[axis.horiz ? 'h' : 'v'], - minPixelPadding = axis.minPixelPadding, - min = axis.toPixels(axis.dataMin), - max = axis.toPixels(axis.dataMax), - absMin = mathMin(min, max), - absMax = mathMax(min, max); - - // Store the bounds for use in the touchmove handler - bounds.min = mathMin(axis.pos, absMin - minPixelPadding); - bounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding); - } - }); - - // Event type is touchmove, handle panning and pinching - } else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first - - - // Set the marker - if (!selectionMarker) { - self.selectionMarker = selectionMarker = extend({ - destroy: noop - }, chart.plotBox); - } - - self.pinchTranslate(zoomHor, zoomVert, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - - self.hasPinched = hasZoom; - - // Scale and translate the groups to provide visual feedback during pinching - self.scaleGroups(transform, clip); - - // Optionally move the tooltip on touchmove - if (!hasZoom && followTouchMove && touchesLength === 1) { - this.runPointActions(self.normalize(e)); - } - } - }, - - /** - * Start a drag operation - */ - dragStart: function (e) { - var chart = this.chart; - - // Record the start position - chart.mouseIsDown = e.type; - chart.cancelClick = false; - chart.mouseDownX = this.mouseDownX = e.chartX; - chart.mouseDownY = this.mouseDownY = e.chartY; - }, - - /** - * Perform a drag operation in response to a mousemove event while the mouse is down - */ - drag: function (e) { - - var chart = this.chart, - chartOptions = chart.options.chart, - chartX = e.chartX, - chartY = e.chartY, - zoomHor = this.zoomHor, - zoomVert = this.zoomVert, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - clickedInside, - size, - mouseDownX = this.mouseDownX, - mouseDownY = this.mouseDownY; - - // If the mouse is outside the plot area, adjust to cooordinates - // inside to prevent the selection marker from going outside - if (chartX < plotLeft) { - chartX = plotLeft; - } else if (chartX > plotLeft + plotWidth) { - chartX = plotLeft + plotWidth; - } - - if (chartY < plotTop) { - chartY = plotTop; - } else if (chartY > plotTop + plotHeight) { - chartY = plotTop + plotHeight; - } - - // determine if the mouse has moved more than 10px - this.hasDragged = Math.sqrt( - Math.pow(mouseDownX - chartX, 2) + - Math.pow(mouseDownY - chartY, 2) - ); - if (this.hasDragged > 10) { - clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop); - - // make a selection - if (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside) { - if (!this.selectionMarker) { - this.selectionMarker = chart.renderer.rect( - plotLeft, - plotTop, - zoomHor ? 1 : plotWidth, - zoomVert ? 1 : plotHeight, - 0 - ) - .attr({ - fill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)', - zIndex: 7 - }) - .add(); - } - } - - // adjust the width of the selection marker - if (this.selectionMarker && zoomHor) { - size = chartX - mouseDownX; - this.selectionMarker.attr({ - width: mathAbs(size), - x: (size > 0 ? 0 : size) + mouseDownX - }); - } - // adjust the height of the selection marker - if (this.selectionMarker && zoomVert) { - size = chartY - mouseDownY; - this.selectionMarker.attr({ - height: mathAbs(size), - y: (size > 0 ? 0 : size) + mouseDownY - }); - } - - // panning - if (clickedInside && !this.selectionMarker && chartOptions.panning) { - chart.pan(e, chartOptions.panning); - } - } - }, - - /** - * On mouse up or touch end across the entire document, drop the selection. - */ - drop: function (e) { - var chart = this.chart, - hasPinched = this.hasPinched; - - if (this.selectionMarker) { - var selectionData = { - xAxis: [], - yAxis: [], - originalEvent: e.originalEvent || e - }, - selectionBox = this.selectionMarker, - selectionLeft = selectionBox.x, - selectionTop = selectionBox.y, - runZoom; - // a selection has been made - if (this.hasDragged || hasPinched) { - - // record each axis' min and max - each(chart.axes, function (axis) { - if (axis.zoomEnabled) { - var horiz = axis.horiz, - selectionMin = axis.toValue((horiz ? selectionLeft : selectionTop)), - selectionMax = axis.toValue((horiz ? selectionLeft + selectionBox.width : selectionTop + selectionBox.height)); - - if (!isNaN(selectionMin) && !isNaN(selectionMax)) { // #859 - selectionData[axis.coll].push({ - axis: axis, - min: mathMin(selectionMin, selectionMax), // for reversed axes, - max: mathMax(selectionMin, selectionMax) - }); - runZoom = true; - } - } - }); - if (runZoom) { - fireEvent(chart, 'selection', selectionData, function (args) { - chart.zoom(extend(args, hasPinched ? { animation: false } : null)); - }); - } - - } - this.selectionMarker = this.selectionMarker.destroy(); - - // Reset scaling preview - if (hasPinched) { - this.scaleGroups(); - } - } - - // Reset all - if (chart) { // it may be destroyed on mouse up - #877 - css(chart.container, { cursor: chart._cursor }); - chart.cancelClick = this.hasDragged > 10; // #370 - chart.mouseIsDown = this.hasDragged = this.hasPinched = false; - this.pinchDown = []; - } - }, - - onContainerMouseDown: function (e) { - - e = this.normalize(e); - - // issue #295, dragging not always working in Firefox - if (e.preventDefault) { - e.preventDefault(); - } - - this.dragStart(e); - }, - - - - onDocumentMouseUp: function (e) { - this.drop(e); - }, - - /** - * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea. - * Issue #149 workaround. The mouseleave event does not always fire. - */ - onDocumentMouseMove: function (e) { - var chart = this.chart, - chartPosition = this.chartPosition, - hoverSeries = chart.hoverSeries; - - e = this.normalize(e, chartPosition); - - // If we're outside, hide the tooltip - if (chartPosition && hoverSeries && !this.inClass(e.target, 'highcharts-tracker') && - !chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - this.reset(); - } - }, - - /** - * When mouse leaves the container, hide the tooltip. - */ - onContainerMouseLeave: function () { - this.reset(); - this.chartPosition = null; // also reset the chart position, used in #149 fix - }, - - // The mousemove, touchmove and touchstart event handler - onContainerMouseMove: function (e) { - - var chart = this.chart; - - // normalize - e = this.normalize(e); - - if (chart.mouseIsDown === 'mousedown') { - this.drag(e); - } - - // Show the tooltip and run mouse over events (#977) - if ((this.inClass(e.target, 'highcharts-tracker') || - chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) { - this.runPointActions(e); - } - }, - - /** - * Utility to detect whether an element has, or has a parent with, a specific - * class name. Used on detection of tracker objects and on deciding whether - * hovering the tooltip should cause the active series to mouse out. - */ - inClass: function (element, className) { - var elemClassName; - while (element) { - elemClassName = attr(element, 'class'); - if (elemClassName) { - if (elemClassName.indexOf(className) !== -1) { - return true; - } else if (elemClassName.indexOf(PREFIX + 'container') !== -1) { - return false; - } - } - element = element.parentNode; - } - }, - - onTrackerMouseOut: function (e) { - var series = this.chart.hoverSeries, - relatedTarget = e.relatedTarget || e.toElement, - relatedSeries = relatedTarget && relatedTarget.point && relatedTarget.point.series; // #2499 - - if (series && !series.options.stickyTracking && !this.inClass(relatedTarget, PREFIX + 'tooltip') && - relatedSeries !== series) { - series.onMouseOut(); - } - }, - - onContainerClick: function (e) { - var chart = this.chart, - hoverPoint = chart.hoverPoint, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - inverted = chart.inverted, - chartPosition, - plotX, - plotY; - - e = this.normalize(e); - e.cancelBubble = true; // IE specific - - if (!chart.cancelClick) { - - // On tracker click, fire the series and point events. #783, #1583 - if (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) { - chartPosition = this.chartPosition; - plotX = hoverPoint.plotX; - plotY = hoverPoint.plotY; - - // add page position info - extend(hoverPoint, { - pageX: chartPosition.left + plotLeft + - (inverted ? chart.plotWidth - plotY : plotX), - pageY: chartPosition.top + plotTop + - (inverted ? chart.plotHeight - plotX : plotY) - }); - - // the series click event - fireEvent(hoverPoint.series, 'click', extend(e, { - point: hoverPoint - })); - - // the point click event - if (chart.hoverPoint) { // it may be destroyed (#1844) - hoverPoint.firePointEvent('click', e); - } - - // When clicking outside a tracker, fire a chart event - } else { - extend(e, this.getCoordinates(e)); - - // fire a click event in the chart - if (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) { - fireEvent(chart, 'click', e); - } - } - - - } - }, - - onContainerTouchStart: function (e) { - var chart = this.chart; - - if (e.touches.length === 1) { - - e = this.normalize(e); - - if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - - // Prevent the click pseudo event from firing unless it is set in the options - /*if (!chart.runChartClick) { - e.preventDefault(); - }*/ - - // Run mouse events and display tooltip etc - this.runPointActions(e); - - this.pinch(e); - - } else { - // Hide the tooltip on touching outside the plot area (#1203) - this.reset(); - } - - } else if (e.touches.length === 2) { - this.pinch(e); - } - }, - - onContainerTouchMove: function (e) { - if (e.touches.length === 1 || e.touches.length === 2) { - this.pinch(e); - } - }, - - onDocumentTouchEnd: function (e) { - this.drop(e); - }, - - /** - * Set the JS DOM events on the container and document. This method should contain - * a one-to-one assignment between methods and their handlers. Any advanced logic should - * be moved to the handler reflecting the event's name. - */ - setDOMEvents: function () { - - var pointer = this, - container = pointer.chart.container, - events; - - this._events = events = [ - [container, 'onmousedown', 'onContainerMouseDown'], - [container, 'onmousemove', 'onContainerMouseMove'], - [container, 'onclick', 'onContainerClick'], - [container, 'mouseleave', 'onContainerMouseLeave'], - [doc, 'mouseup', 'onDocumentMouseUp'] - ]; - - if (hasTouch) { - events.push( - [container, 'ontouchstart', 'onContainerTouchStart'], - [container, 'ontouchmove', 'onContainerTouchMove'], - [doc, 'touchend', 'onDocumentTouchEnd'] - ); - } - - each(events, function (eventConfig) { - - // First, create the callback function that in turn calls the method on Pointer - pointer['_' + eventConfig[2]] = function (e) { - pointer[eventConfig[2]](e); - }; - - // Now attach the function, either as a direct property or through addEvent - if (eventConfig[1].indexOf('on') === 0) { - eventConfig[0][eventConfig[1]] = pointer['_' + eventConfig[2]]; - } else { - addEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]); - } - }); - - - }, - - /** - * Destroys the Pointer object and disconnects DOM events. - */ - destroy: function () { - var pointer = this; - - // Release all DOM events - each(pointer._events, function (eventConfig) { - if (eventConfig[1].indexOf('on') === 0) { - eventConfig[0][eventConfig[1]] = null; // delete breaks oldIE - } else { - removeEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]); - } - }); - delete pointer._events; - - // memory and CPU leak - clearInterval(pointer.tooltipTimeout); - } -}; - - -/** - * PointTrackerMixin - */ - -var TrackerMixin = Highcharts.TrackerMixin = { - drawTrackerPoint: function () { - var series = this, - chart = series.chart, - pointer = chart.pointer, - cursor = series.options.cursor, - css = cursor && { cursor: cursor }, - onMouseOver = function (e) { - var target = e.target, - point; - - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - while (target && !point) { - point = target.point; - target = target.parentNode; - } - if (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart - point.onMouseOver(e); - } - }; - - // Add reference to the point - each(series.points, function (point) { - if (point.graphic) { - point.graphic.element.point = point; - } - if (point.dataLabel) { - point.dataLabel.element.point = point; - } - }); - - // Add the event listeners, we need to do this only once - if (!series._hasTracking) { - each(series.trackerGroups, function (key) { - if (series[key]) { // we don't always have dataLabelsGroup - series[key] - .addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); }) - .css(css); - if (hasTouch) { - series[key].on('touchstart', onMouseOver); - } - } - }); - series._hasTracking = true; - } - }, - - /** - * Draw the tracker object that sits above all data labels and markers to - * track mouse events on the graph or points. For the line type charts - * the tracker uses the same graphPath, but with a greater stroke width - * for better control. - */ - drawTrackerGraph: function () { - var series = this, - options = series.options, - trackByArea = options.trackByArea, - trackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath), - trackerPathLength = trackerPath.length, - chart = series.chart, - pointer = chart.pointer, - renderer = chart.renderer, - snap = chart.options.tooltip.snap, - tracker = series.tracker, - cursor = options.cursor, - css = cursor && { cursor: cursor }, - singlePoints = series.singlePoints, - singlePoint, - i, - onMouseOver = function () { - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - }; - - // Extend end points. A better way would be to use round linecaps, - // but those are not clickable in VML. - if (trackerPathLength && !trackByArea) { - i = trackerPathLength + 1; - while (i--) { - if (trackerPath[i] === M) { // extend left side - trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L); - } - if ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side - trackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]); - } - } - } - - // handle single points - for (i = 0; i < singlePoints.length; i++) { - singlePoint = singlePoints[i]; - trackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY, - L, singlePoint.plotX + snap, singlePoint.plotY); - } - - // draw the tracker - if (tracker) { - tracker.attr({ d: trackerPath }); - - } else { // create - - series.tracker = renderer.path(trackerPath) - .attr({ - 'stroke-linejoin': 'round', // #1225 - visibility: series.visible ? VISIBLE : HIDDEN, - stroke: TRACKER_FILL, - fill: trackByArea ? TRACKER_FILL : NONE, - 'stroke-width' : options.lineWidth + (trackByArea ? 0 : 2 * snap), - zIndex: 2 - }) - .add(series.group); - - // The tracker is added to the series group, which is clipped, but is covered - // by the marker group. So the marker group also needs to capture events. - each([series.tracker, series.markerGroup], function (tracker) { - tracker.addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); }) - .css(css); - - if (hasTouch) { - tracker.on('touchstart', onMouseOver); - } - }); - } - - } -}; -if (win.PointerEvent || win.MSPointerEvent) { - - // The touches object keeps track of the points being touched at all times - var touches = {}; - - // Emulate a Webkit TouchList - Pointer.prototype.getWebkitTouches = function () { - var key, fake = []; - fake.item = function (i) { return this[i]; }; - for (key in touches) { - if (touches.hasOwnProperty(key)) { - fake.push({ - pageX: touches[key].pageX, - pageY: touches[key].pageY, - target: touches[key].target - }); - } - } - return fake; - }; - - // Disable default IE actions for pinch and such on chart element - wrap(Pointer.prototype, 'init', function (proceed, chart, options) { - chart.container.style["-ms-touch-action"] = chart.container.style["touch-action"] = "none"; - proceed.call(this, chart, options); - }); - - // Add IE specific touch events to chart - wrap(Pointer.prototype, 'setDOMEvents', function (proceed) { - var pointer = this, eventmap; - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - eventmap = [ - [this.chart.container, "PointerDown", "touchstart", "onContainerTouchStart", function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY, target: e.currentTarget }; - }], - [this.chart.container, "PointerMove", "touchmove", "onContainerTouchMove", function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY }; - if (!touches[e.pointerId].target) { - touches[e.pointerId].target = e.currentTarget; - } - }], - [document, "PointerUp", "touchend", "onDocumentTouchEnd", function (e) { - delete touches[e.pointerId]; - }] - ]; - - each(eventmap, function (eventConfig) { - addEvent(eventConfig[0], window.PointerEvent ? eventConfig[1].toLowerCase() : "MS" + eventConfig[1], function (e) { - e = e.originalEvent; - if (e.pointerType === "touch" || e.pointerType === e.MSPOINTER_TYPE_TOUCH) { - eventConfig[4](e); - - // This event corresponds to ontouchstart - call onContainerTouchStart - pointer[eventConfig[3]]({ - type: eventConfig[2], - target: e.currentTarget, - preventDefault: noop, - touches: pointer.getWebkitTouches() - }); - } - }); - }); - - }); -} -/** - * The overview of the chart's series - */ -var Legend = Highcharts.Legend = function (chart, options) { - this.init(chart, options); -}; - -Legend.prototype = { - - /** - * Initialize the legend - */ - init: function (chart, options) { - - var legend = this, - itemStyle = options.itemStyle, - padding = pick(options.padding, 8), - itemMarginTop = options.itemMarginTop || 0; - - this.options = options; - - if (!options.enabled) { - return; - } - - legend.baseline = pInt(itemStyle.fontSize) + 3 + itemMarginTop; // used in Series prototype - legend.itemStyle = itemStyle; - legend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle); - legend.itemMarginTop = itemMarginTop; - legend.padding = padding; - legend.initialItemX = padding; - legend.initialItemY = padding - 5; // 5 is the number of pixels above the text - legend.maxItemWidth = 0; - legend.chart = chart; - legend.itemHeight = 0; - legend.lastLineHeight = 0; - legend.symbolWidth = pick(options.symbolWidth, 16); - legend.pages = []; - - - // Render it - legend.render(); - - // move checkboxes - addEvent(legend.chart, 'endResize', function () { - legend.positionCheckboxes(); - }); - - }, - - /** - * Set the colors for the legend item - * @param {Object} item A Series or Point instance - * @param {Object} visible Dimmed or colored - */ - colorizeItem: function (item, visible) { - var legend = this, - options = legend.options, - legendItem = item.legendItem, - legendLine = item.legendLine, - legendSymbol = item.legendSymbol, - hiddenColor = legend.itemHiddenStyle.color, - textColor = visible ? options.itemStyle.color : hiddenColor, - symbolColor = visible ? (item.legendColor || item.color) : hiddenColor, - markerOptions = item.options && item.options.marker, - symbolAttr = { - stroke: symbolColor, - fill: symbolColor - }, - key, - val; - - if (legendItem) { - legendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE - } - if (legendLine) { - legendLine.attr({ stroke: symbolColor }); - } - - if (legendSymbol) { - - // Apply marker options - if (markerOptions && legendSymbol.isMarker) { // #585 - markerOptions = item.convertAttribs(markerOptions); - for (key in markerOptions) { - val = markerOptions[key]; - if (val !== UNDEFINED) { - symbolAttr[key] = val; - } - } - } - - legendSymbol.attr(symbolAttr); - } - }, - - /** - * Position the legend item - * @param {Object} item A Series or Point instance - */ - positionItem: function (item) { - var legend = this, - options = legend.options, - symbolPadding = options.symbolPadding, - ltr = !options.rtl, - legendItemPos = item._legendItemPos, - itemX = legendItemPos[0], - itemY = legendItemPos[1], - checkbox = item.checkbox; - - if (item.legendGroup) { - item.legendGroup.translate( - ltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4, - itemY - ); - } - - if (checkbox) { - checkbox.x = itemX; - checkbox.y = itemY; - } - }, - - /** - * Destroy a single legend item - * @param {Object} item The series or point - */ - destroyItem: function (item) { - var checkbox = item.checkbox; - - // destroy SVG elements - each(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) { - if (item[key]) { - item[key] = item[key].destroy(); - } - }); - - if (checkbox) { - discardElement(item.checkbox); - } - }, - - /** - * Destroys the legend. - */ - destroy: function () { - var legend = this, - legendGroup = legend.group, - box = legend.box; - - if (box) { - legend.box = box.destroy(); - } - - if (legendGroup) { - legend.group = legendGroup.destroy(); - } - }, - - /** - * Position the checkboxes after the width is determined - */ - positionCheckboxes: function (scrollOffset) { - var alignAttr = this.group.alignAttr, - translateY, - clipHeight = this.clipHeight || this.legendHeight; - - if (alignAttr) { - translateY = alignAttr.translateY; - each(this.allItems, function (item) { - var checkbox = item.checkbox, - top; - - if (checkbox) { - top = (translateY + checkbox.y + (scrollOffset || 0) + 3); - css(checkbox, { - left: (alignAttr.translateX + item.legendItemWidth + checkbox.x - 20) + PX, - top: top + PX, - display: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE - }); - } - }); - } - }, - - /** - * Render the legend title on top of the legend - */ - renderTitle: function () { - var options = this.options, - padding = this.padding, - titleOptions = options.title, - titleHeight = 0, - bBox; - - if (titleOptions.text) { - if (!this.title) { - this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title') - .attr({ zIndex: 1 }) - .css(titleOptions.style) - .add(this.group); - } - bBox = this.title.getBBox(); - titleHeight = bBox.height; - this.offsetWidth = bBox.width; // #1717 - this.contentGroup.attr({ translateY: titleHeight }); - } - this.titleHeight = titleHeight; - }, - - /** - * Render a single specific legend item - * @param {Object} item A series or point - */ - renderItem: function (item) { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - options = legend.options, - horizontal = options.layout === 'horizontal', - symbolWidth = legend.symbolWidth, - symbolPadding = options.symbolPadding, - itemStyle = legend.itemStyle, - itemHiddenStyle = legend.itemHiddenStyle, - padding = legend.padding, - itemDistance = horizontal ? pick(options.itemDistance, 8) : 0, - ltr = !options.rtl, - itemHeight, - widthOption = options.width, - itemMarginBottom = options.itemMarginBottom || 0, - itemMarginTop = legend.itemMarginTop, - initialItemX = legend.initialItemX, - bBox, - itemWidth, - li = item.legendItem, - series = item.series && item.series.drawLegendSymbol ? item.series : item, - seriesOptions = series.options, - showCheckbox = seriesOptions && seriesOptions.showCheckbox, - useHTML = options.useHTML; - - if (!li) { // generate it once, later move it - - // Generate the group box - // A group to hold the symbol and text. Text is to be appended in Legend class. - item.legendGroup = renderer.g('legend-item') - .attr({ zIndex: 1 }) - .add(legend.scrollGroup); - - // Draw the legend symbol inside the group box - series.drawLegendSymbol(legend, item); - - // Generate the list item text and add it to the group - item.legendItem = li = renderer.text( - options.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item), - ltr ? symbolWidth + symbolPadding : -symbolPadding, - legend.baseline, - useHTML - ) - .css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021) - .attr({ - align: ltr ? 'left' : 'right', - zIndex: 2 - }) - .add(item.legendGroup); - - // Set the events on the item group, or in case of useHTML, the item itself (#1249) - (useHTML ? li : item.legendGroup).on('mouseover', function () { - item.setState(HOVER_STATE); - li.css(legend.options.itemHoverStyle); - }) - .on('mouseout', function () { - li.css(item.visible ? itemStyle : itemHiddenStyle); - item.setState(); - }) - .on('click', function (event) { - var strLegendItemClick = 'legendItemClick', - fnLegendItemClick = function () { - item.setVisible(); - }; - - // Pass over the click/touch event. #4. - event = { - browserEvent: event - }; - - // click the name or symbol - if (item.firePointEvent) { // point - item.firePointEvent(strLegendItemClick, event, fnLegendItemClick); - } else { - fireEvent(item, strLegendItemClick, event, fnLegendItemClick); - } - }); - - // Colorize the items - legend.colorizeItem(item, item.visible); - - // add the HTML checkbox on top - if (showCheckbox) { - item.checkbox = createElement('input', { - type: 'checkbox', - checked: item.selected, - defaultChecked: item.selected // required by IE7 - }, options.itemCheckboxStyle, chart.container); - - addEvent(item.checkbox, 'click', function (event) { - var target = event.target; - fireEvent(item, 'checkboxClick', { - checked: target.checked - }, - function () { - item.select(); - } - ); - }); - } - } - - // calculate the positions for the next line - bBox = li.getBBox(); - - itemWidth = item.legendItemWidth = - options.itemWidth || item.legendItemWidth || symbolWidth + symbolPadding + bBox.width + itemDistance + - (showCheckbox ? 20 : 0); - legend.itemHeight = itemHeight = mathRound(item.legendItemHeight || bBox.height); - - // if the item exceeds the width, start a new line - if (horizontal && legend.itemX - initialItemX + itemWidth > - (widthOption || (chart.chartWidth - 2 * padding - initialItemX))) { - legend.itemX = initialItemX; - legend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom; - legend.lastLineHeight = 0; // reset for next line - } - - // If the item exceeds the height, start a new column - /*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) { - legend.itemY = legend.initialItemY; - legend.itemX += legend.maxItemWidth; - legend.maxItemWidth = 0; - }*/ - - // Set the edge positions - legend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth); - legend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom; - legend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915 - - // cache the position of the newly generated or reordered items - item._legendItemPos = [legend.itemX, legend.itemY]; - - // advance - if (horizontal) { - legend.itemX += itemWidth; - - } else { - legend.itemY += itemMarginTop + itemHeight + itemMarginBottom; - legend.lastLineHeight = itemHeight; - } - - // the width of the widest item - legend.offsetWidth = widthOption || mathMax( - (horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding, - legend.offsetWidth - ); - }, - - /** - * Get all items, which is one item per series for normal series and one item per point - * for pie series. - */ - getAllItems: function () { - var allItems = []; - each(this.chart.series, function (series) { - var seriesOptions = series.options; - - // Handle showInLegend. If the series is linked to another series, defaults to false. - if (!pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? UNDEFINED : false, true)) { - return; - } - - // use points or series for the legend item depending on legendType - allItems = allItems.concat( - series.legendItems || - (seriesOptions.legendType === 'point' ? - series.data : - series) - ); - }); - return allItems; - }, - - /** - * Render the legend. This method can be called both before and after - * chart.render. If called after, it will only rearrange items instead - * of creating new ones. - */ - render: function () { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - legendGroup = legend.group, - allItems, - display, - legendWidth, - legendHeight, - box = legend.box, - options = legend.options, - padding = legend.padding, - legendBorderWidth = options.borderWidth, - legendBackgroundColor = options.backgroundColor; - - legend.itemX = legend.initialItemX; - legend.itemY = legend.initialItemY; - legend.offsetWidth = 0; - legend.lastItemY = 0; - - if (!legendGroup) { - legend.group = legendGroup = renderer.g('legend') - .attr({ zIndex: 7 }) - .add(); - legend.contentGroup = renderer.g() - .attr({ zIndex: 1 }) // above background - .add(legendGroup); - legend.scrollGroup = renderer.g() - .add(legend.contentGroup); - } - - legend.renderTitle(); - - // add each series or point - allItems = legend.getAllItems(); - - // sort by legendIndex - stableSort(allItems, function (a, b) { - return ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0); - }); - - // reversed legend - if (options.reversed) { - allItems.reverse(); - } - - legend.allItems = allItems; - legend.display = display = !!allItems.length; - - // render the items - each(allItems, function (item) { - legend.renderItem(item); - }); - - // Draw the border - legendWidth = options.width || legend.offsetWidth; - legendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight; - - - legendHeight = legend.handleOverflow(legendHeight); - - if (legendBorderWidth || legendBackgroundColor) { - legendWidth += padding; - legendHeight += padding; - - if (!box) { - legend.box = box = renderer.rect( - 0, - 0, - legendWidth, - legendHeight, - options.borderRadius, - legendBorderWidth || 0 - ).attr({ - stroke: options.borderColor, - 'stroke-width': legendBorderWidth || 0, - fill: legendBackgroundColor || NONE - }) - .add(legendGroup) - .shadow(options.shadow); - box.isNew = true; - - } else if (legendWidth > 0 && legendHeight > 0) { - box[box.isNew ? 'attr' : 'animate']( - box.crisp(null, null, null, legendWidth, legendHeight) - ); - box.isNew = false; - } - - // hide the border if no items - box[display ? 'show' : 'hide'](); - } - - legend.legendWidth = legendWidth; - legend.legendHeight = legendHeight; - - // Now that the legend width and height are established, put the items in the - // final position - each(allItems, function (item) { - legend.positionItem(item); - }); - - // 1.x compatibility: positioning based on style - /*var props = ['left', 'right', 'top', 'bottom'], - prop, - i = 4; - while (i--) { - prop = props[i]; - if (options.style[prop] && options.style[prop] !== 'auto') { - options[i < 2 ? 'align' : 'verticalAlign'] = prop; - options[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1); - } - }*/ - - if (display) { - legendGroup.align(extend({ - width: legendWidth, - height: legendHeight - }, options), true, 'spacingBox'); - } - - if (!chart.isResizing) { - this.positionCheckboxes(); - } - }, - - /** - * Set up the overflow handling by adding navigation with up and down arrows below the - * legend. - */ - handleOverflow: function (legendHeight) { - var legend = this, - chart = this.chart, - renderer = chart.renderer, - options = this.options, - optionsY = options.y, - alignTop = options.verticalAlign === 'top', - spaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding, - maxHeight = options.maxHeight, - clipHeight, - clipRect = this.clipRect, - navOptions = options.navigation, - animation = pick(navOptions.animation, true), - arrowSize = navOptions.arrowSize || 12, - nav = this.nav, - pages = this.pages, - lastY, - allItems = this.allItems; - - // Adjust the height - if (options.layout === 'horizontal') { - spaceHeight /= 2; - } - if (maxHeight) { - spaceHeight = mathMin(spaceHeight, maxHeight); - } - - // Reset the legend height and adjust the clipping rectangle - pages.length = 0; - if (legendHeight > spaceHeight && !options.useHTML) { - - this.clipHeight = clipHeight = spaceHeight - 20 - this.titleHeight - this.padding; - this.currentPage = pick(this.currentPage, 1); - this.fullHeight = legendHeight; - - // Fill pages with Y positions so that the top of each a legend item defines - // the scroll top for each page (#2098) - each(allItems, function (item, i) { - var y = item._legendItemPos[1], - h = mathRound(item.legendItem.bBox.height), - len = pages.length; - - if (!len || (y - pages[len - 1] > clipHeight)) { - pages.push(lastY || y); - } - - if (i === allItems.length - 1 && y + h - pages[len - 1] > clipHeight) { - pages.push(y); - } - if (y !== lastY) { - lastY = y; - } - }); - - // Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787) - if (!clipRect) { - clipRect = legend.clipRect = renderer.clipRect(0, this.padding, 9999, 0); - legend.contentGroup.clip(clipRect); - } - clipRect.attr({ - height: clipHeight - }); - - // Add navigation elements - if (!nav) { - this.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group); - this.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(-1, animation); - }) - .add(nav); - this.pager = renderer.text('', 15, 10) - .css(navOptions.style) - .add(nav); - this.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(1, animation); - }) - .add(nav); - } - - // Set initial position - legend.scroll(0); - - legendHeight = spaceHeight; - - } else if (nav) { - clipRect.attr({ - height: chart.chartHeight - }); - nav.hide(); - this.scrollGroup.attr({ - translateY: 1 - }); - this.clipHeight = 0; // #1379 - } - - return legendHeight; - }, - - /** - * Scroll the legend by a number of pages - * @param {Object} scrollBy - * @param {Object} animation - */ - scroll: function (scrollBy, animation) { - var pages = this.pages, - pageCount = pages.length, - currentPage = this.currentPage + scrollBy, - clipHeight = this.clipHeight, - navOptions = this.options.navigation, - activeColor = navOptions.activeColor, - inactiveColor = navOptions.inactiveColor, - pager = this.pager, - padding = this.padding, - scrollOffset; - - // When resizing while looking at the last page - if (currentPage > pageCount) { - currentPage = pageCount; - } - - if (currentPage > 0) { - - if (animation !== UNDEFINED) { - setAnimation(animation, this.chart); - } - - this.nav.attr({ - translateX: padding, - translateY: clipHeight + this.padding + 7 + this.titleHeight, - visibility: VISIBLE - }); - this.up.attr({ - fill: currentPage === 1 ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === 1 ? 'default' : 'pointer' - }); - pager.attr({ - text: currentPage + '/' + pageCount - }); - this.down.attr({ - x: 18 + this.pager.getBBox().width, // adjust to text width - fill: currentPage === pageCount ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === pageCount ? 'default' : 'pointer' - }); - - scrollOffset = -pages[currentPage - 1] + this.initialItemY; - - this.scrollGroup.animate({ - translateY: scrollOffset - }); - - this.currentPage = currentPage; - this.positionCheckboxes(scrollOffset); - } - - } - -}; - -/* - * LegendSymbolMixin - */ - -var LegendSymbolMixin = Highcharts.LegendSymbolMixin = { - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawRectangle: function (legend, item) { - var symbolHeight = legend.options.symbolHeight || 12; - - item.legendSymbol = this.chart.renderer.rect( - 0, - legend.baseline - 5 - (symbolHeight / 2), - legend.symbolWidth, - symbolHeight, - pick(legend.options.symbolRadius, 2) - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - - }, - - /** - * Get the series' symbol in the legend. This method should be overridable to create custom - * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols. - * - * @param {Object} legend The legend object - */ - drawLineMarker: function (legend) { - - var options = this.options, - markerOptions = options.marker, - radius, - legendOptions = legend.options, - legendSymbol, - symbolWidth = legend.symbolWidth, - renderer = this.chart.renderer, - legendItemGroup = this.legendGroup, - verticalCenter = legend.baseline - mathRound(renderer.fontMetrics(legendOptions.itemStyle.fontSize).b * 0.3), - attr; - - // Draw the line - if (options.lineWidth) { - attr = { - 'stroke-width': options.lineWidth - }; - if (options.dashStyle) { - attr.dashstyle = options.dashStyle; - } - this.legendLine = renderer.path([ - M, - 0, - verticalCenter, - L, - symbolWidth, - verticalCenter - ]) - .attr(attr) - .add(legendItemGroup); - } - - // Draw the marker - if (markerOptions && markerOptions.enabled) { - radius = markerOptions.radius; - this.legendSymbol = legendSymbol = renderer.symbol( - this.symbol, - (symbolWidth / 2) - radius, - verticalCenter - radius, - 2 * radius, - 2 * radius - ) - .add(legendItemGroup); - legendSymbol.isMarker = true; - } - } -}; - -// Workaround for #2030, horizontal legend items not displaying in IE11 Preview. -// TODO: When IE11 is released, check again for this bug, and remove the fix -// or make a better one. -if (/Trident\/7\.0/.test(userAgent)) { - wrap(Legend.prototype, 'positionItem', function (proceed, item) { - var legend = this, - runPositionItem = function () { // If chart destroyed in sync, this is undefined (#2030) - if (item._legendItemPos) { - proceed.call(legend, item); - } - }; - - if (legend.chart.renderer.forExport) { - runPositionItem(); - } else { - setTimeout(runPositionItem); - } - }); -} -/** - * The chart class - * @param {Object} options - * @param {Function} callback Function to run when the chart has loaded - */ -function Chart() { - this.init.apply(this, arguments); -} - -Chart.prototype = { - - /** - * Initialize the chart - */ - init: function (userOptions, callback) { - - // Handle regular options - var options, - seriesOptions = userOptions.series; // skip merging data points to increase performance - - userOptions.series = null; - options = merge(defaultOptions, userOptions); // do the merge - options.series = userOptions.series = seriesOptions; // set back the series data - this.userOptions = userOptions; - - var optionsChart = options.chart; - - // Create margin & spacing array - this.margin = this.splashArray('margin', optionsChart); - this.spacing = this.splashArray('spacing', optionsChart); - - var chartEvents = optionsChart.events; - - //this.runChartClick = chartEvents && !!chartEvents.click; - this.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom - - this.callback = callback; - this.isResizing = 0; - this.options = options; - //chartTitleOptions = UNDEFINED; - //chartSubtitleOptions = UNDEFINED; - - this.axes = []; - this.series = []; - this.hasCartesianSeries = optionsChart.showAxes; - //this.axisOffset = UNDEFINED; - //this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes - //this.inverted = UNDEFINED; - //this.loadingShown = UNDEFINED; - //this.container = UNDEFINED; - //this.chartWidth = UNDEFINED; - //this.chartHeight = UNDEFINED; - //this.marginRight = UNDEFINED; - //this.marginBottom = UNDEFINED; - //this.containerWidth = UNDEFINED; - //this.containerHeight = UNDEFINED; - //this.oldChartWidth = UNDEFINED; - //this.oldChartHeight = UNDEFINED; - - //this.renderTo = UNDEFINED; - //this.renderToClone = UNDEFINED; - - //this.spacingBox = UNDEFINED - - //this.legend = UNDEFINED; - - // Elements - //this.chartBackground = UNDEFINED; - //this.plotBackground = UNDEFINED; - //this.plotBGImage = UNDEFINED; - //this.plotBorder = UNDEFINED; - //this.loadingDiv = UNDEFINED; - //this.loadingSpan = UNDEFINED; - - var chart = this, - eventType; - - // Add the chart to the global lookup - chart.index = charts.length; - charts.push(chart); - - // Set up auto resize - if (optionsChart.reflow !== false) { - addEvent(chart, 'load', function () { - chart.initReflow(); - }); - } - - // Chart event handlers - if (chartEvents) { - for (eventType in chartEvents) { - addEvent(chart, eventType, chartEvents[eventType]); - } - } - - chart.xAxis = []; - chart.yAxis = []; - - // Expose methods and variables - chart.animation = useCanVG ? false : pick(optionsChart.animation, true); - chart.pointCount = 0; - chart.counters = new ChartCounters(); - - chart.firstRender(); - }, - - /** - * Initialize an individual series, called internally before render time - */ - initSeries: function (options) { - var chart = this, - optionsChart = chart.options.chart, - type = options.type || optionsChart.type || optionsChart.defaultSeriesType, - series, - constr = seriesTypes[type]; - - // No such series type - if (!constr) { - error(17, true); - } - - series = new constr(); - series.init(this, options); - return series; - }, - - /** - * Check whether a given point is within the plot area - * - * @param {Number} plotX Pixel x relative to the plot area - * @param {Number} plotY Pixel y relative to the plot area - * @param {Boolean} inverted Whether the chart is inverted - */ - isInsidePlot: function (plotX, plotY, inverted) { - var x = inverted ? plotY : plotX, - y = inverted ? plotX : plotY; - - return x >= 0 && - x <= this.plotWidth && - y >= 0 && - y <= this.plotHeight; - }, - - /** - * Adjust all axes tick amounts - */ - adjustTickAmounts: function () { - if (this.options.chart.alignTicks !== false) { - each(this.axes, function (axis) { - axis.adjustTickAmount(); - }); - } - this.maxTicks = null; - }, - - /** - * Redraw legend, axes or series based on updated data - * - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - redraw: function (animation) { - var chart = this, - axes = chart.axes, - series = chart.series, - pointer = chart.pointer, - legend = chart.legend, - redrawLegend = chart.isDirtyLegend, - hasStackedSeries, - hasDirtyStacks, - isDirtyBox = chart.isDirtyBox, // todo: check if it has actually changed? - seriesLength = series.length, - i = seriesLength, - serie, - renderer = chart.renderer, - isHiddenChart = renderer.isHidden(), - afterRedraw = []; - - setAnimation(animation, chart); - - if (isHiddenChart) { - chart.cloneRenderTo(); - } - - // Adjust title layout (reflow multiline text) - chart.layOutTitles(); - - // link stacked series - while (i--) { - serie = series[i]; - - if (serie.options.stacking) { - hasStackedSeries = true; - - if (serie.isDirty) { - hasDirtyStacks = true; - break; - } - } - } - if (hasDirtyStacks) { // mark others as dirty - i = seriesLength; - while (i--) { - serie = series[i]; - if (serie.options.stacking) { - serie.isDirty = true; - } - } - } - - // handle updated data in the series - each(series, function (serie) { - if (serie.isDirty) { // prepare the data so axis can read it - if (serie.options.legendType === 'point') { - redrawLegend = true; - } - } - }); - - // handle added or removed series - if (redrawLegend && legend.options.enabled) { // series or pie points are added or removed - // draw legend graphics - legend.render(); - - chart.isDirtyLegend = false; - } - - // reset stacks - if (hasStackedSeries) { - chart.getStacks(); - } - - - if (chart.hasCartesianSeries) { - if (!chart.isResizing) { - - // reset maxTicks - chart.maxTicks = null; - - // set axes scales - each(axes, function (axis) { - axis.setScale(); - }); - } - - chart.adjustTickAmounts(); - chart.getMargins(); - - // If one axis is dirty, all axes must be redrawn (#792, #2169) - each(axes, function (axis) { - if (axis.isDirty) { - isDirtyBox = true; - } - }); - - // redraw axes - each(axes, function (axis) { - - // Fire 'afterSetExtremes' only if extremes are set - if (axis.isDirtyExtremes) { // #821 - axis.isDirtyExtremes = false; - afterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119) - fireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751 - delete axis.eventArgs; - }); - } - - if (isDirtyBox || hasStackedSeries) { - axis.redraw(); - } - }); - - - } - // the plot areas size has changed - if (isDirtyBox) { - chart.drawChartBox(); - } - - - // redraw affected series - each(series, function (serie) { - if (serie.isDirty && serie.visible && - (!serie.isCartesian || serie.xAxis)) { // issue #153 - serie.redraw(); - } - }); - - // move tooltip or reset - if (pointer && pointer.reset) { - pointer.reset(true); - } - - // redraw if canvas - renderer.draw(); - - // fire the event - fireEvent(chart, 'redraw'); // jQuery breaks this when calling it from addEvent. Overwrites chart.redraw - - if (isHiddenChart) { - chart.cloneRenderTo(true); - } - - // Fire callbacks that are put on hold until after the redraw - each(afterRedraw, function (callback) { - callback.call(); - }); - }, - - /** - * Get an axis, series or point object by id. - * @param id {String} The id as given in the configuration options - */ - get: function (id) { - var chart = this, - axes = chart.axes, - series = chart.series; - - var i, - j, - points; - - // search axes - for (i = 0; i < axes.length; i++) { - if (axes[i].options.id === id) { - return axes[i]; - } - } - - // search series - for (i = 0; i < series.length; i++) { - if (series[i].options.id === id) { - return series[i]; - } - } - - // search points - for (i = 0; i < series.length; i++) { - points = series[i].points || []; - for (j = 0; j < points.length; j++) { - if (points[j].id === id) { - return points[j]; - } - } - } - return null; - }, - - /** - * Create the Axis instances based on the config options - */ - getAxes: function () { - var chart = this, - options = this.options, - xAxisOptions = options.xAxis = splat(options.xAxis || {}), - yAxisOptions = options.yAxis = splat(options.yAxis || {}), - optionsArray, - axis; - - // make sure the options are arrays and add some members - each(xAxisOptions, function (axis, i) { - axis.index = i; - axis.isX = true; - }); - - each(yAxisOptions, function (axis, i) { - axis.index = i; - }); - - // concatenate all axis options into one array - optionsArray = xAxisOptions.concat(yAxisOptions); - - each(optionsArray, function (axisOptions) { - axis = new Axis(chart, axisOptions); - }); - - chart.adjustTickAmounts(); - }, - - - /** - * Get the currently selected points from all series - */ - getSelectedPoints: function () { - var points = []; - each(this.series, function (serie) { - points = points.concat(grep(serie.points || [], function (point) { - return point.selected; - })); - }); - return points; - }, - - /** - * Get the currently selected series - */ - getSelectedSeries: function () { - return grep(this.series, function (serie) { - return serie.selected; - }); - }, - - /** - * Generate stacks for each series and calculate stacks total values - */ - getStacks: function () { - var chart = this; - - // reset stacks for each yAxis - each(chart.yAxis, function (axis) { - if (axis.stacks && axis.hasVisibleSeries) { - axis.oldStacks = axis.stacks; - } - }); - - each(chart.series, function (series) { - if (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) { - series.stackKey = series.type + pick(series.options.stack, ''); - } - }); - }, - - /** - * Display the zoom button - */ - showResetZoom: function () { - var chart = this, - lang = defaultOptions.lang, - btnOptions = chart.options.chart.resetZoomButton, - theme = btnOptions.theme, - states = theme.states, - alignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox'; - - this.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, function () { chart.zoomOut(); }, theme, states && states.hover) - .attr({ - align: btnOptions.position.align, - title: lang.resetZoomTitle - }) - .add() - .align(btnOptions.position, false, alignTo); - - }, - - /** - * Zoom out to 1:1 - */ - zoomOut: function () { - var chart = this; - fireEvent(chart, 'selection', { resetSelection: true }, function () { - chart.zoom(); - }); - }, - - /** - * Zoom into a given portion of the chart given by axis coordinates - * @param {Object} event - */ - zoom: function (event) { - var chart = this, - hasZoomed, - pointer = chart.pointer, - displayButton = false, - resetZoomButton; - - // If zoom is called with no arguments, reset the axes - if (!event || event.resetSelection) { - each(chart.axes, function (axis) { - hasZoomed = axis.zoom(); - }); - } else { // else, zoom in on all axes - each(event.xAxis.concat(event.yAxis), function (axisData) { - var axis = axisData.axis, - isXAxis = axis.isXAxis; - - // don't zoom more than minRange - if (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) { - hasZoomed = axis.zoom(axisData.min, axisData.max); - if (axis.displayBtn) { - displayButton = true; - } - } - }); - } - - // Show or hide the Reset zoom button - resetZoomButton = chart.resetZoomButton; - if (displayButton && !resetZoomButton) { - chart.showResetZoom(); - } else if (!displayButton && isObject(resetZoomButton)) { - chart.resetZoomButton = resetZoomButton.destroy(); - } - - - // Redraw - if (hasZoomed) { - chart.redraw( - pick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation - ); - } - }, - - /** - * Pan the chart by dragging the mouse across the pane. This function is called - * on mouse move, and the distance to pan is computed from chartX compared to - * the first chartX position in the dragging operation. - */ - pan: function (e, panning) { - - var chart = this, - hoverPoints = chart.hoverPoints, - doRedraw; - - // remove active points for shared tooltip - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps - var mousePos = e[isX ? 'chartX' : 'chartY'], - axis = chart[isX ? 'xAxis' : 'yAxis'][0], - startPos = chart[isX ? 'mouseDownX' : 'mouseDownY'], - halfPointRange = (axis.pointRange || 0) / 2, - extremes = axis.getExtremes(), - newMin = axis.toValue(startPos - mousePos, true) + halfPointRange, - newMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange; - - if (axis.series.length && newMin > mathMin(extremes.dataMin, extremes.min) && newMax < mathMax(extremes.dataMax, extremes.max)) { - axis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' }); - doRedraw = true; - } - - chart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run - }); - - if (doRedraw) { - chart.redraw(false); - } - css(chart.container, { cursor: 'move' }); - }, - - /** - * Show the title and subtitle of the chart - * - * @param titleOptions {Object} New title options - * @param subtitleOptions {Object} New subtitle options - * - */ - setTitle: function (titleOptions, subtitleOptions) { - var chart = this, - options = chart.options, - chartTitleOptions, - chartSubtitleOptions; - - chartTitleOptions = options.title = merge(options.title, titleOptions); - chartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions); - - // add title and subtitle - each([ - ['title', titleOptions, chartTitleOptions], - ['subtitle', subtitleOptions, chartSubtitleOptions] - ], function (arr) { - var name = arr[0], - title = chart[name], - titleOptions = arr[1], - chartTitleOptions = arr[2]; - - if (title && titleOptions) { - chart[name] = title = title.destroy(); // remove old - } - - if (chartTitleOptions && chartTitleOptions.text && !title) { - chart[name] = chart.renderer.text( - chartTitleOptions.text, - 0, - 0, - chartTitleOptions.useHTML - ) - .attr({ - align: chartTitleOptions.align, - 'class': PREFIX + name, - zIndex: chartTitleOptions.zIndex || 4 - }) - .css(chartTitleOptions.style) - .add(); - } - }); - chart.layOutTitles(); - }, - - /** - * Lay out the chart titles and cache the full offset height for use in getMargins - */ - layOutTitles: function () { - var titleOffset = 0, - title = this.title, - subtitle = this.subtitle, - options = this.options, - titleOptions = options.title, - subtitleOptions = options.subtitle, - autoWidth = this.spacingBox.width - 44; // 44 makes room for default context button - - if (title) { - title - .css({ width: (titleOptions.width || autoWidth) + PX }) - .align(extend({ y: 15 }, titleOptions), false, 'spacingBox'); - - if (!titleOptions.floating && !titleOptions.verticalAlign) { - titleOffset = title.getBBox().height; - - // Adjust for browser consistency + backwards compat after #776 fix - if (titleOffset >= 18 && titleOffset <= 25) { - titleOffset = 15; - } - } - } - if (subtitle) { - subtitle - .css({ width: (subtitleOptions.width || autoWidth) + PX }) - .align(extend({ y: titleOffset + titleOptions.margin }, subtitleOptions), false, 'spacingBox'); - - if (!subtitleOptions.floating && !subtitleOptions.verticalAlign) { - titleOffset = mathCeil(titleOffset + subtitle.getBBox().height); - } - } - - this.titleOffset = titleOffset; // used in getMargins - }, - - /** - * Get chart width and height according to options and container size - */ - getChartSize: function () { - var chart = this, - optionsChart = chart.options.chart, - renderTo = chart.renderToClone || chart.renderTo; - - // get inner width and height from jQuery (#824) - chart.containerWidth = adapterRun(renderTo, 'width'); - chart.containerHeight = adapterRun(renderTo, 'height'); - - chart.chartWidth = mathMax(0, optionsChart.width || chart.containerWidth || 600); // #1393, 1460 - chart.chartHeight = mathMax(0, pick(optionsChart.height, - // the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7: - chart.containerHeight > 19 ? chart.containerHeight : 400)); - }, - - /** - * Create a clone of the chart's renderTo div and place it outside the viewport to allow - * size computation on chart.render and chart.redraw - */ - cloneRenderTo: function (revert) { - var clone = this.renderToClone, - container = this.container; - - // Destroy the clone and bring the container back to the real renderTo div - if (revert) { - if (clone) { - this.renderTo.appendChild(container); - discardElement(clone); - delete this.renderToClone; - } - - // Set up the clone - } else { - if (container && container.parentNode === this.renderTo) { - this.renderTo.removeChild(container); // do not clone this - } - this.renderToClone = clone = this.renderTo.cloneNode(0); - css(clone, { - position: ABSOLUTE, - top: '-9999px', - display: 'block' // #833 - }); - doc.body.appendChild(clone); - if (container) { - clone.appendChild(container); - } - } - }, - - /** - * Get the containing element, determine the size and create the inner container - * div to hold the chart - */ - getContainer: function () { - var chart = this, - container, - optionsChart = chart.options.chart, - chartWidth, - chartHeight, - renderTo, - indexAttrName = 'data-highcharts-chart', - oldChartIndex, - containerId; - - chart.renderTo = renderTo = optionsChart.renderTo; - containerId = PREFIX + idCounter++; - - if (isString(renderTo)) { - chart.renderTo = renderTo = doc.getElementById(renderTo); - } - - // Display an error if the renderTo is wrong - if (!renderTo) { - error(13, true); - } - - // If the container already holds a chart, destroy it - oldChartIndex = pInt(attr(renderTo, indexAttrName)); - if (!isNaN(oldChartIndex) && charts[oldChartIndex]) { - charts[oldChartIndex].destroy(); - } - - // Make a reference to the chart from the div - attr(renderTo, indexAttrName, chart.index); - - // remove previous chart - renderTo.innerHTML = ''; - - // If the container doesn't have an offsetWidth, it has or is a child of a node - // that has display:none. We need to temporarily move it out to a visible - // state to determine the size, else the legend and tooltips won't render - // properly - if (!renderTo.offsetWidth) { - chart.cloneRenderTo(); - } - - // get the width and height - chart.getChartSize(); - chartWidth = chart.chartWidth; - chartHeight = chart.chartHeight; - - // create the inner container - chart.container = container = createElement(DIV, { - className: PREFIX + 'container' + - (optionsChart.className ? ' ' + optionsChart.className : ''), - id: containerId - }, extend({ - position: RELATIVE, - overflow: HIDDEN, // needed for context menu (avoid scrollbars) and - // content overflow in IE - width: chartWidth + PX, - height: chartHeight + PX, - textAlign: 'left', - lineHeight: 'normal', // #427 - zIndex: 0, // #1072 - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)' - }, optionsChart.style), - chart.renderToClone || renderTo - ); - - // cache the cursor (#1650) - chart._cursor = container.style.cursor; - - chart.renderer = - optionsChart.forExport ? // force SVG, used for SVG export - new SVGRenderer(container, chartWidth, chartHeight, true) : - new Renderer(container, chartWidth, chartHeight); - - if (useCanVG) { - // If we need canvg library, extend and configure the renderer - // to get the tracker for translating mouse events - chart.renderer.create(chart, container, chartWidth, chartHeight); - } - }, - - /** - * Calculate margins by rendering axis labels in a preliminary position. Title, - * subtitle and legend have already been rendered at this stage, but will be - * moved into their final positions - */ - getMargins: function () { - var chart = this, - spacing = chart.spacing, - axisOffset, - legend = chart.legend, - margin = chart.margin, - legendOptions = chart.options.legend, - legendMargin = pick(legendOptions.margin, 10), - legendX = legendOptions.x, - legendY = legendOptions.y, - align = legendOptions.align, - verticalAlign = legendOptions.verticalAlign, - titleOffset = chart.titleOffset; - - chart.resetMargins(); - axisOffset = chart.axisOffset; - - // Adjust for title and subtitle - if (titleOffset && !defined(margin[0])) { - chart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]); - } - - // Adjust for legend - if (legend.display && !legendOptions.floating) { - if (align === 'right') { // horizontal alignment handled first - if (!defined(margin[1])) { - chart.marginRight = mathMax( - chart.marginRight, - legend.legendWidth - legendX + legendMargin + spacing[1] - ); - } - } else if (align === 'left') { - if (!defined(margin[3])) { - chart.plotLeft = mathMax( - chart.plotLeft, - legend.legendWidth + legendX + legendMargin + spacing[3] - ); - } - - } else if (verticalAlign === 'top') { - if (!defined(margin[0])) { - chart.plotTop = mathMax( - chart.plotTop, - legend.legendHeight + legendY + legendMargin + spacing[0] - ); - } - - } else if (verticalAlign === 'bottom') { - if (!defined(margin[2])) { - chart.marginBottom = mathMax( - chart.marginBottom, - legend.legendHeight - legendY + legendMargin + spacing[2] - ); - } - } - } - - // adjust for scroller - if (chart.extraBottomMargin) { - chart.marginBottom += chart.extraBottomMargin; - } - if (chart.extraTopMargin) { - chart.plotTop += chart.extraTopMargin; - } - - // pre-render axes to get labels offset width - if (chart.hasCartesianSeries) { - each(chart.axes, function (axis) { - axis.getOffset(); - }); - } - - if (!defined(margin[3])) { - chart.plotLeft += axisOffset[3]; - } - if (!defined(margin[0])) { - chart.plotTop += axisOffset[0]; - } - if (!defined(margin[2])) { - chart.marginBottom += axisOffset[2]; - } - if (!defined(margin[1])) { - chart.marginRight += axisOffset[1]; - } - - chart.setChartSize(); - - }, - - /** - * Resize the chart to its container if size is not explicitly set - */ - reflow: function (e) { - var chart = this, - optionsChart = chart.options.chart, - renderTo = chart.renderTo, - width = optionsChart.width || adapterRun(renderTo, 'width'), - height = optionsChart.height || adapterRun(renderTo, 'height'), - target = e ? e.target : win, // #805 - MooTools doesn't supply e - doReflow = function () { - if (chart.container) { // It may have been destroyed in the meantime (#1257) - chart.setSize(width, height, false); - chart.hasUserSize = null; - } - }; - - // Width and height checks for display:none. Target is doc in IE8 and Opera, - // win in Firefox, Chrome and IE9. - if (!chart.hasUserSize && width && height && (target === win || target === doc)) { - - if (width !== chart.containerWidth || height !== chart.containerHeight) { - clearTimeout(chart.reflowTimeout); - if (e) { // Called from window.resize - chart.reflowTimeout = setTimeout(doReflow, 100); - } else { // Called directly (#2224) - doReflow(); - } - } - chart.containerWidth = width; - chart.containerHeight = height; - } - }, - - /** - * Add the event handlers necessary for auto resizing - */ - initReflow: function () { - var chart = this, - reflow = function (e) { - chart.reflow(e); - }; - - - addEvent(win, 'resize', reflow); - addEvent(chart, 'destroy', function () { - removeEvent(win, 'resize', reflow); - }); - }, - - /** - * Resize the chart to a given width and height - * @param {Number} width - * @param {Number} height - * @param {Object|Boolean} animation - */ - setSize: function (width, height, animation) { - var chart = this, - chartWidth, - chartHeight, - fireEndResize; - - // Handle the isResizing counter - chart.isResizing += 1; - fireEndResize = function () { - if (chart) { - fireEvent(chart, 'endResize', null, function () { - chart.isResizing -= 1; - }); - } - }; - - // set the animation for the current process - setAnimation(animation, chart); - - chart.oldChartHeight = chart.chartHeight; - chart.oldChartWidth = chart.chartWidth; - if (defined(width)) { - chart.chartWidth = chartWidth = mathMax(0, mathRound(width)); - chart.hasUserSize = !!chartWidth; - } - if (defined(height)) { - chart.chartHeight = chartHeight = mathMax(0, mathRound(height)); - } - - // Resize the container with the global animation applied if enabled (#2503) - (globalAnimation ? animate : css)(chart.container, { - width: chartWidth + PX, - height: chartHeight + PX - }, globalAnimation); - - chart.setChartSize(true); - chart.renderer.setSize(chartWidth, chartHeight, animation); - - // handle axes - chart.maxTicks = null; - each(chart.axes, function (axis) { - axis.isDirty = true; - axis.setScale(); - }); - - // make sure non-cartesian series are also handled - each(chart.series, function (serie) { - serie.isDirty = true; - }); - - chart.isDirtyLegend = true; // force legend redraw - chart.isDirtyBox = true; // force redraw of plot and chart border - - chart.getMargins(); - - chart.redraw(animation); - - - chart.oldChartHeight = null; - fireEvent(chart, 'resize'); - - // fire endResize and set isResizing back - // If animation is disabled, fire without delay - if (globalAnimation === false) { - fireEndResize(); - } else { // else set a timeout with the animation duration - setTimeout(fireEndResize, (globalAnimation && globalAnimation.duration) || 500); - } - }, - - /** - * Set the public chart properties. This is done before and after the pre-render - * to determine margin sizes - */ - setChartSize: function (skipAxes) { - var chart = this, - inverted = chart.inverted, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - optionsChart = chart.options.chart, - spacing = chart.spacing, - clipOffset = chart.clipOffset, - clipX, - clipY, - plotLeft, - plotTop, - plotWidth, - plotHeight, - plotBorderWidth; - - chart.plotLeft = plotLeft = mathRound(chart.plotLeft); - chart.plotTop = plotTop = mathRound(chart.plotTop); - chart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight)); - chart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom)); - - chart.plotSizeX = inverted ? plotHeight : plotWidth; - chart.plotSizeY = inverted ? plotWidth : plotHeight; - - chart.plotBorderWidth = optionsChart.plotBorderWidth || 0; - - // Set boxes used for alignment - chart.spacingBox = renderer.spacingBox = { - x: spacing[3], - y: spacing[0], - width: chartWidth - spacing[3] - spacing[1], - height: chartHeight - spacing[0] - spacing[2] - }; - chart.plotBox = renderer.plotBox = { - x: plotLeft, - y: plotTop, - width: plotWidth, - height: plotHeight - }; - - plotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2); - clipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2); - clipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2); - chart.clipBox = { - x: clipX, - y: clipY, - width: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), - height: mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY) - }; - - if (!skipAxes) { - each(chart.axes, function (axis) { - axis.setAxisSize(); - axis.setAxisTranslation(); - }); - } - }, - - /** - * Initial margins before auto size margins are applied - */ - resetMargins: function () { - var chart = this, - spacing = chart.spacing, - margin = chart.margin; - - chart.plotTop = pick(margin[0], spacing[0]); - chart.marginRight = pick(margin[1], spacing[1]); - chart.marginBottom = pick(margin[2], spacing[2]); - chart.plotLeft = pick(margin[3], spacing[3]); - chart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left - chart.clipOffset = [0, 0, 0, 0]; - }, - - /** - * Draw the borders and backgrounds for chart and plot area - */ - drawChartBox: function () { - var chart = this, - optionsChart = chart.options.chart, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - chartBackground = chart.chartBackground, - plotBackground = chart.plotBackground, - plotBorder = chart.plotBorder, - plotBGImage = chart.plotBGImage, - chartBorderWidth = optionsChart.borderWidth || 0, - chartBackgroundColor = optionsChart.backgroundColor, - plotBackgroundColor = optionsChart.plotBackgroundColor, - plotBackgroundImage = optionsChart.plotBackgroundImage, - plotBorderWidth = optionsChart.plotBorderWidth || 0, - mgn, - bgAttr, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - plotBox = chart.plotBox, - clipRect = chart.clipRect, - clipBox = chart.clipBox; - - // Chart area - mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0); - - if (chartBorderWidth || chartBackgroundColor) { - if (!chartBackground) { - - bgAttr = { - fill: chartBackgroundColor || NONE - }; - if (chartBorderWidth) { // #980 - bgAttr.stroke = optionsChart.borderColor; - bgAttr['stroke-width'] = chartBorderWidth; - } - chart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn, - optionsChart.borderRadius, chartBorderWidth) - .attr(bgAttr) - .add() - .shadow(optionsChart.shadow); - - } else { // resize - chartBackground.animate( - chartBackground.crisp(null, null, null, chartWidth - mgn, chartHeight - mgn) - ); - } - } - - - // Plot background - if (plotBackgroundColor) { - if (!plotBackground) { - chart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0) - .attr({ - fill: plotBackgroundColor - }) - .add() - .shadow(optionsChart.plotShadow); - } else { - plotBackground.animate(plotBox); - } - } - if (plotBackgroundImage) { - if (!plotBGImage) { - chart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight) - .add(); - } else { - plotBGImage.animate(plotBox); - } - } - - // Plot clip - if (!clipRect) { - chart.clipRect = renderer.clipRect(clipBox); - } else { - clipRect.animate({ - width: clipBox.width, - height: clipBox.height - }); - } - - // Plot area border - if (plotBorderWidth) { - if (!plotBorder) { - chart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth) - .attr({ - stroke: optionsChart.plotBorderColor, - 'stroke-width': plotBorderWidth, - zIndex: 1 - }) - .add(); - } else { - plotBorder.animate( - plotBorder.crisp(null, plotLeft, plotTop, plotWidth, plotHeight) - ); - } - } - - // reset - chart.isDirtyBox = false; - }, - - /** - * Detect whether a certain chart property is needed based on inspecting its options - * and series. This mainly applies to the chart.invert property, and in extensions to - * the chart.angular and chart.polar properties. - */ - propFromSeries: function () { - var chart = this, - optionsChart = chart.options.chart, - klass, - seriesOptions = chart.options.series, - i, - value; - - - each(['inverted', 'angular', 'polar'], function (key) { - - // The default series type's class - klass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType]; - - // Get the value from available chart-wide properties - value = ( - chart[key] || // 1. it is set before - optionsChart[key] || // 2. it is set in the options - (klass && klass.prototype[key]) // 3. it's default series class requires it - ); - - // 4. Check if any the chart's series require it - i = seriesOptions && seriesOptions.length; - while (!value && i--) { - klass = seriesTypes[seriesOptions[i].type]; - if (klass && klass.prototype[key]) { - value = true; - } - } - - // Set the chart property - chart[key] = value; - }); - - }, - - /** - * Link two or more series together. This is done initially from Chart.render, - * and after Chart.addSeries and Series.remove. - */ - linkSeries: function () { - var chart = this, - chartSeries = chart.series; - - // Reset links - each(chartSeries, function (series) { - series.linkedSeries.length = 0; - }); - - // Apply new links - each(chartSeries, function (series) { - var linkedTo = series.options.linkedTo; - if (isString(linkedTo)) { - if (linkedTo === ':previous') { - linkedTo = chart.series[series.index - 1]; - } else { - linkedTo = chart.get(linkedTo); - } - if (linkedTo) { - linkedTo.linkedSeries.push(series); - series.linkedParent = linkedTo; - } - } - }); - }, - - /** - * Render all graphics for the chart - */ - render: function () { - var chart = this, - axes = chart.axes, - renderer = chart.renderer, - options = chart.options; - - var labels = options.labels, - credits = options.credits, - creditsHref; - - // Title - chart.setTitle(); - - - // Legend - chart.legend = new Legend(chart, options.legend); - - chart.getStacks(); // render stacks - - // Get margins by pre-rendering axes - // set axes scales - each(axes, function (axis) { - axis.setScale(); - }); - - chart.getMargins(); - - chart.maxTicks = null; // reset for second pass - each(axes, function (axis) { - axis.setTickPositions(true); // update to reflect the new margins - axis.setMaxTicks(); - }); - chart.adjustTickAmounts(); - chart.getMargins(); // second pass to check for new labels - - - // Draw the borders and backgrounds - chart.drawChartBox(); - - - // Axes - if (chart.hasCartesianSeries) { - each(axes, function (axis) { - axis.render(); - }); - } - - // The series - if (!chart.seriesGroup) { - chart.seriesGroup = renderer.g('series-group') - .attr({ zIndex: 3 }) - .add(); - } - each(chart.series, function (serie) { - serie.translate(); - serie.setTooltipPoints(); - serie.render(); - }); - - // Labels - if (labels.items) { - each(labels.items, function (label) { - var style = extend(labels.style, label.style), - x = pInt(style.left) + chart.plotLeft, - y = pInt(style.top) + chart.plotTop + 12; - - // delete to prevent rewriting in IE - delete style.left; - delete style.top; - - renderer.text( - label.html, - x, - y - ) - .attr({ zIndex: 2 }) - .css(style) - .add(); - - }); - } - - // Credits - if (credits.enabled && !chart.credits) { - creditsHref = credits.href; - chart.credits = renderer.text( - credits.text, - 0, - 0 - ) - .on('click', function () { - if (creditsHref) { - location.href = creditsHref; - } - }) - .attr({ - align: credits.position.align, - zIndex: 8 - }) - .css(credits.style) - .add() - .align(credits.position); - } - - // Set flag - chart.hasRendered = true; - - }, - - /** - * Clean up memory usage - */ - destroy: function () { - var chart = this, - axes = chart.axes, - series = chart.series, - container = chart.container, - i, - parentNode = container && container.parentNode; - - // fire the chart.destoy event - fireEvent(chart, 'destroy'); - - // Delete the chart from charts lookup array - charts[chart.index] = UNDEFINED; - chart.renderTo.removeAttribute('data-highcharts-chart'); - - // remove events - removeEvent(chart); - - // ==== Destroy collections: - // Destroy axes - i = axes.length; - while (i--) { - axes[i] = axes[i].destroy(); - } - - // Destroy each series - i = series.length; - while (i--) { - series[i] = series[i].destroy(); - } - - // ==== Destroy chart properties: - each(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', - 'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', - 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) { - var prop = chart[name]; - - if (prop && prop.destroy) { - chart[name] = prop.destroy(); - } - }); - - // remove container and all SVG - if (container) { // can break in IE when destroyed before finished loading - container.innerHTML = ''; - removeEvent(container); - if (parentNode) { - discardElement(container); - } - - } - - // clean it all up - for (i in chart) { - delete chart[i]; - } - - }, - - - /** - * VML namespaces can't be added until after complete. Listening - * for Perini's doScroll hack is not enough. - */ - isReadyToRender: function () { - var chart = this; - - // Note: in spite of JSLint's complaints, win == win.top is required - /*jslint eqeq: true*/ - if ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) { - /*jslint eqeq: false*/ - if (useCanVG) { - // Delay rendering until canvg library is downloaded and ready - CanVGController.push(function () { chart.firstRender(); }, chart.options.global.canvasToolsURL); - } else { - doc.attachEvent('onreadystatechange', function () { - doc.detachEvent('onreadystatechange', chart.firstRender); - if (doc.readyState === 'complete') { - chart.firstRender(); - } - }); - } - return false; - } - return true; - }, - - /** - * Prepare for first rendering after all data are loaded - */ - firstRender: function () { - var chart = this, - options = chart.options, - callback = chart.callback; - - // Check whether the chart is ready to render - if (!chart.isReadyToRender()) { - return; - } - - // Create the container - chart.getContainer(); - - // Run an early event after the container and renderer are established - fireEvent(chart, 'init'); - - - chart.resetMargins(); - chart.setChartSize(); - - // Set the common chart properties (mainly invert) from the given series - chart.propFromSeries(); - - // get axes - chart.getAxes(); - - // Initialize the series - each(options.series || [], function (serieOptions) { - chart.initSeries(serieOptions); - }); - - chart.linkSeries(); - - // Run an event after axes and series are initialized, but before render. At this stage, - // the series data is indexed and cached in the xData and yData arrays, so we can access - // those before rendering. Used in Highstock. - fireEvent(chart, 'beforeRender'); - - // depends on inverted and on margins being set - chart.pointer = new Pointer(chart, options); - - chart.render(); - - // add canvas - chart.renderer.draw(); - // run callbacks - if (callback) { - callback.apply(chart, [chart]); - } - each(chart.callbacks, function (fn) { - fn.apply(chart, [chart]); - }); - - - // If the chart was rendered outside the top container, put it back in - chart.cloneRenderTo(true); - - fireEvent(chart, 'load'); - - }, - - /** - * Creates arrays for spacing and margin from given options. - */ - splashArray: function (target, options) { - var oVar = options[target], - tArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar]; - - return [pick(options[target + 'Top'], tArray[0]), - pick(options[target + 'Right'], tArray[1]), - pick(options[target + 'Bottom'], tArray[2]), - pick(options[target + 'Left'], tArray[3])]; - } -}; // end Chart - -// Hook for exporting module -Chart.prototype.callbacks = []; - -var CenteredSeriesMixin = Highcharts.CenteredSeriesMixin = { - /** - * Get the center of the pie based on the size and center options relative to the - * plot area. Borrowed by the polar and gauge series types. - */ - getCenter: function () { - - var options = this.options, - chart = this.chart, - slicingRoom = 2 * (options.slicedOffset || 0), - handleSlicingRoom, - plotWidth = chart.plotWidth - 2 * slicingRoom, - plotHeight = chart.plotHeight - 2 * slicingRoom, - centerOption = options.center, - positions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0], - smallestSize = mathMin(plotWidth, plotHeight), - isPercent; - - return map(positions, function (length, i) { - isPercent = /%$/.test(length); - handleSlicingRoom = i < 2 || (i === 2 && isPercent); - return (isPercent ? - // i == 0: centerX, relative to width - // i == 1: centerY, relative to height - // i == 2: size, relative to smallestSize - // i == 4: innerSize, relative to smallestSize - [plotWidth, plotHeight, smallestSize, smallestSize][i] * - pInt(length) / 100 : - length) + (handleSlicingRoom ? slicingRoom : 0); - }); - } -}; - -/** - * The Point object and prototype. Inheritable and used as base for PiePoint - */ -var Point = function () {}; -Point.prototype = { - - /** - * Initialize the point - * @param {Object} series The series object containing this point - * @param {Object} options The data in either number, array or object format - */ - init: function (series, options, x) { - - var point = this, - colors; - point.series = series; - point.applyOptions(options, x); - point.pointAttr = {}; - - if (series.options.colorByPoint) { - colors = series.options.colors || series.chart.options.colors; - point.color = point.color || colors[series.colorCounter++]; - // loop back to zero - if (series.colorCounter === colors.length) { - series.colorCounter = 0; - } - } - - series.chart.pointCount++; - return point; - }, - /** - * Apply the options containing the x and y data and possible some extra properties. - * This is called on point init or from point.update. - * - * @param {Object} options - */ - applyOptions: function (options, x) { - var point = this, - series = point.series, - pointValKey = series.pointValKey; - - options = Point.prototype.optionsToObject.call(this, options); - - // copy options directly to point - extend(point, options); - point.options = point.options ? extend(point.options, options) : options; - - // For higher dimension series types. For instance, for ranges, point.y is mapped to point.low. - if (pointValKey) { - point.y = point[pointValKey]; - } - - // If no x is set by now, get auto incremented value. All points must have an - // x value, however the y value can be null to create a gap in the series - if (point.x === UNDEFINED && series) { - point.x = x === UNDEFINED ? series.autoIncrement() : x; - } - - return point; - }, - - /** - * Transform number or array configs into objects - */ - optionsToObject: function (options) { - var ret = {}, - series = this.series, - pointArrayMap = series.pointArrayMap || ['y'], - valueCount = pointArrayMap.length, - firstItemType, - i = 0, - j = 0; - - if (typeof options === 'number' || options === null) { - ret[pointArrayMap[0]] = options; - - } else if (isArray(options)) { - // with leading x value - if (options.length > valueCount) { - firstItemType = typeof options[0]; - if (firstItemType === 'string') { - ret.name = options[0]; - } else if (firstItemType === 'number') { - ret.x = options[0]; - } - i++; - } - while (j < valueCount) { - ret[pointArrayMap[j++]] = options[i++]; - } - } else if (typeof options === 'object') { - ret = options; - - // This is the fastest way to detect if there are individual point dataLabels that need - // to be considered in drawDataLabels. These can only occur in object configs. - if (options.dataLabels) { - series._hasPointLabels = true; - } - - // Same approach as above for markers - if (options.marker) { - series._hasPointMarkers = true; - } - } - return ret; - }, - - /** - * Destroy a point to clear memory. Its reference still stays in series.data. - */ - destroy: function () { - var point = this, - series = point.series, - chart = series.chart, - hoverPoints = chart.hoverPoints, - prop; - - chart.pointCount--; - - if (hoverPoints) { - point.setState(); - erase(hoverPoints, point); - if (!hoverPoints.length) { - chart.hoverPoints = null; - } - - } - if (point === chart.hoverPoint) { - point.onMouseOut(); - } - - // remove all events - if (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive - removeEvent(point); - point.destroyElements(); - } - - if (point.legendItem) { // pies have legend items - chart.legend.destroyItem(point); - } - - for (prop in point) { - point[prop] = null; - } - - - }, - - /** - * Destroy SVG elements associated with the point - */ - destroyElements: function () { - var point = this, - props = ['graphic', 'dataLabel', 'dataLabelUpper', 'group', 'connector', 'shadowGroup'], - prop, - i = 6; - while (i--) { - prop = props[i]; - if (point[prop]) { - point[prop] = point[prop].destroy(); - } - } - }, - - /** - * Return the configuration hash needed for the data label and tooltip formatters - */ - getLabelConfig: function () { - var point = this; - return { - x: point.category, - y: point.y, - key: point.name || point.category, - series: point.series, - point: point, - percentage: point.percentage, - total: point.total || point.stackTotal - }; - }, - - /** - * Toggle the selection status of a point - * @param {Boolean} selected Whether to select or unselect the point. - * @param {Boolean} accumulate Whether to add to the previous selection. By default, - * this happens if the control key (Cmd on Mac) was pressed during clicking. - */ - select: function (selected, accumulate) { - var point = this, - series = point.series, - chart = series.chart; - - selected = pick(selected, !point.selected); - - // fire the event with the defalut handler - point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () { - point.selected = point.options.selected = selected; - series.options.data[inArray(point, series.data)] = point.options; - - point.setState(selected && SELECT_STATE); - - // unselect all other points unless Ctrl or Cmd + click - if (!accumulate) { - each(chart.getSelectedPoints(), function (loopPoint) { - if (loopPoint.selected && loopPoint !== point) { - loopPoint.selected = loopPoint.options.selected = false; - series.options.data[inArray(loopPoint, series.data)] = loopPoint.options; - loopPoint.setState(NORMAL_STATE); - loopPoint.firePointEvent('unselect'); - } - }); - } - }); - }, - - /** - * Runs on mouse over the point - */ - onMouseOver: function (e) { - var point = this, - series = point.series, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - // set normal state to previous series - if (hoverPoint && hoverPoint !== point) { - hoverPoint.onMouseOut(); - } - - // trigger the event - point.firePointEvent('mouseOver'); - - // update the tooltip - if (tooltip && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.refresh(point, e); - } - - // hover this - point.setState(HOVER_STATE); - chart.hoverPoint = point; - }, - - /** - * Runs on mouse out from the point - */ - onMouseOut: function () { - var chart = this.series.chart, - hoverPoints = chart.hoverPoints; - - if (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887 - this.firePointEvent('mouseOut'); - - this.setState(); - chart.hoverPoint = null; - } - }, - - /** - * Extendable method for formatting each point's tooltip line - * - * @return {String} A string to be concatenated in to the common tooltip text - */ - tooltipFormatter: function (pointFormat) { - - // Insert options for valueDecimals, valuePrefix, and valueSuffix - var series = this.series, - seriesTooltipOptions = series.tooltipOptions, - valueDecimals = pick(seriesTooltipOptions.valueDecimals, ''), - valuePrefix = seriesTooltipOptions.valuePrefix || '', - valueSuffix = seriesTooltipOptions.valueSuffix || ''; - - // Loop over the point array map and replace unformatted values with sprintf formatting markup - each(series.pointArrayMap || ['y'], function (key) { - key = '{point.' + key; // without the closing bracket - if (valuePrefix || valueSuffix) { - pointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix); - } - pointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}'); - }); - - return format(pointFormat, { - point: this, - series: this.series - }); - }, - - /** - * Fire an event on the Point object. Must not be renamed to fireEvent, as this - * causes a name clash in MooTools - * @param {String} eventType - * @param {Object} eventArgs Additional event arguments - * @param {Function} defaultFunction Default event handler - */ - firePointEvent: function (eventType, eventArgs, defaultFunction) { - var point = this, - series = this.series, - seriesOptions = series.options; - - // load event handlers on demand to save time on mouseover/out - if (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) { - this.importEvents(); - } - - // add default handler if in selection mode - if (eventType === 'click' && seriesOptions.allowPointSelect) { - defaultFunction = function (event) { - // Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera - point.select(null, event.ctrlKey || event.metaKey || event.shiftKey); - }; - } - - fireEvent(this, eventType, eventArgs, defaultFunction); - }, - /** - * Import events from the series' and point's options. Only do it on - * demand, to save processing time on hovering. - */ - importEvents: function () { - if (!this.hasImportedEvents) { - var point = this, - options = merge(point.series.options.point, point.options), - events = options.events, - eventType; - - point.events = events; - - for (eventType in events) { - addEvent(point, eventType, events[eventType]); - } - this.hasImportedEvents = true; - - } - }, - - /** - * Set the point's state - * @param {String} state - */ - setState: function (state, move) { - var point = this, - plotX = point.plotX, - plotY = point.plotY, - series = point.series, - stateOptions = series.options.states, - markerOptions = defaultPlotOptions[series.type].marker && series.options.marker, - normalDisabled = markerOptions && !markerOptions.enabled, - markerStateOptions = markerOptions && markerOptions.states[state], - stateDisabled = markerStateOptions && markerStateOptions.enabled === false, - stateMarkerGraphic = series.stateMarkerGraphic, - pointMarker = point.marker || {}, - chart = series.chart, - radius, - newSymbol, - pointAttr = point.pointAttr; - - state = state || NORMAL_STATE; // empty string - move = move && stateMarkerGraphic; - - if ( - // already has this state - (state === point.state && !move) || - // selected points don't respond to hover - (point.selected && state !== SELECT_STATE) || - // series' state options is disabled - (stateOptions[state] && stateOptions[state].enabled === false) || - // general point marker's state options is disabled - (state && (stateDisabled || (normalDisabled && !markerStateOptions.enabled))) || - // individual point marker's state options is disabled - (state && pointMarker.states && pointMarker.states[state] && pointMarker.states[state].enabled === false) // #1610 - - ) { - return; - } - - - // apply hover styles to the existing point - if (point.graphic) { - radius = markerOptions && point.graphic.symbolName && pointAttr[state].r; - point.graphic.attr(merge( - pointAttr[state], - radius ? { // new symbol attributes (#507, #612) - x: plotX - radius, - y: plotY - radius, - width: 2 * radius, - height: 2 * radius - } : {} - )); - } else { - // if a graphic is not applied to each point in the normal state, create a shared - // graphic for the hover state - if (state && markerStateOptions) { - radius = markerStateOptions.radius; - newSymbol = pointMarker.symbol || series.symbol; - - // If the point has another symbol than the previous one, throw away the - // state marker graphic and force a new one (#1459) - if (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) { - stateMarkerGraphic = stateMarkerGraphic.destroy(); - } - - // Add a new state marker graphic - if (!stateMarkerGraphic) { - series.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol( - newSymbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius - ) - .attr(pointAttr[state]) - .add(series.markerGroup); - stateMarkerGraphic.currentSymbol = newSymbol; - - // Move the existing graphic - } else { - stateMarkerGraphic[move ? 'animate' : 'attr']({ // #1054 - x: plotX - radius, - y: plotY - radius - }); - } - } - - if (stateMarkerGraphic) { - stateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY, chart.inverted) ? 'show' : 'hide'](); // #2450 - } - } - - point.state = state; - } -};/** - * @classDescription The base function which all other series types inherit from. The data in the series is stored - * in various arrays. - * - * - First, series.options.data contains all the original config options for - * each point whether added by options or methods like series.addPoint. - * - Next, series.data contains those values converted to points, but in case the series data length - * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It - * only contains the points that have been created on demand. - * - Then there's series.points that contains all currently visible point objects. In case of cropping, - * the cropped-away points are not part of this array. The series.points array starts at series.cropStart - * compared to series.data and series.options.data. If however the series data is grouped, these can't - * be correlated one to one. - * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points. - * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points. - * - * @param {Object} chart - * @param {Object} options - */ -var Series = function () {}; - -Series.prototype = { - - isCartesian: true, - type: 'line', - pointClass: Point, - sorted: true, // requires the data to be sorted - requireSorting: true, - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor', - r: 'radius' - }, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - parallelArrays: ['x', 'y'], // each point's x and y values are stored in this.xData and this.yData - init: function (chart, options) { - var series = this, - eventType, - events, - chartSeries = chart.series, - sortByIndex = function (a, b) { - return pick(a.options.index, a._i) - pick(b.options.index, b._i); - }; - - series.chart = chart; - series.options = options = series.setOptions(options); // merge with plotOptions - series.linkedSeries = []; - - // bind the axes - series.bindAxes(); - - // set some variables - extend(series, { - name: options.name, - state: NORMAL_STATE, - pointAttr: {}, - visible: options.visible !== false, // true by default - selected: options.selected === true // false by default - }); - - // special - if (useCanVG) { - options.animation = false; - } - - // register event listeners - events = options.events; - for (eventType in events) { - addEvent(series, eventType, events[eventType]); - } - if ( - (events && events.click) || - (options.point && options.point.events && options.point.events.click) || - options.allowPointSelect - ) { - chart.runTrackerClick = true; - } - - series.getColor(); - series.getSymbol(); - - // Set the data - each(series.parallelArrays, function (key) { - series[key + 'Data'] = []; - }); - series.setData(options.data, false); - - // Mark cartesian - if (series.isCartesian) { - chart.hasCartesianSeries = true; - } - - // Register it in the chart - chartSeries.push(series); - series._i = chartSeries.length - 1; - - // Sort series according to index option (#248, #1123, #2456) - stableSort(chartSeries, sortByIndex); - if (this.yAxis) { - stableSort(this.yAxis.series, sortByIndex); - } - - each(chartSeries, function (series, i) { - series.index = i; - series.name = series.name || 'Series ' + (i + 1); - }); - - }, - - /** - * Set the xAxis and yAxis properties of cartesian series, and register the series - * in the axis.series array - */ - bindAxes: function () { - var series = this, - seriesOptions = series.options, - chart = series.chart, - axisOptions; - - each(series.axisTypes || [], function (AXIS) { // repeat for xAxis and yAxis - - each(chart[AXIS], function (axis) { // loop through the chart's axis objects - axisOptions = axis.options; - - // apply if the series xAxis or yAxis option mathches the number of the - // axis, or if undefined, use the first axis - if ((seriesOptions[AXIS] === axisOptions.index) || - (seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) || - (seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) { - - // register this series in the axis.series lookup - axis.series.push(series); - - // set this series.xAxis or series.yAxis reference - series[AXIS] = axis; - - // mark dirty for redraw - axis.isDirty = true; - } - }); - - // The series needs an X and an Y axis - if (!series[AXIS] && series.optionalAxis !== AXIS) { - error(18, true); - } - - }); - }, - - /** - * For simple series types like line and column, the data values are held in arrays like - * xData and yData for quick lookup to find extremes and more. For multidimensional series - * like bubble and map, this can be extended with arrays like zData and valueData by - * adding to the series.parallelArrays array. - */ - updateParallelArrays: function (point, i) { - var series = point.series, - args = arguments, - fn = typeof i === 'number' ? - // Insert the value in the given position - function (key) { - var val = key === 'y' && series.toYData ? series.toYData(point) : point[key]; - series[key + 'Data'][i] = val; - } : - // Apply the method specified in i with the following arguments as arguments - function (key) { - Array.prototype[i].apply(series[key + 'Data'], Array.prototype.slice.call(args, 2)); - }; - - each(series.parallelArrays, fn); - }, - - /** - * Return an auto incremented x value based on the pointStart and pointInterval options. - * This is only used if an x value is not given for the point that calls autoIncrement. - */ - autoIncrement: function () { - var series = this, - options = series.options, - xIncrement = series.xIncrement; - - xIncrement = pick(xIncrement, options.pointStart, 0); - - series.pointInterval = pick(series.pointInterval, options.pointInterval, 1); - - series.xIncrement = xIncrement + series.pointInterval; - return xIncrement; - }, - - /** - * Divide the series data into segments divided by null values. - */ - getSegments: function () { - var series = this, - lastNull = -1, - segments = [], - i, - points = series.points, - pointsLength = points.length; - - if (pointsLength) { // no action required for [] - - // if connect nulls, just remove null points - if (series.options.connectNulls) { - i = pointsLength; - while (i--) { - if (points[i].y === null) { - points.splice(i, 1); - } - } - if (points.length) { - segments = [points]; - } - - // else, split on null points - } else { - each(points, function (point, i) { - if (point.y === null) { - if (i > lastNull + 1) { - segments.push(points.slice(lastNull + 1, i)); - } - lastNull = i; - } else if (i === pointsLength - 1) { // last value - segments.push(points.slice(lastNull + 1, i + 1)); - } - }); - } - } - - // register it - series.segments = segments; - }, - - /** - * Set the series options by merging from the options tree - * @param {Object} itemOptions - */ - setOptions: function (itemOptions) { - var chart = this.chart, - chartOptions = chart.options, - plotOptions = chartOptions.plotOptions, - userOptions = chart.userOptions || {}, - userPlotOptions = userOptions.plotOptions || {}, - typeOptions = plotOptions[this.type], - options; - - this.userOptions = itemOptions; - - options = merge( - typeOptions, - plotOptions.series, - itemOptions - ); - - // The tooltip options are merged between global and series specific options - this.tooltipOptions = merge( - defaultOptions.tooltip, - defaultOptions.plotOptions[this.type].tooltip, - userOptions.tooltip, - userPlotOptions.series && userPlotOptions.series.tooltip, - userPlotOptions[this.type] && userPlotOptions[this.type].tooltip, - itemOptions.tooltip - ); - - // Delete marker object if not allowed (#1125) - if (typeOptions.marker === null) { - delete options.marker; - } - - return options; - - }, - /** - * Get the series' color - */ - getColor: function () { - var options = this.options, - userOptions = this.userOptions, - defaultColors = this.chart.options.colors, - counters = this.chart.counters, - color, - colorIndex; - - color = options.color || defaultPlotOptions[this.type].color; - - if (!color && !options.colorByPoint) { - if (defined(userOptions._colorIndex)) { // after Series.update() - colorIndex = userOptions._colorIndex; - } else { - userOptions._colorIndex = counters.color; - colorIndex = counters.color++; - } - color = defaultColors[colorIndex]; - } - - this.color = color; - counters.wrapColor(defaultColors.length); - }, - /** - * Get the series' symbol - */ - getSymbol: function () { - var series = this, - userOptions = series.userOptions, - seriesMarkerOption = series.options.marker, - chart = series.chart, - defaultSymbols = chart.options.symbols, - counters = chart.counters, - symbolIndex; - - series.symbol = seriesMarkerOption.symbol; - if (!series.symbol) { - if (defined(userOptions._symbolIndex)) { // after Series.update() - symbolIndex = userOptions._symbolIndex; - } else { - userOptions._symbolIndex = counters.symbol; - symbolIndex = counters.symbol++; - } - series.symbol = defaultSymbols[symbolIndex]; - } - - // don't substract radius in image symbols (#604) - if (/^url/.test(series.symbol)) { - seriesMarkerOption.radius = 0; - } - counters.wrapSymbol(defaultSymbols.length); - }, - - drawLegendSymbol: LegendSymbolMixin.drawLineMarker, - - /** - * Replace the series data with a new set of data - * @param {Object} data - * @param {Object} redraw - */ - setData: function (data, redraw) { - var series = this, - oldData = series.points, - options = series.options, - chart = series.chart, - firstPoint = null, - xAxis = series.xAxis, - hasCategories = xAxis && !!xAxis.categories, - i; - - // reset properties - series.xIncrement = null; - series.pointRange = hasCategories ? 1 : options.pointRange; - - series.colorCounter = 0; // for series with colorByPoint (#1547) - data = data || []; - - // parallel arrays - var dataLength = data.length, - turboThreshold = options.turboThreshold, - pt, - xData = this.xData, - yData = this.yData, - pointArrayMap = series.pointArrayMap, - valueCount = pointArrayMap && pointArrayMap.length; - - each(this.parallelArrays, function (key) { - series[key + 'Data'].length = 0; - }); - - // In turbo mode, only one- or twodimensional arrays of numbers are allowed. The - // first value is tested, and we assume that all the rest are defined the same - // way. Although the 'for' loops are similar, they are repeated inside each - // if-else conditional for max performance. - if (turboThreshold && dataLength > turboThreshold) { - - // find the first non-null point - i = 0; - while (firstPoint === null && i < dataLength) { - firstPoint = data[i]; - i++; - } - - - if (isNumber(firstPoint)) { // assume all points are numbers - var x = pick(options.pointStart, 0), - pointInterval = pick(options.pointInterval, 1); - - for (i = 0; i < dataLength; i++) { - xData[i] = x; - yData[i] = data[i]; - x += pointInterval; - } - series.xIncrement = x; - } else if (isArray(firstPoint)) { // assume all points are arrays - if (valueCount) { // [x, low, high] or [x, o, h, l, c] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt.slice(1, valueCount + 1); - } - } else { // [x, y] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt[1]; - } - } - } else { - error(12); // Highcharts expects configs to be numbers or arrays in turbo mode - } - } else { - for (i = 0; i < dataLength; i++) { - if (data[i] !== UNDEFINED) { // stray commas in oldIE - pt = { series: series }; - series.pointClass.prototype.applyOptions.apply(pt, [data[i]]); - series.updateParallelArrays(pt, i); - if (hasCategories && pt.name) { - xAxis.names[pt.x] = pt.name; // #2046 - } - } - } - } - - // Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON - if (isString(yData[0])) { - error(14, true); - } - - series.data = []; - series.options.data = data; - //series.zData = zData; - - // destroy old points - i = (oldData && oldData.length) || 0; - while (i--) { - if (oldData[i] && oldData[i].destroy) { - oldData[i].destroy(); - } - } - - // reset minRange (#878) - if (xAxis) { - xAxis.minRange = xAxis.userMinRange; - } - - // redraw - series.isDirty = series.isDirtyData = chart.isDirtyBox = true; - if (pick(redraw, true)) { - chart.redraw(false); - } - }, - - /** - * Process the data by cropping away unused data points if the series is longer - * than the crop threshold. This saves computing time for lage series. - */ - processData: function (force) { - var series = this, - processedXData = series.xData, // copied during slice operation below - processedYData = series.yData, - dataLength = processedXData.length, - croppedData, - cropStart = 0, - cropped, - distance, - closestPointRange, - xAxis = series.xAxis, - i, // loop variable - options = series.options, - cropThreshold = options.cropThreshold, - isCartesian = series.isCartesian; - - // If the series data or axes haven't changed, don't go through this. Return false to pass - // the message on to override methods like in data grouping. - if (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) { - return false; - } - - - // optionally filter out points outside the plot area - if (isCartesian && series.sorted && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) { - var min = xAxis.min, - max = xAxis.max; - - // it's outside current extremes - if (processedXData[dataLength - 1] < min || processedXData[0] > max) { - processedXData = []; - processedYData = []; - - // only crop if it's actually spilling out - } else if (processedXData[0] < min || processedXData[dataLength - 1] > max) { - croppedData = this.cropData(series.xData, series.yData, min, max); - processedXData = croppedData.xData; - processedYData = croppedData.yData; - cropStart = croppedData.start; - cropped = true; - } - } - - - // Find the closest distance between processed points - for (i = processedXData.length - 1; i >= 0; i--) { - distance = processedXData[i] - processedXData[i - 1]; - if (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) { - closestPointRange = distance; - - // Unsorted data is not supported by the line tooltip, as well as data grouping and - // navigation in Stock charts (#725) and width calculation of columns (#1900) - } else if (distance < 0 && series.requireSorting) { - error(15); - } - } - - // Record the properties - series.cropped = cropped; // undefined or true - series.cropStart = cropStart; - series.processedXData = processedXData; - series.processedYData = processedYData; - - if (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC - series.pointRange = closestPointRange || 1; - } - series.closestPointRange = closestPointRange; - - }, - - /** - * Iterate over xData and crop values between min and max. Returns object containing crop start/end - * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range - */ - cropData: function (xData, yData, min, max) { - var dataLength = xData.length, - cropStart = 0, - cropEnd = dataLength, - cropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside - i; - - // iterate up to find slice start - for (i = 0; i < dataLength; i++) { - if (xData[i] >= min) { - cropStart = mathMax(0, i - cropShoulder); - break; - } - } - - // proceed to find slice end - for (; i < dataLength; i++) { - if (xData[i] > max) { - cropEnd = i + cropShoulder; - break; - } - } - - return { - xData: xData.slice(cropStart, cropEnd), - yData: yData.slice(cropStart, cropEnd), - start: cropStart, - end: cropEnd - }; - }, - - - /** - * Generate the data point after the data has been processed by cropping away - * unused points and optionally grouped in Highcharts Stock. - */ - generatePoints: function () { - var series = this, - options = series.options, - dataOptions = options.data, - data = series.data, - dataLength, - processedXData = series.processedXData, - processedYData = series.processedYData, - pointClass = series.pointClass, - processedDataLength = processedXData.length, - cropStart = series.cropStart || 0, - cursor, - hasGroupedData = series.hasGroupedData, - point, - points = [], - i; - - if (!data && !hasGroupedData) { - var arr = []; - arr.length = dataOptions.length; - data = series.data = arr; - } - - for (i = 0; i < processedDataLength; i++) { - cursor = cropStart + i; - if (!hasGroupedData) { - if (data[cursor]) { - point = data[cursor]; - } else if (dataOptions[cursor] !== UNDEFINED) { // #970 - data[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]); - } - points[i] = point; - } else { - // splat the y data in case of ohlc data array - points[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i]))); - } - } - - // Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when - // swithching view from non-grouped data to grouped data (#637) - if (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) { - for (i = 0; i < dataLength; i++) { - if (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points - i += processedDataLength; - } - if (data[i]) { - data[i].destroyElements(); - data[i].plotX = UNDEFINED; // #1003 - } - } - } - - series.data = data; - series.points = points; - }, - - /** - * Adds series' points value to corresponding stack - */ - setStackedPoints: function () { - if (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) { - return; - } - - var series = this, - xData = series.processedXData, - yData = series.processedYData, - stackedYData = [], - yDataLength = yData.length, - seriesOptions = series.options, - threshold = seriesOptions.threshold, - stackOption = seriesOptions.stack, - stacking = seriesOptions.stacking, - stackKey = series.stackKey, - negKey = '-' + stackKey, - negStacks = series.negStacks, - yAxis = series.yAxis, - stacks = yAxis.stacks, - oldStacks = yAxis.oldStacks, - isNegative, - stack, - other, - key, - i, - x, - y; - - // loop over the non-null y values and read them into a local array - for (i = 0; i < yDataLength; i++) { - x = xData[i]; - y = yData[i]; - - // Read stacked values into a stack based on the x value, - // the sign of y and the stack key. Stacking is also handled for null values (#739) - isNegative = negStacks && y < threshold; - key = isNegative ? negKey : stackKey; - - // Create empty object for this stack if it doesn't exist yet - if (!stacks[key]) { - stacks[key] = {}; - } - - // Initialize StackItem for this x - if (!stacks[key][x]) { - if (oldStacks[key] && oldStacks[key][x]) { - stacks[key][x] = oldStacks[key][x]; - stacks[key][x].total = null; - } else { - stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption, stacking); - } - } - - // If the StackItem doesn't exist, create it first - stack = stacks[key][x]; - stack.points[series.index] = [stack.cum || 0]; - - // Add value to the stack total - if (stacking === 'percent') { - - // Percent stacked column, totals are the same for the positive and negative stacks - other = isNegative ? stackKey : negKey; - if (negStacks && stacks[other] && stacks[other][x]) { - other = stacks[other][x]; - stack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0; - - // Percent stacked areas - } else { - stack.total = correctFloat(stack.total + (mathAbs(y) || 0)); - } - } else { - stack.total = correctFloat(stack.total + (y || 0)); - } - - stack.cum = (stack.cum || 0) + (y || 0); - - stack.points[series.index].push(stack.cum); - stackedYData[i] = stack.cum; - - } - - if (stacking === 'percent') { - yAxis.usePercentage = true; - } - - this.stackedYData = stackedYData; // To be used in getExtremes - - // Reset old stacks - yAxis.oldStacks = {}; - }, - - /** - * Iterate over all stacks and compute the absolute values to percent - */ - setPercentStacks: function () { - var series = this, - stackKey = series.stackKey, - stacks = series.yAxis.stacks; - - each([stackKey, '-' + stackKey], function (key) { - var i = series.xData.length, - x, - stack, - pointExtremes, - totalFactor; - - while (i--) { - x = series.xData[i]; - stack = stacks[key] && stacks[key][x]; - pointExtremes = stack && stack.points[series.index]; - if (pointExtremes) { - totalFactor = stack.total ? 100 / stack.total : 0; - pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value - pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value - series.stackedYData[i] = pointExtremes[1]; - } - } - }); - }, - - /** - * Calculate Y extremes for visible data - */ - getExtremes: function (yData) { - var xAxis = this.xAxis, - yAxis = this.yAxis, - xData = this.processedXData, - yDataLength, - activeYData = [], - activeCounter = 0, - xExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis - xMin = xExtremes.min, - xMax = xExtremes.max, - validValue, - withinRange, - dataMin, - dataMax, - x, - y, - i, - j; - - yData = yData || this.stackedYData || this.processedYData; - yDataLength = yData.length; - - for (i = 0; i < yDataLength; i++) { - - x = xData[i]; - y = yData[i]; - - // For points within the visible range, including the first point outside the - // visible range, consider y extremes - validValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0)); - withinRange = this.getExtremesFromAll || this.cropped || ((xData[i + 1] || x) >= xMin && - (xData[i - 1] || x) <= xMax); - - if (validValue && withinRange) { - - j = y.length; - if (j) { // array, like ohlc or range data - while (j--) { - if (y[j] !== null) { - activeYData[activeCounter++] = y[j]; - } - } - } else { - activeYData[activeCounter++] = y; - } - } - } - this.dataMin = pick(dataMin, arrayMin(activeYData)); - this.dataMax = pick(dataMax, arrayMax(activeYData)); - }, - - /** - * Translate data points from raw data values to chart specific positioning data - * needed later in drawPoints, drawGraph and drawTracker. - */ - translate: function () { - if (!this.processedXData) { // hidden series - this.processData(); - } - this.generatePoints(); - var series = this, - options = series.options, - stacking = options.stacking, - xAxis = series.xAxis, - categories = xAxis.categories, - yAxis = series.yAxis, - points = series.points, - dataLength = points.length, - hasModifyValue = !!series.modifyValue, - i, - pointPlacement = options.pointPlacement, - dynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement), - threshold = options.threshold; - - // Translate each point - for (i = 0; i < dataLength; i++) { - var point = points[i], - xValue = point.x, - yValue = point.y, - yBottom = point.low, - stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey], - pointStack, - stackValues; - - // Discard disallowed y values for log axes - if (yAxis.isLog && yValue <= 0) { - point.y = yValue = null; - } - - // Get the plotX translation - point.plotX = xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags'); // Math.round fixes #591 - - - // Calculate the bottom y value for stacked series - if (stacking && series.visible && stack && stack[xValue]) { - - pointStack = stack[xValue]; - stackValues = pointStack.points[series.index]; - yBottom = stackValues[0]; - yValue = stackValues[1]; - - if (yBottom === 0) { - yBottom = pick(threshold, yAxis.min); - } - if (yAxis.isLog && yBottom <= 0) { // #1200, #1232 - yBottom = null; - } - - point.total = point.stackTotal = pointStack.total; - point.percentage = stacking === 'percent' && (point.y / pointStack.total * 100); - point.stackY = yValue; - - // Place the stack label - pointStack.setOffset(series.pointXOffset || 0, series.barW || 0); - - } - - // Set translated yBottom or remove it - point.yBottom = defined(yBottom) ? - yAxis.translate(yBottom, 0, 1, 0, 1) : - null; - - // general hook, used for Highstock compare mode - if (hasModifyValue) { - yValue = series.modifyValue(yValue, point); - } - - // Set the the plotY value, reset it for redraws - point.plotY = (typeof yValue === 'number' && yValue !== Infinity) ? - //mathRound(yAxis.translate(yValue, 0, 1, 0, 1) * 10) / 10 : // Math.round fixes #591 - yAxis.translate(yValue, 0, 1, 0, 1) : - UNDEFINED; - - // Set client related positions for mouse tracking - point.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : point.plotX; // #1514 - - point.negative = point.y < (threshold || 0); - - // some API data - point.category = categories && categories[point.x] !== UNDEFINED ? - categories[point.x] : point.x; - - - } - - // now that we have the cropped data, build the segments - series.getSegments(); - }, - /** - * Memoize tooltip texts and positions - */ - setTooltipPoints: function (renew) { - var series = this, - points = [], - pointsLength, - low, - high, - xAxis = series.xAxis, - xExtremes = xAxis && xAxis.getExtremes(), - axisLength = xAxis ? (xAxis.tooltipLen || xAxis.len) : series.chart.plotSizeX, // tooltipLen and tooltipPosName used in polar - point, - pointX, - nextPoint, - i, - tooltipPoints = []; // a lookup array for each pixel in the x dimension - - // don't waste resources if tracker is disabled - if (series.options.enableMouseTracking === false) { - return; - } - - // renew - if (renew) { - series.tooltipPoints = null; - } - - // concat segments to overcome null values - each(series.segments || series.points, function (segment) { - points = points.concat(segment); - }); - - // Reverse the points in case the X axis is reversed - if (xAxis && xAxis.reversed) { - points = points.reverse(); - } - - // Polar needs additional shaping - if (series.orderTooltipPoints) { - series.orderTooltipPoints(points); - } - - // Assign each pixel position to the nearest point - pointsLength = points.length; - for (i = 0; i < pointsLength; i++) { - point = points[i]; - pointX = point.x; - if (pointX >= xExtremes.min && pointX <= xExtremes.max) { // #1149 - nextPoint = points[i + 1]; - - // Set this range's low to the last range's high plus one - low = high === UNDEFINED ? 0 : high + 1; - // Now find the new high - high = points[i + 1] ? - mathMin(mathMax(0, mathFloor( // #2070 - (point.clientX + (nextPoint ? (nextPoint.wrappedClientX || nextPoint.clientX) : axisLength)) / 2 - )), axisLength) : - axisLength; - - while (low >= 0 && low <= high) { - tooltipPoints[low++] = point; - } - } - } - series.tooltipPoints = tooltipPoints; - }, - - /** - * Format the header of the tooltip - */ - tooltipHeaderFormatter: function (point) { - var series = this, - tooltipOptions = series.tooltipOptions, - dateTimeLabelFormats = tooltipOptions.dateTimeLabelFormats, - xDateFormat = tooltipOptions.xDateFormat, - xAxis = series.xAxis, - isDateTime = xAxis && xAxis.options.type === 'datetime', - headerFormat = tooltipOptions.headerFormat, - closestPointRange = xAxis && xAxis.closestPointRange, - n; - - // Guess the best date format based on the closest point distance (#568) - if (isDateTime && !xDateFormat) { - if (closestPointRange) { - for (n in timeUnits) { - if (timeUnits[n] >= closestPointRange) { - xDateFormat = dateTimeLabelFormats[n]; - break; - } - } - } else { - xDateFormat = dateTimeLabelFormats.day; - } - - xDateFormat = xDateFormat || dateTimeLabelFormats.year; // #2546, 2581 - - } - - // Insert the header date format if any - if (isDateTime && xDateFormat && isNumber(point.key)) { - headerFormat = headerFormat.replace('{point.key}', '{point.key:' + xDateFormat + '}'); - } - - return format(headerFormat, { - point: point, - series: series - }); - }, - - /** - * Series mouse over handler - */ - onMouseOver: function () { - var series = this, - chart = series.chart, - hoverSeries = chart.hoverSeries; - - // set normal state to previous series - if (hoverSeries && hoverSeries !== series) { - hoverSeries.onMouseOut(); - } - - // trigger the event, but to save processing time, - // only if defined - if (series.options.events.mouseOver) { - fireEvent(series, 'mouseOver'); - } - - // hover this - series.setState(HOVER_STATE); - chart.hoverSeries = series; - }, - - /** - * Series mouse out handler - */ - onMouseOut: function () { - // trigger the event only if listeners exist - var series = this, - options = series.options, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - // trigger mouse out on the point, which must be in this series - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - // fire the mouse out event - if (series && options.events.mouseOut) { - fireEvent(series, 'mouseOut'); - } - - - // hide the tooltip - if (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.hide(); - } - - // set normal state - series.setState(); - chart.hoverSeries = null; - }, - - /** - * Animate in the series - */ - animate: function (init) { - var series = this, - chart = series.chart, - renderer = chart.renderer, - clipRect, - markerClipRect, - animation = series.options.animation, - clipBox = chart.clipBox, - inverted = chart.inverted, - sharedClipKey; - - // Animation option is set to true - if (animation && !isObject(animation)) { - animation = defaultPlotOptions[series.type].animation; - } - sharedClipKey = '_sharedClip' + animation.duration + animation.easing; - - // Initialize the animation. Set up the clipping rectangle. - if (init) { - - // If a clipping rectangle with the same properties is currently present in the chart, use that. - clipRect = chart[sharedClipKey]; - markerClipRect = chart[sharedClipKey + 'm']; - if (!clipRect) { - chart[sharedClipKey] = clipRect = renderer.clipRect( - extend(clipBox, { width: 0 }) - ); - - chart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect( - -99, // include the width of the first marker - inverted ? -chart.plotLeft : -chart.plotTop, - 99, - inverted ? chart.chartWidth : chart.chartHeight - ); - } - series.group.clip(clipRect); - series.markerGroup.clip(markerClipRect); - series.sharedClipKey = sharedClipKey; - - // Run the animation - } else { - clipRect = chart[sharedClipKey]; - if (clipRect) { - clipRect.animate({ - width: chart.plotSizeX - }, animation); - chart[sharedClipKey + 'm'].animate({ - width: chart.plotSizeX + 99 - }, animation); - } - - // Delete this function to allow it only once - series.animate = null; - - // Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option - // which should be available to the user). - series.animationTimeout = setTimeout(function () { - series.afterAnimate(); - }, animation.duration); - } - }, - - /** - * This runs after animation to land on the final plot clipping - */ - afterAnimate: function () { - var chart = this.chart, - sharedClipKey = this.sharedClipKey, - group = this.group; - - if (group && this.options.clip !== false) { - group.clip(chart.clipRect); - this.markerGroup.clip(); // no clip - } - - // Remove the shared clipping rectancgle when all series are shown - setTimeout(function () { - if (sharedClipKey && chart[sharedClipKey]) { - chart[sharedClipKey] = chart[sharedClipKey].destroy(); - chart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy(); - } - }, 100); - }, - - /** - * Draw the markers - */ - drawPoints: function () { - var series = this, - pointAttr, - points = series.points, - chart = series.chart, - plotX, - plotY, - i, - point, - radius, - symbol, - isImage, - graphic, - options = series.options, - seriesMarkerOptions = options.marker, - pointMarkerOptions, - enabled, - isInside, - markerGroup = series.markerGroup; - - if (seriesMarkerOptions.enabled || series._hasPointMarkers) { - - i = points.length; - while (i--) { - point = points[i]; - plotX = mathFloor(point.plotX); // #1843 - plotY = point.plotY; - graphic = point.graphic; - pointMarkerOptions = point.marker || {}; - enabled = (seriesMarkerOptions.enabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled; - isInside = chart.isInsidePlot(mathRound(plotX), plotY, chart.inverted); // #1858 - - // only draw the point if y is defined - if (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - - // shortcuts - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE]; - radius = pointAttr.r; - symbol = pick(pointMarkerOptions.symbol, series.symbol); - isImage = symbol.indexOf('url') === 0; - - if (graphic) { // update - graphic - .attr({ // Since the marker group isn't clipped, each individual marker must be toggled - visibility: isInside ? (hasSVG ? 'inherit' : VISIBLE) : HIDDEN - }) - .animate(extend({ - x: plotX - radius, - y: plotY - radius - }, graphic.symbolName ? { // don't apply to image symbols #507 - width: 2 * radius, - height: 2 * radius - } : {})); - } else if (isInside && (radius > 0 || isImage)) { - point.graphic = graphic = chart.renderer.symbol( - symbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius - ) - .attr(pointAttr) - .add(markerGroup); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - } - } - - }, - - /** - * Convert state properties from API naming conventions to SVG attributes - * - * @param {Object} options API options object - * @param {Object} base1 SVG attribute object to inherit from - * @param {Object} base2 Second level SVG attribute object to inherit from - */ - convertAttribs: function (options, base1, base2, base3) { - var conversion = this.pointAttrToOptions, - attr, - option, - obj = {}; - - options = options || {}; - base1 = base1 || {}; - base2 = base2 || {}; - base3 = base3 || {}; - - for (attr in conversion) { - option = conversion[attr]; - obj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]); - } - return obj; - }, - - /** - * Get the state attributes. Each series type has its own set of attributes - * that are allowed to change on a point's state change. Series wide attributes are stored for - * all series, and additionally point specific attributes are stored for all - * points with individual marker options. If such options are not defined for the point, - * a reference to the series wide attributes is stored in point.pointAttr. - */ - getAttribs: function () { - var series = this, - seriesOptions = series.options, - normalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions, - stateOptions = normalOptions.states, - stateOptionsHover = stateOptions[HOVER_STATE], - pointStateOptionsHover, - seriesColor = series.color, - normalDefaults = { - stroke: seriesColor, - fill: seriesColor - }, - points = series.points || [], // #927 - i, - point, - seriesPointAttr = [], - pointAttr, - pointAttrToOptions = series.pointAttrToOptions, - hasPointSpecificOptions, - negativeColor = seriesOptions.negativeColor, - defaultLineColor = normalOptions.lineColor, - defaultFillColor = normalOptions.fillColor, - attr, - key; - - // series type specific modifications - if (seriesOptions.marker) { // line, spline, area, areaspline, scatter - - // if no hover radius is given, default to normal radius + 2 - stateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + 2; - stateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + 1; - - } else { // column, bar, pie - - // if no hover color is given, brighten the normal color - stateOptionsHover.color = stateOptionsHover.color || - Color(stateOptionsHover.color || seriesColor) - .brighten(stateOptionsHover.brightness).get(); - } - - // general point attributes for the series normal state - seriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults); - - // HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius - each([HOVER_STATE, SELECT_STATE], function (state) { - seriesPointAttr[state] = - series.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]); - }); - - // set it - series.pointAttr = seriesPointAttr; - - - // Generate the point-specific attribute collections if specific point - // options are given. If not, create a referance to the series wide point - // attributes - i = points.length; - while (i--) { - point = points[i]; - normalOptions = (point.options && point.options.marker) || point.options; - if (normalOptions && normalOptions.enabled === false) { - normalOptions.radius = 0; - } - - if (point.negative && negativeColor) { - point.color = point.fillColor = negativeColor; - } - - hasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868 - - // check if the point has specific visual options - if (point.options) { - for (key in pointAttrToOptions) { - if (defined(normalOptions[pointAttrToOptions[key]])) { - hasPointSpecificOptions = true; - } - } - } - - // a specific marker config object is defined for the individual point: - // create it's own attribute collection - if (hasPointSpecificOptions) { - normalOptions = normalOptions || {}; - pointAttr = []; - stateOptions = normalOptions.states || {}; // reassign for individual point - pointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {}; - - // Handle colors for column and pies - if (!seriesOptions.marker) { // column, bar, point - // if no hover color is given, brighten the normal color - pointStateOptionsHover.color = - Color(pointStateOptionsHover.color || point.color) - .brighten(pointStateOptionsHover.brightness || - stateOptionsHover.brightness).get(); - - } - - // normal point state inherits series wide normal state - attr = { color: point.color }; // #868 - if (!defaultFillColor) { // Individual point color or negative color markers (#2219) - attr.fillColor = point.color; - } - if (!defaultLineColor) { - attr.lineColor = point.color; // Bubbles take point color, line markers use white - } - pointAttr[NORMAL_STATE] = series.convertAttribs(extend(attr, normalOptions), seriesPointAttr[NORMAL_STATE]); - - // inherit from point normal and series hover - pointAttr[HOVER_STATE] = series.convertAttribs( - stateOptions[HOVER_STATE], - seriesPointAttr[HOVER_STATE], - pointAttr[NORMAL_STATE] - ); - - // inherit from point normal and series hover - pointAttr[SELECT_STATE] = series.convertAttribs( - stateOptions[SELECT_STATE], - seriesPointAttr[SELECT_STATE], - pointAttr[NORMAL_STATE] - ); - - - // no marker config object is created: copy a reference to the series-wide - // attribute collection - } else { - pointAttr = seriesPointAttr; - } - - point.pointAttr = pointAttr; - - } - }, - - /** - * Clear DOM objects and free up memory - */ - destroy: function () { - var series = this, - chart = series.chart, - issue134 = /AppleWebKit\/533/.test(userAgent), - destroy, - i, - data = series.data || [], - point, - prop, - axis; - - // add event hook - fireEvent(series, 'destroy'); - - // remove all events - removeEvent(series); - - // erase from axes - each(series.axisTypes || [], function (AXIS) { - axis = series[AXIS]; - if (axis) { - erase(axis.series, series); - axis.isDirty = axis.forceRedraw = true; - } - }); - - // remove legend items - if (series.legendItem) { - series.chart.legend.destroyItem(series); - } - - // destroy all points with their elements - i = data.length; - while (i--) { - point = data[i]; - if (point && point.destroy) { - point.destroy(); - } - } - series.points = null; - - // Clear the animation timeout if we are destroying the series during initial animation - clearTimeout(series.animationTimeout); - - // destroy all SVGElements associated to the series - each(['area', 'graph', 'dataLabelsGroup', 'group', 'markerGroup', 'tracker', - 'graphNeg', 'areaNeg', 'posClip', 'negClip'], function (prop) { - if (series[prop]) { - - // issue 134 workaround - destroy = issue134 && prop === 'group' ? - 'hide' : - 'destroy'; - - series[prop][destroy](); - } - }); - - // remove from hoverSeries - if (chart.hoverSeries === series) { - chart.hoverSeries = null; - } - erase(chart.series, series); - - // clear all members - for (prop in series) { - delete series[prop]; - } - }, - - /** - * Return the graph path of a segment - */ - getSegmentPath: function (segment) { - var series = this, - segmentPath = [], - step = series.options.step; - - // build the segment line - each(segment, function (point, i) { - - var plotX = point.plotX, - plotY = point.plotY, - lastPoint; - - if (series.getPointSpline) { // generate the spline as defined in the SplineSeries object - segmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i)); - - } else { - - // moveTo or lineTo - segmentPath.push(i ? L : M); - - // step line? - if (step && i) { - lastPoint = segment[i - 1]; - if (step === 'right') { - segmentPath.push( - lastPoint.plotX, - plotY - ); - - } else if (step === 'center') { - segmentPath.push( - (lastPoint.plotX + plotX) / 2, - lastPoint.plotY, - (lastPoint.plotX + plotX) / 2, - plotY - ); - - } else { - segmentPath.push( - plotX, - lastPoint.plotY - ); - } - } - - // normal line to next point - segmentPath.push( - point.plotX, - point.plotY - ); - } - }); - - return segmentPath; - }, - - /** - * Get the graph path - */ - getGraphPath: function () { - var series = this, - graphPath = [], - segmentPath, - singlePoints = []; // used in drawTracker - - // Divide into segments and build graph and area paths - each(series.segments, function (segment) { - - segmentPath = series.getSegmentPath(segment); - - // add the segment to the graph, or a single point for tracking - if (segment.length > 1) { - graphPath = graphPath.concat(segmentPath); - } else { - singlePoints.push(segment[0]); - } - }); - - // Record it for use in drawGraph and drawTracker, and return graphPath - series.singlePoints = singlePoints; - series.graphPath = graphPath; - - return graphPath; - - }, - - /** - * Draw the actual graph - */ - drawGraph: function () { - var series = this, - options = this.options, - props = [['graph', options.lineColor || this.color]], - lineWidth = options.lineWidth, - dashStyle = options.dashStyle, - roundCap = options.linecap !== 'square', - graphPath = this.getGraphPath(), - negativeColor = options.negativeColor; - - if (negativeColor) { - props.push(['graphNeg', negativeColor]); - } - - // draw the graph - each(props, function (prop, i) { - var graphKey = prop[0], - graph = series[graphKey], - attribs; - - if (graph) { - stop(graph); // cancel running animations, #459 - graph.animate({ d: graphPath }); - - } else if (lineWidth && graphPath.length) { // #1487 - attribs = { - stroke: prop[1], - 'stroke-width': lineWidth, - zIndex: 1 // #1069 - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } else if (roundCap) { - attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round'; - } - - series[graphKey] = series.chart.renderer.path(graphPath) - .attr(attribs) - .add(series.group) - .shadow(!i && options.shadow); - } - }); - }, - - /** - * Clip the graphs into the positive and negative coloured graphs - */ - clipNeg: function () { - var options = this.options, - chart = this.chart, - renderer = chart.renderer, - negativeColor = options.negativeColor || options.negativeFillColor, - translatedThreshold, - posAttr, - negAttr, - graph = this.graph, - area = this.area, - posClip = this.posClip, - negClip = this.negClip, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - chartSizeMax = mathMax(chartWidth, chartHeight), - yAxis = this.yAxis, - above, - below; - - if (negativeColor && (graph || area)) { - translatedThreshold = mathRound(yAxis.toPixels(options.threshold || 0, true)); - if (translatedThreshold < 0) { - chartSizeMax -= translatedThreshold; // #2534 - } - above = { - x: 0, - y: 0, - width: chartSizeMax, - height: translatedThreshold - }; - below = { - x: 0, - y: translatedThreshold, - width: chartSizeMax, - height: chartSizeMax - }; - - if (chart.inverted) { - - above.height = below.y = chart.plotWidth - translatedThreshold; - if (renderer.isVML) { - above = { - x: chart.plotWidth - translatedThreshold - chart.plotLeft, - y: 0, - width: chartWidth, - height: chartHeight - }; - below = { - x: translatedThreshold + chart.plotLeft - chartWidth, - y: 0, - width: chart.plotLeft + translatedThreshold, - height: chartWidth - }; - } - } - - if (yAxis.reversed) { - posAttr = below; - negAttr = above; - } else { - posAttr = above; - negAttr = below; - } - - if (posClip) { // update - posClip.animate(posAttr); - negClip.animate(negAttr); - } else { - - this.posClip = posClip = renderer.clipRect(posAttr); - this.negClip = negClip = renderer.clipRect(negAttr); - - if (graph && this.graphNeg) { - graph.clip(posClip); - this.graphNeg.clip(negClip); - } - - if (area) { - area.clip(posClip); - this.areaNeg.clip(negClip); - } - } - } - }, - - /** - * Initialize and perform group inversion on series.group and series.markerGroup - */ - invertGroups: function () { - var series = this, - chart = series.chart; - - // Pie, go away (#1736) - if (!series.xAxis) { - return; - } - - // A fixed size is needed for inversion to work - function setInvert() { - var size = { - width: series.yAxis.len, - height: series.xAxis.len - }; - - each(['group', 'markerGroup'], function (groupName) { - if (series[groupName]) { - series[groupName].attr(size).invert(); - } - }); - } - - addEvent(chart, 'resize', setInvert); // do it on resize - addEvent(series, 'destroy', function () { - removeEvent(chart, 'resize', setInvert); - }); - - // Do it now - setInvert(); // do it now - - // On subsequent render and redraw, just do setInvert without setting up events again - series.invertGroups = setInvert; - }, - - /** - * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and - * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size. - */ - plotGroup: function (prop, name, visibility, zIndex, parent) { - var group = this[prop], - isNew = !group; - - // Generate it on first call - if (isNew) { - this[prop] = group = this.chart.renderer.g(name) - .attr({ - visibility: visibility, - zIndex: zIndex || 0.1 // IE8 needs this - }) - .add(parent); - } - // Place it on first and subsequent (redraw) calls - group[isNew ? 'attr' : 'animate'](this.getPlotBox()); - return group; - }, - - /** - * Get the translation and scale for the plot area of this series - */ - getPlotBox: function () { - return { - translateX: this.xAxis ? this.xAxis.left : this.chart.plotLeft, - translateY: this.yAxis ? this.yAxis.top : this.chart.plotTop, - scaleX: 1, // #1623 - scaleY: 1 - }; - }, - - /** - * Render the graph and markers - */ - render: function () { - var series = this, - chart = series.chart, - group, - options = series.options, - animation = options.animation, - doAnimation = animation && !!series.animate && - chart.renderer.isSVG, // this animation doesn't work in IE8 quirks when the group div is hidden, - // and looks bad in other oldIE - visibility = series.visible ? VISIBLE : HIDDEN, - zIndex = options.zIndex, - hasRendered = series.hasRendered, - chartSeriesGroup = chart.seriesGroup; - - // the group - group = series.plotGroup( - 'group', - 'series', - visibility, - zIndex, - chartSeriesGroup - ); - - series.markerGroup = series.plotGroup( - 'markerGroup', - 'markers', - visibility, - zIndex, - chartSeriesGroup - ); - - // initiate the animation - if (doAnimation) { - series.animate(true); - } - - // cache attributes for shapes - series.getAttribs(); - - // SVGRenderer needs to know this before drawing elements (#1089, #1795) - group.inverted = series.isCartesian ? chart.inverted : false; - - // draw the graph if any - if (series.drawGraph) { - series.drawGraph(); - series.clipNeg(); - } - - // draw the data labels (inn pies they go before the points) - if (series.drawDataLabels) { - series.drawDataLabels(); - } - - // draw the points - if (series.visible) { - series.drawPoints(); - } - - - // draw the mouse tracking area - if (series.options.enableMouseTracking !== false) { - series.drawTracker(); - } - - // Handle inverted series and tracker groups - if (chart.inverted) { - series.invertGroups(); - } - - // Initial clipping, must be defined after inverting groups for VML - if (options.clip !== false && !series.sharedClipKey && !hasRendered) { - group.clip(chart.clipRect); - } - - // Run the animation - if (doAnimation) { - series.animate(); - } else if (!hasRendered) { - series.afterAnimate(); - } - - series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - // (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - series.hasRendered = true; - }, - - /** - * Redraw the series after an update in the axes. - */ - redraw: function () { - var series = this, - chart = series.chart, - wasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after - group = series.group, - xAxis = series.xAxis, - yAxis = series.yAxis; - - // reposition on resize - if (group) { - if (chart.inverted) { - group.attr({ - width: chart.plotWidth, - height: chart.plotHeight - }); - } - - group.animate({ - translateX: pick(xAxis && xAxis.left, chart.plotLeft), - translateY: pick(yAxis && yAxis.top, chart.plotTop) - }); - } - - series.translate(); - series.setTooltipPoints(true); - - series.render(); - if (wasDirtyData) { - fireEvent(series, 'updatedData'); - } - }, - - /** - * Set the state of the graph - */ - setState: function (state) { - var series = this, - options = series.options, - graph = series.graph, - graphNeg = series.graphNeg, - stateOptions = options.states, - lineWidth = options.lineWidth, - attribs; - - state = state || NORMAL_STATE; - - if (series.state !== state) { - series.state = state; - - if (stateOptions[state] && stateOptions[state].enabled === false) { - return; - } - - if (state) { - lineWidth = stateOptions[state].lineWidth || lineWidth + 1; - } - - if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML - attribs = { - 'stroke-width': lineWidth - }; - // use attr because animate will cause any other animation on the graph to stop - graph.attr(attribs); - if (graphNeg) { - graphNeg.attr(attribs); - } - } - } - }, - - /** - * Set the visibility of the graph - * - * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED, - * the visibility is toggled. - */ - setVisible: function (vis, redraw) { - var series = this, - chart = series.chart, - legendItem = series.legendItem, - showOrHide, - ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries, - oldVisibility = series.visible; - - // if called without an argument, toggle visibility - series.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis; - showOrHide = vis ? 'show' : 'hide'; - - // show or hide elements - each(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) { - if (series[key]) { - series[key][showOrHide](); - } - }); - - - // hide tooltip (#1361) - if (chart.hoverSeries === series) { - series.onMouseOut(); - } - - - if (legendItem) { - chart.legend.colorizeItem(series, vis); - } - - - // rescale or adapt to resized chart - series.isDirty = true; - // in a stack, all other series are affected - if (series.options.stacking) { - each(chart.series, function (otherSeries) { - if (otherSeries.options.stacking && otherSeries.visible) { - otherSeries.isDirty = true; - } - }); - } - - // show or hide linked series - each(series.linkedSeries, function (otherSeries) { - otherSeries.setVisible(vis, false); - }); - - if (ignoreHiddenSeries) { - chart.isDirtyBox = true; - } - if (redraw !== false) { - chart.redraw(); - } - - fireEvent(series, showOrHide); - }, - - /** - * Show the graph - */ - show: function () { - this.setVisible(true); - }, - - /** - * Hide the graph - */ - hide: function () { - this.setVisible(false); - }, - - - /** - * Set the selected state of the graph - * - * @param selected {Boolean} True to select the series, false to unselect. If - * UNDEFINED, the selection state is toggled. - */ - select: function (selected) { - var series = this; - // if called without an argument, toggle - series.selected = selected = (selected === UNDEFINED) ? !series.selected : selected; - - if (series.checkbox) { - series.checkbox.checked = selected; - } - - fireEvent(series, selected ? 'select' : 'unselect'); - }, - - drawTracker: TrackerMixin.drawTrackerGraph - -}; // end Series prototype - -// Extend the Chart prototype for dynamic methods -extend(Chart.prototype, { - - /** - * Add a series dynamically after time - * - * @param {Object} options The config options - * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - * @return {Object} series The newly created series object - */ - addSeries: function (options, redraw, animation) { - var series, - chart = this; - - if (options) { - redraw = pick(redraw, true); // defaults to true - - fireEvent(chart, 'addSeries', { options: options }, function () { - series = chart.initSeries(options); - - chart.isDirtyLegend = true; // the series array is out of sync with the display - chart.linkSeries(); - if (redraw) { - chart.redraw(animation); - } - }); - } - - return series; - }, - - /** - * Add an axis to the chart - * @param {Object} options The axis option - * @param {Boolean} isX Whether it is an X axis or a value axis - */ - addAxis: function (options, isX, redraw, animation) { - var key = isX ? 'xAxis' : 'yAxis', - chartOptions = this.options, - axis; - - /*jslint unused: false*/ - axis = new Axis(this, merge(options, { - index: this[key].length, - isX: isX - })); - /*jslint unused: true*/ - - // Push the new axis options to the chart options - chartOptions[key] = splat(chartOptions[key] || {}); - chartOptions[key].push(options); - - if (pick(redraw, true)) { - this.redraw(animation); - } - }, - - /** - * Dim the chart and show a loading text or symbol - * @param {String} str An optional text to show in the loading label instead of the default one - */ - showLoading: function (str) { - var chart = this, - options = chart.options, - loadingDiv = chart.loadingDiv; - - var loadingOptions = options.loading; - - // create the layer at the first call - if (!loadingDiv) { - chart.loadingDiv = loadingDiv = createElement(DIV, { - className: PREFIX + 'loading' - }, extend(loadingOptions.style, { - zIndex: 10, - display: NONE - }), chart.container); - - chart.loadingSpan = createElement( - 'span', - null, - loadingOptions.labelStyle, - loadingDiv - ); - - } - - // update text - chart.loadingSpan.innerHTML = str || options.lang.loading; - - // show it - if (!chart.loadingShown) { - css(loadingDiv, { - opacity: 0, - display: '', - left: chart.plotLeft + PX, - top: chart.plotTop + PX, - width: chart.plotWidth + PX, - height: chart.plotHeight + PX - }); - animate(loadingDiv, { - opacity: loadingOptions.style.opacity - }, { - duration: loadingOptions.showDuration || 0 - }); - chart.loadingShown = true; - } - }, - - /** - * Hide the loading layer - */ - hideLoading: function () { - var options = this.options, - loadingDiv = this.loadingDiv; - - if (loadingDiv) { - animate(loadingDiv, { - opacity: 0 - }, { - duration: options.loading.hideDuration || 100, - complete: function () { - css(loadingDiv, { display: NONE }); - } - }); - } - this.loadingShown = false; - } -}); - -// extend the Point prototype for dynamic methods -extend(Point.prototype, { - /** - * Update the point with new options (typically x/y data) and optionally redraw the series. - * - * @param {Object} options Point options as defined in the series.data array - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - */ - update: function (options, redraw, animation) { - var point = this, - series = point.series, - graphic = point.graphic, - i, - data = series.data, - chart = series.chart, - seriesOptions = series.options; - - redraw = pick(redraw, true); - - // fire the event with a default handler of doing the update - point.firePointEvent('update', { options: options }, function () { - - point.applyOptions(options); - - // update visuals - if (isObject(options)) { - series.getAttribs(); - if (graphic) { - if (options && options.marker && options.marker.symbol) { - point.graphic = graphic.destroy(); - } else { - graphic.attr(point.pointAttr[point.state || '']); - } - } - if (options && options.dataLabels && point.dataLabel) { // #2468 - point.dataLabel = point.dataLabel.destroy(); - } - } - - // record changes in the parallel arrays - i = inArray(point, data); - series.updateParallelArrays(point, i); - - seriesOptions.data[i] = point.options; - - // redraw - series.isDirty = series.isDirtyData = true; - if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320 - chart.isDirtyBox = true; - } - - if (seriesOptions.legendType === 'point') { // #1831, #1885 - chart.legend.destroyItem(point); - } - if (redraw) { - chart.redraw(animation); - } - }); - }, - - /** - * Remove a point and optionally redraw the series and if necessary the axes - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - remove: function (redraw, animation) { - var point = this, - series = point.series, - points = series.points, - chart = series.chart, - i, - data = series.data; - - setAnimation(animation, chart); - redraw = pick(redraw, true); - - // fire the event with a default handler of removing the point - point.firePointEvent('remove', null, function () { - - // splice all the parallel arrays - i = inArray(point, data); - if (data.length === points.length) { - points.splice(i, 1); - } - data.splice(i, 1); - series.options.data.splice(i, 1); - series.updateParallelArrays(point, 'splice', i, 1); - - point.destroy(); - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - chart.redraw(); - } - }); - } -}); - -// Extend the series prototype for dynamic methods -extend(Series.prototype, { - /** - * Add a point dynamically after chart load time - * @param {Object} options Point options as given in series.data - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean} shift If shift is true, a point is shifted off the start - * of the series as one is appended to the end. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - addPoint: function (options, redraw, shift, animation) { - var series = this, - seriesOptions = series.options, - data = series.data, - graph = series.graph, - area = series.area, - chart = series.chart, - names = series.xAxis && series.xAxis.names, - currentShift = (graph && graph.shift) || 0, - dataOptions = seriesOptions.data, - point, - isInTheMiddle, - xData = series.xData, - x, - i; - - setAnimation(animation, chart); - - // Make graph animate sideways - if (shift) { - each([graph, area, series.graphNeg, series.areaNeg], function (shape) { - if (shape) { - shape.shift = currentShift + 1; - } - }); - } - if (area) { - area.isArea = true; // needed in animation, both with and without shift - } - - // Optional redraw, defaults to true - redraw = pick(redraw, true); - - // Get options and push the point to xData, yData and series.options. In series.generatePoints - // the Point instance will be created on demand and pushed to the series.data array. - point = { series: series }; - series.pointClass.prototype.applyOptions.apply(point, [options]); - x = point.x; - - // Get the insertion point - i = xData.length; - if (series.requireSorting && x < xData[i - 1]) { - isInTheMiddle = true; - while (i && xData[i - 1] > x) { - i--; - } - } - - series.updateParallelArrays(point, 'splice', i, 0, 0); // insert undefined item - series.updateParallelArrays(point, i); // update it - - if (names) { - names[x] = point.name; - } - dataOptions.splice(i, 0, options); - - if (isInTheMiddle) { - series.data.splice(i, 0, null); - series.processData(); - } - - // Generate points to be added to the legend (#1329) - if (seriesOptions.legendType === 'point') { - series.generatePoints(); - } - - // Shift the first point off the parallel arrays - // todo: consider series.removePoint(i) method - if (shift) { - if (data[0] && data[0].remove) { - data[0].remove(false); - } else { - data.shift(); - series.updateParallelArrays(point, 'shift'); - - dataOptions.shift(); - } - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - series.getAttribs(); // #1937 - chart.redraw(); - } - }, - - /** - * Remove a series and optionally redraw the chart - * - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - - remove: function (redraw, animation) { - var series = this, - chart = series.chart; - redraw = pick(redraw, true); - - if (!series.isRemoving) { /* prevent triggering native event in jQuery - (calling the remove function from the remove event) */ - series.isRemoving = true; - - // fire the event with a default handler of removing the point - fireEvent(series, 'remove', null, function () { - - - // destroy elements - series.destroy(); - - - // redraw - chart.isDirtyLegend = chart.isDirtyBox = true; - chart.linkSeries(); - - if (redraw) { - chart.redraw(animation); - } - }); - - } - series.isRemoving = false; - }, - - /** - * Update the series with a new set of options - */ - update: function (newOptions, redraw) { - var chart = this.chart, - // must use user options when changing type because this.options is merged - // in with type specific plotOptions - oldOptions = this.userOptions, - oldType = this.type, - proto = seriesTypes[oldType].prototype, - n; - - // Do the merge, with some forced options - newOptions = merge(oldOptions, { - animation: false, - index: this.index, - pointStart: this.xData[0] // when updating after addPoint - }, { data: this.options.data }, newOptions); - - // Destroy the series and reinsert methods from the type prototype - this.remove(false); - for (n in proto) { // Overwrite series-type specific methods (#2270) - if (proto.hasOwnProperty(n)) { - this[n] = UNDEFINED; - } - } - extend(this, seriesTypes[newOptions.type || oldType].prototype); - - - this.init(chart, newOptions); - if (pick(redraw, true)) { - chart.redraw(false); - } - } -}); - -// Extend the Axis.prototype for dynamic methods -extend(Axis.prototype, { - - /** - * Update the axis with a new options structure - */ - update: function (newOptions, redraw) { - var chart = this.chart; - - newOptions = chart.options[this.coll][this.options.index] = merge(this.userOptions, newOptions); - - this.destroy(true); - this._addedPlotLB = this.userMin = this.userMax = UNDEFINED; // #1611, #2306 - - this.init(chart, extend(newOptions, { events: UNDEFINED })); - - chart.isDirtyBox = true; - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Remove the axis from the chart - */ - remove: function (redraw) { - var chart = this.chart, - key = this.coll; // xAxis or yAxis - - // Remove associated series - each(this.series, function (series) { - series.remove(false); - }); - - // Remove the axis - erase(chart.axes, this); - erase(chart[key], this); - chart.options[key].splice(this.options.index, 1); - each(chart[key], function (axis, i) { // Re-index, #1706 - axis.options.index = i; - }); - this.destroy(); - chart.isDirtyBox = true; - - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Update the axis title by options - */ - setTitle: function (newTitleOptions, redraw) { - this.update({ title: newTitleOptions }, redraw); - }, - - /** - * Set new axis categories and optionally redraw - * @param {Array} categories - * @param {Boolean} redraw - */ - setCategories: function (categories, redraw) { - this.update({ categories: categories }, redraw); - } - -}); - - -/** - * LineSeries object - */ -var LineSeries = extendClass(Series); -seriesTypes.line = LineSeries; - -/** - * Set the default options for area - */ -defaultPlotOptions.area = merge(defaultSeriesOptions, { - threshold: 0 - // trackByArea: false, - // lineColor: null, // overrides color, but lets fillColor be unaltered - // fillOpacity: 0.75, - // fillColor: null -}); - -/** - * AreaSeries object - */ -var AreaSeries = extendClass(Series, { - type: 'area', - /** - * For stacks, don't split segments on null values. Instead, draw null values with - * no marker. Also insert dummy points for any X position that exists in other series - * in the stack. - */ - getSegments: function () { - var segments = [], - segment = [], - keys = [], - xAxis = this.xAxis, - yAxis = this.yAxis, - stack = yAxis.stacks[this.stackKey], - pointMap = {}, - plotX, - plotY, - points = this.points, - connectNulls = this.options.connectNulls, - val, - i, - x; - - if (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue - // Create a map where we can quickly look up the points by their X value. - for (i = 0; i < points.length; i++) { - pointMap[points[i].x] = points[i]; - } - - // Sort the keys (#1651) - for (x in stack) { - if (stack[x].total !== null) { // nulled after switching between grouping and not (#1651, #2336) - keys.push(+x); - } - } - keys.sort(function (a, b) { - return a - b; - }); - - each(keys, function (x) { - if (connectNulls && (!pointMap[x] || pointMap[x].y === null)) { // #1836 - return; - - // The point exists, push it to the segment - } else if (pointMap[x]) { - segment.push(pointMap[x]); - - // There is no point for this X value in this series, so we - // insert a dummy point in order for the areas to be drawn - // correctly. - } else { - plotX = xAxis.translate(x); - val = stack[x].percent ? (stack[x].total ? stack[x].cum * 100 / stack[x].total : 0) : stack[x].cum; // #1991 - plotY = yAxis.toPixels(val, true); - segment.push({ - y: null, - plotX: plotX, - clientX: plotX, - plotY: plotY, - yBottom: plotY, - onMouseOver: noop - }); - } - }); - - if (segment.length) { - segments.push(segment); - } - - } else { - Series.prototype.getSegments.call(this); - segments = this.segments; - } - - this.segments = segments; - }, - - /** - * Extend the base Series getSegmentPath method by adding the path for the area. - * This path is pushed to the series.areaPath property. - */ - getSegmentPath: function (segment) { - - var segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method - areaSegmentPath = [].concat(segmentPath), // work on a copy for the area path - i, - options = this.options, - segLength = segmentPath.length, - translatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181 - yBottom; - - if (segLength === 3) { // for animation from 1 to two points - areaSegmentPath.push(L, segmentPath[1], segmentPath[2]); - } - if (options.stacking && !this.closedStacks) { - - // Follow stack back. Todo: implement areaspline. A general solution could be to - // reverse the entire graphPath of the previous series, though may be hard with - // splines and with series with different extremes - for (i = segment.length - 1; i >= 0; i--) { - - yBottom = pick(segment[i].yBottom, translatedThreshold); - - // step line? - if (i < segment.length - 1 && options.step) { - areaSegmentPath.push(segment[i + 1].plotX, yBottom); - } - - areaSegmentPath.push(segment[i].plotX, yBottom); - } - - } else { // follow zero line back - this.closeSegment(areaSegmentPath, segment, translatedThreshold); - } - this.areaPath = this.areaPath.concat(areaSegmentPath); - return segmentPath; - }, - - /** - * Extendable method to close the segment path of an area. This is overridden in polar - * charts. - */ - closeSegment: function (path, segment, translatedThreshold) { - path.push( - L, - segment[segment.length - 1].plotX, - translatedThreshold, - L, - segment[0].plotX, - translatedThreshold - ); - }, - - /** - * Draw the graph and the underlying area. This method calls the Series base - * function and adds the area. The areaPath is calculated in the getSegmentPath - * method called from Series.prototype.drawGraph. - */ - drawGraph: function () { - - // Define or reset areaPath - this.areaPath = []; - - // Call the base method - Series.prototype.drawGraph.apply(this); - - // Define local variables - var series = this, - areaPath = this.areaPath, - options = this.options, - negativeColor = options.negativeColor, - negativeFillColor = options.negativeFillColor, - props = [['area', this.color, options.fillColor]]; // area name, main color, fill color - - if (negativeColor || negativeFillColor) { - props.push(['areaNeg', negativeColor, negativeFillColor]); - } - - each(props, function (prop) { - var areaKey = prop[0], - area = series[areaKey]; - - // Create or update the area - if (area) { // update - area.animate({ d: areaPath }); - - } else { // create - series[areaKey] = series.chart.renderer.path(areaPath) - .attr({ - fill: pick( - prop[2], - Color(prop[1]).setOpacity(pick(options.fillOpacity, 0.75)).get() - ), - zIndex: 0 // #1069 - }).add(series.group); - } - }); - }, - - drawLegendSymbol: LegendSymbolMixin.drawRectangle -}); - -seriesTypes.area = AreaSeries; -/** - * Set the default options for spline - */ -defaultPlotOptions.spline = merge(defaultSeriesOptions); - -/** - * SplineSeries object - */ -var SplineSeries = extendClass(Series, { - type: 'spline', - - /** - * Get the spline segment from a given point's previous neighbour to the given point - */ - getPointSpline: function (segment, point, i) { - var smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc - denom = smoothing + 1, - plotX = point.plotX, - plotY = point.plotY, - lastPoint = segment[i - 1], - nextPoint = segment[i + 1], - leftContX, - leftContY, - rightContX, - rightContY, - ret; - - // find control points - if (lastPoint && nextPoint) { - - var lastX = lastPoint.plotX, - lastY = lastPoint.plotY, - nextX = nextPoint.plotX, - nextY = nextPoint.plotY, - correction; - - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - - // have the two control points make a straight line through main point - correction = ((rightContY - leftContY) * (rightContX - plotX)) / - (rightContX - leftContX) + plotY - rightContY; - - leftContY += correction; - rightContY += correction; - - // to prevent false extremes, check that control points are between - // neighbouring points' y values - if (leftContY > lastY && leftContY > plotY) { - leftContY = mathMax(lastY, plotY); - rightContY = 2 * plotY - leftContY; // mirror of left control point - } else if (leftContY < lastY && leftContY < plotY) { - leftContY = mathMin(lastY, plotY); - rightContY = 2 * plotY - leftContY; - } - if (rightContY > nextY && rightContY > plotY) { - rightContY = mathMax(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } else if (rightContY < nextY && rightContY < plotY) { - rightContY = mathMin(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } - - // record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - // Visualize control points for debugging - /* - if (leftContX) { - this.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2) - .attr({ - stroke: 'red', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'red', - 'stroke-width': 1 - }) - .add(); - this.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2) - .attr({ - stroke: 'green', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'green', - 'stroke-width': 1 - }) - .add(); - } - */ - - // moveTo or lineTo - if (!i) { - ret = [M, plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - return ret; - } -}); -seriesTypes.spline = SplineSeries; - -/** - * Set the default options for areaspline - */ -defaultPlotOptions.areaspline = merge(defaultPlotOptions.area); - -/** - * AreaSplineSeries object - */ -var areaProto = AreaSeries.prototype, - AreaSplineSeries = extendClass(SplineSeries, { - type: 'areaspline', - closedStacks: true, // instead of following the previous graph back, follow the threshold back - - // Mix in methods from the area series - getSegmentPath: areaProto.getSegmentPath, - closeSegment: areaProto.closeSegment, - drawGraph: areaProto.drawGraph, - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - -seriesTypes.areaspline = AreaSplineSeries; - -/** - * Set the default options for column - */ -defaultPlotOptions.column = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - borderWidth: 1, - borderRadius: 0, - //colorByPoint: undefined, - groupPadding: 0.2, - //grouping: true, - marker: null, // point options are specified in the base options - pointPadding: 0.1, - //pointWidth: null, - minPointLength: 0, - cropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes - pointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories - states: { - hover: { - brightness: 0.1, - shadow: false - }, - select: { - color: '#C0C0C0', - borderColor: '#000000', - shadow: false - } - }, - dataLabels: { - align: null, // auto - verticalAlign: null, // auto - y: null - }, - stickyTracking: false, - threshold: 0 -}); - -/** - * ColumnSeries object - */ -var ColumnSeries = extendClass(Series, { - type: 'column', - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color', - r: 'borderRadius' - }, - cropShoulder: 0, - trackerGroups: ['group', 'dataLabelsGroup'], - negStacks: true, // use separate negative stacks, unlike area stacks where a negative - // point is substracted from previous (#1910) - - /** - * Initialize the series - */ - init: function () { - Series.prototype.init.apply(this, arguments); - - var series = this, - chart = series.chart; - - // if the series is added dynamically, force redraw of other - // series affected by a new column - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - }, - - /** - * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding, - * pointWidth etc. - */ - getColumnMetrics: function () { - - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis, - reversedXAxis = xAxis.reversed, - stackKey, - stackGroups = {}, - columnIndex, - columnCount = 0; - - // Get the total number of column type series. - // This is called on every series. Consider moving this logic to a - // chart.orderStacks() function and call it on init, addSeries and removeSeries - if (options.grouping === false) { - columnCount = 1; - } else { - each(series.chart.series, function (otherSeries) { - var otherOptions = otherSeries.options, - otherYAxis = otherSeries.yAxis; - if (otherSeries.type === series.type && otherSeries.visible && - yAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) { // #642, #2086 - if (otherOptions.stacking) { - stackKey = otherSeries.stackKey; - if (stackGroups[stackKey] === UNDEFINED) { - stackGroups[stackKey] = columnCount++; - } - columnIndex = stackGroups[stackKey]; - } else if (otherOptions.grouping !== false) { // #1162 - columnIndex = columnCount++; - } - otherSeries.columnIndex = columnIndex; - } - }); - } - - var categoryWidth = mathMin( - mathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || 1), - xAxis.len // #1535 - ), - groupPadding = categoryWidth * options.groupPadding, - groupWidth = categoryWidth - 2 * groupPadding, - pointOffsetWidth = groupWidth / columnCount, - optionPointWidth = options.pointWidth, - pointPadding = defined(optionPointWidth) ? (pointOffsetWidth - optionPointWidth) / 2 : - pointOffsetWidth * options.pointPadding, - pointWidth = pick(optionPointWidth, pointOffsetWidth - 2 * pointPadding), // exact point width, used in polar charts - colIndex = (reversedXAxis ? - columnCount - (series.columnIndex || 0) : // #1251 - series.columnIndex) || 0, - pointXOffset = pointPadding + (groupPadding + colIndex * - pointOffsetWidth - (categoryWidth / 2)) * - (reversedXAxis ? -1 : 1); - - // Save it for reading in linked series (Error bars particularly) - return (series.columnMetrics = { - width: pointWidth, - offset: pointXOffset - }); - - }, - - /** - * Translate each point to the plot area coordinate system and find shape positions - */ - translate: function () { - var series = this, - chart = series.chart, - options = series.options, - borderWidth = options.borderWidth, - yAxis = series.yAxis, - threshold = options.threshold, - translatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold), - minPointLength = pick(options.minPointLength, 5), - metrics = series.getColumnMetrics(), - pointWidth = metrics.width, - seriesBarW = series.barW = mathCeil(mathMax(pointWidth, 1 + 2 * borderWidth)), // rounded and postprocessed for border width - pointXOffset = series.pointXOffset = metrics.offset, - xCrisp = -(borderWidth % 2 ? 0.5 : 0), - yCrisp = borderWidth % 2 ? 0.5 : 1; - - if (chart.renderer.isVML && chart.inverted) { - yCrisp += 1; - } - - Series.prototype.translate.apply(series); - - // record the new values - each(series.points, function (point) { - var yBottom = pick(point.yBottom, translatedThreshold), - plotY = mathMin(mathMax(-999 - yBottom, point.plotY), yAxis.len + 999 + yBottom), // Don't draw too far outside plot area (#1303, #2241) - barX = point.plotX + pointXOffset, - barW = seriesBarW, - barY = mathMin(plotY, yBottom), - right, - bottom, - fromTop, - fromLeft, - barH = mathMax(plotY, yBottom) - barY; - - // Handle options.minPointLength - if (mathAbs(barH) < minPointLength) { - if (minPointLength) { - barH = minPointLength; - barY = - mathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked - yBottom - minPointLength : // keep position - translatedThreshold - (yAxis.translate(point.y, 0, 1, 0, 1) <= translatedThreshold ? minPointLength : 0)); // use exact yAxis.translation (#1485) - } - } - - // Cache for access in polar - point.barX = barX; - point.pointWidth = pointWidth; - - - // Round off to obtain crisp edges - fromLeft = mathAbs(barX) < 0.5; - right = mathRound(barX + barW) + xCrisp; - barX = mathRound(barX) + xCrisp; - barW = right - barX; - - fromTop = mathAbs(barY) < 0.5; - bottom = mathRound(barY + barH) + yCrisp; - barY = mathRound(barY) + yCrisp; - barH = bottom - barY; - - // Top and left edges are exceptions - if (fromLeft) { - barX += 1; - barW -= 1; - } - if (fromTop) { - barY -= 1; - barH += 1; - } - - // Register shape type and arguments to be used in drawPoints - point.shapeType = 'rect'; - point.shapeArgs = { - x: barX, - y: barY, - width: barW, - height: barH - }; - }); - - }, - - getSymbol: noop, - - /** - * Use a solid rectangle like the area series types - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - - /** - * Columns have no graph - */ - drawGraph: noop, - - /** - * Draw the columns. For bars, the series.group is rotated, so the same coordinates - * apply for columns and bars. This method is inherited by scatter series. - * - */ - drawPoints: function () { - var series = this, - chart = this.chart, - options = series.options, - renderer = chart.renderer, - animationLimit = chart.options.animationLimit || 250, - shapeArgs; - - // draw the columns - each(series.points, function (point) { - var plotY = point.plotY, - graphic = point.graphic; - - if (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - shapeArgs = point.shapeArgs; - - if (graphic) { // update - stop(graphic); - graphic[chart.pointCount < animationLimit ? 'animate' : 'attr'](merge(shapeArgs)); - - } else { - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .attr(point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE]) - .add(series.group) - .shadow(options.shadow, null, options.stacking && !options.borderRadius); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - }); - }, - - /** - * Add tracking event listener to the series group, so the point graphics - * themselves act as trackers - */ - drawTracker: TrackerMixin.drawTrackerPoint, - - /** - * Animate the column heights one by one from zero - * @param {Boolean} init Whether to initialize the animation or run it - */ - animate: function (init) { - var series = this, - yAxis = this.yAxis, - options = series.options, - inverted = this.chart.inverted, - attr = {}, - translatedThreshold; - - if (hasSVG) { // VML is too slow anyway - if (init) { - attr.scaleY = 0.001; - translatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold))); - if (inverted) { - attr.translateX = translatedThreshold - yAxis.len; - } else { - attr.translateY = translatedThreshold; - } - series.group.attr(attr); - - } else { // run the animation - - attr.scaleY = 1; - attr[inverted ? 'translateX' : 'translateY'] = yAxis.pos; - series.group.animate(attr, series.options.animation); - - // delete this function to allow it only once - series.animate = null; - } - } - }, - - /** - * Remove this series from the chart - */ - remove: function () { - var series = this, - chart = series.chart; - - // column and bar series affects other series of the same type - // as they are either stacked or grouped - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - - Series.prototype.remove.apply(series, arguments); - } -}); -seriesTypes.column = ColumnSeries; -/** - * Set the default options for bar - */ -defaultPlotOptions.bar = merge(defaultPlotOptions.column); -/** - * The Bar series class - */ -var BarSeries = extendClass(ColumnSeries, { - type: 'bar', - inverted: true -}); -seriesTypes.bar = BarSeries; - -/** - * Set the default options for scatter - */ -defaultPlotOptions.scatter = merge(defaultSeriesOptions, { - lineWidth: 0, - tooltip: { - headerFormat: '<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>', - pointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>', - followPointer: true - }, - stickyTracking: false -}); - -/** - * The scatter series class - */ -var ScatterSeries = extendClass(Series, { - type: 'scatter', - sorted: false, - requireSorting: false, - noSharedTooltip: true, - trackerGroups: ['markerGroup'], - takeOrdinalPosition: false, // #2342 - drawTracker: TrackerMixin.drawTrackerPoint, - drawGraph: function () { - if (this.options.lineWidth) { - Series.prototype.drawGraph.call(this); - } - }, - setTooltipPoints: noop -}); - -seriesTypes.scatter = ScatterSeries; - -/** - * Set the default options for pie - */ -defaultPlotOptions.pie = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - borderWidth: 1, - center: [null, null], - clip: false, - colorByPoint: true, // always true for pies - dataLabels: { - // align: null, - // connectorWidth: 1, - // connectorColor: point.color, - // connectorPadding: 5, - distance: 30, - enabled: true, - formatter: function () { - return this.point.name; - } - // softConnector: true, - //y: 0 - }, - ignoreHiddenPoint: true, - //innerSize: 0, - legendType: 'point', - marker: null, // point options are specified in the base options - size: null, - showInLegend: false, - slicedOffset: 10, - states: { - hover: { - brightness: 0.1, - shadow: false - } - }, - stickyTracking: false, - tooltip: { - followPointer: true - } -}); - -/** - * Extended point object for pies - */ -var PiePoint = extendClass(Point, { - /** - * Initiate the pie slice - */ - init: function () { - - Point.prototype.init.apply(this, arguments); - - var point = this, - toggleSlice; - - // Disallow negative values (#1530) - if (point.y < 0) { - point.y = null; - } - - //visible: options.visible !== false, - extend(point, { - visible: point.visible !== false, - name: pick(point.name, 'Slice') - }); - - // add event listener for select - toggleSlice = function (e) { - point.slice(e.type === 'select'); - }; - addEvent(point, 'select', toggleSlice); - addEvent(point, 'unselect', toggleSlice); - - return point; - }, - - /** - * Toggle the visibility of the pie slice - * @param {Boolean} vis Whether to show the slice or not. If undefined, the - * visibility is toggled - */ - setVisible: function (vis) { - var point = this, - series = point.series, - chart = series.chart, - method; - - // if called without an argument, toggle visibility - point.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - method = vis ? 'show' : 'hide'; - - // Show and hide associated elements - each(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) { - if (point[key]) { - point[key][method](); - } - }); - - if (point.legendItem) { - chart.legend.colorizeItem(point, vis); - } - - // Handle ignore hidden slices - if (!series.isDirty && series.options.ignoreHiddenPoint) { - series.isDirty = true; - chart.redraw(); - } - }, - - /** - * Set or toggle whether the slice is cut out from the pie - * @param {Boolean} sliced When undefined, the slice state is toggled - * @param {Boolean} redraw Whether to redraw the chart. True by default. - */ - slice: function (sliced, redraw, animation) { - var point = this, - series = point.series, - chart = series.chart, - translation; - - setAnimation(animation, chart); - - // redraw is true by default - redraw = pick(redraw, true); - - // if called without an argument, toggle - point.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - translation = sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - point.graphic.animate(translation); - - if (point.shadowGroup) { - point.shadowGroup.animate(translation); - } - - } -}); - -/** - * The Pie series class - */ -var PieSeries = { - type: 'pie', - isCartesian: false, - pointClass: PiePoint, - requireSorting: false, - noSharedTooltip: true, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color' - }, - - /** - * Pies have one color each point - */ - getColor: noop, - - /** - * Animate the pies in - */ - animate: function (init) { - var series = this, - points = series.points, - startAngleRad = series.startAngleRad; - - if (!init) { - each(points, function (point) { - var graphic = point.graphic, - args = point.shapeArgs; - - if (graphic) { - // start values - graphic.attr({ - r: series.center[3] / 2, // animate from inner radius (#779) - start: startAngleRad, - end: startAngleRad - }); - - // animate - graphic.animate({ - r: args.r, - start: args.start, - end: args.end - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - /** - * Extend the basic setData method by running processData and generatePoints immediately, - * in order to access the points from the legend. - */ - setData: function (data, redraw) { - Series.prototype.setData.call(this, data, false); - this.processData(); - this.generatePoints(); - if (pick(redraw, true)) { - this.chart.redraw(); - } - }, - - /** - * Extend the generatePoints method by adding total and percentage properties to each point - */ - generatePoints: function () { - var i, - total = 0, - points, - len, - point, - ignoreHiddenPoint = this.options.ignoreHiddenPoint; - - Series.prototype.generatePoints.call(this); - - // Populate local vars - points = this.points; - len = points.length; - - // Get the total sum - for (i = 0; i < len; i++) { - point = points[i]; - total += (ignoreHiddenPoint && !point.visible) ? 0 : point.y; - } - this.total = total; - - // Set each point's properties - for (i = 0; i < len; i++) { - point = points[i]; - point.percentage = total > 0 ? (point.y / total) * 100 : 0; - point.total = total; - } - - }, - - /** - * Do translation for pie slices - */ - translate: function (positions) { - this.generatePoints(); - - var series = this, - cumulative = 0, - precision = 1000, // issue #172 - options = series.options, - slicedOffset = options.slicedOffset, - connectorOffset = slicedOffset + options.borderWidth, - start, - end, - angle, - startAngle = options.startAngle || 0, - startAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90), - endAngleRad = series.endAngleRad = mathPI / 180 * ((options.endAngle || (startAngle + 360)) - 90), - circ = endAngleRad - startAngleRad, //2 * mathPI, - points = series.points, - radiusX, // the x component of the radius vector for a given point - radiusY, - labelDistance = options.dataLabels.distance, - ignoreHiddenPoint = options.ignoreHiddenPoint, - i, - len = points.length, - point; - - // Get positions - either an integer or a percentage string must be given. - // If positions are passed as a parameter, we're in a recursive loop for adjusting - // space for data labels. - if (!positions) { - series.center = positions = series.getCenter(); - } - - // utility for getting the x value from a given y, used for anticollision logic in data labels - series.getX = function (y, left) { - - angle = math.asin((y - positions[1]) / (positions[2] / 2 + labelDistance)); - - return positions[0] + - (left ? -1 : 1) * - (mathCos(angle) * (positions[2] / 2 + labelDistance)); - }; - - // Calculate the geometry for each point - for (i = 0; i < len; i++) { - - point = points[i]; - - // set start and end angle - start = startAngleRad + (cumulative * circ); - if (!ignoreHiddenPoint || point.visible) { - cumulative += point.percentage / 100; - } - end = startAngleRad + (cumulative * circ); - - // set the shape - point.shapeType = 'arc'; - point.shapeArgs = { - x: positions[0], - y: positions[1], - r: positions[2] / 2, - innerR: positions[3] / 2, - start: mathRound(start * precision) / precision, - end: mathRound(end * precision) / precision - }; - - // center for the sliced out slice - angle = (end + start) / 2; - if (angle > 0.75 * circ) { - angle -= 2 * mathPI; - } - point.slicedTranslation = { - translateX: mathRound(mathCos(angle) * slicedOffset), - translateY: mathRound(mathSin(angle) * slicedOffset) - }; - - // set the anchor point for tooltips - radiusX = mathCos(angle) * positions[2] / 2; - radiusY = mathSin(angle) * positions[2] / 2; - point.tooltipPos = [ - positions[0] + radiusX * 0.7, - positions[1] + radiusY * 0.7 - ]; - - point.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0; - point.angle = angle; - - // set the anchor point for data labels - connectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678 - point.labelPos = [ - positions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector - positions[1] + radiusY + mathSin(angle) * labelDistance, // a/a - positions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie - positions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a - positions[0] + radiusX, // landing point for connector - positions[1] + radiusY, // a/a - labelDistance < 0 ? // alignment - 'center' : - point.half ? 'right' : 'left', // alignment - angle // center angle - ]; - - } - }, - - setTooltipPoints: noop, - drawGraph: null, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, - chart = series.chart, - renderer = chart.renderer, - groupTranslation, - //center, - graphic, - //group, - shadow = series.options.shadow, - shadowGroup, - shapeArgs; - - if (shadow && !series.shadowGroup) { - series.shadowGroup = renderer.g('shadow') - .add(series.group); - } - - // draw the slices - each(series.points, function (point) { - graphic = point.graphic; - shapeArgs = point.shapeArgs; - shadowGroup = point.shadowGroup; - - // put the shadow behind all points - if (shadow && !shadowGroup) { - shadowGroup = point.shadowGroup = renderer.g('shadow') - .add(series.shadowGroup); - } - - // if the point is sliced, use special translation, else use plot area traslation - groupTranslation = point.sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - //group.translate(groupTranslation[0], groupTranslation[1]); - if (shadowGroup) { - shadowGroup.attr(groupTranslation); - } - - // draw the slice - if (graphic) { - graphic.animate(extend(shapeArgs, groupTranslation)); - } else { - point.graphic = graphic = renderer.arc(shapeArgs) - .setRadialReference(series.center) - .attr( - point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] - ) - .attr({ 'stroke-linejoin': 'round' }) - .attr(groupTranslation) - .add(series.group) - .shadow(shadow, shadowGroup); - } - - // detect point specific visibility (#2430) - if (point.visible !== undefined) { - point.setVisible(point.visible); - } - - }); - - }, - - /** - * Utility for sorting data labels - */ - sortByAngle: function (points, sign) { - points.sort(function (a, b) { - return a.angle !== undefined && (b.angle - a.angle) * sign; - }); - }, - - /** - * Draw point specific tracker objects. Inherit directly from column series. - */ - drawTracker: TrackerMixin.drawTrackerPoint, - - /** - * Use a simple symbol from LegendSymbolMixin - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - /** - * Use the getCenter method from drawLegendSymbol - */ - getCenter: CenteredSeriesMixin.getCenter, - - /** - * Pies don't have point marker symbols - */ - getSymbol: noop - -}; -PieSeries = extendClass(Series, PieSeries); -seriesTypes.pie = PieSeries; - -/** - * Draw the data labels - */ -Series.prototype.drawDataLabels = function () { - - var series = this, - seriesOptions = series.options, - cursor = seriesOptions.cursor, - options = seriesOptions.dataLabels, - points = series.points, - pointOptions, - generalOptions, - str, - dataLabelsGroup; - - if (options.enabled || series._hasPointLabels) { - - // Process default alignment of data labels for columns - if (series.dlProcessOptions) { - series.dlProcessOptions(options); - } - - // Create a separate group for the data labels to avoid rotation - dataLabelsGroup = series.plotGroup( - 'dataLabelsGroup', - 'data-labels', - series.visible ? VISIBLE : HIDDEN, - options.zIndex || 6 - ); - - // Make the labels for each point - generalOptions = options; - each(points, function (point) { - - var enabled, - dataLabel = point.dataLabel, - labelConfig, - attr, - name, - rotation, - connector = point.connector, - isNew = true; - - // Determine if each data label is enabled - pointOptions = point.options && point.options.dataLabels; - enabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled); // #2282 - - - // If the point is outside the plot area, destroy it. #678, #820 - if (dataLabel && !enabled) { - point.dataLabel = dataLabel.destroy(); - - // Individual labels are disabled if the are explicitly disabled - // in the point options, or if they fall outside the plot area. - } else if (enabled) { - - // Create individual options structure that can be extended without - // affecting others - options = merge(generalOptions, pointOptions); - - rotation = options.rotation; - - // Get the string - labelConfig = point.getLabelConfig(); - str = options.format ? - format(options.format, labelConfig) : - options.formatter.call(labelConfig, options); - - // Determine the color - options.style.color = pick(options.color, options.style.color, series.color, 'black'); - - - // update existing label - if (dataLabel) { - - if (defined(str)) { - dataLabel - .attr({ - text: str - }); - isNew = false; - - } else { // #1437 - the label is shown conditionally - point.dataLabel = dataLabel = dataLabel.destroy(); - if (connector) { - point.connector = connector.destroy(); - } - } - - // create new label - } else if (defined(str)) { - attr = { - //align: align, - fill: options.backgroundColor, - stroke: options.borderColor, - 'stroke-width': options.borderWidth, - r: options.borderRadius || 0, - rotation: rotation, - padding: options.padding, - zIndex: 1 - }; - // Remove unused attributes (#947) - for (name in attr) { - if (attr[name] === UNDEFINED) { - delete attr[name]; - } - } - - dataLabel = point.dataLabel = series.chart.renderer[rotation ? 'text' : 'label']( // labels don't support rotation - str, - 0, - -999, - null, - null, - null, - options.useHTML - ) - .attr(attr) - .css(extend(options.style, cursor && { cursor: cursor })) - .add(dataLabelsGroup) - .shadow(options.shadow); - - } - - if (dataLabel) { - // Now the data label is created and placed at 0,0, so we need to align it - series.alignDataLabel(point, dataLabel, options, null, isNew); - } - } - }); - } -}; - -/** - * Align each individual data label - */ -Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var chart = this.chart, - inverted = chart.inverted, - plotX = pick(point.plotX, -999), - plotY = pick(point.plotY, -999), - bBox = dataLabel.getBBox(), - visible = this.visible && (point.series.forceDL || chart.isInsidePlot(point.plotX, point.plotY, inverted)), - alignAttr; // the final position; - - if (visible) { - - // The alignment box is a singular point - alignTo = extend({ - x: inverted ? chart.plotWidth - plotY : plotX, - y: mathRound(inverted ? chart.plotHeight - plotX : plotY), - width: 0, - height: 0 - }, alignTo); - - // Add the text size for alignment calculation - extend(options, { - width: bBox.width, - height: bBox.height - }); - - // Allow a hook for changing alignment in the last moment, then do the alignment - if (options.rotation) { // Fancy box alignment isn't supported for rotated text - alignAttr = { - align: options.align, - x: alignTo.x + options.x + alignTo.width / 2, - y: alignTo.y + options.y + alignTo.height / 2 - }; - dataLabel[isNew ? 'attr' : 'animate'](alignAttr); - } else { - dataLabel.align(options, null, alignTo); - alignAttr = dataLabel.alignAttr; - - // Handle justify or crop - if (pick(options.overflow, 'justify') === 'justify') { - this.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew); - - } else if (pick(options.crop, true)) { - // Now check that the data label is within the plot area - visible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height); - - } - } - } - - // Show or hide based on the final aligned position - if (!visible) { - dataLabel.attr({ y: -999 }); - dataLabel.placed = false; // don't animate back in - } - -}; - -/** - * If data labels fall partly outside the plot area, align them back in, in a way that - * doesn't hide the point. - */ -Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBox, alignTo, isNew) { - var chart = this.chart, - align = options.align, - verticalAlign = options.verticalAlign, - off, - justified; - - // Off left - off = alignAttr.x; - if (off < 0) { - if (align === 'right') { - options.align = 'left'; - } else { - options.x = -off; - } - justified = true; - } - - // Off right - off = alignAttr.x + bBox.width; - if (off > chart.plotWidth) { - if (align === 'left') { - options.align = 'right'; - } else { - options.x = chart.plotWidth - off; - } - justified = true; - } - - // Off top - off = alignAttr.y; - if (off < 0) { - if (verticalAlign === 'bottom') { - options.verticalAlign = 'top'; - } else { - options.y = -off; - } - justified = true; - } - - // Off bottom - off = alignAttr.y + bBox.height; - if (off > chart.plotHeight) { - if (verticalAlign === 'top') { - options.verticalAlign = 'bottom'; - } else { - options.y = chart.plotHeight - off; - } - justified = true; - } - - if (justified) { - dataLabel.placed = !isNew; - dataLabel.align(options, null, alignTo); - } -}; - -/** - * Override the base drawDataLabels method by pie specific functionality - */ -if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawDataLabels = function () { - var series = this, - data = series.data, - point, - chart = series.chart, - options = series.options.dataLabels, - connectorPadding = pick(options.connectorPadding, 10), - connectorWidth = pick(options.connectorWidth, 1), - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - connector, - connectorPath, - softConnector = pick(options.softConnector, true), - distanceOption = options.distance, - seriesCenter = series.center, - radius = seriesCenter[2] / 2, - centerY = seriesCenter[1], - outside = distanceOption > 0, - dataLabel, - dataLabelWidth, - labelPos, - labelHeight, - halves = [// divide the points into right and left halves for anti collision - [], // right - [] // left - ], - x, - y, - visibility, - rankArr, - i, - j, - overflow = [0, 0, 0, 0], // top, right, bottom, left - sort = function (a, b) { - return b.y - a.y; - }; - - // get out if not enabled - if (!series.visible || (!options.enabled && !series._hasPointLabels)) { - return; - } - - // run parent method - Series.prototype.drawDataLabels.apply(series); - - // arrange points for detection collision - each(data, function (point) { - if (point.dataLabel && point.visible) { // #407, #2510 - halves[point.half].push(point); - } - }); - - // assume equal label heights - i = 0; - while (!labelHeight && data[i]) { // #1569 - labelHeight = data[i] && data[i].dataLabel && (data[i].dataLabel.getBBox().height || 21); // 21 is for #968 - i++; - } - - /* Loop over the points in each half, starting from the top and bottom - * of the pie to detect overlapping labels. - */ - i = 2; - while (i--) { - - var slots = [], - slotsLength, - usedSlots = [], - points = halves[i], - pos, - length = points.length, - slotIndex; - - // Sort by angle - series.sortByAngle(points, i - 0.5); - - // Only do anti-collision when we are outside the pie and have connectors (#856) - if (distanceOption > 0) { - - // build the slots - for (pos = centerY - radius - distanceOption; pos <= centerY + radius + distanceOption; pos += labelHeight) { - slots.push(pos); - - // visualize the slot - /* - var slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0), - slotY = pos + chart.plotTop; - if (!isNaN(slotX)) { - chart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1) - .attr({ - 'stroke-width': 1, - stroke: 'silver' - }) - .add(); - chart.renderer.text('Slot '+ (slots.length - 1), slotX, slotY + 4) - .attr({ - fill: 'silver' - }).add(); - } - */ - } - slotsLength = slots.length; - - // if there are more values than available slots, remove lowest values - if (length > slotsLength) { - // create an array for sorting and ranking the points within each quarter - rankArr = [].concat(points); - rankArr.sort(sort); - j = length; - while (j--) { - rankArr[j].rank = j; - } - j = length; - while (j--) { - if (points[j].rank >= slotsLength) { - points.splice(j, 1); - } - } - length = points.length; - } - - // The label goes to the nearest open slot, but not closer to the edge than - // the label's index. - for (j = 0; j < length; j++) { - - point = points[j]; - labelPos = point.labelPos; - - var closest = 9999, - distance, - slotI; - - // find the closest slot index - for (slotI = 0; slotI < slotsLength; slotI++) { - distance = mathAbs(slots[slotI] - labelPos[1]); - if (distance < closest) { - closest = distance; - slotIndex = slotI; - } - } - - // if that slot index is closer to the edges of the slots, move it - // to the closest appropriate slot - if (slotIndex < j && slots[j] !== null) { // cluster at the top - slotIndex = j; - } else if (slotsLength < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom - slotIndex = slotsLength - length + j; - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } else { - // Slot is taken, find next free slot below. In the next run, the next slice will find the - // slot above these, because it is the closest one - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } - - usedSlots.push({ i: slotIndex, y: slots[slotIndex] }); - slots[slotIndex] = null; // mark as taken - } - // sort them in order to fill in from the top - usedSlots.sort(sort); - } - - // now the used slots are sorted, fill them up sequentially - for (j = 0; j < length; j++) { - - var slot, naturalY; - - point = points[j]; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - visibility = point.visible === false ? HIDDEN : VISIBLE; - naturalY = labelPos[1]; - - if (distanceOption > 0) { - slot = usedSlots.pop(); - slotIndex = slot.i; - - // if the slot next to currrent slot is free, the y value is allowed - // to fall back to the natural position - y = slot.y; - if ((naturalY > y && slots[slotIndex + 1] !== null) || - (naturalY < y && slots[slotIndex - 1] !== null)) { - y = naturalY; - } - - } else { - y = naturalY; - } - - // get the x - use the natural x position for first and last slot, to prevent the top - // and botton slice connectors from touching each other on either side - x = options.justify ? - seriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) : - series.getX(slotIndex === 0 || slotIndex === slots.length - 1 ? naturalY : y, i); - - - // Record the placement and visibility - dataLabel._attr = { - visibility: visibility, - align: labelPos[6] - }; - dataLabel._pos = { - x: x + options.x + - ({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0), - y: y + options.y - 10 // 10 is for the baseline (label vs text) - }; - dataLabel.connX = x; - dataLabel.connY = y; - - - // Detect overflowing data labels - if (this.options.size === null) { - dataLabelWidth = dataLabel.width; - // Overflow left - if (x - dataLabelWidth < connectorPadding) { - overflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]); - - // Overflow right - } else if (x + dataLabelWidth > plotWidth - connectorPadding) { - overflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]); - } - - // Overflow top - if (y - labelHeight / 2 < 0) { - overflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]); - - // Overflow left - } else if (y + labelHeight / 2 > plotHeight) { - overflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]); - } - } - } // for each point - } // for each half - - // Do not apply the final placement and draw the connectors until we have verified - // that labels are not spilling over. - if (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) { - - // Place the labels in the final position - this.placeDataLabels(); - - // Draw the connectors - if (outside && connectorWidth) { - each(this.points, function (point) { - connector = point.connector; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - - if (dataLabel && dataLabel._pos) { - visibility = dataLabel._attr.visibility; - x = dataLabel.connX; - y = dataLabel.connY; - connectorPath = softConnector ? [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - 'C', - x, y, // first break, next to the label - 2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5], - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ] : [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - L, - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ]; - - if (connector) { - connector.animate({ d: connectorPath }); - connector.attr('visibility', visibility); - - } else { - point.connector = connector = series.chart.renderer.path(connectorPath).attr({ - 'stroke-width': connectorWidth, - stroke: options.connectorColor || point.color || '#606060', - visibility: visibility - }) - .add(series.group); - } - } else if (connector) { - point.connector = connector.destroy(); - } - }); - } - } - }; - /** - * Perform the final placement of the data labels after we have verified that they - * fall within the plot area. - */ - seriesTypes.pie.prototype.placeDataLabels = function () { - each(this.points, function (point) { - var dataLabel = point.dataLabel, - _pos; - - if (dataLabel) { - _pos = dataLabel._pos; - if (_pos) { - dataLabel.attr(dataLabel._attr); - dataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos); - dataLabel.moved = true; - } else if (dataLabel) { - dataLabel.attr({ y: -999 }); - } - } - }); - }; - - seriesTypes.pie.prototype.alignDataLabel = noop; - - /** - * Verify whether the data labels are allowed to draw, or we should run more translation and data - * label positioning to keep them inside the plot area. Returns true when data labels are ready - * to draw. - */ - seriesTypes.pie.prototype.verifyDataLabelOverflow = function (overflow) { - - var center = this.center, - options = this.options, - centerOption = options.center, - minSize = options.minSize || 80, - newSize = minSize, - ret; - - // Handle horizontal size and center - if (centerOption[0] !== null) { // Fixed center - newSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize); - - } else { // Auto center - newSize = mathMax( - center[2] - overflow[1] - overflow[3], // horizontal overflow - minSize - ); - center[0] += (overflow[3] - overflow[1]) / 2; // horizontal center - } - - // Handle vertical size and center - if (centerOption[1] !== null) { // Fixed center - newSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize); - - } else { // Auto center - newSize = mathMax( - mathMin( - newSize, - center[2] - overflow[0] - overflow[2] // vertical overflow - ), - minSize - ); - center[1] += (overflow[0] - overflow[2]) / 2; // vertical center - } - - // If the size must be decreased, we need to run translate and drawDataLabels again - if (newSize < center[2]) { - center[2] = newSize; - this.translate(center); - each(this.points, function (point) { - if (point.dataLabel) { - point.dataLabel._pos = null; // reset - } - }); - - if (this.drawDataLabels) { - this.drawDataLabels(); - } - // Else, return true to indicate that the pie and its labels is within the plot area - } else { - ret = true; - } - return ret; - }; -} - -if (seriesTypes.column) { - - /** - * Override the basic data label alignment by adjusting for the position of the column - */ - seriesTypes.column.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var chart = this.chart, - inverted = chart.inverted, - dlBox = point.dlBox || point.shapeArgs, // data label box for alignment - below = point.below || (point.plotY > pick(this.translatedThreshold, chart.plotSizeY)), - inside = pick(options.inside, !!this.options.stacking); // draw it inside the box? - - // Align to the column itself, or the top of it - if (dlBox) { // Area range uses this method but not alignTo - alignTo = merge(dlBox); - if (inverted) { - alignTo = { - x: chart.plotWidth - alignTo.y - alignTo.height, - y: chart.plotHeight - alignTo.x - alignTo.width, - width: alignTo.height, - height: alignTo.width - }; - } - - // Compute the alignment box - if (!inside) { - if (inverted) { - alignTo.x += below ? 0 : alignTo.width; - alignTo.width = 0; - } else { - alignTo.y += below ? alignTo.height : 0; - alignTo.height = 0; - } - } - } - - // When alignment is undefined (typically columns and bars), display the individual - // point below or above the point depending on the threshold - options.align = pick( - options.align, - !inverted || inside ? 'center' : below ? 'right' : 'left' - ); - options.verticalAlign = pick( - options.verticalAlign, - inverted || inside ? 'middle' : below ? 'top' : 'bottom' - ); - - // Call the parent method - Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - }; -} - - - - -// global variables -extend(Highcharts, { - - // Constructors - Axis: Axis, - Chart: Chart, - Color: Color, - Point: Point, - Tick: Tick, - Tooltip: Tooltip, - Renderer: Renderer, - Series: Series, - SVGElement: SVGElement, - SVGRenderer: SVGRenderer, - - // Various - arrayMin: arrayMin, - arrayMax: arrayMax, - charts: charts, - dateFormat: dateFormat, - format: format, - pathAnim: pathAnim, - getOptions: getOptions, - hasBidiBug: hasBidiBug, - isTouchDevice: isTouchDevice, - numberFormat: numberFormat, - seriesTypes: seriesTypes, - setOptions: setOptions, - addEvent: addEvent, - removeEvent: removeEvent, - createElement: createElement, - discardElement: discardElement, - css: css, - each: each, - extend: extend, - map: map, - merge: merge, - pick: pick, - splat: splat, - extendClass: extendClass, - pInt: pInt, - wrap: wrap, - svg: hasSVG, - canvas: useCanVG, - vml: !hasSVG && !useCanVG, - product: PRODUCT, - version: VERSION -}); - -}()); diff --git a/pykeg/web/static/highcharts/js/modules/annotations.js b/pykeg/web/static/highcharts/js/modules/annotations.js deleted file mode 100644 index 53958c146..000000000 --- a/pykeg/web/static/highcharts/js/modules/annotations.js +++ /dev/null @@ -1,7 +0,0 @@ -(function(i,C){function m(a){return typeof a==="number"}function n(a){return a!==D&&a!==null}var D,p,r,s=i.Chart,t=i.extend,z=i.each;r=["path","rect","circle"];p={top:0,left:0,center:0.5,middle:0.5,bottom:1,right:1};var u=C.inArray,A=i.merge,B=function(){this.init.apply(this,arguments)};B.prototype={init:function(a,d){var c=d.shape&&d.shape.type;this.chart=a;var b,f;f={xAxis:0,yAxis:0,title:{style:{},text:"",x:0,y:0},shape:{params:{stroke:"#000000",fill:"transparent",strokeWidth:2}}};b={circle:{params:{x:0, -y:0}}};if(b[c])f.shape=A(f.shape,b[c]);this.options=A({},f,d)},render:function(a){var d=this.chart,c=this.chart.renderer,b=this.group,f=this.title,e=this.shape,h=this.options,i=h.title,l=h.shape;if(!b)b=this.group=c.g();if(!e&&l&&u(l.type,r)!==-1)e=this.shape=c[h.shape.type](l.params),e.add(b);if(!f&&i)f=this.title=c.label(i),f.add(b);b.add(d.annotations.group);this.linkObjects();a!==!1&&this.redraw()},redraw:function(){var a=this.options,d=this.chart,c=this.group,b=this.title,f=this.shape,e=this.linkedObject, -h=d.xAxis[a.xAxis],v=d.yAxis[a.yAxis],l=a.width,w=a.height,x=p[a.anchorY],y=p[a.anchorX],j,o,g,q;if(e)j=e instanceof i.Point?"point":e instanceof i.Series?"series":null,j==="point"?(a.xValue=e.x,a.yValue=e.y,o=e.series):j==="series"&&(o=e),c.visibility!==o.group.visibility&&c.attr({visibility:o.group.visibility});e=n(a.xValue)?h.toPixels(a.xValue+h.minPointOffset)-h.minPixelPadding:a.x;j=n(a.yValue)?v.toPixels(a.yValue):a.y;if(!isNaN(e)&&!isNaN(j)&&m(e)&&m(j)){b&&(b.attr(a.title),b.css(a.title.style)); -if(f){b=t({},a.shape.params);if(a.units==="values"){for(g in b)u(g,["width","x"])>-1?b[g]=h.translate(b[g]):u(g,["height","y"])>-1&&(b[g]=v.translate(b[g]));b.width&&(b.width-=h.toPixels(0)-h.left);b.x&&(b.x+=h.minPixelPadding);if(a.shape.type==="path"){g=b.d;o=e;for(var r=j,s=g.length,k=0;k<s;)typeof g[k]==="number"&&typeof g[k+1]==="number"?(g[k]=h.toPixels(g[k])-o,g[k+1]=v.toPixels(g[k+1])-r,k+=2):k+=1}}a.shape.type==="circle"&&(b.x+=b.r,b.y+=b.r);f.attr(b)}c.bBox=null;if(!m(l))q=c.getBBox(),l= -q.width;if(!m(w))q||(q=c.getBBox()),w=q.height;if(!m(y))y=p.center;if(!m(x))x=p.center;e-=l*y;j-=w*x;d.animation&&n(c.translateX)&&n(c.translateY)?c.animate({translateX:e,translateY:j}):c.translate(e,j)}},destroy:function(){var a=this,d=this.chart.annotations.allItems,c=d.indexOf(a);c>-1&&d.splice(c,1);z(["title","shape","group"],function(b){a[b]&&(a[b].destroy(),a[b]=null)});a.group=a.title=a.shape=a.chart=a.options=null},update:function(a,d){t(this.options,a);this.linkObjects();this.render(d)}, -linkObjects:function(){var a=this.chart,d=this.linkedObject,c=d&&(d.id||d.options.id),b=this.options.linkedTo;if(n(b)){if(!n(d)||b!==c)this.linkedObject=a.get(b)}else this.linkedObject=null}};t(s.prototype,{annotations:{add:function(a,d){var c=this.allItems,b=this.chart,f,e;Object.prototype.toString.call(a)==="[object Array]"||(a=[a]);for(e=a.length;e--;)f=new B(b,a[e]),c.push(f),f.render(d)},redraw:function(){z(this.allItems,function(a){a.redraw()})}}});s.prototype.callbacks.push(function(a){var d= -a.options.annotations,c;c=a.renderer.g("annotations");c.attr({zIndex:7});c.add();a.annotations.allItems=[];a.annotations.chart=a;a.annotations.group=c;Object.prototype.toString.call(d)==="[object Array]"&&d.length>0&&a.annotations.add(a.options.annotations);i.addEvent(a,"redraw",function(){a.annotations.redraw()})})})(Highcharts,HighchartsAdapter); diff --git a/pykeg/web/static/highcharts/js/modules/annotations.src.js b/pykeg/web/static/highcharts/js/modules/annotations.src.js deleted file mode 100644 index 40ce8df36..000000000 --- a/pykeg/web/static/highcharts/js/modules/annotations.src.js +++ /dev/null @@ -1,401 +0,0 @@ -(function (Highcharts, HighchartsAdapter) { - -var UNDEFINED, - ALIGN_FACTOR, - ALLOWED_SHAPES, - Chart = Highcharts.Chart, - extend = Highcharts.extend, - each = Highcharts.each; - -ALLOWED_SHAPES = ["path", "rect", "circle"]; - -ALIGN_FACTOR = { - top: 0, - left: 0, - center: 0.5, - middle: 0.5, - bottom: 1, - right: 1 -}; - - -// Highcharts helper methods -var inArray = HighchartsAdapter.inArray, - merge = Highcharts.merge; - -function defaultOptions(shapeType) { - var shapeOptions, - options; - - options = { - xAxis: 0, - yAxis: 0, - title: { - style: {}, - text: "", - x: 0, - y: 0 - }, - shape: { - params: { - stroke: "#000000", - fill: "transparent", - strokeWidth: 2 - } - } - }; - - shapeOptions = { - circle: { - params: { - x: 0, - y: 0 - } - } - }; - - if (shapeOptions[shapeType]) { - options.shape = merge(options.shape, shapeOptions[shapeType]); - } - - return options; -} - -function isArray(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; -} - -function isNumber(n) { - return typeof n === 'number'; -} - -function defined(obj) { - return obj !== UNDEFINED && obj !== null; -} - -function translatePath(d, xAxis, yAxis, xOffset, yOffset) { - var len = d.length, - i = 0; - - while (i < len) { - if (typeof d[i] === 'number' && typeof d[i + 1] === 'number') { - d[i] = xAxis.toPixels(d[i]) - xOffset; - d[i + 1] = yAxis.toPixels(d[i + 1]) - yOffset; - i += 2; - } else { - i += 1; - } - } - - return d; -} - - -// Define annotation prototype -var Annotation = function () { - this.init.apply(this, arguments); -}; -Annotation.prototype = { - /* - * Initialize the annotation - */ - init: function (chart, options) { - var shapeType = options.shape && options.shape.type; - - this.chart = chart; - this.options = merge({}, defaultOptions(shapeType), options); - }, - - /* - * Render the annotation - */ - render: function (redraw) { - var annotation = this, - chart = this.chart, - renderer = annotation.chart.renderer, - group = annotation.group, - title = annotation.title, - shape = annotation.shape, - options = annotation.options, - titleOptions = options.title, - shapeOptions = options.shape; - - if (!group) { - group = annotation.group = renderer.g(); - } - - - if (!shape && shapeOptions && inArray(shapeOptions.type, ALLOWED_SHAPES) !== -1) { - shape = annotation.shape = renderer[options.shape.type](shapeOptions.params); - shape.add(group); - } - - if (!title && titleOptions) { - title = annotation.title = renderer.label(titleOptions); - title.add(group); - } - - group.add(chart.annotations.group); - - // link annotations to point or series - annotation.linkObjects(); - - if (redraw !== false) { - annotation.redraw(); - } - }, - - /* - * Redraw the annotation title or shape after options update - */ - redraw: function () { - var options = this.options, - chart = this.chart, - group = this.group, - title = this.title, - shape = this.shape, - linkedTo = this.linkedObject, - xAxis = chart.xAxis[options.xAxis], - yAxis = chart.yAxis[options.yAxis], - width = options.width, - height = options.height, - anchorY = ALIGN_FACTOR[options.anchorY], - anchorX = ALIGN_FACTOR[options.anchorX], - resetBBox = false, - shapeParams, - linkType, - series, - param, - bbox, - x, - y; - - if (linkedTo) { - linkType = (linkedTo instanceof Highcharts.Point) ? 'point' : - (linkedTo instanceof Highcharts.Series) ? 'series' : null; - - if (linkType === 'point') { - options.xValue = linkedTo.x; - options.yValue = linkedTo.y; - series = linkedTo.series; - } else if (linkType === 'series') { - series = linkedTo; - } - - if (group.visibility !== series.group.visibility) { - group.attr({ - visibility: series.group.visibility - }); - } - } - - - // Based on given options find annotation pixel position - x = (defined(options.xValue) ? xAxis.toPixels(options.xValue + xAxis.minPointOffset) - xAxis.minPixelPadding : options.x); - y = defined(options.yValue) ? yAxis.toPixels(options.yValue) : options.y; - - if (isNaN(x) || isNaN(y) || !isNumber(x) || !isNumber(y)) { - return; - } - - - if (title) { - title.attr(options.title); - title.css(options.title.style); - resetBBox = true; - } - - if (shape) { - shapeParams = extend({}, options.shape.params); - - if (options.units === 'values') { - for (param in shapeParams) { - if (inArray(param, ['width', 'x']) > -1) { - shapeParams[param] = xAxis.translate(shapeParams[param]); - } else if (inArray(param, ['height', 'y']) > -1) { - shapeParams[param] = yAxis.translate(shapeParams[param]); - } - } - - if (shapeParams.width) { - shapeParams.width -= xAxis.toPixels(0) - xAxis.left; - } - - if (shapeParams.x) { - shapeParams.x += xAxis.minPixelPadding; - } - - if (options.shape.type === 'path') { - translatePath(shapeParams.d, xAxis, yAxis, x, y); - } - } - - // move the center of the circle to shape x/y - if (options.shape.type === 'circle') { - shapeParams.x += shapeParams.r; - shapeParams.y += shapeParams.r; - } - - resetBBox = true; - shape.attr(shapeParams); - } - - group.bBox = null; - - // If annotation width or height is not defined in options use bounding box size - if (!isNumber(width)) { - bbox = group.getBBox(); - width = bbox.width; - } - - if (!isNumber(height)) { - // get bbox only if it wasn't set before - if (!bbox) { - bbox = group.getBBox(); - } - - height = bbox.height; - } - - // Calculate anchor point - if (!isNumber(anchorX)) { - anchorX = ALIGN_FACTOR.center; - } - - if (!isNumber(anchorY)) { - anchorY = ALIGN_FACTOR.center; - } - - // Translate group according to its dimension and anchor point - x = x - width * anchorX; - y = y - height * anchorY; - - if (chart.animation && defined(group.translateX) && defined(group.translateY)) { - group.animate({ - translateX: x, - translateY: y - }); - } else { - group.translate(x, y); - } - }, - - /* - * Destroy the annotation - */ - destroy: function () { - var annotation = this, - chart = this.chart, - allItems = chart.annotations.allItems, - index = allItems.indexOf(annotation); - - if (index > -1) { - allItems.splice(index, 1); - } - - each(['title', 'shape', 'group'], function (element) { - if (annotation[element]) { - annotation[element].destroy(); - annotation[element] = null; - } - }); - - annotation.group = annotation.title = annotation.shape = annotation.chart = annotation.options = null; - }, - - /* - * Update the annotation with a given options - */ - update: function (options, redraw) { - extend(this.options, options); - - // update link to point or series - this.linkObjects(); - - this.render(redraw); - }, - - linkObjects: function () { - var annotation = this, - chart = annotation.chart, - linkedTo = annotation.linkedObject, - linkedId = linkedTo && (linkedTo.id || linkedTo.options.id), - options = annotation.options, - id = options.linkedTo; - - if (!defined(id)) { - annotation.linkedObject = null; - } else if (!defined(linkedTo) || id !== linkedId) { - annotation.linkedObject = chart.get(id); - } - } -}; - - -// Add annotations methods to chart prototype -extend(Chart.prototype, { - annotations: { - /* - * Unified method for adding annotations to the chart - */ - add: function (options, redraw) { - var annotations = this.allItems, - chart = this.chart, - item, - len; - - if (!isArray(options)) { - options = [options]; - } - - len = options.length; - - while (len--) { - item = new Annotation(chart, options[len]); - annotations.push(item); - item.render(redraw); - } - }, - - /** - * Redraw all annotations, method used in chart events - */ - redraw: function () { - each(this.allItems, function (annotation) { - annotation.redraw(); - }); - } - } -}); - - -// Initialize on chart load -Chart.prototype.callbacks.push(function (chart) { - var options = chart.options.annotations, - group; - - group = chart.renderer.g("annotations"); - group.attr({ - zIndex: 7 - }); - group.add(); - - // initialize empty array for annotations - chart.annotations.allItems = []; - - // link chart object to annotations - chart.annotations.chart = chart; - - // link annotations group element to the chart - chart.annotations.group = group; - - if (isArray(options) && options.length > 0) { - chart.annotations.add(chart.options.annotations); - } - - // update annotations after chart redraw - Highcharts.addEvent(chart, 'redraw', function () { - chart.annotations.redraw(); - }); -}); -}(Highcharts, HighchartsAdapter)); diff --git a/pykeg/web/static/highcharts/js/modules/canvas-tools.js b/pykeg/web/static/highcharts/js/modules/canvas-tools.js deleted file mode 100644 index 5cfd50fad..000000000 --- a/pykeg/web/static/highcharts/js/modules/canvas-tools.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - A class to parse color values - @author Stoyan Stefanov <sstoo@gmail.com> - @link http://www.phpied.com/rgb-color-parser-in-javascript/ - Use it if you like it - - canvg.js - Javascript SVG parser and renderer on Canvas - MIT Licensed - Gabe Lerner (gabelerner@gmail.com) - http://code.google.com/p/canvg/ - - Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - - Highcharts JS v3.0.9 (2014-01-15) - CanVGRenderer Extension module - - (c) 2011-2012 Torstein Honsi, Erik Olsson - - License: www.highcharts.com/license -*/ -function RGBColor(m){this.ok=!1;m.charAt(0)=="#"&&(m=m.substr(1,6));var m=m.replace(/ /g,""),m=m.toLowerCase(),a={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b", -darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff", -gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa", -lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080", -oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd", -slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/, -example:["#00ff00","336699"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c<d.length;c++){var b=d[c].process,k=d[c].re.exec(m);if(k)channels=b(k),this.r=channels[0],this.g=channels[1],this.b=channels[2],this.ok=!0}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r;this.g=this.g<0||isNaN(this.g)?0: -this.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b="0"+b);a.length==1&&(a="0"+a);d.length==1&&(d="0"+d);return"#"+b+a+d};this.getHelpXML=function(){for(var b=[],k=0;k<d.length;k++)for(var c=d[k].example,j=0;j<c.length;j++)b[b.length]=c[j];for(var h in a)b[b.length]=h;c=document.createElement("ul"); -c.setAttribute("id","rgbcolor-examples");for(k=0;k<b.length;k++)try{var l=document.createElement("li"),o=new RGBColor(b[k]),n=document.createElement("div");n.style.cssText="margin: 3px; border: 1px solid black; background:"+o.toHex()+"; color:"+o.toHex();n.appendChild(document.createTextNode("test"));var q=document.createTextNode(" "+b[k]+" -> "+o.toRGB()+" -> "+o.toHex());l.appendChild(n);l.appendChild(q);c.appendChild(l)}catch(p){}return c}} -if(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a<this.length;a++)if(this[a]==m)return a;return-1}; -(function(){function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function(c){a.Definitions={};a.Styles={};a.Animations=[];a.Images=[];a.ctx=c;a.ViewPort=new function(){this.viewPorts=[];this.Clear=function(){this.viewPorts=[]};this.SetCurrent=function(a,b){this.viewPorts.push({width:a,height:b})};this.RemoveCurrent=function(){this.viewPorts.pop()};this.Current=function(){return this.viewPorts[this.viewPorts.length-1]};this.width=function(){return this.Current().width};this.height=function(){return this.Current().height}; -this.ComputeSize=function(a){return a!=null&&typeof a=="number"?a:a=="x"?this.width():a=="y"?this.height():Math.sqrt(Math.pow(this.width(),2)+Math.pow(this.height(),2))/Math.sqrt(2)}}};a.init();a.ImagesLoaded=function(){for(var c=0;c<a.Images.length;c++)if(!a.Images[c].loaded)return!1;return!0};a.trim=function(a){return a.replace(/^\s+|\s+$/g,"")};a.compressSpaces=function(a){return a.replace(/[\s\r\t\n]+/gm," ")};a.ajax=function(a){var d;return(d=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"))? -(d.open("GET",a,!1),d.send(null),d.responseText):null};a.parseXml=function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,"text/xml");else{var a=a.replace(/<!DOCTYPE svg[^>]*>/,""),d=new ActiveXObject("Microsoft.XMLDOM");d.async="false";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==""};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+"").match(/%$/)&& -(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=""){var f=new RGBColor(b.value);f.ok&&(c="rgba("+f.r+", "+f.g+", "+f.b+", "+d+")")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\()?#([^\)]+)\)?$/,"$2");return a.Definitions[d]},isUrl:function(){return b.value.indexOf("url(")== -0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+"";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)? -b.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+"";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+ -"";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=["normal","italic","oblique","inherit"];this.Variants=["normal","small-caps","inherit"];this.Weights="normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit".split(",");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont("","","","","",a.ctx.font);return{fontFamily:f|| -g.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(" ")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||"")).split(" "),k=!1,e=!1,f=!1,g=!1,j="",h=0;h<d.length;h++)if(!e&&c.Styles.indexOf(d[h])!=-1){if(d[h]!="inherit")b.fontStyle=d[h];e=!0}else if(!g&&c.Variants.indexOf(d[h])!=-1){if(d[h]!="inherit")b.fontVariant= -d[h];e=g=!0}else if(!f&&c.Weights.indexOf(d[h])!=-1){if(d[h]!="inherit")b.fontWeight=d[h];e=g=f=!0}else if(k)d[h]!="inherit"&&(j+=d[h]);else{if(d[h]!="inherit")b.fontSize=d[h].split("/")[0];e=g=f=k=!0}if(j!="")b.fontFamily=j;return b}};a.ToNumberArray=function(c){for(var c=a.trim(a.compressSpaces((c||"").replace(/,/g," "))).split(" "),d=0;d<c.length;d++)c[d]=parseFloat(c[d]);return c};a.Point=function(a,d){this.x=a;this.y=d;this.angleTo=function(b){return Math.atan2(b.y-this.y,b.x-this.x)};this.applyTransform= -function(b){var a=this.x*b[1]+this.y*b[3]+b[5];this.x=this.x*b[0]+this.y*b[2]+b[4];this.y=a}};a.CreatePoint=function(c){c=a.ToNumberArray(c);return new a.Point(c[0],c[1])};a.CreatePath=function(c){for(var c=a.ToNumberArray(c),d=[],b=0;b<c.length;b+=2)d.push(new a.Point(c[b],c[b+1]));return d};a.BoundingBox=function(a,d,b,k){this.y2=this.x2=this.y1=this.x1=Number.NaN;this.x=function(){return this.x1};this.y=function(){return this.y1};this.width=function(){return this.x2-this.x1};this.height=function(){return this.y2- -this.y1};this.addPoint=function(b,a){if(b!=null){if(isNaN(this.x1)||isNaN(this.x2))this.x2=this.x1=b;if(b<this.x1)this.x1=b;if(b>this.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(a<this.y1)this.y1=a;if(a>this.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c- -a);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))):(c=Math.pow(a,2)-4*c*d,c<0||(k= -(-a+Math.sqrt(c))/(2*d),0<k&&k<1&&(i==0&&this.addX(b(k)),i==1&&this.addY(b(k))),a=(-a-Math.sqrt(c))/(2*d),0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))))};this.isPointInBox=function(b,a){return this.x1<=b&&b<=this.x2&&this.y1<=a&&a<=this.y2};this.addPoint(a,d);this.addPoint(b,k)};a.Transform=function(c){var d=this;this.Type={};this.Type.translate=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.translate(this.p.x||0,this.p.y||0)};this.applyToPoint=function(b){b.applyTransform([1, -0,0,1,this.p.x||0,this.p.y||0])}};this.Type.rotate=function(b){b=a.ToNumberArray(b);this.angle=new a.Property("angle",b[0]);this.cx=b[1]||0;this.cy=b[2]||0;this.apply=function(b){b.translate(this.cx,this.cy);b.rotate(this.angle.Angle.toRadians());b.translate(-this.cx,-this.cy)};this.applyToPoint=function(b){var a=this.angle.Angle.toRadians();b.applyTransform([1,0,0,1,this.p.x||0,this.p.y||0]);b.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]);b.applyTransform([1,0,0,1,-this.p.x|| -0,-this.p.y||0])}};this.Type.scale=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.scale(this.p.x||1,this.p.y||this.p.x||1)};this.applyToPoint=function(b){b.applyTransform([this.p.x||0,0,0,this.p.y||0,0,0])}};this.Type.matrix=function(b){this.m=a.ToNumberArray(b);this.apply=function(b){b.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])};this.applyToPoint=function(b){b.applyTransform(this.m)}};this.Type.SkewBase=function(b){this.base=d.Type.matrix;this.base(b);this.angle= -new a.Property("angle",b)};this.Type.SkewBase.prototype=new this.Type.matrix;this.Type.skewX=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,0,Math.tan(this.angle.Angle.toRadians()),1,0,0]};this.Type.skewX.prototype=new this.Type.SkewBase;this.Type.skewY=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,Math.tan(this.angle.Angle.toRadians()),0,1,0,0]};this.Type.skewY.prototype=new this.Type.SkewBase;this.transforms=[];this.apply=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].apply(b)}; -this.applyToPoint=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].applyToPoint(b)};for(var c=a.trim(a.compressSpaces(c)).split(/\s(?=[a-z])/),b=0;b<c.length;b++){var k=c[b].split("(")[0],e=c[b].split("(")[1].replace(")","");this.transforms.push(new this.Type[k](e))}};a.AspectRatio=function(c,d,b,k,e,f,g,j,h,l){var d=a.compressSpaces(d),d=d.replace(/^defer\s/,""),o=d.split(" ")[0]||"xMidYMid",d=d.split(" ")[1]||"meet",n=b/k,q=e/f,p=Math.min(n,q),m=Math.max(n,q);d=="meet"&&(k*= -p,f*=p);d=="slice"&&(k*=m,f*=m);h=new a.Property("refX",h);l=new a.Property("refY",l);h.hasValue()&&l.hasValue()?c.translate(-p*h.Length.toPixels("x"),-p*l.Length.toPixels("y")):(o.match(/^xMid/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b/2-k/2,0),o.match(/YMid$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e/2-f/2),o.match(/^xMax/)&&(d=="meet"&&p==q||d=="slice"&&m==q)&&c.translate(b-k,0),o.match(/YMax$/)&&(d=="meet"&&p==n||d=="slice"&&m==n)&&c.translate(0,e-f));o=="none"?c.scale(n, -q):d=="meet"?c.scale(p,p):d=="slice"&&c.scale(m,m);c.translate(g==null?0:-g,j==null?0:-j)};a.Element={};a.Element.ElementBase=function(c){this.attributes={};this.styles={};this.children=[];this.attribute=function(b,d){var c=this.attributes[b];if(c!=null)return c;c=new a.Property(b,"");d==!0&&(this.attributes[b]=c);return c};this.style=function(b,d){var c=this.styles[b];if(c!=null)return c;c=this.attribute(b);if(c!=null&&c.hasValue())return c;c=this.parent;if(c!=null&&(c=c.style(b),c!=null&&c.hasValue()))return c; -c=new a.Property(b,"");d==!0&&(this.styles[b]=c);return c};this.render=function(b){if(this.style("display").value!="none"&&this.attribute("visibility").value!="hidden"){b.save();this.setContext(b);if(this.attribute("mask").hasValue()){var a=this.attribute("mask").Definition.getDefinition();a!=null&&a.apply(b,this)}else this.style("filter").hasValue()?(a=this.style("filter").Definition.getDefinition(),a!=null&&a.apply(b,this)):this.renderChildren(b);this.clearContext(b);b.restore()}};this.setContext= -function(){};this.clearContext=function(){};this.renderChildren=function(b){for(var a=0;a<this.children.length;a++)this.children[a].render(b)};this.addChild=function(b,d){var c=b;d&&(c=a.CreateElement(b));c.parent=this;this.children.push(c)};if(c!=null&&c.nodeType==1){for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1&&this.addChild(b,!0)}for(d=0;d<c.attributes.length;d++)b=c.attributes[d],this.attributes[b.nodeName]=new a.Property(b.nodeName,b.nodeValue);b=a.Styles[c.nodeName]; -if(b!=null)for(var k in b)this.styles[k]=b[k];if(this.attribute("class").hasValue())for(var d=a.compressSpaces(this.attribute("class").value).split(" "),e=0;e<d.length;e++){b=a.Styles["."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k];b=a.Styles[c.nodeName+"."+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k]}if(this.attribute("style").hasValue()){b=this.attribute("style").value.split(";");for(d=0;d<b.length;d++)a.trim(b[d])!=""&&(c=b[d].split(":"),k=a.trim(c[0]),c=a.trim(c[1]),this.styles[k]=new a.Property(k, -c))}this.attribute("id").hasValue()&&a.Definitions[this.attribute("id").value]==null&&(a.Definitions[this.attribute("id").value]=this)}};a.Element.RenderedElementBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.setContext=function(d){if(this.style("fill").Definition.isUrl()){var b=this.style("fill").Definition.getFillStyle(this);if(b!=null)d.fillStyle=b}else if(this.style("fill").hasValue())b=this.style("fill"),this.style("fill-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("fill-opacity").value)), -d.fillStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke").Definition.isUrl()){if(b=this.style("stroke").Definition.getFillStyle(this),b!=null)d.strokeStyle=b}else if(this.style("stroke").hasValue())b=this.style("stroke"),this.style("stroke-opacity").hasValue()&&(b=b.Color.addOpacity(this.style("stroke-opacity").value)),d.strokeStyle=b.value=="none"?"rgba(0,0,0,0)":b.value;if(this.style("stroke-width").hasValue())d.lineWidth=this.style("stroke-width").Length.toPixels();if(this.style("stroke-linecap").hasValue())d.lineCap= -this.style("stroke-linecap").value;if(this.style("stroke-linejoin").hasValue())d.lineJoin=this.style("stroke-linejoin").value;if(this.style("stroke-miterlimit").hasValue())d.miterLimit=this.style("stroke-miterlimit").value;if(typeof d.font!="undefined")d.font=a.Font.CreateFont(this.style("font-style").value,this.style("font-variant").value,this.style("font-weight").value,this.style("font-size").hasValue()?this.style("font-size").Length.toPixels()+"px":"",this.style("font-family").value).toString(); -this.attribute("transform").hasValue()&&(new a.Transform(this.attribute("transform").value)).apply(d);this.attribute("clip-path").hasValue()&&(b=this.attribute("clip-path").Definition.getDefinition(),b!=null&&b.apply(d));if(this.style("opacity").hasValue())d.globalAlpha=this.style("opacity").numValue()}};a.Element.RenderedElementBase.prototype=new a.Element.ElementBase;a.Element.PathElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.path=function(d){d!=null&&d.beginPath(); -return new a.BoundingBox};this.renderChildren=function(d){this.path(d);a.Mouse.checkPath(this,d);d.fillStyle!=""&&d.fill();d.strokeStyle!=""&&d.stroke();var b=this.getMarkers();if(b!=null){if(this.style("marker-start").Definition.isUrl()){var c=this.style("marker-start").Definition.getDefinition();c.render(d,b[0][0],b[0][1])}if(this.style("marker-mid").Definition.isUrl())for(var c=this.style("marker-mid").Definition.getDefinition(),e=1;e<b.length-1;e++)c.render(d,b[e][0],b[e][1]);this.style("marker-end").Definition.isUrl()&& -(c=this.style("marker-end").Definition.getDefinition(),c.render(d,b[b.length-1][0],b[b.length-1][1]))}};this.getBoundingBox=function(){return this.path()};this.getMarkers=function(){return null}};a.Element.PathElementBase.prototype=new a.Element.RenderedElementBase;a.Element.svg=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseClearContext=this.clearContext;this.clearContext=function(d){this.baseClearContext(d);a.ViewPort.RemoveCurrent()};this.baseSetContext=this.setContext; -this.setContext=function(d){d.strokeStyle="rgba(0,0,0,0)";d.lineCap="butt";d.lineJoin="miter";d.miterLimit=4;this.baseSetContext(d);this.attribute("x").hasValue()&&this.attribute("y").hasValue()&&d.translate(this.attribute("x").Length.toPixels("x"),this.attribute("y").Length.toPixels("y"));var b=a.ViewPort.width(),c=a.ViewPort.height();if(typeof this.root=="undefined"&&this.attribute("width").hasValue()&&this.attribute("height").hasValue()){var b=this.attribute("width").Length.toPixels("x"),c=this.attribute("height").Length.toPixels("y"), -e=0,f=0;this.attribute("refX").hasValue()&&this.attribute("refY").hasValue()&&(e=-this.attribute("refX").Length.toPixels("x"),f=-this.attribute("refY").Length.toPixels("y"));d.beginPath();d.moveTo(e,f);d.lineTo(b,f);d.lineTo(b,c);d.lineTo(e,c);d.closePath();d.clip()}a.ViewPort.SetCurrent(b,c);if(this.attribute("viewBox").hasValue()){var e=a.ToNumberArray(this.attribute("viewBox").value),f=e[0],g=e[1],b=e[2],c=e[3];a.AspectRatio(d,this.attribute("preserveAspectRatio").value,a.ViewPort.width(),b,a.ViewPort.height(), -c,f,g,this.attribute("refX").value,this.attribute("refY").value);a.ViewPort.RemoveCurrent();a.ViewPort.SetCurrent(e[2],e[3])}}};a.Element.svg.prototype=new a.Element.RenderedElementBase;a.Element.rect=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("x").Length.toPixels("x"),c=this.attribute("y").Length.toPixels("y"),e=this.attribute("width").Length.toPixels("x"),f=this.attribute("height").Length.toPixels("y"),g=this.attribute("rx").Length.toPixels("x"), -j=this.attribute("ry").Length.toPixels("y");this.attribute("rx").hasValue()&&!this.attribute("ry").hasValue()&&(j=g);this.attribute("ry").hasValue()&&!this.attribute("rx").hasValue()&&(g=j);d!=null&&(d.beginPath(),d.moveTo(b+g,c),d.lineTo(b+e-g,c),d.quadraticCurveTo(b+e,c,b+e,c+j),d.lineTo(b+e,c+f-j),d.quadraticCurveTo(b+e,c+f,b+e-g,c+f),d.lineTo(b+g,c+f),d.quadraticCurveTo(b,c+f,b,c+f-j),d.lineTo(b,c+j),d.quadraticCurveTo(b,c,b+g,c),d.closePath());return new a.BoundingBox(b,c,b+e,c+f)}};a.Element.rect.prototype= -new a.Element.PathElementBase;a.Element.circle=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute("cx").Length.toPixels("x"),c=this.attribute("cy").Length.toPixels("y"),e=this.attribute("r").Length.toPixels();d!=null&&(d.beginPath(),d.arc(b,c,e,0,Math.PI*2,!0),d.closePath());return new a.BoundingBox(b-e,c-e,b+e,c+e)}};a.Element.circle.prototype=new a.Element.PathElementBase;a.Element.ellipse=function(c){this.base=a.Element.PathElementBase;this.base(c); -this.path=function(d){var b=4*((Math.sqrt(2)-1)/3),c=this.attribute("rx").Length.toPixels("x"),e=this.attribute("ry").Length.toPixels("y"),f=this.attribute("cx").Length.toPixels("x"),g=this.attribute("cy").Length.toPixels("y");d!=null&&(d.beginPath(),d.moveTo(f,g-e),d.bezierCurveTo(f+b*c,g-e,f+c,g-b*e,f+c,g),d.bezierCurveTo(f+c,g+b*e,f+b*c,g+e,f,g+e),d.bezierCurveTo(f-b*c,g+e,f-c,g+b*e,f-c,g),d.bezierCurveTo(f-c,g-b*e,f-b*c,g-e,f,g-e),d.closePath());return new a.BoundingBox(f-c,g-e,f+c,g+e)}};a.Element.ellipse.prototype= -new a.Element.PathElementBase;a.Element.line=function(c){this.base=a.Element.PathElementBase;this.base(c);this.getPoints=function(){return[new a.Point(this.attribute("x1").Length.toPixels("x"),this.attribute("y1").Length.toPixels("y")),new a.Point(this.attribute("x2").Length.toPixels("x"),this.attribute("y2").Length.toPixels("y"))]};this.path=function(d){var b=this.getPoints();d!=null&&(d.beginPath(),d.moveTo(b[0].x,b[0].y),d.lineTo(b[1].x,b[1].y));return new a.BoundingBox(b[0].x,b[0].y,b[1].x,b[1].y)}; -this.getMarkers=function(){var a=this.getPoints(),b=a[0].angleTo(a[1]);return[[a[0],b],[a[1],b]]}};a.Element.line.prototype=new a.Element.PathElementBase;a.Element.polyline=function(c){this.base=a.Element.PathElementBase;this.base(c);this.points=a.CreatePath(this.attribute("points").value);this.path=function(d){var b=new a.BoundingBox(this.points[0].x,this.points[0].y);d!=null&&(d.beginPath(),d.moveTo(this.points[0].x,this.points[0].y));for(var c=1;c<this.points.length;c++)b.addPoint(this.points[c].x, -this.points[c].y),d!=null&&d.lineTo(this.points[c].x,this.points[c].y);return b};this.getMarkers=function(){for(var a=[],b=0;b<this.points.length-1;b++)a.push([this.points[b],this.points[b].angleTo(this.points[b+1])]);a.push([this.points[this.points.length-1],a[a.length-1][1]]);return a}};a.Element.polyline.prototype=new a.Element.PathElementBase;a.Element.polygon=function(c){this.base=a.Element.polyline;this.base(c);this.basePath=this.path;this.path=function(a){var b=this.basePath(a);a!=null&&(a.lineTo(this.points[0].x, -this.points[0].y),a.closePath());return b}};a.Element.polygon.prototype=new a.Element.polyline;a.Element.path=function(c){this.base=a.Element.PathElementBase;this.base(c);c=this.attribute("d").value;c=c.replace(/,/gm," ");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,"$1 $2");c=c.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,"$1 $2");c=c.replace(/([0-9])([+\-])/gm, -"$1 $2");c=c.replace(/(\.[0-9]*)(\.)/gm,"$1 $2");c=c.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,"$1 $3 $4 ");c=a.compressSpaces(c);c=a.trim(c);this.PathParser=new function(d){this.tokens=d.split(" ");this.reset=function(){this.i=-1;this.previousCommand=this.command="";this.start=new a.Point(0,0);this.control=new a.Point(0,0);this.current=new a.Point(0,0);this.points=[];this.angles=[]};this.isEnd=function(){return this.i>=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()? -!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint(); -return this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!="c"&&this.previousCommand.toLowerCase()!="s"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length- -1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b<this.angles.length;b++)if(this.angles[b]==null)for(var a=b+1;a<this.angles.length;a++)if(this.angles[a]!=null){this.angles[b]=this.angles[a];break}return this.angles}}(c);this.path=function(d){var b= -this.PathParser;b.reset();var c=new a.BoundingBox;for(d!=null&&d.beginPath();!b.isEnd();)switch(b.nextCommand(),b.command.toUpperCase()){case "M":var e=b.getAsCurrentPoint();b.addMarker(e);c.addPoint(e.x,e.y);d!=null&&d.moveTo(e.x,e.y);for(b.start=b.current;!b.isCommandOrEnd();)e=b.getAsCurrentPoint(),b.addMarker(e,b.start),c.addPoint(e.x,e.y),d!=null&&d.lineTo(e.x,e.y);break;case "L":for(;!b.isCommandOrEnd();){var f=b.current,e=b.getAsCurrentPoint();b.addMarker(e,f);c.addPoint(e.x,e.y);d!=null&& -d.lineTo(e.x,e.y)}break;case "H":for(;!b.isCommandOrEnd();)e=new a.Point((b.isRelativeCommand()?b.current.x:0)+b.getScalar(),b.current.y),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "V":for(;!b.isCommandOrEnd();)e=new a.Point(b.current.x,(b.isRelativeCommand()?b.current.y:0)+b.getScalar()),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case "C":for(;!b.isCommandOrEnd();){var g= -b.current,f=b.getPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint();b.addMarker(e,j,f);c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y);d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y)}break;case "S":for(;!b.isCommandOrEnd();)g=b.current,f=b.getReflectedControlPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint(),b.addMarker(e,j,f),c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y),d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y);break;case "Q":for(;!b.isCommandOrEnd();)g=b.current,j=b.getAsControlPoint(), -e=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case "T":for(;!b.isCommandOrEnd();)g=b.current,j=b.getReflectedControlPoint(),b.control=j,e=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case "A":for(;!b.isCommandOrEnd();){var g=b.current,h=b.getScalar(),l=b.getScalar(),f=b.getScalar()*(Math.PI/180),o=b.getScalar(),j=b.getScalar(), -e=b.getAsCurrentPoint(),n=new a.Point(Math.cos(f)*(g.x-e.x)/2+Math.sin(f)*(g.y-e.y)/2,-Math.sin(f)*(g.x-e.x)/2+Math.cos(f)*(g.y-e.y)/2),q=Math.pow(n.x,2)/Math.pow(h,2)+Math.pow(n.y,2)/Math.pow(l,2);q>1&&(h*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==j?-1:1)*Math.sqrt((Math.pow(h,2)*Math.pow(l,2)-Math.pow(h,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(h,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*h*n.y/l,o*-l*n.x/h),g=new a.Point((g.x+e.x)/2+Math.cos(f)* -p.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]<b[1]*a[0]?-1:1)*Math.acos(m(b,a))},o=s([1,0],[(n.x-p.x)/h,(n.y-p.y)/l]),q=[(n.x-p.x)/h,(n.y-p.y)/l],p=[(-n.x-p.x)/h,(-n.y-p.y)/l],n=s(q,p);if(m(q,p)<=-1)n=Math.PI;m(q,p)>=1&&(n=0);j==0&&n>0&&(n-=2*Math.PI);j==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-h*Math.cos((o+n)/ -2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(j==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(j==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=h>l?h:l,e=h>l?1:h/l,h=h>l?l/h:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,h),d.arc(0,0,m,o,o+n,1-j),d.scale(1/e,1/h),d.rotate(-f),d.translate(-g.x,-g.y))}break;case "Z":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;e<a.length;e++)c.push([a[e], -b[e]]);return c}};a.Element.path.prototype=new a.Element.PathElementBase;a.Element.pattern=function(c){this.base=a.Element.ElementBase;this.base(c);this.createPattern=function(d){var b=new a.Element.svg;b.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);b.attributes.x=new a.Property("x",this.attribute("x").value);b.attributes.y=new a.Property("y",this.attribute("y").value);b.attributes.width=new a.Property("width",this.attribute("width").value);b.attributes.height=new a.Property("height", -this.attribute("height").value);b.children=this.children;var c=document.createElement("canvas");c.width=this.attribute("width").Length.toPixels("x");c.height=this.attribute("height").Length.toPixels("y");b.render(c.getContext("2d"));return d.createPattern(c,"repeat")}};a.Element.pattern.prototype=new a.Element.ElementBase;a.Element.marker=function(c){this.base=a.Element.ElementBase;this.base(c);this.baseRender=this.render;this.render=function(d,b,c){d.translate(b.x,b.y);this.attribute("orient").valueOrDefault("auto")== -"auto"&&d.rotate(c);this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(d.lineWidth,d.lineWidth);d.save();var e=new a.Element.svg;e.attributes.viewBox=new a.Property("viewBox",this.attribute("viewBox").value);e.attributes.refX=new a.Property("refX",this.attribute("refX").value);e.attributes.refY=new a.Property("refY",this.attribute("refY").value);e.attributes.width=new a.Property("width",this.attribute("markerWidth").value);e.attributes.height=new a.Property("height", -this.attribute("markerHeight").value);e.attributes.fill=new a.Property("fill",this.attribute("fill").valueOrDefault("black"));e.attributes.stroke=new a.Property("stroke",this.attribute("stroke").valueOrDefault("none"));e.children=this.children;e.render(d);d.restore();this.attribute("markerUnits").valueOrDefault("strokeWidth")=="strokeWidth"&&d.scale(1/d.lineWidth,1/d.lineWidth);this.attribute("orient").valueOrDefault("auto")=="auto"&&d.rotate(-c);d.translate(-b.x,-b.y)}};a.Element.marker.prototype= -new a.Element.ElementBase;a.Element.defs=function(c){this.base=a.Element.ElementBase;this.base(c);this.render=function(){}};a.Element.defs.prototype=new a.Element.ElementBase;a.Element.GradientBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.gradientUnits=this.attribute("gradientUnits").valueOrDefault("objectBoundingBox");this.stops=[];for(c=0;c<this.children.length;c++)this.stops.push(this.children[c]);this.getGradient=function(){};this.createGradient=function(d,b){var c=this;this.attribute("xlink:href").hasValue()&& -(c=this.attribute("xlink:href").Definition.getDefinition());for(var e=this.getGradient(d,b),f=0;f<c.stops.length;f++)e.addColorStop(c.stops[f].offset,c.stops[f].color);if(this.attribute("gradientTransform").hasValue()){c=a.ViewPort.viewPorts[0];f=new a.Element.rect;f.attributes.x=new a.Property("x",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.y=new a.Property("y",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.width=new a.Property("width",a.MAX_VIRTUAL_PIXELS);f.attributes.height=new a.Property("height",a.MAX_VIRTUAL_PIXELS); -var g=new a.Element.g;g.attributes.transform=new a.Property("transform",this.attribute("gradientTransform").value);g.children=[f];f=new a.Element.svg;f.attributes.x=new a.Property("x",0);f.attributes.y=new a.Property("y",0);f.attributes.width=new a.Property("width",c.width);f.attributes.height=new a.Property("height",c.height);f.children=[g];g=document.createElement("canvas");g.width=c.width;g.height=c.height;c=g.getContext("2d");c.fillStyle=e;f.render(c);return c.createPattern(g,"no-repeat")}return e}}; -a.Element.GradientBase.prototype=new a.Element.ElementBase;a.Element.linearGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("x1").numValue():this.attribute("x1").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y1").numValue():this.attribute("y1").Length.toPixels("y"),g=this.gradientUnits=="objectBoundingBox"? -c.x()+c.width()*this.attribute("x2").numValue():this.attribute("x2").Length.toPixels("x"),c=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("y2").numValue():this.attribute("y2").Length.toPixels("y");return a.createLinearGradient(e,f,g,c)}};a.Element.linearGradient.prototype=new a.Element.GradientBase;a.Element.radialGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits=="objectBoundingBox"? -c.x()+c.width()*this.attribute("cx").numValue():this.attribute("cx").Length.toPixels("x"),f=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("cy").numValue():this.attribute("cy").Length.toPixels("y"),g=e,j=f;this.attribute("fx").hasValue()&&(g=this.gradientUnits=="objectBoundingBox"?c.x()+c.width()*this.attribute("fx").numValue():this.attribute("fx").Length.toPixels("x"));this.attribute("fy").hasValue()&&(j=this.gradientUnits=="objectBoundingBox"?c.y()+c.height()*this.attribute("fy").numValue(): -this.attribute("fy").Length.toPixels("y"));c=this.gradientUnits=="objectBoundingBox"?(c.width()+c.height())/2*this.attribute("r").numValue():this.attribute("r").Length.toPixels();return a.createRadialGradient(g,j,0,e,f,c)}};a.Element.radialGradient.prototype=new a.Element.GradientBase;a.Element.stop=function(c){this.base=a.Element.ElementBase;this.base(c);this.offset=this.attribute("offset").numValue();c=this.style("stop-color");this.style("stop-opacity").hasValue()&&(c=c.Color.addOpacity(this.style("stop-opacity").value)); -this.color=c.value};a.Element.stop.prototype=new a.Element.ElementBase;a.Element.AnimateBase=function(c){this.base=a.Element.ElementBase;this.base(c);a.Animations.push(this);this.duration=0;this.begin=this.attribute("begin").Time.toMilliseconds();this.maxDuration=this.begin+this.attribute("dur").Time.toMilliseconds();this.getProperty=function(){var a=this.attribute("attributeType").value,b=this.attribute("attributeName").value;return a=="CSS"?this.parent.style(b,!0):this.parent.attribute(b,!0)};this.initialValue= -null;this.removed=!1;this.calcValue=function(){return""};this.update=function(a){if(this.initialValue==null)this.initialValue=this.getProperty().value;if(this.duration>this.maxDuration)if(this.attribute("repeatCount").value=="indefinite")this.duration=0;else return this.attribute("fill").valueOrDefault("remove")=="remove"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin<this.duration)a=this.calcValue(),this.attribute("type").hasValue()&& -(a=this.attribute("type").value+"("+a+")"),this.getProperty().value=a,a=!0;return a};this.progress=function(){return(this.duration-this.begin)/(this.maxDuration-this.begin)}};a.Element.AnimateBase.prototype=new a.Element.ElementBase;a.Element.animate=function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=this.attribute("from").numValue(),b=this.attribute("to").numValue();return a+(b-a)*this.progress()}};a.Element.animate.prototype=new a.Element.AnimateBase;a.Element.animateColor= -function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=new RGBColor(this.attribute("from").value),b=new RGBColor(this.attribute("to").value);if(a.ok&&b.ok){var c=a.r+(b.r-a.r)*this.progress(),e=a.g+(b.g-a.g)*this.progress(),a=a.b+(b.b-a.b)*this.progress();return"rgb("+parseInt(c,10)+","+parseInt(e,10)+","+parseInt(a,10)+")"}return this.attribute("from").value}};a.Element.animateColor.prototype=new a.Element.AnimateBase;a.Element.animateTransform=function(c){this.base= -a.Element.animate;this.base(c)};a.Element.animateTransform.prototype=new a.Element.animate;a.Element.font=function(c){this.base=a.Element.ElementBase;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.isArabic=this.isRTL=!1;this.missingGlyph=this.fontFace=null;this.glyphs=[];for(c=0;c<this.children.length;c++){var d=this.children[c];if(d.type=="font-face")this.fontFace=d,d.style("font-family").hasValue()&&(a.Definitions[d.style("font-family").value]=this);else if(d.type=="missing-glyph")this.missingGlyph= -d;else if(d.type=="glyph")d.arabicForm!=""?(this.isArabic=this.isRTL=!0,typeof this.glyphs[d.unicode]=="undefined"&&(this.glyphs[d.unicode]=[]),this.glyphs[d.unicode][d.arabicForm]=d):this.glyphs[d.unicode]=d}};a.Element.font.prototype=new a.Element.ElementBase;a.Element.fontface=function(c){this.base=a.Element.ElementBase;this.base(c);this.ascent=this.attribute("ascent").value;this.descent=this.attribute("descent").value;this.unitsPerEm=this.attribute("units-per-em").numValue()};a.Element.fontface.prototype= -new a.Element.ElementBase;a.Element.missingglyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=0};a.Element.missingglyph.prototype=new a.Element.path;a.Element.glyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=this.attribute("horiz-adv-x").numValue();this.unicode=this.attribute("unicode").value;this.arabicForm=this.attribute("arabic-form").value};a.Element.glyph.prototype=new a.Element.path;a.Element.text=function(c){this.base=a.Element.RenderedElementBase; -this.base(c);if(c!=null){this.children=[];for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1?this.addChild(b,!0):b.nodeType==3&&this.addChild(new a.Element.tspan(b),!1)}}this.baseSetContext=this.setContext;this.setContext=function(b){this.baseSetContext(b);if(this.style("dominant-baseline").hasValue())b.textBaseline=this.style("dominant-baseline").value;if(this.style("alignment-baseline").hasValue())b.textBaseline=this.style("alignment-baseline").value};this.renderChildren= -function(b){for(var a=this.style("text-anchor").valueOrDefault("start"),c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),j=0;j<this.children.length;j++){var h=this.children[j];h.attribute("x").hasValue()?h.x=h.attribute("x").Length.toPixels("x"):(h.attribute("dx").hasValue()&&(c+=h.attribute("dx").Length.toPixels("x")),h.x=c);c=h.measureText(b);if(a!="start"&&(j==0||h.attribute("x").hasValue())){for(var l=c,o=j+1;o<this.children.length;o++){var n=this.children[o]; -if(n.attribute("x").hasValue())break;l+=n.measureText(b)}h.x-=a=="end"?l:l/2}c=h.x+c;h.attribute("y").hasValue()?h.y=h.attribute("y").Length.toPixels("y"):(h.attribute("dy").hasValue()&&(d+=h.attribute("dy").Length.toPixels("y")),h.y=d);d=h.y;h.render(b)}}};a.Element.text.prototype=new a.Element.RenderedElementBase;a.Element.TextElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getGlyph=function(a,b,c){var e=b[c],f=null;if(a.isArabic){var g="isolated";if((c==0||b[c- -1]==" ")&&c<b.length-2&&b[c+1]!=" ")g="terminal";c>0&&b[c-1]!=" "&&c<b.length-2&&b[c+1]!=" "&&(g="medial");if(c>0&&b[c-1]!=" "&&(c==b.length-1||b[c+1]==" "))g="initial";typeof a.glyphs[e]!="undefined"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type=="glyph"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var k=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), -e=this.parent.style("font-style").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split("").reverse().join(""));for(var g=a.ToNumberArray(this.parent.attribute("dx").value),j=0;j<f.length;j++){var h=this.getGlyph(b,f,j),l=k/b.fontFace.unitsPerEm;c.translate(this.x,this.y);c.scale(l,-l);var o=c.lineWidth;c.lineWidth=c.lineWidth*b.fontFace.unitsPerEm/k;e=="italic"&&c.transform(1,0,0.4,1,0,0);h.render(c);e=="italic"&&c.transform(1,0,-0.4,1,0,0);c.lineWidth=o;c.scale(1/ -l,-1/l);c.translate(-this.x,-this.y);this.x+=k*(h.horizAdvX||b.horizAdvX)/b.fontFace.unitsPerEm;typeof g[j]!="undefined"&&!isNaN(g[j])&&(this.x+=g[j])}}else c.strokeStyle!=""&&c.strokeText(a.compressSpaces(this.getText()),this.x,this.y),c.fillStyle!=""&&c.fillText(a.compressSpaces(this.getText()),this.x,this.y)};this.getText=function(){};this.measureText=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var c=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), -k=0,e=this.getText();b.isRTL&&(e=e.split("").reverse().join(""));for(var f=a.ToNumberArray(this.parent.attribute("dx").value),g=0;g<e.length;g++){var j=this.getGlyph(b,e,g);k+=(j.horizAdvX||b.horizAdvX)*c/b.fontFace.unitsPerEm;typeof f[g]!="undefined"&&!isNaN(f[g])&&(k+=f[g])}return k}b=a.compressSpaces(this.getText());if(!c.measureText)return b.length*10;c.save();this.setContext(c);b=c.measureText(b).width;c.restore();return b}};a.Element.TextElementBase.prototype=new a.Element.RenderedElementBase; -a.Element.tspan=function(c){this.base=a.Element.TextElementBase;this.base(c);this.text=c.nodeType==3?c.nodeValue:c.childNodes.length>0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase; -a.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d<c.childNodes.length;d++)if(c.childNodes[d].nodeType!=3)this.hasText=!1;this.text=this.hasText?c.childNodes[0].nodeValue:"";this.getText=function(){return this.text};this.baseRenderChildren=this.renderChildren;this.renderChildren=function(b){if(this.hasText){this.baseRenderChildren(b);var c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);a.Mouse.checkBoundingBox(this,new a.BoundingBox(this.x, -this.y-c.Length.toPixels("y"),this.x+this.measureText(b),this.y))}else c=new a.Element.g,c.children=this.children,c.parent=this,c.render(b)};this.onclick=function(){window.open(this.attribute("xlink:href").value)};this.onmousemove=function(){a.ctx.canvas.style.cursor="pointer"}};a.Element.a.prototype=new a.Element.TextElementBase;a.Element.image=function(c){this.base=a.Element.RenderedElementBase;this.base(c);a.Images.push(this);this.img=document.createElement("img");this.loaded=!1;var d=this;this.img.onload= -function(){d.loaded=!0};this.img.src=this.attribute("xlink:href").value;this.renderChildren=function(b){var c=this.attribute("x").Length.toPixels("x"),d=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y");f==0||g==0||(b.save(),b.translate(c,d),a.AspectRatio(b,this.attribute("preserveAspectRatio").value,f,this.img.width,g,this.img.height,0,0),b.drawImage(this.img,0,0),b.restore())}};a.Element.image.prototype=new a.Element.RenderedElementBase; -a.Element.g=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getBoundingBox=function(){for(var c=new a.BoundingBox,b=0;b<this.children.length;b++)c.addBoundingBox(this.children[b].getBoundingBox());return c}};a.Element.g.prototype=new a.Element.RenderedElementBase;a.Element.symbol=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(c){this.baseSetContext(c);if(this.attribute("viewBox").hasValue()){var b= -a.ToNumberArray(this.attribute("viewBox").value),k=b[0],e=b[1];width=b[2];height=b[3];a.AspectRatio(c,this.attribute("preserveAspectRatio").value,this.attribute("width").Length.toPixels("x"),width,this.attribute("height").Length.toPixels("y"),height,k,e);a.ViewPort.SetCurrent(b[2],b[3])}}};a.Element.symbol.prototype=new a.Element.RenderedElementBase;a.Element.style=function(c){this.base=a.Element.ElementBase;this.base(c);for(var c=c.childNodes[0].nodeValue+(c.childNodes.length>1?c.childNodes[1].nodeValue: -""),c=c.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,""),c=a.compressSpaces(c),c=c.split("}"),d=0;d<c.length;d++)if(a.trim(c[d])!="")for(var b=c[d].split("{"),k=b[0].split(","),b=b[1].split(";"),e=0;e<k.length;e++){var f=a.trim(k[e]);if(f!=""){for(var g={},j=0;j<b.length;j++){var h=b[j].indexOf(":"),l=b[j].substr(0,h),h=b[j].substr(h+1,b[j].length-h);l!=null&&h!=null&&(g[a.trim(l)]=new a.Property(a.trim(l),a.trim(h)))}a.Styles[f]=g;if(f=="@font-face"){f=g["font-family"].value.replace(/"/g, -"");g=g.src.value.split(",");for(j=0;j<g.length;j++)if(g[j].indexOf('format("svg")')>0){l=g[j].indexOf("url");h=g[j].indexOf(")",l);l=g[j].substr(l+5,h-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName("font");for(h=0;h<l.length;h++){var o=a.CreateElement(l[h]);a.Definitions[f]=o}}}}}};a.Element.style.prototype=new a.Element.ElementBase;a.Element.use=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(a){this.baseSetContext(a); -this.attribute("x").hasValue()&&a.translate(this.attribute("x").Length.toPixels("x"),0);this.attribute("y").hasValue()&&a.translate(0,this.attribute("y").Length.toPixels("y"))};this.getDefinition=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(this.attribute("width").hasValue())a.attribute("width",!0).value=this.attribute("width").value;if(this.attribute("height").hasValue())a.attribute("height",!0).value=this.attribute("height").value;return a};this.path=function(a){var b= -this.getDefinition();b!=null&&b.path(a)};this.renderChildren=function(a){var b=this.getDefinition();b!=null&&b.render(a)}};a.Element.use.prototype=new a.Element.RenderedElementBase;a.Element.mask=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=this.attribute("x").Length.toPixels("x"),e=this.attribute("y").Length.toPixels("y"),f=this.attribute("width").Length.toPixels("x"),g=this.attribute("height").Length.toPixels("y"),j=b.attribute("mask").value;b.attribute("mask").value= -"";var h=document.createElement("canvas");h.width=c+f;h.height=e+g;var l=h.getContext("2d");this.renderChildren(l);var o=document.createElement("canvas");o.width=c+f;o.height=e+g;var n=o.getContext("2d");b.render(n);n.globalCompositeOperation="destination-in";n.fillStyle=l.createPattern(h,"no-repeat");n.fillRect(0,0,c+f,e+g);a.fillStyle=n.createPattern(o,"no-repeat");a.fillRect(0,0,c+f,e+g);b.attribute("mask").value=j};this.render=function(){}};a.Element.mask.prototype=new a.Element.ElementBase;a.Element.clipPath= -function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a){for(var b=0;b<this.children.length;b++)this.children[b].path&&(this.children[b].path(a),a.clip())};this.render=function(){}};a.Element.clipPath.prototype=new a.Element.ElementBase;a.Element.filter=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=b.getBoundingBox(),e=this.attribute("x").Length.toPixels("x"),f=this.attribute("y").Length.toPixels("y");if(e==0||f==0)e=c.x1,f=c.y1;var g= -this.attribute("width").Length.toPixels("x"),j=this.attribute("height").Length.toPixels("y");if(g==0||j==0)g=c.width(),j=c.height();c=b.style("filter").value;b.style("filter").value="";var h=0.2*g,l=0.2*j,o=document.createElement("canvas");o.width=g+2*h;o.height=j+2*l;var n=o.getContext("2d");n.translate(-e+h,-f+l);b.render(n);for(var q=0;q<this.children.length;q++)this.children[q].apply(n,0,0,g+2*h,j+2*l);a.drawImage(o,0,0,g+2*h,j+2*l,e-h,f-l,g+2*h,j+2*l);b.style("filter",!0).value=c};this.render= -function(){}};a.Element.filter.prototype=new a.Element.ElementBase;a.Element.feGaussianBlur=function(c){function d(a,c,d,f,g){for(var j=0;j<g;j++)for(var h=0;h<f;h++)for(var l=a[j*f*4+h*4+3]/255,o=0;o<4;o++){for(var n=d[0]*(l==0?255:a[j*f*4+h*4+o])*(l==0||o==3?1:l),q=1;q<d.length;q++){var p=Math.max(h-q,0),m=a[j*f*4+p*4+3]/255,p=Math.min(h+q,f-1),p=a[j*f*4+p*4+3]/255,s=d[q],r;m==0?r=255:(r=Math.max(h-q,0),r=a[j*f*4+r*4+o]);m=r*(m==0||o==3?1:m);p==0?r=255:(r=Math.min(h+q,f-1),r=a[j*f*4+r*4+o]);n+= -s*(m+r*(p==0||o==3?1:p))}c[h*g*4+j*4+o]=n}}this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,c,e,f,g){var e=this.attribute("stdDeviation").numValue(),c=a.getImageData(0,0,f,g),e=Math.max(e,0.01),j=Math.ceil(e*4)+1;mask=[];for(var h=0;h<j;h++)mask[h]=Math.exp(-0.5*(h/e)*(h/e));e=mask;j=0;for(h=1;h<e.length;h++)j+=Math.abs(e[h]);j=2*j+Math.abs(e[0]);for(h=0;h<e.length;h++)e[h]/=j;tmp=[];d(c.data,tmp,e,f,g);d(tmp,c.data,e,g,f);a.clearRect(0,0,f,g);a.putImageData(c,0,0)}};a.Element.filter.prototype= -new a.Element.feGaussianBlur;a.Element.title=function(){};a.Element.title.prototype=new a.Element.ElementBase;a.Element.desc=function(){};a.Element.desc.prototype=new a.Element.ElementBase;a.Element.MISSING=function(a){console.log("ERROR: Element '"+a.nodeName+"' not yet implemented.")};a.Element.MISSING.prototype=new a.Element.ElementBase;a.CreateElement=function(c){var d=c.nodeName.replace(/^[^:]+:/,""),d=d.replace(/\-/g,""),b=null,b=typeof a.Element[d]!="undefined"?new a.Element[d](c):new a.Element.MISSING(c); -b.type=c.nodeName;return b};a.load=function(c,d){a.loadXml(c,a.ajax(d))};a.loadXml=function(c,d){a.loadXmlDoc(c,a.parseXml(d))};a.loadXmlDoc=function(c,d){a.init(c);var b=function(a){for(var b=c.canvas;b;)a.x-=b.offsetLeft,a.y-=b.offsetTop,b=b.offsetParent;window.scrollX&&(a.x+=window.scrollX);window.scrollY&&(a.y+=window.scrollY);return a};if(a.opts.ignoreMouse!=!0)c.canvas.onclick=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onclick(c.x,c.y)}, -c.canvas.onmousemove=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onmousemove(c.x,c.y)};var k=a.CreateElement(d.documentElement),e=k.root=!0,f=function(){a.ViewPort.Clear();c.canvas.parentNode&&a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth,c.canvas.parentNode.clientHeight);if(a.opts.ignoreDimensions!=!0){if(k.style("width").hasValue())c.canvas.width=k.style("width").Length.toPixels("x"),c.canvas.style.width=c.canvas.width+"px";if(k.style("height").hasValue())c.canvas.height= -k.style("height").Length.toPixels("y"),c.canvas.style.height=c.canvas.height+"px"}var b=c.canvas.clientWidth||c.canvas.width,d=c.canvas.clientHeight||c.canvas.height;a.ViewPort.SetCurrent(b,d);if(a.opts!=null&&a.opts.offsetX!=null)k.attribute("x",!0).value=a.opts.offsetX;if(a.opts!=null&&a.opts.offsetY!=null)k.attribute("y",!0).value=a.opts.offsetY;if(a.opts!=null&&a.opts.scaleWidth!=null&&a.opts.scaleHeight!=null){var f=1,g=1;k.attribute("width").hasValue()&&(f=k.attribute("width").Length.toPixels("x")/ -a.opts.scaleWidth);k.attribute("height").hasValue()&&(g=k.attribute("height").Length.toPixels("y")/a.opts.scaleHeight);k.attribute("width",!0).value=a.opts.scaleWidth;k.attribute("height",!0).value=a.opts.scaleHeight;k.attribute("viewBox",!0).value="0 0 "+b*f+" "+d*g;k.attribute("preserveAspectRatio",!0).value="none"}a.opts.ignoreClear!=!0&&c.clearRect(0,0,b,d);k.render(c);e&&(e=!1,a.opts!=null&&typeof a.opts.renderCallback=="function"&&a.opts.renderCallback())},g=!0;a.ImagesLoaded()&&(g=!1,f()); -a.intervalID=setInterval(function(){var b=!1;g&&a.ImagesLoaded()&&(g=!1,b=!0);a.opts.ignoreMouse!=!0&&(b|=a.Mouse.hasEvents());if(a.opts.ignoreAnimation!=!0)for(var c=0;c<a.Animations.length;c++)b|=a.Animations[c].update(1E3/a.FRAMERATE);a.opts!=null&&typeof a.opts.forceRedraw=="function"&&a.opts.forceRedraw()==!0&&(b=!0);b&&(f(),a.Mouse.runEvents())},1E3/a.FRAMERATE)};a.stop=function(){a.intervalID&&clearInterval(a.intervalID)};a.Mouse=new function(){this.events=[];this.hasEvents=function(){return this.events.length!= -0};this.onclick=function(a,d){this.events.push({type:"onclick",x:a,y:d,run:function(a){if(a.onclick)a.onclick()}})};this.onmousemove=function(a,d){this.events.push({type:"onmousemove",x:a,y:d,run:function(a){if(a.onmousemove)a.onmousemove()}})};this.eventElements=[];this.checkPath=function(a,d){for(var b=0;b<this.events.length;b++){var k=this.events[b];d.isPointInPath&&d.isPointInPath(k.x,k.y)&&(this.eventElements[b]=a)}};this.checkBoundingBox=function(a,d){for(var b=0;b<this.events.length;b++){var k= -this.events[b];d.isPointInBox(k.x,k.y)&&(this.eventElements[b]=a)}};this.runEvents=function(){a.ctx.canvas.style.cursor="";for(var c=0;c<this.events.length;c++)for(var d=this.events[c],b=this.eventElements[c];b;)d.run(b),b=b.parent;this.events=[];this.eventElements=[]}};return a}this.canvg=function(a,c,d){if(a==null&&c==null&&d==null)for(var c=document.getElementsByTagName("svg"),b=0;b<c.length;b++){a=c[b];d=document.createElement("canvas");d.width=a.clientWidth;d.height=a.clientHeight;a.parentNode.insertBefore(d, -a);a.parentNode.removeChild(a);var k=document.createElement("div");k.appendChild(a);canvg(d,k.innerHTML)}else d=d||{},typeof a=="string"&&(a=document.getElementById(a)),a.svg==null?(b=m(),a.svg=b):(b=a.svg,b.stop()),b.opts=d,a=a.getContext("2d"),typeof c.documentElement!="undefined"?b.loadXmlDoc(a,c):c.substr(0,1)=="<"?b.loadXml(a,c):b.load(a,c)}})(); -if(CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg=function(m,a,c,d,b){canvg(this.canvas,m,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:a,offsetY:c,scaleWidth:d,scaleHeight:b})}; -(function(m){var a=m.css,c=m.CanVGRenderer,d=m.SVGRenderer,b=m.extend,k=m.merge,e=m.addEvent,f=m.createElement,g=m.discardElement;b(c.prototype,d.prototype);b(c.prototype,{create:function(a,b,c,d){this.setContainer(b,c,d);this.configure(a)},setContainer:function(a,b,c){var d=a.style,e=a.parentNode,g=d.left,d=d.top,k=a.offsetWidth,m=a.offsetHeight,s={visibility:"hidden",position:"absolute"};this.init.apply(this,[a,b,c]);this.canvas=f("canvas",{width:k,height:m},{position:"relative",left:g,top:d},a); -this.ttLine=f("div",null,s,e);this.ttDiv=f("div",null,s,e);this.ttTimer=void 0;this.hiddenSvg=a=f("div",{width:k,height:m},{visibility:"hidden",left:g,top:d},e);a.appendChild(this.box)},configure:function(b){var c=this,d=b.options.tooltip,f=d.borderWidth,g=c.ttDiv,m=d.style,p=c.ttLine,t=parseInt(m.padding,10),m=k(m,{padding:t+"px","background-color":d.backgroundColor,"border-style":"solid","border-width":f+"px","border-radius":d.borderRadius+"px"});d.shadow&&(m=k(m,{"box-shadow":"1px 1px 3px gray", -"-webkit-box-shadow":"1px 1px 3px gray"}));a(g,m);a(p,{"border-left":"1px solid darkgray"});e(b,"tooltipRefresh",function(d){var e=b.container,f=e.offsetLeft,e=e.offsetTop,k;g.innerHTML=d.text;k=b.tooltip.getPosition(g.offsetWidth,g.offsetHeight,{plotX:d.x,plotY:d.y});a(g,{visibility:"visible",left:k.x+"px",top:k.y+"px","border-color":d.borderColor});a(p,{visibility:"visible",left:f+d.x+"px",top:e+b.plotTop+"px",height:b.plotHeight+"px"});c.ttTimer!==void 0&&clearTimeout(c.ttTimer);c.ttTimer=setTimeout(function(){a(g, -{visibility:"hidden"});a(p,{visibility:"hidden"})},3E3)})},destroy:function(){g(this.canvas);this.ttTimer!==void 0&&clearTimeout(this.ttTimer);g(this.ttLine);g(this.ttDiv);g(this.hiddenSvg);return d.prototype.destroy.apply(this)},color:function(a,b,c){a&&a.linearGradient&&(a=a.stops[a.stops.length-1][1]);return d.prototype.color.call(this,a,b,c)},draw:function(){window.canvg(this.canvas,this.hiddenSvg.innerHTML)}})})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/canvas-tools.src.js b/pykeg/web/static/highcharts/js/modules/canvas-tools.src.js deleted file mode 100644 index 7234681dc..000000000 --- a/pykeg/web/static/highcharts/js/modules/canvas-tools.src.js +++ /dev/null @@ -1,3113 +0,0 @@ -/** - * @license A class to parse color values - * @author Stoyan Stefanov <sstoo@gmail.com> - * @link http://www.phpied.com/rgb-color-parser-in-javascript/ - * Use it if you like it - * - */ -function RGBColor(color_string) -{ - this.ok = false; - - // strip any leading # - if (color_string.charAt(0) == '#') { // remove # if any - color_string = color_string.substr(1,6); - } - - color_string = color_string.replace(/ /g,''); - color_string = color_string.toLowerCase(); - - // before getting into regexps, try simple matches - // and overwrite the input - var simple_colors = { - aliceblue: 'f0f8ff', - antiquewhite: 'faebd7', - aqua: '00ffff', - aquamarine: '7fffd4', - azure: 'f0ffff', - beige: 'f5f5dc', - bisque: 'ffe4c4', - black: '000000', - blanchedalmond: 'ffebcd', - blue: '0000ff', - blueviolet: '8a2be2', - brown: 'a52a2a', - burlywood: 'deb887', - cadetblue: '5f9ea0', - chartreuse: '7fff00', - chocolate: 'd2691e', - coral: 'ff7f50', - cornflowerblue: '6495ed', - cornsilk: 'fff8dc', - crimson: 'dc143c', - cyan: '00ffff', - darkblue: '00008b', - darkcyan: '008b8b', - darkgoldenrod: 'b8860b', - darkgray: 'a9a9a9', - darkgreen: '006400', - darkkhaki: 'bdb76b', - darkmagenta: '8b008b', - darkolivegreen: '556b2f', - darkorange: 'ff8c00', - darkorchid: '9932cc', - darkred: '8b0000', - darksalmon: 'e9967a', - darkseagreen: '8fbc8f', - darkslateblue: '483d8b', - darkslategray: '2f4f4f', - darkturquoise: '00ced1', - darkviolet: '9400d3', - deeppink: 'ff1493', - deepskyblue: '00bfff', - dimgray: '696969', - dodgerblue: '1e90ff', - feldspar: 'd19275', - firebrick: 'b22222', - floralwhite: 'fffaf0', - forestgreen: '228b22', - fuchsia: 'ff00ff', - gainsboro: 'dcdcdc', - ghostwhite: 'f8f8ff', - gold: 'ffd700', - goldenrod: 'daa520', - gray: '808080', - green: '008000', - greenyellow: 'adff2f', - honeydew: 'f0fff0', - hotpink: 'ff69b4', - indianred : 'cd5c5c', - indigo : '4b0082', - ivory: 'fffff0', - khaki: 'f0e68c', - lavender: 'e6e6fa', - lavenderblush: 'fff0f5', - lawngreen: '7cfc00', - lemonchiffon: 'fffacd', - lightblue: 'add8e6', - lightcoral: 'f08080', - lightcyan: 'e0ffff', - lightgoldenrodyellow: 'fafad2', - lightgrey: 'd3d3d3', - lightgreen: '90ee90', - lightpink: 'ffb6c1', - lightsalmon: 'ffa07a', - lightseagreen: '20b2aa', - lightskyblue: '87cefa', - lightslateblue: '8470ff', - lightslategray: '778899', - lightsteelblue: 'b0c4de', - lightyellow: 'ffffe0', - lime: '00ff00', - limegreen: '32cd32', - linen: 'faf0e6', - magenta: 'ff00ff', - maroon: '800000', - mediumaquamarine: '66cdaa', - mediumblue: '0000cd', - mediumorchid: 'ba55d3', - mediumpurple: '9370d8', - mediumseagreen: '3cb371', - mediumslateblue: '7b68ee', - mediumspringgreen: '00fa9a', - mediumturquoise: '48d1cc', - mediumvioletred: 'c71585', - midnightblue: '191970', - mintcream: 'f5fffa', - mistyrose: 'ffe4e1', - moccasin: 'ffe4b5', - navajowhite: 'ffdead', - navy: '000080', - oldlace: 'fdf5e6', - olive: '808000', - olivedrab: '6b8e23', - orange: 'ffa500', - orangered: 'ff4500', - orchid: 'da70d6', - palegoldenrod: 'eee8aa', - palegreen: '98fb98', - paleturquoise: 'afeeee', - palevioletred: 'd87093', - papayawhip: 'ffefd5', - peachpuff: 'ffdab9', - peru: 'cd853f', - pink: 'ffc0cb', - plum: 'dda0dd', - powderblue: 'b0e0e6', - purple: '800080', - red: 'ff0000', - rosybrown: 'bc8f8f', - royalblue: '4169e1', - saddlebrown: '8b4513', - salmon: 'fa8072', - sandybrown: 'f4a460', - seagreen: '2e8b57', - seashell: 'fff5ee', - sienna: 'a0522d', - silver: 'c0c0c0', - skyblue: '87ceeb', - slateblue: '6a5acd', - slategray: '708090', - snow: 'fffafa', - springgreen: '00ff7f', - steelblue: '4682b4', - tan: 'd2b48c', - teal: '008080', - thistle: 'd8bfd8', - tomato: 'ff6347', - turquoise: '40e0d0', - violet: 'ee82ee', - violetred: 'd02090', - wheat: 'f5deb3', - white: 'ffffff', - whitesmoke: 'f5f5f5', - yellow: 'ffff00', - yellowgreen: '9acd32' - }; - for (var key in simple_colors) { - if (color_string == key) { - color_string = simple_colors[key]; - } - } - // emd of simple type-in colors - - // array of color definition objects - var color_defs = [ - { - re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, - example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'], - process: function (bits){ - return [ - parseInt(bits[1]), - parseInt(bits[2]), - parseInt(bits[3]) - ]; - } - }, - { - re: /^(\w{2})(\w{2})(\w{2})$/, - example: ['#00ff00', '336699'], - process: function (bits){ - return [ - parseInt(bits[1], 16), - parseInt(bits[2], 16), - parseInt(bits[3], 16) - ]; - } - }, - { - re: /^(\w{1})(\w{1})(\w{1})$/, - example: ['#fb0', 'f0f'], - process: function (bits){ - return [ - parseInt(bits[1] + bits[1], 16), - parseInt(bits[2] + bits[2], 16), - parseInt(bits[3] + bits[3], 16) - ]; - } - } - ]; - - // search through the definitions to find a match - for (var i = 0; i < color_defs.length; i++) { - var re = color_defs[i].re; - var processor = color_defs[i].process; - var bits = re.exec(color_string); - if (bits) { - channels = processor(bits); - this.r = channels[0]; - this.g = channels[1]; - this.b = channels[2]; - this.ok = true; - } - - } - - // validate/cleanup values - this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r); - this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g); - this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b); - - // some getters - this.toRGB = function () { - return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; - } - this.toHex = function () { - var r = this.r.toString(16); - var g = this.g.toString(16); - var b = this.b.toString(16); - if (r.length == 1) r = '0' + r; - if (g.length == 1) g = '0' + g; - if (b.length == 1) b = '0' + b; - return '#' + r + g + b; - } - - // help - this.getHelpXML = function () { - - var examples = new Array(); - // add regexps - for (var i = 0; i < color_defs.length; i++) { - var example = color_defs[i].example; - for (var j = 0; j < example.length; j++) { - examples[examples.length] = example[j]; - } - } - // add type-in colors - for (var sc in simple_colors) { - examples[examples.length] = sc; - } - - var xml = document.createElement('ul'); - xml.setAttribute('id', 'rgbcolor-examples'); - for (var i = 0; i < examples.length; i++) { - try { - var list_item = document.createElement('li'); - var list_color = new RGBColor(examples[i]); - var example_div = document.createElement('div'); - example_div.style.cssText = - 'margin: 3px; ' - + 'border: 1px solid black; ' - + 'background:' + list_color.toHex() + '; ' - + 'color:' + list_color.toHex() - ; - example_div.appendChild(document.createTextNode('test')); - var list_item_value = document.createTextNode( - ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex() - ); - list_item.appendChild(example_div); - list_item.appendChild(list_item_value); - xml.appendChild(list_item); - - } catch(e){} - } - return xml; - - } - -} - -/** - * @license canvg.js - Javascript SVG parser and renderer on Canvas - * MIT Licensed - * Gabe Lerner (gabelerner@gmail.com) - * http://code.google.com/p/canvg/ - * - * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - * - */ -if(!window.console) { - window.console = {}; - window.console.log = function(str) {}; - window.console.dir = function(str) {}; -} - -if(!Array.prototype.indexOf){ - Array.prototype.indexOf = function(obj){ - for(var i=0; i<this.length; i++){ - if(this[i]==obj){ - return i; - } - } - return -1; - } -} - -(function(){ - // canvg(target, s) - // empty parameters: replace all 'svg' elements on page with 'canvas' elements - // target: canvas element or the id of a canvas element - // s: svg string, url to svg file, or xml document - // opts: optional hash of options - // ignoreMouse: true => ignore mouse events - // ignoreAnimation: true => ignore animations - // ignoreDimensions: true => does not try to resize canvas - // ignoreClear: true => does not clear canvas - // offsetX: int => draws at a x offset - // offsetY: int => draws at a y offset - // scaleWidth: int => scales horizontally to width - // scaleHeight: int => scales vertically to height - // renderCallback: function => will call the function after the first render is completed - // forceRedraw: function => will call the function on every frame, if it returns true, will redraw - this.canvg = function (target, s, opts) { - // no parameters - if (target == null && s == null && opts == null) { - var svgTags = document.getElementsByTagName('svg'); - for (var i=0; i<svgTags.length; i++) { - var svgTag = svgTags[i]; - var c = document.createElement('canvas'); - c.width = svgTag.clientWidth; - c.height = svgTag.clientHeight; - svgTag.parentNode.insertBefore(c, svgTag); - svgTag.parentNode.removeChild(svgTag); - var div = document.createElement('div'); - div.appendChild(svgTag); - canvg(c, div.innerHTML); - } - return; - } - opts = opts || {}; - - if (typeof target == 'string') { - target = document.getElementById(target); - } - - // reuse class per canvas - var svg; - if (target.svg == null) { - svg = build(); - target.svg = svg; - } - else { - svg = target.svg; - svg.stop(); - } - svg.opts = opts; - - var ctx = target.getContext('2d'); - if (typeof(s.documentElement) != 'undefined') { - // load from xml doc - svg.loadXmlDoc(ctx, s); - } - else if (s.substr(0,1) == '<') { - // load from xml string - svg.loadXml(ctx, s); - } - else { - // load from url - svg.load(ctx, s); - } - } - - function build() { - var svg = { }; - - svg.FRAMERATE = 30; - svg.MAX_VIRTUAL_PIXELS = 30000; - - // globals - svg.init = function(ctx) { - svg.Definitions = {}; - svg.Styles = {}; - svg.Animations = []; - svg.Images = []; - svg.ctx = ctx; - svg.ViewPort = new (function () { - this.viewPorts = []; - this.Clear = function() { this.viewPorts = []; } - this.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); } - this.RemoveCurrent = function() { this.viewPorts.pop(); } - this.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; } - this.width = function() { return this.Current().width; } - this.height = function() { return this.Current().height; } - this.ComputeSize = function(d) { - if (d != null && typeof(d) == 'number') return d; - if (d == 'x') return this.width(); - if (d == 'y') return this.height(); - return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); - } - }); - } - svg.init(); - - // images loaded - svg.ImagesLoaded = function() { - for (var i=0; i<svg.Images.length; i++) { - if (!svg.Images[i].loaded) return false; - } - return true; - } - - // trim - svg.trim = function(s) { return s.replace(/^\s+|\s+$/g, ''); } - - // compress spaces - svg.compressSpaces = function(s) { return s.replace(/[\s\r\t\n]+/gm,' '); } - - // ajax - svg.ajax = function(url) { - var AJAX; - if(window.XMLHttpRequest){AJAX=new XMLHttpRequest();} - else{AJAX=new ActiveXObject('Microsoft.XMLHTTP');} - if(AJAX){ - AJAX.open('GET',url,false); - AJAX.send(null); - return AJAX.responseText; - } - return null; - } - - // parse xml - svg.parseXml = function(xml) { - if (window.DOMParser) - { - var parser = new DOMParser(); - return parser.parseFromString(xml, 'text/xml'); - } - else - { - xml = xml.replace(/<!DOCTYPE svg[^>]*>/, ''); - var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); - xmlDoc.async = 'false'; - xmlDoc.loadXML(xml); - return xmlDoc; - } - } - - svg.Property = function(name, value) { - this.name = name; - this.value = value; - - this.hasValue = function() { - return (this.value != null && this.value !== ''); - } - - // return the numerical value of the property - this.numValue = function() { - if (!this.hasValue()) return 0; - - var n = parseFloat(this.value); - if ((this.value + '').match(/%$/)) { - n = n / 100.0; - } - return n; - } - - this.valueOrDefault = function(def) { - if (this.hasValue()) return this.value; - return def; - } - - this.numValueOrDefault = function(def) { - if (this.hasValue()) return this.numValue(); - return def; - } - - /* EXTENSIONS */ - var that = this; - - // color extensions - this.Color = { - // augment the current color value with the opacity - addOpacity: function(opacity) { - var newValue = that.value; - if (opacity != null && opacity != '') { - var color = new RGBColor(that.value); - if (color.ok) { - newValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')'; - } - } - return new svg.Property(that.name, newValue); - } - } - - // definition extensions - this.Definition = { - // get the definition from the definitions table - getDefinition: function() { - var name = that.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2'); - return svg.Definitions[name]; - }, - - isUrl: function() { - return that.value.indexOf('url(') == 0 - }, - - getFillStyle: function(e) { - var def = this.getDefinition(); - - // gradient - if (def != null && def.createGradient) { - return def.createGradient(svg.ctx, e); - } - - // pattern - if (def != null && def.createPattern) { - return def.createPattern(svg.ctx, e); - } - - return null; - } - } - - // length extensions - this.Length = { - DPI: function(viewPort) { - return 96.0; // TODO: compute? - }, - - EM: function(viewPort) { - var em = 12; - - var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); - if (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort); - - return em; - }, - - // get the length as pixels - toPixels: function(viewPort) { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/em$/)) return that.numValue() * this.EM(viewPort); - if (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0; - if (s.match(/px$/)) return that.numValue(); - if (s.match(/pt$/)) return that.numValue() * 1.25; - if (s.match(/pc$/)) return that.numValue() * 15; - if (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54; - if (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4; - if (s.match(/in$/)) return that.numValue() * this.DPI(viewPort); - if (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort); - return that.numValue(); - } - } - - // time extensions - this.Time = { - // get the time as milliseconds - toMilliseconds: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/s$/)) return that.numValue() * 1000; - if (s.match(/ms$/)) return that.numValue(); - return that.numValue(); - } - } - - // angle extensions - this.Angle = { - // get the angle as radians - toRadians: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0); - if (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0); - if (s.match(/rad$/)) return that.numValue(); - return that.numValue() * (Math.PI / 180.0); - } - } - } - - // fonts - svg.Font = new (function() { - this.Styles = ['normal','italic','oblique','inherit']; - this.Variants = ['normal','small-caps','inherit']; - this.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit']; - - this.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { - var f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font); - return { - fontFamily: fontFamily || f.fontFamily, - fontSize: fontSize || f.fontSize, - fontStyle: fontStyle || f.fontStyle, - fontWeight: fontWeight || f.fontWeight, - fontVariant: fontVariant || f.fontVariant, - toString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } - } - } - - var that = this; - this.Parse = function(s) { - var f = {}; - var d = svg.trim(svg.compressSpaces(s || '')).split(' '); - var set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false } - var ff = ''; - for (var i=0; i<d.length; i++) { - if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; } - else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true; } - else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; } - else if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; } - else { if (d[i] != 'inherit') ff += d[i]; } - } if (ff != '') f.fontFamily = ff; - return f; - } - }); - - // points and paths - svg.ToNumberArray = function(s) { - var a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' '); - for (var i=0; i<a.length; i++) { - a[i] = parseFloat(a[i]); - } - return a; - } - svg.Point = function(x, y) { - this.x = x; - this.y = y; - - this.angleTo = function(p) { - return Math.atan2(p.y - this.y, p.x - this.x); - } - - this.applyTransform = function(v) { - var xp = this.x * v[0] + this.y * v[2] + v[4]; - var yp = this.x * v[1] + this.y * v[3] + v[5]; - this.x = xp; - this.y = yp; - } - } - svg.CreatePoint = function(s) { - var a = svg.ToNumberArray(s); - return new svg.Point(a[0], a[1]); - } - svg.CreatePath = function(s) { - var a = svg.ToNumberArray(s); - var path = []; - for (var i=0; i<a.length; i+=2) { - path.push(new svg.Point(a[i], a[i+1])); - } - return path; - } - - // bounding box - svg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want - this.x1 = Number.NaN; - this.y1 = Number.NaN; - this.x2 = Number.NaN; - this.y2 = Number.NaN; - - this.x = function() { return this.x1; } - this.y = function() { return this.y1; } - this.width = function() { return this.x2 - this.x1; } - this.height = function() { return this.y2 - this.y1; } - - this.addPoint = function(x, y) { - if (x != null) { - if (isNaN(this.x1) || isNaN(this.x2)) { - this.x1 = x; - this.x2 = x; - } - if (x < this.x1) this.x1 = x; - if (x > this.x2) this.x2 = x; - } - - if (y != null) { - if (isNaN(this.y1) || isNaN(this.y2)) { - this.y1 = y; - this.y2 = y; - } - if (y < this.y1) this.y1 = y; - if (y > this.y2) this.y2 = y; - } - } - this.addX = function(x) { this.addPoint(x, null); } - this.addY = function(y) { this.addPoint(null, y); } - - this.addBoundingBox = function(bb) { - this.addPoint(bb.x1, bb.y1); - this.addPoint(bb.x2, bb.y2); - } - - this.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) { - var cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0) - var cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0) - this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); - } - - this.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - var p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y]; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - - for (i=0; i<=1; i++) { - var f = function(t) { - return Math.pow(1-t, 3) * p0[i] - + 3 * Math.pow(1-t, 2) * t * p1[i] - + 3 * (1-t) * Math.pow(t, 2) * p2[i] - + Math.pow(t, 3) * p3[i]; - } - - var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - var c = 3 * p1[i] - 3 * p0[i]; - - if (a == 0) { - if (b == 0) continue; - var t = -c / b; - if (0 < t && t < 1) { - if (i == 0) this.addX(f(t)); - if (i == 1) this.addY(f(t)); - } - continue; - } - - var b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i == 0) this.addX(f(t1)); - if (i == 1) this.addY(f(t1)); - } - var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i == 0) this.addX(f(t2)); - if (i == 1) this.addY(f(t2)); - } - } - } - - this.isPointInBox = function(x, y) { - return (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2); - } - - this.addPoint(x1, y1); - this.addPoint(x2, y2); - } - - // transforms - svg.Transform = function(v) { - var that = this; - this.Type = {} - - // translate - this.Type.translate = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.translate(this.p.x || 0.0, this.p.y || 0.0); - } - this.applyToPoint = function(p) { - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - } - } - - // rotate - this.Type.rotate = function(s) { - var a = svg.ToNumberArray(s); - this.angle = new svg.Property('angle', a[0]); - this.cx = a[1] || 0; - this.cy = a[2] || 0; - this.apply = function(ctx) { - ctx.translate(this.cx, this.cy); - ctx.rotate(this.angle.Angle.toRadians()); - ctx.translate(-this.cx, -this.cy); - } - this.applyToPoint = function(p) { - var a = this.angle.Angle.toRadians(); - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - p.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]); - p.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]); - } - } - - this.Type.scale = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0); - } - this.applyToPoint = function(p) { - p.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]); - } - } - - this.Type.matrix = function(s) { - this.m = svg.ToNumberArray(s); - this.apply = function(ctx) { - ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); - } - this.applyToPoint = function(p) { - p.applyTransform(this.m); - } - } - - this.Type.SkewBase = function(s) { - this.base = that.Type.matrix; - this.base(s); - this.angle = new svg.Property('angle', s); - } - this.Type.SkewBase.prototype = new this.Type.matrix; - - this.Type.skewX = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0]; - } - this.Type.skewX.prototype = new this.Type.SkewBase; - - this.Type.skewY = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0]; - } - this.Type.skewY.prototype = new this.Type.SkewBase; - - this.transforms = []; - - this.apply = function(ctx) { - for (var i=0; i<this.transforms.length; i++) { - this.transforms[i].apply(ctx); - } - } - - this.applyToPoint = function(p) { - for (var i=0; i<this.transforms.length; i++) { - this.transforms[i].applyToPoint(p); - } - } - - var data = svg.trim(svg.compressSpaces(v)).split(/\s(?=[a-z])/); - for (var i=0; i<data.length; i++) { - var type = data[i].split('(')[0]; - var s = data[i].split('(')[1].replace(')',''); - var transform = new this.Type[type](s); - this.transforms.push(transform); - } - } - - // aspect ratio - svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) { - // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute - aspectRatio = svg.compressSpaces(aspectRatio); - aspectRatio = aspectRatio.replace(/^defer\s/,''); // ignore defer - var align = aspectRatio.split(' ')[0] || 'xMidYMid'; - var meetOrSlice = aspectRatio.split(' ')[1] || 'meet'; - - // calculate scale - var scaleX = width / desiredWidth; - var scaleY = height / desiredHeight; - var scaleMin = Math.min(scaleX, scaleY); - var scaleMax = Math.max(scaleX, scaleY); - if (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; } - if (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; } - - refX = new svg.Property('refX', refX); - refY = new svg.Property('refY', refY); - if (refX.hasValue() && refY.hasValue()) { - ctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y')); - } - else { - // align - if (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0); - if (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0); - if (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0); - if (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight); - } - - // scale - if (align == 'none') ctx.scale(scaleX, scaleY); - else if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin); - else if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax); - - // translate - ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY); - } - - // elements - svg.Element = {} - - svg.Element.ElementBase = function(node) { - this.attributes = {}; - this.styles = {}; - this.children = []; - - // get or create attribute - this.attribute = function(name, createIfNotExists) { - var a = this.attributes[name]; - if (a != null) return a; - - a = new svg.Property(name, ''); - if (createIfNotExists == true) this.attributes[name] = a; - return a; - } - - // get or create style, crawls up node tree - this.style = function(name, createIfNotExists) { - var s = this.styles[name]; - if (s != null) return s; - - var a = this.attribute(name); - if (a != null && a.hasValue()) { - return a; - } - - var p = this.parent; - if (p != null) { - var ps = p.style(name); - if (ps != null && ps.hasValue()) { - return ps; - } - } - - s = new svg.Property(name, ''); - if (createIfNotExists == true) this.styles[name] = s; - return s; - } - - // base render - this.render = function(ctx) { - // don't render display=none - if (this.style('display').value == 'none') return; - - // don't render visibility=hidden - if (this.attribute('visibility').value == 'hidden') return; - - ctx.save(); - this.setContext(ctx); - // mask - if (this.attribute('mask').hasValue()) { - var mask = this.attribute('mask').Definition.getDefinition(); - if (mask != null) mask.apply(ctx, this); - } - else if (this.style('filter').hasValue()) { - var filter = this.style('filter').Definition.getDefinition(); - if (filter != null) filter.apply(ctx, this); - } - else this.renderChildren(ctx); - this.clearContext(ctx); - ctx.restore(); - } - - // base set context - this.setContext = function(ctx) { - // OVERRIDE ME! - } - - // base clear context - this.clearContext = function(ctx) { - // OVERRIDE ME! - } - - // base render children - this.renderChildren = function(ctx) { - for (var i=0; i<this.children.length; i++) { - this.children[i].render(ctx); - } - } - - this.addChild = function(childNode, create) { - var child = childNode; - if (create) child = svg.CreateElement(childNode); - child.parent = this; - this.children.push(child); - } - - if (node != null && node.nodeType == 1) { //ELEMENT_NODE - // add children - for (var i=0; i<node.childNodes.length; i++) { - var childNode = node.childNodes[i]; - if (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE - } - - // add attributes - for (var i=0; i<node.attributes.length; i++) { - var attribute = node.attributes[i]; - this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue); - } - - // add tag styles - var styles = svg.Styles[node.nodeName]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - - // add class styles - if (this.attribute('class').hasValue()) { - var classes = svg.compressSpaces(this.attribute('class').value).split(' '); - for (var j=0; j<classes.length; j++) { - styles = svg.Styles['.'+classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - styles = svg.Styles[node.nodeName+'.'+classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - } - } - - // add inline styles - if (this.attribute('style').hasValue()) { - var styles = this.attribute('style').value.split(';'); - for (var i=0; i<styles.length; i++) { - if (svg.trim(styles[i]) != '') { - var style = styles[i].split(':'); - var name = svg.trim(style[0]); - var value = svg.trim(style[1]); - this.styles[name] = new svg.Property(name, value); - } - } - } - - // add id - if (this.attribute('id').hasValue()) { - if (svg.Definitions[this.attribute('id').value] == null) { - svg.Definitions[this.attribute('id').value] = this; - } - } - } - } - - svg.Element.RenderedElementBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.setContext = function(ctx) { - // fill - if (this.style('fill').Definition.isUrl()) { - var fs = this.style('fill').Definition.getFillStyle(this); - if (fs != null) ctx.fillStyle = fs; - } - else if (this.style('fill').hasValue()) { - var fillStyle = this.style('fill'); - if (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value); - ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value); - } - - // stroke - if (this.style('stroke').Definition.isUrl()) { - var fs = this.style('stroke').Definition.getFillStyle(this); - if (fs != null) ctx.strokeStyle = fs; - } - else if (this.style('stroke').hasValue()) { - var strokeStyle = this.style('stroke'); - if (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value); - ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value); - } - if (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels(); - if (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value; - if (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value; - if (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value; - - // font - if (typeof(ctx.font) != 'undefined') { - ctx.font = svg.Font.CreateFont( - this.style('font-style').value, - this.style('font-variant').value, - this.style('font-weight').value, - this.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', - this.style('font-family').value).toString(); - } - - // transform - if (this.attribute('transform').hasValue()) { - var transform = new svg.Transform(this.attribute('transform').value); - transform.apply(ctx); - } - - // clip - if (this.attribute('clip-path').hasValue()) { - var clip = this.attribute('clip-path').Definition.getDefinition(); - if (clip != null) clip.apply(ctx); - } - - // opacity - if (this.style('opacity').hasValue()) { - ctx.globalAlpha = this.style('opacity').numValue(); - } - } - } - svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase; - - svg.Element.PathElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.path = function(ctx) { - if (ctx != null) ctx.beginPath(); - return new svg.BoundingBox(); - } - - this.renderChildren = function(ctx) { - this.path(ctx); - svg.Mouse.checkPath(this, ctx); - if (ctx.fillStyle != '') ctx.fill(); - if (ctx.strokeStyle != '') ctx.stroke(); - - var markers = this.getMarkers(); - if (markers != null) { - if (this.style('marker-start').Definition.isUrl()) { - var marker = this.style('marker-start').Definition.getDefinition(); - marker.render(ctx, markers[0][0], markers[0][1]); - } - if (this.style('marker-mid').Definition.isUrl()) { - var marker = this.style('marker-mid').Definition.getDefinition(); - for (var i=1;i<markers.length-1;i++) { - marker.render(ctx, markers[i][0], markers[i][1]); - } - } - if (this.style('marker-end').Definition.isUrl()) { - var marker = this.style('marker-end').Definition.getDefinition(); - marker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]); - } - } - } - - this.getBoundingBox = function() { - return this.path(); - } - - this.getMarkers = function() { - return null; - } - } - svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase; - - // svg element - svg.Element.svg = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseClearContext = this.clearContext; - this.clearContext = function(ctx) { - this.baseClearContext(ctx); - svg.ViewPort.RemoveCurrent(); - } - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - // initial values - ctx.strokeStyle = 'rgba(0,0,0,0)'; - ctx.lineCap = 'butt'; - ctx.lineJoin = 'miter'; - ctx.miterLimit = 4; - - this.baseSetContext(ctx); - - // create new view port - if (this.attribute('x').hasValue() && this.attribute('y').hasValue()) { - ctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y')); - } - - var width = svg.ViewPort.width(); - var height = svg.ViewPort.height(); - if (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) { - width = this.attribute('width').Length.toPixels('x'); - height = this.attribute('height').Length.toPixels('y'); - - var x = 0; - var y = 0; - if (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) { - x = -this.attribute('refX').Length.toPixels('x'); - y = -this.attribute('refY').Length.toPixels('y'); - } - - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(width, y); - ctx.lineTo(width, height); - ctx.lineTo(x, height); - ctx.closePath(); - ctx.clip(); - } - svg.ViewPort.SetCurrent(width, height); - - // viewbox - if (this.attribute('viewBox').hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute('viewBox').value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - svg.ViewPort.width(), - width, - svg.ViewPort.height(), - height, - minX, - minY, - this.attribute('refX').value, - this.attribute('refY').value); - - svg.ViewPort.RemoveCurrent(); - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - } - } - svg.Element.svg.prototype = new svg.Element.RenderedElementBase; - - // rect element - svg.Element.rect = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - var rx = this.attribute('rx').Length.toPixels('x'); - var ry = this.attribute('ry').Length.toPixels('y'); - if (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx; - if (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry; - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(x + rx, y); - ctx.lineTo(x + width - rx, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + ry) - ctx.lineTo(x + width, y + height - ry); - ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height) - ctx.lineTo(x + rx, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - ry) - ctx.lineTo(x, y + ry); - ctx.quadraticCurveTo(x, y, x + rx, y) - ctx.closePath(); - } - - return new svg.BoundingBox(x, y, x + width, y + height); - } - } - svg.Element.rect.prototype = new svg.Element.PathElementBase; - - // circle element - svg.Element.circle = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var cx = this.attribute('cx').Length.toPixels('x'); - var cy = this.attribute('cy').Length.toPixels('y'); - var r = this.attribute('r').Length.toPixels(); - - if (ctx != null) { - ctx.beginPath(); - ctx.arc(cx, cy, r, 0, Math.PI * 2, true); - ctx.closePath(); - } - - return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r); - } - } - svg.Element.circle.prototype = new svg.Element.PathElementBase; - - // ellipse element - svg.Element.ellipse = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.path = function(ctx) { - var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); - var rx = this.attribute('rx').Length.toPixels('x'); - var ry = this.attribute('ry').Length.toPixels('y'); - var cx = this.attribute('cx').Length.toPixels('x'); - var cy = this.attribute('cy').Length.toPixels('y'); - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(cx, cy - ry); - ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy); - ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry); - ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy); - ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry); - ctx.closePath(); - } - - return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry); - } - } - svg.Element.ellipse.prototype = new svg.Element.PathElementBase; - - // line element - svg.Element.line = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.getPoints = function() { - return [ - new svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')), - new svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))]; - } - - this.path = function(ctx) { - var points = this.getPoints(); - - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(points[0].x, points[0].y); - ctx.lineTo(points[1].x, points[1].y); - } - - return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y); - } - - this.getMarkers = function() { - var points = this.getPoints(); - var a = points[0].angleTo(points[1]); - return [[points[0], a], [points[1], a]]; - } - } - svg.Element.line.prototype = new svg.Element.PathElementBase; - - // polyline element - svg.Element.polyline = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - this.points = svg.CreatePath(this.attribute('points').value); - this.path = function(ctx) { - var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y); - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(this.points[0].x, this.points[0].y); - } - for (var i=1; i<this.points.length; i++) { - bb.addPoint(this.points[i].x, this.points[i].y); - if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y); - } - return bb; - } - - this.getMarkers = function() { - var markers = []; - for (var i=0; i<this.points.length - 1; i++) { - markers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]); - } - markers.push([this.points[this.points.length-1], markers[markers.length-1][1]]); - return markers; - } - } - svg.Element.polyline.prototype = new svg.Element.PathElementBase; - - // polygon element - svg.Element.polygon = function(node) { - this.base = svg.Element.polyline; - this.base(node); - - this.basePath = this.path; - this.path = function(ctx) { - var bb = this.basePath(ctx); - if (ctx != null) { - ctx.lineTo(this.points[0].x, this.points[0].y); - ctx.closePath(); - } - return bb; - } - } - svg.Element.polygon.prototype = new svg.Element.polyline; - - // path element - svg.Element.path = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - - var d = this.attribute('d').value; - // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF - d = d.replace(/,/gm,' '); // get rid of all commas - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,'$1 $2'); // separate commands from points - d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points - d = d.replace(/([0-9])([+\-])/gm,'$1 $2'); // separate digits when no comma - d = d.replace(/(\.[0-9]*)(\.)/gm,'$1 $2'); // separate digits when no comma - d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax - d = svg.compressSpaces(d); // compress multiple spaces - d = svg.trim(d); - this.PathParser = new (function(d) { - this.tokens = d.split(' '); - - this.reset = function() { - this.i = -1; - this.command = ''; - this.previousCommand = ''; - this.start = new svg.Point(0, 0); - this.control = new svg.Point(0, 0); - this.current = new svg.Point(0, 0); - this.points = []; - this.angles = []; - } - - this.isEnd = function() { - return this.i >= this.tokens.length - 1; - } - - this.isCommandOrEnd = function() { - if (this.isEnd()) return true; - return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; - } - - this.isRelativeCommand = function() { - return this.command == this.command.toLowerCase(); - } - - this.getToken = function() { - this.i = this.i + 1; - return this.tokens[this.i]; - } - - this.getScalar = function() { - return parseFloat(this.getToken()); - } - - this.nextCommand = function() { - this.previousCommand = this.command; - this.command = this.getToken(); - } - - this.getPoint = function() { - var p = new svg.Point(this.getScalar(), this.getScalar()); - return this.makeAbsolute(p); - } - - this.getAsControlPoint = function() { - var p = this.getPoint(); - this.control = p; - return p; - } - - this.getAsCurrentPoint = function() { - var p = this.getPoint(); - this.current = p; - return p; - } - - this.getReflectedControlPoint = function() { - if (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') { - return this.current; - } - - // reflect point - var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); - return p; - } - - this.makeAbsolute = function(p) { - if (this.isRelativeCommand()) { - p.x = this.current.x + p.x; - p.y = this.current.y + p.y; - } - return p; - } - - this.addMarker = function(p, from, priorTo) { - // if the last angle isn't filled in because we didn't have this point yet ... - if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) { - this.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo); - } - this.addMarkerAngle(p, from == null ? null : from.angleTo(p)); - } - - this.addMarkerAngle = function(p, a) { - this.points.push(p); - this.angles.push(a); - } - - this.getMarkerPoints = function() { return this.points; } - this.getMarkerAngles = function() { - for (var i=0; i<this.angles.length; i++) { - if (this.angles[i] == null) { - for (var j=i+1; j<this.angles.length; j++) { - if (this.angles[j] != null) { - this.angles[i] = this.angles[j]; - break; - } - } - } - } - return this.angles; - } - })(d); - - this.path = function(ctx) { - var pp = this.PathParser; - pp.reset(); - - var bb = new svg.BoundingBox(); - if (ctx != null) ctx.beginPath(); - while (!pp.isEnd()) { - pp.nextCommand(); - switch (pp.command.toUpperCase()) { - case 'M': - var p = pp.getAsCurrentPoint(); - pp.addMarker(p); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.moveTo(p.x, p.y); - pp.start = pp.current; - while (!pp.isCommandOrEnd()) { - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, pp.start); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - case 'L': - while (!pp.isCommandOrEnd()) { - var c = pp.current; - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, c); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - case 'H': - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - case 'V': - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar()); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - case 'C': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'S': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getReflectedControlPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'Q': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'T': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getReflectedControlPoint(); - pp.control = cntrl; - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - case 'A': - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var rx = pp.getScalar(); - var ry = pp.getScalar(); - var xAxisRotation = pp.getScalar() * (Math.PI / 180.0); - var largeArcFlag = pp.getScalar(); - var sweepFlag = pp.getScalar(); - var cp = pp.getAsCurrentPoint(); - - // Conversion from endpoint to center parameterization - // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - // x1', y1' - var currp = new svg.Point( - Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0, - -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0 - ); - // adjust radii - var l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2); - if (l > 1) { - rx *= Math.sqrt(l); - ry *= Math.sqrt(l); - } - // cx', cy' - var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt( - ((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) / - (Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2)) - ); - if (isNaN(s)) s = 0; - var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); - // cx, cy - var centp = new svg.Point( - (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, - (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y - ); - // vector magnitude - var m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); } - // ratio between two vectors - var r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) } - // angle between two vectors - var a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); } - // initial angle - var a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]); - // angle delta - var u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]; - var v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry]; - var ad = a(u, v); - if (r(u,v) <= -1) ad = Math.PI; - if (r(u,v) >= 1) ad = 0; - - if (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI; - if (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI; - - // for markers - var halfWay = new svg.Point( - centp.x - rx * Math.cos((a1 + ad) / 2), - centp.y - ry * Math.sin((a1 + ad) / 2) - ); - pp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - pp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - - bb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better - if (ctx != null) { - var r = rx > ry ? rx : ry; - var sx = rx > ry ? 1 : rx / ry; - var sy = rx > ry ? ry / rx : 1; - - ctx.translate(centp.x, centp.y); - ctx.rotate(xAxisRotation); - ctx.scale(sx, sy); - ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag); - ctx.scale(1/sx, 1/sy); - ctx.rotate(-xAxisRotation); - ctx.translate(-centp.x, -centp.y); - } - } - break; - case 'Z': - if (ctx != null) ctx.closePath(); - pp.current = pp.start; - } - } - - return bb; - } - - this.getMarkers = function() { - var points = this.PathParser.getMarkerPoints(); - var angles = this.PathParser.getMarkerAngles(); - - var markers = []; - for (var i=0; i<points.length; i++) { - markers.push([points[i], angles[i]]); - } - return markers; - } - } - svg.Element.path.prototype = new svg.Element.PathElementBase; - - // pattern element - svg.Element.pattern = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.createPattern = function(ctx, element) { - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); - tempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value); - tempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value); - tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value); - tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value); - tempSvg.children = this.children; - - var c = document.createElement('canvas'); - c.width = this.attribute('width').Length.toPixels('x'); - c.height = this.attribute('height').Length.toPixels('y'); - tempSvg.render(c.getContext('2d')); - return ctx.createPattern(c, 'repeat'); - } - } - svg.Element.pattern.prototype = new svg.Element.ElementBase; - - // marker element - svg.Element.marker = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.baseRender = this.render; - this.render = function(ctx, point, angle) { - ctx.translate(point.x, point.y); - if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle); - if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth); - ctx.save(); - - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); - tempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value); - tempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value); - tempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value); - tempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value); - tempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black')); - tempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none')); - tempSvg.children = this.children; - tempSvg.render(ctx); - - ctx.restore(); - if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth); - if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle); - ctx.translate(-point.x, -point.y); - } - } - svg.Element.marker.prototype = new svg.Element.ElementBase; - - // definitions element - svg.Element.defs = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.render = function(ctx) { - // NOOP - } - } - svg.Element.defs.prototype = new svg.Element.ElementBase; - - // base for gradients - svg.Element.GradientBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox'); - - this.stops = []; - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - this.stops.push(child); - } - - this.getGradient = function() { - // OVERRIDE ME! - } - - this.createGradient = function(ctx, element) { - var stopsContainer = this; - if (this.attribute('xlink:href').hasValue()) { - stopsContainer = this.attribute('xlink:href').Definition.getDefinition(); - } - - var g = this.getGradient(ctx, element); - for (var i=0; i<stopsContainer.stops.length; i++) { - g.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color); - } - - if (this.attribute('gradientTransform').hasValue()) { - // render as transformed pattern on temporary canvas - var rootView = svg.ViewPort.viewPorts[0]; - - var rect = new svg.Element.rect(); - rect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0); - rect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0); - rect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS); - rect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS); - - var group = new svg.Element.g(); - group.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value); - group.children = [ rect ]; - - var tempSvg = new svg.Element.svg(); - tempSvg.attributes['x'] = new svg.Property('x', 0); - tempSvg.attributes['y'] = new svg.Property('y', 0); - tempSvg.attributes['width'] = new svg.Property('width', rootView.width); - tempSvg.attributes['height'] = new svg.Property('height', rootView.height); - tempSvg.children = [ group ]; - - var c = document.createElement('canvas'); - c.width = rootView.width; - c.height = rootView.height; - var tempCtx = c.getContext('2d'); - tempCtx.fillStyle = g; - tempSvg.render(tempCtx); - return tempCtx.createPattern(c, 'no-repeat'); - } - - return g; - } - } - svg.Element.GradientBase.prototype = new svg.Element.ElementBase; - - // linear gradient element - svg.Element.linearGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - - var x1 = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('x1').numValue() - : this.attribute('x1').Length.toPixels('x')); - var y1 = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('y1').numValue() - : this.attribute('y1').Length.toPixels('y')); - var x2 = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('x2').numValue() - : this.attribute('x2').Length.toPixels('x')); - var y2 = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('y2').numValue() - : this.attribute('y2').Length.toPixels('y')); - - return ctx.createLinearGradient(x1, y1, x2, y2); - } - } - svg.Element.linearGradient.prototype = new svg.Element.GradientBase; - - // radial gradient element - svg.Element.radialGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - - var cx = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('cx').numValue() - : this.attribute('cx').Length.toPixels('x')); - var cy = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('cy').numValue() - : this.attribute('cy').Length.toPixels('y')); - - var fx = cx; - var fy = cy; - if (this.attribute('fx').hasValue()) { - fx = (this.gradientUnits == 'objectBoundingBox' - ? bb.x() + bb.width() * this.attribute('fx').numValue() - : this.attribute('fx').Length.toPixels('x')); - } - if (this.attribute('fy').hasValue()) { - fy = (this.gradientUnits == 'objectBoundingBox' - ? bb.y() + bb.height() * this.attribute('fy').numValue() - : this.attribute('fy').Length.toPixels('y')); - } - - var r = (this.gradientUnits == 'objectBoundingBox' - ? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue() - : this.attribute('r').Length.toPixels()); - - return ctx.createRadialGradient(fx, fy, 0, cx, cy, r); - } - } - svg.Element.radialGradient.prototype = new svg.Element.GradientBase; - - // gradient stop element - svg.Element.stop = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.offset = this.attribute('offset').numValue(); - - var stopColor = this.style('stop-color'); - if (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value); - this.color = stopColor.value; - } - svg.Element.stop.prototype = new svg.Element.ElementBase; - - // animation base element - svg.Element.AnimateBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - svg.Animations.push(this); - - this.duration = 0.0; - this.begin = this.attribute('begin').Time.toMilliseconds(); - this.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds(); - - this.getProperty = function() { - var attributeType = this.attribute('attributeType').value; - var attributeName = this.attribute('attributeName').value; - - if (attributeType == 'CSS') { - return this.parent.style(attributeName, true); - } - return this.parent.attribute(attributeName, true); - }; - - this.initialValue = null; - this.removed = false; - - this.calcValue = function() { - // OVERRIDE ME! - return ''; - } - - this.update = function(delta) { - // set initial value - if (this.initialValue == null) { - this.initialValue = this.getProperty().value; - } - - // if we're past the end time - if (this.duration > this.maxDuration) { - // loop for indefinitely repeating animations - if (this.attribute('repeatCount').value == 'indefinite') { - this.duration = 0.0 - } - else if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) { - this.removed = true; - this.getProperty().value = this.initialValue; - return true; - } - else { - return false; // no updates made - } - } - this.duration = this.duration + delta; - - // if we're past the begin time - var updated = false; - if (this.begin < this.duration) { - var newValue = this.calcValue(); // tween - - if (this.attribute('type').hasValue()) { - // for transform, etc. - var type = this.attribute('type').value; - newValue = type + '(' + newValue + ')'; - } - - this.getProperty().value = newValue; - updated = true; - } - - return updated; - } - - // fraction of duration we've covered - this.progress = function() { - return ((this.duration - this.begin) / (this.maxDuration - this.begin)); - } - } - svg.Element.AnimateBase.prototype = new svg.Element.ElementBase; - - // animate element - svg.Element.animate = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = this.attribute('from').numValue(); - var to = this.attribute('to').numValue(); - - // tween value linearly - return from + (to - from) * this.progress(); - }; - } - svg.Element.animate.prototype = new svg.Element.AnimateBase; - - // animate color element - svg.Element.animateColor = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = new RGBColor(this.attribute('from').value); - var to = new RGBColor(this.attribute('to').value); - - if (from.ok && to.ok) { - // tween color linearly - var r = from.r + (to.r - from.r) * this.progress(); - var g = from.g + (to.g - from.g) * this.progress(); - var b = from.b + (to.b - from.b) * this.progress(); - return 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')'; - } - return this.attribute('from').value; - }; - } - svg.Element.animateColor.prototype = new svg.Element.AnimateBase; - - // animate transform element - svg.Element.animateTransform = function(node) { - this.base = svg.Element.animate; - this.base(node); - } - svg.Element.animateTransform.prototype = new svg.Element.animate; - - // font element - svg.Element.font = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.horizAdvX = this.attribute('horiz-adv-x').numValue(); - - this.isRTL = false; - this.isArabic = false; - this.fontFace = null; - this.missingGlyph = null; - this.glyphs = []; - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - if (child.type == 'font-face') { - this.fontFace = child; - if (child.style('font-family').hasValue()) { - svg.Definitions[child.style('font-family').value] = this; - } - } - else if (child.type == 'missing-glyph') this.missingGlyph = child; - else if (child.type == 'glyph') { - if (child.arabicForm != '') { - this.isRTL = true; - this.isArabic = true; - if (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = []; - this.glyphs[child.unicode][child.arabicForm] = child; - } - else { - this.glyphs[child.unicode] = child; - } - } - } - } - svg.Element.font.prototype = new svg.Element.ElementBase; - - // font-face element - svg.Element.fontface = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.ascent = this.attribute('ascent').value; - this.descent = this.attribute('descent').value; - this.unitsPerEm = this.attribute('units-per-em').numValue(); - } - svg.Element.fontface.prototype = new svg.Element.ElementBase; - - // missing-glyph element - svg.Element.missingglyph = function(node) { - this.base = svg.Element.path; - this.base(node); - - this.horizAdvX = 0; - } - svg.Element.missingglyph.prototype = new svg.Element.path; - - // glyph element - svg.Element.glyph = function(node) { - this.base = svg.Element.path; - this.base(node); - - this.horizAdvX = this.attribute('horiz-adv-x').numValue(); - this.unicode = this.attribute('unicode').value; - this.arabicForm = this.attribute('arabic-form').value; - } - svg.Element.glyph.prototype = new svg.Element.path; - - // text element - svg.Element.text = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - if (node != null) { - // add children - this.children = []; - for (var i=0; i<node.childNodes.length; i++) { - var childNode = node.childNodes[i]; - if (childNode.nodeType == 1) { // capture tspan and tref nodes - this.addChild(childNode, true); - } - else if (childNode.nodeType == 3) { // capture text - this.addChild(new svg.Element.tspan(childNode), false); - } - } - } - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value; - if (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value; - } - - this.renderChildren = function(ctx) { - var textAnchor = this.style('text-anchor').valueOrDefault('start'); - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - for (var i=0; i<this.children.length; i++) { - var child = this.children[i]; - - if (child.attribute('x').hasValue()) { - child.x = child.attribute('x').Length.toPixels('x'); - } - else { - if (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x'); - child.x = x; - } - - var childLength = child.measureText(ctx); - if (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group? - // loop through rest of children - var groupLength = childLength; - for (var j=i+1; j<this.children.length; j++) { - var childInGroup = this.children[j]; - if (childInGroup.attribute('x').hasValue()) break; // new group - groupLength += childInGroup.measureText(ctx); - } - child.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0); - } - x = child.x + childLength; - - if (child.attribute('y').hasValue()) { - child.y = child.attribute('y').Length.toPixels('y'); - } - else { - if (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y'); - child.y = y; - } - y = child.y; - - child.render(ctx); - } - } - } - svg.Element.text.prototype = new svg.Element.RenderedElementBase; - - // text base - svg.Element.TextElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.getGlyph = function(font, text, i) { - var c = text[i]; - var glyph = null; - if (font.isArabic) { - var arabicForm = 'isolated'; - if ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal'; - if (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial'; - if (i>0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial'; - if (typeof(font.glyphs[c]) != 'undefined') { - glyph = font.glyphs[c][arabicForm]; - if (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c]; - } - } - else { - glyph = font.glyphs[c]; - } - if (glyph == null) glyph = font.missingGlyph; - return glyph; - } - - this.renderChildren = function(ctx) { - var customFont = this.parent.style('font-family').Definition.getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle); - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - - var dx = svg.ToNumberArray(this.parent.attribute('dx').value); - for (var i=0; i<text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - var scale = fontSize / customFont.fontFace.unitsPerEm; - ctx.translate(this.x, this.y); - ctx.scale(scale, -scale); - var lw = ctx.lineWidth; - ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize; - if (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0); - glyph.render(ctx); - if (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0); - ctx.lineWidth = lw; - ctx.scale(1/scale, -1/scale); - ctx.translate(-this.x, -this.y); - - this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm; - if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) { - this.x += dx[i]; - } - } - return; - } - - if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y); - if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y); - } - - this.getText = function() { - // OVERRIDE ME - } - - this.measureText = function(ctx) { - var customFont = this.parent.style('font-family').Definition.getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var measure = 0; - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - var dx = svg.ToNumberArray(this.parent.attribute('dx').value); - for (var i=0; i<text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; - if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) { - measure += dx[i]; - } - } - return measure; - } - - var textToMeasure = svg.compressSpaces(this.getText()); - if (!ctx.measureText) return textToMeasure.length * 10; - - ctx.save(); - this.setContext(ctx); - var width = ctx.measureText(textToMeasure).width; - ctx.restore(); - return width; - } - } - svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase; - - // tspan - svg.Element.tspan = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.text = node.nodeType == 3 ? node.nodeValue : // text - node.childNodes.length > 0 ? node.childNodes[0].nodeValue : // element - node.text; - this.getText = function() { - return this.text; - } - } - svg.Element.tspan.prototype = new svg.Element.TextElementBase; - - // tref - svg.Element.tref = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.getText = function() { - var element = this.attribute('xlink:href').Definition.getDefinition(); - if (element != null) return element.children[0].getText(); - } - } - svg.Element.tref.prototype = new svg.Element.TextElementBase; - - // a element - svg.Element.a = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.hasText = true; - for (var i=0; i<node.childNodes.length; i++) { - if (node.childNodes[i].nodeType != 3) this.hasText = false; - } - - // this might contain text - this.text = this.hasText ? node.childNodes[0].nodeValue : ''; - this.getText = function() { - return this.text; - } - - this.baseRenderChildren = this.renderChildren; - this.renderChildren = function(ctx) { - if (this.hasText) { - // render as text element - this.baseRenderChildren(ctx); - var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); - svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y)); - } - else { - // render as temporary group - var g = new svg.Element.g(); - g.children = this.children; - g.parent = this; - g.render(ctx); - } - } - - this.onclick = function() { - window.open(this.attribute('xlink:href').value); - } - - this.onmousemove = function() { - svg.ctx.canvas.style.cursor = 'pointer'; - } - } - svg.Element.a.prototype = new svg.Element.TextElementBase; - - // image element - svg.Element.image = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - svg.Images.push(this); - this.img = document.createElement('img'); - this.loaded = false; - var that = this; - this.img.onload = function() { that.loaded = true; } - this.img.src = this.attribute('xlink:href').value; - - this.renderChildren = function(ctx) { - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - if (width == 0 || height == 0) return; - - ctx.save(); - ctx.translate(x, y); - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - width, - this.img.width, - height, - this.img.height, - 0, - 0); - ctx.drawImage(this.img, 0, 0); - ctx.restore(); - } - } - svg.Element.image.prototype = new svg.Element.RenderedElementBase; - - // group element - svg.Element.g = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.getBoundingBox = function() { - var bb = new svg.BoundingBox(); - for (var i=0; i<this.children.length; i++) { - bb.addBoundingBox(this.children[i].getBoundingBox()); - } - return bb; - }; - } - svg.Element.g.prototype = new svg.Element.RenderedElementBase; - - // symbol element - svg.Element.symbol = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - - // viewbox - if (this.attribute('viewBox').hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute('viewBox').value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - - svg.AspectRatio(ctx, - this.attribute('preserveAspectRatio').value, - this.attribute('width').Length.toPixels('x'), - width, - this.attribute('height').Length.toPixels('y'), - height, - minX, - minY); - - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - } - } - svg.Element.symbol.prototype = new svg.Element.RenderedElementBase; - - // style element - svg.Element.style = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - // text, or spaces then CDATA - var css = node.childNodes[0].nodeValue + (node.childNodes.length > 1 ? node.childNodes[1].nodeValue : ''); - css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''); // remove comments - css = svg.compressSpaces(css); // replace whitespace - var cssDefs = css.split('}'); - for (var i=0; i<cssDefs.length; i++) { - if (svg.trim(cssDefs[i]) != '') { - var cssDef = cssDefs[i].split('{'); - var cssClasses = cssDef[0].split(','); - var cssProps = cssDef[1].split(';'); - for (var j=0; j<cssClasses.length; j++) { - var cssClass = svg.trim(cssClasses[j]); - if (cssClass != '') { - var props = {}; - for (var k=0; k<cssProps.length; k++) { - var prop = cssProps[k].indexOf(':'); - var name = cssProps[k].substr(0, prop); - var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop); - if (name != null && value != null) { - props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value)); - } - } - svg.Styles[cssClass] = props; - if (cssClass == '@font-face') { - var fontFamily = props['font-family'].value.replace(/"/g,''); - var srcs = props['src'].value.split(','); - for (var s=0; s<srcs.length; s++) { - if (srcs[s].indexOf('format("svg")') > 0) { - var urlStart = srcs[s].indexOf('url'); - var urlEnd = srcs[s].indexOf(')', urlStart); - var url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6); - var doc = svg.parseXml(svg.ajax(url)); - var fonts = doc.getElementsByTagName('font'); - for (var f=0; f<fonts.length; f++) { - var font = svg.CreateElement(fonts[f]); - svg.Definitions[fontFamily] = font; - } - } - } - } - } - } - } - } - } - svg.Element.style.prototype = new svg.Element.ElementBase; - - // use element - svg.Element.use = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0); - if (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y')); - } - - this.getDefinition = function() { - var element = this.attribute('xlink:href').Definition.getDefinition(); - if (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value; - if (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value; - return element; - } - - this.path = function(ctx) { - var element = this.getDefinition(); - if (element != null) element.path(ctx); - } - - this.renderChildren = function(ctx) { - var element = this.getDefinition(); - if (element != null) element.render(ctx); - } - } - svg.Element.use.prototype = new svg.Element.RenderedElementBase; - - // mask element - svg.Element.mask = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx, element) { - // render as temp svg - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - - // temporarily remove mask to avoid recursion - var mask = element.attribute('mask').value; - element.attribute('mask').value = ''; - - var cMask = document.createElement('canvas'); - cMask.width = x + width; - cMask.height = y + height; - var maskCtx = cMask.getContext('2d'); - this.renderChildren(maskCtx); - - var c = document.createElement('canvas'); - c.width = x + width; - c.height = y + height; - var tempCtx = c.getContext('2d'); - element.render(tempCtx); - tempCtx.globalCompositeOperation = 'destination-in'; - tempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat'); - tempCtx.fillRect(0, 0, x + width, y + height); - - ctx.fillStyle = tempCtx.createPattern(c, 'no-repeat'); - ctx.fillRect(0, 0, x + width, y + height); - - // reassign mask - element.attribute('mask').value = mask; - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.mask.prototype = new svg.Element.ElementBase; - - // clip element - svg.Element.clipPath = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx) { - for (var i=0; i<this.children.length; i++) { - if (this.children[i].path) { - this.children[i].path(ctx); - ctx.clip(); - } - } - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.clipPath.prototype = new svg.Element.ElementBase; - - // filters - svg.Element.filter = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.apply = function(ctx, element) { - // render as temp svg - var bb = element.getBoundingBox(); - var x = this.attribute('x').Length.toPixels('x'); - var y = this.attribute('y').Length.toPixels('y'); - if (x == 0 || y == 0) { - x = bb.x1; - y = bb.y1; - } - var width = this.attribute('width').Length.toPixels('x'); - var height = this.attribute('height').Length.toPixels('y'); - if (width == 0 || height == 0) { - width = bb.width(); - height = bb.height(); - } - - // temporarily remove filter to avoid recursion - var filter = element.style('filter').value; - element.style('filter').value = ''; - - // max filter distance - var extraPercent = .20; - var px = extraPercent * width; - var py = extraPercent * height; - - var c = document.createElement('canvas'); - c.width = width + 2*px; - c.height = height + 2*py; - var tempCtx = c.getContext('2d'); - tempCtx.translate(-x + px, -y + py); - element.render(tempCtx); - - // apply filters - for (var i=0; i<this.children.length; i++) { - this.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py); - } - - // render on me - ctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py); - - // reassign filter - element.style('filter', true).value = filter; - } - - this.render = function(ctx) { - // NO RENDER - } - } - svg.Element.filter.prototype = new svg.Element.ElementBase; - - svg.Element.feGaussianBlur = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - function make_fgauss(sigma) { - sigma = Math.max(sigma, 0.01); - var len = Math.ceil(sigma * 4.0) + 1; - mask = []; - for (var i = 0; i < len; i++) { - mask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma)); - } - return mask; - } - - function normalize(mask) { - var sum = 0; - for (var i = 1; i < mask.length; i++) { - sum += Math.abs(mask[i]); - } - sum = 2 * sum + Math.abs(mask[0]); - for (var i = 0; i < mask.length; i++) { - mask[i] /= sum; - } - return mask; - } - - function convolve_even(src, dst, mask, width, height) { - for (var y = 0; y < height; y++) { - for (var x = 0; x < width; x++) { - var a = imGet(src, x, y, width, height, 3)/255; - for (var rgba = 0; rgba < 4; rgba++) { - var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a); - for (var i = 1; i < mask.length; i++) { - var a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255; - var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255; - sum += mask[i] * - ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) + - (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2)); - } - imSet(dst, y, x, height, width, rgba, sum); - } - } - } - } - - function imGet(img, x, y, width, height, rgba) { - return img[y*width*4 + x*4 + rgba]; - } - - function imSet(img, x, y, width, height, rgba, val) { - img[y*width*4 + x*4 + rgba] = val; - } - - function blur(ctx, width, height, sigma) - { - var srcData = ctx.getImageData(0, 0, width, height); - var mask = make_fgauss(sigma); - mask = normalize(mask); - tmp = []; - convolve_even(srcData.data, tmp, mask, width, height); - convolve_even(tmp, srcData.data, mask, height, width); - ctx.clearRect(0, 0, width, height); - ctx.putImageData(srcData, 0, 0); - } - - this.apply = function(ctx, x, y, width, height) { - // assuming x==0 && y==0 for now - blur(ctx, width, height, this.attribute('stdDeviation').numValue()); - } - } - svg.Element.filter.prototype = new svg.Element.feGaussianBlur; - - // title element, do nothing - svg.Element.title = function(node) { - } - svg.Element.title.prototype = new svg.Element.ElementBase; - - // desc element, do nothing - svg.Element.desc = function(node) { - } - svg.Element.desc.prototype = new svg.Element.ElementBase; - - svg.Element.MISSING = function(node) { - console.log('ERROR: Element \'' + node.nodeName + '\' not yet implemented.'); - } - svg.Element.MISSING.prototype = new svg.Element.ElementBase; - - // element factory - svg.CreateElement = function(node) { - var className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace - className = className.replace(/\-/g,''); // remove dashes - var e = null; - if (typeof(svg.Element[className]) != 'undefined') { - e = new svg.Element[className](node); - } - else { - e = new svg.Element.MISSING(node); - } - - e.type = node.nodeName; - return e; - } - - // load from url - svg.load = function(ctx, url) { - svg.loadXml(ctx, svg.ajax(url)); - } - - // load from xml - svg.loadXml = function(ctx, xml) { - svg.loadXmlDoc(ctx, svg.parseXml(xml)); - } - - svg.loadXmlDoc = function(ctx, dom) { - svg.init(ctx); - - var mapXY = function(p) { - var e = ctx.canvas; - while (e) { - p.x -= e.offsetLeft; - p.y -= e.offsetTop; - e = e.offsetParent; - } - if (window.scrollX) p.x += window.scrollX; - if (window.scrollY) p.y += window.scrollY; - return p; - } - - // bind mouse - if (svg.opts['ignoreMouse'] != true) { - ctx.canvas.onclick = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onclick(p.x, p.y); - }; - ctx.canvas.onmousemove = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onmousemove(p.x, p.y); - }; - } - - var e = svg.CreateElement(dom.documentElement); - e.root = true; - - // render loop - var isFirstRender = true; - var draw = function() { - svg.ViewPort.Clear(); - if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight); - - if (svg.opts['ignoreDimensions'] != true) { - // set canvas size - if (e.style('width').hasValue()) { - ctx.canvas.width = e.style('width').Length.toPixels('x'); - ctx.canvas.style.width = ctx.canvas.width + 'px'; - } - if (e.style('height').hasValue()) { - ctx.canvas.height = e.style('height').Length.toPixels('y'); - ctx.canvas.style.height = ctx.canvas.height + 'px'; - } - } - var cWidth = ctx.canvas.clientWidth || ctx.canvas.width; - var cHeight = ctx.canvas.clientHeight || ctx.canvas.height; - svg.ViewPort.SetCurrent(cWidth, cHeight); - - if (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX']; - if (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY']; - if (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) { - var xRatio = 1, yRatio = 1; - if (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth']; - if (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight']; - - e.attribute('width', true).value = svg.opts['scaleWidth']; - e.attribute('height', true).value = svg.opts['scaleHeight']; - e.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio); - e.attribute('preserveAspectRatio', true).value = 'none'; - } - - // clear and render - if (svg.opts['ignoreClear'] != true) { - ctx.clearRect(0, 0, cWidth, cHeight); - } - e.render(ctx); - if (isFirstRender) { - isFirstRender = false; - if (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback'](); - } - } - - var waitingForImages = true; - if (svg.ImagesLoaded()) { - waitingForImages = false; - draw(); - } - svg.intervalID = setInterval(function() { - var needUpdate = false; - - if (waitingForImages && svg.ImagesLoaded()) { - waitingForImages = false; - needUpdate = true; - } - - // need update from mouse events? - if (svg.opts['ignoreMouse'] != true) { - needUpdate = needUpdate | svg.Mouse.hasEvents(); - } - - // need update from animations? - if (svg.opts['ignoreAnimation'] != true) { - for (var i=0; i<svg.Animations.length; i++) { - needUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE); - } - } - - // need update from redraw? - if (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') { - if (svg.opts['forceRedraw']() == true) needUpdate = true; - } - - // render if needed - if (needUpdate) { - draw(); - svg.Mouse.runEvents(); // run and clear our events - } - }, 1000 / svg.FRAMERATE); - } - - svg.stop = function() { - if (svg.intervalID) { - clearInterval(svg.intervalID); - } - } - - svg.Mouse = new (function() { - this.events = []; - this.hasEvents = function() { return this.events.length != 0; } - - this.onclick = function(x, y) { - this.events.push({ type: 'onclick', x: x, y: y, - run: function(e) { if (e.onclick) e.onclick(); } - }); - } - - this.onmousemove = function(x, y) { - this.events.push({ type: 'onmousemove', x: x, y: y, - run: function(e) { if (e.onmousemove) e.onmousemove(); } - }); - } - - this.eventElements = []; - - this.checkPath = function(element, ctx) { - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element; - } - } - - this.checkBoundingBox = function(element, bb) { - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element; - } - } - - this.runEvents = function() { - svg.ctx.canvas.style.cursor = ''; - - for (var i=0; i<this.events.length; i++) { - var e = this.events[i]; - var element = this.eventElements[i]; - while (element) { - e.run(element); - element = element.parent; - } - } - - // done running, clear - this.events = []; - this.eventElements = []; - } - }); - - return svg; - } -})(); - -if (CanvasRenderingContext2D) { - CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) { - canvg(this.canvas, s, { - ignoreMouse: true, - ignoreAnimation: true, - ignoreDimensions: true, - ignoreClear: true, - offsetX: dx, - offsetY: dy, - scaleWidth: dw, - scaleHeight: dh - }); - } -}/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * CanVGRenderer Extension module - * - * (c) 2011-2012 Torstein Honsi, Erik Olsson - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Highcharts */ - -(function (Highcharts) { // encapsulate - var UNDEFINED, - DIV = 'div', - ABSOLUTE = 'absolute', - RELATIVE = 'relative', - HIDDEN = 'hidden', - VISIBLE = 'visible', - PX = 'px', - css = Highcharts.css, - CanVGRenderer = Highcharts.CanVGRenderer, - SVGRenderer = Highcharts.SVGRenderer, - extend = Highcharts.extend, - merge = Highcharts.merge, - addEvent = Highcharts.addEvent, - createElement = Highcharts.createElement, - discardElement = Highcharts.discardElement; - - // Extend CanVG renderer on demand, inherit from SVGRenderer - extend(CanVGRenderer.prototype, SVGRenderer.prototype); - - // Add additional functionality: - extend(CanVGRenderer.prototype, { - create: function (chart, container, chartWidth, chartHeight) { - this.setContainer(container, chartWidth, chartHeight); - this.configure(chart); - }, - setContainer: function (container, chartWidth, chartHeight) { - var containerStyle = container.style, - containerParent = container.parentNode, - containerLeft = containerStyle.left, - containerTop = containerStyle.top, - containerOffsetWidth = container.offsetWidth, - containerOffsetHeight = container.offsetHeight, - canvas, - initialHiddenStyle = { visibility: HIDDEN, position: ABSOLUTE }; - - this.init.apply(this, [container, chartWidth, chartHeight]); - - // add the canvas above it - canvas = createElement('canvas', { - width: containerOffsetWidth, - height: containerOffsetHeight - }, { - position: RELATIVE, - left: containerLeft, - top: containerTop - }, container); - this.canvas = canvas; - - // Create the tooltip line and div, they are placed as siblings to - // the container (and as direct childs to the div specified in the html page) - this.ttLine = createElement(DIV, null, initialHiddenStyle, containerParent); - this.ttDiv = createElement(DIV, null, initialHiddenStyle, containerParent); - this.ttTimer = UNDEFINED; - - // Move away the svg node to a new div inside the container's parent so we can hide it. - var hiddenSvg = createElement(DIV, { - width: containerOffsetWidth, - height: containerOffsetHeight - }, { - visibility: HIDDEN, - left: containerLeft, - top: containerTop - }, containerParent); - this.hiddenSvg = hiddenSvg; - hiddenSvg.appendChild(this.box); - }, - - /** - * Configures the renderer with the chart. Attach a listener to the event tooltipRefresh. - **/ - configure: function (chart) { - var renderer = this, - options = chart.options.tooltip, - borderWidth = options.borderWidth, - tooltipDiv = renderer.ttDiv, - tooltipDivStyle = options.style, - tooltipLine = renderer.ttLine, - padding = parseInt(tooltipDivStyle.padding, 10); - - // Add border styling from options to the style - tooltipDivStyle = merge(tooltipDivStyle, { - padding: padding + PX, - 'background-color': options.backgroundColor, - 'border-style': 'solid', - 'border-width': borderWidth + PX, - 'border-radius': options.borderRadius + PX - }); - - // Optionally add shadow - if (options.shadow) { - tooltipDivStyle = merge(tooltipDivStyle, { - 'box-shadow': '1px 1px 3px gray', // w3c - '-webkit-box-shadow': '1px 1px 3px gray' // webkit - }); - } - css(tooltipDiv, tooltipDivStyle); - - // Set simple style on the line - css(tooltipLine, { - 'border-left': '1px solid darkgray' - }); - - // This event is triggered when a new tooltip should be shown - addEvent(chart, 'tooltipRefresh', function (args) { - var chartContainer = chart.container, - offsetLeft = chartContainer.offsetLeft, - offsetTop = chartContainer.offsetTop, - position; - - // Set the content of the tooltip - tooltipDiv.innerHTML = args.text; - - // Compute the best position for the tooltip based on the divs size and container size. - position = chart.tooltip.getPosition(tooltipDiv.offsetWidth, tooltipDiv.offsetHeight, {plotX: args.x, plotY: args.y}); - - css(tooltipDiv, { - visibility: VISIBLE, - left: position.x + PX, - top: position.y + PX, - 'border-color': args.borderColor - }); - - // Position the tooltip line - css(tooltipLine, { - visibility: VISIBLE, - left: offsetLeft + args.x + PX, - top: offsetTop + chart.plotTop + PX, - height: chart.plotHeight + PX - }); - - // This timeout hides the tooltip after 3 seconds - // First clear any existing timer - if (renderer.ttTimer !== UNDEFINED) { - clearTimeout(renderer.ttTimer); - } - - // Start a new timer that hides tooltip and line - renderer.ttTimer = setTimeout(function () { - css(tooltipDiv, { visibility: HIDDEN }); - css(tooltipLine, { visibility: HIDDEN }); - }, 3000); - }); - }, - - /** - * Extend SVGRenderer.destroy to also destroy the elements added by CanVGRenderer. - */ - destroy: function () { - var renderer = this; - - // Remove the canvas - discardElement(renderer.canvas); - - // Kill the timer - if (renderer.ttTimer !== UNDEFINED) { - clearTimeout(renderer.ttTimer); - } - - // Remove the divs for tooltip and line - discardElement(renderer.ttLine); - discardElement(renderer.ttDiv); - discardElement(renderer.hiddenSvg); - - // Continue with base class - return SVGRenderer.prototype.destroy.apply(renderer); - }, - - /** - * Take a color and return it if it's a string, do not make it a gradient even if it is a - * gradient. Currently canvg cannot render gradients (turns out black), - * see: http://code.google.com/p/canvg/issues/detail?id=104 - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop) { - if (color && color.linearGradient) { - // Pick the end color and forward to base implementation - color = color.stops[color.stops.length - 1][1]; - } - return SVGRenderer.prototype.color.call(this, color, elem, prop); - }, - - /** - * Draws the SVG on the canvas or adds a draw invokation to the deferred list. - */ - draw: function () { - var renderer = this; - window.canvg(renderer.canvas, renderer.hiddenSvg.innerHTML); - } - }); -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/modules/data.js b/pykeg/web/static/highcharts/js/modules/data.js deleted file mode 100644 index fef9b924d..000000000 --- a/pykeg/web/static/highcharts/js/modules/data.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - Data plugin for Highcharts - - (c) 2012-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(j){var m=j.each,o=function(b,a){this.init(b,a)};j.extend(o.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];m(b&&b.series||[],function(b){c.push((j.seriesTypes[b.type||a||"line"].prototype.pointArrayMap||[0]).length)});this.valueCount= -{global:(j.seriesTypes[a||"line"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){if(this.options.switchRowsAndColumns)this.columns=this.rowsToColumns(this.columns);this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k,j=0;c&&(k=c.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter|| -"\n"),g=a.itemDelimiter||(c.indexOf("\t")!==-1?"\t":","),m(k,function(a,c){var k=b.trim(a),n=k.indexOf("#")===0;c>=f&&c<=h&&!n&&k!==""&&(k=a.split(g),m(k,function(b,a){a>=i&&a<=e&&(d[a-i]||(d[a-i]=[]),d[a-i][j]=b)}),j+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,h=b.startColumn||0,i=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a==="string"&&(a=document.getElementById(a)),m(a.getElementsByTagName("tr"),function(a, -b){e=0;b>=d&&b<=f&&m(a.childNodes,function(a){if((a.tagName==="TD"||a.tagName==="TH")&&e>=h&&e<=i)c[e]||(c[e]=[]),c[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,h=a.endRow||Number.MAX_VALUE,i=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,k;c&&jQuery.getJSON("https://spreadsheets.google.com/feeds/cells/"+c+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?", -function(a){var a=a.feed.entry,c,j=a.length,m=0,n=0,l;for(l=0;l<j;l++)c=a[l],m=Math.max(m,c.gs$cell.col),n=Math.max(n,c.gs$cell.row);for(l=0;l<m;l++)if(l>=i&&l<=e)d[l-i]=[],d[l-i].length=Math.min(n,h-f);for(l=0;l<j;l++)if(c=a[l],g=c.gs$cell.row-1,k=c.gs$cell.col-1,k>=i&&k<=e&&g>=f&&g<=h)d[k-i][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){m(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b==="string"?b.replace(/^\s+|\s+$/g,""):b},parseTypes:function(){for(var b= -this.columns,a=b.length,c,d,f,h;a--;)for(c=b[a].length;c--;)d=b[a][c],f=parseFloat(d),h=this.trim(d),h==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d==="number"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=h===""?null:h)},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b==="string")for(d in this.dateFormats)a= -this.dateFormats[d],(f=b.match(a.regex))&&(c=a.parser(f));return c},rowsToColumns:function(b){var a,c,d,f,h;if(b){h=[];c=b.length;for(a=0;a<c;a++){f=b[a].length;for(d=0;d<f;d++)h[d]||(h[d]=[]),h[d][a]=b[a][d]}}return h},parsed:function(){this.options.parsed&&this.options.parsed.call(this,this.columns)},complete:function(){var b=this.columns,a,c,d=this.options,f,h,i,e,g,k;if(d.complete){this.getColumnDistribution();b.length>1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c="datetime":a.isNumeric|| -(c="category"));for(e=0;e<b.length;e++)if(this.headerRow===0)b[e].name=b[e].shift();h=[];for(e=0,k=0;e<b.length;k++){f=j.pick(this.valueCount.individual[k],this.valueCount.global);i=[];for(g=0;g<b[e].length;g++)i[g]=[a[g],b[e][g]!==void 0?b[e][g]:null],f>1&&i[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&i[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&i[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&i[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);h[k]={name:b[e].name,data:i};e+=f}d.complete({xAxis:{type:c}, -series:h})}}});j.Data=o;j.data=function(b,a){return new o(b,a)};j.wrap(j.Chart.prototype,"init",function(b,a,c){var d=this;a&&a.data?j.data(j.extend(a.data,{complete:function(f){a.series&&m(a.series,function(b,c){a.series[c]=j.merge(b,f.series[c])});a=j.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/data.src.js b/pykeg/web/static/highcharts/js/modules/data.src.js deleted file mode 100644 index ee79e0e5b..000000000 --- a/pykeg/web/static/highcharts/js/modules/data.src.js +++ /dev/null @@ -1,598 +0,0 @@ -/** - * @license Data plugin for Highcharts - * - * (c) 2012-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -/* - * The Highcharts Data plugin is a utility to ease parsing of input sources like - * CSV, HTML tables or grid views into basic configuration options for use - * directly in the Highcharts constructor. - * - * Demo: http://jsfiddle.net/highcharts/SnLFj/ - * - * --- OPTIONS --- - * - * - columns : Array<Array<Mixed>> - * A two-dimensional array representing the input data on tabular form. This input can - * be used when the data is already parsed, for example from a grid view component. - * Each cell can be a string or number. If not switchRowsAndColumns is set, the columns - * are interpreted as series. See also the rows option. - * - * - complete : Function(chartOptions) - * The callback that is evaluated when the data is finished loading, optionally from an - * external source, and parsed. The first argument passed is a finished chart options - * object, containing series and an xAxis with categories if applicable. Thise options - * can be extended with additional options and passed directly to the chart constructor. - * - * - csv : String - * A comma delimited string to be parsed. Related options are startRow, endRow, startColumn - * and endColumn to delimit what part of the table is used. The lineDelimiter and - * itemDelimiter options define the CSV delimiter formats. - * - * - endColumn : Integer - * In tabular input data, the first row (indexed by 0) to use. Defaults to the last - * column containing data. - * - * - endRow : Integer - * In tabular input data, the last row (indexed by 0) to use. Defaults to the last row - * containing data. - * - * - googleSpreadsheetKey : String - * A Google Spreadsheet key. See https://developers.google.com/gdata/samples/spreadsheet_sample - * for general information on GS. - * - * - googleSpreadsheetWorksheet : String - * The Google Spreadsheet worksheet. The available id's can be read from - * https://spreadsheets.google.com/feeds/worksheets/{key}/public/basic - * - * - itemDelimiter : String - * Item or cell delimiter for parsing CSV. Defaults to the tab character "\t" if a tab character - * is found in the CSV string, if not it defaults to ",". - * - * - lineDelimiter : String - * Line delimiter for parsing CSV. Defaults to "\n". - * - * - parsed : Function - * A callback function to access the parsed columns, the two-dimentional input data - * array directly, before they are interpreted into series data and categories. - * - * - parseDate : Function - * A callback function to parse string representations of dates into JavaScript timestamps. - * Return an integer on success. - * - * - rows : Array<Array<Mixed>> - * The same as the columns input option, but defining rows intead of columns. - * - * - startColumn : Integer - * In tabular input data, the first column (indexed by 0) to use. - * - * - startRow : Integer - * In tabular input data, the first row (indexed by 0) to use. - * - * - switchRowsAndColumns : Boolean - * Switch rows and columns of the input data, so that this.columns effectively becomes the - * rows of the data set, and the rows are interpreted as series. - * - * - table : String|HTMLElement - * A HTML table or the id of such to be parsed as input data. Related options ara startRow, - * endRow, startColumn and endColumn to delimit what part of the table is used. - */ - -// JSLint options: -/*global jQuery */ - -(function (Highcharts) { - - // Utilities - var each = Highcharts.each; - - - // The Data constructor - var Data = function (dataOptions, chartOptions) { - this.init(dataOptions, chartOptions); - }; - - // Set the prototype properties - Highcharts.extend(Data.prototype, { - - /** - * Initialize the Data object with the given options - */ - init: function (options, chartOptions) { - this.options = options; - this.chartOptions = chartOptions; - this.columns = options.columns || this.rowsToColumns(options.rows) || []; - - // No need to parse or interpret anything - if (this.columns.length) { - this.dataFound(); - - // Parse and interpret - } else { - - // Parse a CSV string if options.csv is given - this.parseCSV(); - - // Parse a HTML table if options.table is given - this.parseTable(); - - // Parse a Google Spreadsheet - this.parseGoogleSpreadsheet(); - } - - }, - - /** - * Get the column distribution. For example, a line series takes a single column for - * Y values. A range series takes two columns for low and high values respectively, - * and an OHLC series takes four columns. - */ - getColumnDistribution: function () { - var chartOptions = this.chartOptions, - getValueCount = function (type) { - return (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length; - }, - globalType = chartOptions && chartOptions.chart && chartOptions.chart.type, - individualCounts = []; - - each((chartOptions && chartOptions.series) || [], function (series) { - individualCounts.push(getValueCount(series.type || globalType)); - }); - - this.valueCount = { - global: getValueCount(globalType), - individual: individualCounts - }; - }, - - /** - * When the data is parsed into columns, either by CSV, table, GS or direct input, - * continue with other operations. - */ - dataFound: function () { - - if (this.options.switchRowsAndColumns) { - this.columns = this.rowsToColumns(this.columns); - } - - // Interpret the values into right types - this.parseTypes(); - - // Use first row for series names? - this.findHeaderRow(); - - // Handle columns if a handleColumns callback is given - this.parsed(); - - // Complete if a complete callback is given - this.complete(); - - }, - - /** - * Parse a CSV input string - */ - parseCSV: function () { - var self = this, - options = this.options, - csv = options.csv, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE, - itemDelimiter, - lines, - activeRowNo = 0; - - if (csv) { - - lines = csv - .replace(/\r\n/g, "\n") // Unix - .replace(/\r/g, "\n") // Mac - .split(options.lineDelimiter || "\n"); - - itemDelimiter = options.itemDelimiter || (csv.indexOf('\t') !== -1 ? '\t' : ','); - - each(lines, function (line, rowNo) { - var trimmed = self.trim(line), - isComment = trimmed.indexOf('#') === 0, - isBlank = trimmed === '', - items; - - if (rowNo >= startRow && rowNo <= endRow && !isComment && !isBlank) { - items = line.split(itemDelimiter); - each(items, function (item, colNo) { - if (colNo >= startColumn && colNo <= endColumn) { - if (!columns[colNo - startColumn]) { - columns[colNo - startColumn] = []; - } - - columns[colNo - startColumn][activeRowNo] = item; - } - }); - activeRowNo += 1; - } - }); - - this.dataFound(); - } - }, - - /** - * Parse a HTML table - */ - parseTable: function () { - var options = this.options, - table = options.table, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE, - colNo; - - if (table) { - - if (typeof table === 'string') { - table = document.getElementById(table); - } - - each(table.getElementsByTagName('tr'), function (tr, rowNo) { - colNo = 0; - if (rowNo >= startRow && rowNo <= endRow) { - each(tr.childNodes, function (item) { - if ((item.tagName === 'TD' || item.tagName === 'TH') && colNo >= startColumn && colNo <= endColumn) { - if (!columns[colNo]) { - columns[colNo] = []; - } - columns[colNo][rowNo - startRow] = item.innerHTML; - - colNo += 1; - } - }); - } - }); - - this.dataFound(); // continue - } - }, - - /** - */ - parseGoogleSpreadsheet: function () { - var self = this, - options = this.options, - googleSpreadsheetKey = options.googleSpreadsheetKey, - columns = this.columns, - startRow = options.startRow || 0, - endRow = options.endRow || Number.MAX_VALUE, - startColumn = options.startColumn || 0, - endColumn = options.endColumn || Number.MAX_VALUE, - gr, // google row - gc; // google column - - if (googleSpreadsheetKey) { - jQuery.getJSON('https://spreadsheets.google.com/feeds/cells/' + - googleSpreadsheetKey + '/' + (options.googleSpreadsheetWorksheet || 'od6') + - '/public/values?alt=json-in-script&callback=?', - function (json) { - - // Prepare the data from the spreadsheat - var cells = json.feed.entry, - cell, - cellCount = cells.length, - colCount = 0, - rowCount = 0, - i; - - // First, find the total number of columns and rows that - // are actually filled with data - for (i = 0; i < cellCount; i++) { - cell = cells[i]; - colCount = Math.max(colCount, cell.gs$cell.col); - rowCount = Math.max(rowCount, cell.gs$cell.row); - } - - // Set up arrays containing the column data - for (i = 0; i < colCount; i++) { - if (i >= startColumn && i <= endColumn) { - // Create new columns with the length of either end-start or rowCount - columns[i - startColumn] = []; - - // Setting the length to avoid jslint warning - columns[i - startColumn].length = Math.min(rowCount, endRow - startRow); - } - } - - // Loop over the cells and assign the value to the right - // place in the column arrays - for (i = 0; i < cellCount; i++) { - cell = cells[i]; - gr = cell.gs$cell.row - 1; // rows start at 1 - gc = cell.gs$cell.col - 1; // columns start at 1 - - // If both row and col falls inside start and end - // set the transposed cell value in the newly created columns - if (gc >= startColumn && gc <= endColumn && - gr >= startRow && gr <= endRow) { - columns[gc - startColumn][gr - startRow] = cell.content.$t; - } - } - self.dataFound(); - }); - } - }, - - /** - * Find the header row. For now, we just check whether the first row contains - * numbers or strings. Later we could loop down and find the first row with - * numbers. - */ - findHeaderRow: function () { - var headerRow = 0; - each(this.columns, function (column) { - if (typeof column[0] !== 'string') { - headerRow = null; - } - }); - this.headerRow = 0; - }, - - /** - * Trim a string from whitespace - */ - trim: function (str) { - return typeof str === 'string' ? str.replace(/^\s+|\s+$/g, '') : str; - }, - - /** - * Parse numeric cells in to number types and date types in to true dates. - */ - parseTypes: function () { - var columns = this.columns, - col = columns.length, - row, - val, - floatVal, - trimVal, - dateVal; - - while (col--) { - row = columns[col].length; - while (row--) { - val = columns[col][row]; - floatVal = parseFloat(val); - trimVal = this.trim(val); - - /*jslint eqeq: true*/ - if (trimVal == floatVal) { // is numeric - /*jslint eqeq: false*/ - columns[col][row] = floatVal; - - // If the number is greater than milliseconds in a year, assume datetime - if (floatVal > 365 * 24 * 3600 * 1000) { - columns[col].isDatetime = true; - } else { - columns[col].isNumeric = true; - } - - } else { // string, continue to determine if it is a date string or really a string - dateVal = this.parseDate(val); - - if (col === 0 && typeof dateVal === 'number' && !isNaN(dateVal)) { // is date - columns[col][row] = dateVal; - columns[col].isDatetime = true; - - } else { // string - columns[col][row] = trimVal === '' ? null : trimVal; - } - } - - } - } - }, - - /** - * A collection of available date formats, extendable from the outside to support - * custom date formats. - */ - dateFormats: { - 'YYYY-mm-dd': { - regex: '^([0-9]{4})-([0-9]{2})-([0-9]{2})$', - parser: function (match) { - return Date.UTC(+match[1], match[2] - 1, +match[3]); - } - } - }, - - /** - * Parse a date and return it as a number. Overridable through options.parseDate. - */ - parseDate: function (val) { - var parseDate = this.options.parseDate, - ret, - key, - format, - match; - - if (parseDate) { - ret = parseDate(val); - } - - if (typeof val === 'string') { - for (key in this.dateFormats) { - format = this.dateFormats[key]; - match = val.match(format.regex); - if (match) { - ret = format.parser(match); - } - } - } - return ret; - }, - - /** - * Reorganize rows into columns - */ - rowsToColumns: function (rows) { - var row, - rowsLength, - col, - colsLength, - columns; - - if (rows) { - columns = []; - rowsLength = rows.length; - for (row = 0; row < rowsLength; row++) { - colsLength = rows[row].length; - for (col = 0; col < colsLength; col++) { - if (!columns[col]) { - columns[col] = []; - } - columns[col][row] = rows[row][col]; - } - } - } - return columns; - }, - - /** - * A hook for working directly on the parsed columns - */ - parsed: function () { - if (this.options.parsed) { - this.options.parsed.call(this, this.columns); - } - }, - - /** - * If a complete callback function is provided in the options, interpret the - * columns into a Highcharts options object. - */ - complete: function () { - - var columns = this.columns, - firstCol, - type, - options = this.options, - valueCount, - series, - data, - i, - j, - seriesIndex; - - - if (options.complete) { - - this.getColumnDistribution(); - - // Use first column for X data or categories? - if (columns.length > 1) { - firstCol = columns.shift(); - if (this.headerRow === 0) { - firstCol.shift(); // remove the first cell - } - - - if (firstCol.isDatetime) { - type = 'datetime'; - } else if (!firstCol.isNumeric) { - type = 'category'; - } - } - - // Get the names and shift the top row - for (i = 0; i < columns.length; i++) { - if (this.headerRow === 0) { - columns[i].name = columns[i].shift(); - } - } - - // Use the next columns for series - series = []; - for (i = 0, seriesIndex = 0; i < columns.length; seriesIndex++) { - - // This series' value count - valueCount = Highcharts.pick(this.valueCount.individual[seriesIndex], this.valueCount.global); - - // Iterate down the cells of each column and add data to the series - data = []; - for (j = 0; j < columns[i].length; j++) { - data[j] = [ - firstCol[j], - columns[i][j] !== undefined ? columns[i][j] : null - ]; - if (valueCount > 1) { - data[j].push(columns[i + 1][j] !== undefined ? columns[i + 1][j] : null); - } - if (valueCount > 2) { - data[j].push(columns[i + 2][j] !== undefined ? columns[i + 2][j] : null); - } - if (valueCount > 3) { - data[j].push(columns[i + 3][j] !== undefined ? columns[i + 3][j] : null); - } - if (valueCount > 4) { - data[j].push(columns[i + 4][j] !== undefined ? columns[i + 4][j] : null); - } - } - - // Add the series - series[seriesIndex] = { - name: columns[i].name, - data: data - }; - - i += valueCount; - } - - // Do the callback - options.complete({ - xAxis: { - type: type - }, - series: series - }); - } - } - }); - - // Register the Data prototype and data function on Highcharts - Highcharts.Data = Data; - Highcharts.data = function (options, chartOptions) { - return new Data(options, chartOptions); - }; - - // Extend Chart.init so that the Chart constructor accepts a new configuration - // option group, data. - Highcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed, userOptions, callback) { - var chart = this; - - if (userOptions && userOptions.data) { - Highcharts.data(Highcharts.extend(userOptions.data, { - complete: function (dataOptions) { - - // Merge series configs - if (userOptions.series) { - each(userOptions.series, function (series, i) { - userOptions.series[i] = Highcharts.merge(series, dataOptions.series[i]); - }); - } - - // Do the merge - userOptions = Highcharts.merge(dataOptions, userOptions); - - proceed.call(chart, userOptions, callback); - } - }), userOptions); - } else { - proceed.call(chart, userOptions, callback); - } - }); - -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/modules/drilldown.js b/pykeg/web/static/highcharts/js/modules/drilldown.js deleted file mode 100644 index 5df917b35..000000000 --- a/pykeg/web/static/highcharts/js/modules/drilldown.js +++ /dev/null @@ -1,11 +0,0 @@ -(function(e){function p(b,a,c){return"rgba("+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b[2]+(a[2]-b[2])*c),b[3]+(a[3]-b[3])*c].join(",")+")"}var m=function(){},j=e.getOptions(),g=e.each,q=e.extend,n=e.wrap,h=e.Chart,i=e.seriesTypes,k=i.pie,l=i.column,r=HighchartsAdapter.fireEvent,t=HighchartsAdapter.inArray;q(j.lang,{drillUpText:"◁ Back to {series.name}"});j.drilldown={activeAxisLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"}, -activeDataLabelStyle:{cursor:"pointer",color:"#0d233a",fontWeight:"bold",textDecoration:"underline"},animation:{duration:500},drillUpButton:{position:{align:"right",x:-10,y:10}}};e.SVGRenderer.prototype.Element.prototype.fadeIn=function(b){this.attr({opacity:0.1,visibility:"visible"}).animate({opacity:1},b||{duration:250})};h.prototype.drilldownLevels=[];h.prototype.addSeriesAsDrilldown=function(b,a){var c=b.series,d=c.xAxis,f=c.yAxis,e;e=b.color||c.color;var g,a=q({color:e},a);g=t(b,c.points);this.drilldownLevels.push({seriesOptions:c.userOptions, -shapeArgs:b.shapeArgs,bBox:b.graphic.getBBox(),color:e,newSeries:a,pointOptions:c.options.data[g],pointIndex:g,oldExtremes:{xMin:d&&d.userMin,xMax:d&&d.userMax,yMin:f&&f.userMin,yMax:f&&f.userMax}});e=this.addSeries(a,!1);if(d)d.oldPos=d.pos,d.userMin=d.userMax=null,f.userMin=f.userMax=null;if(c.type===e.type)e.animate=e.animateDrilldown||m,e.options.animation=!0;c.remove(!1);this.redraw();this.showDrillUpButton()};h.prototype.getDrilldownBackText=function(){return this.options.lang.drillUpText.replace("{series.name}", -this.drilldownLevels[this.drilldownLevels.length-1].seriesOptions.name)};h.prototype.showDrillUpButton=function(){var b=this,a=this.getDrilldownBackText(),c=b.options.drilldown.drillUpButton,d,f;this.drillUpButton?this.drillUpButton.attr({text:a}).align():(f=(d=c.theme)&&d.states,this.drillUpButton=this.renderer.button(a,null,null,function(){b.drillUp()},d,f&&f.hover,f&&f.select).attr({align:c.position.align,zIndex:9}).add().align(c.position,!1,c.relativeTo||"plotBox"))};h.prototype.drillUp=function(){var b= -this.drilldownLevels.pop(),a=this.series[0],c=b.oldExtremes,d=this.addSeries(b.seriesOptions,!1);r(this,"drillup",{seriesOptions:b.seriesOptions});if(d.type===a.type)d.drilldownLevel=b,d.animate=d.animateDrillupTo||m,d.options.animation=!0,a.animateDrillupFrom&&a.animateDrillupFrom(b);a.remove(!1);d.xAxis&&(d.xAxis.setExtremes(c.xMin,c.xMax,!1),d.yAxis.setExtremes(c.yMin,c.yMax,!1));this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align()}; -k.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,d=a.shapeArgs,f=d.start,s=(d.end-f)/this.points.length,h=e.Color(a.color).rgba;b||g(this.points,function(a,b){var g=e.Color(a.color).rgba;a.graphic.attr(e.merge(d,{start:f+b*s,end:f+(b+1)*s})).animate(a.shapeArgs,e.merge(c,{step:function(a,d){d.prop==="start"&&this.attr({fill:p(h,g,d.pos)})}}))})};k.prototype.animateDrillupTo=l.prototype.animateDrillupTo= -function(b){if(!b){var a=this,c=a.drilldownLevel;g(this.points,function(a){a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){g(a.points,function(a,b){var e=b===c.pointIndex?"show":"fadeIn";a.graphic[e]();if(a.dataLabel)a.dataLabel[e]();if(a.connector)a.connector[e]()})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=m}};l.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length- -1].shapeArgs,c=this.chart.options.drilldown.animation;b||(a.x+=this.xAxis.oldPos-this.xAxis.pos,g(this.points,function(b){b.graphic.attr(a).animate(b.shapeArgs,c);b.dataLabel&&b.dataLabel.fadeIn(c)}))};l.prototype.animateDrillupFrom=k.prototype.animateDrillupFrom=function(b){var a=this.chart.options.drilldown.animation,c=this.group;delete this.group;g(this.points,function(d){var f=d.graphic,g=e.Color(d.color).rgba;delete d.graphic;f.animate(b.shapeArgs,e.merge(a,{step:function(a,c){c.prop==="start"&& -this.attr({fill:p(g,e.Color(b.color).rgba,c.pos)})},complete:function(){f.destroy();c&&(c=c.destroy())}}))})};e.Point.prototype.doDrilldown=function(){for(var b=this.series.chart,a=b.options.drilldown,c=(a.series||[]).length,d;c--&&!d;)a.series[c].id===this.drilldown&&(d=a.series[c]);r(b,"drilldown",{point:this,seriesOptions:d});d&&b.addSeriesAsDrilldown(this,d)};n(e.Point.prototype,"init",function(b,a,c,d){var f=b.call(this,a,c,d),b=a.chart,a=(a=a.xAxis&&a.xAxis.ticks[d])&&a.label;if(f.drilldown){if(e.addEvent(f, -"click",function(){f.doDrilldown()}),a){if(!a._basicStyle)a._basicStyle=a.element.getAttribute("style");a.addClass("highcharts-drilldown-axis-label").css(b.options.drilldown.activeAxisLabelStyle).on("click",function(){f.doDrilldown&&f.doDrilldown()})}}else a&&a._basicStyle&&a.element.setAttribute("style",a._basicStyle);return f});n(e.Series.prototype,"drawDataLabels",function(b){var a=this.chart.options.drilldown.activeDataLabelStyle;b.call(this);g(this.points,function(b){if(b.drilldown&&b.dataLabel)b.dataLabel.attr({"class":"highcharts-drilldown-data-label"}).css(a).on("click", -function(){b.doDrilldown()})})});l.prototype.supportsDrilldown=!0;k.prototype.supportsDrilldown=!0;var o,j=function(b){b.call(this);g(this.points,function(a){a.drilldown&&a.graphic&&a.graphic.attr({"class":"highcharts-drilldown-point"}).css({cursor:"pointer"})})};for(o in i)i[o].prototype.supportsDrilldown&&n(i[o].prototype,"drawTracker",j)})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/drilldown.src.js b/pykeg/web/static/highcharts/js/modules/drilldown.src.js deleted file mode 100644 index 711a00cec..000000000 --- a/pykeg/web/static/highcharts/js/modules/drilldown.src.js +++ /dev/null @@ -1,459 +0,0 @@ -/** - * Highcharts Drilldown plugin - * - * Author: Torstein Honsi - * License: MIT License - * - * Demo: http://jsfiddle.net/highcharts/Vf3yT/ - */ - -/*global HighchartsAdapter*/ -(function (H) { - - "use strict"; - - var noop = function () {}, - defaultOptions = H.getOptions(), - each = H.each, - extend = H.extend, - wrap = H.wrap, - Chart = H.Chart, - seriesTypes = H.seriesTypes, - PieSeries = seriesTypes.pie, - ColumnSeries = seriesTypes.column, - fireEvent = HighchartsAdapter.fireEvent, - inArray = HighchartsAdapter.inArray; - - // Utilities - function tweenColors(startColor, endColor, pos) { - var rgba = [ - Math.round(startColor[0] + (endColor[0] - startColor[0]) * pos), - Math.round(startColor[1] + (endColor[1] - startColor[1]) * pos), - Math.round(startColor[2] + (endColor[2] - startColor[2]) * pos), - startColor[3] + (endColor[3] - startColor[3]) * pos - ]; - return 'rgba(' + rgba.join(',') + ')'; - } - - // Add language - extend(defaultOptions.lang, { - drillUpText: '◁ Back to {series.name}' - }); - defaultOptions.drilldown = { - activeAxisLabelStyle: { - cursor: 'pointer', - color: '#0d233a', - fontWeight: 'bold', - textDecoration: 'underline' - }, - activeDataLabelStyle: { - cursor: 'pointer', - color: '#0d233a', - fontWeight: 'bold', - textDecoration: 'underline' - }, - animation: { - duration: 500 - }, - drillUpButton: { - position: { - align: 'right', - x: -10, - y: 10 - } - // relativeTo: 'plotBox' - // theme - } - }; - - /** - * A general fadeIn method - */ - H.SVGRenderer.prototype.Element.prototype.fadeIn = function (animation) { - this - .attr({ - opacity: 0.1, - visibility: 'visible' - }) - .animate({ - opacity: 1 - }, animation || { - duration: 250 - }); - }; - - // Extend the Chart prototype - Chart.prototype.drilldownLevels = []; - - Chart.prototype.addSeriesAsDrilldown = function (point, ddOptions) { - var oldSeries = point.series, - xAxis = oldSeries.xAxis, - yAxis = oldSeries.yAxis, - newSeries, - color = point.color || oldSeries.color, - pointIndex, - level; - - ddOptions = extend({ - color: color - }, ddOptions); - pointIndex = inArray(point, oldSeries.points); - - level = { - seriesOptions: oldSeries.userOptions, - shapeArgs: point.shapeArgs, - bBox: point.graphic.getBBox(), - color: color, - newSeries: ddOptions, - pointOptions: oldSeries.options.data[pointIndex], - pointIndex: pointIndex, - oldExtremes: { - xMin: xAxis && xAxis.userMin, - xMax: xAxis && xAxis.userMax, - yMin: yAxis && yAxis.userMin, - yMax: yAxis && yAxis.userMax - } - }; - - this.drilldownLevels.push(level); - - newSeries = this.addSeries(ddOptions, false); - if (xAxis) { - xAxis.oldPos = xAxis.pos; - xAxis.userMin = xAxis.userMax = null; - yAxis.userMin = yAxis.userMax = null; - } - - // Run fancy cross-animation on supported and equal types - if (oldSeries.type === newSeries.type) { - newSeries.animate = newSeries.animateDrilldown || noop; - newSeries.options.animation = true; - } - - oldSeries.remove(false); - - this.redraw(); - this.showDrillUpButton(); - }; - - Chart.prototype.getDrilldownBackText = function () { - var lastLevel = this.drilldownLevels[this.drilldownLevels.length - 1]; - - return this.options.lang.drillUpText.replace('{series.name}', lastLevel.seriesOptions.name); - - }; - - Chart.prototype.showDrillUpButton = function () { - var chart = this, - backText = this.getDrilldownBackText(), - buttonOptions = chart.options.drilldown.drillUpButton, - attr, - states; - - - if (!this.drillUpButton) { - attr = buttonOptions.theme; - states = attr && attr.states; - - this.drillUpButton = this.renderer.button( - backText, - null, - null, - function () { - chart.drillUp(); - }, - attr, - states && states.hover, - states && states.select - ) - .attr({ - align: buttonOptions.position.align, - zIndex: 9 - }) - .add() - .align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox'); - } else { - this.drillUpButton.attr({ - text: backText - }) - .align(); - } - }; - - Chart.prototype.drillUp = function () { - var chart = this, - level = chart.drilldownLevels.pop(), - oldSeries = chart.series[0], - oldExtremes = level.oldExtremes, - newSeries = chart.addSeries(level.seriesOptions, false); - - fireEvent(chart, 'drillup', { seriesOptions: level.seriesOptions }); - - if (newSeries.type === oldSeries.type) { - newSeries.drilldownLevel = level; - newSeries.animate = newSeries.animateDrillupTo || noop; - newSeries.options.animation = true; - - if (oldSeries.animateDrillupFrom) { - oldSeries.animateDrillupFrom(level); - } - } - - oldSeries.remove(false); - - // Reset the zoom level of the upper series - if (newSeries.xAxis) { - newSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false); - newSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false); - } - - - this.redraw(); - - if (this.drilldownLevels.length === 0) { - this.drillUpButton = this.drillUpButton.destroy(); - } else { - this.drillUpButton.attr({ - text: this.getDrilldownBackText() - }) - .align(); - } - }; - - PieSeries.prototype.animateDrilldown = function (init) { - var level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1], - animationOptions = this.chart.options.drilldown.animation, - animateFrom = level.shapeArgs, - start = animateFrom.start, - angle = animateFrom.end - start, - startAngle = angle / this.points.length, - startColor = H.Color(level.color).rgba; - - if (!init) { - each(this.points, function (point, i) { - var endColor = H.Color(point.color).rgba; - - /*jslint unparam: true*/ - point.graphic - .attr(H.merge(animateFrom, { - start: start + i * startAngle, - end: start + (i + 1) * startAngle - })) - .animate(point.shapeArgs, H.merge(animationOptions, { - step: function (val, fx) { - if (fx.prop === 'start') { - this.attr({ - fill: tweenColors(startColor, endColor, fx.pos) - }); - } - } - })); - /*jslint unparam: false*/ - }); - } - }; - - - /** - * When drilling up, keep the upper series invisible until the lower series has - * moved into place - */ - PieSeries.prototype.animateDrillupTo = - ColumnSeries.prototype.animateDrillupTo = function (init) { - if (!init) { - var newSeries = this, - level = newSeries.drilldownLevel; - - each(this.points, function (point) { - point.graphic.hide(); - if (point.dataLabel) { - point.dataLabel.hide(); - } - if (point.connector) { - point.connector.hide(); - } - }); - - - // Do dummy animation on first point to get to complete - setTimeout(function () { - each(newSeries.points, function (point, i) { - // Fade in other points - var verb = i === level.pointIndex ? 'show' : 'fadeIn'; - point.graphic[verb](); - if (point.dataLabel) { - point.dataLabel[verb](); - } - if (point.connector) { - point.connector[verb](); - } - }); - }, Math.max(this.chart.options.drilldown.animation.duration - 50, 0)); - - // Reset - this.animate = noop; - } - - }; - - ColumnSeries.prototype.animateDrilldown = function (init) { - var animateFrom = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1].shapeArgs, - animationOptions = this.chart.options.drilldown.animation; - - if (!init) { - - animateFrom.x += (this.xAxis.oldPos - this.xAxis.pos); - - each(this.points, function (point) { - point.graphic - .attr(animateFrom) - .animate(point.shapeArgs, animationOptions); - if (point.dataLabel) { - point.dataLabel.fadeIn(animationOptions); - } - }); - } - - }; - - /** - * When drilling up, pull out the individual point graphics from the lower series - * and animate them into the origin point in the upper series. - */ - ColumnSeries.prototype.animateDrillupFrom = - PieSeries.prototype.animateDrillupFrom = - function (level) { - var animationOptions = this.chart.options.drilldown.animation, - group = this.group; - - delete this.group; - each(this.points, function (point) { - var graphic = point.graphic, - startColor = H.Color(point.color).rgba; - - delete point.graphic; - - /*jslint unparam: true*/ - graphic.animate(level.shapeArgs, H.merge(animationOptions, { - - step: function (val, fx) { - if (fx.prop === 'start') { - this.attr({ - fill: tweenColors(startColor, H.Color(level.color).rgba, fx.pos) - }); - } - }, - complete: function () { - graphic.destroy(); - if (group) { - group = group.destroy(); - } - } - })); - /*jslint unparam: false*/ - }); - }; - - H.Point.prototype.doDrilldown = function () { - var series = this.series, - chart = series.chart, - drilldown = chart.options.drilldown, - i = (drilldown.series || []).length, - seriesOptions; - - while (i-- && !seriesOptions) { - if (drilldown.series[i].id === this.drilldown) { - seriesOptions = drilldown.series[i]; - } - } - - // Fire the event. If seriesOptions is undefined, the implementer can check for - // seriesOptions, and call addSeriesAsDrilldown async if necessary. - fireEvent(chart, 'drilldown', { - point: this, - seriesOptions: seriesOptions - }); - - if (seriesOptions) { - chart.addSeriesAsDrilldown(this, seriesOptions); - } - - }; - - wrap(H.Point.prototype, 'init', function (proceed, series, options, x) { - var point = proceed.call(this, series, options, x), - chart = series.chart, - tick = series.xAxis && series.xAxis.ticks[x], - tickLabel = tick && tick.label; - - if (point.drilldown) { - - // Add the click event to the point label - H.addEvent(point, 'click', function () { - point.doDrilldown(); - }); - - // Make axis labels clickable - if (tickLabel) { - if (!tickLabel._basicStyle) { - tickLabel._basicStyle = tickLabel.element.getAttribute('style'); - } - tickLabel - .addClass('highcharts-drilldown-axis-label') - .css(chart.options.drilldown.activeAxisLabelStyle) - .on('click', function () { - if (point.doDrilldown) { - point.doDrilldown(); - } - }); - - } - } else if (tickLabel && tickLabel._basicStyle) { - tickLabel.element.setAttribute('style', tickLabel._basicStyle); - } - - return point; - }); - - wrap(H.Series.prototype, 'drawDataLabels', function (proceed) { - var css = this.chart.options.drilldown.activeDataLabelStyle; - - proceed.call(this); - - each(this.points, function (point) { - if (point.drilldown && point.dataLabel) { - point.dataLabel - .attr({ - 'class': 'highcharts-drilldown-data-label' - }) - .css(css) - .on('click', function () { - point.doDrilldown(); - }); - } - }); - }); - - // Mark the trackers with a pointer - ColumnSeries.prototype.supportsDrilldown = true; - PieSeries.prototype.supportsDrilldown = true; - var type, - drawTrackerWrapper = function (proceed) { - proceed.call(this); - each(this.points, function (point) { - if (point.drilldown && point.graphic) { - point.graphic - .attr({ - 'class': 'highcharts-drilldown-point' - }) - .css({ cursor: 'pointer' }); - } - }); - }; - for (type in seriesTypes) { - if (seriesTypes[type].prototype.supportsDrilldown) { - wrap(seriesTypes[type].prototype, 'drawTracker', drawTrackerWrapper); - } - } - -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/modules/exporting.js b/pykeg/web/static/highcharts/js/modules/exporting.js deleted file mode 100644 index 471c38a95..000000000 --- a/pykeg/web/static/highcharts/js/modules/exporting.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - Exporting module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(f){var A=f.Chart,t=f.addEvent,B=f.removeEvent,l=f.createElement,o=f.discardElement,v=f.css,k=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,C=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,s=f.getOptions(),y;p(s.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});s.navigation={menuStyle:{border:"1px solid #A0A0A0", -background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:E?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};s.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu", -symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(b,a,d){var c,b=l("form",k({method:"post", -action:b,enctype:"multipart/form-data"},d),{display:"none"},j.body);for(c in a)l("input",{type:"hidden",name:c,value:a[c]},null,b);b.submit();o(b)};p(A.prototype,{getSVG:function(b){var a=this,d,c,z,h,g=k(a.options,b);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};b=l("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},j.body);c=a.renderTo.style.width;h=a.renderTo.style.height;c=g.exporting.sourceWidth||g.chart.width|| -/px$/.test(c)&&parseInt(c,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:b,forExport:!0,width:c,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=k(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r(["xAxis","yAxis"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&& -g.setExtremes(h,f,!0,!1)})});c=d.container.innerHTML;g=null;d.destroy();o(b);c=c.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ href=/g," xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/ /g," ").replace(/­/g,"­").replace(/<IMG /g,"<image ").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g, -'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});return c=c.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'")},exportChart:function(b,a){var b=b||{},d=this.options.exporting,d=this.getSVG(k({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:b.sourceWidth|| -d.sourceWidth,sourceHeight:b.sourceHeight||d.sourceHeight}})),b=k(this.options.exporting,b);f.post(b.url,{filename:b.filename||"chart",type:b.type,width:b.width||0,scale:b.scale||2,svg:d},b.formAttributes)},print:function(){var b=this,a=b.container,d=[],c=a.parentNode,f=j.body,h=f.childNodes;if(!b.isPrinting)b.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display="none"}),f.appendChild(a),C.focus(),C.print(),setTimeout(function(){c.appendChild(a);r(h,function(a,b){if(a.nodeType=== -1)a.style.display=d[b]});b.isPrinting=!1},1E3)},contextMenu:function(b,a,d,c,f,h,g){var e=this,k=e.options.navigation,q=k.menuItemStyle,m=e.chartWidth,n=e.chartHeight,j="cache-"+b,i=e[j],u=D(f,h),w,x,o,s=function(a){e.pointer.inClass(a.target,b)||x()};if(!i)e[j]=i=l("div",{className:b},{position:"absolute",zIndex:1E3,padding:u+"px"},e.container),w=l("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},k.menuStyle),i),x=function(){v(i,{display:"none"}); -g&&g.setState(0);e.openMenu=!1},t(i,"mouseleave",function(){o=setTimeout(x,500)}),t(i,"mouseenter",function(){clearTimeout(o)}),t(document,"mouseup",s),t(e,"destroy",function(){B(document,"mouseup",s)}),r(a,function(a){if(a){var b=a.separator?l("hr",null,null,w):l("div",{onmouseover:function(){v(this,k.menuItemHoverStyle)},onmouseout:function(){v(this,q)},onclick:function(){x();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:"pointer"},q),w);e.exportDivElements.push(b)}}), -e.exportDivElements.push(w,i),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:"block"};d+e.exportMenuWidth>m?a.right=m-d-f-u+"px":a.left=d-u+"px";c+h+e.exportMenuHeight>n&&g.alignOptions.verticalAlign!=="top"?a.bottom=n-c-u+"px":a.top=c+h-u+"px";v(i,a);e.openMenu=!0},addButton:function(b){var a=this,d=a.renderer,c=k(a.options.navigation.buttonOptions,b),j=c.onclick,h=c.menuItems,g,e,l={stroke:c.symbolStroke,fill:c.symbolFill},q=c.symbolSize||12;if(!a.btnCount)a.btnCount= -0;if(!a.exportDivElements)a.exportDivElements=[],a.exportSVGElements=[];if(c.enabled!==!1){var m=c.theme,n=m.states,o=n&&n.hover,n=n&&n.select,i;delete m.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});c.text&&c.symbol?m.paddingLeft=f.pick(m.paddingLeft,25):c.text||p(m,{width:c.width,height:c.height,padding:0});e=d.button(c.text,0,0,i,m,o,n).attr({title:a.options.lang[c._titleKey],"stroke-linecap":"round"}); -e.menuClassName=b.menuClassName||"highcharts-menu-"+a.btnCount++;c.symbol&&(g=d.symbol(c.symbol,c.symbolX-q/2,c.symbolY-q/2,q,q).attr(p(l,{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(c,{width:e.width,x:f.pick(c.x,y)}),!0,"spacingBox");y+=(e.width+c.buttonSpacing)*(c.align==="right"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(b){var b=b.target,a,d;for(a=0;a<b.exportSVGElements.length;a++)if(d=b.exportSVGElements[a])d.onclick=d.ontouchstart=null,b.exportSVGElements[a]= -d.destroy();for(a=0;a<b.exportDivElements.length;a++)d=b.exportDivElements[a],B(d,"mouseleave"),b.exportDivElements[a]=d.onmouseout=d.onmouseover=d.ontouchstart=d.onclick=null,o(d)}});F.menu=function(b,a,d,c){return["M",b,a+2.5,"L",b+d,a+2.5,"M",b,a+c/2+0.5,"L",b+d,a+c/2+0.5,"M",b,a+c-1.5,"L",b+d,a+c-1.5]};A.prototype.callbacks.push(function(b){var a,d=b.options.exporting,c=d.buttons;y=0;if(d.enabled!==!1){for(a in c)b.addButton(c[a]);t(b,"destroy",b.destroyExport)}})})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/exporting.src.js b/pykeg/web/static/highcharts/js/modules/exporting.src.js deleted file mode 100644 index 1c36670db..000000000 --- a/pykeg/web/static/highcharts/js/modules/exporting.src.js +++ /dev/null @@ -1,715 +0,0 @@ -/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * Exporting module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Highcharts, document, window, Math, setTimeout */ - -(function (Highcharts) { // encapsulate - -// create shortcuts -var Chart = Highcharts.Chart, - addEvent = Highcharts.addEvent, - removeEvent = Highcharts.removeEvent, - createElement = Highcharts.createElement, - discardElement = Highcharts.discardElement, - css = Highcharts.css, - merge = Highcharts.merge, - each = Highcharts.each, - extend = Highcharts.extend, - math = Math, - mathMax = math.max, - doc = document, - win = window, - isTouchDevice = Highcharts.isTouchDevice, - M = 'M', - L = 'L', - DIV = 'div', - HIDDEN = 'hidden', - NONE = 'none', - PREFIX = 'highcharts-', - ABSOLUTE = 'absolute', - PX = 'px', - UNDEFINED, - symbols = Highcharts.Renderer.prototype.symbols, - defaultOptions = Highcharts.getOptions(), - buttonOffset; - - // Add language - extend(defaultOptions.lang, { - printChart: 'Print chart', - downloadPNG: 'Download PNG image', - downloadJPEG: 'Download JPEG image', - downloadPDF: 'Download PDF document', - downloadSVG: 'Download SVG vector image', - contextButtonTitle: 'Chart context menu' - }); - -// Buttons and menus are collected in a separate config option set called 'navigation'. -// This can be extended later to add control buttons like zoom and pan right click menus. -defaultOptions.navigation = { - menuStyle: { - border: '1px solid #A0A0A0', - background: '#FFFFFF', - padding: '5px 0' - }, - menuItemStyle: { - padding: '0 10px', - background: NONE, - color: '#303030', - fontSize: isTouchDevice ? '14px' : '11px' - }, - menuItemHoverStyle: { - background: '#4572A5', - color: '#FFFFFF' - }, - - buttonOptions: { - symbolFill: '#E0E0E0', - symbolSize: 14, - symbolStroke: '#666', - symbolStrokeWidth: 3, - symbolX: 12.5, - symbolY: 10.5, - align: 'right', - buttonSpacing: 3, - height: 22, - // text: null, - theme: { - fill: 'white', // capture hover - stroke: 'none' - }, - verticalAlign: 'top', - width: 24 - } -}; - - - -// Add the export related options -defaultOptions.exporting = { - //enabled: true, - //filename: 'chart', - type: 'image/png', - url: 'http://export.highcharts.com/', - //width: undefined, - //scale: 2 - buttons: { - contextButton: { - menuClassName: PREFIX + 'contextmenu', - //x: -10, - symbol: 'menu', - _titleKey: 'contextButtonTitle', - menuItems: [{ - textKey: 'printChart', - onclick: function () { - this.print(); - } - }, { - separator: true - }, { - textKey: 'downloadPNG', - onclick: function () { - this.exportChart(); - } - }, { - textKey: 'downloadJPEG', - onclick: function () { - this.exportChart({ - type: 'image/jpeg' - }); - } - }, { - textKey: 'downloadPDF', - onclick: function () { - this.exportChart({ - type: 'application/pdf' - }); - } - }, { - textKey: 'downloadSVG', - onclick: function () { - this.exportChart({ - type: 'image/svg+xml' - }); - } - } - // Enable this block to add "View SVG" to the dropdown menu - /* - ,{ - - text: 'View SVG', - onclick: function () { - var svg = this.getSVG() - .replace(/</g, '\n<') - .replace(/>/g, '>'); - - doc.body.innerHTML = '<pre>' + svg + '</pre>'; - } - } // */ - ] - } - } -}; - -// Add the Highcharts.post utility -Highcharts.post = function (url, data, formAttributes) { - var name, - form; - - // create the form - form = createElement('form', merge({ - method: 'post', - action: url, - enctype: 'multipart/form-data' - }, formAttributes), { - display: NONE - }, doc.body); - - // add the data - for (name in data) { - createElement('input', { - type: HIDDEN, - name: name, - value: data[name] - }, null, form); - } - - // submit - form.submit(); - - // clean up - discardElement(form); -}; - -extend(Chart.prototype, { - - /** - * Return an SVG representation of the chart - * - * @param additionalOptions {Object} Additional chart options for the generated SVG representation - */ - getSVG: function (additionalOptions) { - var chart = this, - chartCopy, - sandbox, - svg, - seriesOptions, - sourceWidth, - sourceHeight, - cssWidth, - cssHeight, - options = merge(chart.options, additionalOptions); // copy the options and add extra options - - // IE compatibility hack for generating SVG content that it doesn't really understand - if (!doc.createElementNS) { - /*jslint unparam: true*//* allow unused parameter ns in function below */ - doc.createElementNS = function (ns, tagName) { - return doc.createElement(tagName); - }; - /*jslint unparam: false*/ - } - - // create a sandbox where a new chart will be generated - sandbox = createElement(DIV, null, { - position: ABSOLUTE, - top: '-9999em', - width: chart.chartWidth + PX, - height: chart.chartHeight + PX - }, doc.body); - - // get the source size - cssWidth = chart.renderTo.style.width; - cssHeight = chart.renderTo.style.height; - sourceWidth = options.exporting.sourceWidth || - options.chart.width || - (/px$/.test(cssWidth) && parseInt(cssWidth, 10)) || - 600; - sourceHeight = options.exporting.sourceHeight || - options.chart.height || - (/px$/.test(cssHeight) && parseInt(cssHeight, 10)) || - 400; - - // override some options - extend(options.chart, { - animation: false, - renderTo: sandbox, - forExport: true, - width: sourceWidth, - height: sourceHeight - }); - options.exporting.enabled = false; // hide buttons in print - - // prepare for replicating the chart - options.series = []; - each(chart.series, function (serie) { - seriesOptions = merge(serie.options, { - animation: false, // turn off animation - showCheckbox: false, - visible: serie.visible - }); - - if (!seriesOptions.isInternal) { // used for the navigator series that has its own option set - options.series.push(seriesOptions); - } - }); - - // generate the chart copy - chartCopy = new Highcharts.Chart(options, chart.callback); - - // reflect axis extremes in the export - each(['xAxis', 'yAxis'], function (axisType) { - each(chart[axisType], function (axis, i) { - var axisCopy = chartCopy[axisType][i], - extremes = axis.getExtremes(), - userMin = extremes.userMin, - userMax = extremes.userMax; - - if (axisCopy && (userMin !== UNDEFINED || userMax !== UNDEFINED)) { - axisCopy.setExtremes(userMin, userMax, true, false); - } - }); - }); - - // get the SVG from the container's innerHTML - svg = chartCopy.container.innerHTML; - - // free up memory - options = null; - chartCopy.destroy(); - discardElement(sandbox); - - // sanitize - svg = svg - .replace(/zIndex="[^"]+"/g, '') - .replace(/isShadow="[^"]+"/g, '') - .replace(/symbolName="[^"]+"/g, '') - .replace(/jQuery[0-9]+="[^"]+"/g, '') - .replace(/url\([^#]+#/g, 'url(#') - .replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ') - .replace(/ href=/g, ' xlink:href=') - .replace(/\n/, ' ') - .replace(/<\/svg>.*?$/, '</svg>') // any HTML added to the container after the SVG (#894) - /* This fails in IE < 8 - .replace(/([0-9]+)\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight - return s2 +'.'+ s3[0]; - })*/ - - // Replace HTML entities, issue #347 - .replace(/ /g, '\u00A0') // no-break space - .replace(/­/g, '\u00AD') // soft hyphen - - // IE specific - .replace(/<IMG /g, '<image ') - .replace(/height=([^" ]+)/g, 'height="$1"') - .replace(/width=([^" ]+)/g, 'width="$1"') - .replace(/hc-svg-href="([^"]+)">/g, 'xlink:href="$1"/>') - .replace(/id=([^" >]+)/g, 'id="$1"') - .replace(/class=([^" >]+)/g, 'class="$1"') - .replace(/ transform /g, ' ') - .replace(/:(path|rect)/g, '$1') - .replace(/style="([^"]+)"/g, function (s) { - return s.toLowerCase(); - }); - - // IE9 beta bugs with innerHTML. Test again with final IE9. - svg = svg.replace(/(url\(#highcharts-[0-9]+)"/g, '$1') - .replace(/"/g, "'"); - - return svg; - }, - - /** - * Submit the SVG representation of the chart to the server - * @param {Object} options Exporting options. Possible members are url, type, width and formAttributes. - * @param {Object} chartOptions Additional chart options for the SVG representation of the chart - */ - exportChart: function (options, chartOptions) { - options = options || {}; - - var chart = this, - chartExportingOptions = chart.options.exporting, - svg = chart.getSVG(merge( - { chart: { borderRadius: 0 } }, - chartExportingOptions.chartOptions, - chartOptions, - { - exporting: { - sourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth, - sourceHeight: options.sourceHeight || chartExportingOptions.sourceHeight - } - } - )); - - // merge the options - options = merge(chart.options.exporting, options); - - // do the post - Highcharts.post(options.url, { - filename: options.filename || 'chart', - type: options.type, - width: options.width || 0, // IE8 fails to post undefined correctly, so use 0 - scale: options.scale || 2, - svg: svg - }, options.formAttributes); - - }, - - /** - * Print the chart - */ - print: function () { - - var chart = this, - container = chart.container, - origDisplay = [], - origParent = container.parentNode, - body = doc.body, - childNodes = body.childNodes; - - if (chart.isPrinting) { // block the button while in printing mode - return; - } - - chart.isPrinting = true; - - // hide all body content - each(childNodes, function (node, i) { - if (node.nodeType === 1) { - origDisplay[i] = node.style.display; - node.style.display = NONE; - } - }); - - // pull out the chart - body.appendChild(container); - - // print - win.focus(); // #1510 - win.print(); - - // allow the browser to prepare before reverting - setTimeout(function () { - - // put the chart back in - origParent.appendChild(container); - - // restore all body content - each(childNodes, function (node, i) { - if (node.nodeType === 1) { - node.style.display = origDisplay[i]; - } - }); - - chart.isPrinting = false; - - }, 1000); - - }, - - /** - * Display a popup menu for choosing the export type - * - * @param {String} className An identifier for the menu - * @param {Array} items A collection with text and onclicks for the items - * @param {Number} x The x position of the opener button - * @param {Number} y The y position of the opener button - * @param {Number} width The width of the opener button - * @param {Number} height The height of the opener button - */ - contextMenu: function (className, items, x, y, width, height, button) { - var chart = this, - navOptions = chart.options.navigation, - menuItemStyle = navOptions.menuItemStyle, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - cacheName = 'cache-' + className, - menu = chart[cacheName], - menuPadding = mathMax(width, height), // for mouse leave detection - boxShadow = '3px 3px 10px #888', - innerMenu, - hide, - hideTimer, - menuStyle, - docMouseUpHandler = function (e) { - if (!chart.pointer.inClass(e.target, className)) { - hide(); - } - }; - - // create the menu only the first time - if (!menu) { - - // create a HTML element above the SVG - chart[cacheName] = menu = createElement(DIV, { - className: className - }, { - position: ABSOLUTE, - zIndex: 1000, - padding: menuPadding + PX - }, chart.container); - - innerMenu = createElement(DIV, null, - extend({ - MozBoxShadow: boxShadow, - WebkitBoxShadow: boxShadow, - boxShadow: boxShadow - }, navOptions.menuStyle), menu); - - // hide on mouse out - hide = function () { - css(menu, { display: NONE }); - if (button) { - button.setState(0); - } - chart.openMenu = false; - }; - - // Hide the menu some time after mouse leave (#1357) - addEvent(menu, 'mouseleave', function () { - hideTimer = setTimeout(hide, 500); - }); - addEvent(menu, 'mouseenter', function () { - clearTimeout(hideTimer); - }); - - - // Hide it on clicking or touching outside the menu (#2258, #2335, #2407) - addEvent(document, 'mouseup', docMouseUpHandler); - addEvent(chart, 'destroy', function () { - removeEvent(document, 'mouseup', docMouseUpHandler); - }); - - - // create the items - each(items, function (item) { - if (item) { - var element = item.separator ? - createElement('hr', null, null, innerMenu) : - createElement(DIV, { - onmouseover: function () { - css(this, navOptions.menuItemHoverStyle); - }, - onmouseout: function () { - css(this, menuItemStyle); - }, - onclick: function () { - hide(); - item.onclick.apply(chart, arguments); - }, - innerHTML: item.text || chart.options.lang[item.textKey] - }, extend({ - cursor: 'pointer' - }, menuItemStyle), innerMenu); - - - // Keep references to menu divs to be able to destroy them - chart.exportDivElements.push(element); - } - }); - - // Keep references to menu and innerMenu div to be able to destroy them - chart.exportDivElements.push(innerMenu, menu); - - chart.exportMenuWidth = menu.offsetWidth; - chart.exportMenuHeight = menu.offsetHeight; - } - - menuStyle = { display: 'block' }; - - // if outside right, right align it - if (x + chart.exportMenuWidth > chartWidth) { - menuStyle.right = (chartWidth - x - width - menuPadding) + PX; - } else { - menuStyle.left = (x - menuPadding) + PX; - } - // if outside bottom, bottom align it - if (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') { - menuStyle.bottom = (chartHeight - y - menuPadding) + PX; - } else { - menuStyle.top = (y + height - menuPadding) + PX; - } - - css(menu, menuStyle); - chart.openMenu = true; - }, - - /** - * Add the export button to the chart - */ - addButton: function (options) { - var chart = this, - renderer = chart.renderer, - btnOptions = merge(chart.options.navigation.buttonOptions, options), - onclick = btnOptions.onclick, - menuItems = btnOptions.menuItems, - symbol, - button, - symbolAttr = { - stroke: btnOptions.symbolStroke, - fill: btnOptions.symbolFill - }, - symbolSize = btnOptions.symbolSize || 12; - if (!chart.btnCount) { - chart.btnCount = 0; - } - - // Keeps references to the button elements - if (!chart.exportDivElements) { - chart.exportDivElements = []; - chart.exportSVGElements = []; - } - - if (btnOptions.enabled === false) { - return; - } - - - var attr = btnOptions.theme, - states = attr.states, - hover = states && states.hover, - select = states && states.select, - callback; - - delete attr.states; - - if (onclick) { - callback = function () { - onclick.apply(chart, arguments); - }; - - } else if (menuItems) { - callback = function () { - chart.contextMenu( - button.menuClassName, - menuItems, - button.translateX, - button.translateY, - button.width, - button.height, - button - ); - button.setState(2); - }; - } - - - if (btnOptions.text && btnOptions.symbol) { - attr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25); - - } else if (!btnOptions.text) { - extend(attr, { - width: btnOptions.width, - height: btnOptions.height, - padding: 0 - }); - } - - button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select) - .attr({ - title: chart.options.lang[btnOptions._titleKey], - 'stroke-linecap': 'round' - }); - button.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++; - - if (btnOptions.symbol) { - symbol = renderer.symbol( - btnOptions.symbol, - btnOptions.symbolX - (symbolSize / 2), - btnOptions.symbolY - (symbolSize / 2), - symbolSize, - symbolSize - ) - .attr(extend(symbolAttr, { - 'stroke-width': btnOptions.symbolStrokeWidth || 1, - zIndex: 1 - })).add(button); - } - - button.add() - .align(extend(btnOptions, { - width: button.width, - x: Highcharts.pick(btnOptions.x, buttonOffset) // #1654 - }), true, 'spacingBox'); - - buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1); - - chart.exportSVGElements.push(button, symbol); - - }, - - /** - * Destroy the buttons. - */ - destroyExport: function (e) { - var chart = e.target, - i, - elem; - - // Destroy the extra buttons added - for (i = 0; i < chart.exportSVGElements.length; i++) { - elem = chart.exportSVGElements[i]; - - // Destroy and null the svg/vml elements - if (elem) { // #1822 - elem.onclick = elem.ontouchstart = null; - chart.exportSVGElements[i] = elem.destroy(); - } - } - - // Destroy the divs for the menu - for (i = 0; i < chart.exportDivElements.length; i++) { - elem = chart.exportDivElements[i]; - - // Remove the event handler - removeEvent(elem, 'mouseleave'); - - // Remove inline events - chart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null; - - // Destroy the div by moving to garbage bin - discardElement(elem); - } - } -}); - - -symbols.menu = function (x, y, width, height) { - var arr = [ - M, x, y + 2.5, - L, x + width, y + 2.5, - M, x, y + height / 2 + 0.5, - L, x + width, y + height / 2 + 0.5, - M, x, y + height - 1.5, - L, x + width, y + height - 1.5 - ]; - return arr; -}; - -// Add the buttons on chart load -Chart.prototype.callbacks.push(function (chart) { - var n, - exportingOptions = chart.options.exporting, - buttons = exportingOptions.buttons; - - buttonOffset = 0; - - if (exportingOptions.enabled !== false) { - - for (n in buttons) { - chart.addButton(buttons[n]); - } - - // Destroy the export elements at chart destroy - addEvent(chart, 'destroy', chart.destroyExport); - } - -}); - - -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/modules/funnel.js b/pykeg/web/static/highcharts/js/modules/funnel.js deleted file mode 100644 index 7a7964dd2..000000000 --- a/pykeg/web/static/highcharts/js/modules/funnel.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - - Highcharts funnel module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(d){var u=d.getOptions().plotOptions,p=d.seriesTypes,D=d.merge,z=function(){},A=d.each;u.funnel=D(u.pie,{center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",dataLabels:{connectorWidth:1,connectorColor:"#606060"},size:!0,states:{select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}}});p.funnel=d.extendClass(p.pie,{type:"funnel",animate:z,translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},g=0,e=this.chart,f=e.plotWidth, -e=e.plotHeight,h=0,c=this.options,C=c.center,b=a(C[0],f),d=a(C[0],e),p=a(c.width,f),i,q,j=a(c.height,e),r=a(c.neckWidth,f),s=a(c.neckHeight,e),v=j-s,a=this.data,w,x,u=c.dataLabels.position==="left"?1:0,y,m,B,n,l,t,o;this.getWidthAt=q=function(k){return k>j-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+ -i;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=["M",y,m,"L",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,"Z");a.shapeType="path";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,"stroke-width":g.borderWidth}).add(a.group)})}, -sortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?"right":"left",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/funnel.src.js b/pykeg/web/static/highcharts/js/modules/funnel.src.js deleted file mode 100644 index ec0e2d1e5..000000000 --- a/pykeg/web/static/highcharts/js/modules/funnel.src.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * @license - * Highcharts funnel module - * - * (c) 2010-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -/*global Highcharts */ -(function (Highcharts) { - -'use strict'; - -// create shortcuts -var defaultOptions = Highcharts.getOptions(), - defaultPlotOptions = defaultOptions.plotOptions, - seriesTypes = Highcharts.seriesTypes, - merge = Highcharts.merge, - noop = function () {}, - each = Highcharts.each; - -// set default options -defaultPlotOptions.funnel = merge(defaultPlotOptions.pie, { - center: ['50%', '50%'], - width: '90%', - neckWidth: '30%', - height: '100%', - neckHeight: '25%', - - dataLabels: { - //position: 'right', - connectorWidth: 1, - connectorColor: '#606060' - }, - size: true, // to avoid adapting to data label size in Pie.drawDataLabels - states: { - select: { - color: '#C0C0C0', - borderColor: '#000000', - shadow: false - } - } -}); - - -seriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, { - - type: 'funnel', - animate: noop, - - /** - * Overrides the pie translate method - */ - translate: function () { - - var - // Get positions - either an integer or a percentage string must be given - getLength = function (length, relativeTo) { - return (/%$/).test(length) ? - relativeTo * parseInt(length, 10) / 100 : - parseInt(length, 10); - }, - - sum = 0, - series = this, - chart = series.chart, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - cumulative = 0, // start at top - options = series.options, - center = options.center, - centerX = getLength(center[0], plotWidth), - centerY = getLength(center[0], plotHeight), - width = getLength(options.width, plotWidth), - tempWidth, - getWidthAt, - height = getLength(options.height, plotHeight), - neckWidth = getLength(options.neckWidth, plotWidth), - neckHeight = getLength(options.neckHeight, plotHeight), - neckY = height - neckHeight, - data = series.data, - path, - fraction, - half = options.dataLabels.position === 'left' ? 1 : 0, - - x1, - y1, - x2, - x3, - y3, - x4, - y5; - - // Return the width at a specific y coordinate - series.getWidthAt = getWidthAt = function (y) { - return y > height - neckHeight || height === neckHeight ? - neckWidth : - neckWidth + (width - neckWidth) * ((height - neckHeight - y) / (height - neckHeight)); - }; - series.getX = function (y, half) { - return centerX + (half ? -1 : 1) * ((getWidthAt(y) / 2) + options.dataLabels.distance); - }; - - // Expose - series.center = [centerX, centerY, height]; - series.centerX = centerX; - - /* - * Individual point coordinate naming: - * - * x1,y1 _________________ x2,y1 - * \ / - * \ / - * \ / - * \ / - * \ / - * x3,y3 _________ x4,y3 - * - * Additional for the base of the neck: - * - * | | - * | | - * | | - * x3,y5 _________ x4,y5 - */ - - - - - // get the total sum - each(data, function (point) { - sum += point.y; - }); - - each(data, function (point) { - // set start and end positions - y5 = null; - fraction = sum ? point.y / sum : 0; - y1 = centerY - height / 2 + cumulative * height; - y3 = y1 + fraction * height; - //tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight)); - tempWidth = getWidthAt(y1); - x1 = centerX - tempWidth / 2; - x2 = x1 + tempWidth; - tempWidth = getWidthAt(y3); - x3 = centerX - tempWidth / 2; - x4 = x3 + tempWidth; - - // the entire point is within the neck - if (y1 > neckY) { - x1 = x3 = centerX - neckWidth / 2; - x2 = x4 = centerX + neckWidth / 2; - - // the base of the neck - } else if (y3 > neckY) { - y5 = y3; - - tempWidth = getWidthAt(neckY); - x3 = centerX - tempWidth / 2; - x4 = x3 + tempWidth; - - y3 = neckY; - } - - // save the path - path = [ - 'M', - x1, y1, - 'L', - x2, y1, - x4, y3 - ]; - if (y5) { - path.push(x4, y5, x3, y5); - } - path.push(x3, y3, 'Z'); - - // prepare for using shared dr - point.shapeType = 'path'; - point.shapeArgs = { d: path }; - - - // for tooltips and data labels - point.percentage = fraction * 100; - point.plotX = centerX; - point.plotY = (y1 + (y5 || y3)) / 2; - - // Placement of tooltips and data labels - point.tooltipPos = [ - centerX, - point.plotY - ]; - - // Slice is a noop on funnel points - point.slice = noop; - - // Mimicking pie data label placement logic - point.half = half; - - cumulative += fraction; - }); - - - series.setTooltipPoints(); - }, - /** - * Draw a single point (wedge) - * @param {Object} point The point object - * @param {Object} color The color of the point - * @param {Number} brightness The brightness relative to the color - */ - drawPoints: function () { - var series = this, - options = series.options, - chart = series.chart, - renderer = chart.renderer; - - each(series.data, function (point) { - - var graphic = point.graphic, - shapeArgs = point.shapeArgs; - - if (!graphic) { // Create the shapes - point.graphic = renderer.path(shapeArgs). - attr({ - fill: point.color, - stroke: options.borderColor, - 'stroke-width': options.borderWidth - }). - add(series.group); - - } else { // Update the shapes - graphic.animate(shapeArgs); - } - }); - }, - - /** - * Funnel items don't have angles (#2289) - */ - sortByAngle: noop, - - /** - * Extend the pie data label method - */ - drawDataLabels: function () { - var data = this.data, - labelDistance = this.options.dataLabels.distance, - leftSide, - sign, - point, - i = data.length, - x, - y; - - // In the original pie label anticollision logic, the slots are distributed - // from one labelDistance above to one labelDistance below the pie. In funnels - // we don't want this. - this.center[2] -= 2 * labelDistance; - - // Set the label position array for each point. - while (i--) { - point = data[i]; - leftSide = point.half; - sign = leftSide ? 1 : -1; - y = point.plotY; - x = this.getX(y, leftSide); - - // set the anchor point for data labels - point.labelPos = [ - 0, // first break of connector - y, // a/a - x + (labelDistance - 5) * sign, // second break, right outside point shape - y, // a/a - x + labelDistance * sign, // landing point for connector - y, // a/a - leftSide ? 'right' : 'left', // alignment - 0 // center angle - ]; - } - - seriesTypes.pie.prototype.drawDataLabels.call(this); - } - -}); - - -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/modules/heatmap.js b/pykeg/web/static/highcharts/js/modules/heatmap.js deleted file mode 100644 index 889dd36fa..000000000 --- a/pykeg/web/static/highcharts/js/modules/heatmap.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(a){var c=a.seriesTypes,i=a.each;c.heatmap=a.extendClass(c.map,{useMapGeometry:!1,pointArrayMap:["y","value"],init:function(){c.map.prototype.init.apply(this,arguments);this.pointRange=this.options.colsize||1},translate:function(){var a=this.options,f=this.xAxis,c=this.yAxis;this.generatePoints();i(this.points,function(b){var d=(a.colsize||1)/2,e=(a.rowsize||1)/2,g=Math.round(f.len-f.translate(b.x-d,0,1,0,1)),d=Math.round(f.len-f.translate(b.x+d,0,1,0,1)),h=Math.round(c.translate(b.y-e,0, -1,0,1)),e=Math.round(c.translate(b.y+e,0,1,0,1));b.plotY=1;b.shapeType="rect";b.shapeArgs={x:Math.min(g,d),y:Math.min(h,e),width:Math.abs(d-g),height:Math.abs(e-h)}});this.pointRange=a.colsize||1;this.translateColors()},animate:function(){},getBox:function(){},getExtremes:function(){a.Series.prototype.getExtremes.call(this,this.valueData);this.valueMin=this.dataMin;this.valueMax=this.dataMax;a.Series.prototype.getExtremes.call(this)}})})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/heatmap.src.js b/pykeg/web/static/highcharts/js/modules/heatmap.src.js deleted file mode 100644 index 9f39e9e99..000000000 --- a/pykeg/web/static/highcharts/js/modules/heatmap.src.js +++ /dev/null @@ -1,60 +0,0 @@ -(function (H) { - var seriesTypes = H.seriesTypes, - each = H.each; - - seriesTypes.heatmap = H.extendClass(seriesTypes.map, { - useMapGeometry: false, - pointArrayMap: ['y', 'value'], - init: function () { - seriesTypes.map.prototype.init.apply(this, arguments); - this.pointRange = this.options.colsize || 1; - // TODO: similar logic for the Y axis - }, - translate: function () { - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis; - - series.generatePoints(); - - each(series.points, function (point) { - var xPad = (options.colsize || 1) / 2, - yPad = (options.rowsize || 1) / 2, - x1 = Math.round(xAxis.len - xAxis.translate(point.x - xPad, 0, 1, 0, 1)), - x2 = Math.round(xAxis.len - xAxis.translate(point.x + xPad, 0, 1, 0, 1)), - y1 = Math.round(yAxis.translate(point.y - yPad, 0, 1, 0, 1)), - y2 = Math.round(yAxis.translate(point.y + yPad, 0, 1, 0, 1)); - - - point.plotY = 1; // Pass test in Column.drawPoints - - point.shapeType = 'rect'; - point.shapeArgs = { - x: Math.min(x1, x2), - y: Math.min(y1, y2), - width: Math.abs(x2 - x1), - height: Math.abs(y2 - y1) - }; - }); - - series.pointRange = options.colsize || 1; - series.translateColors(); - }, - - animate: function () {}, - getBox: function () {}, - - getExtremes: function () { - // Get the extremes from the value data - H.Series.prototype.getExtremes.call(this, this.valueData); - this.valueMin = this.dataMin; - this.valueMax = this.dataMax; - - // Get the extremes from the y data - H.Series.prototype.getExtremes.call(this); - } - - }); - -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/modules/map.js b/pykeg/web/static/highcharts/js/modules/map.js deleted file mode 100644 index a9df0bcc0..000000000 --- a/pykeg/web/static/highcharts/js/modules/map.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - Map plugin v0.2 for Highcharts - - (c) 2011-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(i){function A(a,b,d){for(var c=4,e,f=[];c--;)e=b.rgba[c]+(a.rgba[c]-b.rgba[c])*(1-d),f[c]=c===3?e:Math.round(e);return"rgba("+f.join(",")+")"}function E(a,b,d,c,e,f,g,h,m){a=a["stroke-width"]%2/2;b-=a;d-=a;return["M",b+f,d,"L",b+c-g,d,"C",b+c-g/2,d,b+c,d+g/2,b+c,d+g,"L",b+c,d+e-h,"C",b+c,d+e-h/2,b+c-h/2,d+e,b+c-h,d+e,"L",b+m,d+e,"C",b+m/2,d+e,b,d+e-m/2,b,d+e-m,"L",b,d+f,"C",b,d+f/2,b+f/2,d,b+f,d,"Z"]}var o=i.Axis,x=i.Chart,v=i.Color,w=i.Point,s=i.Pointer,H=i.Legend,y=i.Series,F=i.VMLRenderer, -B=i.SVGRenderer.prototype.symbols,l=i.each,r=i.extend,t=i.extendClass,n=i.merge,j=i.pick,G=i.numberFormat,C=i.getOptions(),k=i.seriesTypes,p=C.plotOptions,q=i.wrap,u=function(){};r(C.lang,{zoomIn:"Zoom in",zoomOut:"Zoom out"});C.mapNavigation={buttonOptions:{alignTo:"plotBox",align:"left",verticalAlign:"top",x:0,width:18,height:18,style:{fontSize:"15px",fontWeight:"bold",textAlign:"center"},theme:{"stroke-width":1}},buttons:{zoomIn:{onclick:function(){this.mapZoom(0.5)},text:"+",y:0},zoomOut:{onclick:function(){this.mapZoom(2)}, -text:"-",y:28}}};i.splitPath=function(a){var b,a=a.replace(/([A-Za-z])/g," $1 "),a=a.replace(/^\s*/,"").replace(/\s*$/,""),a=a.split(/[ ,]+/);for(b=0;b<a.length;b++)/[a-zA-Z]/.test(a[b])||(a[b]=parseFloat(a[b]));return a};i.maps={};q(o.prototype,"getSeriesExtremes",function(a){var b=this.isXAxis,d,c,e=[];b&&l(this.series,function(a,b){if(a.useMapGeometry)e[b]=a.xData,a.xData=[]});a.call(this);if(b)d=j(this.dataMin,Number.MAX_VALUE),c=j(this.dataMax,Number.MIN_VALUE),l(this.series,function(a,b){if(a.useMapGeometry)d= -Math.min(d,j(a.minX,d)),c=Math.max(c,j(a.maxX,d)),a.xData=e[b]}),this.dataMin=d,this.dataMax=c});q(o.prototype,"setAxisTranslation",function(a){var b=this.chart,d=b.plotWidth/b.plotHeight,c=b.xAxis[0];a.call(this);if(b.options.chart.preserveAspectRatio&&this.coll==="yAxis"&&c.transA!==void 0&&(this.transA=c.transA=Math.min(this.transA,c.transA),a=b.mapRatio=d/((c.max-c.min)/(this.max-this.min)),c=a<1?this:c,a=(c.max-c.min)*c.transA,c.pixelPadding=c.len-a,c.minPixelPadding=c.pixelPadding/2,a=c.fixTo))a= -a[1]-c.toValue(a[0],!0),a*=c.transA,Math.abs(a)>c.minPixelPadding&&(a=0),c.minPixelPadding-=a});q(o.prototype,"render",function(a){a.call(this);this.fixTo=null});r(s.prototype,{onContainerDblClick:function(a){var b=this.chart,a=this.normalize(a);b.options.mapNavigation.enableDoubleClickZoomTo?b.pointer.inClass(a.target,"highcharts-tracker")&&b.hoverPoint.zoomTo():b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&b.mapZoom(0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY),a.chartX, -a.chartY)},onContainerMouseWheel:function(a){var b=this.chart,d,a=this.normalize(a);d=a.detail||-(a.wheelDelta/120);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&b.mapZoom(d>0?2:0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY),d>0?void 0:a.chartX,d>0?void 0:a.chartY)}});q(s.prototype,"init",function(a,b,d){a.call(this,b,d);if(j(d.mapNavigation.enableTouchZoom,d.mapNavigation.enabled))this.pinchX=this.pinchHor=this.pinchY=this.pinchVert=!0});q(s.prototype,"pinchTranslate",function(a, -b,d,c,e,f,g,h,m){a.call(this,b,d,c,e,f,g,h,m);this.chart.options.chart.type==="map"&&(a=f.scaleX>f.scaleY,this.pinchTranslateDirection(!a,c,e,f,g,h,m,a?f.scaleX:f.scaleY))});var D=i.ColorAxis=function(){this.init.apply(this,arguments)};r(D.prototype,o.prototype);r(D.prototype,{defaultColorAxisOptions:{lineWidth:0,gridLineWidth:1,tickPixelInterval:72,startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},color:"gray",width:0.01},labels:{overflow:"justify"},minColor:"#EFEFFF",maxColor:"#102d4c"}, -init:function(a,b){var d=a.options.legend.layout!=="vertical",c;c=n(this.defaultColorAxisOptions,{side:d?2:1,reversed:!d},b,{isX:d,opposite:!d,showEmpty:!1,title:null});o.prototype.init.call(this,a,c);b.dataClasses&&this.initDataClasses(b);this.isXAxis=!0;this.horiz=d},initDataClasses:function(a){var b=this.chart,d,c=0,e=this.options;this.dataClasses=d=[];l(a.dataClasses,function(f,g){var h,f=n(f);d.push(f);if(!f.color)e.dataClassColor==="category"?(h=b.options.colors,f.color=h[c++],c===h.length&& -(c=0)):f.color=A(v(e.minColor),v(e.maxColor),g/(a.dataClasses.length-1))})},setOptions:function(a){o.prototype.setOptions.call(this,a);this.options.crosshair=this.options.marker;this.stops=a.stops||[[0,this.options.minColor],[1,this.options.maxColor]];l(this.stops,function(a){a.color=v(a[1])});this.coll="colorAxis"},setAxisSize:function(){var a=this.legendSymbol,b=this.chart;if(a)this.left=a.x,this.top=a.y,this.width=a.width,this.height=a.height,this.right=b.chartWidth-this.left-this.width,this.bottom= -b.chartHeight-this.top-this.height,this.len=this.horiz?this.width:this.height,this.pos=this.horiz?this.left:this.top},toColor:function(a,b){var d,c=this.stops,e,f=this.dataClasses,g,h;if(f)for(h=f.length;h--;){if(g=f[h],e=g.from,c=g.to,(e===void 0||a>=e)&&(c===void 0||a<=c)){d=g.color;if(b)b.dataClass=h;break}}else{this.isLog&&(a=this.val2lin(a));d=1-(this.max-a)/(this.max-this.min);for(h=c.length;h--;)if(d>c[h][0])break;e=c[h]||c[h+1];c=c[h+1]||e;d=1-(c[0]-d)/(c[0]-e[0]||1);d=A(e.color,c.color,d)}return d}, -getOffset:function(){var a=this.legendGroup;if(a&&(o.prototype.getOffset.call(this),!this.axisGroup.parentGroup))this.axisGroup.add(a),this.gridGroup.add(a),this.labelGroup.add(a),this.added=!0},setLegendColor:function(){var a,b=this.options;a=this.horiz?[0,0,1,0]:[0,0,0,1];this.legendColor={linearGradient:{x1:a[0],y1:a[1],x2:a[2],y2:a[3]},stops:b.stops||[[0,b.minColor],[1,b.maxColor]]}},drawLegendSymbol:function(a,b){var d=a.padding,c=a.options,e=this.horiz,f=j(c.symbolWidth,e?200:12),g=j(c.symbolHeight, -e?12:200),c=j(c.labelPadding,e?10:30);this.setLegendColor();b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,f,g).attr({zIndex:1}).add(b.legendGroup);b.legendSymbol.getBBox();this.legendItemWidth=f+d+(e?0:c);this.legendItemHeight=g+d+(e?c:0)},setState:u,visible:!0,setVisible:u,getSeriesExtremes:function(){var a;if(this.series.length)a=this.series[0],this.dataMin=a.valueMin,this.dataMax=a.valueMax},drawCrosshair:function(a,b){var d=!this.cross,c=b&&b.plotX,e=b&&b.plotY,f,g=this.pos,h=this.len; -if(b)f=this.toPixels(b.value),f<g?f=g-2:f>g+h&&(f=g+h+2),b.plotX=f,b.plotY=this.len-f,o.prototype.drawCrosshair.call(this,a,b),b.plotX=c,b.plotY=e,!d&&this.cross&&this.cross.attr({fill:this.crosshair.color}).add(this.labelGroup)},getPlotLinePath:function(a,b,d,c,e){return e?this.horiz?["M",e-4,this.top-6,"L",e+4,this.top-6,e,this.top,"Z"]:["M",this.left,e,"L",this.left-6,e+6,this.left-6,e-6,"Z"]:o.prototype.getPlotLinePath.call(this,a,b,d,c)},update:function(a,b){o.prototype.update.call(this,a,b); -this.legendItem&&(this.setLegendColor(),this.chart.legend.colorizeItem(this,!0))},getDataClassLegendSymbols:function(){var a=this,b=this.chart,d=[],c=b.options.legend,e=c.valueDecimals,f=c.valueSuffix||"",g;l(this.dataClasses,function(c,m){var z=!0,j=c.from,k=c.to;g="";j===void 0?g="< ":k===void 0&&(g="> ");j!==void 0&&(g+=G(j,e)+f);j!==void 0&&k!==void 0&&(g+=" - ");k!==void 0&&(g+=G(k,e)+f);d.push(i.extend({chart:b,name:g,options:{},drawLegendSymbol:i.LegendSymbolMixin.drawRectangle,visible:!0, -setState:u,setVisible:function(){z=this.visible=!z;l(a.series,function(a){l(a.points,function(a){a.dataClass===m&&a.setVisible(z)})});b.legend.colorizeItem(this,z)}},c))});return d}});q(H.prototype,"getAllItems",function(a){var b=[],d=this.chart.colorAxis[0];d&&(d.options.dataClasses?b=b.concat(d.getDataClassLegendSymbols()):b.push(d),l(d.series,function(a){a.options.showInLegend=!1}));return b.concat(a.call(this))});r(x.prototype,{renderMapNavigation:function(){var a=this,b=this.options.mapNavigation, -d=b.buttons,c,e,f,g,h=function(){this.handler.call(a)};if(j(b.enableButtons,b.enabled)&&!a.renderer.forExport)for(c in d)if(d.hasOwnProperty(c))f=n(b.buttonOptions,d[c]),e=f.theme,g=e.states,e=a.renderer.button(f.text,0,0,h,e,g&&g.hover,g&&g.select,0,c==="zoomIn"?"topbutton":"bottombutton").attr({width:f.width,height:f.height,title:a.options.lang[c],zIndex:5}).css(f.style).add(),e.handler=f.onclick,e.align(r(f,{width:e.width,height:2*e.height}),null,f.alignTo)},fitToBox:function(a,b){l([["x","width"], -["y","height"]],function(d){var c=d[0],d=d[1];a[c]+a[d]>b[c]+b[d]&&(a[d]>b[d]?(a[d]=b[d],a[c]=b[c]):a[c]=b[c]+b[d]-a[d]);a[d]>b[d]&&(a[d]=b[d]);a[c]<b[c]&&(a[c]=b[c])});return a},mapZoom:function(a,b,d,c,e){var f=this.xAxis[0],g=f.max-f.min,h=j(b,f.min+g/2),m=g*a,g=this.yAxis[0],i=g.max-g.min,k=j(d,g.min+i/2);i*=a;h=this.fitToBox({x:h-m*(c?(c-f.pos)/f.len:0.5),y:k-i*(e?(e-g.pos)/g.len:0.5),width:m,height:i},{x:f.dataMin,y:g.dataMin,width:f.dataMax-f.dataMin,height:g.dataMax-g.dataMin});if(c)f.fixTo= -[c-f.pos,b];if(e)g.fixTo=[e-g.pos,d];a!==void 0?(f.setExtremes(h.x,h.x+h.width,!1),g.setExtremes(h.y,h.y+h.height,!1)):(f.setExtremes(void 0,void 0,!1),g.setExtremes(void 0,void 0,!1));this.redraw()}});q(x.prototype,"getAxes",function(a){var b=this.options.colorAxis;a.call(this);this.colorAxis=[];b&&new D(this,b)});q(x.prototype,"render",function(a){var b=this,d=b.options.mapNavigation;a.call(b);b.renderMapNavigation();(j(d.enableDoubleClickZoom,d.enabled)||d.enableDoubleClickZoomTo)&&i.addEvent(b.container, -"dblclick",function(a){b.pointer.onContainerDblClick(a)});j(d.enableMouseWheelZoom,d.enabled)&&i.addEvent(b.container,document.onmousewheel===void 0?"DOMMouseScroll":"mousewheel",function(a){b.pointer.onContainerMouseWheel(a);return!1})});p.map=n(p.scatter,{allAreas:!0,animation:!1,nullColor:"#F8F8F8",borderColor:"silver",borderWidth:1,marker:null,stickyTracking:!1,dataLabels:{format:"{point.value}",verticalAlign:"middle"},turboThreshold:0,tooltip:{followPointer:!0,pointFormat:"{point.name}: {point.value}<br/>"}, -states:{normal:{animation:!0},hover:{brightness:0.2}}});s=t(w,{applyOptions:function(a,b){var d=w.prototype.applyOptions.call(this,a,b),c=this.series,e=c.options,f=e.joinBy;if(e.mapData)if(e=f?c.getMapData(f,d[f]):e.mapData[d.x]){if(c.xyFromShape)d.x=e._midX,d.y=e._midY;r(d,e)}else d.value=d.value||null;return d},setVisible:function(a){var b=this,d=a?"show":"hide";l(["graphic","dataLabel"],function(a){if(b[a])b[a][d]()})},onMouseOver:function(a){clearTimeout(this.colorInterval);w.prototype.onMouseOver.call(this, -a)},onMouseOut:function(){var a=this,b=+new Date,d=v(a.options.color),c=v(a.pointAttr.hover.fill),e=a.series.options.states.normal.animation,f=e&&(e.duration||500);if(f&&d.rgba.length===4&&c.rgba.length===4&&a.state!=="select")delete a.pointAttr[""].fill,clearTimeout(a.colorInterval),a.colorInterval=setInterval(function(){var e=(new Date-b)/f,h=a.graphic;e>1&&(e=1);h&&h.attr("fill",A(c,d,e));e>=1&&clearTimeout(a.colorInterval)},13);w.prototype.onMouseOut.call(a)},zoomTo:function(){var a=this.series; -a.xAxis.setExtremes(this._minX,this._maxX,!1);a.yAxis.setExtremes(this._minY,this._maxY,!1);a.chart.redraw()}});k.map=t(k.scatter,{type:"map",pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color",dashstyle:"dashStyle"},pointClass:s,pointArrayMap:["value"],axisTypes:["xAxis","yAxis","colorAxis"],optionalAxis:"colorAxis",trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:u,supportsDrilldown:!0,getExtremesFromAll:!0,useMapGeometry:!0,parallelArrays:["x","y", -"value"],getBox:function(a){var b=Number.MIN_VALUE,d=Number.MAX_VALUE,c=Number.MIN_VALUE,e=Number.MAX_VALUE,f;l(a||[],function(a){if(a.path){if(typeof a.path==="string")a.path=i.splitPath(a.path);var h=a.path||[],m=h.length,k=!1,j=Number.MIN_VALUE,l=Number.MAX_VALUE,o=Number.MIN_VALUE,n=Number.MAX_VALUE;if(!a._foundBox){for(;m--;)typeof h[m]==="number"&&!isNaN(h[m])&&(k?(j=Math.max(j,h[m]),l=Math.min(l,h[m])):(o=Math.max(o,h[m]),n=Math.min(n,h[m])),k=!k);a._midX=l+(j-l)*(a.middleX||0.5);a._midY=n+ -(o-n)*(a.middleY||0.5);a._maxX=j;a._minX=l;a._maxY=o;a._minY=n;a._foundBox=!0}b=Math.max(b,a._maxX);d=Math.min(d,a._minX);c=Math.max(c,a._maxY);e=Math.min(e,a._minY);f=!0}});if(f)this.minY=Math.min(e,j(this.minY,Number.MAX_VALUE)),this.maxY=Math.max(c,j(this.maxY,Number.MIN_VALUE)),this.minX=Math.min(d,j(this.minX,Number.MAX_VALUE)),this.maxX=Math.max(b,j(this.maxX,Number.MIN_VALUE))},getExtremes:function(){y.prototype.getExtremes.call(this,this.valueData);this.chart.hasRendered&&this.isDirtyData&& -this.getBox(this.options.data);this.valueMin=this.dataMin;this.valueMax=this.dataMax;this.dataMin=this.minY;this.dataMax=this.maxY},translatePath:function(a){var b=!1,d=this.xAxis,c=this.yAxis,e=d.min,f=d.transA,d=d.minPixelPadding,g=c.min,h=c.transA,c=c.minPixelPadding,i,j=[];if(a)for(i=a.length;i--;)typeof a[i]==="number"?(j[i]=b?(a[i]-e)*f+d:(a[i]-g)*h+c,b=!b):j[i]=a[i];return j},setData:function(a,b){var d=this.options,c=d.mapData,e=d.joinBy,f=[];this.getBox(a);this.getBox(c);d.allAreas&&c&&(a= -a||[],e&&l(a,function(a){f.push(a[e])}),f="|"+f.join("|")+"|",l(c,function(b){(!e||f.indexOf("|"+b[e]+"|")===-1)&&a.push(n(b,{value:null}))}));y.prototype.setData.call(this,a,b)},getMapData:function(a,b){var d=this.options.mapData,c=this.mapMap,e=d.length;if(!c)c=this.mapMap={};if(c[b]!==void 0)return d[c[b]];else if(b!==void 0)for(;e--;)if(d[e][a]===b)return c[b]=e,d[e]},translateColors:function(){var a=this,b=this.options.nullColor,d=this.colorAxis;l(this.data,function(c){var e=c.value;if(e=e=== -null?b:d?d.toColor(e,c):c.color||a.color)c.color=c.options.color=e})},drawGraph:u,drawDataLabels:u,translate:function(){var a=this,b=a.xAxis,d=a.yAxis;a.generatePoints();l(a.data,function(c){c.plotX=b.toPixels(c._midX,!0);c.plotY=d.toPixels(c._midY,!0);if(a.isDirtyData||a.chart.renderer.isVML)c.shapeType="path",c.shapeArgs={d:a.translatePath(c.path),"vector-effect":"non-scaling-stroke"}});a.translateColors()},drawPoints:function(){var a=this.xAxis,b=this.yAxis,d,c=this.group,e=this.chart,f=e.renderer, -g=function(a,b){var c=a.dataMin,e=a.dataMax;return a.len*(1-d)*((a.min-a.minPixelPadding/a.transA-(c-(e-c)*(b-1)/2))/((e-c-a.max+a.min)*b))};if(!this.transformGroup)this.transformGroup=f.g().attr({scaleX:1,scaleY:1}).add(c);this.isDirtyData||f.isVML?(this.group=this.transformGroup,k.column.prototype.drawPoints.apply(this),this.group=c,l(this.points,function(a){e.hasRendered&&a.graphic&&a.graphic.attr("fill",a.options.color)}),this.transA=a.transA):(d=a.transA/this.transA,d>0.99&&d<1.01?(b=a=0,d=1): -(a=g(a,Math.max(1,this.chart.mapRatio)),b=g(b,1/Math.min(1,this.chart.mapRatio))),this.transformGroup.animate({translateX:a,translateY:b,scaleX:d,scaleY:d}));y.prototype.drawDataLabels.call(this)},render:function(){var a=this,b=y.prototype.render;a.chart.renderer.isVML&&a.data.length>3E3?setTimeout(function(){b.call(a)}):b.call(a)},animate:function(a){var b=this.options.animation,d=this.group,c=this.xAxis,e=this.yAxis,f=c.pos,g=e.pos;if(this.chart.renderer.isSVG)b===!0&&(b={duration:1E3}),a?d.attr({translateX:f+ -c.len/2,translateY:g+e.len/2,scaleX:0.001,scaleY:0.001}):(d.animate({translateX:f,translateY:g,scaleX:1,scaleY:1},b),this.animate=null)},animateDrilldown:function(a){var b=this.chart.plotBox,d=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=d.bBox,e=this.chart.options.drilldown.animation;if(!a)a=Math.min(c.width/b.width,c.height/b.height),d.shapeArgs={scaleX:a,scaleY:a,translateX:c.x,translateY:c.y},l(this.points,function(a){a.graphic.attr(d.shapeArgs).animate({scaleX:1,scaleY:1, -translateX:0,translateY:0},e)}),this.animate=null},drawLegendSymbol:i.LegendSymbolMixin.drawRectangle,animateDrillupFrom:function(a){k.column.prototype.animateDrillupFrom.call(this,a)},animateDrillupTo:function(a){k.column.prototype.animateDrillupTo.call(this,a)}});p.mapline=n(p.map,{lineWidth:1,fillColor:"none"});k.mapline=t(k.map,{type:"mapline",pointAttrToOptions:{stroke:"color","stroke-width":"lineWidth",fill:"fillColor"},drawLegendSymbol:k.line.prototype.drawLegendSymbol});p.mappoint=n(p.scatter, -{dataLabels:{enabled:!0,format:"{point.name}",color:"black",style:{textShadow:"0 0 5px white"}}});k.mappoint=t(k.scatter,{type:"mappoint"});if(k.bubble)p.mapbubble=n(p.bubble,{tooltip:{pointFormat:"{point.name}: {point.z}"}}),k.mapbubble=t(k.bubble,{pointClass:t(w,{applyOptions:s.prototype.applyOptions}),xyFromShape:!0,type:"mapbubble",pointArrayMap:["z"],getMapData:k.map.prototype.getMapData,getBox:k.map.prototype.getBox,setData:k.map.prototype.setData});B.topbutton=function(a,b,d,c,e){return E(e, -a,b,d,c,e.r,e.r,0,0)};B.bottombutton=function(a,b,d,c,e){return E(e,a,b,d,c,0,0,e.r,e.r)};i.Renderer===F&&l(["topbutton","bottombutton"],function(a){F.prototype.symbols[a]=B[a]});i.Map=function(a,b){var d={endOnTick:!1,gridLineWidth:0,lineWidth:0,minPadding:0,maxPadding:0,startOnTick:!1,title:null,tickPositions:[]},c;c=a.series;a.series=null;a=n({chart:{panning:"xy",type:"map"},xAxis:d,yAxis:n(d,{reversed:!0})},a,{chart:{inverted:!1,alignTicks:!1,preserveAspectRatio:!0}});a.series=c;return new x(a, -b)}})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/map.src.js b/pykeg/web/static/highcharts/js/modules/map.src.js deleted file mode 100644 index 954aa8d53..000000000 --- a/pykeg/web/static/highcharts/js/modules/map.src.js +++ /dev/null @@ -1,1656 +0,0 @@ -/** - * @license Map plugin v0.2 for Highcharts - * - * (c) 2011-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -/*global HighchartsAdapter*/ -(function (H) { - var UNDEFINED, - Axis = H.Axis, - Chart = H.Chart, - Color = H.Color, - Point = H.Point, - Pointer = H.Pointer, - Legend = H.Legend, - Series = H.Series, - SVGRenderer = H.SVGRenderer, - VMLRenderer = H.VMLRenderer, - - symbols = SVGRenderer.prototype.symbols, - each = H.each, - extend = H.extend, - extendClass = H.extendClass, - merge = H.merge, - pick = H.pick, - numberFormat = H.numberFormat, - defaultOptions = H.getOptions(), - seriesTypes = H.seriesTypes, - plotOptions = defaultOptions.plotOptions, - wrap = H.wrap, - noop = function () {}; - - // Add language - extend(defaultOptions.lang, { - zoomIn: 'Zoom in', - zoomOut: 'Zoom out' - }); - - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color - */ - function tweenColors(from, to, pos) { - var i = 4, - val, - rgba = []; - - while (i--) { - val = to.rgba[i] + (from.rgba[i] - to.rgba[i]) * (1 - pos); - rgba[i] = i === 3 ? val : Math.round(val); // Do not round opacity - } - return 'rgba(' + rgba.join(',') + ')'; - } - - // Set the default map navigation options - defaultOptions.mapNavigation = { - buttonOptions: { - alignTo: 'plotBox', - align: 'left', - verticalAlign: 'top', - x: 0, - width: 18, - height: 18, - style: { - fontSize: '15px', - fontWeight: 'bold', - textAlign: 'center' - }, - theme: { - 'stroke-width': 1 - } - }, - buttons: { - zoomIn: { - onclick: function () { - this.mapZoom(0.5); - }, - text: '+', - y: 0 - }, - zoomOut: { - onclick: function () { - this.mapZoom(2); - }, - text: '-', - y: 28 - } - } - // enabled: false, - // enableButtons: null, // inherit from enabled - // enableTouchZoom: null, // inherit from enabled - // enableDoubleClickZoom: null, // inherit from enabled - // enableDoubleClickZoomTo: false - // enableMouseWheelZoom: null, // inherit from enabled - }; - - /** - * Utility for reading SVG paths directly. - */ - H.splitPath = function (path) { - var i; - - // Move letters apart - path = path.replace(/([A-Za-z])/g, ' $1 '); - // Trim - path = path.replace(/^\s*/, "").replace(/\s*$/, ""); - - // Split on spaces and commas - path = path.split(/[ ,]+/); - - // Parse numbers - for (i = 0; i < path.length; i++) { - if (!/[a-zA-Z]/.test(path[i])) { - path[i] = parseFloat(path[i]); - } - } - return path; - }; - - // A placeholder for map definitions - H.maps = {}; - - /** - * Override to use the extreme coordinates from the SVG shape, not the - * data values - */ - wrap(Axis.prototype, 'getSeriesExtremes', function (proceed) { - var isXAxis = this.isXAxis, - dataMin, - dataMax, - xData = []; - - // Remove the xData array and cache it locally so that the proceed method doesn't use it - if (isXAxis) { - each(this.series, function (series, i) { - if (series.useMapGeometry) { - xData[i] = series.xData; - series.xData = []; - } - }); - } - - // Call base to reach normal cartesian series (like mappoint) - proceed.call(this); - - // Run extremes logic for map and mapline - if (isXAxis) { - dataMin = pick(this.dataMin, Number.MAX_VALUE); - dataMax = pick(this.dataMax, Number.MIN_VALUE); - each(this.series, function (series, i) { - if (series.useMapGeometry) { - dataMin = Math.min(dataMin, pick(series.minX, dataMin)); - dataMax = Math.max(dataMax, pick(series.maxX, dataMin)); - series.xData = xData[i]; // Reset xData array - } - }); - - this.dataMin = dataMin; - this.dataMax = dataMax; - } - }); - - /** - * Override axis translation to make sure the aspect ratio is always kept - */ - wrap(Axis.prototype, 'setAxisTranslation', function (proceed) { - var chart = this.chart, - mapRatio, - plotRatio = chart.plotWidth / chart.plotHeight, - adjustedAxisLength, - xAxis = chart.xAxis[0], - padAxis, - fixTo, - fixDiff; - - - // Run the parent method - proceed.call(this); - - // On Y axis, handle both - if (chart.options.chart.preserveAspectRatio && this.coll === 'yAxis' && xAxis.transA !== UNDEFINED) { - - // Use the same translation for both axes - this.transA = xAxis.transA = Math.min(this.transA, xAxis.transA); - - mapRatio = chart.mapRatio = plotRatio / ((xAxis.max - xAxis.min) / (this.max - this.min)); - - // What axis to pad to put the map in the middle - padAxis = mapRatio < 1 ? this : xAxis; - - // Pad it - adjustedAxisLength = (padAxis.max - padAxis.min) * padAxis.transA; - padAxis.pixelPadding = padAxis.len - adjustedAxisLength; - padAxis.minPixelPadding = padAxis.pixelPadding / 2; - - fixTo = padAxis.fixTo; - if (fixTo) { - fixDiff = fixTo[1] - padAxis.toValue(fixTo[0], true); - fixDiff *= padAxis.transA; - if (Math.abs(fixDiff) > padAxis.minPixelPadding) { // zooming out again, keep within restricted area - fixDiff = 0; - } - padAxis.minPixelPadding -= fixDiff; - - } - } - }); - - /** - * Override Axis.render in order to delete the fixTo prop - */ - wrap(Axis.prototype, 'render', function (proceed) { - proceed.call(this); - this.fixTo = null; - }); - - // Extend the Pointer - extend(Pointer.prototype, { - - /** - * The event handler for the doubleclick event - */ - onContainerDblClick: function (e) { - var chart = this.chart; - - e = this.normalize(e); - - if (chart.options.mapNavigation.enableDoubleClickZoomTo) { - if (chart.pointer.inClass(e.target, 'highcharts-tracker')) { - chart.hoverPoint.zoomTo(); - } - } else if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - chart.mapZoom( - 0.5, - chart.xAxis[0].toValue(e.chartX), - chart.yAxis[0].toValue(e.chartY), - e.chartX, - e.chartY - ); - } - }, - - /** - * The event handler for the mouse scroll event - */ - onContainerMouseWheel: function (e) { - var chart = this.chart, - delta; - - e = this.normalize(e); - - // Firefox uses e.detail, WebKit and IE uses wheelDelta - delta = e.detail || -(e.wheelDelta / 120); - if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - chart.mapZoom( - delta > 0 ? 2 : 1 / 2, - chart.xAxis[0].toValue(e.chartX), - chart.yAxis[0].toValue(e.chartY), - delta > 0 ? undefined : e.chartX, - delta > 0 ? undefined : e.chartY - ); - } - } - }); - - // Implement the pinchType option - wrap(Pointer.prototype, 'init', function (proceed, chart, options) { - - proceed.call(this, chart, options); - - // Pinch status - if (pick(options.mapNavigation.enableTouchZoom, options.mapNavigation.enabled)) { - this.pinchX = this.pinchHor = - this.pinchY = this.pinchVert = true; - } - }); - - // Extend the pinchTranslate method to preserve fixed ratio when zooming - wrap(Pointer.prototype, 'pinchTranslate', function (proceed, zoomHor, zoomVert, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) { - var xBigger; - - proceed.call(this, zoomHor, zoomVert, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - - // Keep ratio - if (this.chart.options.chart.type === 'map') { - xBigger = transform.scaleX > transform.scaleY; - this.pinchTranslateDirection( - !xBigger, - pinchDown, - touches, - transform, - selectionMarker, - clip, - lastValidTouch, - xBigger ? transform.scaleX : transform.scaleY - ); - } - }); - - - - - /** - * The ColorAxis object for inclusion in gradient legends - */ - var ColorAxis = H.ColorAxis = function () { - this.init.apply(this, arguments); - }; - extend(ColorAxis.prototype, Axis.prototype); - extend(ColorAxis.prototype, { - defaultColorAxisOptions: { - lineWidth: 0, - gridLineWidth: 1, - tickPixelInterval: 72, - startOnTick: true, - endOnTick: true, - offset: 0, - marker: { // docs: use another name? - animation: { - duration: 50 - }, - color: 'gray', - width: 0.01 - }, - labels: { - overflow: 'justify' - }, - minColor: '#EFEFFF', - maxColor: '#102d4c' - }, - init: function (chart, userOptions) { - var horiz = chart.options.legend.layout !== 'vertical', - options; - - // Build the options - options = merge(this.defaultColorAxisOptions, { - side: horiz ? 2 : 1, - reversed: !horiz - }, userOptions, { - isX: horiz, - opposite: !horiz, - showEmpty: false, - title: null - }); - - Axis.prototype.init.call(this, chart, options); - - // Base init() pushes it to the xAxis array, now pop it again - //chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop(); - - // Prepare data classes - if (userOptions.dataClasses) { - this.initDataClasses(userOptions); - } - - // Override original axis properties - this.isXAxis = true; - this.horiz = horiz; - }, - - initDataClasses: function (userOptions) { - var chart = this.chart, - dataClasses, - colorCounter = 0, - options = this.options; - this.dataClasses = dataClasses = []; - - each(userOptions.dataClasses, function (dataClass, i) { - var colors; - - dataClass = merge(dataClass); - dataClasses.push(dataClass); - if (!dataClass.color) { - if (options.dataClassColor === 'category') { - colors = chart.options.colors; - dataClass.color = colors[colorCounter++]; - // loop back to zero - if (colorCounter === colors.length) { - colorCounter = 0; - } - } else { - dataClass.color = tweenColors(Color(options.minColor), Color(options.maxColor), i / (userOptions.dataClasses.length - 1)); - } - } - }); - }, - - /** - * Extend the setOptions method to process extreme colors and color - * stops. - */ - setOptions: function (userOptions) { - Axis.prototype.setOptions.call(this, userOptions); - - this.options.crosshair = this.options.marker; - - this.stops = userOptions.stops || [ - [0, this.options.minColor], - [1, this.options.maxColor] - ]; - each(this.stops, function (stop) { - stop.color = Color(stop[1]); - }); - this.coll = 'colorAxis'; - }, - - setAxisSize: function () { - var symbol = this.legendSymbol, - chart = this.chart; - - if (symbol) { - this.left = symbol.x; - this.top = symbol.y; - this.width = symbol.width; - this.height = symbol.height; - this.right = chart.chartWidth - this.left - this.width; - this.bottom = chart.chartHeight - this.top - this.height; - - this.len = this.horiz ? this.width : this.height; - this.pos = this.horiz ? this.left : this.top; - } - }, - - /** - * Translate from a value to a color - */ - toColor: function (value, point) { - var pos, - stops = this.stops, - from, - to, - color, - dataClasses = this.dataClasses, - dataClass, - i; - - if (dataClasses) { - i = dataClasses.length; - while (i--) { - dataClass = dataClasses[i]; - from = dataClass.from; - to = dataClass.to; - if ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) { - color = dataClass.color; - if (point) { - point.dataClass = i; - } - break; - } - } - - } else { - - if (this.isLog) { - value = this.val2lin(value); - } - pos = 1 - ((this.max - value) / (this.max - this.min)); - i = stops.length; - while (i--) { - if (pos > stops[i][0]) { - break; - } - } - from = stops[i] || stops[i + 1]; - to = stops[i + 1] || from; - - // The position within the gradient - pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1); - - color = tweenColors( - from.color, - to.color, - pos - ); - } - return color; - }, - - getOffset: function () { - var group = this.legendGroup; - if (group) { - - Axis.prototype.getOffset.call(this); - - if (!this.axisGroup.parentGroup) { - - // Move the axis elements inside the legend group - this.axisGroup.add(group); - this.gridGroup.add(group); - this.labelGroup.add(group); - - this.added = true; - } - } - }, - - /** - * Create the color gradient - */ - setLegendColor: function () { - var grad, - horiz = this.horiz, - options = this.options; - - grad = horiz ? [0, 0, 1, 0] : [0, 0, 0, 1]; - this.legendColor = { - linearGradient: { x1: grad[0], y1: grad[1], x2: grad[2], y2: grad[3] }, - stops: options.stops || [ - [0, options.minColor], - [1, options.maxColor] - ] - }; - }, - - /** - * The color axis appears inside the legend and has its own legend symbol - */ - drawLegendSymbol: function (legend, item) { - var padding = legend.padding, - legendOptions = legend.options, - horiz = this.horiz, - box, - width = pick(legendOptions.symbolWidth, horiz ? 200 : 12), - height = pick(legendOptions.symbolHeight, horiz ? 12 : 200), - labelPadding = pick(legendOptions.labelPadding, horiz ? 10 : 30); - - this.setLegendColor(); - - // Create the gradient - item.legendSymbol = this.chart.renderer.rect( - 0, - legend.baseline - 11, - width, - height - ).attr({ - zIndex: 1 - }).add(item.legendGroup); - box = item.legendSymbol.getBBox(); - - // Set how much space this legend item takes up - this.legendItemWidth = width + padding + (horiz ? 0 : labelPadding); - this.legendItemHeight = height + padding + (horiz ? labelPadding : 0); - }, - /** - * Fool the legend - */ - setState: noop, - visible: true, - setVisible: noop, - getSeriesExtremes: function () { - var series; - if (this.series.length) { - series = this.series[0]; - this.dataMin = series.valueMin; - this.dataMax = series.valueMax; - } - }, - drawCrosshair: function (e, point) { - var newCross = !this.cross, - plotX = point && point.plotX, - plotY = point && point.plotY, - crossPos, - axisPos = this.pos, - axisLen = this.len; - - if (point) { - crossPos = this.toPixels(point.value); - if (crossPos < axisPos) { - crossPos = axisPos - 2; - } else if (crossPos > axisPos + axisLen) { - crossPos = axisPos + axisLen + 2; - } - - point.plotX = crossPos; - point.plotY = this.len - crossPos; - Axis.prototype.drawCrosshair.call(this, e, point); - point.plotX = plotX; - point.plotY = plotY; - - if (!newCross && this.cross) { - this.cross - .attr({ - fill: this.crosshair.color - }) - .add(this.labelGroup); - } - } - }, - getPlotLinePath: function (a, b, c, d, pos) { - if (pos) { // crosshairs only - return this.horiz ? - ['M', pos - 4, this.top - 6, 'L', pos + 4, this.top - 6, pos, this.top, 'Z'] : - ['M', this.left, pos, 'L', this.left - 6, pos + 6, this.left - 6, pos - 6, 'Z']; - } else { - return Axis.prototype.getPlotLinePath.call(this, a, b, c, d); - } - }, - - update: function (newOptions, redraw) { - Axis.prototype.update.call(this, newOptions, redraw); - if (this.legendItem) { - this.setLegendColor(); - this.chart.legend.colorizeItem(this, true); - } - }, - - /** - * Get the legend item symbols for data classes - */ - getDataClassLegendSymbols: function () { - var axis = this, - chart = this.chart, - legendItems = [], - legendOptions = chart.options.legend, - valueDecimals = legendOptions.valueDecimals, - valueSuffix = legendOptions.valueSuffix || '', - name; - - each(this.dataClasses, function (dataClass, i) { - var vis = true, - from = dataClass.from, - to = dataClass.to; - - // Assemble the default name. This can be overridden by legend.options.labelFormatter - name = ''; - if (from === UNDEFINED) { - name = '< '; - } else if (to === UNDEFINED) { - name = '> '; - } - if (from !== UNDEFINED) { - name += numberFormat(from, valueDecimals) + valueSuffix; - } - if (from !== UNDEFINED && to !== UNDEFINED) { - name += ' - '; - } - if (to !== UNDEFINED) { - name += numberFormat(to, valueDecimals) + valueSuffix; - } - - // Add a mock object to the legend items - legendItems.push(H.extend({ - chart: chart, - name: name, - options: {}, - drawLegendSymbol: H.LegendSymbolMixin.drawRectangle, - visible: true, - setState: noop, - setVisible: function () { - vis = this.visible = !vis; - each(axis.series, function (series) { - each(series.points, function (point) { - if (point.dataClass === i) { - point.setVisible(vis); - } - }); - }); - - chart.legend.colorizeItem(this, vis); - } - }, dataClass)); - }); - return legendItems; - } - }); - - /** - * Wrap the legend getAllItems method to add the color axis. This also removes the - * axis' own series to prevent them from showing up individually. - */ - wrap(Legend.prototype, 'getAllItems', function (proceed) { - var allItems = [], - colorAxis = this.chart.colorAxis[0]; - - if (colorAxis) { - - // Data classes - if (colorAxis.options.dataClasses) { - allItems = allItems.concat(colorAxis.getDataClassLegendSymbols()); - // Gradient legend - } else { - // Add this axis on top - allItems.push(colorAxis); - } - - // Don't add the color axis' series - each(colorAxis.series, function (series) { - series.options.showInLegend = false; - }); - } - - return allItems.concat(proceed.call(this)); - }); - - - // Add events to the Chart object itself - extend(Chart.prototype, { - renderMapNavigation: function () { - var chart = this, - options = this.options.mapNavigation, - buttons = options.buttons, - n, - button, - buttonOptions, - attr, - states, - outerHandler = function () { - this.handler.call(chart); - }; - - if (pick(options.enableButtons, options.enabled) && !chart.renderer.forExport) { - for (n in buttons) { - if (buttons.hasOwnProperty(n)) { - buttonOptions = merge(options.buttonOptions, buttons[n]); - attr = buttonOptions.theme; - states = attr.states; - button = chart.renderer.button( - buttonOptions.text, - 0, - 0, - outerHandler, - attr, - states && states.hover, - states && states.select, - 0, - n === 'zoomIn' ? 'topbutton' : 'bottombutton' - ) - .attr({ - width: buttonOptions.width, - height: buttonOptions.height, - title: chart.options.lang[n], - zIndex: 5 - }) - .css(buttonOptions.style) - .add(); - button.handler = buttonOptions.onclick; - button.align(extend(buttonOptions, { width: button.width, height: 2 * button.height }), null, buttonOptions.alignTo); - } - } - } - }, - - /** - * Fit an inner box to an outer. If the inner box overflows left or right, align it to the sides of the - * outer. If it overflows both sides, fit it within the outer. This is a pattern that occurs more places - * in Highcharts, perhaps it should be elevated to a common utility function. - */ - fitToBox: function (inner, outer) { - each([['x', 'width'], ['y', 'height']], function (dim) { - var pos = dim[0], - size = dim[1]; - - if (inner[pos] + inner[size] > outer[pos] + outer[size]) { // right overflow - if (inner[size] > outer[size]) { // the general size is greater, fit fully to outer - inner[size] = outer[size]; - inner[pos] = outer[pos]; - } else { // align right - inner[pos] = outer[pos] + outer[size] - inner[size]; - } - } - if (inner[size] > outer[size]) { - inner[size] = outer[size]; - } - if (inner[pos] < outer[pos]) { - inner[pos] = outer[pos]; - } - }); - - - return inner; - }, - - /** - * Zoom the map in or out by a certain amount. Less than 1 zooms in, greater than 1 zooms out. - */ - mapZoom: function (howMuch, centerXArg, centerYArg, mouseX, mouseY) { - /*if (this.isMapZooming) { - this.mapZoomQueue = arguments; - return; - }*/ - - var chart = this, - xAxis = chart.xAxis[0], - xRange = xAxis.max - xAxis.min, - centerX = pick(centerXArg, xAxis.min + xRange / 2), - newXRange = xRange * howMuch, - yAxis = chart.yAxis[0], - yRange = yAxis.max - yAxis.min, - centerY = pick(centerYArg, yAxis.min + yRange / 2), - newYRange = yRange * howMuch, - fixToX = mouseX ? ((mouseX - xAxis.pos) / xAxis.len) : 0.5, - fixToY = mouseY ? ((mouseY - yAxis.pos) / yAxis.len) : 0.5, - newXMin = centerX - newXRange * fixToX, - newYMin = centerY - newYRange * fixToY, - newExt = chart.fitToBox({ - x: newXMin, - y: newYMin, - width: newXRange, - height: newYRange - }, { - x: xAxis.dataMin, - y: yAxis.dataMin, - width: xAxis.dataMax - xAxis.dataMin, - height: yAxis.dataMax - yAxis.dataMin - }); - - // When mousewheel zooming, fix the point under the mouse - if (mouseX) { - xAxis.fixTo = [mouseX - xAxis.pos, centerXArg]; - } - if (mouseY) { - yAxis.fixTo = [mouseY - yAxis.pos, centerYArg]; - } - - // Zoom - if (howMuch !== undefined) { - xAxis.setExtremes(newExt.x, newExt.x + newExt.width, false); - yAxis.setExtremes(newExt.y, newExt.y + newExt.height, false); - - // Reset zoom - } else { - xAxis.setExtremes(undefined, undefined, false); - yAxis.setExtremes(undefined, undefined, false); - } - - // Prevent zooming until this one is finished animating - /*delay = animation ? animation.duration || 500 : 0; - if (delay) { - chart.isMapZooming = true; - setTimeout(function () { - chart.isMapZooming = false; - if (chart.mapZoomQueue) { - chart.mapZoom.apply(chart, chart.mapZoomQueue); - } - chart.mapZoomQueue = null; - }, delay); - }*/ - - chart.redraw(); - } - }); - - /** - * Extend the chart getAxes method to also get the color axis - */ - wrap(Chart.prototype, 'getAxes', function (proceed) { - - var options = this.options, - colorAxisOptions = options.colorAxis; - - proceed.call(this); - - this.colorAxis = []; - if (colorAxisOptions) { - proceed = new ColorAxis(this, colorAxisOptions); // Fake assignment for jsLint - } - }); - - /** - * Extend the Chart.render method to add zooming and panning - */ - wrap(Chart.prototype, 'render', function (proceed) { - var chart = this, - mapNavigation = chart.options.mapNavigation; - - proceed.call(chart); - - // Render the plus and minus buttons - chart.renderMapNavigation(); - - // Add the double click event - if (pick(mapNavigation.enableDoubleClickZoom, mapNavigation.enabled) || mapNavigation.enableDoubleClickZoomTo) { - H.addEvent(chart.container, 'dblclick', function (e) { - chart.pointer.onContainerDblClick(e); - }); - } - - // Add the mousewheel event - if (pick(mapNavigation.enableMouseWheelZoom, mapNavigation.enabled)) { - H.addEvent(chart.container, document.onmousewheel === undefined ? 'DOMMouseScroll' : 'mousewheel', function (e) { - chart.pointer.onContainerMouseWheel(e); - return false; - }); - } - }); - - - - /** - * Extend the default options with map options - */ - plotOptions.map = merge(plotOptions.scatter, { - allAreas: true, - animation: false, // makes the complex shapes slow - nullColor: '#F8F8F8', - borderColor: 'silver', - borderWidth: 1, - marker: null, - stickyTracking: false, - dataLabels: { - format: '{point.value}', - verticalAlign: 'middle' - }, - turboThreshold: 0, - tooltip: { - followPointer: true, - pointFormat: '{point.name}: {point.value}<br/>' - }, - states: { - normal: { - animation: true - }, - hover: { - brightness: 0.2 - } - } - }); - - /** - * The MapAreaPoint object - */ - var MapAreaPoint = extendClass(Point, { - /** - * Extend the Point object to split paths - */ - applyOptions: function (options, x) { - - var point = Point.prototype.applyOptions.call(this, options, x), - series = this.series, - seriesOptions = series.options, - joinBy = seriesOptions.joinBy, - mapPoint; - - if (seriesOptions.mapData) { - mapPoint = joinBy ? - series.getMapData(joinBy, point[joinBy]) : // Join by a string - seriesOptions.mapData[point.x]; // Use array position (faster) - - if (mapPoint) { - // This applies only to bubbles - if (series.xyFromShape) { - point.x = mapPoint._midX; - point.y = mapPoint._midY; - } - extend(point, mapPoint); // copy over properties - } else { - point.value = point.value || null; - } - } - - return point; - }, - - /** - * Set the visibility of a single map area - */ - setVisible: function (vis) { - var point = this, - method = vis ? 'show' : 'hide'; - - // Show and hide associated elements - each(['graphic', 'dataLabel'], function (key) { - if (point[key]) { - point[key][method](); - } - }); - }, - - /** - * Stop the fade-out - */ - onMouseOver: function (e) { - clearTimeout(this.colorInterval); - Point.prototype.onMouseOver.call(this, e); - }, - /** - * Custom animation for tweening out the colors. Animation reduces blinking when hovering - * over islands and coast lines. We run a custom implementation of animation becuase we - * need to be able to run this independently from other animations like zoom redraw. Also, - * adding color animation to the adapters would introduce almost the same amount of code. - */ - onMouseOut: function () { - var point = this, - start = +new Date(), - normalColor = Color(point.options.color), - hoverColor = Color(point.pointAttr.hover.fill), - animation = point.series.options.states.normal.animation, - duration = animation && (animation.duration || 500); - - if (duration && normalColor.rgba.length === 4 && hoverColor.rgba.length === 4 && point.state !== 'select') { - delete point.pointAttr[''].fill; // avoid resetting it in Point.setState - - clearTimeout(point.colorInterval); - point.colorInterval = setInterval(function () { - var pos = (new Date() - start) / duration, - graphic = point.graphic; - if (pos > 1) { - pos = 1; - } - if (graphic) { - graphic.attr('fill', tweenColors(hoverColor, normalColor, pos)); - } - if (pos >= 1) { - clearTimeout(point.colorInterval); - } - }, 13); - } - Point.prototype.onMouseOut.call(point); - }, - - /** - * Zoom the chart to view a specific area point - */ - zoomTo: function () { - var point = this, - series = point.series; - - series.xAxis.setExtremes( - point._minX, - point._maxX, - false - ); - series.yAxis.setExtremes( - point._minY, - point._maxY, - false - ); - series.chart.redraw(); - } - }); - - /** - * Add the series type - */ - seriesTypes.map = extendClass(seriesTypes.scatter, { - type: 'map', - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color', - dashstyle: 'dashStyle' - }, - pointClass: MapAreaPoint, - pointArrayMap: ['value'], - axisTypes: ['xAxis', 'yAxis', 'colorAxis'], - optionalAxis: 'colorAxis', - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - getSymbol: noop, - supportsDrilldown: true, - getExtremesFromAll: true, - useMapGeometry: true, // get axis extremes from paths, not values - parallelArrays: ['x', 'y', 'value'], - - /** - * Get the bounding box of all paths in the map combined. - */ - getBox: function (paths) { - var maxX = Number.MIN_VALUE, - minX = Number.MAX_VALUE, - maxY = Number.MIN_VALUE, - minY = Number.MAX_VALUE, - hasBox; - - // Find the bounding box - each(paths || [], function (point) { - - if (point.path) { - if (typeof point.path === 'string') { - point.path = H.splitPath(point.path); - } - - var path = point.path || [], - i = path.length, - even = false, // while loop reads from the end - pointMaxX = Number.MIN_VALUE, - pointMinX = Number.MAX_VALUE, - pointMaxY = Number.MIN_VALUE, - pointMinY = Number.MAX_VALUE; - - // The first time a map point is used, analyze its box - if (!point._foundBox) { - while (i--) { - if (typeof path[i] === 'number' && !isNaN(path[i])) { - if (even) { // even = x - pointMaxX = Math.max(pointMaxX, path[i]); - pointMinX = Math.min(pointMinX, path[i]); - } else { // odd = Y - pointMaxY = Math.max(pointMaxY, path[i]); - pointMinY = Math.min(pointMinY, path[i]); - } - even = !even; - } - } - // Cache point bounding box for use to position data labels, bubbles etc - point._midX = pointMinX + (pointMaxX - pointMinX) * (point.middleX || 0.5); // pick is slower and very marginally needed - point._midY = pointMinY + (pointMaxY - pointMinY) * (point.middleY || 0.5); - point._maxX = pointMaxX; - point._minX = pointMinX; - point._maxY = pointMaxY; - point._minY = pointMinY; - point._foundBox = true; - } - - maxX = Math.max(maxX, point._maxX); - minX = Math.min(minX, point._minX); - maxY = Math.max(maxY, point._maxY); - minY = Math.min(minY, point._minY); - - hasBox = true; - } - }); - - // Set the box for the whole series - if (hasBox) { - this.minY = Math.min(minY, pick(this.minY, Number.MAX_VALUE)); - this.maxY = Math.max(maxY, pick(this.maxY, Number.MIN_VALUE)); - this.minX = Math.min(minX, pick(this.minX, Number.MAX_VALUE)); - this.maxX = Math.max(maxX, pick(this.maxX, Number.MIN_VALUE)); - } - }, - - getExtremes: function () { - // Get the actual value extremes for colors - Series.prototype.getExtremes.call(this, this.valueData); - - // Recalculate box on updated data - if (this.chart.hasRendered && this.isDirtyData) { - this.getBox(this.options.data); - } - - this.valueMin = this.dataMin; - this.valueMax = this.dataMax; - - // Extremes for the mock Y axis - this.dataMin = this.minY; - this.dataMax = this.maxY; - }, - - /** - * Translate the path so that it automatically fits into the plot area box - * @param {Object} path - */ - translatePath: function (path) { - - var series = this, - even = false, // while loop reads from the end - xAxis = series.xAxis, - yAxis = series.yAxis, - xMin = xAxis.min, - xTransA = xAxis.transA, - xMinPixelPadding = xAxis.minPixelPadding, - yMin = yAxis.min, - yTransA = yAxis.transA, - yMinPixelPadding = yAxis.minPixelPadding, - i, - ret = []; // Preserve the original - - // Do the translation - if (path) { - i = path.length; - while (i--) { - if (typeof path[i] === 'number') { - ret[i] = even ? - (path[i] - xMin) * xTransA + xMinPixelPadding : - (path[i] - yMin) * yTransA + yMinPixelPadding; - even = !even; - } else { - ret[i] = path[i]; - } - } - } - - return ret; - }, - - /** - * Extend setData to join in mapData. If the allAreas option is true, all areas - * from the mapData are used, and those that don't correspond to a data value - * are given null values. - */ - setData: function (data, redraw) { - var options = this.options, - mapData = options.mapData, - joinBy = options.joinBy, - dataUsed = []; - - - this.getBox(data); - this.getBox(mapData); - if (options.allAreas && mapData) { - - data = data || []; - - // Registered the point codes that actually hold data - if (joinBy) { - each(data, function (point) { - dataUsed.push(point[joinBy]); - }); - } - - // Add those map points that don't correspond to data, which will be drawn as null points - dataUsed = '|' + dataUsed.join('|') + '|'; // String search is faster than array.indexOf - each(mapData, function (mapPoint) { - if (!joinBy || dataUsed.indexOf('|' + mapPoint[joinBy] + '|') === -1) { - data.push(merge(mapPoint, { value: null })); - } - }); - } - Series.prototype.setData.call(this, data, redraw); - }, - - /** - * For each point, get the corresponding map data - */ - getMapData: function (key, value) { - var options = this.options, - mapData = options.mapData, - mapMap = this.mapMap, - i = mapData.length; - - // Create a cache for quicker lookup second time - if (!mapMap) { - mapMap = this.mapMap = {}; - } - if (mapMap[value] !== undefined) { - return mapData[mapMap[value]]; - - } else if (value !== undefined) { - while (i--) { - if (mapData[i][key] === value) { - mapMap[value] = i; // cache it - return mapData[i]; - } - } - } - }, - - /** - * In choropleth maps, the color is a result of the value, so this needs translation too - */ - translateColors: function () { - var series = this, - nullColor = this.options.nullColor, - colorAxis = this.colorAxis; - - each(this.data, function (point) { - var value = point.value, - color; - - color = value === null ? nullColor : colorAxis ? colorAxis.toColor(value, point) : (point.color) || series.color; - - if (color) { - point.color = point.options.color = color; - } - }); - }, - - /** - * No graph for the map series - */ - drawGraph: noop, - - /** - * We need the points' bounding boxes in order to draw the data labels, so - * we skip it now and call it from drawPoints instead. - */ - drawDataLabels: noop, - - /** - * Add the path option for data points. Find the max value for color calculation. - */ - translate: function () { - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis; - - series.generatePoints(); - - each(series.data, function (point) { - - // Record the middle point (loosely based on centroid), determined - // by the middleX and middleY options. - point.plotX = xAxis.toPixels(point._midX, true); - point.plotY = yAxis.toPixels(point._midY, true); - - if (series.isDirtyData || series.chart.renderer.isVML) { - - point.shapeType = 'path'; - point.shapeArgs = { - //d: display ? series.translatePath(point.path) : '' - d: series.translatePath(point.path), - 'vector-effect': 'non-scaling-stroke' - }; - } - }); - - series.translateColors(); - }, - - /** - * Use the drawPoints method of column, that is able to handle simple shapeArgs. - * Extend it by assigning the tooltip position. - */ - drawPoints: function () { - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis, - scale, - translateX, - group = series.group, - chart = series.chart, - renderer = chart.renderer, - translateY, - getTranslate = function (axis, mapRatio) { - var dataMin = axis.dataMin, - dataMax = axis.dataMax, - fullDataMin = dataMin - ((dataMax - dataMin) * (mapRatio - 1) / 2), - fullMin = axis.min - axis.minPixelPadding / axis.transA, - minOffset = fullMin - fullDataMin, - centerOffset = (dataMax - dataMin - axis.max + axis.min) * mapRatio, - center = minOffset / centerOffset; - return (axis.len * (1 - scale)) * center; - }; - - // Set a group that handles transform during zooming and panning in order to preserve clipping - // on series.group - if (!series.transformGroup) { - series.transformGroup = renderer.g() - .attr({ - scaleX: 1, - scaleY: 1 - }) - .add(group); - } - - // Draw the shapes again - if (series.isDirtyData || renderer.isVML) { - - // Draw them in transformGroup - series.group = series.transformGroup; - seriesTypes.column.prototype.drawPoints.apply(series); - series.group = group; // Reset - - // Individual point actions - each(series.points, function (point) { - - // Reset color on update/redraw - if (chart.hasRendered && point.graphic) { - point.graphic.attr('fill', point.options.color); - } - - }); - - // Set the base for later scale-zooming - this.transA = xAxis.transA; - - // Just update the scale and transform for better performance - } else { - scale = xAxis.transA / this.transA; - if (scale > 0.99 && scale < 1.01) { // rounding errors - translateX = 0; - translateY = 0; - scale = 1; - - } else { - translateX = getTranslate(xAxis, Math.max(1, series.chart.mapRatio)); - translateY = getTranslate(yAxis, 1 / Math.min(1, series.chart.mapRatio)); - } - - this.transformGroup.animate({ - translateX: translateX, - translateY: translateY, - scaleX: scale, - scaleY: scale - }); - - } - - - // Now draw the data labels - Series.prototype.drawDataLabels.call(series); - - }, - - /** - * Override render to throw in an async call in IE8. Otherwise it chokes on the US counties demo. - */ - render: function () { - var series = this, - render = Series.prototype.render; - - // Give IE8 some time to breathe. - if (series.chart.renderer.isVML && series.data.length > 3000) { - setTimeout(function () { - render.call(series); - }); - } else { - render.call(series); - } - }, - - /** - * The initial animation for the map series. By default, animation is disabled. - * Animation of map shapes is not at all supported in VML browsers. - */ - animate: function (init) { - var chart = this.chart, - animation = this.options.animation, - group = this.group, - xAxis = this.xAxis, - yAxis = this.yAxis, - left = xAxis.pos, - top = yAxis.pos; - - if (chart.renderer.isSVG) { - - if (animation === true) { - animation = { - duration: 1000 - }; - } - - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - group.attr({ - translateX: left + xAxis.len / 2, - translateY: top + yAxis.len / 2, - scaleX: 0.001, // #1499 - scaleY: 0.001 - }); - - // Run the animation - } else { - group.animate({ - translateX: left, - translateY: top, - scaleX: 1, - scaleY: 1 - }, animation); - - // Delete this function to allow it only once - this.animate = null; - } - } - }, - - /** - * Animate in the new series from the clicked point in the old series. - * Depends on the drilldown.js module - */ - animateDrilldown: function (init) { - var toBox = this.chart.plotBox, - level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1], - fromBox = level.bBox, - animationOptions = this.chart.options.drilldown.animation, - scale; - - if (!init) { - - scale = Math.min(fromBox.width / toBox.width, fromBox.height / toBox.height); - level.shapeArgs = { - scaleX: scale, - scaleY: scale, - translateX: fromBox.x, - translateY: fromBox.y - }; - - // TODO: Animate this.group instead - each(this.points, function (point) { - - point.graphic - .attr(level.shapeArgs) - .animate({ - scaleX: 1, - scaleY: 1, - translateX: 0, - translateY: 0 - }, animationOptions); - - }); - - this.animate = null; - } - - }, - - drawLegendSymbol: H.LegendSymbolMixin.drawRectangle, - - /** - * When drilling up, pull out the individual point graphics from the lower series - * and animate them into the origin point in the upper series. - */ - animateDrillupFrom: function (level) { - seriesTypes.column.prototype.animateDrillupFrom.call(this, level); - }, - - - /** - * When drilling up, keep the upper series invisible until the lower series has - * moved into place - */ - animateDrillupTo: function (init) { - seriesTypes.column.prototype.animateDrillupTo.call(this, init); - } - }); - - - // The mapline series type - plotOptions.mapline = merge(plotOptions.map, { - lineWidth: 1, - fillColor: 'none' - }); - seriesTypes.mapline = extendClass(seriesTypes.map, { - type: 'mapline', - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'color', - 'stroke-width': 'lineWidth', - fill: 'fillColor' - }, - drawLegendSymbol: seriesTypes.line.prototype.drawLegendSymbol - }); - - // The mappoint series type - plotOptions.mappoint = merge(plotOptions.scatter, { - dataLabels: { - enabled: true, - format: '{point.name}', - color: 'black', - style: { - textShadow: '0 0 5px white' - } - } - }); - seriesTypes.mappoint = extendClass(seriesTypes.scatter, { - type: 'mappoint' - }); - - // The mapbubble series type - if (seriesTypes.bubble) { - - plotOptions.mapbubble = merge(plotOptions.bubble, { - tooltip: { - pointFormat: '{point.name}: {point.z}' - } - }); - seriesTypes.mapbubble = extendClass(seriesTypes.bubble, { - pointClass: extendClass(Point, { - applyOptions: MapAreaPoint.prototype.applyOptions - }), - xyFromShape: true, - type: 'mapbubble', - pointArrayMap: ['z'], // If one single value is passed, it is interpreted as z - /** - * Return the map area identified by the dataJoinBy option - */ - getMapData: seriesTypes.map.prototype.getMapData, - getBox: seriesTypes.map.prototype.getBox, - setData: seriesTypes.map.prototype.setData - }); - } - - // Create symbols for the zoom buttons - function selectiveRoundedRect(attr, x, y, w, h, rTopLeft, rTopRight, rBottomRight, rBottomLeft) { - var normalize = (attr['stroke-width'] % 2 / 2); - - x -= normalize; - y -= normalize; - - return ['M', x + rTopLeft, y, - // top side - 'L', x + w - rTopRight, y, - // top right corner - 'C', x + w - rTopRight / 2, y, x + w, y + rTopRight / 2, x + w, y + rTopRight, - // right side - 'L', x + w, y + h - rBottomRight, - // bottom right corner - 'C', x + w, y + h - rBottomRight / 2, x + w - rBottomRight / 2, y + h, x + w - rBottomRight, y + h, - // bottom side - 'L', x + rBottomLeft, y + h, - // bottom left corner - 'C', x + rBottomLeft / 2, y + h, x, y + h - rBottomLeft / 2, x, y + h - rBottomLeft, - // left side - 'L', x, y + rTopLeft, - // top left corner - 'C', x, y + rTopLeft / 2, x + rTopLeft / 2, y, x + rTopLeft, y, - 'Z' - ]; - } - symbols.topbutton = function (x, y, w, h, attr) { - return selectiveRoundedRect(attr, x, y, w, h, attr.r, attr.r, 0, 0); - }; - symbols.bottombutton = function (x, y, w, h, attr) { - return selectiveRoundedRect(attr, x, y, w, h, 0, 0, attr.r, attr.r); - }; - // The symbol callbacks are generated on the SVGRenderer object in all browsers. Even - // VML browsers need this in order to generate shapes in export. Now share - // them with the VMLRenderer. - if (H.Renderer === VMLRenderer) { - each(['topbutton', 'bottombutton'], function (shape) { - VMLRenderer.prototype.symbols[shape] = symbols[shape]; - }); - } - - - /** - * A wrapper for Chart with all the default values for a Map - */ - H.Map = function (options, callback) { - - var hiddenAxis = { - endOnTick: false, - gridLineWidth: 0, - lineWidth: 0, - minPadding: 0, - maxPadding: 0, - startOnTick: false, - title: null, - tickPositions: [] - //tickInterval: 500, - //gridZIndex: 10 - }, - seriesOptions; - - // Don't merge the data - seriesOptions = options.series; - options.series = null; - - options = merge({ - chart: { - panning: 'xy', - type: 'map' - }, - xAxis: hiddenAxis, - yAxis: merge(hiddenAxis, { reversed: true }) - }, - options, // user's options - - { // forced options - chart: { - inverted: false, - alignTicks: false, - preserveAspectRatio: true - } - }); - - options.series = seriesOptions; - - - return new Chart(options, callback); - }; -}(Highcharts)); - diff --git a/pykeg/web/static/highcharts/js/modules/no-data-to-display.js b/pykeg/web/static/highcharts/js/modules/no-data-to-display.js deleted file mode 100644 index 6d4e7b098..000000000 --- a/pykeg/web/static/highcharts/js/modules/no-data-to-display.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Highcharts JS v3.0.9 (2014-01-15) - Plugin for displaying a message when there is no data visible in chart. - - (c) 2010-2014 Highsoft AS - Author: Oystein Moseng - - License: www.highcharts.com/license -*/ -(function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:"No data to display"});h.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!== -void 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,"no-data").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,"plotBox")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0; -return!1};e.callbacks.push(function(a){c.addEvent(a,"load",g);c.addEvent(a,"redraw",g)})})(Highcharts); diff --git a/pykeg/web/static/highcharts/js/modules/no-data-to-display.src.js b/pykeg/web/static/highcharts/js/modules/no-data-to-display.src.js deleted file mode 100644 index 4d849781c..000000000 --- a/pykeg/web/static/highcharts/js/modules/no-data-to-display.src.js +++ /dev/null @@ -1,128 +0,0 @@ -/** - * @license Highcharts JS v3.0.9 (2014-01-15) - * Plugin for displaying a message when there is no data visible in chart. - * - * (c) 2010-2014 Highsoft AS - * Author: Oystein Moseng - * - * License: www.highcharts.com/license - */ - -(function (H) { // docs - - var seriesTypes = H.seriesTypes, - chartPrototype = H.Chart.prototype, - defaultOptions = H.getOptions(), - extend = H.extend; - - // Add language option - extend(defaultOptions.lang, { - noData: 'No data to display' - }); - - // Add default display options for message - defaultOptions.noData = { - position: { - x: 0, - y: 0, - align: 'center', - verticalAlign: 'middle' - }, - attr: { - }, - style: { - fontWeight: 'bold', - fontSize: '12px', - color: '#60606a' - } - }; - - /** - * Define hasData functions for series. These return true if there are data points on this series within the plot area - */ - function hasDataPie() { - return !!this.points.length; /* != 0 */ - } - - seriesTypes.pie.prototype.hasData = hasDataPie; - - if (seriesTypes.gauge) { - seriesTypes.gauge.prototype.hasData = hasDataPie; - } - - if (seriesTypes.waterfall) { - seriesTypes.waterfall.prototype.hasData = hasDataPie; - } - - H.Series.prototype.hasData = function () { - return this.dataMax !== undefined && this.dataMin !== undefined; - }; - - /** - * Display a no-data message. - * - * @param {String} str An optional message to show in place of the default one - */ - chartPrototype.showNoData = function (str) { - var chart = this, - options = chart.options, - text = str || options.lang.noData, - noDataOptions = options.noData; - - if (!chart.noDataLabel) { - chart.noDataLabel = chart.renderer.label(text, 0, 0, null, null, null, null, null, 'no-data') - .attr(noDataOptions.attr) - .css(noDataOptions.style) - .add(); - chart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox'); - } - }; - - /** - * Hide no-data message - */ - chartPrototype.hideNoData = function () { - var chart = this; - if (chart.noDataLabel) { - chart.noDataLabel = chart.noDataLabel.destroy(); - } - }; - - /** - * Returns true if there are data points within the plot area now - */ - chartPrototype.hasData = function () { - var chart = this, - series = chart.series, - i = series.length; - - while (i--) { - if (series[i].hasData() && !series[i].options.isInternal) { - return true; - } - } - - return false; - }; - - /** - * Show no-data message if there is no data in sight. Otherwise, hide it. - */ - function handleNoData() { - var chart = this; - if (chart.hasData()) { - chart.hideNoData(); - } else { - chart.showNoData(); - } - } - - /** - * Add event listener to handle automatic display of no-data message - */ - chartPrototype.callbacks.push(function (chart) { - H.addEvent(chart, 'load', handleNoData); - H.addEvent(chart, 'redraw', handleNoData); - }); - -}(Highcharts)); diff --git a/pykeg/web/static/highcharts/js/themes/dark-blue.js b/pykeg/web/static/highcharts/js/themes/dark-blue.js deleted file mode 100644 index f57a67d92..000000000 --- a/pykeg/web/static/highcharts/js/themes/dark-blue.js +++ /dev/null @@ -1,254 +0,0 @@ -/** - * Dark blue theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, 'rgb(48, 48, 96)'], - [1, 'rgb(0, 0, 0)'] - ] - }, - borderColor: '#000000', - borderWidth: 2, - className: 'dark-container', - plotBackgroundColor: 'rgba(255, 255, 255, .1)', - plotBorderColor: '#CCCCCC', - plotBorderWidth: 1 - }, - title: { - style: { - color: '#C0C0C0', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineColor: '#333333', - gridLineWidth: 1, - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - tickColor: '#A0A0A0', - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - gridLineColor: '#333333', - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - minorTickInterval: null, - tickColor: '#A0A0A0', - tickWidth: 1, - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.75)', - style: { - color: '#F0F0F0' - } - }, - toolbar: { - itemStyle: { - color: 'silver' - } - }, - plotOptions: { - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#A0A0A0' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#444' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - legendBackgroundColorSolid: 'rgb(35, 35, 70)', - dataLabelsColor: '#444', - textColor: '#C0C0C0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/pykeg/web/static/highcharts/js/themes/dark-green.js b/pykeg/web/static/highcharts/js/themes/dark-green.js deleted file mode 100644 index 0461fe4c2..000000000 --- a/pykeg/web/static/highcharts/js/themes/dark-green.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * Dark blue theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: [0, 0, 250, 500], - stops: [ - [0, 'rgb(48, 96, 48)'], - [1, 'rgb(0, 0, 0)'] - ] - }, - borderColor: '#000000', - borderWidth: 2, - className: 'dark-container', - plotBackgroundColor: 'rgba(255, 255, 255, .1)', - plotBorderColor: '#CCCCCC', - plotBorderWidth: 1 - }, - title: { - style: { - color: '#C0C0C0', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineColor: '#333333', - gridLineWidth: 1, - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - tickColor: '#A0A0A0', - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - gridLineColor: '#333333', - labels: { - style: { - color: '#A0A0A0' - } - }, - lineColor: '#A0A0A0', - minorTickInterval: null, - tickColor: '#A0A0A0', - tickWidth: 1, - title: { - style: { - color: '#CCC', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.75)', - style: { - color: '#F0F0F0' - } - }, - toolbar: { - itemStyle: { - color: 'silver' - } - }, - plotOptions: { - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#A0A0A0' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#444' - } - }, - credits: { - style: { - color: '#666' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the - legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', - legendBackgroundColorSolid: 'rgb(35, 35, 70)', - dataLabelsColor: '#444', - textColor: '#C0C0C0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/pykeg/web/static/highcharts/js/themes/gray.js b/pykeg/web/static/highcharts/js/themes/gray.js deleted file mode 100644 index f0de086d5..000000000 --- a/pykeg/web/static/highcharts/js/themes/gray.js +++ /dev/null @@ -1,257 +0,0 @@ -/** - * Gray theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#DDDF0D", "#7798BF", "#55BF3B", "#DF5353", "#aaeeee", "#ff0066", "#eeaaee", - "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, 'rgb(96, 96, 96)'], - [1, 'rgb(16, 16, 16)'] - ] - }, - borderWidth: 0, - borderRadius: 15, - plotBackgroundColor: null, - plotShadow: false, - plotBorderWidth: 0 - }, - title: { - style: { - color: '#FFF', - font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - subtitle: { - style: { - color: '#DDD', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - xAxis: { - gridLineWidth: 0, - lineColor: '#999', - tickColor: '#999', - labels: { - style: { - color: '#999', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#AAA', - font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - yAxis: { - alternateGridColor: null, - minorTickInterval: null, - gridLineColor: 'rgba(255, 255, 255, .1)', - minorGridLineColor: 'rgba(255,255,255,0.07)', - lineWidth: 0, - tickWidth: 0, - labels: { - style: { - color: '#999', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#AAA', - font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - legend: { - itemStyle: { - color: '#CCC' - }, - itemHoverStyle: { - color: '#FFF' - }, - itemHiddenStyle: { - color: '#333' - } - }, - labels: { - style: { - color: '#CCC' - } - }, - tooltip: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, 'rgba(96, 96, 96, .8)'], - [1, 'rgba(16, 16, 16, .8)'] - ] - }, - borderWidth: 0, - style: { - color: '#FFF' - } - }, - - - plotOptions: { - series: { - shadow: true - }, - line: { - dataLabels: { - color: '#CCC' - }, - marker: { - lineColor: '#333' - } - }, - spline: { - marker: { - lineColor: '#333' - } - }, - scatter: { - marker: { - lineColor: '#333' - } - }, - candlestick: { - lineColor: 'white' - } - }, - - toolbar: { - itemStyle: { - color: '#CCC' - } - }, - - navigation: { - buttonOptions: { - symbolStroke: '#DDDDDD', - hoverSymbolStroke: '#FFFFFF', - theme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#606060'], - [0.6, '#333333'] - ] - }, - stroke: '#000000' - } - } - }, - - // scroll charts - rangeSelector: { - buttonTheme: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - stroke: '#000000', - style: { - color: '#CCC', - fontWeight: 'bold' - }, - states: { - hover: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#BBB'], - [0.6, '#888'] - ] - }, - stroke: '#000000', - style: { - color: 'white' - } - }, - select: { - fill: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.1, '#000'], - [0.3, '#333'] - ] - }, - stroke: '#000000', - style: { - color: 'yellow' - } - } - } - }, - inputStyle: { - backgroundColor: '#333', - color: 'silver' - }, - labelStyle: { - color: 'silver' - } - }, - - navigator: { - handles: { - backgroundColor: '#666', - borderColor: '#AAA' - }, - outlineColor: '#CCC', - maskFill: 'rgba(16, 16, 16, 0.5)', - series: { - color: '#7798BF', - lineColor: '#A6C7ED' - } - }, - - scrollbar: { - barBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - barBorderColor: '#CCC', - buttonArrowColor: '#CCC', - buttonBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0.4, '#888'], - [0.6, '#555'] - ] - }, - buttonBorderColor: '#CCC', - rifleColor: '#FFF', - trackBackgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#000'], - [1, '#333'] - ] - }, - trackBorderColor: '#666' - }, - - // special colors for some of the demo examples - legendBackgroundColor: 'rgba(48, 48, 48, 0.8)', - legendBackgroundColorSolid: 'rgb(70, 70, 70)', - dataLabelsColor: '#444', - textColor: '#E0E0E0', - maskColor: 'rgba(255,255,255,0.3)' -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/pykeg/web/static/highcharts/js/themes/grid.js b/pykeg/web/static/highcharts/js/themes/grid.js deleted file mode 100644 index 70342f5ec..000000000 --- a/pykeg/web/static/highcharts/js/themes/grid.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Grid theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'], - chart: { - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, - stops: [ - [0, 'rgb(255, 255, 255)'], - [1, 'rgb(240, 240, 255)'] - ] - }, - borderWidth: 2, - plotBackgroundColor: 'rgba(255, 255, 255, .9)', - plotShadow: true, - plotBorderWidth: 1 - }, - title: { - style: { - color: '#000', - font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' - } - }, - subtitle: { - style: { - color: '#666666', - font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' - } - }, - xAxis: { - gridLineWidth: 1, - lineColor: '#000', - tickColor: '#000', - labels: { - style: { - color: '#000', - font: '11px Trebuchet MS, Verdana, sans-serif' - } - }, - title: { - style: { - color: '#333', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - - } - } - }, - yAxis: { - minorTickInterval: 'auto', - lineColor: '#000', - lineWidth: 1, - tickWidth: 1, - tickColor: '#000', - labels: { - style: { - color: '#000', - font: '11px Trebuchet MS, Verdana, sans-serif' - } - }, - title: { - style: { - color: '#333', - fontWeight: 'bold', - fontSize: '12px', - fontFamily: 'Trebuchet MS, Verdana, sans-serif' - } - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: 'black' - - }, - itemHoverStyle: { - color: '#039' - }, - itemHiddenStyle: { - color: 'gray' - } - }, - labels: { - style: { - color: '#99b' - } - }, - - navigation: { - buttonOptions: { - theme: { - stroke: '#CCCCCC' - } - } - } -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/pykeg/web/static/highcharts/js/themes/skies.js b/pykeg/web/static/highcharts/js/themes/skies.js deleted file mode 100644 index d58b1f246..000000000 --- a/pykeg/web/static/highcharts/js/themes/skies.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Skies theme for Highcharts JS - * @author Torstein Honsi - */ - -Highcharts.theme = { - colors: ["#514F78", "#42A07B", "#9B5E4A", "#72727F", "#1F949A", "#82914E", "#86777F", "#42A07B"], - chart: { - className: 'skies', - borderWidth: 0, - plotShadow: true, - plotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg', - plotBackgroundColor: { - linearGradient: [0, 0, 250, 500], - stops: [ - [0, 'rgba(255, 255, 255, 1)'], - [1, 'rgba(255, 255, 255, 0)'] - ] - }, - plotBorderWidth: 1 - }, - title: { - style: { - color: '#3E576F', - font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - subtitle: { - style: { - color: '#6D869F', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - }, - xAxis: { - gridLineWidth: 0, - lineColor: '#C0D0E0', - tickColor: '#C0D0E0', - labels: { - style: { - color: '#666', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#666', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - yAxis: { - alternateGridColor: 'rgba(255, 255, 255, .5)', - lineColor: '#C0D0E0', - tickColor: '#C0D0E0', - tickWidth: 1, - labels: { - style: { - color: '#666', - fontWeight: 'bold' - } - }, - title: { - style: { - color: '#666', - font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' - } - } - }, - legend: { - itemStyle: { - font: '9pt Trebuchet MS, Verdana, sans-serif', - color: '#3E576F' - }, - itemHoverStyle: { - color: 'black' - }, - itemHiddenStyle: { - color: 'silver' - } - }, - labels: { - style: { - color: '#3E576F' - } - } -}; - -// Apply the theme -var highchartsOptions = Highcharts.setOptions(Highcharts.theme); diff --git a/pykeg/web/static/images/COPYRIGHT.txt b/pykeg/web/static/images/COPYRIGHT.txt deleted file mode 100644 index cfbde91ed..000000000 --- a/pykeg/web/static/images/COPYRIGHT.txt +++ /dev/null @@ -1,5 +0,0 @@ -All images in this directory are Copyright 2014 Bevbot LLC. -All rights reserved. - -Images may not be reused without the written permission of -Bevbot LLC. For questions, contact info@bevbot.com. diff --git a/pykeg/web/static/images/background.png b/pykeg/web/static/images/background.png deleted file mode 100644 index 130efee5ab1072818953a108f18253d2767d9e46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133518 zcmV)eK&HQmP)<h;3K|Lk000e1NJLTq00STZ00HX=1^@s6H^BKe00001b5ch_0Itp) z=>Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV2o(||5#xPX2mk;88FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9bAOJ~3K~#9!)V=MJB)N?xdO*@6tEH7@ zZ0FAVzny-J+3wh=)s-3HPU8L`00JZ<GPBjQdvBRZ)s-I+9_}Ov92}fO|M4IH!L3y= zGXQ{@?SF{~0MHm<ZfLFl%ux=Ml2L0z<A#(70D~K&w$@*Z0ZIuuClJV9KjnnhDq3r} zt_ws7M>){A{~N?elu%nk$ptxQaBFDXU!M{oQNs8`{b#^vtwAoiUw3W&=Tkzhb$o;S z?}7UDCL$0eFgKuo6tq?WO8s*X^?N}8w+047J`TVDL+_nlk^D`BTrz5{@-yteJ1#}O zOn|#r3=s97A_6x?lV_4r|I9@Cx#a!z;`R6B_3UGFlk4bTrIbKK0FnM0fPTLqYd}8- zQNJ$z8SWokeo5{JGg3-ODWSDy_r*ODu-wn_Z@Dw}+T;1y`@;Vj*YN6(U%xD$L9d3~ z8|lv_N<ixOS)T<@`+<47PQcbjZ4CgBQ?~0)iBRhWX2|^*uM040y-=?U?;jui>l{|a zr=Jma-@f;AuYPC#xo3aA@-tugIls2P@)_pev$f~$S)%cbncTudSYZ9%%yB<&t}o{) ze)yNPH8s|X?Kv8IO0G1%J=_+;i~Ha=hQ=En*O$_WhmD)WuZDl-kH%S&*Z=}bDfT&Z zo%nT>+<za(fm{lR2-kI4OaKG5UTCc$rHs}p7{GB9iPs6>hFYt{rvzq3trf>naJ#*M zh;YB(@pwFXydgq4`kBNGoaY0HdK?;Y3OLUbtyUbjn|q$){@K1IlKaR=IiuCq&!chx zV6-adCB-<^KNBI#>($y&TMhS#!FFF;KUh)9VQZtxYwLBty}jY%;{&xe0F0b7N-6f) z`<W;2U&q<h?@Iz`#IKwaa!UOyW!O2BD1kI)Gs`pR>zL8k(!c%NzoC?3?+0e^W|?x> zXCdJ2|Gn-icTQkED>aJKdfqOtG6L#|)shSR?Qeg>zx?&D{k}=Q!rUy5w^~sp@5rUd zkwjtR+j%YfT%Ymzcz}rT_V&Y`2UGmu<2)s|#R-|xIL+m3Ci{6gV~J2o!FitJn&fLN z=ZrlC`F_ut*m5|czDC}E`-$s3kyFCI|NFo99B3CWB@U#N@bU4E_m2;W2YrpyT9Fdr zFMs)q<bNYR{ICD@zroBnZa4hvzx<2kEaN=wKlgY%@Y`>{A?GaDn2>Ukwd}Je%}ZI% zb)VHho@qlpFZ}Z37Z8B!JV%UdBQGS$>wHer<ofkKu*C_9(Q=RVJ`!Ra)Vv|&VN<O1 zXQO_Gky6Qd!Hj7)*;<%49?k!Lai;Fh{`EEI?D6^U?vE?_()SB6l2UshU|iQJ0kszq z*V)kOg}1jKIF4e$ooj!olrkE6lB~Z6Fs}1-i7umE7Z|{GRiH7-ku6#6#YvL`tAD*U z9uHB1YGVz$KCvEmP6MSTCM=toZNb7NE^rA9$%bO2lqK<RJ%|%5K<lI7CwT(7>?7xb z)}wd`K+EE=+=NH;b;<cS;2GS2t6iW(<3aljmfeOVw-l%!EaUa{Q;z~BQOK;e31q(v z0uq)Y#V4^Eh}bp=xdVh^F+_9TEeCrVfwOP+<iab5lZc4I;luv5ePSw~u|E<CFw}p# z$^B=S5RQ+|wm*FF;Vu~|lPjzU4SwDD=PB>knx&@{cmLNCMWS#0+;<ZFXF<%rr%wbv zzc$`}HY>Ql@ww+L#*z`5zRM$V2Tec$>GOE~PB~{w0C!oG|CqEc<R$y^G00zNybksi zO#E3XLgwSaQo`@t#%JqAlRh5F6-|&vPh9&NX|16$TLFH*-|<7@e*fKmfcK=S7c(hk zaO(+IP8lh22d9{N%&ZMRe%$bOyW#J@{))%rM6JDWVQwh7|K0a!Lu({wMnftI<>-m} z<MFVhzvKh;YN%J0#FA03ic)gFc1bc&0VcLYv?oRVTzlNFp3s-lPYY%=K+e3r=SQ*8 z6UW+W|BM1^`F&OEDes$bo(~+y4T^>JYbWH}fkcG!I&ocBzpkr;8@IPxPY!cJDW#vS zVC2-_`;=nqx-R6mA0Qs!5Fpogo+IAM{RAaB5##kPF@azS;qqmEvTc{R!B1iZfj1S) zt37Lbi$aAz&PZmwy}j8!Ohl+GAg2~*7-ws}YCmh|;6id9uoMRpUs4j#)fEGCeA5D! z!x6@)T<vTI+W2o8XKZ7}bw2F5XhHZmALA?`vNMcmB<me49{2Egd&BYe25t@Kbx8rz zV~g%>10jG8gaXK=xXhuiJq2?dB#Q}kb3kkdIiP@_#0GK&6%pjjc5#oUTtTk27tVyM zR&Z-5M?pRcm^vtm+MkC$n>lb>PD21m&f<&gUa*nmpFL}SwsM!VkG28U0bCuV?x_uj z{YJ0ObC<v_XRXh{w4m9&9?_G_qi^RL<Lsj^=PRX3z}8j=B@H+oy{WB&K>Y?0p|%QK zg8B+tQ{|9Oiljq33jG6W<yh;5+NxCHgp{%%Fa4(HT+pbYL69#iE_|g3tGM+LOy!V6 z(iI0ygF$w=H;)Y_3!69#GRJ5Plq2^AXg^CJh9L)%%C5;7#Vlx`+!d*xXNHvOGvcs? z8O(lX@iuSs@7pggqN>CLQPG#<xhf@x{>%Nbc+D)YNxo$f4y=GE`I1Yrecv?z7^DH6 zI3!CExpq~EB|RgEDcWQm7`q3}0!gcNbgS&%k`-berR%@n>^+(kh|Gc_k92V$&#rLb zfJnzq5OcF2)oPszS6Bg^Q<B7X&1**y@STkEd4liP&D?<sT?KdGKPy&Z2jvx{xx;V1 zQdH2F5_;w*#R&Q#;@_4Xkf*VGS$|LdoaeQ@cdv@C*zp_X0!zZ@J15UdfPl8rbfud| zO}?Z0-GXC^XI3}}vOiEdwjy3T-Qz%n#dT)Jd0vtnGip71?5~oPQAapQIv7d1OhgGe zk7tup!d=jQMS-vD>PdM{;MT9}e4Myal@4()1kUpWGo$1pU4ees>s~KMF_1(7wI=(q zwT7b<Two9-T(#nM+<HNJ6tr4<cYgvv7{LAGL*h^e?*Jf^bbth@h88CPKHfjT+zYEj z84MW1;5;8z1UGWsT><DQ^|*I?dqc?uANLPj*M-~dX8Sm&Bt=y3U|n+FU9}o}KtV#5 zGpqj|<V^ChfDEkR0C>@|DME=nH6ORd_H-8Tva;z#!Sdp(?9OND02M*mxpi=nm0=MI z9t{!<ZZrWzJxQ%&16WRxq;PAk#%m%nssn)n@GxqdX+23os^<^;j;ex6)?J@s(<YJB zTp&qzq33%9N*VX_z62HDh4RlbA0>bk8XNA9Gob!J?|iTnW{>N#Bs+9<nLC@Nl<{tf z0)8}B)W{_mqk{oS=9}DSN(r?w8dq>ifYv)H`7$V^ZkxW|=x*^~U?c__Ud8UIUqi9z z@n2Jh3|YDVh2-6J+8MrGND;_}2iL!rGOUFLed+vo_OrA@>a+kk&&%jGDW!4Hri79Y zLzHsXc6!BmT}af?7NULwNsu45>KJxVjjfgpC1C)RGJt;ID8iOXMooF5F-W^wmPbZL z$>>2fB_t_+*tN`3$w-`qO69OSeIM%8a<AU|^&SoZx~>b2Nl-QhY2l)qMO)FdCTl(k zNQpYq?(c(C+rBHnOqMWf!jv?bmpWrk94%j877@E92f6#_(I-ht>(~s$f|fKG63B+s zEA=Raq`!ZP7GNz!l18C56-m=gqFn-R1x`PxJHqJp6ges#&k3|E<5(zmNOB+~qYDPC zh8bKrbTbAQix+f{9m>-W386knqM>xaCc)NdgT#2;PaMZ#|Hg)z^LugYXOty=-lmA; z2I3f$_*JmsF9aqm6sfNkQkzb5NL<Fh=bz<3+aS-x;CZR7)Ci9Zg}ok%uSnyIL7O&3 z2$tmF*|GJkkl8*<8hk;;4tPWL_-faS9hGV%{p={NLIF+1*12{Uk;X?a$I-!~R(k;= zKSwDWjkR&7*#eC7eBgYXIBstp%*wrc{`Y_Uikvf!au~(YBc=VEO1LChZy@~n&wuJv zk^6_yZr*N(P<aI%Eja)Kc6P|~&Ps36<e!s)Cara<4%OC+35pN)Ixpm$k&j~3jg*oV zL<;<#=V`?Ta|Qvp-EOGD0svrV?4aKWRg@f3Dtq|;xTDq9&*ofkUDBz^+0M1|?A;cY zXVz*p)_~HMJEGtEdCtm$$ZiKyU=@H;2kl%e*7J#{1aF`DP<Z8a2M-{KHoJtkNfueM zt+X(r)K9D0K-7UxqoN6Ls$eY1`fu&BB6UDoqir#oEdBHI6uT(UBFOV-?9*DYV1+&8 z9BzA*9s{9|q~0}bvw!QcRM5DhwYpMw?DM3lkeKjGIO>tRM$M`G`<2^apy4T0s2Nye zZaCh4ye=m>{+<Gh3N9#>vXmS;Up;>HXFeDglDR1D(0An~;C4rOvZI>-%J~I*fnRnU zM!vlP1@#%zmJGFYL)hiZe(ZrjU+-k>iVu2yYJbYYc=7$>o@#$Uj=qy~LC5ZUVom^Z zQLbrEtb1Gg)~m}V{LvJ-Z`#&OiEyMc$`N_Z!C_{3-yAt|iI4=LNIBVp$t=k*7?eAb z)>;EMM$W}%I+|9C#FAu_1pWlKrwx^EJPLuFGp<@eN}-x&Wo*{Lx<4^#=#&9kI|)94 z9wB{fEsFUC0-rM?03>hBF1hEWqv9(3Hc)<hzS444G!Si|I{vqfU_fi-8@e+b(ObWm znH4RPdnnI`lymO*yH+?6p;nG)f(7NszhS!{aq^~dlf!4A8O(#zKAwlp4vfI$sel}K zsLj@>cKOKhMT<N@P1O4OlvXx1TX)Pn6_0C@PxxMq@>yUQltej9X{IiH)@k{?5Mf?X zzCH3zQ`cujM`Oo>HgG?M<YNm+@mG);Mw0!|3vY5u?5mVFIT(G*Wo?wcE<!d3&s^;I z=rLMs;~w!hi`q^9Og?`{S+f)jzMIU<pe(dpxz9c3r7^cBw5go4t@+j(?)SSr$6Shm zE?QhrP2nD#*J-FNEIA;Ql0i7o8soYu${`74ZQ$1MA)NK=y3pFg=IH>!?RG;crO#_M zH~ZBXxnuz>s=M1XI->IV^ueW+P>x#%#-zIgSwDL2oLB8jLSkDkM^6UjKDSoU>eUh5 zlu@!2dq$&4XpqE7&g;khv}e@kZ?e$YU`aM>{NsMMr<~;)*w_r^IC|F>NxD2GP)(V3 zh47f00}s$^1`Tw6NcR(Mnj10qniFh}z?*wb_P=cOrX8A1Qk0eW+T4&bfvHn?tm|%6 zVo1?P4qYB4l6E@dM;a6uMMA>)tg~bOvs3KdLujI&vK+v%K$>Ceij4lf0+<xLzy{R0 zB-K%lnCco!X$Qb;&YYQwuKW*|PsC?W#@_IkA1UPib;%|2o_WB+X4uz!^Lb(bxtl5O z&oDjh+glNCG04-pzea5hGkgmAGvXSi*AyuRhkF??Xr)~}oAX@gy98{P)bB4Wmd?+U zwNgfK5#Fs)SjN901%mQi`(d(KaG7kuj%1iaCxbSqoL2h%?Bof_XI;NNk-OSBh>g<3 zh8QVlv|SwNJT_bfaugdf%8<2V^?Q=Q_Jk5)E<rzUtrhlRIWDpW?i}LQ1a;pmW<o$# z0t$`sTr@1Cx#b8BD0W;@X-PzN@iPIq7*)gvNQ%#bj9hX+7FbZXCCPC`*qjJbib&XK zZ?*u06Fhp`kkSb7+A(18KJlBVSo(TO3m_TX@0?je<vI!t-=Wft%5ekIRQ*$q40t^t z67oRHbmql#Xr)Eo+&wb>u~4xR3A#GB<C&L$O~AL4%FhZEKX6a9=UnfKiqCWLI7hH6 zLcWI3^QLRD$=3a6nyG8Fp)zd>0qv-;Qc?}2<mX)otTR%6nbATe!;^Lhf6BxCQVBuq zr|-Wt|D%7B&WllU9Vr2MRHS18OB6AN@!}aH(FXcJdXZwKlmfnMC*;6!9JuOb$#_l~ zbd0_1hop@kE>xF3ztCscYCQq!$u_efqVnGL>Rp>sO5dNYp<Wk`<G^`dM&kq#ZpUF% zV@UTu=Ymp-{QPM^MXOSjT~`OTl)Iir(%Y=4>FB$@79cYsIs<uLNIBs+Zn&-skMops zR|7-uEcN3-2F4R1rD8+WwO%%ZQbj1HwS<%v1QF2;p@`|sBst)P(ir5|t`PYcMbG2P zGafsIZX1W$f@M!hVK8PPTj;W<>3k$tV2s?B+@Le8`1tW7k1oxGmS5K;vqN{OWk|;Z zrasLy6{d_d3N3tLFAO@{lI-!b#2t2qjr@i2YzB=jAx6lB=9tcNq}kAXwR<&phshOq zv~*c)7|6w64$nOb!t9#ygx#Wvz${HMk~hPD0Z$C~m8Hwy^jQ*biWJ`kM-Y(+uja&h z_-Vc!N~Nht2A2817c(0)Q53&Igbwk4SI`iahC%E&{f@537mAPG0iiVU=!9FyW6lCJ z(pxsZ<ND!f;ug>oF5&o~vB5eY;D&%GErdPxN)a{SQ8bJpO*oFC<72Qx$z#1UCA2Fi z(7nVIFnxz(47aitKjcsihEr}>8>TezF2W4M1eNZR6rTCEQ;&s+P*J4?-Rv5&6qkDa zij=5I3OI%?<$9a?&x9t#LH|+YK@>Q=@|stZiB0r0kWNDlDXMW9B0fm|ol;1yyGQPz zjVN+XITTk~`1$S*&taQK5u6gaA#--cmJeFvX=kDJ^#&a|nxQ{z@d-)iyF=T11pQk9 z1<w-p=Y@l=hiCH^yb(NjHemjw0liOv2yw>S?`Dn%)HY7ZVDTh;vmO>N=~DB2ld8?} z`ZJnLx%e|P=@~1%YX96Q6tS;}Ui0tIvqze6Xm_~pp=$I}pC~~9gjOpq9$mrt@UFG? zIVee(N;<j<mLbpM=T$|qs@jvxcW`TfP=hG-VRKcXqLlFQaktJoU!BUt45ZwL<V(q2 z;YtdS-+ue8)0eWwx_&Rbs-wNH0}T3%UmpxsD)Q}ibZ`d@a05{`YELfNXk*OHhVpem z<XmujBZ)~`19st+>rp!$DkY<oB$*>)FplE@T^DM-aGsZA8T6$4cFVZm&!Iz-$kvK= zhw5c?Y$XXb8{S=$EOzVyTem?aC>e6@2d`N=!n{#KQi^YqLeuETG6d7mz_lXXZbF;$ zX}JKDy~PCPG`1eM0J3-`$C2Ro*_Weaa4S}*Sr-Yu1F)Huo4fIwa2*tn9OFb2^T>LL zU_=ni@tkg7^i1<LO}j?)9M)jk5HmdKZYLT*@ub$-AkQH1y_lT{;Zv$A?|_&%HyR47 znQlZOh`IuSrxr6mVL%gnn{JJxyrt6elk1Mx#7-0Cx!}w5T83WF06sbM$4CS%YnCU) zu2<Q`*Ojn7|NRoE6f|`${3`{{Asly{jRWjkg|sd8_hnaDD?G0aUg#M7tUWee-cZ3B zFKCEA=t*`nRwHlustDZw5rAQohvou=$_R%d%h9!XN>b=WG7+gz+nW7lB1f)Iu1Rof z<PHaE?+fY_W=<NrRy!F|l;uG8@8@Mf=Z(;)nev0ul15u_6sEmEY4&=C&}YX#O+%WH zO}%QMO*F4P?wt(wGJBYZxDb#)4hPK?oFwSBrDEVfLGw$<=sb!7O_80$wp-hzjL(%O zelIQS8H&H27+;?Od6n#bl?b#Q_I5%8Q4;Zq`p(oL7%0yu%r{WO^1gEyWSz^3&&<{* zap<(|5I$buJDyOtsRrh+O_HpVxi2J`t*hNTAGH~0ql<rtgnG^;{9aG)vc#}tU5dUJ z+UTeZQA+^8Q3}rMMB{|>I>D_EhwD`;P?1vti;&3e_SWTl1wi3OI7-3$`+H9~K{$># z>uz4xg~$EG+uIE(XS~1v?DDD-?=EzuqvJSC_EV*Q{quagy%`NmlX5M>+IgBPSgj4^ z=#stHRq^rh0Jnx;e)-|Gr$z$aWZuR}EVrgZ;=NP!I6G~OYs2I5!0mQ(>OT;vU{SlO z6}6tY9S4|uQFMurf_7cAs1|wIX66><ohcdZYoSCL)h<~v(Q3tcK2YnJnaVkLu^H-J z1nY)LbFB-y#Q0R@{Lw<Uwbp52%)Ph~x!jNYyB+#t#<3{~KRP5TCZpg~Ys*<bW*Ox3 zvP#vDghGol?J~{X7C3-!(0bz}3oiwN-|ikXora8oWhTS*eXL6pLWIueB*znT^~$rT z8wStkb7%`-O_bQs2BOh{=6Kcz8lJ_=7U88y+L;jPdNea4z)>OU*+|Ar`CAdF*zJFr z?bDX4rE^*{sLac~rthEKw4Rlt4qdO+%G}M2;P$Ne1DF+G`Ci$nGVJIQ%%3boA`gPN z_UBZUI!J&v&zvW;lqTelrgD|%K^@krpCU4D=%+4HUKbxD@+=vfs#@m>c<PoULwr0^ z5{9%mDq?ul<y8{KPyQA3!Y3)=F{rj1tnIA2<2Z&~F<}hcg9d7XNNLf)YENTQSn@J| zOH!svAxWP>^1Ib!|9VnC?oDHMekHsngPWEm5w=NvqGY}@D)H<0K;SidwKMiXb<p{G zM`w>R2l|Z@6o4C^22n>JSnp5TB0Zm>9DhV7WS-&iL*CEU=uA!897`|1^0n_hyZ)6y zz?+f{LFm}e`b3e;XZMJAhZ%o8@bVP;i1&xpSMKNfek<iH;z#M(Z@-}Akvjt@{I6aW zN4Z)2>H-l}lnJ}vM@RUxbpWa)(<x_^oN?7omnBi9y5B!=0tSAJIN<14I-3T@bv=w4 zbzT?V-fnoiz2Ugs3=C_nqLhMCGH$m6_xr;-FSpw*Q1w){z0*&HzT|)<Ze4XsWqnn| zM6X|c4a}RV)$Va6$uj{sZa3u8)w7bQXI)n{Fs77(DhffGbZckzJWqgODqI?;8~Qwl zKFaGnk#fd$c7LsU^^VT%R=P^q#{(&6Q}1dz!_#CqoqAW>e4MDqXp6<P@^|z()$77_ zod7y@t$&7o4|VYP_VzYrC%J(uyTXUfE2)}tpf7IW3M4;=>DI1Xi-MsSJAsu+1(3qN zQI<s8c2;$3)vK;_C7RWzMtn&Gld4Z9sZBP3?z_Ze?9_XVt+MUx&Xb&a7ca{*Q;A+L z8qsQVg&R-4M-#<&2{e1T<(Jf;iIV1Y@b|y7%(>B%pvM81F%PKeWF)sHyJ!$i*X{?% zc|9p+@0i)c30|zz^`>dVYx6_7pupgnxNc$aoHm8dOqbr>u1O1HORf87SQ7X`Ve*~g zLkbX{c<rlfD?cHG@osu7EI{67g7ae^Mam~9@2n}U>O(~6j2E`HzMJZqwh~X>77nEj z^X5V~xUc4<O$Gr;<|IrTTwX7y1QwG+W*5J?X><zL<PUvp2|Rkw96gAAtCYes@deP% zR7MB>y&;z`Bnb2HnCoy+EN;Ac;VW*6$;}bZ`_OeSrUY%9R?a{KZ6v{XMVW*a5V1&4 z)rv#Wp0gZy%`~@x5fQaHIJ#nn(0SV>7qryBmRgnn<`w#%u7RI$lZGhH>q(C1f#MZ? zXR|T+vl9B1FUI$1Uh6AS@b>T>z6f#f6M5P>=J4whkJtP1nGqzx@9Ve@V|SAR7lL;5 z1m9Z@Gifx@BPr<G2WiHD$?;Qd_<p^4Dr6YB9Aj?57`mP2qjMj`UgSb{drn3xDkzp@ z-ye6B<2GgxB>Ani3jbZCdYb||3GeS8c1^9d-eK@2p<)0_1Tg~aorzW(vQkXBn%`6@ z8Ljm~B1=N|I8XWdpi(|WWlGU@t_`P?d+$=CKt{s*$9wnaIBvs#K~%Wv*{N458QcfY zuTCyfu@$AeNdZzy22odgB=P#tp>q;x-&$+;H<96T?R2D+a2%x%{5y)Gr_U<=HaYb} z^#f60MrYMRVw4Ey<HY^(z)=oMg!}7PD{}tvkAL9pdPsrMTw%dB{}EKlf|NUKPSJnO z8%X+s+yn6xgr|}fJ8*LCx;N5B0ci5Z-NdL__H>+W%y5D*?8I(nV9$3)qojSZE(?Ww zu4_7pm`h3muys?7F=ru<OO@NWNk^%56|8apeav|>cR8nkTPg}0$ctxen(ZB)1Pf?2 zE&h7X9Fy<JN{4z@$P65J?mzi}KAkJuGoOdxjt8&Zhty7MU>?k$i`T@TzI;EvKSb`k zYxFd^c=l5C?R=xmDS9YE0_lSmZGAUw6*nkHzMIWQ1Xz_qG7))-{&!>I8{}Kb9p*e* z+SCS`oP;;5GOCU1pcA=);YG@hY1@_@=>KGX=ae@FUvvDdB1`%em9SKLmM@5+JM@Me z!W?KD-h2ogW&MKbng4!JoFEBY2!qba6))^)U!g;09oDfKTj+X3N|MT0s&UaowRFf# zvN;Yl41{xrWkGdJD|}vrj?7Aa_}nB$$@@u7o7c%jPXm)C%j%>n!#W4M0lr<FCM%S) z7;9ej68-APv$jKD4+#va+z<fZz$u33DodfujvLG`lI*X#s;}H3{#qwsR&aVr2Ma2M zG3mjCEX{xK9_*LhnE4Zfw3V;BQ>F@-3DL{0$lO||4c$%W+dNgE7azsfE%9^Dpn<R; zlDaMPG=nDVqsJ*SA&5?Q5@k2>hG^o?L{7wks7tWd>*{i@f<~*?kjAZ)v{31ErQ4BF zZiftv7kqrY_at0oVvpO=MLmR`QOY5Sa+lUVAKjd<&qRzFlUl2}gC|P(@#BXf^GdO* z^?|n^T@<3WiX$DvTuoHH8h0wx{r(X8S$4C0y<^gWoK8zUjsv&j)@fey_4oJpF7#2# zNczjsU-$8W$72Yi97iwmKJFjlsC|=eN>5@_>ciyBStwPo>+dR(2_#*P-p#1J16A@c zvvu`qPh_*LnFdA7hrFp8Ku#og)Y_HI`n}IRu1i<t{r&-#B=_;Si*LzrTpzL2%OLx6 zec#TWyXrfLemjjSGO7RoAOJ~3K~%HgK_HurpcfR>=&$g6AQvKS>r4n;&O=CMG6!NS z=6C!cZfpQRV5G>l?!pNSrr!N()XyRn;n6uMZvd)5S;<*AFByzO{CRpo-S@&}v@xQX zhDN|~nz>|tQc~;z$fq%ppMX8ICive`YkCE?y?mg%@AFDwdn%;D2(!}KX;o_He*O_# zy4_a`h%bYD+hO!itdQvy<CnhO5wQYfcKGETVCi*+=YfsQtd06wkRfVwMeGvzMO8yP z8`?(GWQ+n*(d&q2=2j*@rmpVjLx;z$b9=Ar!d0oeyw^6VIAIJ?dzW==lsjC4-Z<9J z^JBfPQ<CW#w5n}rJ9WfDhqFyz+-q1*$&Mc2F-@VVaYGADNrRh5hAg4?{CV#h?s%(A z(pH{45RBKDXn@i|aX|{CM1iyGr6{*_QX-So1Fam;SRlk<{hevGUQP4#Kd7U-s=y?B zyJqr>u;EyJ?upWp`tlBYaQ#r-Kgo5J8rN-csn2cjjmO-JW}HEpMbJI%0Jhqu!mkCx zC`08KVRmLWKkzz`JRdBd)t9^?%~u0wINv6Zn7G;}4;Nms5b)lp@0B6p&M=Mnb@4W< z$81dupGI>U;LePSVpd^EAQF!Uhr)S!S`<@o^plBNwNgG@al!`}ZBl#b$m<xk?Zv@$ zRn*E*W&EpE<P6+yhx3Ne4q)mAeawBRIAzp&0U#XZusO5)$K8g<m4Y-9V?xc{+5C1Z zczb(8trhR@@7)OS=reefx~weOY+3)@$8q3sf1s2DVBowiOH?0^ht0U%?+-I?yWMV` zN+oo&#|fJW@m%{Nl(Cc&Znw9QcroLk?z-NDqLwI&6mG-YkAnN-j{E(NH}OVjN~@_& zC|_h!ptbdmN|SxAod`7<)FsqvLprh~%OYtn2Wi#V0U#mu80qFf2EG%MvtNJxukNT_ zM5<Z9zxR(1-0$~(?*Sa;kmReaon<SE2c31rrOEspw$d={rRn2dSKpI)$ab(OR#cwn z?kjoL0dK(<PaT|TMl<zGsaV(<&b|O}xO%hb*ln=$x{d*VeTHxagwCmS3SmMi1m*(f z8*0_Uy*jnfWs*By=bX6GQzF|s68t>RpE}*Io7c2^xh=x~)nxf=LM=3j-0Z$S9PFLx zw}G1EL~la#1TXvb^yG%n=XJ=pL}=)BFXc0--Ov7%kn}O{x$|ND&=X!#bVm*@0ZZrP z$qMAT<;4Nj)r7Eeiya1bnF<dI0n04Gd0og%qs8lLA$DBT{t}lA7pCR5(}JhS+qPKo zvfDI6X07$ZvJUP10qT#yq%H7Bg(5S!o3E*<iq&RgtwwY-5ioqWiC%C9$<dAAxQvr_ z`0ThX#~D#HS&CiCd01^q=v+%$Tb6nq><cuvQMAi2RMa9$iwXUupz!7lwVXnUBJQdx zGeh+>ZJf{nBHvCOpQE+9pg}9opI4R;qLNC#C(XW{kc<jQMomf~3y=Bx@MF>a(L6=M zR{){eFbp(#yF)$?em)tY#otAWzi$k_%(w`>z8vh>dxUjvBeve3A80{2jaO%9+TIU6 zfRYXDDtb+-^dyQ$I{2({BB$K_iY#WaQGUo3Ap8UY3-fo5FV?16tIjEB8=CI%EF#&8 zq|$YvUKNe2_zyJj<1{+ZP{PY1hJkKGcs`_qP>@PNP8qHB4ouD^s4HEyqDazLQo^HZ z0nob+KYskMfn~O@C*)jY289gND&;WB7dJ*JU5>odt;WD{ZB-0J*^CrPUbmYG_OG9p zP+MeCHIdlWE_g>k6`-mpDVqlpw}$theMtT$ej@eiGZEz|-Iq#=B(NWdPM}HU>AcP% z=D~iTcXaxC!6?+T(!H}9kG{HkG$nNoml%*U;pfkv`1tt1j~~BS5v21hiInn|j26}u z;kOQ+ldfg{EOZ1apecE&qlPm*G_NN${Bxj|Dr}K!<In0#?AgII#3&*_!)6O+gS#op z4;veNksjDkUN$~Mi+z#q+0f<1dOe7ADy6|;GIypbXQLGJi8@uUl)l%_>*{8fVyZj9 zNP6mFwEKVmLFlQ|`W%eCoBI>UYbn|o^vsF-cg{n6H)&tM9vXgOd_{JQSN<foCZmh_ ztXD#_xEHp_?C<PIe7~Ra&%IAs4t*yTxBEC84CrYjk)C4ZlN_3$1g5F&35R-+llyh3 zhwB%!Rgo?TQRGf1Y4fYnNAHqIdo(97C!r7w&aEGIBlLsjI1W6_y_T#fp~-Y9xq<ST zG}V!Q4v0>iDNv_omch!YEhoXSQjL|hEZ&}+s0k#QDv2gyTEHlcC-S^o2#kySx5+OK zZYzVMWukZ8q}Vd`T=#*-d*!RKcKj(2MF_@BO+P&ROS-;;8C2157oQP*nyUdwGBufi zxP&^9H=AOket4s*MRiR0xw>A17mD0hKilEg22GT-cpAo@7dxLDk6>3RN?YhW42K@( z*cz~*M(UEpD!)yx0~7Y4qoQ?8ve~mBnhBg=C>oxaF!HA_FpBD}bRaLxjO|folCwLJ zk<C095j~LxrY-6>$I>Xa-4oza4oTj+ByE?M9aJEb77l<#-~Y)Du&>?g&kqMe-jmbT z+rb{4h7F8&B(>qZ&QYjH{GlubjKnNe-KzDH1T%w~P-P~B7<k+-D`0X;K)ui^BZ>Fa zp@YxdO#{1GAEO(w3vksKjl~^2k=<8ZRff#_fP9rWLy3?DKw%~@UmeAlr0qOU<kA!F zt}-QE%j+_Ou`aL8U{pX7{jTnn(PS8V6ba1%QfvYc$8p1Xp1976Qh@Vu_9PL#v!hhm zKJ4AxECq}2N;dxseFlx$=2?i6U0071&Gu9ij}bNK_0A6O@9$y|TRW8$W7eRQf`9$j zf9({lj}Mtyq2RM+q6-sy!A0N6KO%<mFh9k97gB)QjJ~vZmpU~{&nPgq2L)O*KT}px zsDsIwC6ciQh5{nuyrw@%Cw{#@Qkvu?de+Cd#uf`q!j~hcJkPc%6;u5%h{=p`bLt&c zO5LFIcDv!{Z$E{>kQY&rKq1{wXLe5TPv)B)08U$Bsb>WV(LNcT6}Em4P3u`_<JHgl zpJ|h_+#FF!x~kTd!Z1u;^{n>y<;xui`e(GQe*ZoDya1tT)A$2&=}N30Cbp8|(;x1q zX&G++v}GqlcG@OQiEx3#Lp6j>+v+1*1h>|MZ`b7O2as^^tj#FS>7I_II`CSNwpzh7 z5Ukngr|-KIWPd4077nf?KS@JIvigiy$a~b)FZ#;EEKFVF>yWYSykVC#8}*BfTN=AB zDM&N=usPFee3C9arAblBkFV2`s3Prbo@OrPEDNkNA+r<u+^h2)4n2${v7n7Bsag~j zXGEyftTYg1cIYU{Mb_Gaa!FTonK<@D=91h*K_?6lM-nJzH(;&826b*fIJRI>H0r+~ zQ|*+mbiT#jDaC@<8;Q2YHp?`4-A$+pyz_>78mLA`@S8IzmPhdNHUD!wClNdD=!Snq zv@e97vB+rh2aN&;ai*n|g4^xZ-L6Xk<<z|#s3Xj(5OiLbGqP)e{+MJCRh5;zM}Y74 z`i^mQ5nnrYVLefrs9Om9a<UGs6tN|t0N|qDI&ZPtY(;qgJQ{y<&bS>vP({>3KXb_i zITPyD3lLWBzBsFQ;H4+3IcGc`T_X4Pb{KuCdwo<<hk{86tD03Mbb8iNaLYH`?{~Du zIF9Ui+s%vuwG*Y+e!t(ld0@)jg*=x*htYvkb>L13=XLcnNasmXLc6+ONDs^1e3#M9 zVr@yMp6tK9{V)JvbiVpM*K?25$HO}G6e)T-<CkCsMm4#38bBkrey=BW%+{*W(&|;g ziEXxz<c!U^D~BD&Ur?_Lr<f{UXD{-MN;Uy2zJ<9nPurS$df+rorldT4fo%TiNioh7 z4hMR!)K9cQ-r4g%RyqkSM#5~fRK5^H0IWvr8nKnOw4+fY?exBVN*4<k$dG)ROzBD~ z_|u>Ng!{)wph0dawxC5aoM#&9)42=Rabi4mZ&+ciorL=LF#PW%*k1u~zH0cYaU`b{ z)_oFybC|v2`3=DnL7t^<`ChR=^v4uzUnoGP)6yr0Di6ugJaBgG<i%t#-kF3nIRd-Z z<i<X7Odg21tswmBJxx-CB$?L;TTLZTCE%VSooDuNJapFkW)`}N4ymQ#X`%-a34KKm z@Z^vHj|2vDLgp|u?*nO1>b=^?X4b>dZHlg=%%Oc}m9`jlr8KBC*IC1+Fx3z%qR1R? zsgWB_r=b|)H-@8wDJ7%iYzw?P6%*g3$~l=zQA*Lcavmns0Ii>A*3F*jPTnm(49PbR zNhuMGPN9Q>T9EmHZis~Eb;X&Tj!a0A=sG%@d<XMMcMtT?9<S4{QeEh;S|^&&=oI$9 zcuI(AnmL+^(N#qv1Sd+nVQC7pWS*|)6~3Zc2id@K$~hc>t+n2|=VrbG&w}!^?|l}- zSGB%H&>cGulKuNVlh2j?G07+LM*f9nzVdR2PILrj9HrpTzx>jZZ7ED!t2RW<O~4O9 zLCFbE7?1$6Vd>!kN}rL`wudH9Lz96E=i+N}Dstrht^eJNbO^GZ1Qbc*`=%JUK5H#% zJ@U(qan%dlx-p;@0W4}hwN{A}$=<W%13!QM)@LHb(Y%ymNPlfz?pODrO23}xX)&u- z2Dj6|0$l@LJ*yXskH-V&W6*Zl1U4`R)|CS;-GNpsYGWL?!{m6gdSyUV6|<Aqz0MAP z&7LzNXRcio03CE<;5drAhjJdsuzXGlRc6ohef9Ihz>z$p*Bghq<3zyY?1dgVCw0vm z$kctB(9imC`dhx??Z+FKA;Zu8epjJ^4b#VF1-b%&wbjW0Fa?M6**jt;jPImohP3=z zS@=RN<`~1gj=U9sDG$z_R9aO|c)n&1F_?Hr=zGAh?-QL>oP=K3(|#~$#EVQY1u+ta z&-;=nXeDD;=qyn=ihW&Yaaa17^sT%>DWXT>5}jS%WS%M<O`3xVtULES@cE(|_}xS5 zUlnEf_Rq-7Q!aVTjbRlvp_v!_gc|>h2FJ@T_*zHgl@Z~0Wp=+%fTU0egiY!AllCU* zvl^2E8W_n{Lx;|))`aa`0tLxS=U+hy$UsiTDZzMDeemg20V}JcsyN&Fpsbz{o*JWz zyNa@eO4T-I6SDwK_yUdLQ9tZGxLO>N$nko~wC1fH?YEmcxcZ@CXLw`*#uA$r@N{1k zb)zZ*xgksfK#Hn5-w>llxaI5Ji}fu#ZGx7BvN^d!zS`JOErkNZHlQ^^QfyyNNDADX zi4Eh=NO~v=Iig8Yh$TvBXC3Rn{alrGaGoQ{p4GrpPEPz_tOGBfIkuIT^leUd(jj0A zq_I+ey!0;b5>1X>$sim3q~jRLKr0@QCf8Np<?|gcHSJ0{<2VYAqx8Yp*1Z~NgABb= z0ohg?FVpDhGdX1iEq<-2pOW9fAc!Ic&b-{~Ltxc4BNGXLpIw;{)j=umSzIm!SFMio z%Xo;Qld9>F?TbjWVy7sVQ!;S_OlYb%{R#?xvd{fcq!!Y%B)9L-2CAA#nZ~vc*&#cI z>U*~&S!}T`U`kF>R1%+(1qDnN<6FB0us|tX=h@8*FPXb2#U*!4NU3xfi`bI5CZEIe z_is1x*eHk5pxCKpwbr{4S&EF>Dj+^6N9lH2eW3l0BIiw?n;_R|?C;&ZIQsoeDT5Q4 zQKfYnr9-PI=>2{-|B@zVkUc?%DSp*jO_|RCr#gI2RCf51`J61pnkN6M&NGyh5?VWv zOBr-5>VVb#ejgNArl@u(Zt>Nht2CZ3rA|93<-pt9VIA!zq677+qKKvf0C#-c@6aQq znfH=(<wVfLC*QUoz05z2;$`P`5eA1{5C{l64S;gZbG;XuZ~xBL=7gO?L2w6AFOk$m z52_U47IVFOv$s35^+ro{w=r4AC{Vy4rJfL%oQ&mRz9Mo44obJ9A16OZPhsd?bBI;p ziI#iUY|dn;lto5=lxL107r%sBes>S#JHy&vEIw?FC2~2y+A<17=NF5QnWILZAb76| zj4!KT{S)^E017*bkT*>W<I1jt<%Lc}(RmUPRY)|o9+|dnp)?t-u;Yi48+vNokn=G< zG$ljZy!>3w9knXC^vy%#`W0QQM#qYVJt~izZh0VEHtY;LFp0<^l01?W;;`Xo1^zMc z?s%c{wdQ%0I{aBHuIm()6b`)9fS-uG>r9)OAP4sd)`9oF=n2F_{bYQ8Z3Q%2jBPQ= zCZlbooTc_^+h9O$P=9bhlS55-1U=r6W93y^8<L-f<fg$V9vu;1B#;#Y&L^}VPhNi5 z6ul6xtEmZsOXRwKzjk1xXsko>(Wq04cL=YdT~8tp&nWv`u)1mDph4~qEq*4JvF+i~ zA~eAZfvFQVsC9pZT6>~)dwc8qD4pFsy4G-*ylPj|<aWy|Nn#XT6bmbIhL<+^!ct6m zGMlU|ZtT>>{9GEDrwWKrHK}8sC}U)6cNECZ|HFz9HiGt1`V7E%UHuve(sfH4zXdkV zJIVX&T!osq?Udn$)cBx=5DnsoO1Nqwo>Er|R1?3bkOkYzou|<gzeaJcP5m&yjOtVn zXO~col_Z}xpv**KuqG(1bJNZ`uq{(6Z@0rl6RNmnt1I}QL_W6GYjmEW^Bin@RG-;( zU3hzY8x+sf=~~xy^|=V@MI+Z1x=_0AnwTwWA&^|>wK1eKG9<g})zI2$ak8Ind4Ml% z6eY(|!eQ^#%uLodXH)u83X~N9MnP;c6rQ><qIQLekV@&^Rw{Nv%|N#qICwlBroKk& zfRh8g#vC8h0I)PZD~P7^IJdVO(vSF#x3?SqRR1h<i9-xQyU*G=F)DR)Ae^TGwb(QE zl+Q?)^z*C{xi%k}jan%Co8izLS_U_E$TgYjr}vro>tFwhloQ^6e#mEKJ9Ifv-6?Lf zDeqEY3Qzk<nXK3tMaM|^o6^r^jnr196RV%6hV?inq^7i`vsN_N6QO%W1WIg$3+rrc zWaC?m?cFd%>KD!CFO59>kx2ftPRT1}tdUo=2;5As$+Y_GMXLEL9PX7r75!oNg#H;7 zta@JI05cTLtE#wR$|R0ADz7)VkZHq9Bh#<<%#!SUIeZV#iXR=40#I^sh(9dQ7>&qj znG-pQTTSTOC5VZmm6>s%PrNfSGnmDU3F<bQOz(Vli1++(tI!pV!8(+0?z667i^@?P zyfI)Ku8Dd|##Jlob@oHlA?PDR7{wh;i;<>e)$>sa;}9_Qkg!;#wMw);FS4--Qv^#y zT@G+so7D`mI#O<}f8m=GRyK_tu6~f!O#OyYR%6c{9)by_6g=t!++c=evr&@gy0e#$ zZnYnxrs5@>QxQX8Uj#AZJRbq|)3?##_1JOT&|t6`fL;_X9FiZphP*nq0+VnH$7YG2 zui^a!%`TvkqHQ#|!~vC~ZajyaaeI5i<MF`9$2%@@b$-?9h=|eb%RxJ;I3T_%>cZSF zCxMBK^KUaldf39ZI7W;M2Z|)Oi!S$E5Ap09DG@L^>1tWrwO+W+d+>DW-ZQOxMI49I z<e$1vErJ4?u#SX^CtB4Q=#9Kl4pbDv=tAhBXN5SA`|0Ic;ZSF##0+WfD2@Q3QZ<)g zX@@r{sAKA1edgmaDa={&l#>)Ct{{=$%ankU&{_uGZZ>D4N>VDW(c@^J#YnlYo$Km! zpwP)|Ez({=NMcZ^9zBEseB_kzc-+C_|8YLfSX2<<@#rRml(Tf%J5B65FH}^#z4bX1 zotq)~oTVJr9ZP05=VMi$RiUQ-NezGc<rlnv^yIbVJVaHP2F;Ynq-C@S1vgag)U4xn zbMo-wD{@{UMg9yi9e|4#q)lc)iL`5xECIc)%cv<j)1%b4?w^vv9Fq6v@G(v)d@4~} zrGunum)cb~X<<=sV|G4Cj3KsSb0j<{N{|Cj&+;e3)e)c_pvE48jx^ZT8s6S+Jr-Pb zB-=`(74I&;XY~9|T2LeklJEBKv?ja$sw=mlYS*gWtDJ{G$xN4zaVq}%qS1jG1<`)h zOwMx7$PpoDG6hkKL+QJHiEqqqe~*$xFANvyiJbs_(t)8@U)#RIA2)FR-&K6{0;JY} zl2^S|t)iLN0Y_szqGecFTdP(qzz<8s;Y9|Jc~r>C*VjO<8*CswQ@pV@Re!(1Kc%fn z*id_lb1I1vZiOZa4?@wUf8~^7{^N@Vz!XA!0<{zueN-|a>KYhF;_Ot1Br(s4kZuQ< z3(o7p-Hf8xiY;sHf)^e=2N-!BY#+r)bu@srSXubCHXNCTuZaW#Gi1_hq}Zx%?dnds z(n{6)rlw_fILU?Uu<20pY60yEO=pQrwRI!1`^SBCDMg&iVAQ}1u1%-_u4s)19y@*f zFm2~LQVAuOP9>0pfH3)$gf2Y|-Tqy&yK0cQ>&N7~@`}%dNjIN@WB2P|!;9jKQG^7| z?sBKe#35R1xE(j7l<@1Xe+Qd|HthvvHV4JrDWOUCJW=<DP?=OUJyY7Kd1VOoN9i5v z=Rzrmxd+c<j@PnE1yAjuAe^C{mE@Aet6uoq-~J}jt@^qw5~3BLCUX;V@lN><j`By2 zCdJb*#qf90g0mZ!!F7Mk7pFDbcex}aPL|Y?|De<pe4d72;V3UkIW#F$MAOnNfv=e# zP{TuJD#q~e=+63~VO6Gz=Sdo9x+Y<AJx1>$Le7Iq%gng(A@r(dosd$B&6p@%S5>T3 zfW&1ys9a68Fy$<T&ILyI5J@Tb<l2Tw2R((+eL^S~0l2Cqs`vZD)^`$l-|ITT0Isvk z6py{gHq+9F_Ok&)EH3JunpXOKxi0fq>GYKWa5ZM|dD?Sm^>S)c1NeD79=N2#;tsvR zyY^h4rDHpax!zTRm`sjXrujt9splZJA1Kgzf~Spi$$O!ar}#pl6S$m$PQfh}A$aOk z-NMYm6KW`JL_v0R9Kw{C_diF;NC2oL<owGNi=DiE=sNHx05~lGg|R}My5T6iAzkbg z&o|m*>3$9_C|a?j7PHV@F?(Xnxz(6i@r)1JuplB0ZD&L|b@=I}W#T7|h3_TgPk){f z#XvUmD?ac3I#q1XulhZO#D8b;0RUw-8}tAfQ-vy=H0P+CD0S&gS$?gJ<jtgN5m_^1 zSkdt^iE!KwFjvT2c90Gw;n#N5S_Aap;wR<j%Z<o+wD3r{x;9(|XBMT!3$rCn%)YHU z=tf@lHs+sRCb;#{cq=Rv_J$=xu?UjkKkmV|x&!K}*Q6EAp%`J6Z3G;DdsXrnw7Tc! zX>f^BKrvjAVMc@D5Sq*P=9Yd#fInw$QApH2R*5<p7By)|Z=}@XVWO>Cuj0gLVQ8&Q zI`jTA8b_&KEn-tjs2AgYKaE~UizDthEs}G#HFPQ^{P|CR!Y@C5pd1B{#~nZ4-zVjl zDK65GNSupYiW=Dg6%RCHj#`ytW?|}5U==b5G$zC~K-SR|S6}zLT9{HA{9#{^Hkn~k z`cX(=7b(q|96gyDVl&u{PK^N(?vICk#-xW*ZILQKg!6Pss})Vd)UT+LkwfoNas$^p zL~9<TasEV}x^`a8RA>gPu}z4Z2x3SPQ}Q9)_$DFHiCu*4MpL54)BHvXRI@JmSV6bE zb!Im}Ce7o#lc}P2ZiWs+J6b9b9HLb!v`BY~rK1o<7CP-MI4C<RMo&oFL^VlfV(aJC z;DjJ_{-k@W^iG7X^WxOqQoV51Iw)4ohe`MG&)<F%noRBk)j~g1-w-XJw7{sX;`VmK zQHl-NtGbnTwdz#|O5FwmT!r(l=U7+ea{H4Kj@!{)%X7kcp7^-md&jq^YFfr|yWxC1 zI&Dq8QvC76LPgD`({0&z_!@rw^;dY6JDRCV8`&s7pFmEMmN^zH4b3`ltu}y!){52# zv#X0W<bcXL=uXPgNIH3%oJpVfysQJ-dvTX%sUN!pF%%w~xi)@|tt{d0D@gQ8`SGrc zPrxdhb#!z!L?5&k1a!s)1_N252^{00L&dR(B6<b!ZvZ92wm4fom|~s^2iSSfkL`U; z*s5yo@}haT|DWv;ECm$N%Qg1w-h8r1{FB4yze?X$=cPYT&bJUE2R*VR$+aup!Q<US ziG#_J24+(Y8I)JF6qSu222^9{ZgLW3Q2<e%D_rYYD{)bOiCk=oGc6dBvaLB^2}$NH z7`pbJ*X|BC-WeWxS9EWR$cO{Srr2dD7&!yEF_1kEnOj%IJWtq+2d7+qT2j1k89i$+ zK6Q3>YlC@3G-sxef6vK&V|KHi`KfwvWHBI1VrZ4kdxhLAg&$l?6Asgjzgke^!X&dy zTSs+vhw1I@2Xa0J3gn8xfWW1(me`cp5axmIk2^j-K7_`XR<3FybB|X_lkS5=v!i{i zScn3<#{#UmRXdqS6B$Te=CK9DB&oTbFI%R-8MwRZW=~GW*ztQ?l|7(CgM+c`R;zaL zHoz8%PW?1?9}Rga&?-zxjoE+!4^$AwHFv6g#d)1$@H;s*C;7MDPovTSLA1mFO&j>l zi$Qdwxr#)$u%^9Cst$c#^+YZQjw1mFz?_8Zo(2VzoXo)VzO9Y@dtE1TE;x>32p}|; z8H9$`*0v7s4$&a45RKOi99X(^qhsc2jJ>$ZsM1AXQ@CO$nXR)~usOIaj^1N1w-<G@ zOgfwiYHPi}U-85U%&Fd`oRIPjMPi0_5_<8`Wn>ejE{O~6P_P*irkunC_r&eEfifA8 zrrpy^L{7AKUF&6qg{E~ygbG?at-!Zpm4=#BN`xY+I_G)1^-d_qAqImDM?S`V0Fpp$ zzegWP_wlj6XEtFJ4)Z;PkB{!qejGQ~?Wct@%VYI8RGcU2R$4_dlp^hlc&}*K&v63U z)eR;kAYIJ>03ZNKL_t(1V1Z;ZfkdDrJLy>c`?}aDUf$hZi$PO@M3kiUXnmTJgM}iq z6XyF2TK~eV!Jam?)*{R`cyW27S?zKx`*&9&JaHTkAeGZ0;AJ&@_s<-^zV>sxPzs(X zSUo8|W-F8EU-Hk>lh*DHt#g>WgpNLO;iYHBi}X(w9)Fa~?xzI^&-TB{&Hy_%P{LO5 zjADz-OISHZ${4<GJW)?L8r6BDKCO5w<8rUvsI89croz#{yg>|t3RRSbV{rmxr|`f| z$%3610FkE@Q7{ASULleG;1NR&s@CNp3P^;uJgpG3_n%zfeef}Kbr(c<$w!_Q8#Aqh zK8={X$mm9z*}Ok=K;CUUiYU7ByNgKwHEwvEcPrMCJ7f&K%n2oR2jB61C)=sr8y+0# zX2n!AG-O`0TfXrUl;+PpJZT0U%edyuc>lN?#itx&;C2AzWCw&dxNCv7#?kD_&F%Q4 z+Z2<$`J^kzhvL}Iyl=cmPe^(1+N(urYvI}J5U^1h)Hz$)`Lq+Q-x-B0jk73T;mL-d z1x0QRP59*Mjo^nz$Lv5xqP!Z7u?fo=ov9JPd_};3u-s2A^2{CC?eWL`#I4+3tAb&4 zPf;%eOZ2)D5%OCxxmTkOwG{;&o!~6;+5{HQnqegB5nNAG9Z7tkNuVdcK=-!rv=ss^ z>om-qD7{FH)TqyC4N9qq1IXOKkg9|YRy(Jf)tAW?UBSF->SC^jlCH3Jlsj^iJu~JL zw`i13&%Nq}B;C{2niSqcDd@=k^Qr64{r(V7l4KMwF9K8R)#pV-Nlt0Nr4*T$=rbJM ze6Z6GTVg!g+5JVFbUG1`%VB%5KB_sYcR(cBz3sk?*N_iR6wr^y{ocFxfSCHmeX5F$ z3dHH`0__r6N72y%aw{l+ZF_*HxTsx>eh(d~r;4$!7I|J-Ogbz6EaGY1YmBc|eP3uB zuhtIobjI;ai<!7WJ66v0ZC&qh61p^rgBW<aP=>K(K#ZBkO-jFbCGnCF)5{5j-<PC* zC5PECsh;tbclwfFO3E3}ICWo7#COHVv%0}3?jDfSB7&cYzSHMjkf-_Et6wL=A6sI4 zM!^CWUbo4odcve#Rr8JuLCubw<RvC;=ygDAp!`5XqP*n-&b_u!dQ4TSSAYum8&h=G zcEiq;c<KT5A+FWbje^g_+!bNB(U}K_xqqH!?e#R#TG+fnc<LauO}mw&q&UAOJ2HQD zQ7+WO?aajfziGS4X7w$a=}RHO>4>u`3^gZ>%rvMNIVDHy>#uR5Coerg7!)9w4*f9L zq?Di|yD8D4ldatV<3l?qV||U3V&{Sb*LegGRVhj|)}%`AWive7+$S35Qz?lIBD=1G ztDg1yissG3kj)hddU&bps-o;>4e8{Qt)OPu_3OYYQJ3JX;x^qCnJzTOGBD`1-N*cp zqhD<g;f=&)Ak0SB;vv0>;FDlQvJ2okKsnUx`apF{6D^KLEK&JbHB(LQ>v-ytJN#~Z z*GW4Scm9|V%e6gdv`j(nxivJmRyu98Cz6KpmTZ(9eZE0C&w1vQbbwMfV;z#sywrw^ z4-t`@3G1^5SygJZ7;%Z=oJ0_@qXtg#jpF<VOyYSYZ$n{>BbR#;JMl@@C`j4uYwsw( z(l)$oD@|M(E9k}Vg8}4xSnO%7cQ+CUnQ|ZIMROgFEQM4XfQEXFxOtCS`>?nAiCn@i z(CbhKa+NKvB1POiK%$sLt5xPJ`XF(=x)(`GQPe}#hAyR&VRVl&WxRiUbfq(999d+f zxdkOUlNlGmf)p4DL%pb<e>}ys6weYKbUH67t!Ha;2FJloW08dNfPtQ)apw^@&Qb{t zOlN=A*@G2O^99t4H2%vT6P|G}%Y*FQ*`uh&B8#<&tn+Lid!ZRP|0unV21K<O3LUSh zGKlF1Gd{QJ<E{DY(wV^*ye{_bfjJ*vDNl0;_bL7Dbz$;ZArjut<0awTX1u)MFXwo# zijU8!Sbuc)qZc5wx<QR0N*afTld}w_a2ul(-qLk896s)?W97}7;UU&xuCOe$<;VP# zOgU2`z1*VBG$itkk;PHk4<6G5s5v!aQBFy*ND9iaLz~-ZW1ZFNs2ooI&wEDr&O&55 zAjoV^{kyMOt$nr-cPMj29S0&sD-V%kFd9kscug{;lX&mFG7C{cp7h5(V$!9QFH;5T z1K*C~V3e7OCN_UfW`cCkHl++C9Rg-a9Ezd)I@CI=g7pKxjhP^$xk#d%Cc{9$2{Lpv zySR0xYDu1osE3S<86lUR(5R+=FG{iugO9{Z&F=Ktny8TZw)}N!;S&wv-rnAj665~( z7z4UheJBWVG+|I^22auX%<Pgzx3OqGf&IpRwVr7;Ox2{w3JV9wH#D0q^6u4s?RNDS zQB>39PCtWFYVs<1!$)JXdlZz|Xm<7}dC|Ma<aX>k2;KWZ3)L2irrt?BB+)M>U8*W< zIVYQu>&kK!?;r2tA;ive$>%S_Zvn2$(+7S%!aXYj`PTYS>KZfwKcNasZq+$T>43A$ za#U)ViV*RJU^hFZ66b2#s9-~%foW#o7buoX=Wk7_2EtE5wIwkrEM`D@o)6TkBIVvS zIc3nB;7lEP02(=WbwEOr*T^;uTyYsd0-+ck$IWO}n&hj&qDs?u7kDon->Gj#&uVO4 zzC_8?!%QBZ60X`iE<FaO37m5v8M(F1t<&ognYo^)O_6*34vu&kY=rqtgFk(dXwvdg z6k$iT36i^0Qa5Y>VuEZje%Hcfo&@%Hpb2E1tuQ`2_Q$Hjj!7J6Rn218b)9L=3tg9< zfIS?|dYNY#Ux*rL9zqGkQzH0GD`k_c4<E<1%38(&US=tQuD|PcY|!%;47h#n`KqA! zl*<03_;^~BOtT@|l8Am!;qgiB@`bL)e@F2F0EITmJ24^Z;~-YVN*7T-2%0)5z-Dqk z4ww6(Yz;Cys>fWkdWlD(6jUmLdpO3-059e)&V78@1hd96&se|vJ#q$R95)d=MA384 znb8ov2w?LGlSH5njIpDrIpe%&7RjE?HqfZA@J6?Y%QH2N)j@)1m5L|*%c0saoRUpf zz!_PQYbhsLD=oQWjt14wkbh=Tg6=O!0FH8qRPO3FPoU^r@2>T9Ne)T-{eFLRUl~!L zF+ql$9F2ty;p|C966GtBgNzp=BJXsoPx-p46+^n#n?r()uHa+WW320xM9Q^Q=}xc| zCe`-a7<wMp;N9STwXH?w{XQn%bIMlu_@|v{(8q>DJV%<^+Fp!qiLUdtIjNTOH6$0B zd`tx)CBjZG*BA5iUeRZI@eqc%9_I+!2}?p{fxh<pkSV#C!7eURkdh3YWbovy?0j9O z<jK>ny1Z#mSX&#NF-oK8=yMBiGKf2d%a7kO{`Y_WCrZv%>@NBw@_}g{&ZH@ZyLqB9 zXdDx=owT&?oU`v@geD<Rz9+7OY*ZDXO%%@&$JD@-f`t2^KsE!58uKCx4T`gCA$cJ} zBMOq<t*N85#G8~*9}l!ks6Ay2xGR10I7**aA;#O=O<qstN65>M_Vsi=9)mVXj8@qM zTXK=kdv?h__fByyQrbBFdCX2gic_RyLI{udyFIDwilCU>_=1zAgU|thA|ek&g!4K9 z>N43rStadE3Ls-@cILCA@u<hzCcl?3dvC8uxAi%A@&k$ONQ7wyngnRr&4KES9Y2$S zjY^@7`AI&!lgrvsgB<edI*jxp!z7UTlFe)qUQLz)9-W;OwF-$?!Skf}_=;K-Z|?id zL;0)<8C}*VH|<;b@}?ug0Dm)?{#KFkt=IkfH(z#VUiV-Aj}{)I0HL9rV#t#D_Aw%i zsj5Fyy|I(YcUAYyXPn#OT{6{k*=bTkaoB_=3$+^?aWGh8*X|{E;KL13(}Y57n}6%| z28mM%WDZenQ}MAVU=X=tC?<E{Y5Q@cgoW`0mz)jXBA#Qc6fLoXx3AK%P~LXvrALJq zP=kQ|=-KAr27*&PXrO>mj(md-YdfBkAy%5;FUXQthhhQ}knEV^r9|=xJz3CYpjNcj z(ZZetbjqL(o+~P}v}P$LQ~Y?00>ts7eHY18-mFl*BGSfF5lwonBYV%eh>ybAP1ss> z(#2#5meG|ciFXZ!L=5n#{_s*@aCd%|6<Fmy4OJVABHD|yh-@i`B4XdoppDb;vf!Av zMX{f&S&=!m=SELN8hD!LS<++^zv$f<{|tv|loPT@(Lr4WJ!aI2JTy2JUmPQ#PrKK% znj!Q!Hc4}nqh$h9!u{URS~qCTl8ly;Wex+AugfP#m{<Msx7lU2<WStGD(F{3q+w~& z<_kecBAT$Lhx!ScSw@+?a7u{JF|Lyo=kt6U2f24qzFR;Vnm`tvBZzTN4LTLD=&E~{ zd32bmrOdy)z5VFk8<(dd5gH9;O6>r5$=##hr#u{~6Q|(Kl}iR+Dj_cvVW%{&qAf|1 zeq!z*OiB(d=&{gzJ93{5xh@t@l8Quxx7*FSf-1NCIPcQEOXGP>vyo8$CH09y8*54m z-jv`h00x~X&VQnJ#ArMpnl{Z0n8t!4cHA-f1Sz=Tfwwt^ap-Ei^5|a3OipFi0V>-f zeoZKO-fLs%rLzT~-Lie0)fpPkh*@JMZ`{tGt94Q6gm5rxUV_=H^q6C}CEU|5C|%Kx zCdO0e=+oSvzFdf`=h0W_SuZZ*8^r<r4p;a8?&70Uun;$_=h{MzmKI4>3VdrbBO^yd z;%6U(11*cEnSxo3Yp7GT$$8XS4LfX%gCi(8mvUNKf?luR%LB)wjHcvoxT-4^B62<{ z=yP)rr*UdIa+vx-GB|`!-L+{-j96W_&G(v3ewCjLZFvp$g*Up{@PV(rdA-?;aiv}G zcF4`TAfb#KhjXHt0*85u9z#iIErRthrAWN9vog)WY6d2zHJdYG<K1puk<O>SqT8@D zyJIuN8i%jap%QudUgyGY2B4$B0kNn9W$8Tj?no0Y{x0L$B*ATXJkIf2l+eUwmO$oq zujpqY0&<GF?@v_GbPi&G1#APd&wfw+FS>cz8GwzEnER1pIEmVI291ChV*5O3QBMw~ z;08}#W>VKJZ)u|je!9bL?pzTiFG?9>o9=sFM%SESsRh)qNdgGs%{G1U>Uu)HOTw)i zixDxX0-QPpuhz?EHu`$b`0HQ)BDAjFRZ)tT7W#|zvopk8{d!3nx|6H>Vp`dp(7+4| z$*dNSqB0AODdH3?>^}EAcpBJbMoJ~f9V<97Vl`PumfV``vsRu~hX53LBsusf5e4xK zaHrjN18H(|7tIu|x+>Kua%!#k_;|O(zX^3rPdiKME7|uF5o%XXFrShx^V^5#YpuAy z|3uE++>l$td3Ar0lC#JFXK+hmp4cIm^E{pMTP)<%@!H3WL}a2O493r&KjrsRSE3@3 zU(U%WtGe$rPU$)y9xQAWI_4pp-na?C#KDkQ)%mg%KCL#3;X%%L^6wh{XcNs62wn7f zU^LL9F}fw}%z8adVVxCmH0@32Z8k#=zbVf^FQ<k*8;?Ck??`pAmVI*T)z&Z<S3CS? z0+e3bkT4>k%=7&3t`$Of%G`qYt9hc<`Q&0|L4@&o{Pc7Fp42?%!C!oh&4|QT3Yvem zfcQUAd`JPpKAMQ<ha?ZVCplp$OvXfhJX@cAqKU%gIkfKZHqM4KAhf|(8pT0Xvp$*z zWtb<Y-pQ25qiW%IW)yLt4y)$0D?%`guZD>oqI|G77h>Zb4bwb!4#V<olf;~)fV(*u z4;qmk%GyntJI7W4Jwp|ya5qchf}e9VHwh_)tZWO5&iR+E2X<;oEYy*m<m(tNrXbhb z4-n^>LNiL^ioZ5Q0EpO3(9%{bJt84Icrl}RZVYfTM|IzEVO59<XsM`U)hiTQo}R>{ zsGhhPTU2buQ5%I0fZAn$+f_%=<M)E->o-47L}aptT^hH7lJMf4p`&{3cyx<rs*+Qq znV-ETjf^I))2F#l?-fS&yx*Dk${T{;u2&Mxn<x?~gV)iZE)iCvGTNAW2DE!EQIJMv z8&K5bJdT2I$E3YKE9tb|G*`6U7@&oLA<2eDJ9W<ui*olxF}17)q^wGUgpvsPxOKeQ z$*|U1O_)HtY7CAuNgNT<)<#09!@O)WEJ`&KmvEgW@~U-ux+H6tqqT<r@#p`6_xJaH z9U#=k&fPxJJuO)jI-{=5D#~nO_KYyrwd-2(WV9HYYBZ!ymu}_g?r7&RB**9lMyF_H zyuJOvk6#iV_lFhsM=91#Y|>SrlyEz4Lan?|t56{;ImzKR=HW!`ET__EQBp!l1+_NZ zultaLuMHP-TvNJc+9+ttQ5-c>iU9F#s<jGztgpSseWvY~Uw*;+`v+QO90%dYFF!_? ziIqwi%{D{)cO8l(Ca=O2lc917%zz-LN{q%8zZ}2d&W{k&YO6w{9ik|Wfm#(%kVHu& zj{V%H`oeS^i6fHb@(-3XI~~JZx4F3+nwTU-l-{a!e#T3y3R;-Wa(+Kr)D3BBM7MUA z$8?HrTNogoc27i67TuW%F8ycPaBG=Y*LqBj^UT4!%Y&c`{g!qjIdhC&*#*zaqSsv# z$Nu3jlnk33^cf9{zF7=3=EeB+vp=u;NB`XhgWo7XMkj*cWJUdqheMi_U(a6eo+1Te zPpFHC2E4iok-78|Idvf^K3dp_(}Q%rA|dVd18y-r8mXT-nd%^6>W;`5o*S_ngH8hg zn=GbrpBGO67)O^U)Xkgv>02<S;eX<wx33SO?Pw_8Tg4uZe^$J=3E1h`c};Kr3_RGV zUj!yD$F7fyg=R{*$fL0<21JDlI=CxKs*x2Xn2HwVw1>I7RH8vtpzDl;+#4DW!=)Aw zA5Fe5VmEvqyLq;@Se%?aBF%mtVyJI*3c&@>Y2VE!#qOF0?gmhbMK`*y135n)$Tg9t z8L*<;f?A4Nlj-2=3`3w!AyBUTXKVFBtFR$<E2ta0;bI0hn0YK7c!98J8m4@PwDBg< z_r59Y{B?#BxD(p&T@2@sKz^ox<365=54vWIo`;br45#W|U?lq)Z1xb0D)+i8Gm@QA zNU`Mr>UqG;(E}N%)Q~E0Q8R_K%cMt@9;4z5QjD~UlKY&(<Lt7pt;VFp%l9e>K=ztg zJK~}LJ94T)gBvq&l^Ms|4ekEub4c#qg!t*`n=nzWw$jENU9Z8J)at%x-(B)<**&>Q zfX(U68G!77eod|KOD|2%AfU2zD;kd6J5m4m$3JkL-2;YdwQfdhj7&mz61BYAt`2y} z`|H5DCdj?$%4PzoU4u>=Bq>(ZJW(Chi}=P!f!L}jY4xJ$x-OBEAM`7AgTKxTIZ^j@ zk%G5f6**;;)M=t{0Gavgh}(RmJ$vv2CY!AftS95ix?p-PwAN6L14Pof0pYwVQp!%8 zq<4<b^X$^Ra({ACLsGV)Rpp75x|H(Vg^yXrFm3M7Ip^f&;>3s;O$r?kbfqP4@fHAD zn9>FrX^nBOr<o%Y(wNbkDQ93@S6gV=6l7pG61Wm{*!jPO&p(?F^7Hh#nYY&3t!7`C z?Lfs@Me-$B>V%XgRncj{Y+?D%2Gn0o+F#9m(3hxGwC&YAt(U$t3-bSw;=?Fd4p(sK zCwcPWbZ~oOB00&~snfpU$Ffg={1Dah!8>(8ivX{jvpgg<a<hT#$)R}ScdC|rYjsgP zC^^|-t7vaEx6o!Arq+tgj8xK4BeG2^!<{_lJh<)U+v12j+i)Rmbm-zw@uCK`XNB{Z z2#sHn1?0JtF+Jxc;S17;1EESDv7hHhQVK16ov)c4>6v{J>}U{mZC!d5EH4qNR4)CV zD&+Wen~)|Qb|={Asdt*aY`Qo;apftH>M(u?Gj7gfygr#avm%Y22b@y2&*g)+&YBEK z&3MhLx*Ln?6$jrNy=X<hRcS1UK=8WOI%Uiy?VAdimto5B09<Xb1m1uGg61&2aP)ma zz~TLPnq#BrY4M~0_X;w*SqM0vi*7baHk;)UOCXF4t!;IlC|0gp8~QLtL+p;>zC>$H zy0(cTeauOu8l7iyAtryFLOs-V`<8Czr{WE;jDjS}Zn{=fGMKr!q-uDa498}SZistE zx;7aJzvSYCIYykVE=eOtCF#$r1572C;LXz1$j}5Dbc43IW;sM)$4X-Z(N-aoi0HFF zH@PSMLs73Y5B~Dkzu@ox^<SvhC1`m!F)f8~NMhYpssJiEfF?%o1+1{>Np}>0DTk<S z(V&NNV}}d%MD}*O8RD-p++IvXllI%ufA0Qq$1iVhD7mYF)z)y{KcsLfpp?1?i6r^9 z-czSSsexb;`j*8|KWiaiQ>g{-A0Nm_VV1G+P*uyhcRJqRKXAJprUutqwY40E^l9zn zF;`og=XIf!vg;W<N#;6j_G(w}I549eM=;IwS=V`<an{cr7}r(T`6TWIj&>+JeYjv1 z@tEnQ^X!Xn|I(g@<iOFL(fO<7I?S=U;v*J7JjL}t>W`b<ojkXQUMLlR%HaBBwt_wx z%%9cvo?SW7^OnZqMf3lU;$xy<!8puOYkDMraR@nPn=@}Zc1>xoFgA07r-eQoSkpjk zL(<%W=LX3T3ON+P1_%WiQ@8DURcVRKW@uw@ZfLWU{f-(;^}yK^-7X(2s11z<JxNE0 zowm8jBHF;R$}hH+udZ$Ur{+!33t`8Wd|Ge#*W~Aw25)|6kwM;o2tk8=?n<dzm!Hyb z=!9QSRyZaSSzLs5s=qvZIXJ}5AzzEod0^hionoHZai)A>W`>+dg3dOwb=GJaFdW_; z9L)X3km)oKt<t(e^HU_tcLo}b;njMbvW_UK<2YAeVv*YAao9B1U1;2_JK<+AFi}p( zNv3)&{$NJfngcF4nDTL5gPjK?c$0L;;Ju+*xqY9A)>DwDB1Jkf6a)g+#U2hpaOmKL zvdJf5OEn%>Wox`Q0R?S1!P9&U(U2J>f=Zw^9fY?*bD?_V6rHe3Hj}yR29wFh6s0BR zxtHTSM1pE42NfxQ1_WUT7OEguQDUP&(e;wJzDS*w4Ocay2z(@=bylIl=@7Rj^t~ug z)|EAypcNk@7Bua;3x!b=yGR{D;1m-_sb0qFb!<WeB8jXDdN~tHIdFTs;dU!F?~zN! z`_G?&dOE0}Y#oYB-FC3gZV*Z;7FQZKT#t_U-)^_==OJJPFy=PAq7_j>tqmm~Hsg4I z+=p9?%+nE#b)o8i9n@pA>qKh=DhYr3@rJ8aTvtOb#bz=Zb1$$|g4xZ=c?Bk=vL#N| zHEE5JI3cGjQq4&K3j!#MS!hB^1u4n>E+oaSpFK<_Rqi{xm?(~kdhwo9!gZe3T_((( zI@%)km77tYQcgG@CzANV%nE#3kjFvx0XpjcT5I_E^EWUve);hOr4*wUmXiCdo^z20 zCi@OC{=Lp??KFgLHw`LZB5<WJ*uJ9gQ>T_ZeU@G49D{;3$HW(svEP|r2s6JE^_4bq zw;tM}Pb7iqn*->0QG9$>>Fmv>@k|luTLs4djlv^Pu#D#!%!@p)kl_1`{t)*S*HDO~ zg^wSPZY+vaw5US$4uVp3*c(zw_1tPhs~yECN9mi{hX1ljmNsT6O|zpe37{SfI}f6D zKLDN(-RcHDMJXc7fN@LB207XBB{`<hmRt|@kf>j+?S7t;Xy3+N>jQT<Q=I?6G+@qO zk#oR{4j@m($EyWPPsoRiA(88o6Boce*K#R_sD+LjxJ@0lVX&5bH;x#yvuGG#HP>YJ zxdgo8TGiylmU)|0%2rOQUPq|V#IZOy`8pa@{4DHL)4c0EL|#?C=MJiweuP;#LFirZ zofsQz90+z+(=E5ols~W6?m6#D+iaq^l_&>pxALc3ZK#gJJ7?+>Q!19^R;Wyp(xId3 zl;tMF90LdZ@FY22FL}z}++m^UA7WCb^t9XM=Y{lBG@Y^e6l&90s?;|x?^~?M$T^wM zi~nC2N1(uN9JD>2W>QBnu1R>Uj=~m_s8ygtI}*y@Z#;ZOMrX2(8Iqp0xg?E;g!PJD zOcWDxt+0{&890XMD*;{wN4!wSN){%Qh|ReK0h1>4Qp}?`8J}&YQ+B#sP^?4jFvVw< z?QeA*zpkqTU2>mPV1kZ*9^M}hhkSQ4z&?mwk+`3GrbzWTZO){MxB!tVi}hzx%7N6l zX9IQ28K^o|YZZ^jW1`ef>qrWuoHH_j|L1@HPn`D;{O8|)#g89%yuJOv+wJHbhty3o z`x*CUpQY9od_lBZbYA`X+f>X|R!UZpeUfdDmvY!lT`xq)3Zy1pOWu9nK*m}n<|`d) zJm>CvG{7UmM$u|cDk&Bh>JM|=ZVvRBljP(kQ?US){`E>O__*J3)rRAiP|p*k6fq$^ zH^(V2hKfzp&W@wtAu{80`khm@S)w>2wUff7<?BoAcIuxm2dS|*JUmS^USg_SJ~_MY ze{#hMxvm4hEUsSV{=8<mUt^eTzOxxkj`j}teeUM}H;WIWV8u4jN(>4`h(kyhxwvVO z)0AE?CL=JcofLoObfhN99DwpMJD<2+6<ozAtyVl5<G6L+DG|_8SH(yv3sRm!kyJ{t zL^UZ2446s=W0>tUa}yTLaZam4IT1Y8uoR}r(L`E{#gya3@V4OC=P4#ni49Sc9e4Uk z3-#rq=U1C!?|{CRoU~H#9Q}&sM37exrd}jC^D<9!neQ>{z##{^kt2XxGClYXZJ66l zEglYD0-IrAZgKv}ar}3Z$6kHRhJc;(`jV6rAyEtzCHI6Rb!fMv-*O-Z{{=T3uiSob zsOI_0y0(=bGZbKA`;CaCb2t(Hc%boc{xnK=JZ{~O<^J)}lViN5QUx_IA=!Zd03ZNK zL_t(qKU~Q%9tA{vnkTYiVp5|ESe%RMv+ByWY!C83QNe8=%%^IH2M3>=5m_9XhX5pE z8kiDFDPkH|kaI%G-QOWmoC%uOnbGMQ+wk}(7FZ1E+W*VmyEaL3BiW(Hfyk^TN4r`x z$*%tY-_zbJ+ZWkgnGx{&0dU802ePV~E17m?NwXO?ySwrcfdJf(pT_`cVlGU`C`xoF zmQIA}1xVaaW(C$rHxm5^vFUhTEzmNbH`yAwXKE15u+6-bfMnCLFIz%uDx%Mo25H-+ z1*RIvr9K&%#d9eYN4=pQH`GxCPIoACtP+1dy#Tzf87z6VAuR7=bEEpORd=lw=Xv26 z0(Aorj^l>&>~2?Po82ipom$$40Nt&_n;E~fka_ZaK8Hr&#M|2&u4_=CL-UyEyW@<z z-R=+(JRa}(_IAhZD0qLIcz^uv->25Tt~>pyPzY}ad^$_10iz+5asX0rGuo2v;bX15 z-QOT3=Cd%ZCe$#s0;n&`wsKTdEl3f@A*47LrL4Kqg-Os=Sy#K}9)6gvrZ?uA&TKE) ziGmy8Eix7<wcyuZe;E#HC*I#5L>Z^B+*ELyzRw!!-e^WmDF?0EXS>d}IooL)epw(( zq(kl|-diZ<weI27dwq2Rz=ktw6iSgmJCo(`k+0FQ<W)H1%is98F<}S9ZQjf4>BoQ6 z=A$<t$vr6h%zv0jzCp7!O#(~=t=ozbY)lg`%CHTcg_yH$yBKVswca==@O(T_Z#N%H z_oVR_gl<NAab!^yM>)_bq&g-Woi3nFDI`#*bIP#C_0jJ@Dq)8)Q5xbk8HZ+(zz;FU zAm@x{*NH?u5Rz>2f)pw|+?aS9`$0U;FD?K5D06i~(=d@>Pkdz&HNQ^8+Of@K@aBvx zmKE4+`4LG^NvR%K7&iNf=*-F6{3x6!z~bco5+%5x36bXWWUx~S=W8{z;0jh$+^%xf zN=(Y0>uCt(jrXRJ9rQefoB8qRt9v|(MMHN}Giz_rpeUL%D~xJI;@sXM;eNa0I1c>K z@4g0tRD#^%LR!5>5qi`YX=wbxIYumEM{II+p+<4TK@(V-?h0QY$g)x;P(~AlLt<dk zw1p*sy6ZWLn_wLE!0mp+{Wx&DTd~Gdjrp!^ST!4}+vtDRU@X)owvSbila(&^<vMaV z7OGk{R-l8@+>F#+kQ7qOuyfT&0ksBXtpAc}pt|HdznHEk>Xydhu`$Ik0cEkq(gc9S z$*5DI#-Ei@;C0!c;C?%Bf4k$?Uw%n=kdFIvx%R~Fn>};W=}v>q{WY8@>nOaBF`*F` z^v@~#QGv%m!D~5C?{%0DC|PhfFM@$C<mT)X7NVQgJktRstmfgMH6~rh?SP8lU%&sr z`}2u%+;FJi?b|PSe}CX?4QEqGQHV63+SOW7kBXyK+-pUtWmx#i_#dLa2&+y>zl=5i z(SLNAK)gIL>94eQ;m5yy@46Nd$hh|XejJhcFaRU_hJE5a%{#PB&ByP*zfZ8XR^0D* z7x;IYT=~$7wh{2uDSekk7lr*_wc&ZT2pqh^W@HtG=D3d4*8c;2tl;B1MK;u_q>cSj zv8~Q*4YiEEOedeOyH^3pr%ix-wNY4+=T9d`pMB^52+hZwfT+IcFw-$BJ0~ha;ukH` z<Sq-L{Hx`?rfVoONXfnRhcEgV@3(e2_f!luRYf~b+{Sc+{r=T>*glPjX~+EFU#i{G z(1O{_A&8RK`=)t}&Czlcl7*|1m0=kCQ>Jf=%~?S4fTht`!^q~t&U}64q*i{URD(bM zlKw1v+FTrg%7;^qII7G+M3Ss+;lXaQ^-_<gOxh>NY81<R&CowaqsWPh^CL7C_3Bfz zM9UkKnDc6bcP`NlOJ|ePl&x5)8C2!V(I;X_m@8Z~8)9lmZy|@eNaP=`R#Ql7TzIqP z%<UR;+9%yiJ-ywiL)v0q2@9jU-$J4E?lI^aZc1<WJH8u|8<zr*1nAReU$+zlb~~E) zc|DIjL#D`jqKR(p<yDv1u0)a0&@fAywg{&7NQ9p;5RI+`3TiDCMGB7Ff#Y_=?WnjN z6~|FJsymuJTe8|Z0P{Q_UN{;($lnJu)Kay@=5#R(*o4EH7uYC7uY{a-<26lt&qPd> zh255kGw!!8E;nO>*Cue~S|ioP(JN>CnD#<wJx6mZB^S80=rHP8+YgWzCYYprgw{xZ zD1yhMyDIfb)!~z-$Kx?FJ|?Zpe(f$$5Sm1Z7yYFS(-Z~H=SVLX!MEGp^(p7`@<2YD zCQo{%LJK9nYjZ2tK2@#W=!ghz#|_tYjwWT}$?jm_Oe!~;*5moWaewQMOsArjif_NZ z;V=K??{NHh$Mb6a+#LFcBHgK})Pg#uMIN=ae_NtbYHU`qf>Jv-!Po!&3b0#?HrY^I zG;PJUUVE0y58Q4yccn7Tn%Ob)-pOlCq@k8NCT#sVdORN;R2oJT*LC53e;Xl`M+Yp@ z<bwe;ruDRO&ed9Rnz0FMRS{|2!PRfW3J6+Y`5c|kl-h0kC?BMOq{K$~Lb%_nKeOXP zd9i(gy}s3geEvgU`bUtw#qqV~1Ne{8V0_wuL>C#|k!(I?v1u5&BWN(3U+b2T8u*j4 z@rY&-@!Q+2+vI7(IqX8E-XJP&1y}{acl-HxbhnK<(|xb2O_a5<tI{m4&uhA;9LKGH zH_{ADG*O+0-9^<(g(6ckQq!t2k3hpg#+rOd4Mhx16rLz#vInPRv(ADVO;vm%uZp|x z8ax$K<r$HRv^{dQAf3iUKPlje#+-^(%+3GZG!+!ejjSvOQS=#)*GU;&q7gS2nnoW9 zmd_%D&?Z{jf~d+1AMoC=U9FLzQTsGZHyf&pC1-=;MHD9D#f>Dp$axdthhGabfJT2V z0Iu_#1q?OpJ`J&-x6eB0j<)_v5YNg7(2t}hfQyUBJC}_M%X~hX<9CvZ&Oj<v3A9NY zsmX5d%YYuapG8v+%Jt3<rIIm*nGB5Fg!}!5<2Z1?-@=qbwc$E-c=ew+&;IXbbQlT% z6e^zBaDzXaHKocqOo-@z2ryKBP7p=dOgmML_S21>(nh$R?Q;#D^~6&z9l@O4)k(+~ zElq+|6a5q3gjnOjBGZ`15sguVPbRb0wNOM|!5B@sIDjofnU?ehxQXJQ|LLCw9avn{ zZ2%Vt&~ObPIm!)%BW}kXfA{zQb&7V!GubFbz1CZ&a5eQQSUuj{JjR>BHo_=nx|qE` z9%$Ev<JX%vu|RiWa=X|};o(UDhCz%1=h^W4@4w^w@4w^Qx3?a0NV>=8`NZw*j&H*S z%hpDxq@~x+L$U;tu}hf}g)~wH6L6Hq6S}or{j7#t-G&4&ibFaRpU)?b+s$o*jgnom z4%V!>$5gWp!<+`-{qc_b?LO9VUsrE$Z#d81D0b?bqP52`p^$Y>tLv$6md2L>YBZki zW@?I>SOxR?emo7*jm1U;U^hiJKB0!^MsGK1kk_B<Q>V`mLGXco_Gfez|DIkzzVusv zb(0UGV6k{|6I7Q_?{H&fE*=Zj!3dVq)&+7Phf((>cQiX6p;WvVxHaPKcEj`Wz;n=| zN+~#QZ#Zsmee=CeNB3G&v`eAS6K`+dy3m|Qa@MFQ2&Kl%&PXFT-dJiKBk-e(*RJdI z&rZ&V$sr;=@PlLDNAPDrp}RXsUET9G*p8$7ft{rxh)yNWgTn!=5{e0ICR=$K@CcSF zt1WL60cVNDG?x)BNDEG9nnuS9*<~$4!o#I;6Viy@bDFIS%2UO|Df2RHmZc=KhVUMU z*1U>H=h_4yDdzZmp-#abCw0f7sT*OMOdG|eph*(ghl!)if*S})95GVHXl_bPMvNiX zr2nu7pl1Z!@OVDPghpK8YzOaZz0PZIr7y01KyvINLddiaM)>ZrfN6nZWS~ev6hr$* zkridzJQ-_ILpdULk1gk*9tUp6(UYf-V>F>B&S$?)S33s<bkZa^KPKldDdouovKQ0Q z1R-N1gr~mJD!pP=04cdR&Wy~4+$TQmq~TKu&$X)xL=t@z6O7O}v6EpeFq?}#fqYIi zC$J;3E5u|v@##XC8v)i5ij(jp>CDdQ6W#`3=o?1UF@?dC?xdS(%mjyez}?&1&Ce}u z3VgeTvsg8PES?PCG-!Z~lE(?(cPY5e3(x0;tF<xtxcu4aIT4k_6cWyS&Ryx^Zs2ym z4QHy-&q?2Vy8BbDL&IUy`KCCjS?G;W3)w_D`+=V|$ztd*ktS;F*uynV11#H2cU&dK z`W$TlzfTh1a9wSr&L7>z_j!(F`o0&GVF~>9_BLvsg6ll-<M|!G{^c)#USsn099GN+ z9*=Y6d=<RCy#We5o+o;^rMi3A)=^4$!nRKN;@-Xq6Yf0n^mkvr7?$EAfO7if;$8wD zYoB`|oFntqreo7C<%!RiUhBmm;tx$oHt)4{i`+C{e=W_&pkT3`=8GpOJ=B3N<S0|| zO<pgf1$6t-dQ=Dso{zJqs1_UD3Wb2>i`Sj29*=jt-QV!-+c%WQ6PNK6rJx+u8=H;{ z&GEKK_e;MWH!tquAr}{$304`=o2k5T%hxhOudegTOV!7BlCYu(LiCO9c|N;lW$;3M zDpU|<lcB<{y}|R_!l?T|Bt`ASBv4)=5~TPbAzhK9mSs!PdMPE|Zyhhjhe{A^bm}3+ zg$lVZaX~u67V~BjG6cx&sBr196B9C4qZo)LLh&w?YRx5i$Y@}MGpsq?Y_duyHC<y{ zcbuNANDf(Czsuy{FE+MV{LdFxJJ3XkQg9`?(Dg~m{5FL+6Py)f0gTV*iR(N=C@D(Z z7(>XPtcc}uFl^d#pJ+9@7MO|MWlSMLwuw);jAx#&334J>Vn7pxQs#8j)<T00M6%}^ z9QDArZ*SchOdFo(J06b*p6Ao^GK3E;MV!>qdRBU7qD^knL8R}x?twenBW6wxPZfrd zgR1Ur({&bQO`BVoHZ$H}ceagl6)59mu}Ah0v{dIT+8{wx%IOAIo0FD}7f5WlBu!e2 zkZeksb4$Bu18@y@s7__7wcvjHhTnes%>e=nSZ%5cICEVm{@4Hd|7N3TCKDq7x0LCG z*6CKIPZLBSwajS~QKSViKy;?uw_(C^;W?;co#w2OULE%O`ETD73jFME<GYDWBwqm> zaty$7O!|f~f?dl#$+<S^)0;5Xme6aZ<}6V0q`UAXG=HTMuVHlooJl6#VS0h+nm7Ml z@I2d?Y7KJ&>0m>9G)yUvg*q18Zuh=l4Po@RZ@>EFL_~U?2>{^c+QCw8VY7;Cg%65v z{irZUbbZv6HKuX8IQM=67Gz%6VpBsi_DRjg&cYX4h*Or>CEnk1?$&FDhXk`qc>&73 zPJ8)`iuFaK-LC`*vJm|zn~DF3%?AJ++OAP#35ES6M~T9R;Y5c$SKKWuJK}N4>6(aM zm``d*kqQnu6yn@5Mj<HO7+e)U-g|)1w{LH0k<U%R(4#_`5qqBI*es16!XhayP7<fv ztY5F|!t?pWb&dv#J^O`o6eJ+kV9Q)<*aljGB7T@SzF$UYnNg{%u&ZTk)-zm7TZ0yH z`@l(!h#TlvXjiYCtac9*3(sUh`sF1jvk^5SOx6b6=zm_;qBAs5VWWkk?y+Q*oUs}U zG0z;?+Ad7t_OR;fX0qLYfY-^ILpQ(wobt#9`Oy&Ir<xn%b)4LshE>p$m5XQAbXtT2 z4sx*m4HnP{UaPKw8LnIsn%C9$-K=p%EbFEN4`#G*D+jK2;r#v#$ZMQqNuYJ@hHx2~ zTmOcn19FDKnQjaU)T6qfH%ux9xNr>aJ5RnOHOgXiNtsj;8Edu36gyi%SW6vw553Ch z^pt}4_aFH2{(V@iQs#)Ku1EKNNdkCYTaqj2(S*jyg?<JB#@|q$IL-aPgp}~Mz%AU6 zUak4G+Z>SGbq9qSSEl(9)~Pxt6LYNL`*O1!pqP+4Ya>ZjR-%2adt#bg6Sz}k)q}<L z$|eQl`j?7o<`QF?`R%Qnq&yz)u8r}qN{<8{pR57T$H^_WQ-LFWFo#P{Ygr2!H0o6y z_Pk~2FGPUbQGsKK)%Auq+ME96pZ{f<>Z{cX*qAZsq(iobk!hr8&l9E0=|As_&8?27 zaYD}5NJ@=Q_l9K7osjXUf9jMpT_%GiiB%hHJ<{ZBJnI}v*(s-G3a+)A;uKV96G-jg z=>2}jbWK#00@Oixs`m<cJ0J@vFJ%6bI^$Y4Kw;TD)9W<k74v0oE3zGMXgE8fwYRTr z%!a)l6;&(RadgY$;ljt(sIHro*S55FvNL^apR=@|s%ZMz6<Ga1Z~K3>z?avwtp9*H zAD=cLt+fz3CT*fe9st;cJk6)YZYgt=SLntax0|CZ7M@ff`1bAF%p52ki|!9^>}<Kh zwXyf(`NZ=)2e-6REQA%GI(*A(u(f1cMlMvP6hw<RqHE|xxf<zP+SPDg=dcK;H1A9o zk`gKJTzIMC65#Fa8;;xEErJVaBr+wz3JQ0o8R^n(_`@6T+Yxbc?$RLS{9v4iS2lJU zi#$yat0V-Tnv;-@Ea`9%jg*_9nHZZ`W4*!@eki+Ccta-%mz%l{wmgk|+vw;qvmTVV zH}f4ur1RL_rf{YCsHT!EXg1b~%aVx`s6#8TD+1^>$Ll6GjGpWfbrLUDvD#qqv#<S| zURDUG_+c<7P-{cjEkmV;TAgQahK57k`RvUHf-d2unk>*5bvgEU5fM@!v^l*oa=&|- zR4BGd=CwV8A6qYyT3YAi>?dT?*agXB5~_l01R~o0)?atHTcKwFh$w#h?ceZtya%W) zXKd(ZN*IOpbBx*Aq?U@)dFE$U3ZYyatT()HN#UEj)Ke>!LwF^9f91VhfhryNDFYD> zlMgnzmsH%77&aFNT%Ad>H)At{K=BKysClxh%hW@?>2GPuC()q|BwqFD&L~9D!v=4+ zp1%I}?G3+w|Bl0o))Ik|8Hjj=DUJRA;m^E=JRjRoE(fR1c>d6y>_Mv|joZ#mGp@+) zdOm&1Kn}7?ka$Wv&_9cK!&)H2dX|GSr}k-pZbRIzssY%uXQW7(LAb%mOx%=)h4M(? z&@#~3*l0&xLY!^{=77kco85q64ss5=<F3)^->rB<7^$wWQ2+_k8_``Wh7bxH^<5j* zf?)BvU-raAMSJ0R?@f?ptIdX9KA4)!wOu+dwbw3Ji<wuMaK5nPa#yxadOj<<1s@md zn(T-FNMZlw;6M4?G3%p0{A+DK1_f*IMH$r`1-YSf)6$cyG9kF!9v54Oq&WgClLu|% zc!j%Qfb$k4yjZlHWv^|GN$2+7J;!4PlCf(^xEWX5t^xO@rz{6AJW9c>ydhGsX9_b5 z)>)v+VRB6sm3+Jdzjf@A-Fc{mO*n>MwfVCYBo@=Yb(?1XilX@um1_4pT$A{iH4{Zm z=R^PIK(|;>MMl43k5);jBNF$XrcS{DYs16T{Y)nysf*i}U{yZ5YPf9(Ss(!|5Hdon zu!Te#zQn^VdNoHuyOdXrBKB$4Lx8>8lRA1Y<24oU&n`ee>Osl#SZH$A0AJS$Ep@zC zLp!G?!G)|Z%{qwcn8Zg4eL?-eCT&^>nK##{=F|n7!mw+d{hH_ShFEK|pbmYv1Pd~- zMQbh914{$_pcH)n{(Uwd_W8!%U_#~ThBk%#Y14_5O<PB0PONy6FtbNwnSya~Go7jO z>o?52nid}kWv=)H7LMb94pFpXhPSak#P1*Jr~3NT5bn86j**=O#|o)%Q01og*i4AX zDKDew%4;s_MKtVQf_fY{j#~&DEVcG&oUJj;37V!#%XCR)lPwc+W86F;PIRXzzXaM9 z5b2|Ctb#KV@`PyBRKUx&Xj<=+1azFHXaN|RO@}`_^@#Ktr76GaVxSV}!DG@P@?uiI z(XM6p#z@7=0HTBmkTr1q9?x)4;5I?H1+h-_?sQJ<1k9n#R(^>V3j2?WX5EzRFVFXn zGBrd#cy`k9<<|=#!z(r>6w<6w=x((g8#Kf{AOUxu+0*KNEiBE)D=_BgI8R@02>xh9 zh<xx~|Ir%{YCwo$WlyFFlmqdeH<hk6C}A^OQ$1~ha=B~8v>OD_#ZuBjhtBAW6{2OJ z3>K1xVH;;8P<}X-{LCG-H(zZbB$!BlL4T-u%op!=a}g_}Y(sD>ar_v3_s7Fzjf7D@ z++~S4u>RoL_sOy3v@wHTBj_HeU<n5t@o0C?)w(%-oTRP_WH+<O?=ErsqX(l%nxF(# zJyBdlBHwfrjv5MbSxaxDhHds6u64Jjf|Aj^iE6Snt}p^PY<KfD^v0U9Dg>Ext`v%w z%@1|zrRc(6r}}y{$DQ>sp@vK(v|dc%ux9<bPTcQzJoJIb`vdp?a;HN<qa7<v|2l=@ znXa+87VEs9IKO`njUgXOMs3j4WW3}HDLXv1fY?etbkaoXbayYBTs0k(&dE(vw}zcU z|Ii3yWD!xZVc~#QG=V@GRmJ<`5vC7(fE3z?jV3w=f1F<vX+q{Ggi+k<)%;nP6g0az zuVMPN##9Pr+F2oM@PrT|_Q{~;-+q>j4BR@`)}N$;N2s&O43Q7C2zf};C^INZkJnx$ zlPz|In=X4IQ{%+ZfLbbU_rvW_k6Rt--~A^o<@`A60`N7nd?z|Ef;UQBvqCNjvashQ zxTCSoEbreUG5f{WM417)*>y<BRZ*~dG-UIJelMDvpBT_7+D&OX0NMgWq95IT+EI^t z*wb3Jfz}+JECl?KX^V$pu7#R59TR0{dc<?Bj%*UkFDZi8feyi_VN)P7U7G8J53GV` zjj*RxX<n^?O{w85TF$ypDqV@bx)FWf=s9-(y~X>C+Am7(VzQv6yLw3}FG?tO051%I zWYajuXG#K)yfh}Ne|Yk-msfw?LU*O%{&hDW0B}gKXU!tjSiO00oM^}))3gb>S3i;q zk-!gf3y0!@qBks85H(qN5{96?jTGM^GY>(De#Fy|Y5zHCRb8mJI(q4*lh?2T#PsmV zf7TGTHyaCG(2rn)O0V7M^)>N~ccD5uP5;B@g=A{8EZF3JvF+|N>MR7)B}XOxOWJxy zhW$u!U5HYH0HR;Ku)2$eOA(2n0fmRRDN_(Ma9916c;gNJHJWH0^E<Hc+pG#zyVa~v z)1`S!NC!F>#hwM>-yt9DNtZ&uYZj&SmC&?}lx2x1eYkEVAw#m!C(U0sRh-WgMW(w- z8TkPvAg|E~V7DK3?SptgVW2mr@9CdOC(ZC>ACiY6s>#($W;Rf6w3)mtOm|UA;EL0% zdA~FqMkP;1D1(Kmo|kr7+SRUp4ckWBBUlpAgD{`hEN4=XX~3{boA#)Poa_KAZyoP= zI@t!@WkcsMor|r1YCcRH?R~`|AywR})9HHDMnby=GX!2*oV+3nLZWeUKyATFJC&rS z;JHNxWKuKhi>tW(u7#soj)EoC-)_~X9<>(NC_Ww!*Fe<cz<Ip~*SX?WipAR~<Hrkj zh!N3@BxYX7&Za?`vO|ru=H?><avGW)cf*qM8YLe$u8^xCh}l|*a(i7o8SZpW&qf*v z;_bTp{IPR=hC)U+LT)uV1-+^611@bsdB6iyhgWBJrmVeYD7Di}nQpzv<5JPTJ7Y7d zAJ_|Nx|!(;y5Unt)054aPPWr6IpwW}ogWm>`f;-o_bS;tK*^qUu>Riq9m4Zb%dnZA z^z$&$71o%NRxalmQ4{sqoZ~a9lYZ2kY-q>wv&}=kEPq9f#_I+|xFFHME(s5e#%3ev z`ryV(ktPwWJ%ibNPe)IG&IOtW!SVFqIvt&Bo*t!vE8hqyYi))z0f4lgjDArF7V-#l zSp*uaSNC`W6&(qoT`dGh^OBmGU^lo)!(I*u7r2E8uJQR<07kX3%9g6|;Xj(I6xlmZ zxC6<&CYL81TOrk5T0Fq6@TAIy9=ag3_UpoW4Vja;@VSJd7Z(kRymXu30%_;irMkpG z$3tJ?{`CHd7_Ac0qHH8IT!3nudIs@Lmym4jNy5*w>yhdhVf*tUvH6JMZR*pf;C@A6 z4`*vANA=eWh?j0ARx)3wP_fwyuM0oke~e5K;AMnv*1M?gCvszraPj{#q>4BTLLT?K zk+%UNB9Y_1L<xs*t~so8QLs>JTgp@{HO1ro(b4dsm3c{*Fn~o;lZL2gV+yAI42HIj z`C^Jjc^+*&yObww#YOoRvd2`c>6NB#{L!heinniX`1bbJEoW)H+usdffG0Q~P$+)9 zKk%>r_OIJUQGK$fWXr32M9}G6nz;HqG&*G$Ndhjcm2v9QC`@If)7RN>9LLeaBS$w= z%iQ0zb&BHi`3z`saj|VOc%V?m)|$H<?I%AxCD}YPIuYhfzbQoqb2JBVCZyMoZVlau zif-vnvJ|tjFt&Wpq)D$i{Fw6-3-f()Oq01%iccB2$rU%WAz?m%8bAs*+OV^ca?D03 zVkxGRS*LCD`OkSlF&C#Lu#oi*3-t)=q;F>Qu{nca-;U}QOkXlLl39nZeTglsW^I+q z2WB>`p&}*?B1qV>)s1YZ`{^x;4D%gCU5eB)4Hb1}b|Hg1x&khAOQ${eAD~-pC+{CM z6+c7I`r^<2wM{-I1uI!hVnZLvoZ(j-Kn)v-fI-YK;^MI#cb`PvX~UY28<W+$U1FdU z)X^!SF{hy@N+*mz@U-yOsRIw)WgX`0Ze7gxV85NKH3T+NLTfZkK@#eLJsJ`zWK76T z0a`l(s3yzF%}DkY9-<!HCNGlH!wec`P9@TMI`$CfGEKwWb42P0X&OkXCEZJ;3U&vx zdALauz=x>-75KZ4D+|J*I~dUEh8d|g{f}-&-ljv09QSDe03ZNKL_t(=F>7nC7qMxc zp`6ag9z`HqL&wuZM?TKoQT94Sq^*-rmU6?dNjO%r!;m<&@i>ky4jd?^{}dGfv_MP0 z{sKS_i5ob2Qg=JA`Teee<SLsL?*y!$Lr~M1F6YEd2qia-rZZSEVOb6$wv~*px$$Jz zHNCr2OZ&c6Dj!Z|*mU<Iy4J(@xTte#lZMH(qa+>%x$BitOsNi#MaZIovQc^t1(}Hu zN6lSzTMI#(n$}9wxv!Q|@O+-#Vz>zY;UE5Mr_7Apm-D)YwQySwcH{ed3ieU)+i(Ad zt6hOi>GU&dE<*66_~2(nYZn2t_~V^>;ilp+$82=1;poNgt@dn-uJ7n+^+&C!HR|B{ zM5jSj@H{V^&(rBvK5^6LG*UK8m{Ztkzr7hz_W;~*T{doinkZ95ThKultyP9DB~D1{ zQ5Q6Q{<3-JuVzw__7NmOu<oLbWz}?%jaCdO9mTSe3zXFd5nzfmZWpHyqY1d{m3w&3 z91sYOL9LR={R@+aX*M_637lKflvx=XrW<U7y(ivGFm8S~4*s2H4|EtOLo7}1PjS)> z*xyO#1UHzTk5rcF&9V~)6B%r%j}pMe0MrW7pUF1I!`us_!)L5D4b&_o;CIT}_B_$0 zN&Be=L_T)MdfAYC^>u!tpOC-OX~?nlJ_iSB#V;uqRKe4XY?Vp^?Of1JgtL)t9UPr2 zMM41=Msz8U0PF#-S9l;)qD`f3xcR<X@!xb5$E8N$AKUjL(l-JHiG)*eY){2&;}Nwc zdX*+o<J@Q$9wi^dTnOvTUV!k#BbF@DSZ`0mV#~$d_)+p|k=-H^M=Xs_S4u(8tL~!A zQfn9Onpm?`97i4eT5&{i$6bw~bL%+#<sfI9|1qvjOYw}V>r^T|G$A7dg+$^q8;bFH zdx6#w&8lT^neEV$&_MdZ#v)`#dQ4As40=J^2y>HVBaNgZia#?JEVBTro@Q*tcC95$ zpxSVrYpsny&^Ch4F6U_X@Us?@xOe-jZg<|a_F3~2fH_&5QZymty3X-dtqx@Gl*I_A z=(=H2Lo=OR1bV5{K1DP*Bw<WQ4x{J{U;H3`C5IVH7SH?3M1~_3$u?ny;yj-?>J5-9 z6;-?kG@lSDSKzuLgYL9v&66nVao{>1DEFTD-063KYH{NOTLZOM><$`T*M;-!+N0<5 z*^71J$7k>-AwdJl)`k8v!LuoJZYf(rF`eGHfIaGg<7OEf!0kAOklc{*)eOMFrmOX) zW8`7<zV3>knPPDQ^U1_m-@UP`3;4s7TMux}S4dZfF>XS1P=Xr?AelB)YKeid1n4o1 zPwlzh8GV>0$tQQZxcu2Zqygm9&;U!I-f5g{us%@R5Qtwv`__NwoD*R&t;uXQ4x`J7 z2I|=>oL^NvzvK!AG0_}iDW>x|x=B+P0#v=ZOf|xVwq|l*VL%1&B+$Zhlnatz-ln>; zVY09v1{*WTYX;RvblT-?CcUJ-64WyS6<M2s_0T_W*$CP7-&e%T*E2qLHD9KNzFKJ6 z2<30>pF^Z<FH%UP4K=RLfFKthr6{%n8k56$|ND}V5L#K$#n=@~6pw{e>XHhtiLP4n z;X-W==`#T+3Xt4cwng>$nIZ_OwG*MtN#R4BIPw*i@xK*3o2km=1++aCi!>BDFbj?p z3em_u-V2tg*HX^KQ7{&l8WuZGA9|7Q3ez2edLDqGpIy{f9OWsy90<%rUk|G?5BV0+ zCcmb-Nq)|UBapD`XaF#$7%^j_Q>2s%-{jgR5*=fpaq{NHZd;q2Fc}-qmhLAsP9tFY zqU0i{BhsL$QlLG8lD5b5-;1UBJXyZS^EBW7>56oX5KwDxHH3<d2IOqP@eRxK%`<-5 zaF%m5hDQ1QQC&1QVaj0;xz0j~3!ddIb<u|}&F(A`WDWTx=N}oHjqA}wP^9bG`ebaN zcD27&854s!-PA!j<9%<^IE0epvCuS?!u`}UIRHhwXevC`SW~!Vs@W225XP!glDaMV z6>ibL{@cIy@YmbT9S?=FC~%$*YV><{`E>aCJaHTcp3l?or)S3ycRS_&O^U9$HmOh| zxt$#}-B1Neozv4&MnGf-KI-`QF`SJ``G}h;vrlV%>hl~T^SHmy$*=|Xv6Gh!%8!Ks zLJFE*y@|61l<H3nHpFC8p17UaSkCWXnk4#kSd++Dkftzuhs2dKshi9VqHEF_o%dl# zSwJ=33Nm-!@{gKX>pSh0p9j<T4f2mDY6WU7exIipJk=MJ8`VbB-9eZA*%PvP5)GJz z+D#jUzs9CgZOW8rsJVfVt#g(VXquYsP1yV1X%yic<#63sItEqU(wzbrD<5<uipB9E zPm8!NiS?;&m<#G*h)8tielPJd<o2u7bQOFk+>c<<`dzT0cmJ#|<gdLkIU-7mX&tG& zD24I@Qt`{w4yH|0VZOic8?R}JEwt@Jg<V)gV&XG3C2qTWHAGuq4XznhJj6t62?xAV zMu2CfNQn;uZxE@#Wh=)SShw0wSb?d8N+xzsN6eW{;#4d3+ynOscQLpGq54OMNTjmK z<^kaXaW;1IdK7mEF>Y=>>Il9%eDcu|dlDy$0yuG=Gl0scV_ZW8<WEyJ0K6fP<RC7< zmYU-`x1~Bao!5+La9L0o#IY@LJW>&@z6r+7CtD0JbUVr>k<UiLn)vH9W;fb_xiA$~ zw9>j4KQ$^>yKr4sNX^!9zy@k%Q)*<JH(GYz*nq*?1qTV*i}f~bh_NUgsJVVoe8j^b zre|4Jk3b_0VT1gI!*@wXrpy@%q+E(Ho{CAHGIXx}H43H%p!l9*0cSQX6V!4zJx7~* zLFbcLotz^D7veyzGM@(#v<45K>uB}mG$~ba!XB@;-dv2vzk%|Q;yz`04Rg=!l&te? z{XL6W&>pB&T?CAFdgBZL=Xv4zJbeQF?b{9K^NGjv>GUo(I?zCy0nW4UuXQ-ViHbKq zT|nGHj#9;&j9O=AiTzm#G|f5lc84f353uRRbu|~3yO5rQuYLM4otWIlcucLl2yI9? zO8x%-^2@K|_4~b02LLGiQD;D5v}vYry|F-+^Vg}969}xM8D<&~1WTZ)ugL)LXbd-P z2(Fg-`IF%EhLkgv_JM_M)H5Vl8>gGOW(TaMJ#wwJ8wHd}%gV=_?P<;T!nr3dltOpb zN-6E*b=wEDtEGsfFwuoVY~-TNq}zV3o0XJB*e!Y2+BB#u&6MtYtXR?%QB$8uu?QSi zsw?ezH~8lF2n~lfn5*EOb*TDcA~fR_3aZgz$$c~vKt8MO<-<RF-JN_X_543U^8o;d zQY!Tnqe`0LS=PlAL74z;dZH)p@v_ifxN;O(gn>#3#!MguO+3_5EgjZ{eNdn-xCFWG z%tD}$6O{UBGj6J37r><#8LeC{rZyx`UM`5)1enjYF2!@S1XN9_(0mQ)XO-v=O1bpR z|5UPLv}^N+I{n;?q>+3tF6ywHyiI;>nfWNaAUyFr2UUl34~vdQsnIJ@Gmu-07Mu|z zD3S&2iO>96UDHuzHYp~mW#q)QNa2vK%h)_jVUTSJ=Ls7$Myj5gn@B~ARw`>7TGBId z6B7`AYAU6Ohk#k*7_5}NvFw3b=lP^bkTra5tF_>q6VvXTs);|2mq5f0h1<{ZIgC=m z`nLk+e!ro$3+HvAAchJe*$HoZJ7p^SJU~@5qKpudpd0ag8|D{M0KH^1A=hy35D#YK z38JFY^`y@I#-IPz(3%89)6%1rR#4L^+U{DM3(_vs`+-}jc(w*KMT3N<FCvZ>^2#n) zMiDiU_7rTJNE_OluKui_xXumT)7;!zgGe2yaD||t=?TaUkP1baY2+M0HzwA%d+}zc zm}AkHw$`EB=wf0)EuS6QF$@!;gBEuA^WTQXg&nHI!)J{?W{q2a-)@(!v3O_3fn}w1 zuA1NL+wG2DfBn@jn5BmEa|k30SGOx|z45hV@v)c9#PRVg(PUYnkW$wo6~pX8ohP>J zcanl0T@Nan_Fl<u>C*(^Wln;mBA<)A=p5(6T%wxF2n#%piraDcWJ}ocRuxyXiSKAY z8dIwx4Jz@-#`&%ZyosQYuNRt>x8#nvOo(5(Y={kZ8_IY_AhK8?%8O%PR?d8&rz)au zZ&zG9r8mYg#lNfTv}`Aq7bT*&B+ZCwNQKxaiWUb?DqoZNp|LFls5RW<XgM9(EMF=3 zf3{(eKNukRw?fG}u*wz4Msm2Tlrf&qE<ThrjigsteffEAIR8!%<E4p7$Q=+k0tHUF z=8m`o&O``h>fZ(P5c5%KO`td(1mjR>gT7HDrB(x!#LVK=nCGC$@0;mMlSeI%sPPm= zc1SsAfAF|_<7lgFQN~&ctS)5ySzpXb05QtKF%JCdHkAEPyD;K-gT5wsuya-ja!?SD ztg)Rih0VPo1fs=YO54y{;3z8<^o@o^xf$lBLQ33%y~t<2FP2Goq#_vqT9;WZrlm7) zu=&2~LMvUv`qIW9oVpsM0jE<X#fvrLnsY+(?dX60JUgE~8aT`by0}3=bT$(KaIO7> zW`^PGuef|)fuZ(@v^9R_rQqAQH$0!uE`;Vu1pQr?kuCQ2LT*>lvXa;-q_s+PgqLLJ zz7_|4+dofhb7J6yb}2*0hHm}rx`5J+0g9kC^=HqFJ1j);a#3uHlucEqJJzc~uM17Z zZN&{Ua07uE)lH2OyWa{9sl8Dc$=|91HH+3Vn^DdVnW^%CprTzTq}+y`H*kOZ1#jQx zgu?!ADKllhX-9iaZ&FAPQK~p|O9Dc^2S?*%vj6^dog=&D>C@SI9DSYF+6^Cu%T>_t zSQ9C;uoSh#`<8-JXJK6i$RVW+a7BiO>e-#eilCxQLk<TH%JTHPCaJaPVkU*AoD<!* z_4|B2@!N0z)+vH?(u(pun|p-s(ZL#1-C=6U5Hh`zY$l#5$4HXN2<zAcF;i)qe>4i( zB7%Cm;dUH2YDKB>`38XJbxv^X1+_O-zEdyQ<^-yk=Bvmi%y0#T`p;dcrII(X#0(N4 z8|qDl2WL^0jrQYn$o^H>C9qGzkuZ5)EPY?39u~-ELiNFDe_^KZbmS-4QmScw6YGj@ zGhbo`i@webc}ZJ;b$Gqdi~P|h;%`Y0a%3@&1WkqnKA*Cc3>VyiibNZrf)M|hH(&u@ zVKW1WQyqEjgC4pHo-)6ZD>&wFwj^FFbArO}V{R5bkSMxexHT}+2$aR{_C7_T?jrfy z3tvy2dKO8zNz4bC)PR^xLW%7l%SzwuL0<1G2lH#r4>C~31NYl~=s1ca9!;+`OmX2h znyUtJ`4@`Kz|zvXY#O)JJOXD82TwE>bVQ=th>wOP3d{?ots7-5Z)&pnb>1XM1G<`x z1TF$70F-iFB%(Ocjb#)$>0E>?W@w8B1%iIy66He%YHS5wpKui%#~WHxoaZ%)GR$U) z3P~1N8&aFUs%%2>UQask^0>;W)=rZdR<h^N8<di?1c5i4&O4FCRY*cgw+65wTu}A` zN1lw5EvG8kYFg1S4!_~_(wHtIfL_fDF59~V-Rjj)ZYhOmw1UIwku^AR1;OU{EWO#7 ze0pWR88}11(A{(&WEw`;uWPMtgC41`gkT5C%3E@;v#h5wCmxBa+uD^x{Sx>SVXqk1 zx?R_7q}*Mnuk*>mo5JGR`A)q@N#~+$G#Jj!Pv?gPOqxapDJ#epb}h9xs{;J^@x$-E z6}ZJIWYa;=u7UsBg#RA?+q{W8&ju02?KZSWr3>%Be^>m=zg*n~&+Kl~o)##=6q;J> zOl_^N;TOX6n4h)GIRcu_U=;_+Nis*td4R*s7z*GR%|{syS0Fvtd3EaF)#5~`xmCWd zg{($Ox&80)c;fBt%?%1>J+!g?r`J8|v1Gf;ZhE52Ab7E_jj2{&t!Nig{L9x+Hakhy z!~R?jU|=&_T=xA;w+aE$Ng&_I74<8HIBRiux*0UCp>FK7@aB~4pKAtwrpfrvOuI@G z5LsbK)-!Au%S0}9mw;)nSJvjl7H~j$!=i%cAb4RUlQK06a0EZ+$QdMyK6~#%_P(m9 zT0JCh@^BluWoc-{ki@>G3z<5OgrB*0eDmL8e`@A7?yUKOo;=SUx#$vQ8fusl=#KmH zSr@O-0nr8d<AAEifqKlwL!r2a<ti6q>xMb_u+k`5Sw4BND7D=u7WyG_BD)PQ&_LBU z8f>r~7J%Dl_sk4ys9Ot7GM3hFL!sO3^vWD?LhXFoxZqeq-O~EuUtgM6dG;kX=~kSH z4DS7CyhKOA1RO_kih+hHUEn~)#BQ1>ygC^51=1u)Ay4dIFNv0CO`Iy8gF4o&XD<W? zKI~~>{>=D<BcW|+LhRHNS>5JVf9v@)aic3~YU*5W)5whJgcp$wkS5V4SR1a(ivHpD zGr$t@P(io`OUZ7z-^c1S+pe8RN2<*C36xx(APA$gc1>=J&NHIhpP-4#rXG8g_G)cT zxY}qaHq*#?Erxbw=mc$#Z0!mLAFWxjUcI2~;FLzXkP=v=F<>%q=xq-vJ>b)u;+-4Y z2=7Gew5O{SfA21NXgDvS%&h)-`V@MfcAX2ieEwMW%j5CHanvc2mQ@#^A?8bwb;iN+ zRbC+R^sH@n1>qo0iLORSR_hX*3L$FWak~wxWOFVXR@tqm(qF@UuC;5{9je>FKL$u= zV>~}^tp&2n_rwGM_O4jFlmm9N!{#2Wj+~#CraGO;wiEOHh8+I6Ok+~036ZI9G(A{3 z%Gah7n=G|u8vWwSseXkPC9i+Z0&g`s=+!D)>+lSa{ZX3KAF}TKTXn(OF18mIXAs50 zYFAxS;~X(;$kB}>p_a|rqvICSV=%;$rb)4hi3!Ji6O}k&u#IGL`qZsZ=g6Gd7Be8I zcyco>UyUf~h}If*=)}?1%wbng1NV`yNN@-XLSNM|figY9%Lid_NEDgwgRMpKAA4Aa z*24s)w(-hvrW!VyO*J58R;=ildITMYzIs2QOcUDdHQk7X>Ld}Zbl&mg=?C{+GZtg> zg-sD5V5*vo<-8{D<^p*e_n7D>*#IOwW+ESqa!VA=MZpi&_{K=@iY~$$>0c!FJkN8` zd%A<sb)KU*9gaO+9I#FRqCHV)L^KtiFTKw-j7&(EHG|6}6~AUXEdxlnu8tyyz_;8L z>KgABT`F}ANKAK2ctmB>g5aDS%`K3eYn0-l*_lkBiTcIXt^ApWP#n4-rj2qEYAvJK z>eG~Vb(%<bp^LW1k`j-*eRM@vva~>n!iM^?lwR`1QbZ@nVCdz<HPnkmdwwn}8i}7j z_kj``1hJ-i*sTV@hZ~c24S=EeqhYi@N48mqVYJecvF8b#7zSk%!TbFU-@ktkls5+8 z!nDZ?*Ry}8iTwCy@6#I{Ykg=YQKst;cq*^1bu-G*aa6Rc;qg32URBwWc$gv$**B5u zj3gNtr0nh6MIy~dcG`k4fLf=^9H5*g8wL;_M|JSgw#wETuB(67HVg!m1BcT&x&$e2 z>RTO?CZm(@s5i1Hnz`BLfK{utbk}qs>KhhAA9jgj8?j`={z<P9i}mrsN3A%|u3x*| zZ;>WH&d)NbD$4|72hn_~agaP8`UG6vgc)ujB5Oj@JC@QXxGPZl1xnTj7QL?<3BliJ zkMS7=Yeh+fvM)plecIUZ=6_mFrlsvf7Iz<U9fu}lcqFq;E-fbdsaI;1X=Elz)MCw0 zA#UY`j(C(>JXtk5Jq(*XLc*OR4J!DA|16b%{(BrKCc$pEF|{LP{fb|YIQE^-ojbum z7lZ@4Zd97|1p2{qn;(o)1jliVLzcA<(}bYx{D}n6o@5s+H+brl1Cx-%cuT=9(*{)H zP8)vRG#1pnzMG3gH*b=|w-7z{8-Fx=57k9%Cn5AQ{<);U$@o#`4a%-*KBmTW*W%#K z)e}B&CE_%akXz;|Pg8##$U5BN?5Gvz)erWOz25aT8m<ajfV;&fH>?k{=Sz0(S3<#Y zWPRg_!V8*CloLjgsR&=gMF|`UY0`1p8?GXYYdP%7ZFyxWm?ZCMSREsmB3#IOOV|KA z*_Wm&qFv3WK6X#+?_Fm}0fd86>Qo?Wl3FOrTO%rz+Xyq~Jbo^BOVsAm>+Q75GH#qg zsZN36!jvcMt*Hl?HaFtHG)N&6g+h~@^Lh5f<T{&@xZq}!+{OGuhrv@3SxYq~`UX26 zm0>mB+^V=hwNDm*yuU-B_~qLhe*gX*wH~uEXy)Sh3>2|4reB4$RUxa2ti$V|Px|^O zGMs^!(y5R#oViRJS$m;={&?RU1cJ?wZY`RuW7LmbfY$S7hU0}6j_7qOctO(`LJv3y z^0?iImNZ<%EO+MW&1)OBx~d8MBrPHv#^fP|X_2B8IQD1Z_-sc#LK^wY!kez6hFxAi zrlwM_)HDa}eqlzC_NT!77`4)I9G(H=drz{@-MN0oUwuUnvJOF<>h($s5~gIYMnPmE zlp0R^u6=sm{<j4J{_mz^{q0OZ5XIHopcme!WeSSykks5;PhgKWnMqdyjqIa<XAW^o zdI+;;wbI5@nA$)l=P~P3J>busn98Imc+=9zUmbB0IuG_t@<}MC6_+At=LL2d+KzYi z#Q{g(b<NP@{E&p&kh{vR;mC;l<d(CDzyHmCNKP)cw$=qX(y1Z0;|Tf>(4?ctq)~}* z(IOF1TRI@!&}C!+{@nx%vQUwxW+@dMs_qBxe?R$kFWP;+>KR>8*?59SPTUfhm=3jN zYQ|{Ia##@=(ggTIJ~KXHOT~TS#S7aJi^Tkkfcg~Fa(Hp2*5K(l)SD)0-+XRo0T4y; zvYAM*BaQ45QfW#ksVFguOYuCOGIdcx2&kmo4o1RvjpxFrlNa==^!r>qC8s^46ywDi zm@G<Jhv5{`R#s~piPKUs`|z}Z2VI29u<dT%v|rt>YS6jVh3!UnvId8<Xv8N!)76iI zU;Sr-P<vB<5C@!v0J7+{`u^5bal74I@XU><PtIj(TkIKXga#|+c>q)6*G2wQc(1Lk z1jbUlIWwxC{r#prjL_Gz^sK4#d7`z3`~8Oc=#;4$EZ)Cm9nV-P;+hd*mox?&bk2C~ zT&sn2JzJWqM;@Y<X%=!_15A)I3|}Rdkz}&8Y7J<@pQg(4lk}8e+ba>kjNf4ub*o~~ z+sZ=MvPR)*&8?05I?+Ujk~Q0DGkRbEq_uO<SeqNN_*6_W0~?zHb=Tu<xLdMuda^yG zUAUU|#QL?i4h)LVrV6|Nyo|QV-~^BYNp+#~xt3Q}yWX$Rqc)?m6tel^L+j5K?5}_k zA|;bRUH|ZF{(Bk>`A;wsIV7NzyL-Dj&P?mISe_|jKw$91CY#?df-ICKt&_Gea|R-! zpom(LY2~YACCr~zXD&(NVD@ogENslP9kRL=%^GnwA-ZF)Q}Z(qdqt@QmwCyz)d{5O zEIM?_BTz??)%+c~QeK>RHX};&$(Bt*t4OD;1R?HB#hp4A^M`M4QqXfg*p4qI!-t|w zVsWv3*n&`Y7Sl6`X$r>Hl{ypRWjF;%0lCWP5<2Cz@g@NtI}AsY)+2{GfePF}n~F23 zUEh@jzS!_$b$4IE2ab~;#&aiuPLvNjrDn(qO3x3e702yHdato2hG?@C;>MHxs9TIK z^}D>J-{guk*mmaJj`UqLts8fwAsR(QH+9?m3O07SB9Ls|1r3CAW$GbfXe0|PnHHqW z0$`DeY{C^gjYx;cbN39(#>O-5i+R6~V)Ns;4f;xf6!oNb4Ds@`5}*3KDFRnA0ck-) zwwvTGR>;(J>8k^I>`z5xG?Ofn-aJr)dKJR@M13D*AV75{P+OkDd7VoztNr(J)IRCB z%&vMO@HT0+rpjLHd7e103wL?L+uI%QKOTMt7SkRUfnF^Zcnn-6I^fLX=+EPInSJs# z?oS!C;z{GP4WpS}vh>eqJ6m8+mkFtd*FenAC^Bt=jpiolnk_Yk$Oi*}K_%N94N8<f zd+jo&R@ZgmILcVB4XqWFu{Nzqbii!UWXRIE>=1TIjmhnH^H=!s;|K2dyC>RT?ZkOr z`1b7^?)N)(qNo5$=_}ns7)#*!e240R`~3}^U&Tq~`q7jFdkoZ!h0gQD{r<KDD;hPo zo03c?K6f(}fqd3re7PslkQTMvt5g@hd`-^(l-J4Q3x!lZZ$Q2#hX1*1A^%DEScfVm zJwoAWx&DBQ1`akm;4td28}kKBkPc~tMLHXUtOttqyt;q0+BhE5GapQaVexX#N=Vkg z({7JwHX|0e2kWg}f1q5bY>HD$`=#$)CPF)HWp`A7<d+V%6CSQ9C{PRsnDEfFr78NE z2kAHtM>0b}y|_l?dtOE}*t{sP5HPdz<h%@dH4bJ$BD)T42665j1P!PeNXz3WVwV7g z#8g4biV=kM86Bv04dGr~=|1!&YLIlf7ir448C8oQU2}QSv}72ltexBvFgd@VQ&`GG zvyB4Mm-w*irLDeS7xkdK=kwYo)iM<+rmxF(EY5K2(gJE8$xCp4F(%jq9>l{Y^Lu5m zBIgqr^2c_u*yvZB>M*hu$|&Suh12vWb<5*6@*7NuT%4;f8|K^#i_9JEAjV$fMenwR zxpA>zVr1i^vo;}2CAecI*DC+`gDNGP?@<IxZcqMTADI={YaPcCO;AL(lp)(QiAA?f zF^)97zPHqRfb~AM4V2-ucAig9t}jxCR;C9P9>)zu1n-YW*UpXR{>S(4_{*=q;C38% zmZvvXmtNy}EZwYQ?Duw$+6VyE&PSY@0o!*0v_=A1`<~Ju*Se2!(!H4T*J4SnX|I>p z+!$;8S>G8ft0nH9@^Qgs1{ekmECqE+=!5bW001BWNkl<Zx`sVd7Ct!4CqynZEzV$Q z*A>lNL^ihn@)95t*~}!IvU7PeWO}CO^K@Ed3>nU87CdE8CpJ$Py?7tGo<&1*C&-x> zSk^8!lYLp3NZs)=>&-eyQAvNMJ~0itxSyd|Eo49ad_uCEm9K(M5ch@;dXFM_@wtEA z`uG17CF^gKf<-&b<gfE#zRN47@F{s^=c-ZcGv3NVw>VE=%W704jvj}>35icNX&fYU zyAwH2#Rifa6(+Y<MM;mLAwxq)2$oWDS4hY>pL$J>C=$fzLSi{~Bg$UaF%MeTNk=F? z5kuoB*C0=^cKQ)>JK`d8Cc3w^;I_;Z?WmclMnxK$mieBVERs1@J`jtz=qtg2#uK-x zd2@tJX0xV5wbO<LsS^}O?v+dlG8(3sNLLV=Z%~)u{xUdGxfw<VFoV&9OyQw06-=f` zPS%->>Ynlf4v3m+ZGVwU&ktK+i%3tgU+9-DfCeWTuJf8r24^79XKFd~AXsF}`pj;i zFlEOfcUv)ogEZ|^L`!2Us`<HW1cq2fkWBGp5Lmk=CN@*E5bb|<y`NL3pfYJnLzkio zrwTQ9sKT_b9R;ebbJtc$N^IlSfvz<dF_BTI3r%g0&grtd+f-Q+FNEoY@!(f?;F>gy zc&<!?2ieyPIg5%5lQgZ)4s)}>j^q!ehJ>k0LQQ5MHqwOjcI$kZ=i^Cqt(mBNT_?14 zcevwr!*yN*_^1OxzV%N~3QFnpoPYYKf5zYa{omn!zvH+acs`!qu!TZQW|jv}3bVVP z*_NA0hTA4P03#Gyhh$qmUgsh)e~Ro9dali-Kq*;!Nzf*TC=SMyPmpeq2Jm%pmaEH{ zH)gcMuD4JqP5@osa@51ASOM*(_bdsl$nPgP&Rf@K>DOO>8Q|tD&W*advL)6%-J06_ z+Z)+pa|7P@k=yME0hEgY2^*gz08KTTX|zNYR;Yt_{rawS&Ym9?n@N!m=u$6qq8l^? zpBd-u0af{^H~zHknR{oX`pJ%U@CDKMpPG*^QLtngzbT?!pMd?8ncu15P|O>LJ0le; zfJfI}OCVtf$00u`>2NG5Wqk(crDa6?Oic)KeDE6;A%aq3{aFyRIW&~WGpfN}zab@y z(p52g#K3)L$_gXmXzte^w31x)(3O~}q41zFB>xO-ew~qh#k3`~BHa#SLjfbD3T_d4 zT^7jHf<>}ui)pUr&?3@NIdgSkWZVjurjRN#^JF+~bvxjSt6kpobphw}y?;gN;X_q< zJqd{NH`jlGL}wOHeon~Mj2WKAZ*qT|0aNo@C?h`9eC!58fj%QKc{~g89epk_$gPx_ z5Uq)NBO`mj9hYQoyd5=!3pQJ8XjgNMz(oa8&X>`J>J*FJ`Dnr5xfBr+Acm$HL8 zoJyC)>Rb)$MrzcCdzz?(&@@gN2-8-7ZaXm20|n<a@jRbhi_%WN9<C7>NUenrYHK)d zoznAsJ}2dg4#eZQ;ToZkl3jy{uDYd`OQb1!@FpaP>N6EG=NCwkrC<z{Lu&pPxQfx` zjZLfss*Z%BZpnWVS?ZcTxt$c52x;`DppM4iYFD?zJ+HZbW!=9+QNA>8oqBUVpI-0> zC%ZvID>C&jzyA6we*E}>|M@@v5&z?V{68qALdxmSS$wYHngz4QR&7%UldX(YgQFMF zlf4C5-xg_xB7(Eo1jJUm1^3P=1RqEunzTzppp2E$6pRgba}-$<C?Z8qHkl!^g#LO+ zCIM<w6VkuNQR}4PaT6<LY1Cf{oa3M|0*B%gX>|h(3kv1yrytbVUFT)gxVi#kI)U6G zU7zH-1^-Ms*$g|GrD7O}XlUrIIkA1J9tEp56$=QO-J-D3M7FDc&S?g*y9U{Idvhl~ zk(K;Z28!#8*S+Oc0R1+0;&rF|C++Iv2}q=gu%9#17=Df<wq$HCoc$0m7b{ijq}3fz zJZB(GJT~@eoOr6b(l*%6Fwp|?YlbwDG?KI;SjXoUXhi$0KvbJ%v{YaQ-pt&XNsz3| zgH*x<CXhJuCJvxU;C;+=<WZo<0|wa1&v#TT9h}d|@x?eakEl%;g<4afsEh(^G<7<o zaV_OO3)oB#RHzBHshIQ36}Zl}a<823qQeD4!X{D=6X}tM5s7+j9a^ITa5l)aQ8W=} z58{gAPrI{a;f5E=gV7DUXgGq6jDd*S^MpYB8aWbP#=+*HZxN*_A*f7-Cw(^-sHNK| zL(~y>-DKw&J?L>hi7$P+b)`0){PrQ>Y@Y6H7OoofBAcFL+0bWjW}f6BG~KTlggeUN zbQsIgp4d9uSbm5Mt67_1In|V=I?5AGD{)n(^=lD49`93l&6GlWo`<88wuam7hR5TH z>*_`E<M9ZS4@Y%}t|^~WHYGfcqr0|nu;vz76#p3uH3TG?NW}E%Q1FF9x6D37H8v^A zw1youBR2n&o?GJQq~~{?4)^QbDT8scZC2o>&ACp+{g)d=DsYb6n|67kyfpwyT>9tp z3Dq{}C{a7+6d070oZWEL0}X=fYC)q=YQca1@Ba;t#{>WPkN+?J;UE6NrzJCkL>Fy9 zxAScir&UV#(M%EJy)8a)916_3gR6B*UMXcv|7T55AOlP)$e#P*v9>&s^mH$J0Qn@m zLe?e(z=j?bHBZ+l_+5*j4bXnBT;~O-;C2)I`pY+b|M6paea({z+2D7K2#tNgGE-&| z>_skqbEB)~r3O@vUhI&)XGCVBR(As>tq`v^?G9khNg2FkKN_Q<R}qy@n>K48sMb z#P~A8YojJfLQ1+SywSIb?`{DoW&Z^F=U1AKKS21Ju$HW}KIE9>U1Rm<<m2B@!9o_l zYK*;K9@1DiY2xZ@8k0#t&iGJe8%Paw0#&TYcv`8MG{Apr1}SB@K{m7{+3f{B#R(H1 zh}$N@?Ix2miKm;7f`P=3c;%iYWscmF^Mj^;oAvNAiquF!!PXOeogS&~+_%;Mu!XXP zj*Rn^BU8oNK<^eWcry{;1p2XAiln3m&YEdJGwOs+dX6>C#imE8@QJ;cpdMx34&pj@ z|L^t^#E^WQHb|C+bkz-|kR3`Sa;ez)C_AzkZD%G=Ye<wXWP`fWwWj9Dc*Aq*I3^oV zJRcAI{{4G!^?`Cm1;}6^4;VLLoVvGQQ;oD6T><Tl5yT5t@y7IGNip8IaV<?z64vU_ zzm;^)7|plOS82L*p4Ys_#i(i11+Qrvm3c2rj@u2-^K_aP)0c#boYoq-6Y*X;(a!t* zj>qHSlhN$>Z^eZPN1eK&Jy0}89f%hk+`wC4D=5pPlo~9xr(l|CJ&HQ)ysz_Qkri&Y z!zXIi5SC$`>y6fU?$042o>#D+BXNH#xK5pJKDFY<_a9JgczgSXB7(>B(Orv%mSkr^ z-q(E{)2$<FoXAa0htpBlhBTkDwn1w>&oeygzx?tGT2uV~+i&>$zyEub`yKD^@3`8~ zCs69M^7>|gBb-5HvKPj6_E1KNR3A0huMpZdMdq&kq#PKLc{0s^Ph0t7p0D9N)$Js0 z;rZ_bfg8To8pDyg1WRr&Q#ac6fW1k)+68?oZpRJ3{PGLl-`}Gh-b%m)0(Fn~JMjsx z4x<xTR)-hn6|OUEL-4O%S41A7324+MVLSju+~_A@?{!i*H63P-06TwIXHC<A0fOr~ zgQH#>SwehI49v5j$50Q568o3yrnTtKVr~1pGW3W!wDMJ!*w3^loMfL_J{tDTFH*Vw zi0=MBY4br12+>v?;osl0)ipFysUp+IMu8<z1autkSBKD1Wu*$45K^~pK|(YrT{es8 zz9Y-nOoK%P7kqPLjX;lvWbBYO9;_o6RE^_sf8a!^CX*KnQ7QO55YOf;gl#=_^BS@O z>={Uj&6{qoamdlY{QPUff)_}2Lqj3jfH>mllox=s17+pl&nj{tt<4b>Lt<)?@N=cg z(0Y_f-y4leF+nKNTmqW&Vk7z3%|aJp?iTUQ!BopikPpDYuWxW%DD@<8L&z??KOVzy z0ABPN0{c9lXjgMCzc=zD4}$war>CSube@>TglvQ~^WZzHn~qP3OsKk0f0RNf<Frdc z^X?X`*^)VBe}tx-CV_3_Ax+A-P;qLMtJ*`&u9Fb`Va^af_DJiNxz<~oN##}<+V8); zz4bpo=boiBt?K_)56!yY@BU{Wi9jt6!4CM_{SJZP`F!{$XT(w#5#Npj=Xs*FD->j< z$jqN`baPPj#`-f9zt#hdGFnvG!h0HVs5WS$EE8*>Jds@ddTM(Q`i9%>hFTAt_TJh9 z0Dt`Wj^nruqku8BhlDdBgB7czA0Kz>dYS9GX2SdcUbOXQ)4l0L@I0R=Mexfn-|*XS zmtTY4s60pGTD*Y1+STcin&ScI`8v&5)C~^&(*>5oBosD3^JU!6D07A&+7z1(OaRd` z3j0CD<;i*K6juA(Ok<H0P?%_gvfukwp?GnircoGiyDn(yN#(Z3l~VC`e+zrxk}V{P zMOpz3bVDeDRci#OT6BNI49vX71lbq@eGlv5#zo4QY*65(H&}B`W?{L$9ubG<J{S?S zm29HX;BV1>?r2@w8X6>6bTeHnPqHM1A@TH8bpmP)W-VP_fCT$<Z#}2wi;agaAostw z@%U40{)GuhJSA6_lk9?+Ad?TOT@osi3S7yYZKHM#+R)V@#vqW)qHK<E&OAdKFH&l< z2A}RVe2WX3@u`XH%Tt$>UcT{44K6$@2c-Y3q^?>dAXxVKdD^374Y}Is#?PT)lA~!` z9|+Ad`I!`m94g5I(+~)Ts6~*#jn;H<GwRZux~4W_ZY@r_z{tIVv+d?)rR2~Ri~6P) zWLRf*&0Lwb#cDxnBdu1tSN?23I?<ptxO>T>@z8Z`M%%u<i9(!^q)8%C@V@#Fi-tA9 zS5{O$pHJNH_i@;sfOaa$q%ah`zd!tXwl+QSFLQ_i317!OyF8ebc)uEHFUw(|bDCPD z_=HK(g0^f&1!mr~=E6o_aK{O4wa=#$UzkmZ;$<Kw>rcWG4+aE%@gB9{?cNL8M%fsK z2%cvns?^Mjn3{{?4P7w-2@9&#+@4wh8?5lI^}yR(*Nxc!{JP5u+*n42jA@uTaY>nW zyU;$-xUSPJON~m@?hUu&7Q)v=1kdN$UGJ_IiX3a`b?o_%=fji5K~xW0pIk)t_iv%7 zut~%;Q0U+9dA4zVE1r*coacpKe)(mFk6sP8`wh2t$MZY~UF~|A6O?bcNJ`;LmW?c4 zE+Sz%ZIhGhYACgKt;J}JZ^PnR2IzLRHZoY6Hz4k!xa{N64t5_7NWcwEEEr^I7S8Gp zeiHT=HZ+-VU2}KLLX=bkFY{nHnjIhlhA*^wIoxwC+=S5S7;MYa0iy?-WvnO5YxU;a zo(0xvs!qTyMgcSrjnv^DR);=^w?NMsp>J&0*z$IiD1vsuj^pUMQE#Fqt<tQTb0ZNJ zr$&YW|GiAllGM=j-^->#6rlV<|Im+&K5=BAY63g5Om&=%M_S@&s$$M=&B2QORAZe8 zDQ60O*mz(|h1+FAZ90gL=~yE8v&HyA1Cqryg2i((O*N)Niw2aSg=vVP{|#0c(%{ye zU&KSB=2%~r#C7I>Do<V{QiYt4F2$)=w#T(xXk+@pTN<j2gVL!4O*27pPFV!0gWn$n zp>ROV@t6h^8$o@bqI}egE9Krv5TfM?2Rno6i{~q%6|>l5uBZg>T1Kojy{@I*3piGB zPTA&IUM0bg<ecRWSi=rh8wZs2hNVb>mKMIlc?zUd*GBkyDkbPBX3BGk=*)Oe{(EAf zR&65uc96trOB`w}h*cx!8SJbo(}q2?7wmNA9OEIjwAXuoJW*@)-@`z%-176fNb91+ zU&k5}xHz$BFaTgmV3>ZS3Rp@%@N20kUcj!L<fvGU(W4TmYxe#nH6en1%NK&a>3x?` z2syXuD!Md^g4sPQ&@Madn-_~c!0zEib+xG<Nz`hY#YY+UMas-TdOROE^uXKOH#{Ei zBXebbrStj3U;gqJznABE4QH<GXf+S|>uR{)YZu3s9*%cDpM5IEp`p|y9k<?)^w%$| zd}*w~rn9rNtV1c$Rq?tSZnugm-5u!hc#OpLKDp#rTP~WUbf+nQCTzMep26-o1(fow zH{$0x#jetykNfS0@85smcHAbt!yYNu{>3mddwwi$DroiSOlhs*IF2z<=*@;{OS-7{ z@cVb37mnlT4alJC_DnqW&uwfQv+xD3HGeXT@o7S4&x=a1yO@EEhzPf0+0Fy$T9Ot2 zB~eqwmIkZ4^2Q#2=<6~?H3Z_O?t}BfGDzu#XDQ(mbKXb08UUJfkN2y!cmwT@i*!!g z^lq9)^lSVaVUrd>$TTM3<88V*_N`81no|;?gnKrFXg*<%j0au7uXwTTd=(011!Xj; zA~mvPk*?XJT7ZvJHe%+8^4t{h9A(P5rjbjchEGau3Hc%cZXz3cuEiv=w%O%uTB^&- z=0ZQ5e0-6G@JaLW=k#MVAZwVKgmod3SQ08h&mlWi&Uiql;M+XR3yN^D2jY@<XPr_j zijY4)acqN?CTB7DgQZJe1#enbFxrDZ;%V3BYrNid4V{WvBqps$2(OdKsbxnm$y6$O zElrag-%Qi%#q5YV`d4HGK01~NjL)l~hy3brF-^_MBR}#z*{5BC2zEoO5!M-v^?@r{ zp!T1;Mi3aUt+pT&)?74n>-Wgh7ggvGBN}zYHp25fr%RMft|=dMq4}U7IWY1^Iuqu* z1~;dv)}86$YLxF54xY^;6%MxDKdmth?7|aIDzc|$s#)>ou3;%C4p{P6oN8DkSq_g3 z3vbrN9dsN;#B`~Vp`n6Snwu%D$>^%&NSzl-F{35H2_vf{=0&8DDTzF}S;D%X0N9(! z$+T#e!7cZo&Jj9Vgn0EPycD$O<%S8`n(G5hXXBbF4=%lMy<dUOFpI9fuRfm-yuIDW z^KxbE*#k~h0U3pp3EmA^Z2a0Vs$`#z+}_>>nmhC@S50&UaUQ%iF&Y}nS$x>Puhxs{ zTDxxMc|M_1=X#)9S4#0o0i(*<8vD8~yxs3;Bcmfu(nbM!bVtAE^AT)#9d%6;hMaJ@ z=2S`4vJIi`^SV&cg||PxpQFgFZgu{Ao~Xy+Ste7cUhx<d$(aLau4x;vn;8PMNi)^a zDa8v_sOu%pM&}Ug1!bxKu^xbNVlj(;1i&WGIkx&biNIq7LM2T+CAf8Z!M@Zp2&njM zDjQCknyIwz&Qy9JZ`Fe9YJ=L?_vgpsIh$dSHSK76TF~uGYH=NIRi?i~3Kum8LO)eC z=N?Ug^aKI<jN7EuBH0R)My?D&_%?e5n~0`t#GN7sGGMhczsYWTX_%c1hIC<KOt;do z!&3t-+a_VUKoXes0iZh#lhWV$bei$C#^le&BQ+p-F~zo6Gb@x#P-HW>qDEj0XM;6d zYtT}uKr=^=iJF@yKZLFASZ6X9Wz#ki-)2HcaHV%wn<$1fUTCey?5;;Ml3lo(DvG92 zaiYCov1^5Uug58kemv4+AWIkW<_77CB6LGunX{=jf@d5<e~v#HQ@k72psy_3(v8k! ziBXE0d5uV_EL11?fRjl)W!L&oLAJKGjP7G%cmDtvu65GJ+9*f=%W}PJ9dQwxLokIj zFuCaFwMj;pp*Rl3XOT#Y+lA0Mk5yySnb)tf(@{<Vo|8Joia@nCi*7_hATbPeXav#} zNDN?@0h@kBI2GG}APSAuEP$2pS&?OG!dxnuo78g20zGA*_Swj5CVR`^C@ZRz-a=pI zWYnLL%X9{a!c}iHiB@DyiJ|CSJlhkjTT`6RrvpER6yEMPJfA0i|NVD-`}PgL{PGRo zzkkPhUK`qToGRKx@i>m*PNUuwOlxq(d7b!Genq|2A^g5Z@xpuE3~+tB-@UnN?dnc; zvY*&C1%CW^$5DHMHiHZ$6*`y>JV(L#Y_UlYjA@hN$Kw$)ErTX*e8&6zj`zm{Z*Omr zPP{2Gnnt@}vsCr92NOQa&;VV-SY>LIZnqol4`hA&?BGf*1=o4u95l9hCXKU7EDuJ5 z8>B{Z%rdo%8peD*=Ig0>m?OE@AzLi3w3itw%$C*b6hCLlY>Tm!RTM*G7Zzm7^I9{* zkZGAnASD4m22L3mC8eMq6%}23)0>Mjj2d)+S1mQF8ZvH#3>?fokio}NCc{E3jFdhf zo2!UOXefMYG610tD)eXi{&r6cjW{U>iOl5_x^F()h4iv~UsYEccx*V!bQz`37B#ZF zf_|PCCiF*caH)plz}rYY)#Nmatt;4$G6sBN$^2Cu_s`~IPr(XkNe(0o#o^o-belD! zD-z3rN<O8a6l$hL2|RP4i-;vsA%uP|Rb?UEP1S8K`(b!_lLB^e8GkQ+5BlcXdcf1* zOiMl()8UlXrZ-8FHeN*wV%cb76-C$C2(Dp;W!*&!al_E1fg$T){p<mWC_+FQBqovY zCbS}49>+^GjOZle6BOq4hXxMQc9PIJcCiXbx&2(5_PYBKZgy^)Jdq~5P1x>1qwm^Z z|I{<Q-d@EHyt2pi-%~^$Z<r<1Uu-$)MYnEl$^}CB7>2}A6CE1L=v6cGb)s}$WM>nZ zXii)!7NDJ1bZTpgEU#tl);98yCV`W?Auk(wn-=VjjP0OKbz97}AzU^Z-qjQ$-2!wr z8KdYE)}Y8jO|-(p8#bfMjSp3i13+~&KZ`k4(FNV@!jB(6+}Y|p&y;p<T9X#SUw{Ao z_g>UERY)V{R0Qp6csw5+B}Q*Ny7r_5J%okNUDt`@c0;WN7qmYYB;=lS#<_R32H&eC zO?s?IeE;!dB$Id7L=9wN8OhBRkH^y+l3I`62x-XEL@5VqY2>&EH^2y`>$o>M=s0~6 z(_ix>>P#<U3!di#$5CMfpysxv)iZQJMN-q&-N0(a)3Zc|j^+96E?~n%LuBPh71^vQ z$$_(Q%lPOm7$=?^?j`adNH!vMDAL}N#v)kvfL8$0qzkI2#(P6T_U^es;&(7p0YRFi zNMr|uecdJ(5a@OFHL4m4*?QD5mFjw;>uMu6tGV@Zn4VG7a9x*Mb=$d7L~uK9{a&9> zpNwgmv@>N$h@NZvdacLIt*UM6>x9fdMFKEm&Ef>Rrd~@KP?GX_mU+fBi5(zR=o@91 z9T*k4nOvJwYm}x&DQ3@kcyuW!^7=#SvH&;q=iL|kcQze=HXolgAbA1F-kB*|@j`Ud zL63*Elz_Ncsn%LUUM23kPyW+cgsj5hU-M8Bvb_T#1y)d)n9uC-WNZM8YIzZCow!WY zSO&5=xtu!1nt3tmBqo`Y$IP{A$wS@(=QJ~kHcmp3o*ra;3&J7M$t5>vUzxtJ$XO+6 zEhTvC6EvP4?KlNdr_v>T!!~gbDTFMM&4g@<MOWhrM5H+)@=IAA8k*2>kPUUVD|WAT zL2wAdf^^H`pprn~t&lJ}n<dl+n|>sv-EY*#bP$`95YhMKqj7r)2r1`ndqK6d#AH!A z*3;D*bO?=2teL5tizWvf-+EvX5NbGD_e)AOa|xNL8QrgPo{l{WDgu?_niGuYxw}F& zs&SIh_oxKk-{1ZDYTBEP$K&CD_ZlV&MGBr*FG_B=TgU-nn#0>$7tcOV;5tt{pHCde zEfgt{s#JU$*0U#`{@O>qLu$eE@$hTWCoyeMf^H;M2V_?Ois147jvqgMcmSJ=V8?Z= zR^&4!ksQLTSaxo_+O?UhzE%!EG)l0JhOFYeE{Ied^@gWDgDzo|e<=0Vb3-jZMAl+z z4w4O>E_i=*id!FAS<qV<7RcYmT2~agje@Il{v(%lW(Ktew05H32BVo&9Ji6_QwEU2 zfPt<S>0w{;dtAmkixUq~##-7-8~t!=14V02Vv1RU=Q&|Ay;7z)Z@{kQdjw1E*bK-A zXICkk0+ICrG=yla8>BRAILbI%Mr|SPR0mw71uV5sNACBV7qQ*4oU&k=29Q9A+G~{E z?#hKeHKe-1rhSbW2|Sr^oi5h1uxJ`s#DfbJ-8oA5*&z;g&xtBa0Q99}3ThL(;4(Nb zr@39}VqUXnKG+^mrBWJj!_H<k0=@8jD{sOiC$CTQn$=ijlQ^5s`Hxc9m&Em9YyC5A z$e+!}M-;38Dlm&vR-KM8&?sTljj*|3&AAwjN#N#}@vsdVRTyHB%Xp9ls!cdXGs6}) zpztt4xV<qbvPOR_o4Fx#g}8+_$ryS9;V-G=BBePC+MAbh3~NB!Ox<xS+T3#1hX>@P z0$kFcgT3kVs5y;wx6kBquhLx&nFo@bWAp`XkZDLex3KaW7IR%pgi3Pyu1FI9r=ly{ zK?X(_g-b4fj!%UDOWp>8aMWp9l*sKy3;fzUx|^o!7_l7pS7(3a*)VfjF+yPwAOpU> zyA4|+NWe+dj`Vp!FdOwbnMxA`okkB6+Wus-miat~=5I&;Or8kr47VnOQyTbkl_eI) zkTe04;hHyn@mZU*aUrEcn7)7Oz{LCe4>vxzOt)b6wdbUS9Jd>u)U23T_U+p@T)+K> zMpH@#BSd-H((n26d=9(bz8;^?$H*9&^j3R*ZpY09?#FT9e%!iin(B%hI9;L_`E4*{ zSto{KTD;-`D;ffMBp{q!kY9SSw`tU;fY;o!Dvlv-?)IHEA=3SokD7|yL^IxNe`cr~ z$L%R=F_6Ow=l<I?2JmT{PEuXjHot?@N@#-Co0P7lWEc5JQId_Rg_*&?!#T~Wne}Hg z11Y=w>GsgDlc|j3H>X!2orO~)x55M>YuSoG8+#ELm|c)0J31vwP{_DR?>S5{Ebz78 z%WG1gbg~W1>8T8n(wd-B001BWNkl<Zbg2cmbk8|MOoKL%ymmO}j0{YgWe5>{%B_~A zukHDL8x|eN2vV)ZN$BJLD!FP=?19XC?b8R52_~hpz;ukJaZ#K22KPt_6SnoVDNfnn zodYZykDyb`x#H(7pU=T^ST!|EucsV5z}w|{edGxCXY=th6A;15F(2CO#r@SC77!A@ zmkUkFN6N})_J0=I!X(u_$@XrZ3RH?O!syu$*v8lf^~znX#$PKW=$7zj5_1H|hLeR% z{636zw&99nZ`2mlDsn#b#pGLje%d0vC=}A_0HZ)$zm3s!(5I##pm_qx&b5OI_JJ8h zXd7|}>~^FsLMijQpv^h!VLei0NAd-`(Xh>9w&E>x0AX`*<#p-_*DnCGd~G7FFn!() z4I)B-I*ayTT|235Zp-Ve#Yz7W$pMX1=dy(?UC_wd8pZCI*I;o?dKzGa9hO*z54%ls z1?oRmpoa8v)`wst`qRxg94|)UF)=$(>Biv~_;`Wh_v#Q(3L=iKVxbsXrolGdI42mP ztUX)B_cP#9rl&vA;&g-zmQoy9v&7)*I?>)Q=TC>vQUs6Zv!k-)CU~_uZC>55dZF8` zYzq`+*xz=vRqP-q8%{@KjfPYQFq5V+b}x_Pwm2YxiY2!bt=0F5F0vkzYO@iLN!hJZ zmqNsB%S~5Q%0b_|ye=O8FaDF0t!Ms_6|6uv$r{D$2%ltIQPq+%D`LQ{IkUCwyvQz% z5}kgs>(>gQN%{`c@2ZwM?byR>7O?e-KfC3{ZcESfE?{^!Fkz5M7<6NoBz-k!**Bj& zy$>{WXk-W2q@^gK^3yd=&=qS~3@;Gu>y4J^-<>ACS+jta2-ux@MAYPD?lRo@>^afa zyisf;9MLXP8`tr?u0C}gd%0|As-`uap`p>Xdb;EZ#F(0zvrBZT{pKWm&tPU9=11<G zPJzvtC%X9JzouAyY1`0kpyHp+$Inu*L=x90qop$uU6P&bLJ8p{?qSzyjteEzLDFV2 zx&AW~BaG>pcPfRD4B6O1t}aBAuNo%}%M3BOM6oDUbJ{bO{O2TO7YfMIg`y;g=$Rzc zCf2a?x+n!LMaP+$pe%;emYEv9TKlX>fT4Um?wn3a8fjVEePVSz;qk9zIs(Xh989;% zt{K_-ND>yu1?6tE4?=e4X8K};gXx--c43;ZS<BT1*`E(8K{g_o6Qx3j4n~7p+_6K# z&rb&rbtj!@VVtZ3bvDlvfo&A1)}r1-5W)%>wF=x`;v}m8h2BR*F}WSQhMP}>R9F0R z>y(C_Kn7`@zmVJHj0Q?bW{QgMUu7J|zCR2xe3~9j@jB~BT25tH<iNHJTRQx>aB^Cq z>X?W&M<4BeJs$5J87EY*wT9>8J?Nm!Es4!Vm=b2xkLx;de|zg<>hl~yV(TOh#941w zpUQM<>)Z=E&%M9L?S7j)Z|OpOrjYfVjwi~!;A#!e=ZX9M&7H-%-mf<hM-?|OsI?+J zGTVQ8BSOgkmcIIF8S;PRpCSoR6Wy%wNf|U0y^TqU4$EwFXEZYlc3m>sY9VpRERqyT zR=qxz3>cvmq_Q$d(_UK)^x;r*)&K|>;LU$6`;^xS2o<vR6?`(u9_PFu?zt;^x<SoW z@U%E3M3$*DPnPZcjni<Vkve#!4q)>B7Y5+M6Imt<mY`P=qA%JxR>wnO>w*Eprj!0$ zii8-2nhjZ`8*9{I%iS&9TRdrP8h2?3XP&`<#qXT~L8^0)b8xo2qA&>$aMpXM+hcv1 zaOj7$^N*hTpA?nv9AN)!K7OtNiJ|8)*CA*ckcH<OZ91Wgs>oi?P)cF?2GK|y-DV-P zH9O9?U#<Ump%vpd)20!OB3}aXBx=pH{ibV(wXR3kq@-{o#qX}6E++iiTNI{^um*s& z?z@LeH={!?nskNnx6~<YX)1&3Ie4dvD4Lg5QL)gGLc{ffI~l{|W#!c{Wkz;F<s|;r zg&X46B|EyU8;ZVctB{d#83Y6oR7Ypa%!x3U66xdbStJz-E*k<snG-gq1}HnYjn}=J zVwc)#4S%!Ao-iU<`~Yh$YXiv1s3kwM96+ftnb)i(r4$^8hUrQdR-V0xqKp#Gj1WzZ zV5uSD$xlcYMg%Sd8z6yKkw#h<I{?{X9U9}YKS`#anDbuZa_Zid<F(`5j+B_3h^o{y zS&TpgL~)+v+*YDfT(FrXD#vwQ`0@TevtYChI^3iv^`f`iqC*5nJ@9xuaLN;kBhW&; zfE@4N`Q^5^R+wg@2f+!>rg%Irlu}1FhT^CPYV8G3t^1&`T{f7cLeVL$i__c8f!YaX zRdri{X#Bsp_o{CHp6vsM2It%YY{+Z5Q?i#Xm{S88j%7zJp*iI|A$7+l14IxTZUW{+ z1ZXtHz~tOBwRNqt$bYN(%xYQgVVd?y<2b2wvdwgr-Sj#m-w6m%W?pD?^kW*|exFY) z47Ld8?3e3G(+{$2FEZVqoE<Sir2xX}YYmQW7;sAYW+KCWywr`ozIcOT<1fy^(58Wk zSW9&})^Qx`N|p6mvBh@8mF30S*LABFB)#efZk)PrJU*pXeSvQEwI7i`DOdkLdtcif zNp7q6fUIh1);>x8|F2Bq^^VkCB=Ug(2!L#9X72j>CDJ+e?#@W9?kW}u;CcJg5Ri1l zF1D0GB<Ra+N^Pk_9r_IAnUEYO2=_@0vAu?)Gr8yAPw}G=^$7)oIl#I-n(3pEAe&kM z^*Moo3IKD;cckA(=8f|t4<k@t-1EN3rGQdU67;g0Y;ZaNGcCzAAsh|#ICNRD0o-j| zdLL)Q6Eiked0M3Q1nb-IEflSGbFRyB3O#X{;yqOcUVDKR9kT*F;V5RG%oHYDa1Dk! z+Y}My`VCYag@~dSp_V!dJ-K(Pf10Sog{yT7L(}!CL4n@AtTU&gj5k939qY|a=|qpE z?kf;`VV0!nxht1AJ#}kAh1azLCmmMYs1URV{n1=wny#(SdDGPA-c8UAo=MP0J#Zce z-rwI=I%6stm!dFHfpj9t9x)V7G&|~#Asgfp!i@&_0ktd$+!-qu-amRAXa_6k!>-|` zWxpdTDAj4-N(>9l3t!)Btp|GRcyD*N9wtq*gQ4S`>$-5Br)V*N`{RKs$<IWv?54+c zfdM@D3cq%sHboqD7_Ad-=L?QnaUKQb<rpYOS*M@tj6}{J*QjY|TnIpP4T2)X-G_d1 z#I9FkhmBs1*TTu?_!MW`?Q>`dvGEP)HjyV8&7v~!5cb85G6TGAG9+t4hZ~BVSh39W zdzFf#&S^^fVrDc;U?115JLEky1S;zG)MR>g8tk4{N=3eJ;5H2guYb4ciySi2k>i1X zykMl@(uiP^!H(uLF05eSvluUB)DqOE{W?W!T_$Ip;nqqP+wVskxo)HFpYwVH;%kNB z=5YJsPYd$cIFl2;aVU;l(Cp?u<)#u8hYh(V;muIt&-nWBo`HU#iT?WfsRo4d;faYZ z%miBoaarv?^Tz25Hn%ah-X~vN9}-H&eJ%|&a6Az;9z-6-CG2Muj%J}#PM;4TI*>7~ z_6`aZeB*}-!|}X{0*y#TSY}~KZrUI`m5JPNM1}(DLaS&O$=)>Bvi4a(<-jF-pX{<o z;Icu~%-037<tJG_=O_$HKsuBfQqKeJ@z@TJ*ppP3sp3Q|*y(jP_(W_>Xg@us)$;!N z0cfe&^Q4+Iry{wO0)9)Ap>!$VL?1_$DQ~p&YrTVnmcu-pQ&<WlxT4C_ouXL)j9#~K zm<*pi|L#0@>h4<G9p2=qcmzcG_<ov2Uh5*yO&An-dVmilThfcWp_J!Q!NQO(W$^#i z^+hMR*W((=+iFcq<H}ByiWhAJ0lU>4nqY4wy&Hl|OHzWFvO3CKcUdvBNajTo7jQ@( z<%yrvdLxSPoOlgd+%|S4QrHJaE>Z$jHrL`fDu~XFO*gD48Upmg%IVfRj^jiP?s8<- z=_813?q}oP6m%}AR8dR8>r26TRwQXkaQ5TCv&b~eQ4F_htP5>|&3$NBj5-L}=OB^O ziEz*v#_&AH430d0zok&3dvLNbb@R5xQO8o_yQ>y`_D%}kWJX}~1-sVN#3ah94!<au zv2un~p?~(yaSamT{<se$ljmT;EP@lG0h@lrH)FKy>9qVmHe;<1i#$hr?e2Qe%D-~j zIQk%vcP;xfr6-!{khwakb#uUEa+s~#BR%@PI02?m-K7{0f(Z`(Fwc<wXBXE4`^&(@ z4=L%%zKLOS!OOkcGz*-JdU%bM-TjU*MCIqKivJ3V@hji^)qMOi0y0;hPh{0Ys9505 zTwrT)=%#dKzcJ*Kw7BGGqluJkQ@Uy^=5&LiqYZp`oP2MALCZ)`yF%mBVl=v<_`sar z)v1e@A|=>ey4b|9Q8{~G7|(NB$?ALWn(+ICi8QHMNwJ@%t<y}@O%m9Xmav7aGcH=| zF{a~A@S%SA_xt<UIHN_(I&4Xs1Upfo3d+srj8Xt0Hc&VrO%)MsCc_vtZo&cPN3`|R zhC}TMOQGNf0`l%A4SaQJ7P`1Q4S#s=^kkmucy<aT=-92Ph0EZF12cyn^km{_zVsV= z(O}g{as8?b&cYjaC-=0vo=$n0Zl`?UZ~)uqOVdpvpuwfx5?)?U5Y2S&-a1}hZ+P4v zVtLtQNKz36_7u=uA2g;5fjtGoQ}_Z6lMM;6v}6_sA_)!anLWd6+iUBZ6ODtPaN#{M zQ?xZoWyv9L-mU6cm@IqL)rHO}^~?`_yurwHvEhKm6r$AVj~}k3PP9WvIi(aFwctDp zj-zbQD_<ycdLFtp<7#oLbU$+#3W8&=nIe0BHS?*~5+<0;kifurj!n7`5}uLnSwg{= zydEdKC+u9f#mUhe;>KsyGeGwh(!xFzo;1%*XYt<qikNUl7yJa;3H{aK%kHlWZ>>al zJ#Tj1I`?5q%g?>3riD5ZvQ68<H`=M@Esvr-J?*V_^>@<Ra{%5=PpzKw&P@A^AWCpS z(3OVd@BIELW6=SX(@&uRxNGx~2fB06;MaO}^j`jxiecUjWw3<>Lw3=$u;wQ=^P7f( z`4`?7@0Q)4-za=FAOBzk#BUPby@r88^;6g>&j>j6&O{L#wM~(o?m;LiNQus#l}ig0 zi)D5m!jedv5BEBxrB^dJ+8QBBHiA4M{tzJNCISnn{49hZ!16FFM0OB-X#U8RFO1d6 zVHe!9)IkotN*EC_cEITJ=8t;ds1;Yc>@(DQ;Pv$t|NH;^Z<M2$=3%?hV-`+~4cEa# z%@plAgEzv`)yC6dYtOgkTgw_KRjd=MO}58>kIlTPwW<_Amt;0*0hDPjJ0W${MMZi+ z2>uF=AZr4&w=_|z42yjx5pUPVya&SV_dHi}cFn%{V%Nm;I-&MO>Es{hCzRb3jKyj; z1(^7R+s$?Ih*qGy)q+X|=W#&8-$uX}qg~BXym^@-Q{Y}NWE=7#^PCOjtgy8?qO#Gr z?ycm)Ge(ThPD};pC=^tJt_EX<`M+u7>Ox(4ig&}X;|C7y=w=x0OjYb_iIQ-`6jCv& zWF(vw$1y|nEQrwW?=C_8@p#xZym}w0;(b~-lN&yiQgGI4_MZT7RI#p2fjKNrQsHw5 zWd`WxI<*tL`blg6b@P0fqFa(*huiSe{5pCL5l|#~o2!JvneIuN6d!`?8;GzTvb!Cx zC=O3*^mx6Y`$#>E<(PQt=1~f6E~ldRZn+oZyyQ)8*lhljhX(SAkIlaa#KP86S@(Fa zJ@nC7E~VY)Tg*HsdO}6Uq5}=qzRrF-SRiAc3O{LDWktbVlk4k%koxV7d}Mg1=Mkl~ z_)CRy@Db;INAgR}OpFZJTB-jMeTshg`+la;!3Sf*udhE90a*`E3R6NnE&kSGe7$vk zlDg2P9M@jyAMALlo`cEc+#zT!pD6_JdDn{74MRh8@-&0R0f*qjW_<E@nj}+9<MgS^ zJTdo`V&#j2CFqX>Yn*b(oDYKX)5tk$o$Z(iTsYaXdaX5Ygm`0uSW%Ayt+z1GWghyT zTI$w|eK)+<%@Vv$4}D?bQ(JxB41GF@$oz44?O3_CqwzS76Q!0p-4iMm3oY%s9%#K8 zx7-d0H`!6DR`+S>X<Wu>#VkQu<R_2poUGUdpkY}LlhWl%9;0$lm?UyQAf4UgLSM?X z0zu<kEl18`d7?1n=ph|z-bijtbpkl=We?$<6fLUzc-;y@K{q4{vIo>ENY(8HjfX>1 zYs1k=o3uJA)|Axj*X*?7p3h;yG)>S2+f!1|ZqTqPy4deys*%|(VP2-g-sunCmifuS z8XK@!5NE5f;I=apHErKpeDZ9~#k6N;GVM$)1uri*+-{z>$qxJ`d9IqIfH$G_43mQH zsEC8wQc$R(97X6svqsXvfoX^O1O3r0=b$g{Z;9-l#%8%WB9}wr5n_T5R-B8*Xg{R{ z^ml$1N{DDGC^-qFUBkBYi#~(O75mdA(KXM`T0c<4h)jp2PHDj*3%PNW_bPPi*2n_u z2$0lv0=SCCi|2L9f?`U>7H~Qf8?Z&A2hW($X6;!g9Ue!yhCK{eIE_qcX&3@lwGBYj zMlugHW*BWiK9CzyPEDyF3T3@4f)l0fuI%Yhdpa3C;b7@C@Xyg_1%1ADKR@|j1O4*& z_#Z{1`q}2=i+1(j)PT&+yBm+2j85Yo%6<6ir+p(m87ENo@@58A*`(DDGlYUT*DX8L z*EdBALb%eEv@k6~r3ep}7I1Rl*Gl_oNP@BhZJ&8XB$m(bvN<pVho+m?baWv<!%9v} zoJKUno|5KFyIhFYwu(wNg~xH&w7nZ|e!QRW-@gyBn!)tzoelv?K0Bq9$nT_-#j@Fy zX`2m#u(8JgBsd>(5?j@R^L87WmO}R4#+iBz@v{?sXIn+HxRih#g~3TJl+@ByvS;*w z*UfKC8~cQ*Luecpn#R<YQ}V{2oN*G-=`>}Kgl1iny+?hJ2Hhne<zNe(rutUUXd{{^ z2HrVOX<vqvbbojYf>5WG?4UMHWK^f+xmfmI>)H^jSiLm>G^}A?UT)xi;<|=@q+JcY zxQ5?z`)&3?ZYsH_Ld`~HSkcab0`Ipy_Iqe_i=%9RxfBbrf%BjJhq5i6PC$8?HTxG0 z)SeBBNTO$8KTr|ptXeD1^T5l?f$E+uKXU4=<GSv+t_xRhmLuRZQoO}*6@;U;3y`E~ z)mgF2#_+;&PZw18zCi8rA*E`%02wCuqQYJ8aYpECYGceP(2|EGH4t2nX3o-xEo9=E z*`Vva#0G@3%bcS;vI||C%z-kH>f=CbZ6HaAw)WdW9B1lo%93ycy52cj%}x*VVI3{| z^4NREGhPoe+u-i#Tst~w=&>CV$f?0w3|`WjCyIknv#iHzII>LPdE|yIsLH2B<}Or` zpVUIMrE~%OL0L5em}iz3$Dtz-1C0ZSnVXx8aP>uJ^{mK#E($07Y%R{Trp^56*o3EO z!|$zM&BwnE0%C<;3D&n>&PmDbetGDT_?L*GhUAM!nyxcmgaz@|-rFGR7z03|D1_&= zddo&r6g<40#zP*yoNZxK7hukHnOCY7#Z7#h_MJcfQamG3KzxGdEJE03nbAFp0^Q18 zk_63%)b=OaBhwV(ALkK7k`uOITvEu|RE$^3NlZeG6Q()w_TJ_m>2P`+rky6;8qqaD z*9+8(O;T^S+bE)JsyB+5_x6}>G4eI0ttAxd+O)QInbVu)Y&Z%>D2m*LX@2_0KrJ-v zG&$0QSl)Nn$#S|THaXJYr_=`?v=#7l(K>2b4h&j~&e(j;=eLI@a-{%sK;Q_^&h0_V zd3iZ;dwG!wF-w9l8AS%7t?7*e%HkV`kqI#x$R<T*??Zc|c^0)+9LIr|mm7L#yuH8U z@wf*xXf|>)95POzR|fzsq6RWVOCOilN)ScU93TW#51EeR)XMaf0TPB7oTK6-M}bpN zPncq3qA?cOh1mS%neWUR8O=hiC#V$E<G}3{M=OfP7~a|J{&)->2m2)EQPkgVH)$FN z)#th{wCiCmOxP5T9_UeB4$Vz|TX2n>gmHZ;ku@K=K<}wIUIJ)ohHz%C|FpQB6eo{t zYhz$G@jWKb&qAHdc?=GH6>lopQ^$L{-`~;Na4Q@64b2?pC~L>Ofda+CY;|Xhp>~WO zE!b%c7^VPT2QR}3uhxoN8P>t=YBQJ=YVd%7<m)S!T_a6cXrHWii~W5gH%txKaXND+ zG6koBS(eRHt(I#lo|w37=6cUe=-u^xo-L6q8<z&<8B@guSX*)WM|&UE(90*RtsiX{ z7AMMo6zwXwiv3vA@-uX<udhFif|UYQ$Tb&OtqD_{*8Zf-0d7mzoU|L-n9R|6;?B;4 zlDN3(ZP7}5rHs+$2?-NK4&ccy;AT=|@<Yo3WzixuByqdo!(|UK)W;q0>SmHGjgixw zpK;BdyOz<~(gqqPOeyQd!^X#P$aJvByRUrW^guIBTgIgzqwMaZje$&x0-d@<<U@5b ziMlikt&D)J&4)P-DQB4{I$&B4o)fb%IfV;S8+i!rYEyS$Tm=g5Hpfw|sH;R$5XdC3 zkIaVdc-bsj3q%DZ9QGztLk10AyEG}x93%9SNkd_2V0tn02u`jjOR%E{^pkI+Sy8hq zp5cZQ$uSN)U6EONUL#oUs8hVn9j#AF8M`L13w;V{+N;y{Qmg#u$cz{+!i?6N6tW%1 zF{Z-5efx&@TJZk<J_j5G%OPR0E!FGLoxUtixi<??g4hC$Gr10hqQ;Ayk*uVh)saVP z^!<48zE8IYXL<xDfp{L~cpVxqg9HEklG7PLg2t}aK{W2caa0_&;&xP<`s#%GaXrwk z3y;=<Qx$@hs@O7L7p})J7x2Rr0>yB%O=IYFV@OC*9s*QBMaWTlbgwQ<7SO5APUNV2 z;rGN%H@F(w{*|;J8kS35gXKlZz5(h}_rVU)oDIaJQr1G~($uI{qw0G0wy5b`%Q-(& zK-`gaT?<-)l(=pC!L%~(;%3*%c)rftDad6TnLtDf<&7wxHRSXVw9!={3}#3jH&Ip! zlWR1irv``D;avfda=6IZnsLgv(EJyEGHTox!n_?&ZpjHhf(a}Wi<~^>DbM^VszA?c z{19&V;rpV`ke*LI*AF%kKlfc<&Bs5z0ion5!B_>VOw-zx!oo}NaqMB9E{$o6i)f9w zw5(A8=~Kg#?s+@B*?=}7U7hkKgHWwa=vOz}5{um(mcZ^1-uFTj!U(-~1myMvM)2>a z-GivT2B+M1N8PeK6DIjS2B^;hlvg<VI1UkOB3M3p_oIOKGH+8yeeyJd4PlAX7Q!+G z!(yC9Aq#MERN;I?%C(aQVrD%|VX7T`P&?)E@4a_i?Xrf$J1NC2d|J~EYg0mR4d1@K z;5<fwc3ltr@y8!{f85dAppd9tX))?k2bGRengqWAj5flc=$LL(!D-B|LlM=gp;TvQ ziOj12Z#gu0K{sOHrluo%ad@J>m5HPVSD2x8#r^(<)-KfJK$Z2SVU4vOBlK59{~AN0 z;_KoHOGTz;ol2JE{(8LP@p$0v`*%F9@p|WZ;^p-fwO0K7_utbx9J-)j8_X-R=iRc3 zarspb<V+SYQo94Md<o{_Je*AM#b&tkEaPw|M9D4;?5(+#zM=Q8%mRs5s+QVOSE^{z zDBo_waYxrTVY>2g?|58;&N!OwKGK-&`I(JmZ!^XFF@BLanz>Apq$HX}Jh>*3R%FDV zW_==*fzBy9IDfeq)vVPuS7mIU6v!L9+?k1T@EpVtA}uJ;j^odJ3gmRPYGK%;G){uc zT?qQ3Xc%FCmkQe;K2P*7eGS#n`29DST)1#x;z`f7Lca5$oOMRme4%5|B=7gTq-;OQ z^a%Ha*X9pc^=sBx7BuPFdTU`QsIda!H})~Sw6(P>AcFCLYd!`nH8o>UyZaJolgzup z1eU?X9vLA#58U2R-Rbixd{6zPpDO$*(px@$ck}~q>Jv2Mm%g9q!@y<u2KKA@_~$er zV{;`?>ed->Q%+7T?+@Gvo|z$(><J4+mn-J%UCyp!_ETH32@uh=d*Lw7&7v*L@Tz2u z8!$myAxC!8s9FczgJvZZ8Z~kbN9+#)H<`E3$<dXA7S&vQmv%UrP|)S21jh=`8%I3Y zXbLuo3%Uj;QPducV5-AWJDii#!Y6iF8d^MshDHw~SkPGBPsnW+GxRSe#>Sr1`=WCw z5GTWF(j*>_Hi|+O(Go%HA(G~;qocQu$3xtAc;*U_6_%4O$d)ud!y3=qIjBC|(RxQ^ z!tcL-$NT#o_s0dIQFtGkvtb7&$8bQRA*gPHCx5jzY!)fz80Z9hG*@lfsuF?F!3{Rq zpC=%PVjAcH=UgY}k)F_6Lp^G+#GH;+eMy-%;sXx}$<^+l>w%*l!_`Vc(3Ce{YX#Mb zkm*E`-LzXp#-$WNqXxx?d&lh@8id{(s@$j68mKkAzP{r9?K>WiM{quix&YYp*p~qu z>|P6)x~;Q7tx0qXq`U@Cfn%QmLKw*IrXV2-cPMB=;<SJ6L!LrcQvT7d;2=Xgo!A%C z)vDBr-ZW&BT=O{g$A>l>t(#@C+2rc<UXZStCsd4{M=n!`L1LN9j*1GSg?cM(-{@tl za(h<lY`E1`$_68DI(!_5J-eQ|M5W+3>d=OX{>N)2s#y7&J6`YBAQ^J!b9EB(p=;4B zR$Y)_DRl<VY7?f<gCJBP69g2HjpvaWv+2op(E7eA;<bz^)ZL92ctN06i~5e%Sh8Dy zmzURpNHT8<U0@#xnM#9Aai}4vt?59iqO}W$40X0hf@;fJ|2X6@4^iQRFFD!wPc0lT zR=}%fBMaxvZ2$lu07*naRGft$xwdb{81#g_kvE}zAMr!o!}E9X;g8c3C(1t`mDtg) z{9gJ@fc|G^fqZ@aLIW~+=3enIHaDFB5tW6;5ppXmBV&^;#W7T78r{$a+AK3)z@3(} zpl7E~*@!LUNIwd-dA?8n=pk|zp&F>wdy_=u2-!OB(gL)4QQUB1nnF$~Y13eULa-D9 z>J)w4ncSx*-zbnPj$}g7d9@03v=6^g^xj8MSRqNLMpTQ@6MKOmhMSwu%v>StMYknR zB&}GYK$r7HSqVXrBJ6gYbK@C{xV?+u^$r?AYR3VxzZ<;s>w1{5bvjm+O(hAV{;0zL zyq!{n5DHar1zKbL?fp%-@-O(y?YH%Cqd4Eyd=aHQjilU}^sI@+y<Jk|T>#63l*E(2 z3^bvW9*=JH<}^U_{_HF-H?Se}dOF0O;<$o%wZILiDh+=*0*O|I(W&FQn&oO}AY`WK z1jG+s!!!SV6p<$$kD=)~4xh^-#a=zo-rv)~O_+}n4?2sj#}W)BrbRI=D1^6}^}~-s zv{YEJSj#;heKM`wWo1*y{qe(-Qfs(h<l7WNa6Pj9Rs&XRHT~9c99FQZla+pM(;P62 zPUqp5-lmPUK3nI@O_0TLeQK$}QHk8ZXcpvxmdQJAS6l2}vn@4a4tqM9JzMd(VB8-g z75+TW(P#*&cReoL`*8jv6{MGG7&402vBw<ef!4?x3<66?9S16`Y9yEm?Yit9>Ge_C znO<k|rU#{1{>I2Roq9x1R~oNXQt`fuh;t(p2FRf3l$g@rnImh$Bd)4}Au%A(-|=`{ zD5c`%cEkN~54lF^mxo7Ux^?-pH<s6GXrP7|z_4eIybRv#!4Yhvr!c@ggF1U_;7ti) z!Nk#GU56*gZfYM;<|3N_3zg|PI`Sl%9=l;+4veB7L^Pfk>mLc&|LlUFXz%ou^;N%u zs(dvc|HuZ!ic>dj6wA&on}(M0U5e=<QMQH4^yQ{CId9>d`)0#UyC<ziDGVtWERDf~ zE0OziHj06#Og&pn5n<uX=Tc#CaSlQBJWGI*$jv1Ym>$Ls)j}4+7dcLwPM$Z8Knqyn z;9q;)@t&F`a7PE2@FMQnJdVRrC3s88Te%?X<Req6yglr0T1<IL7-15ls@e3^S(W-U zZ*xB3nVd|}oB=_2N<lq<>jLig2U^R?xtV7{?%tBwiE1W_-iXKJj#?^iw;Sql4o*9F zFvgVrdR)<3dXw=|Y89$anS5dfuKNRgbbvdq$6X8*hStRLJ$fI=mNbqUEEkLflzX!G zk=@X;CK6E(2bVFq6lSbRYvH+Htz-2N&WM^XRHyZ@6rxg0#9{;>8k6GdYIr;@DMW^i z^w_^fdN%p+HA|T0nDM}xwF1<NqzNI{=qBnS^Fp`K>95{LbyV`GDA8_G7->DZFe!yX z@H#u+W?wvx;)~p~fdxqm?pFX<Cc(Nz6q+UpgSyDmg-S%?Y*yd1*q(*$q+pg(<!3rx zUS4p&-$yfwg4^wsHBU*yffRr_%>YIMdrfm7ifDqPn$<$)aAzWLnO48OJw_UMJp|>W z>Ack%YCY^cP;FDG1#fR}L-^erNVG?tUBl0PnmE#U-$hWmcWH)S>u?<G%wumVWoT%G zK5FZXD1|T1nbk04=wUw{`lh-qr2Ki%dLN>E=IF_!nm?Y14xxxyNwl)%^!#%h&+T!H z>p4W|<3?SV2<F8^Vx`IKGeDjd#lAe~Jesz!zby1ONBb@m*a&Nnvi{DlLoX^@a#D1w zqh(k1G{Q*9<foH;PIc9f6!Zkz^dZq$Av^zVBCP^tk3MZa_VmObdC&AYtLvv5gx&A_ zLO%Y58W2Bd<YXmSDR$;0oK83%wzr<;WOo>+-0V_F=c4RxhN0gV(pW=!wLh4Xom~=U z##Hn~Y2QJju;EsCUQ2P)6N)Z1OJJJ|4k`o}(#K(<xAP<So2?&XGR;K#&Wu8nMibtT zynE(mlUvQ8Ln$K<guUHjOu3#@FbXbFxhP#5HY6{5pRck`obsk%LitjLFi|dEEo2i? zS`HBptt!o{J8>WdC!o#^#N$v07{__ys0VJh6X$v0{&<)OHoOjExS!FH06ZQSUSGfA zJcs?|paBmGM{DDoiY%b>Jn(=2&v#r`L&%;<{ALp8wefixTEE6rxD0Xo{r!&Ps3=s? zDLKDOCGu$9)(|;+XCOJ$5wB8@z&DP~N}y&s<jt?4<q=!<6@*3u1p(<K*X&GsM?sgQ zVD33BJECci#|2Qq>+5g0z1*f_mgsqMFc|yUt682hi0f?HZCIk$rEk3C9IZ*OtJh3{ z(_tJBWkN(FnH@EYR?IPkvZaE<hp}eF&F4cH%A}2JXLDeyb($%#peQVpd!<sTz3M<a zW^<tWm}#Fn5p*30H6GmjLBSi8Po+6o_^Y$Q?oAt<(ac$bI3TpBG_mKHU8CIp&Wxj0 z6HSl%GWN>9{^hUu{rA7&{{Du){`IfueF*7^2rn-$L%{C#?ox_qU*w#UER*xwH+jxs zSvG^VDb0ao+nBqTP!AcS;XTh2Z{NS;l7_j^_&s(OY90ztdhmIkw#K-3(bC8>RfeVd z{eFL51k@_;FT1;Oa4jOrV#{eVJ#{t|D8JWrS?FtT9aM{ZZxxjokE<umRdk*#v_UU; z4uh;P<`GId^hnOi7th1_7M)Aj`<@lG<9n(z2+4Z^XV$lKQq#s<X^vr7vzzaE&M>@& z>x0JQgL&anZ-Bzy6s(zljQO;|Nn&mBv(8mN`g?yiTkuP4{;$@6sMu~f=%yG?H!@-X zWxCP8p%BrsGlvdx5Oz{gzWby;%t>pV8(S>_CiP84*$m)mTbLxSa1xREJP!WQrQum} zCvOHfl!~n$5f|5xMIoR#LviNT>P9@b7mhiH;_4&Z>%Q;$nWqkdf)ff%R9p3ch7;4e z4IZ=?Vp<b2-Ih0nr>DcksYniMQ%)|30=gC(#=dcQk|wqkJRT33a2BKNwBFF~9e2D- ze!+>e4mTeYowsIr1J6W~%#2gK_nEs0S{djU&<RA<h4qaB`aDh?=gnwUy~hcsA%aAs zp%Drex6xD{$2lg-rGR<`q07{mZBlC^c-J(<!hrp^1jiw-DPm-om{?$g*U23}@oO>7 zjHez2t6iA;m>*`0lGBGlG8Tq{*?o_-d%K;|q>cA-U5`=Jww|ax&fFnsuB<6=yn6i> zEgYY8AYreHRF^r)pN~;9M8i`;l(Lw`uY2+p;`0G|BG&c!1aUIknbF!MC|3cuHpJu1 zfHVe$2-o9b&S9ak()-1Ik!lmotQV!9lyZ*3`<R9Wn(Lwgn5C3B(6DB`yU8~>;WLef zmMNg2l=Ng&1}$~cECs~@<Ms6$?vDrF-|zO?$9V`UJg=N0;`g`vU<!!))S!DdoM*Kl zJ}QUYf3cq~hfxCWcb4lg0$)onLJ1w2L}xul9ttqfB4$)EuMnR&T-O7yufu#Hr=6EF zsG+yp4R3F6fzCEu`wr3T^ng4EgdiQN(F`uFBlrvxw@Y`;OcL91L2Kq<B-3sanm|4$ zD`rCJD})RuqBOCmCtRYKWl`%ugPt+7SJRnf!b@4Dk$-AFv#sf~;P!_tO)BPw&F79b z6spe}j*NgswA<6?LRf77Odk^+%GOZBkI|E#r(3OP(`V2M;j5we*Q8*{QD0EzqNF^T zM4VFUp9z(y_b#cmvRIY-+nt@KgCyDMG}Mh9Ary=js1O_1lW^$9x@K9dqo^ob*9i(? zeH{LbLjk`Xg)BuuoIdh!S225GMMh+!OG(Lu;gnQB+Hp+rJFgAJO!|ch!h=uJVl&K7 z=&)n+)k1I-Zt>HR(!6}woZnn2O;)ngSkMARCoD=`3RARBq~e@oh;1sUw1XnAM=q7z zPrbFU>|*uF%y?WE-tYHu$k$QeA4dh9$7twU7uTwpRiSU9)+&N#og$CIpm7IZ7f1}Q zudAW8W|<X4z<Ik#TJvc7wCFMvP(JoiG{KigBD6CU(CebEORcrx_@!=5Xm~v;Dq)E0 znZ;ZHxL+L?v(vKhB9=C4g-1Au6M}<a_Y7ym;IFwa7=xRfZyp(;?e&jWq^ZRMpw^1> zIB=Y!i7d64C2woZ*(Q%?t(57&6!aQ__Nd)H3)jA*$hG6$-~lVO)KjO5A)))P>9U4E zOSK|dE?1%W+M#L6Y4)7=K&L({lm4f|{-H}4>!2PL?fn6CMtgK{8xBTAitRi&A@{sn zn53XM#k6>1>VMS3w1byeTZiI?N7LD_?h0v2O~@=_J!LESWoY=Px1yHo+T^^d?wJGw z-(FwC*>oHSZs+ON^gJ7Mc)-l~_U#+q-`~JoaKGR2?YG~++#G$hguP;9;FK_UC`F7x z`gl$cBBP|0T7dhYcV5?p<MkCJpJ5<Y1&?d&S9&fCt<2PU9LEvzo387^U;p}7yuH1l zJ=&6I!AU!oX4?y{z@%<il)g_hC|J<kL30~fEQ6Xgo4C~>OdFS>iJ?F#^yUhop&@T! zP1_-5E)Z;hL$t(kP=Gc3Fro*F`mU&^UGEcI$|#t)r0ysn6TTjrLk!yYEzdeGWGWUt zt!I7)DWF8B-BYkPHP=u7Lf~geTB|eO7xM8h)qv<kuTz_oQwjVURG29-QwJ1RT}*U@ zhJ#EIar$6bba>wX%rfv3maNIhKHzS_$w@Lb0MXjQBN=OA`Gksf;utpFkR&SaqEJwE zcst;3Q$MdCC<{8G6IWqDMJm}+I!xiJ<sj%G(z`+OAS~YTL3JY5QzkORv@i~ci~paS zRMb+fN%DFegeHcjB_ze>C)$4QM@Vxj&YLi*i8n1YBKho($3yu3-C*sbmf;wMAvo@> z$F-xhH1_vqh-7<fxFkh*=tK^bT5%o~plVItB?VZi6<2F`(W1$k2(sd?wc!wS)B~j) zl6yj-uwu}7&zvb~<KR6gp#?qa57@<~73KW*h69XS0bb9F^6kVQe|#S<T~tvu-MA=~ zge_?pNnc?Ip5rn4>7o_GYRBwomiCM}d(VJ^C0k4al11!ntd*vxh4674IBFGf@VrJ! zr5i3;-7*Qr8xRT)w=fCT0?AKzRZnHeujgO8h9OWum#OMXwe#08Qy10xl)XhX&53N6 zHQ_@(^MGgO-#8r&P5sJr>y;@gP1|r{#^e4#tIY-<qmb`tz2W8M1+T9!<Jr6Gb*A9v zN3KZ@LA8Rg4jW^_`~6*Vc$8+cT1U_Q&#iZvP-}8}?`$Rzwl3KjrL+#yVmoaLv72H` zgH&q4w{Nfb{rBI8ee>;QqEj53&+G9JikcSp)xs3JLr)n9Y3JO#3?SCMTa71<^K?To zlIvC-lEg;W92zv>alfM;)tZ!nHr3GF)_TYQMyPh~?=vNM{ckMvr+|nsg{pGu>87!W zqQIk07|r3MKW4CFLdZel044*u=`-cfk}@cH+$Vk9kT=MED3lls8(JfMl11(tvS0!H zJV#?Yv?Pwers_~SFSy6EW`Z`2&GWDj!k!?7jWG&EH0CF$SAHn+9O+0{?oZVEv;X_a zANq-3^VNL(QyP#q9~9*$vUq%VSP&e60D+=Q8P<tD?UQ&ybxLRH3sFj@3^Ls()G3(r zbPBBEGF^PSF)6>B-Q+YZA}{bR^Rwv#R!W+9!euSE->a0cu3YB?b9+nGkDdda;Y|lE z3Yr<_F4IFN>~|CgrEWA_3&cHx4X1{L2LxsBwK=+v=eBp@wCh`WJRU+-S)EhDJ#tfW zGUui!CXT4E@`R`O&O`8CPZM>yoW@s#$Ni4S<Fbqv?ktX0z)>Z`<ngeK2RPxdW}*1t zHqRwyjE1Dqbiz^hol*);vkV=Lb`v+CS_(=%QExP9F=aU8%wo4YN)H8lP;xF`R>UC| zq~pEy7{=&=q-v=s65iNb$NT+(!X3Z;_6;w$7ySPBJGcN;&v_8aIvA7c5?q69x>#aH zMyYiU8ZhlOw_unH__F50p&<TwoxyN4uLF$+t=2lOaS?YW?s6|1xC7U9;URqU&XZQ7 zuhp9~*XW`raEqGrVJfKXEQVt4%8xkDO!2JeR8!2Yaf#U_AuL*y%yl^|m#2;Q6z1E| z2$#!;DE2JrG#zGFTEgVA6d#Hgo0rav!X0n#Z+JZJxZQ5J-A+6n^ZJcu8s-cYr|9Fo z9!EuM9p~+|iFGleKF1JvxmRS(t3%~FjArQ@kLkK6?stZA#YUOb&C7|G3e`Z#9n)=! zv=nW6TF2w@z;PUS+`r@P?Yp20W9abx`}g4*W@y;B{!O$i!`8jdeMFt^YMr@24)M8q zL#@Re)%5;dSHrh&-wfFpdtU+3cqUY1Wk?q{9Oux3eEaroWF560DbCE>s&<<><6446 zjTD?QWtegtIL~uh)zYLVdxTie_d#J>r`hCaKZ<ml9lU2~sa}Xz)45!jE+KwTC_MT4 zF#9lEx8L+<gjCn4nQioVc6;wWW71KuQ!PPmIJ41M?*3rOP<2d&4>FFoD9$q^g28K^ zSHhlty~L-Viv#&-J;_(|@lR<$`~)r+ngpPExWB<ROzM$BF%LMPcS>$1a{|?5LnvH; zN~lZ|_jqnxE}Kz}!pvmmgfKN<ovQRuE;?OP+LtSwOU@7B7Ts}$Lu{XS6T&#rNbfA- zoj0U_(9ac;t-CdIO$*N+xz=IQj4b}{iI=UJ0B)Md(<;ypafpEX<9#N2r~Qhsqo7R- z(2)FY4oST5)ZO;IQrw)S4Q=!^y)*9jE809WgZsGFm+{PtTMbhDdfHI_d?{N|ujeQZ z24`1qt_BE}Qqc6HicRNHZ+7TcxMD|g1eAW#TqXj!!rRiPdr!qXFRm*77TPB%1F`7< z-X3@K2jTidnzi!<Oa)ZW;qx!<Mat7Zj>Bn<v}lFA_Xd_U>GM2sdpS{SLF*0w_iw-B zkMG}6%HaYlXJZ#nj*=$NGXq7Fs*j@%$0Q#1r(mH4wUPI6U2VAPBqV0apD0Yr)Hzw@ z8(t@s=YzH`%BbM9ShV%-X^x+YE2m9SjQ5*vddzz&DN&i13Tw)_q5(bxw)Y;~@f5)v z-_t@No>SgO!^Jicw<lYhC?5CY>diC{bKfuNwVeZ-?02ebE49cyyn?>X3T|ENg@W@{ zcgTh{P|`$j?`ZOSHJ2moa~6JEgtk~j2;M?iDw&pG2Gc3k#-ml&by=QF6@j;YZ><II zZ|~q6<Ms8`-hZjZ-Sde$jLegn&Q7)B{r%m<<J=jg6YA||=<6^EfFOYt_xqc;jLnAq zYS+-66c~-`{<!1i_JT{Ar?<B^9Op4U3&l(jPYaIHNj3{|IFx=O1M|67%VW(+sz(*t z_Wb_wUYj|)?F#)IHi<B};<@hg*+djF$Kv1Rl(BfoQ5YG}llP*(X7`;CwndpkL~MO< z0`2d!LSN7Gtxb8ZdGNg3A{UX6>0CcTlcLS{@;|7s|CQJHYCis55D@Oj@B@3-3rzlY z<KfW`5c<VoW3Dp2nVS#WR95K)#-#@h+rQq&tcQvv^!meIiyx!t$bnPjaPH#IUS)dF zS`%bMidCNI&Tw;)B!U7<qaN`mZnJX%Tb^%j2Wu`|2w@V@9U5d*3Kw|B=qP=PqV+SH z?nAX5j+)>nlU^+EC*wLPHy%AFzjkj83Es}F^aG6)aQ>L2={(^5hHtK4C_?LD=SVYM zew1#Y!ICo|Y(l|kQ-Dt5n)80YBlwkxW6~%X#(K~-Ft2a2T7C9$Lc`2Ld86R+)TN0Y zBKbI7^<j&en@~`P*pmR%GK(60?kELfx<Zpv>&MJM#VX$49k9m%zP$jw<1R(yalBgg z1t&^M?;ZC`LK{WT)%rE2zB(cp;S1=*c%b3-*S~@a;oG-wf=DS}yO<`Y2x>7Kfim<g zhO&{-OGqf33>Mo?5s`Ps;{l^~29(Ae`4}W(>DD<orCBp%&BW&pFYN4X&*R)DpizD$ zPi2&{R=Dv|xSO1>;OL}S^-%g*G(1m{$$FkfgN%~beU?CW<nj~QIVl!>n%jdQdw-lR zM|)p&(9>e<6wLuI`vM7K#?Gm3T9sQ^VQWFp0f$%+2p9Je8p$pb%H8kIjFZmkgx3d^ zZ0_Y{4i$uI>(OI&c|ecrfqq?fHod>U%ky9G`t4@ONNX3qe}9Wj66w(7-QL@Ip17_D zjziaCcY{2_{r(OD;kVy@12Dc{^=q03^mtr?LJcb1Sr1%~hYi(8&O}872i=N?kwqOA zzxVqC|MP$T54^v>kNgv!sGDEUcAq4BX}ae{qnflpa2#XrJA^iAbV11}!F5fGXBWVj zC-3~sl!_>1$t2NcqTz5t<#a>aSjrQ9vO~nw_h<V?Y!;SZlCguuQ4>rXsuR`*@fqUr z6cyo+3-oy<9}Q#Z86@KK%Qgl6&t!r8YE$rM<cEBH{WmrsR&4pjnGPxj3>xN61{3-& zytfw66D!J&Ie}7J$K$-&g6_;Hs-*yMc~ARJ0bx-qLI#7nOwxJ}+7Hbtu?e8@Xyrf^ z4zm7zZ;p3Ae1)vo?@3gu4_TK<mo;F_j!UbrH=8YDc7ogyz^3m<8y(9Q@RpL+Oms)z z5rMyaPiI~oi8zLmA-I#UuaiQZ(mUgJ-iA1{JrK1jX)_5~5=pQ~T2OEb1B26h(Buu% ztnk@2A>sRFLf3`DS4#yQr<;ULOH8xJG_*)uSW1aG96~+uc2M4kfj4mO48!!P^J)Rv zZJl3_hjX=p`SBBIOad`I<cF?-j0&XR+nsyW^tI>EJoq(X;h@YZ<kKB`1jOWX4!S09 zKdZ%uQ3zcPelg?wy$vc%J@ME7@xRPDWey^MqZTXXhGwAJ)Vg;KsAIG~mr;}AlgxkK z3)l;2?Ssdam4dGnmmaNxPkC0WI0NksYPN(4$ro^Xl%R20xeeaJG;7hw+Z%5_#cqaa z`>+$B!WZi_ix|_Eh$hdAbr<_@nn?Bc?{AiQ!ojl_fig3$#Y7H>Vk0s1QNZJx!gPD2 z)KZq&WvRqWk}muCY_PopS`Pyu6~rqwN2mBr(7N+Dg^DG*ureL~CY`A}n$o=H#R6|f zHpg{6aDThww{O2mVCx7Vo!SH7<>dvB`vZ4D6ujHvAAkSD5RXgT`EEDOLJ@?T3%Cy} z-qsqvfB%m2JY;Y;keAzevuvAE3f|tnN5dFLF&#ssF*K`!rnELPI3D-AAWg;ARH2F{ z&TNaonWkn+wOhs@;ECYYTBY$A|Es0UtPMT$do!e7&-TaTG3}pIvk{!0d^Q*-`}MSM z$FO0CsQEn<n?gPz5+0@2X7GN$yQVv%BD4%9L+loZyv0fE&LJ3~At}>@ka^3OdJ_5Z z6cg|^wt1ksLqw)C-Om^HKi7QxQs?o7di*;!AmoU*(ILun8+~KZfxhW*bs9kw!nQ6! zC3GrKsepSE%f9i@b>c~lNRB4TUv3GFREmaQ*FK;Q$nG{|P_0r<loC@MH(Gz67R_Ds zBHAdJ_MIgE!5V=cIM3baRWU)qCk9XLh7*FCCWfXcRl~P>v)A)Bm4QO%5A0Oh5NnYc zS?QhzRcpn|%MD#zgfa<>k!?u*4we$b9fb(V*~By=i4H|f7VKz+rzrTlAZ@jd!@mgK zLPNNEyN2Jr@3HKjsp8K&z0HlaGbh{No#|=b>JjoVEL^TsgoN`hlSNlx7tyB>4H}cD z6Op+G!KfDJdD;YgB6K|z=K3CrL-EEsi6~x|fHF0em_c_bSHu-}6Y1g5xM-fjNSI&K zy<2bY+7g<i&v%BUY3r4)^_W6tvD|DTPBtebH7^Lx2%bXa=uCdi>icIc@U9;^u&nXR zRBz-w;)p7QB6>q&9GVYuFU=;b_9^9|xZyo51KbhZ3+27G)|Sa-^pX&f`B5kBP!j7q zJJG#c%hRhs*E)fkHZ#+>V(K#{VxrE7kY^<9m*N1GjWR;Ixi%o|2N`TAbK^GAW+GhI zunj)E-h&Ycy4`E%w2`<C=c~u#j(Qw{YWMfwe>b%MYL{ID@YthXzrEr(51i-Ch9ZRq zn&FY`-V3hBg<6h5$0V5b`0YG#m-qaT@KV*w++JR6Aft`eXozlek!YbW`8TaM-0BTP zLo21};8h&sMxF(uRzmLx_S4{qLi?eNYFtW@efcP|FFQ9hceZqCfIK^(NYi0KhdYN# zIEPHxGl!d5bCN1Q6o}2eZ_rY5iFvRPJqJd;fs48y&H>Q07+-n^qGhl^8@F72|GX!K zS)gg8IAi&Y{G{KAG_m-bDJW>2Tj5VO7Fny38;&2!0-;|aQ2pvpe0}{(G$0|mo6P6b zCehi2O5IWdg3lDFMxMvniNwp_38y=6!`Ohh+33#DERb;8?RmI%T9=X?#@>M<xHAxe zWXhvWgSW|~u-WFEj`^Ue@DHvyo9-<Tt&0m3RNg5kx{@^!DHzaEtFn8P78fx~gpspK zyekhoRAlmY*(f;#pw=;+H(`CDP|2$clfl{?)qTM_mk_lVG_6p>M(e3ud3>XEv)*me zHpIxI`6yKy!+znCFu~s0xrABUC*t?@_YT_JN;lh{MZBB4BNpyN&N5h5GNo)C->g%! zHAFJ41OXT3I&SR>;bt+!ep0YzSY>es&qPg%C6EKXzeAngEa}$KAZFo5hB_#vpd`Nk z7#y?(QSsAc<~UItpLsNDwN!xE#KYZblS&oqS7*6OPjCaW`%dARN~(R-T7}L+n-H-` zf2tbN=BzV6KJ*eY=8(1dpB&w29PL$~h2oH{ShX;goPnU7q6lO!M32~{%zdkX`AW&` zw4D&!zC{f5;({r=?4=i28#kqE6^fZNE-cn^SH#s#_oyc5f;Li+f?l;F>VT>?BLDy( z07*naRB<<)kXWcZ14TTfu;tcA(c2oDqu&)bXwzYkYAmkSWS?jtF*dla%kIVZw>MNV zqd4k;^LC;&w(vj_OWodv4a=~>9rVIMnHuFL%4jy4{J!x%hh9swM=Vdop{aU3uXf45 zSIgDXB~VJWB=z1jr>LN*1$C*YAhaggBsNqphFX~%il)BvCI%G4n4`*dfLRQC%Ag`Q zN;maGEq0-k%xiFF%pO9_myzeC2U8D+___xmhj9i6x#0T5D;vujtw5<&1Hn;bSP{38 zpGEs7V}nHGTAL=sx!qj?s_L3EkMhuyvYhB+9`%nn+kTdW&L1SYe`eA%Kf*trcJ+mP z{L4|Wx}&imOcptLMf-G8kJqU#L@g3|3B2)9$u!SVo;#MelC(4c(jX(3jxMN&Wjqkv z0U9UvHtjHnA+fMUq-V6&k;jZ<x*Qy8(*mYYP<mmw&!GsE)b1w|uqhS00HQ!$zXQk9 z6LOeYu={jeXLobL_4bq+?*Ilz&x#hFRRo#{1Y9CXDbFQM&@aRy2TU3vw?~3w6vTpl z>&4>koW>+;qZ5JpK#ABLYV|mPtJyWt5@k-fqG$8smWnW7UEuN<BuB|s)*Ye*oAAzD z64!*KA`gC@=JkZ>dJ?EK>OMq8IOuSxwo1i`6qn9D*m5eDuW_^c)~LJe9hqWwHrwfZ z7+Es31#V7psJ`ds@-#?t5p+5Xhrn<M2y_8_&N8=_8Z<g{f~i$}a)!&twiJluT%gF4 z%_$Bc?AnKgu(!%#Ey^>3Og`I)7oIsoGZf~Em|@?%u`A!z8J==Uv$SwL@-UAjS_>dh zm{!KHGE8@(-ofTz<Pc36>X0RJm$^ndg*|O(eTs8I8~5QrK`-MoSH0&42fJ;hIU2Iv z`e<N}L#SudmKTC7s77!)G|u8z_h8j1UhT3WneNN24Rqypy9t6Y3hWCV{Qj^FV>GM{ zco1q4z2VhR3-I#o6}6mrduO!v!1a(OMXuBP`@4LWDctrhi`*L;VsPycqL(?alJgRz z=)yRg@AnJGaTBLIX&UNiNJ>4$)S=pInl`JJF_@}kjYlr9*-iYF2F;eAG_NzWpj?RO zl3DdfTavYKr(6(68)`eRbX6`E{wq2W>D35BNB_9!+I>8(Kw<Vm_(Ac*f{Xq@F5vdR zSLp~n>0Evd6WD9tKhwr#oA%w{X02cT6`GH)uYW}ZBzLgv&OMsks~kM%T}!&R9I*)> z#p29NpxJf$Y?&7(Fbq$uI1!nnMX~AYDAH$cK{vl|E&j!EMVl27?`Z%Wz=IBEz)80Q zc1)efHp?KQ;*|7FQ7lL7EIp~9VA7t*S(o-EniwXt4GkRfLCUoae%b(gKJBC=aQ^v} zw4Svet2_9xPxe_SLn!W0DyE$w{7gS*I7gd48(E4DRD|TTLf*E~&9r<$#go!^$OO%E zi;r4IBXR)TE~7kYkras+>_mx<OcNZ|=*hrn6cv`?;&*YgY%Q~`FnUuD8Xu)b`Q~LJ z1QOy_2U>{KJb5ucgTaMByUC$W?To@yrW(jmta9RZc3lC*XPy%ak9nX-6Y%2@P6(d% z)@rS()W;$Q6cC54)|&8~I~XNciFRg?Jd=}JrqnTV4Ib<scgOqo_h`^KQlU{|=&GVw zy}Reig(fa6Fp7F2Pb<tMK1FeNZZ_=n7u{)=w8*6tMCK>oKC^(r_w$0{*sZrfG})VZ zGre`zsAjjTcA$>3$IivBx67!8V>>Hu^Ql5BDd8dxi|2V}c$X^QNE=-XVo!{zRbUXV zHUmog<C5PoX?HBKSFJUpIoZchz@8)Rk2{MMGVuEPg7^3Lp{sE8TSYK?>o|Y=Z6LGP z1D!gqv*5Vh@Rz^*hV#7RZ-4u{t?PcZX_he@)N#L03Z0rclmavwCL9t~18#n~6>;k7 z03UYk-`+2ja!&o4=G;=jc~qPd!deRC_b6J*OEqnS4!7QhKgDHq%hsEn2i!RzwmGvS z#b}0zuUu#=;&nZ)sYCjtekSal9G9kE>lR02&LOCe`+YmnH^Di|k2M7!WPCgg6a1_} z`5ePvbss<4e0<O(teGS~+fIB5&i}t{Kxk*<pbvvJ3_VhY+{AKBw_;&L8U80n1##0g zo3;Z^nC!9{h}@)}0zHdNbm~&hU2!0ey-S0@jw126nw!8CfvcTZP7Wb+)w0xWvgwDu z52MxCW$dv?lO`eveQokn&@}YRZHkl1qK%#ejIq*&GM$Pe^&&8fg4}I+{EG{NYS(2n zDHhH@aflG|09Z&GE`BR@ynQ$au?#DNCt6_$f=40}2mO-970n3}U8VvWY5D0;0Y|vv z6$+p5`QGn691=EqcWa(X*o`TLa<K?UXRxBLbIS_OTd{0)g;|**m?Pwo+iXsan@sV4 zBfBIvJu}P2>vXin?C=W8K%Gg~i__H5ifva&UaC!i=$hnvAANA@d%L6|B|FgdS?kW# z$amA8#xXhNv%vN_6SY=6aDPHu*nEJG#+5XmJ!{&%B{-$$j<=jXcRx5#mBNIV)^cq& ztc*pOV%k<`mmTch=KIZPM-T&V+_^M&B%@-PvZ_|MV~}(ieW;_mHK`o>k=HWms%+U9 zN)x0~a8PxwR}<x&d-fcFb+a(1fqJNbUfc(-s~PGr9hxR}^tzOK+GPUX02Dl~@lT~7 zj<-SRm*j;M!r%Y6qqhsS5N@{{u17~b#=Sa@6R)qYczb(*dl~3+nFxfPncmEa8NkdB zIgSz#Ha~SXs+R3fGy94>mCOD6LaOnaxG;V9j*Me}xLU*YxDrLEnAn`#L{Q1`l*l#Q zA?Y6UWYF)z7`=xaAz4~~QsO4zc>ZNGKy?~1gdxOI$*X-cFO9?;7Cfg(d;S3Nr@a7v z(7tNlg#B<@`akxI=+}Sm7wzgl2?1HG5GDo6=Z|vdSamME#Ob9T{r}16QDoE@*d`Vd zD}5@rh~3A8=(1p~!40o=cy&w*Nh&nO={$v<fao$jGQe@rZCe^!#W$wiMjMz<PFb9g zR+!RT?apRn7J7D#RLth?1G_0-d|mhNo?^nA_9E@dxj2dd$hgyw$K4!%JYvuT6^R4U z!`6!vEW$U53X7LWC-TlS%xq1SN1A%~hv94vFX!B*bebV1mjVEk3<`2MoNFF3S9U|K z_pq~f^okAMW(_!~-Zw8^FJ#LA(`AcX2WiY6BCAhrGM=almcc-iilm}#y*H&)vA}l2 z267mY7A9`eX*wo9L3hPH(P{;&_qMl&PBKMyXr6;e2S2=byEaFuxV^lZ&8{_h%$o@x znNDLlVb#hzG~xQ3ug)x5Jet#U$Q8n(_kkZuxX;bWs?**(J)KPk+R#Te0l9G1RN;WK zi^r2@hn&VlEv(5oKM_TyR*H#t`xMW5tb1h8HA8GltkG2TsgqJ;10ovUCPMeKKCCnm zebWr6^u=?TcF#mLWl_l55Grg4NrY-MCXH419a}HKNzMg++OR_?Vu2ShT?z;Uoae~c z5v@e$VH@5%<2=8C%1as&u-Vd2ieMu31pz*NP?+wt0lW;ja<H!76WF2i1O1sMD*ogj z|4q&on!){=&8fX=N%cFMj@Xhn2KYIvV+Trt-(I;$*Q33(seu;D*1%6Sa^47#4y z;;nTX2649eb(v0auFFY-wQgB^hv1YX^r@40vT)Dy<)sn%_ys@4G=8<f|0TOCeDxFm zX$^>{0chA-T9|$s;@zNf@4~@BgTtyP@_r58f5Byk@QV6QzAM12XoFBAs86J$^R&KI zk$Qo%o1~ENYg7z3;ftCGV71KLJnG_~t~QT8hoj3RdRo%5n>cc0-^kx9%x~Eq+!rl} zZu&8(i^KGaxl04!r<ykFU)_0#%p0F);KG{5>cqWq&)*2<I|meuT%cY!NJ+9`col=g z+`C30akV}RA4n0%E)80;KYSpiKfD>MBS@hYH43C8^5zJ!?JnMBg=g@hF9tc`VL{(x zJpYwS!(M;DD@7`d0NjYnPvo=H*gPO%*NTzc$z%-`nesMuu8}G91cBni%8quY1wEVd zP`9FyF>+n>S*u_iz2onH{~e`NT%AGJH3YUm5Xal3x(zX?B5epOQrzp>Ug$%`WeE7^ zm>CC&D4r+{DcDg`MHEf@b3X?#s=X{0z=|CeC81!PtdlvgMdrP?(9bYYcuvCzzrTa% zkX$5=8$5Xf2Uq|hOaQFSBir7|=EPP4Rge6=am6QXob`%xIn&@j@`!-!OZ6CeGhNo? z5JevnMp$RsySP3TN1fp)YYxxhGo(wYL?NtiTNv?&*MCsW#y`&wi!+Y7NJ}AIu(gh+ zs51;~Ql9qiwCTZBx6wr4K6GO&bmW--66i<H)sdgPCmX{QPsdJ6c3~-HB!tj{R%^OU zT2798Tmmi9w4%xPiT1_q)R>h?^DN1|ir~UY5e#znO0hg3aDy?-&SKGD`Bs85no8RS zl*5pap7tmVY#Z8m@1C#aA9A?bU@;%%FYcbfpKCn68kK(!3KkZbaIR(MgA*pf>%;^R zrN!zOLlMRtN7YQsr5I#H@b+%nEJ&b{Sm~1ZjF$i>7gXi35*D}_OOr9Dec6bKmaz&V ziV!&Av;&CN`J*e;de9I|VYwxk+r+8417Zdef|D((xGQxY>D5iAR^9<i4i&h}6%XHs z3HA1{=6wVRvP%&8N@=|3vihSdooF@)Yx?cD4s|wdiTVLo5R(&fyD0Hl6fbZ#Wv`@I z0LZ~bl<5g+lao|?P`paMS)aDc@lYbfkg0qEbWb^uknHXzdE_W(r4SgahrKorUYy;V zZ`xfIAn&!YQY^{DtKqGQuRk$x995>b5)L>B<+1rsllm##mLSQa;`iTwcST+Ul_Q`F zdaRoDCNm08<S<Yu^tF3LxQ4a1Gfi++fTDR5vgANuv^|M8gvOnfBxA4j073?Zx2TTx z-80}%>58m-m%QY4T{w?p8<yyKdLiFI)@1Ju*L6u~>{^U?1lN}kiZoK@t}`tFtF$Ts zg$RQUc9VUF>RH-5dy@nCk=D^<&A0xTgN;%oe?oMBfCb{25ki>_N^!K$Nu^v<xre-q zBuLerVczDLcXp@GX4JfTp=YGq4LsCrVix+lW|o51N3V&6f%-k)oi|e`&f$FWXn_v9 zxNlsK!q3EJ$v^kDPujUj;e3eC39W@Id0O8be9>kA5%zP3DsS^Io)oNR03bsY)y1?+ zUGyCKEOz|BMEdDzsNufmBK{nW@E|EXMH$cH$oH?gro+?o-}e*NynhZY>Q|bM-9G#E z^{<V9*ray7aY3KqCV>>f%-9J9ksK&Ig@e+>B6h>(w=Y(qr4*D}?4YP+OiWcEN6C@H zHxu+L4}}R=u{2BG$`ol|&d{jp95~^fQ;a;mlT=?!abiX?&>efa5B^b6d@-BfrBHED zx6%j<K6fHXoobEjjAq}<x@jWv!YM<xoM7)f(0OKL5~i+G?9IeaDG%O}sA%<_0`@pJ zVTmF|1;Mq+1;M&u@je%RX@+3A#r7h8>XxDEkmiffUoX0octE>v^d$=;ii}+XaS^m2 z<0N6QXvOrHEcecMxxL`!<prhIO)xM|`j@+ZFjt!n7Q4^$IHv`tYD#J`9Y+XxR53YC zG_Fv=`RyAX_dDL+-bO*qv1sw7iRQnIhRe<TI!w2vO+s!InfDVj;#ibuc1Yf`LUZ{M zbs-e|w1j-|CVwX0drp};96rN*E+o{I2+ykwILC;I1U<xRcA`R?$u&I_$hwS`PYP~t zpg|k@sv3)s-xK`v!G2Y;?T?z3V}IK_uHHZ-p??4#g>W2)B%*67H#t)Xvcj<ny;tpL z)j<n@1rT1B(=oMK5O-&{JcdS|4mQ!QK{-q`TDQ;VM%E|E&%n|BIY-VW+v|4<&7Wls zi+PcOFIK89kIEXNO#w^$>h;Or&u7zFs4VBQ?pK9o9#=_J-_&iy=7i!<X|5?h+}zaz z6!spo9dF%I;l*x6)|3k;c6AkjKWIFDyjTvOf#~yc=BfPt=|=Sn&BD(hA0Pb;eONPm zigNhC<1gsr-v|Lo0@z?d8aV}vH#hkQIglVI{L`GK1jQ&a9UYBEHBMzM1*H!ALbd-> z$d<4dmhrRUV|wnQCFdr&*i)Qbx5e;$XM_p77tiU0xl6(`QL)4PJWe~LgDX`CaHTyT zly@75E1=|HX|08+L5W&s7YxP#*D1!waBNZ3gUz>neimyQp15Gyl2}x3n_}Ft?y}%8 z#~H+)WKD}I<QQI-;LPy=2B$UZ3IgJwJKE`ZXu*8SgvuSw$`@*kxGBa1p2D=soZC!) z%r=qr4G_(U8$0~TZ?=@2u$*pVPVqc_Z%pz2^4nkV`t8-;M@Y-o^y;gb_kHh-$92tQ zaiT$S;etz=-60&V)(BgQc5x}wWj<6!TazN|<>du$Z*LNec}%ykT~RuY|G+7q@85~` zy*RzQp$SLJUUJRM$d_nq@W>NKn1#|3G*kOlCDPK#G3}C@1nq~E!$x*aW|@0f>r2;= z4(w72TJtH?<d9KbP-_a~79?a!Zih!gqA5F8lVVu|G+hum{N6mxW;+v<?s7E={40cv zt$Nzr+{=J|?eD{IXPeC!x#m$r=#JyChGaA~B4&5#-Xn)ZGfc9!f(+fZBFfO)lGb<3 zUl=sT5>oDcNS-!5dM3@;jyM_;SqPxR*AQ!X&RozB?9w?f1wWeIQ+{^S&sYPx;f5Jf z-FiejJ}3%21<MbJ*tsks4@;MGU~N#k%MR<Z25TKCZK=iV%d_4xpKq%{%1=#8KmOBC zL;XHO7(V*@&)vK>|M-RP`Rp33gQTzK<KGeiiMKVHUhI;;C>@^JC8#(tU=f;B6^`x* zFREpDi>o-#^K*$3M7_ml*8f&}U8Nmq;p_wbyi*j5cs&-1pCX`PTJDRw)@IIv7u{bM zo9jx3p{rVPDg|qE=ser_<3Hx%#T%hrOh$?KtPoI-I-4XB7><K#1Z8PsGU}TSUk|dB z<s9Z><Z>S1C<E-MKIvc%4OdwM(6GyJb;4^55xhTOJwzSKMz_cbo2jwSeF=Z9T%MBl zcnV3oas6_dfEO#ujXn@)d=n)Y*D6l8gF}li2wmX~_6_sQg;0uG?+vF2WZQMQMku3w zY`pMcgWPR^z@5=(>TZJOME+S&Qv=49hRx2tTOHo6_sjN)Awt%4Z4pe<L>lcqhsiGj z0!gW<QqTVLJaAo)4LapZY+lh$FUAgzf4rhxIlCYo=&E5?ho|r}91)X9F-c36^ZS%8 zpkNX8=Cox)3`^9V<RKK9uslsz^RSALtk5=M-;LG!lAXX&V-{$aG#|s(y9v{MvmMZR zLYR)S3#-jvMc021PxuUf<>&yVA&DakXNbpH65mHiU$tv65NG$SrL{DQ+UWeJ^eHdc zwkf-v!Oql$D4}!u+56VCz@waf86`%lEhXeRI`!=uY}yWia#Jy#+Bl&Y302c;Pe01d zVeEwXQ&3Lpx$=S4tzTPR0tg3Fqsskl6KR6FX979%e7yxbMD|I|&nwvTU(OAuXP#N~ z2}nYp04aM<<WI31N&^l~tI_k7-Cp_i_3wy)*gPPHw5g|huxl{!7{vpK$~+*&jigAU zanxfp9M$PE3Zd+v{J@8e8U$8P{B-D!DMUB7jvn}^yzf>VFFMeH<d4+`G0f(D&I50( zFd3+oW1wR9UgDg%!ib5{6y?&<9y5a`8^I{UgoEKDs~DYp(9)*xPkYYP>J!d#PEovu zOi8Gn=8u@$82`w`#9KeoTC@eq$J%<5bKeP#jOI~9usv@40Ct1n_1~i<<NRnGbxE6_ z_x|yg0`4+n2q{56AxS}lU_VOnIo(jRjDD^u>%rQUgSh~6$G30aaMV%Yw>GnOlyagO z4j{7B@KQ#hRElJDkS3{1@SHtUQ7=_?_Qu3hXzv2|)YV9X&(PI6m@Fej*T5{^qd>u$ z*;I^nO?&4ty}lkT&?O7p6!wF0N2K|2T$^FuzoDH_q9X-yG-3_{Aq{32*#em8iRox= zh#XClf=K{J8}TJ~Bo1EePl*>UeFmR7X$0*Wr6_pL1>!aZ7K=4<L`G;*27zs|cAw!p zk+$V?uxL{hHs6T!iQmwq>6TijRz>z>Yi4_Q=(-owGj@h-p~jDfaoa&y9)>LxA|N^$ zy1`YEVFD<Y{5gcx8*=!t%RR}*X+`}$Pr2pfO=F$(CC(|4&Hnz$fDRFX+ZNVp+OV0% zuP7re&3=)*B1Jw_?=etcUe4fM_Q=N;wEWz_E*zJhAHbUy@KdX-PnwWlYgT?#RE`{u z8tS@rSV3DP7r$=8_4W17Z$RRteaA(Q6=@KZ2}ib2MLmc6NHsSSX*g&Gw^5=|M5>L5 zXgjRHH9@xDTsci)!ebDH%YoWcXti5KO#Pkw<VlV3E;Zh|k~u=UDwOmgjGZPmD^o$h z$yq5(SOoqjj)zDgSB$O+=+84<qU)A5A)GAw{6QTyOb%3pa#S4RoHL5m4yNXuaeT3| zcpWDJhW`=Qm{3GWd<KorswwV!l|I2}fs4yXRh=H(^aTIqga;ZT(Ot-0-Z~Ra&>zy2 ze0_Z_MYQ~P#;9VZ#r*B17WCGF3t1HhC+m6qb6}JV#!(2BJBm?ps%U`R^De^$b1;)) z#fS9`#?A#9&Dy$I5t=;NZ%F<N!{w|G(@S8Wa>sGtkMDm3_oC2@k!#T03v%zkGFoA0 zP5>OoIZ;dR&gLv}IeUCknnH4J9#eVD8=AofhbE;?+dHu7^HoZ8u_GU!RB}_oTRMhP zsyIEfl(6t6tkE84j*efxaH1pyrhWeqb1Nts0{8}qXCUf|DEZ&brXP7$Op)W`WUngD z_s30I?HRXJY<9tvLThZzA&5DUDbh5<n&DV%GpC?azX9Yo%e>GC<6vV`7$*HhK;O1C z<p;vvZD9Eh>3B95Pr+dsCiF#iUvorOWZcnnQXfviSm8-w{R#77p3}v2sF9`~LqF+5 zRDqX*9LrfkzgS>rtn(9O;)j}&A4F6(x7UB4Z}y)8Kg8h;<jg6eU*>Loef=vnAby$` zDGi<yRhEKmI8hC%#Ce=J&O=;q#)E!{pw)-zO%{V@T#Qt5O}6d9g`-C_260kYayVA* zh-Kd%DY;sF_Zf&6!iDDVr_`9x#>aarB#p^yF1Qif3D=l7GJIHB+%h6mI|o6uOgR1D z1&1l6`e4Gw26u3>UUd^fe<1NPxrqgR6)g|ZX_NETuE`xX@#H$Wi~0m32w@+X7<CbG z@8(eK4?b>lJZl88no)Il+8@V^lypGQN*4>hE3`w`JaERzq#?Cmo?7Mk^hVd>kPBk( ztYevgHRlkM`P;T;xerV0ejh2#ozb}f^+2gNP^q|`x1a&jXG5ukMbq9{#o(M!NnRRY zAG$cu!5+?b<+S%}y#C9}i)-9V8V%1?<uxwL;t0Sh1(%e16wv)H6Zupa1lph$Nt7&T z_B9049$fP|FDsfyQHw$p>2NNI-0mvJDfp0OFX=p4k^yh6J}5*bWu?qj{y8&*HdAj3 zJ?t*4f^uW(f9ql?{H(ZIi8UslaZr?}uyKB79g;<O67q=XTo<O;jBrL!w%q3I=vSVM zv^jRLyBeJLlk=^66IT0edNR?@V|Lo0z-xLfIotP@78vy&v;(i6fs4y}FxzePiPDIx z;ofkX@hQNa5%o_B>nuwtrL0IvbW~UjOg=(9^xk{7^=PAuZL{*L$sPY~U+mcxyjkCo zdhMTkKXl7`<Coa{Kc)d8=l32P4-PXh4SuSqrJ@|gJlAV2ILZ)>vruy$S2wsiSpT_T zD4S|)iguZnfrJ{StX`Nl^$8BL>nqjCPhz`Lu9C~kZc*Dmdrurgik7LALfhN{#UYa; z@n_|=>mi4c(ZOKi+w(kTQ_xjIG7F;V=;RJO-V{4wQd;0u;FDWTYlcVXAfC-mJ=&l& zV!LPOdEz`zJRT2RkB4O+1WQQT!1T_u-s>AIPs0!dimBJWkPpb5l=6M>4lK(6(b<jG z67A#3PEIOB<eqazduZM-_CbG7CxXev$n19!8jmb!-*T{>_|!IVxc8_<Cy(Z#2|vA_ z1?NpD1ys!H*Eg|Ls)@@Bxty8aU23^&m$X(^LAs?_`{#MyC&m!ep63mZ$3w1x($c&$ z*Sr^6KvS`7K$n?8aUBZ1i->R@2j1V?5(HM<bsp3e{$S#}_97uPF{j!a8snaU+~fx4 z;B+C(&1GJn%-+fxk(0t}(aWw03hVmW%-e@&V$D<F+;|X&=bt|qvF2dVhy<m<5A)u{ z!WU+q=IHW|;2P;24K$w(pq)^8Q{YjWiEI$gJh+;dbR&wUM2AWZIC(>hkARBJaBlbJ z<F};>*Pn5L@40J&D93AH&De0rks^EIYF6N=-?Uxko7Q*tp*K!-Pf#8DWTNlSjX6xo zLkoJ=T0|UX`>m6D^yFjjKH7gl2lC(Bge=EvaI{;WiAcf6Q=96quYdanB)R>ty2?b? z4oC(^DFyXBaEMTp#0s}@Lwj7q-t%#};zD?ni@S#ljsvVH@RTA$Cm3j&iP2|6F*|4a zSd3)J<p7r&{Mw0<FP3xC@jHlj3G)aHhsiaW%Z`nUjmyX~#gu2M7Ar@4pB(wy?KI!| z1u-a$>uRXS;ha?9HuA`$?1=`$8&O}hn<7_0tpQ=i!Id$u2FpQ$As>(7rgOX9P)fo5 z{*HD%qWgzGpu8K3OO{8ZN2lUw{zI~NrRZ<suvX@JBLEd<S?ZAprL;}0#p;twsTm+P zENxC06M_+JiG7h23MZr@oVPH2u*UQpefBW*#7?~4VFqHkHK7dApXmSqAOJ~3K~(Fr z5KyX3=#CrV@By7g>1;5YF|Y5@ciCGP9Y|gyc>vJ8l6WMrGlfvj-Wz(y7;e;x*WYfa zwcw9G?&EzpE_mSjQ~rGvsf*-<>|)t#j&QxB9w+$yJ-Proq){_>I=f_QERvHnI-XR? z#hQ!|n(2l2llji71<NIuqk0C$kfVrdQnY`g8d$2=AT}JEWNpMkXV-)=!)Uhty$AO> z^2jDHiQD0;WXL$_1Spk`^hps(q1_6)4TM3>%GaOzEpMfpy3QwOPKE<A6Cl$HJ(`>I z4Ez9#(&zE_uq#?fX>yzq;4Rod8B~sj8qbUsKB|C;0{t>JCQ>`xhn`~09C?8etwG;$ zg+D|t=-E=RhJm&XHt*LZJ)v(sYk{^VGCXO)*hv}KrMRzXY7Q_o8)c$@b2bwH#GihN z&i{iNkhmde*pZ5{$3a!BAUlpBDhFXeqAd!OJ%y>1I)$W&K~rY?s?%<6;)KJ2&Ji9? z^3F{qQDTw^nmACP;F3lo4Z<lZoboRUzL79+j_zONQq3Jx137e#vuh0p3qm5oah{2n z?IvLwCg-QDj^abiTXaV`?(7;mLyLM!4BPmKlB1pZpAF?Qj|Pc5qoLuvohY^7?|*25 zc6xaRSlzS|e|gbIxC|9GQmIzFk-V$UNuJN{*Q8C`t%;=o^V;>^=ul?*Hx^GKMVCU- zy`o)VD(VXT-NEe+*Ww(#I782zr=+v_=#tRw3y*>sUZzvidLFp0%Qc;_#A|kW1f~Yy z>8L|ga9t0)zrEx2<ptF>%toZ+8Cd5-GXp`wg3<<s^AsxQ?RMgRzYku$LpwN+4}B&8 z%{&xc_uAY*Y)UnK-CKUvT8DvyF9(Ul^+_8gL0Z%Xc0u4KON*Y?M=?_*3bylFh<4#V zi)b}I_xQ4Rq$-gIL1P_g4iF{#@A(?EEdVx`evbk?9Zg50cBHV;=e!cP&w6Bm)+}>M zP27$|#^$Ex8V?UqFef@>3O2R9{0E9Y@~DS1rpVYsqKrK+YM&R}F|&%6GbU?acIZbq zOB0H?gL*QRE@(5eMSr2C2_Z~lh)9F=R`~u$GfMVB#s+=XB5bbX#*+Ox1Th`H*4CY$ zH%h$XBG|_F$e@Nk!eru*^4Ib-{(Zi_8jt_D24uqamWAP_;H4DX%tmI1PV_r^o3skG zx10w&K!t_sFsHDswaIZzjRum49A<C0F2Z0nyX%uTf7IOpovjLEWh}^q*Mw{jfk~Z; zP(ca>?#@9hRUXAtQJ9xR6?T@qJxqFgfQ9>jQJmm?zNg~dO+;us^f!^W&yKh6g><}| zg0gqn5;P0L7V{`0yWu=<`0X3xZ@>Qy)i->OzQ!MIFcuB#Hfwge84(E+M_Aq<a=GR? zoQ>*upW5iggz~b{X>bVZ^jc0kG>PSX6kICGb~dWaYd~fs2*imT!@D?foQx*=Q65v1 zT6cDro=qG|GG@kc9AIWV9`|tV^?G&RfaN>}YAAw0sh#a{o?_YCLjyOb?ONj%`!kYI z(dszWLsQalJ;v)cW>lZ+0<yiyTmO30ueWZC^sEC_(PC#diDTb7k5ihIyapN3(`q(Q z<kPWfAZZgB;S|Q|?>!^M5F|u{rkS-HHteUe9Q+NY>45AvE~7zLMkxg1(V#UoFrYoH zfm5+X#Gyf<JeAEBOY|g*Bv)oqsA?7oKczzUFewhNz4`r&l<}gpIC9~*p~-WDI3L1F z)8UbsKWPTyAf5COa6iDj`({L5{6;tU1Ld<DRK(XZ7rxD#U&B)=x;ZlTY1&Vc!*|zc z(gHV%4fYLV4;Iw+?0H+Tj1K?EaGgHy<a}TuKMPjeT&w-d(;^r9xPjQfifMT8<46KU zf%lIXUVJqlUtj+$1O)!TBQ0Qx3kPx{P{1q&yCNTs8p1S-+3Ny`+UD_?Zcpk?wTkne z^%X2BvmNwwdQ49yV1Dy*`3tU?pE{EsCPG^L6)zV1d@d0u>;6!uNSui8S2@p#2T4(I zOsP;MPR)UAY@7=f;p!LB1?Z;@Ivew@Z(+2#27~ztSQ(CJ^%$?(8MoUFxATVk{au=n zNd)5$J>=J^>4xuOw31p&Tp#>o@FZ8b)QVDlay>68&^o#I$<#aUHzjI9Emf!x$(x0q z3FsURGI9YIv?HvCrRXA)$5RmPPXx>Cn0v?LaiNxiRtm1i-Ry4}<Z^So<?ui?M^NZ6 zpZNCexB1|SuB3C9VsfqxqWxG-Gf6aKL30&a@1sc+ElMfXD4V5>AT}z5b`8g~*87s? zT&tqBWP_5C6V%+`Lh>3w!@^mF#HG-PyNRB%0Ah%nBAqsw?PQ<V%WuiK!B|6)@;;DU zt>}q+6+P1_Y@=CCJQ9mN$7PSr<<7EeZYry5Vx$a_L-uyfhnX=XaW2a<Jl2o1BJV7j zFpSpNQQzj8;#}#aMxK1sc6OQDOr8tH@WrJj{IpPVpOhSB5G!3T%XHk#f9j5~Yv7{9 z2stQ{)_fa!va@2R&7f?uu~RcdZNv<iElz8hUT2dV7KbZjG;n_{^WOYv0Zt$E8ua|U zAwQ6PhG=0L4j9EcS1H>+|Ky$fJ%6csKA?tuScTA2Y2&|>gY8%I@gLlP%*=`PurnHo zaJiX_3-l7&lsV*(<v~nwZV3}OUj)TuQeHF%`RL*_*;)Zhv0+4C652T>^6s-dx*;H( zQh-Uq=d^L)XB|@5OcJ*`IV1u5WOgsORIa-g!r7`ag25bLpEx99&&C2F`yePR<N&I5 zXk{K2zn#Qlp|GCj1hrNa36~u7mV$az^tUcP`Rt~Heo{=~{ZXEdB{arp66CI;M@3w5 z*hA_(Ne)D`bgWcB$0349a+xRM)+P=^VLfW`St2b!Q9Da9R|{2+xf!#8pd}-Wo>iRM z$S}YqP0&)(bj*oa!>%6pJ1zoht$2BPafP|dsWH9JyhlwOtcYfzGH738Fwy!%I-{de zYK~>l;hVVD7*uB)bso2wq%NUr!~VHhQZ*Gqsl^J%fp)~~4;_@K<DTF14ha(DK7-uM z^|=&qYjaBO5sFYC2wlPno=DJNKMwIISZEpC_rsY5OlQJaQ9gAo^@labJQ}}ub_sV3 zm>$I)DKj#)p|DU)hyJba!_kUTo(N$-eK!P$WAog>A*gmDw!kU&?{9DK37L+s?n1r8 zKxt<n5Qjv*z+X){@Wk46?oDys1Xo4cGz0kH#%|8SkL*b4>C~ULSr?Sp2b*Ng#nm}m zOOr>7l3r?^T(P6MidDW17o!^-Gd>(oWwa7ZPiRQ=RItvU7WgY8;G?>DFE;-i!`e0? z$<$_1kI-}4=W^khKI=`snvbuq|DFbf7M`)+AURCOn1@qNDFxScxd(PO7KCAMIr-xo zu5Pv~aTT!AfGB7@gx4N23ivrf;{Iz3W$)t7Rn#uU75BV*6w{TI;@yN69NEuD#X-lV z?}`Rt7Z@07Nx(D;-f}ahYI|))&*c!3_#hNc9Bfk4!M90dBF%_!d%YFdM5FmQPSjdl z12T&hO5sm)vQNtyw@#CEqU3$R5&nEk?pKooMeBU=UyY8_l6FXQE++Lt5vDFdc>V|* zC}0D((S(>iEkze7Z(*#38(}2qHbI#3v@vLfya#%!CCF6;s#Ab>ax*l8%)j0{Y7GnC z%cy=uLq%z(I;*AzG@6gmgj{lOOPn+VrW>;?oj#tKLHQXPuX+r9*ijF=PhA{vT5Cp+ z>z!SQqoZEYaN#?SL9Z%eIjvOCY3V)oj^4Ui15fH7*)uw5Uwxvoc?#}@|GWJp7Yptg z9zT}pY!fB1Od!)FDeaO$T;})XTmvF3Nj_c=<8qCrXn%^8ITf?PGu#EQnqJJ-C_km0 z>_QjAGlO;ALMWWf9km{kB;MhDNjt~(z@I_29w_DE3>{We2t}_4l2*|4{G#Yu<!zT~ zw>Kpt1O$TciZKxR0bPN2&r4tko?54F!%AqM{)niVTZb2feSj)$!dWSzR+t$u3&ON% zcGl*AmXq2Nwn`cMjOZ0xYeu0p$3uGZfwu_JbA`^nG5DbIAllL!J}!*2M)7mhV(QNJ z?=KE>l1T&8rwvi)#Q#ld`mg5WKOF%f=SUQ$Is@$hx)m7^O2n8v`h9Tv*cXZk(pgxk z5Vub_rQlJU{tSp>@-)R+9FlwkwG|-7SXp*L<Z&pEEDP>kK8w=Cgx6Cb`5npcd$TWa znnHR{f76#NPB?K&>{GR~UL*HDJqfR8<MRA0%bxZ6)tPaW;_gM6loD4Aj~ti-$1w^? zDud4t0<OmcR}+1}aTqKgH534nuy8MKr4`BYrs=+E5HkczVs@dAB=jS8#j<H)I?sSH zEu@9&LsY{7K0%f0rp#=@XD!-$&?*5WVP!;w;+n?dkit<1kERYuPRa~xj@32J_r9uO zAt$m`x?QAIIyx2)3X{GMMJ1|a`Gl+qDG(mlH7IqY^qCs0mbt5$M3>Jr5eMeslm})! z%0t52jUyJC3_UN8I`n5%T<qothBZV@kcuY4b!{lR(X+^!vdOBG&sr)vbxVV{<}>6v zWU6HDn&UJ&(iJCdhLxJbDfW*B#Y^v9p#tu0n0WAf_F@{%#z|*kD^jS1M&sFI;`ppC z<Mrh@S&p`~Ebo&N;!MjBgFPjU;$E+Vo!<W+d+)mD$c<wG0%Rz&Jk#(0n7iM)ZC7O~ zNbC<1zyZimW|hm`?jC8r9^bN*QUrqpaBf1!!NEaM|5~yQ?$nH&=Sjz{nUR2a=)j_7 z)HU_;@=E;Wm45&Icaqq4P;ZTHudh_N(EWb*hI11jib0dQCdyo&<N9LGlU|Clh6ds` zH=ofC!K<<PyrAjuI;$6C7%(pyG};97a<&alqIFJ#HxBKje1I~f{T%ic9Q+6d4>B*= zInko^$}-_`p`TAget<S{My$R=obx@kzFZ+!He7gk!$0^vvh7<w1JQgxlJjgnp0Cd$ zAP8-<h5_~<h*nxvC#KTb63`v0?L@*<%1G%AJYmRq@T6*5{`=g8h<aZ<w_^&iq+lls z2UZkR?xvN|c`9H7JS=hV_d8W4qB+SwrmIe=(?Lc?K`!f93JMPf*dH4USuB0Gg8AO5 zOS1wQHw_p0#@+=5*xS8WHai_;JP3xma+!x^g@dXPu_oPDs)r`t7yDi#3r6TXPdd+c zI?rK`TT7+0b(@N3i&72_XMn;0hdzD{SR0Bk8P{7DOJPb4oqEo55IS}+MwpFEpGaKc zkOFPgAsYENrIchr>qoM5NTC<8>27b`zWdo5tp+mSVpT=~-^HhU(Ko@H5@wqBgi>At z84_23a!{sD!k&q#iIV0GgkDlbCX`~O&uH)CnzTuck`(ZU*&AF+q^r#}aZGz@Z$R*R zdBfDDn+D9aXc8z^mLr4H`NEWpMeS!wt;DUFd!H8k*{{g#NQGA!EGJXcG}OUqxIouf z>>7=Gs?A^*%~Em%4@32E*icZPBt)GN<#1$!iKj-%2SH5N+7d*Ha<;SY9l&qm5{&7x zQ=ZG;V(^+HQ0ve<IMONdXcp#;dK>$s1(9!TxOyLE2_l`|-{0xWmsk4o%NP3g?b}2L z-C&@#Mz=2q-OprM8$+)Hjb$L9LSMeT5;4=auiuP<jAyBcjDSrMdVhZplXqsO*Dqg2 zhSGUD@)(ND<ouYr&0Wn_sI2zR>4yUflUQ8^>Ca0-IxPW?Yt#m(fH?_z9BmG501?(4 z(PMR>Tp||x;-8n$!Yk|k)ht4m;pj&Nw6hdG@n^)dK=$F1J7nw!1NmgrOkLPBKbw!| z>o03S&hzdTcqB<A>n=eSe#dN6sw`TL$=*IS>_WrtQ-%W(aWUjNvV$R5XIDi_oC58O zYzbLO%lnwMDFcN>f^bp`k4iLcK@VyZ5$Uama7HagC}lQKDl$kC^<aa304PMnL~q~T zsBod%?MAg$D?YObG3{T5>fj8<3rU7atOg$y;Oox~wiFU!s>f~8X-1<_Yc(t85g0iN z<@fjdEbc4a?{|8CfA>6!TBz1S=Us^HFch2k#p@Ol9Vv6Htxy{LE~Ap!cjhFL1r3B* zD0iaHTEMFF%8D-OK_FmP%$AYE;ehE%IpkuR2-VRHM<y>Y(UwznQ<zTeYscN1I)-)< zPudVKDcWtiIh}OUb?TUeDSnu0YZDbfNu*kipFNHjcd>$^Ro4lAu3GBSWa9LJLoqt` zk=9OI@2guL1-g~w%$1-k!l~@FiG#Uv%?8PUKGoKsi$f{~C1{LjX-3vPF*-S!bD(Ls zfC`l^mrSQ1Y>ljm5+R=1Oy}9CgZ>HkgWkmu1>Vgi!gO4MeKgCi*o?8KcrkLl$`ofq z`e@c#srS<?S<iM(+FmEFys<cS!Fy|sUS6u*N6FVroTAD+D1N{H@dy3#%P%Q(mu4f= z=<V&@ofs*iHJm2M`p>l#dV71baNgF?NWwqW+uIxc^2;xDdwDUZH+`1w?{8+rz`N=X zoSGQVlu#h&rMSt%;GHC0w$vZ9m=;O60A7~$USA>*w$_=1$N9iOv+_XT&lI8;b;6@) zlE-Cz(4}0pJpAEj$|(J(%5Ksp{KMbCw6&Q2Q!j8e_;<0io{h)<u?A!uNDTr52Tzu| z1o~nJn$>xpuF=q`Ng<m+veFm;HayQpwUk+?H7Zn$b|N55*3V!m<YD9W!n=S_E=DQ( z1FFgDm`gx5r6;PBR)lndS`T8bgNoIeO5?$I*XF9!fz;^tpLYA0u#V4=2{sdDOcSBS zC@xUw%*oly%PY0Bc~%3L@qSkun#5$>m@pbCV~T7IYvoGEF&c|f$23YO>8|sb<u^0c z>R|cVPHL^w{r*1I(EFQBz)kS!9<<<rHQ%9U4l%E|@(fy9Qj(byJ*JbIHcLvqH!(j` zaCM3Nb`WoyjS+`tp}-_osb)(3kv<CW^E_uzUvm*<_aMMwL(A4Q6{9bW&s|^=h-h60 zYcEAyN)n8A@dBO1kq4xs*o3_|bCX&R@YPcZ9qjb76v$Dq<}F)j_HK<PUT+bZrc#&> zLIKIp44Y6@!Me(}&0I<doKtQzezu%?pi^$8sEy*WO(bT}$6~{uXmu%MFiuzFnntTs z{j-W_B2_Ft(-Npl*l=3$YGV6Fat<3_Gx0J3^;#mK%{QX63?Y}8k%StuQenE!6cG|^ zxOUkg%&W+Ko-OsL;aM-l3k^>9!+MNn>-DvmPK{}wA*Ii6pJ>b5x3@VYi1&q=lkOoO zL@6{9?uXvP+wH~o!IXD$wv&GQ?Kk?zKmI|z4aBh2fp&a*dmH;OPSFFCz;hbo-i(v; zNStyD+<nRI&HFaAg4BmZX;Xppw?k1-^1&aB;RR`xvLfOiMuHP<iN%6cxknAwrlI%% zRrmyHDYo(ay(Fy9^a`@Me?O}c3FQPmTY~57FKa*wSFjq5;=tZpaPt_n6%8WuwB_Mm z;SI^Kv;?}%6pZS&C~X9pb&6qFLnv5Qc(_2w9w$lwFL8654TC+*XvX%k<RQhJq!*#v z>n~O_n~AU<w$tfJf@S7t)<$C%-Tc)`QUc$fs7}jLkxr!^`bFWSA-WweRJi-Zmqr$g z4$OHY?2CoD7f!to^nvGQUu&V)8O(Ov4!Yec9kpEUm4jB*JON&W&fe%e+Y}A==^!=t z|E|`!lbSSBt|LUxp%|g7k~dJY))EREQIR(8FZ_rs?kF5Y`eoWix*aqH5i-x8v45`| zZ;pxSo;u8?$LJy?EsDvF?lFt;gUfu@#%FE%`3ZF%5<br;kcpZ&{U$huaSeK8w%<=Q z9gC;noEDS`seOgw#6QfsMW_XL7V)HCqod7YU<Un}yO^Yd6b%MuhKcG;kR}v(@kWEw zYuyQh!5qbqFvJM%M?fR9pu)Kq)Nmii^VgYE81XLCV%24srw2oTVc|KE@79d2iRXI( ztOmw1j|Q_(3Zm+V+=mU)QE|eESr<Ec&NAC@J(>RA5jRpmWUUQYSu+)Jp1_`aL#c@p z>C{dFcQg(r9{xP5=AzhuX6QiLGzlR`lekcw6e*`E=DZ5eO$n*(J3Hj%XX8F8O^9DO z(aIcgJnBKMHF|%4r{i|e{rygb3%#H3bkxHJbD>e@I3Z?+rh!AN==Q{f&U_EbWae=0 zND6dZCVSX~>>7=0P$CR-6kXLuwoB63@W*J%9(CB20v9v=i%|1Fj{r!pA^+@~{XGzX z)IdFvkLT+zLqN)k9+1*fAbiWh?l?NS440bGawvCOC&<!Nl-iA|qg8?Ny1NIGmAT>v zMSx8>OKDnX%>sx*ohw{6ZYVB1_JavD0;QPN@Zd`H>K3bbNE?5hJs(96<u0A-ar0b} z=@=%x4PN}D;T*LR*GjirC6P+M{`OBgZet2g1eBzC7}TT2Nk;*0HqeiHNXX{Er4RqB zg^n^PQDq+NXkm&JprP3r_v<{*!C6MSPa8Ck;YQ=@=;if=zI}VMiM^$*qYx5?h;c&4 zQAZJka&f8}b5h{cGwa}4$Ve=L!02>KK_S&C5v0t6)<G#?DEg0+DYw>TX5z}wOw95O z_}0wB5sO7qWA?bQ#wuFFAa~oi=Jn(QMN){T$c8bX)V*jZO)lt0_+Bi-L9KH`I<q*! zq5N-c<gk{qY!={;OPI2!HKEs1FpGd<Qw3{7#qBwDo=S158;mZB<+r#_rf)29gZ^Vz zi}5CbdSg+GRK$AJ>EPAv=PQF2g~r}95Q$3Cx)<q^5~*QtAh{YY%eIQNPgGWI6{q}( z&y2r?7|xOO>*tx&rGw)jfjE0mW0lfKG<6%tL9Lw>)jP5To@&vpjS4#R8S-P-tY22C zxhcTCvz;wAAQY)kwbs#q90%QAZgidlWv|l`dK)IsOXfSER2g~P0?9ymmSp~ttdRo( z8<DSlxMUjmE#mz(qXw;Zd+&4jsNbt!C@gn<!$s)F^1KOcXcc=$te;m}KkR?vkW}bz zWl{An`Y6xl<NtC4l7gkOrK>JPv%wXl5EPs6E5D_yKsUJ1l`!o#UwAGy-Rf-+X!KAK zY1EmC`w+X<xtaU_#F_%-Z)@}8dJb8r3L+aPC3ImbT8t1Ct|pM>2~hBZk}wz^vCtpC z|3PoxPU`3Q%(vraD8T#seK<(nUdQ+5I%y~I>95+*DOExu?5^LdZ~=PHXktoH_n@7- ziP8avTa`O=d9i)J-|gtJ1p5HZ%S;q+bL|v!#$rgXRkxbLoUECB@>bIKSsKOUoE9}c z44AR_#MX-4IK?L{`GkOy)&u>*T&V)&%`*?gU79SQkU0p2t+9s0Zr)DHSB=2VA=wHr zZ94FPMyuWg&l538brG_J37yjwf(YK4{mH5C-dwa{#kJClz%|Jb7ofSty@MyPSgglf zrqWPg2C{|3;(DxuTxj|};F=E}X)f$j-=di>lY8y|hbW!56{feCO+a5IMoax+I8AcQ zlP=Vxh5OF1CK)s*YDubk5p6nkoeK@Ekx>noCf=`K^sACcSPIlA4y}DDd|jTUDp@~& zF8<M3iLgP?^`zFT!+_DPoWqzv_rh_HkK=IXIhgp%+!MG&3sWHsd&~;%xSmZ!9xTB3 ze@`@w6ngK}+DXUp3g15(qKrLSre<WIU=;>I>rf-v3a5dLH#bO0mTlu_cOEr=wA&-& zyW7C6#HK=0!HVnvo`ag$0VUx)d4O?1=%&7Fp@@D|G*eD7e=x-PiB&dVb$*}2OMdt> z;k|smp0EF?285Gmx&_sBpGLbQ3I^K|l_KCqGnHzcsV^3lVCBmNIQE^ml1=wYDMREP z>|e)kZd#0%O3a0h>Jw<sGw9}?<Hab5wp$A+(Kgkd5AR|6hcXXaS&E-W8%`Y5GaW~z zKUyc@LiKhdu9X@QwR5=b@JUo}FZ6QU+?G%+WYIkcP#|r#lz(q7IxMp|Swk9e|JO_e zJ*K*hL~NS&%Exh|+wJB$hCT~bVM9e|ibjPRO#I0ZocFhPaE>W6AA@JwdZrfCP>5u! z)4(f6-n?X=cb<IuQ7GBknEx;4UvUyD`)AjGS3#6qiZ{9AesHj>)dcbAUW#sH;vsKI zWR8jLNMXVz!;K*3{UC|<&OsMJ;m<-#gGp@5nH*-_B7`&v3lE)Y)WX>GfUPe9k_LCC zOwqh@u#0NJ!gG@Z_*QsGaQjk?8Ck(8k;;ctUC67583G)>w_rh!`yIOY(4bisBGYLJ z5}iOVC9>vZ@SI>oT@vMJ?BH4@<h0ION48R7qO&zvR<1qio4SR;%Ey}zrewgqAYZ7t z52hb5K+5}I7-Uhn%!?43ZH)?MWqYwHX&6EA^S!^nTO+8#@|Twv-z#~B+DW6MzS8}? z8@<wimRih^gqHioAxkAsYZ<g*(c@%vP6Hht=(1|W0vf=>d9Al$f$h4<>%vsmRpDJh zEiM+%1-8Uc#GtL)6s}9M{MDhyY3M`io@|K8R)oUA5F*2E95jOjzvF`@VvBs_pZt*D z^&_Kvr?73B)Q61=2Vu{50u}NXl!kwOL-TByp06VW*2zBKJJ{i-f{9@QxlFjETdHlB z>FgmACdO#JXoBoM?F(s8g*XJ8#dLBB#g@3(IzOV~3FFQ$jdrHyMpOnO6UBdGQ>#x; zC`zSY{`Vh-4p5+qDMd)dkx}=|p{NRdO`_4nhuIn`3t982_xt&7d~*RiUrc&0Jet7! z{cd)odI;Z+O7HJ?>eA`U>p0ZUHUs+Ry{JlKfz)Io=e`$?837FX4+$t-V%e18dgX<1 z9}R3NRxlb3jf*FdFNnjW7fk;BaK5Q#rK^obttBB#ifl+I6uoFY&8=yK?V+QVqYXKq zW)U{Ci|2VFiDnlqvdpYwL%~68T`cjM>^>5bBToPTAOJ~3K~xHDsyU*tW~9qyj?Q8P z0I#-f$QdYh<4?BM0}4_C;-p2r%wWE;cC0Ak0&($dNQ5;o`kYQ=ws0(DJ;xkU2bgEN zd(;G2P60D!3(jT)trQ{vCs;I7q`EO$opuQ}w}g9Vt}(?MZ-NF_g1%!1z@)4gMkGg| zIZl?UAM;*9Bg4#_AIq%{$BrjBiRC{bp@_xvM#DsPjSh?5F+?e)Ote01Gjtq>HFGkl zPOmR7^zH3!p$D1n1hEF*?YZirH@@4KFJGwELcJgK_Vz~YY;@dibKtX5shEo)Sms12 zvYnzMB{NGK_8PftW<bG$ETm~CEsL;Rl=$h+LJ)Cuo?_3hN^Gr_lE|qO7vcw)!e?NJ zO9E96%H$oDOJIP+A44AL{QVBlBVJp1;G_J#?TGx0;{MruJYWBU1|)RR;1V-5Ah`+A zMguscn9ivJU(>VklHMyb(2rAi)u8dXovNrVL#k^T`V_pA=LFE4faT=k@iTs)>w(?7 zA1nH2&N-nPg2v|WH>a%nDGOr|U4GD4=ZnHjFUJv`Fs8_sbMx@Q#+BjzkuTBdY|ZQ= zJB@(1)*98Ln)qE0)7I2c2m<N4htd@;GYqU!t%nP5WeCcT<DmO}*kcmAwX%P{QNZ8t zcaq+z9@Rtu073u0$_1=zk&4F`T;rAA!$bd~mvLr_=rrBA$?OFgG<-w<GDOB@YGCRN zw^PKc@N%kKLEdGgbE~tBhPlP;j~KS5*%)dq>L`sY(>bSEfOxy7JciUjNI*{FLEoE@ z6m?d@p}?A&ZH3%!8XEjkwIJ-F*a(x;ZDZu61w-Pq4Iv;?NVQ*FYKQ>rlLA&IYNtrb z__74rq#o#ch)NL0ya}Zh_13L<;Z%yGU~!u$2WKg3oaPAHLJYA{)!|2VeMVt0!^qxE zL>`(k?Ui9ldL<EM*%Vt4#92@Yo`Mo>x-YaHvc#6_LW?6<g*g>AzYiv}8zpyX1ZX;_ z>Hc-n?RN8FfL`~)^!D~f_xpW(hw0#`XT*7)^!nwO(In4=?baH7dwZL=6Za_ClhKZv z(7g)-b9MO9>1=lrspR(B-B4^&DyT$D<nNk}Cv)}PR9|xH>=qz+j3Mxqa^fQGe9>p= zUR?G@;7D1N1%lg%$#?lH7o7mp<3Pbrv;v<mkmahF=I{EgM1PhDmV=mo0wVGk_6N`A z<M|2=NDjseL4IN3#853i2@7n<hzNrd1US|RW2f$mvYpLccr?|RyB$uY6tmV<(YAh8 z4aX}g=;Z=~Hs|K+G*ufJEhv;;Q&YBq+NDwm7UN)RiIXcwg}nSI;PVe;wm7-R!(+m@ z9RlonZ<CMQeG1yU!}}B+hRT^fHz_?psJGK~B*@xf0jD6H(2jri{{BX9-`?nUyV31< zF^z~JIZ*I)=~mwqn$#-|cjIIlfE$uTyU`eC#}>>t+-#<e^IR7)iw+fgmkNQ2`oE%d zD&B_5YD1xpUYg|H4GsfvD>yKDK%UG3SwH*z91Y^g<)GDG7mXFt+_+1l5PpS|LI_0+ zc@*NsnIk9j5$%#1o(@fgtds%xebQrLEIm_CcCJEzs?LJl4GG9l2-MGr>6eNLg~u~J zov0+vNMja*KNqset3a-_n>fS?iMwLO0ul32VyfOQ)QpX$X7p4N5(W!wq0l7h6co!$ z*_Lh;s60qXkw^Ilvbsx)tf7XAR@xd%fs!c%BiQ-s0KikvDN-lX&k9TO@DoGKZ4HPf zViVnNw}61-{i(IkAAfwMU%q@H)V<VWpb_fUXm-LPlkUs*J8>YSPKOL3tbH1a5XX=_ zb-sFU??5N)<`7m(aksdPq%hLeWY>KVEjSqk^uaVtd{O%H2PG+Q{4P>PmDBimi)KV* zgKcfbRG9cXgGqpR4T4SAl3^lSnALP8yFz}ihWRr^{`GM1UkoIq;mA*W$G_}jKbw!| zD>NX15^&*EA$ddMeXv=8crzS0-Dl#%D(gdp{AuvLSJ$Q1Xa-cBL4R;g#~7YDCS0(v z8Iv##h7%Fu?i>Hv+9+CS>Jd65zfu8eTI9vI)`GyjPedY-yQ7nrI_QWOo<S5WK2gK# z;d%fHlS{GUbQImU+bbQ%xX$<U?inJ)^vnNfuE@IyEIFlCjig`?1RGqUPL&J&_Vsr< zYN6xxb>x1`AjeQNb)nbWi#dOl!ZyhdwzW)_h>g=_UoWvBwnnlry}iHBYhI0V#dQ>` zBPg-bQ8lHVU34t!>ei`E%@Cp((z~T<$4MwoWXC!<`x&TFQEL!wIs+dVuGS(hg$K>^ z6X*5mNaGpBn})xu1uG_<V?#O+qk#9rfAcQXguEi#XB?a3fR2R0MWk;rhFZaNoW+Z5 z+!Krs-=|yE?I6u6Dy5ERyq(ilnu3{uhip!Ri`fkJu3=|T4<}1s33kG;DZz9e5Bik~ zhu@hZJqt1v1cx~iYdqmdzmi?vDqe5Zq}U#`Np06MISGzMb~GE={Ii5)>1EGO4Jc3T zMKt$V-#@f36P2~%6#_nY=S>*Yi0X<e-3|s9vq`loh3NJ|Z*OnDw@h2@QcJj}`h8n# zbe{Lwgy?7Jj>y3EP&CcYo@pry7Uj7AFK25<T}N6|8@i@{-gMs1HGfqB^C!#A;9#}u zVAG%BusKR>CO=WU6Y+k#!Oya5I3leA&?O4_W!GO`Hb3}?0VN+G81m=K_8%<H^RxVC zi~PT;M|d_L&)3p`L=-~B<m3s!;Q`)+!R18WkQv75P|R>Yua7r#C~iuLV;OU@0u;ln zF%302?L!1^CYOM?NJ<GF#kBLu(IVDE-~7AuDH=DcUgBW8sGl2?u04!Uc0tD=Qq`Xy zh1BikM(_7~C`6ITT}z?Ymlt|{eX%@*dc4xNZ(<^IZ`x$l?TlYe(#Jt^o_D(4UWn9s zmWaN5`7&Kw4m!_!N}1<1$$SPowtjbmfH@_#{Frdtfxahv>0M7$sMg!?%rAv*$3e&K zFmyw8H9QO2p8qGFu8qBLPig1@34{Y4#ouUI$!MIw#j+Zf&o8dS5fFz*w>C+Xsfa)j z<ZT#2!4xwy2qxGRx!2|-#i6&L(pTaB=ERFg4)ao25hamsBGF4an0l~~8(H64%+*?^ zb$7Gpl#5fw%&xbP*<IH<v`n>(YzVe#bE1$E0ZlGCuAy6$+a|9A8QD;l1O_vhtrVxS zY$&lY2W2hpuPTC2?#b@=$AtT!dwbY=;Jqn}g>6Vm&w+g8pzG=)o%1GQVZy|75AF|Z zR&-wq0h6j(gR?~@4YJmkWxr+60{XHZ4fy?j(*6AoO%ct|))cY{x|E2>A0$(oQj(EK zzNI76=h)w7(08nKz^lS|W0RY$j<aRkMbXY#TOw&80D{PueL+wGrItie@-}Z*_!e#9 z&70C?w8zf}CwTK^{|&G3G5(|*)?d{mJe!Z_YukW?aT@z%uDh#Wn8xu3{6@yf4eC4~ z4I2;b0*C^pqHhVHz$-V)Pj>YH3ia4FHl&$2T?x}<^#N(r!bma;?^=4G#3t&<vghq| zvCgo;^Sr0ye!Tzd>nn-KoYYC6VU$wn%a>n>nd#fNZ`-rrxE)jvreA;i|LE=Q+q9>= zQ9TYT_`ZGpHf!TzhqIm^-7*43as2k}8`V;SSe<JjX+-b$_bJX!&Li`FzrDXx@11I4 zdcWUiLUXr4=djOIOW_ixr|zg5X=ykSz1@bL@$Ghu@WjGYCr^CP()y%JB!okpHbLO% zg)UNVr<yEtAwk=6EpQ$54vFS$lTv}a8viWarnmOp;33QQx_L4$5;^NavOQ8|@$!{` zj_it;&hEmt2!(?q)huz<;#A!IO9CG}p+ML`!2}c^b+N{MrlCurS}N6PajFy<%Riac z;dX~0vq+l}q+}IJ6Vvp(hJOzJx(o;hPd6+IW(zp|^<j)`t3c0F*%f{ScEOv&9GXV~ zyWz{qUHm=?Nwm3w#)>b34>8*VGkbR9Q^rK={8mA%%TWx?WZFZ<M)|TZ9mrNsLz`j< z3Wr>hQrUDYVg2j+RBd8SSwvvxo&~;&s_$yh<93Tqb<2qf!xDJbF5*^KcdFnF$aKlS zyO1a#LdV-A!MzA$?Co{^fLmK&vNgw)?RUlKe%T%#hZNg9#QZBC)c@;A?t@eQfziL6 zOY(CHZ00}L4#}o2;U7j*el7y?Y&@Q?hYd)`CV(*pI>4YMo+BGLnPK;@XNf7)6UC5x zz|TL^qw8px@`R3F`QzZ6A!(A|1+#KF`SV9cb(dJei^#UE%3^$cP~E;$gYh^_vT;Lr zeI3)Y*6%a{3jdihg}sQnp#3Qm{r1ma>2}<vvr*i1YbkUbm45y8pLE{uLx3*Bs<O5| zC}}9F7KsPEXwfFbT&J#NG!HMg7b}+QQ9OqL(Jy_U;`$NMD9heS)Om|KiA;YgQD?Jm zYfGCnoT^I`v(&Bi7(t4YX2r%_>hyje4M%IuQ6%IdcM0@2<Fyw*xC<QgJSk$svB}Xf zNg;KjR5_Yy^UQOi$@aal@lX_oL}0z7IW(ddkg1c$m90ZjC~i1_2;^>JY8-rWTAJ5l zUMSp-C<NDQNbH>X!kj=34pcNj_oF~XD>39-B*rlaS<VHw*<AEyg-@9#6|J{ve9)#@ z!eJtHg3O;%+3wG1LYNwLqunWmYrzJ98pjm#3>YREG02lYL>7iZ7pRot!<amZ-cQDP zp_{nIr7UY{q0&ptjzC(V6<BZ<?5aTC6t6+E1*NE^pC=1gN|{Ev#@^|1Lgj|%&rUv# zjjx^`>?<?cVn;&|UHP@txu!~Ndg;pj3+EQa8wa5+VPBDa5xFd+B^bm+)8=7zkq*(V zCG*866-t9V4tu-p6_~3fYsO11`Vl?kOm|8azKE6haFK#Z18wlV&w>xU*+0L(H0E$V ziR|oszYn$eS$X3>qs(6!4A17{`T7?iAjUzp&AP{lKKQxdtOvdKO}I>+wLpwhteg!J zpPXIbwZQ*FOWOQ?f;PgErY>fo$+X7(=w=(e;02He=|0uN5X0?&kf1;V`(9=qsKgXb z%M{jwn<(Aych5k<Mr^upy}iFrI!Yx<p@3YN-rwFxdZ*jV&8~}uyyY!YBA;8p51uC- z<@WMo8W;T@?K}r}nu|?*?W)d$RxMWRq|dO#Nq%pAUh!^4zTVsOeolJU)bPxp%iD2G zZAURHWRY&^!Dj<EE?uXhdYcB|8;78)P#_TMIOa8(2fOB<m@a0ngEA-W0_1F?W1y}C z#qD#dk5kLgG-!dmOx<}yO^a2f8Wp(i0w&w>>OfWnhg^}?no$|gcA6MG2LJiwT#X~_ zyO7i5+*X+_+ovG)l9L4`Mar9I;)IaI>29RWSs}G#m7%}VsRq&^c?gYlO$HaU4uh7U znh*eT`Le<c4tFzL6`!x5cU#2$(RB%PmJl70fO;fKY7}rqyJ@?|0!S21YT%00qPEAi zShVo&1J#ORxM&!v<bs$eq}t~c>S1-hNpRqcd<oNrQ9>G4TA+T8-aGZyZ2u~1+g<!w z%+$$&rh#i%3U$n}I(9E5@*A0>sDBAHyeMud>|N}86d;*uFyfZiJ9ZL3n82^s4NpY; z^QDv+Xh`d46-lZHPJIWiACVX|DGw_4A1J;rnHt|+#K&$v7*u>ObilmBV17!W&woNo z^0S(TXY=uVeX0Q&n@MzcVbEHr<5dnb4F&w%RnY5SaD>Q+d_b|jJya1%VRwt<=oi0i zE3!%GK#n};1_7F@CEtMpMTSI3HrlrsA|`tX6db>LKL;(UlsP5$uWoj!DgC=J59bvc zT;W=eIpOSP=_@krcp(XxpgBx<1v!6u(K!w(5i`Ah`9k;mo!;+vv%1wLwbn}1+pzW3 zgBT}?ydKEtgrnh=L`>4mCT$dyTr8hM1?BY^`VQ%x?&teNIpXBrkqEVboC12{aGjZA zMuQf*ans~L>j@el6d^B}I60qTATCzu$`Fp%deCtki<28egS{Y)d0>gnyf$~ePC8no z9BI+1-$9GRE;xO64*UK7PWSu!Sa)+h5Qytzb_|(*rq)7S2VIIw9U7fl=Y5T~%L~0o zAVXzNSVtoyM7`75PRJsklqW!%YOO%I^Tn-Z6xb~H-bf5#8P`i`g8DNI$j8u{$iz)x zFG~((3<!qVuLfJ(h&aFqV76=}(QH5fkI>M3UOp<FBw`Ry^?5@=EabuRn^gPHpfS1F z<6RNG1{X?pZDMpGlVxH}8~a+3_}rk7n<2PV2Mup;-{yTTlXg4)%yApfBo}t1k5aZn zZW<5~4NhM|SzL{IEuk->nDIf$5ib;U&{d#;#8t5uw~jp=!aI0u|3h$}%7+cY&UuQL z{{m(MoZL9Uv|&0{`{nzz<I~l8-B?V2wqV|c?fgJ!AF>es-G%<MS$MwwZ4HRo5C-=h z;FC%ONTcDUbqm2m9^rP*Qv>0^?Trmf234bYQ^Noy1txOdaJ7L6KLFuNnLH|ZXo>N= z!}%+lAqdAX#>^LHaM<zG^*&LIX)g>@S+rHu;((PJWz;8knlZnCIq~JfmlGX^L|ld` zHX=G&@ZQgpZfyj2sgRc^_jhEa+|&KXwuX(DZWN;4jq5AsxP+mLg}Bry@+@Yze7hY~ zk2*!6ce=m7`}d!dW<0Q28yPHcf$kR@B61B6C3*s8UJ!v+0BxCZV&t6V!esWnL`;2B z!uq^Nx7%%40v`vUNDOJ?-t;f`C)t_Wgj#hNto6EV?LKARhu%CB1Mi)h1iaQ)Dz(tJ zZ(pr3F1h7T0e>Vy|MNfpGmHz&8uc)`mI=JKg#Zv<M5x)sxzg7^zS{3DrCQDqL9T~8 z8;xe6)G1!)3Z@I4&K@1k^v|jQy@BOxvhJGCci$Is5{D%ApG4w)TZ+MTH+3<yVbd3d z6L0p(;^lYJu?VggK((`ui$bPM#?3Y@@P$srC;H$AmI~Rzxky|otP}=WaxuA=O^GYP zsNpyc`t7&h=)9kFlxnoy;ZEHLbyamm9UAwYTbN`m6@>wU?LmM78GUN8+s1*0d~7$% zZdBrec;2cUVl%MQU_4N5Z)sX^&yAnOmK%eVt$}d!f~3T1LVT}FdoK_3#08=GY~%6p z&oO^5^kI$ru4(w;0{-8q8~Ll6k7qOUe0^5~61drO@}rc7E-krb@C6<!;Vk6c_L?x^ zSa5kRao!Oy|DfPxOd`LRd7aqE;^R+yU-C5R6Y}ZzB1%a%iI`=9XhP)2f|vX(=<7`E z)!@FXhgqkwwT@sxwG`DbG~`DI=$kd0V^|gwd_IBV7Qakkrt>`MJWu-PZ~wF)J)y&p zBN3tV>{jIIOYMG-;}$x!+wFyJ$3b7e{t+C)7}f<tc1tNdY;-5;(b`Gp{ciTGZug66 z;o$6*Ycrr<p(7MYq@e`Og81}1U#H9&&zUfW#*8`rq+N}}|8{$!dOM8jlxZT?M8M;v zSpthV6POA`1O2E2dU7#Ip2AnOALEpRQkdyD4*K%t7y9<~>u{gqLbY-nNPshs-nUYD zQul~nUS9nA%3cv6IkIowuR^0C7+%ALN~yEga`S`Z7|)R+HMZszZ7GG?d5(rg12~Iw z*qy#YYY`5Gn+`opgO-HaqS-mJ0J)(Fra*B(XRXzW)b}$Oj%?J#zK<1aSggs1PX9db z`v5xqPDRm+vYEnf_%ECZU>w`301U{^5{uCO9k0uxUoq5Z-vsH$3-m3C?p!*+7#boE z{bXjkl|pBmO^AxC>9IM%TK}OzLw7d7+{4SfFKZJjA%7(9M-+xDZp0B0AKs*mXR33c z$T2-=RIZC}#N<Nw3`ew1_bqfhqlDPn^L0^Ppf=I9pW8%~k3pL>T>9P;nLlXoKK~wa z;T-s#t<~R@CiQGSp0Dq3KzPleE`_Ogc22G^?B}Vvqogs|B@R)hNbb0gc^02HdO%p> z7zR2Yn1D%7&O1@m=9~21OOKgh0=?TMWrdv?L(-DSbEY(_7NE{1LUjS06IiG1<8T}~ z==JrLx^#Mbd%M&SmRgO1GHi2yp;Cx`{q<KWT<y=jzPyHe`0ec*Q6H1QW~tpor3_6+ zJDU}X+T0j-p2U!nfe;KNW7q&6)2-@8y$=iD)L#1JeNN-`@3}C&-v`|aMZS7nZ59ok zC8uIOH*)C?+w?oq8kT{dC2eD4>+jnKmnppm6HPa+PDF){+l_87FJ4?-h*yJsZl?30 zeeE)x&$g@_Qp}A)k_!FBCY$}Fe|dSK-Wq-V`gKe+dp=|$t>pLLf1{%w<6h3<%PdGi z=R(U<4%6mY{NB%VXpTxH4VxUO%E)&qb^LQ{r!~LoY$k0`6K~TY$sDUdKQ^e1-PZ~i zDut#2gFurCs0cxB39ZWMU?w0j|A*7`JkK?F(S%SCa_3@(5_^?tGYJQS0fF@?OVT<Z zc!ee^3s%h+1yvNFOF&F=U>$`44TmNRovLWj*lkdnWf$S-U>D{^o=V<Yr=u2Vj*1}< zrId|Ia2=9Kj^xJs1iF-%@J*0?vxZBe;Y!{IkeOgXM5trK1|}!TKcrUe-MPXi3`af3 z7%+Lz%pgJ{4}L#8V*-U<OZ>~m_&~w~5XXxA2*mh-B1!1aYa@hYSua2KKL0ki-)Hmj zeEk&&hy*J?E6Paq1(Xt2mu(6*I^2jM_kv<Zi2aGgr=<rQPu`UL{g~E}SpkoCT9^xa zZt~7$CEAGwiK=AB6bXmw;?oXQVrz|#<DgqD^zH2%_1@_?4$_2VLsbe>pCaE<nff^= z=Y>O7#GtJ-dU<`Nml*<h9HUVC`t^^HLf=K~znLQwOuxg&p8qg3D7-d<Q$+su^&9=q z|NbxC-%sj&*q&-AU_Ay6=eQkow$lX8hAvDUOEo)9p~9oEyx;GxKadr6R>3^c1A`Uz zb9+1em9_9MrJ61Tr`JMBKQw;^x%Pe?#X|6IF9Xr(=|foIF-5O~YR6%nS`#vza;^$O zaX4&2{gASSg_%HjpBFT+WTzRy{eCyvouyYu;AWZufyimU|NZ^l8W0obhyEQ5EC}f; zN~@}afK+(qy$p?uUZVT`PWSsA!r|D~IQ5wc!Z0~j3TGGUBugPTEM1!i8q(10SRWAz zFJA-93@$$@log&)v|FWQ+09Jp-tvbD*2_M*N;d4Xl-X1)$U<@#YE6t5X~QRSgbdxB z7>C-St>o>11hY;!OwARw>A@0lr|VsY<y<bb4uadvY+lPih}1Q4C_!d(JO>|K%!=IT zzDyyIGM@_(z2MDoj+V?AJZtdZAsXW6qW^4}#v(rddSID*1rID`?ArXs3q9#an{(9j zb-shvltJU%cx=AM&PiA}OYHga@BG2SnLlmM`x$x4-y@^r@A_WP*Z;8wB+xt9i$bM4 z*yLLXf~@Ag!F>Htb1v^CP!4?J^Eky5ha8qUkkA6=%@0%5Wh`S9xjM<^a@TVEUotl) z*gv;T4ZhD1M@z`1Xsyvv4+~6F%VNKTL;vvq{y%R{6DnnD2zqdmdHeR2{_&50(97#9 z_1@|CKYpXPw|6?~5yZX!{O7OUbo4$-04`1o%9f(|7w7$u5K%ij)#FC@`w+pGGN#kV zaSTe1a@yzgT3wdv6ks!Q`ay_%-cP5~1nQm_ZN0VR;1->}bV&%YrGMkB84G-ZU`m<x zthsR;jlk-{7WwjID3?+ik9rXCpxn8bwOdo9Iv;D^DZ1f!_-5a8e^cY3_tw@+jN4vw zDR4S2M74}h(EC{D$87{pT6w*rBTmtN?-Ua6hkM#ETxcO7-fsCUb_dO>)}iyDxt3}f z)UQ&?(AS7enqV8kbamL8`$M5J5s^u445{a_p$xOr`OuY8sL2^pl`RK{cRH4FeM=pP zii-Key~|~ZNYsp&107#B2s(uglWEEhQ~Q*2&85*M#9f-O;B;MxbRywK(%C*2tE*m^ z!28ra6x0c%L&R|PSYo$$25%*ii-IlDUL85-FnISSd0d~{?S*c)J2Z!Csm7)&s-=Wx zeaYj%f0y)qIKa~(UTiW}B*)LPxc|hXr!0Y?6n>{rq_EL7LPI<4z@x@tBbpb#?hI=$ z7+&O}9O<yZ2(CvrM@rMhr6zdXlzeaD{~09Wdx~rM)6L1F66M)^JYWBf2uK)d5CtK6 zuqzP=N`o|8UM(X-VZSm?mjBGV$yI6qbVA4%(_ajj!;M!6tybeuXMN-sTaqpQspyUH z=Qa?uGuAZq_xE>eGO(E$!&RYDE467eTgzd^iO@hh<Q|i-3p1Uq(Xapfm5%8Mq^?=6 zThPS#ZWC@#w2tFO2|n*B^*E&17y9zc|IXmUO7$4-N0!quUA**r9>+mn&y#rGOQmax zIeLxe!#6jufwV9%Z&re}?#_8d#n-7oL$@7<_g#X&V2$N=SwhnHoZ@!@+ud2vPg>Gw zIK;&A-Qvq(qCDTTWUmCchrwMTAQ4`Stior?<4fAxzKi=VvCL%osxq5sxFFeSiEIL{ z*)!u>bm~1tt}|1aj#=smHc%3Fn$=9Tr<vn&o^4RGTDRxgxYahK7#7hbWEOZc-66eN z7O-#HD9?M7lgK0LGm)5i3)E1cgL4{Z3tZF`4GS(u@OU&&p?MLG#qO>+Ng9DAXF`i% zot#_qwH-rGx|*1ghjcM?hoRw!bgMN-BNwKZ!*@V?-Bn{l*9~sN?%H-`u_~!~BPM!z zeWgEs|2+ic@&sf{t#oiPtr@}5m*1EH*$N&29JPy&iZd0uW6&yR>aniLqGs{vUY3Id zy(hJNp8PX%QG6$}4gvN<-aC-8DczA-MSRQ7Aq)2w*$Den7~wWy(A*WvWr*r`7s;RC zYW)c1Dd-I!<ivc`%<whf{bSAQaP_?a03ZNKL_t)-k8;qS&Bycgmo*?pyXnicDp)q! zc{d$>BwAI*P1uE}>qJHNLhuY?z~e8;$>_>+JG`$o2phrt#fil^xax9u5VHxqdRM`Q z4fG#sVL0qS{UBB6Bz;R2&thSYzrIN``hkA$!h@3Z-tS~~iGp?NOav~|9jL7Nw<u1= zP&qrWl}^JWf8pijHkurA?TCtjb<*z^#Y1d<yWOZyet*%1Kqs^?y)S{cA9rI3lTxPe zMZuQS?NE^e;ch$Gy3>n+H5nSo6&Q4BO$}+-BJ!Bo3TpxzSrMUf955{{!O6<o8@UjN zO41y`v~w1_*~N#qsoHKwJc9L#6{n-{1P^XX$PdubNZ`B8wW2A}T{HuvSV-QX2v{j} z)Pd-g*_0IaNo{Kb>1eH+xLq6Dn6~by(J>R#a|*RRcc>`>8&I!(cKQyl;Pi5IDCD%s zRpYAQPPairFe9Ttu%mZ%LA(<*X(DTJ+kpZY9^)CN8Fyc@=P~U0iDnwIjVKvjq{(!6 zZ}@qfxW_@hECqXLfjJFjN*WeS(SO&W4g}|gU4Q=m^E~PG^_7U3zJC1{TnB5dbh{nF z2H3wRrzt&w5y5b|v-=0%1NTDN<edcb5@R7G6$8(6Y&MX2V4{DBgZs%8fHMWAfZ5IS zeuRhTD}#k_);r<A5F6F2{Y9XGa1p(`r=hXN4)oG>)<lLI-he@;2IT7W{lEo_9yJ&I zfsp;G7^iT}ezbX6Mnyl#?TUWp+dLbO=j&%RAi9xD@|(9Jgi4wQ6e>l)(J0b6{Gjcj z^A;@dgLXB+s>m@$!Q>`&6rCkFX9~cSSLAAwO3BlkSS1a9!$kGG>0xl!>K@}0cgto- zLf$UTle)X4kg0VFVwiw9_M^3}x~+tQBiSU%g~~4oSs~=h8;?ngsU8q`yWOZ1Cgy4s zJ*5ljcVZr?&$=c`E!0j1%}23<k>TLZcCv<YfbJ&HNm#%hIZfAeQk|@%js6t8{<|e$ zOUQBXyaXVuz&&;f8H#?-cG9ifka1(~UnYQ^|J+-%#+iX1UlWSgfxh9Cr!lhakZWQ* zcA=2ZfJ>^(VnQd&;kpuysjxaS^}KF4$UlYD)of^*O086v43I(RA*PUO?<m8#C+B&e zh=&F&7At0ANhE;kjCJ|#+uJhz(``Uel{jn-+41w<bo&)!pM)l47UqSRwv@O;Gacwy zx8!sYiGUC}%B(1tI{^zd^59J7*bs!)0)iHKJVYeY%|Q^YSQ$j<Asi4z^_gbN5b6on zj+a=z-QI;l5QBRuYGHVr^%O+y%#{7Gb_FM=3i0jj8@;@|(#!2Oa+A`;S{6KvB2tvS zN`SuH)4ngF1DSQy77@yrKy_7bq85z8N+lCz7u&z(V%mKjzqd<qU+GmGZ1k7V!sQI6 zXp?SqzP-!WT21V(EiDvKNn$BKKd+mReG&crx#WB2I{8zD`l@OA@m7W(Evo11`TDmv zAP+;&;wFj0zcM}3J8*aPfYW4bJiJqPL9F7&1e5sCQlhpZ(Ytc;Z3vFqXgM-FA-Mkl zm1N;vO1C0E9QZJ;6oi&J7CRvcmsV#PA%biI4`z}S)|4fKMgg<$m2&~|wb8-~3u<iT z*mOTM#pPZYlT8XWql0JeNGW52t3uu3zSL8BC_!|r_h*QONAWvSt=Xvw!Z78Abu*`e zUC=zBSnfucz*1%~iBAi|<V}KeP+UV2BNa$O2%Vxgi@OkTqR;!CZpT4HL}zb+QuKHb z%gzZ1e$TYX*5+TQn%barpe8KEm=-P*4dPrFkTznT<WAD*yr0z0;p8P$VUq0$=gdrX zB4TAaR1LI)K!DEHycYY;JroS*Y&LM+_h|~Cjq4DWN0%oQ=L?O@2j+Lk07->H^zDOx z%QL^Gdk%{lAZ%e)vTMFziCrLn$a5)52w(H2R)Rr+W-IAH0)`-ExRGHo?)zF#eUL!j z53On5LBlZz7o9wCj~<|BNr>)Oki#Q{lp3QsW;HV;oqKbh3NN7F;5l_QDbCp?GU<8u z`}<svHBc|ZI|6kWDRrS;j4>;r=w_x%#62S)`S<P|@$CFUYLIDhI3KM}-AfJljs}Nz zzL9@Q(f)aJwDPjn;=s$ak8>{wHoO-o!4gcF1_+$aF=M1=H@`<UH}g+H37Gf1!td34 ze9(dX$>!r}wflVi%^MK+E6>TTv=LtV6l3`6Lwb2aEM(0l2meorITmR;FL?$g`-xEW z7~h9R#ff3u+@sAYg}e`0{7s?gRq-UnY353Kiq@NXAh<em@e=!$w6mcoW@t!)aFTJR z=IO*E0XR07T1XBgqs+AIVl*h_99R1ppS+inO#^yJrPo7g*zGcrXhOMI6T&m@UO>b- zEw%=oB{`?52|$;4ee?KCiy`q7)md8M&qf;7_P&Fgk?IHpGCr0?Do$N&v#_qU+N`=J zM=BGzf-@>%(UHWrEa8lg`8bL?na;LYHi@(r_{q{`UgM$>5F~8`^K~J5d%q87v*X1w zIEHp(HmGG#t8`tACUyROVQ}8!u($N7Q8L#sAv(_np@PG@ShY?X5VyDkSr*4kNN?Q+ zB<7+94XdwLumTOmF;BftbDAZm(S*dIM@UasbV~Lq%&kjkW}J>h$pOg=I@5zNnP$NX z{`7r@)<a<Y%Md~+!8n9@lh~A~PIN)x+i8moJ!ePma9_{J1vcK22VSCXTnYDO-luq{ zSIHuBo7$^=b6b#zZT%Pa5?Qnz1&k^L^jB!)!rT{;z9gN_YD!P0HDZSK5fE9Xg%&`x z7<LFa*C`rp=a*a;;RRzd7mHw-#vEx%$U5w}(7?#XuZ7nFS12(TlC83Y>m~~dl99M& z0Qa4J$?}8pplbnV!0&a?`dQ`uGvnj=`j2Qp^5V)5O%688=pgGhRbtY0EZ`+>ydn|h z*zBLObqeHE)WeQ84aN7<hh%q2{tNIhU_{%ql?zlJJjJXyCGzhbsa^OD7xor3K7v78 z6752Qd&&Hs>Xrp3F3`>ZY2fJ2q86t*mEsxBrW5TNCe|E^fZ#}#99gtj>f%MZvCV|N zcqO5)y~T~1gs2O(SvZWMwi1<2B*hAwE`1)LJh}4)IK-WDlJbrs+<UTe)&dMC(6Wjp zkzz$5L7km4lTZwua-Z#_Z{NPrFTZ@T!U)%#`}iP_-055-uIEtKC?YU7FwKg<gm^Z1 zZAHP1ZmB=liKu{PX@*UT5FN)0-EOZl--QjqD6{dvC><`^u*S1m^-Zlc(>`hQK@_u2 z)E#ZyE7uiu8rIAhL`WNNeXUuJTIv1$edw=Xpult(3brO`Lw$h}8H7`1S%)Lb#Ci(2 z0nK$@2&IsP-P{y3OaaD=HnxtQLSxpOIjSAgfP!g1wRZF?(v8f9SY)3CvT+||m~M~n zpHXz6S8-|{?D<K9m}Q7VvCt*9;S!tp8HY_Ao~b~ky)39!x)f^RmTM4B1vqc?NRqXz z)DTt6*&+^_v8W|rdlrm>XnR)FUsC$V&|wrisc8-5<E^nlN2FrcshD#cuSm(GJ|Lko z%uA=34fd}3m5bsS?eh6!MC5yM1)&QA4{UUPh63dIdcOY48<5>p3akHYQyRk2K!2)5 zVo_^DOq6D5H<Hj23q4F$&azus4(B8^lr%X?`%#9`Wm7z?KSR3!;GrW(6Sg?~PM$R) z(d{emhT%X&zxfC?>jcYn5{j(2=ujyydMG33*8fNLX9|1sQGinA@1MTgV$;HSVeHDO zwXRVquqf_*@tW5uTNfejg@jLHDa5^#ltKk8mKjpR^{?oUj}u?*-c;CbRIS2Box;F2 zU57oSL9-z{*5C+Gqtbd_3)*1`D<X8<ZllSArjJM_)kl#K&<V`O%l@16aiPtHXZ-Gy z8Z1R7o*JBNBW<oVlRi0t%$d_r4Dr$?wOS(z4JoF!W1%`NjC&unGoJdB-W&DS17c;G z4x&kiA<MT3{BaU^JU9qx(Hh)}+=&2`GHqi+^Uq-a>v|U)6qHhkItMiv>HtJIXnAPe zF-UJq*ct*_wN_-o$&aEw1RH>&jze9N;}i@m`k?A*o6KC6j1m2#yqUo7+~F34H8g;U zF2WZnbs$PNQ-=9DRQt9zgc~|7pqY9d24a;_7T<R}xCQRelb}Hfu8Op}sqjTA7JPne z#5rXrtya|CgAgUU8+xwPM3J)~oM|6Sn;P?yRcp|knEoXU4tYU<EQ{!>PL3WG``foc zn}P;MWRp3z*;99*5BpQHQZFAsJ^TZ@j}QBc&%Y!8WR&5Femr0QQ4L7uM<bm;XeX+M z38FHpN~BrYMs5Z1)P;zwu&=DYX_>m1xYy;b%Rw&^U46hghLV>DinGQfidI_FX67Q; z9zjAZKN9?LAZoyY<UwqO5n<rOb!D{qv4Svfx{4l{vkrlErZyX(>CpRzJZg0i%M;!F zy%xc}p#qYwKin^-nV2p>k&u80$<!W<`_jxMN;4tK&3*ROG82={ncdfas`815sUFqR zsl8w>vk2(ZQqqgsGBa8vAR_v4Ib9z{v*4&HVJO;Z(2S%K6`52x84foEZE#YfTG+n_ zmR8K^08Q0MDX|_Hzb7LU9Kr&F`GASWDNUD$74*oh8Hc?(R3Y6-T1$-?LpnID$uwQ` zqDahWfeX{i%Wa@3({aj?6L%isnZZ(zp+`AS&-5UhE^~O6g8(>CV`Rx-VBXip8yb3s z3Mqi3v}QMVEw3>jBJDh#O1KZMop4QnS{j>fKx6}8a2kBXO#lZ>9_;CkT_o#%9j6Mk zAQrOBS|kS4%I*}veGn(-91tA!t(MKT$9L?arYjVXBTrM8eU?SoAF(h4UZ*uxt8Wyu zKLcuw9)<UA9H7stz|bM=Tj`99R?{lnra;eZb3h^66N;mQ9)tdluc&TInh*(J)cQ=z z`HR;GwJ=wP0<tuVm&t<mOG|Qplt0rZWP9j8S(C3#>))^Wcs3r-*T0|v*=;L)-Kis@ zA$x9%PY)TiB)+KiaN}}e+ZWzrgD_ZDNu0I^39xdAi9jIETgbwwEoqt}i6onCBW2s7 zY<HLB;!?uK&MBZVY}Xul#iP(lp=jEaQ1pn$2^<Fj`V##Bx)okh>9c)iuG4z&PD$$m z6rvv7gvzv4U63k4N3&$rJP#11>@?-(!&*a1g--76+NqdVV3L=v=O~QPX=Y5$Yww!_ zb-q`kCiI?YdJK+oc$i<fukht?j>9v_LGYW_n9<ijy92M$Xu#rDCm&6{o?ol?7D<Oa zB2+TN0LLTM=l5@pAn3GoQVZMJ={SyvDB$zNj`;N6f)mmRCQNjoWRS0QU~i-G=+m{U zXh0!@0H1R42+uF*g*X@gNf>~xe%7>KS$GRJ8j{WTQk0(UaNCD9y9Q+#S5Y8sTopaz z?09#v7QNYsW9IPL%mFqxLn~6iyG8<NO~INKk;}&_;yB@l2}%jwf+T8_Y$xa*Zl8<X z4wbcAYw&`AOlQ8fxi{#-_h=YT8_R5<-?nLtAR-sY04FCoLTW;wol+XwZ02QK=t3?& zxIEaqGDsf(#p)W#59Hgtd8n2!<kXvF!-Dl5$b;XqhDZLC!hZW~{MlyVCw{<Z^YMKB zs~V793C%HK&<|&pH0q$mjRI*QIQ27sbkiQB86SI5Wm8fV`>DvZM;8>C#gE9Qlw+@~ zaaxLEd4`M*rAGK+<&=$5IJpMRD~0^?;P1X}2zF5A=^dr!jH2Is;2$$BeB_6e=Iy4k z5-GOL7kwOr)MruJAW)5H1}U}?C@6|ll;X6XxsI~Oe&$nS)PxuM5-B;vk&ePG(v1kX z+%R#fRfXEK0G}dVLk4h?%s3^@4J?6kP%H@dBePxcfJN2(w<U4d(|vTocDDG8=C~?A zN4i6|H7`Weh|bwubXi5RS4ALu32k=2^SY`-*I<hYASHdGIle!rZLkO;gO2j_Nq=kY zoX=u`<}OXU#Rm=}Mco^iQe3NKj!j@t5Sw0JYG6S}JG7}y%?A!ZNSI{t$5@k)B<WIu zxvu0{u%oW_JVE{hCxNow&%zmVk%+S5f14BgQl>i^CWy;QPvs>YeUF0R&_FJ#Mw|X` z2HVkkm@E&3K)(`brq~4RM(d#0G82K`?XQ>(!n<aMd1u7D4A4FkDCcfber<}mpW(3O zI=_Nx4<Rh9p+!hdk^V?>)kV`qJ8|8F01~sJ<{z2ga>740AB$;0oUY!NA5g>O<FU}6 zF6!lHCJX+}5tQfa`TAr75>uELO3`Ms3b;9NWqC98!h?GVi6NhWeNwHKeK~VOW}!<d z;aNqn9ds%s1vcSy3Dgx^A*k$}E0jVKf}LQh1bGj+XbBC89agd&7VZoS-0YzAmr(R9 zVaMrjMB)L6R<AqFPvj~S1rh8fH$uSuMDI;&W72wid6_83X(`yX%$yJI?vJ172m3E0 zIH+H8Y5eq&ct-ZoEDu_^JG`m0lNRUqM(zMM{~8-!cJKPFHKK%+Y6h)IZd8LUC9Tvc zrevi_w4Xli;5Lbd51QK{B9^t%yM%_l!_Oo7N1KcSZ-NUTi&Lw@FpvN{Rs4>%mN5C} z<mJgqD+2eJVK?09{r+wl7Ja77AGaeE)990{YgS#yYHhZDHM!a7D#lTR0flftJTQwW zD+?^?eB-WzdyrnDC`gtNWVtI;WgW;8=K0_c=<`@KND_ZW@9|N5$>6X7f3Z3wNo=k| zV-|rNcux7E@8E60Px(C&$$_tzC&rSB&V^tzX?tK3vDx$D5TJnjmkz*6DYWMYV1@-R zO=B)#5pgx-T;e$(X(GQ^h<~J0z?;Gs=nC5DXL0;Cp`5}(Va`>rT%c0x@9s+%cGXy{ z_RBkmLqfw1;Ri}}S({Kw)3yzg_*cDteu4i)J)W=s;0DCFzO<&&@=~2f(tvsKVB#%w zFOeq0D}>AIoB=oK6+cMnztZRC!<M{lhX?Slj4F`%<{@#HBaDLx4HV1t9f)k4!dwV5 z(<Elwyn&DYZh!OvAcs4&96*=2hc-5{ZswcAM2M*M1|s8bYh<7vQ2dU{pG3N$7r9`h zrJ#vdBQ(S;A)ZV&9_%rQkb)33r$P5FByD^b-c53u%z25ylGvQ6AY@OoGnh-D_%N(9 z{XJP(#7Ps=gFtj#%PcAvMGvNsm6NO6Ha`X%4L}iMvlI_(=7=IXjdEsz7Y?WbQFIL} zrP^P~kg@{rH)At|s2qjP``r+l^M2Cpb{p4i4ll4MT5Yt&!X?W@K;GWop^@5X)jB@g z5}u>nF!@@PI6atiaLn&!w870&aSMh_FfctxQMN?(ec`RmG<KAQnWR)-A31X)6xI{5 z*$93w>%=s;TEs9C?T!~y_nmcmnx+VA`t^8TM?<^$GvfU)qZ^%GdB#3B?|*x@Cq%tz zySJ{hc1{jix?Z&TE$sO+>x^&y*-SC~=p{SXgYAWd+a{Nya&|A?6-&qtXS-&HcCNTt zT*KR7-_>D^RvH&GxB|L!8}k+x`9L(z%X{xw0@v)YYjw$AQPcB=;{9wsp0EGR24qgB z3Ax3<o7TV2hPfOj_q3u8oa|$10~bOeQ9=$$OiJ1rE`>=x6pQv5cpdNaGWE|of^~%R zD9mSRD>iW_5d+Gp@4Ru+NgEqnX#Q{y+}MfAezO#bD2Ig^vb#*>0~wK!E<$oPKuku# zrw9OZp<0L2RO^i-n9agLo^mg8k}Nh|%%9yjvuKslT8=k}OPtDj9{?E;@P@S(5@|-= zV@5}-RC$O1!T}j4%ivO0bg554_oPgDD4lCORFhF=5TIUHb9mZZ5BxkKhbK9-jY7VK z1ae!^U|Ss4NJ2r)qIq)IODz!C#%42IxKO7)4F~F^RSp`}QHMzW-h0YDVRBo{=(5K~ zyQ*Pa676@RHf;1%{i5jR^eiXjL&OSi4p}}D5ij8t+2HG9NCG!3Q#*swcvvM*nx~cB ztTdhy-)r;!0#$s@w)to%yhAxCStH|qhDIEh#XRouh0Suf0F`r-7#02wfl{<D{;W&t zXTscalagJe#3vy6F#_7*!wNUt1KyZcX6hE_tGS5y^WR@Pd+~0)Er@sy*~%`DSKaJB zD`X>0$q>k(^v+;X#&tUXS)27ADy=sS;z!Mf{B%s>!K(a;zvS6`JYWB|1_a^m==LEC ziXrJxQD-B!>cue&a&qOeP|sz#3YRm*3#Y5Zh{Mo20f+1apR(n!tVtpPj_-;Rti^CB zio>4CF%WKdtb&F{SYn#HV8OE2$jKfwxoBS4r$dC6kFoH@X2S&gq3FQLuOCIVR4a-J zrpt9syE|C3vH*f5$&n28Id+OFuNv1BZx9jw@G!$BYwgo`bu~)GrEKQ1eTMlt4b7cv zyZ`}R05lHKQHhsAP?9-9;=Vy%!(7AjT6bwS8TMd24pY6dDc8bvlu2tO5Myu9NTgv= zaNORxH(?gYXee51W1`J&HOy3;2Et^C@1+!K)AdSuYI>~-JA@#RgdXg|3r8xA7AP#K z`NCol?RVpJpI0ets0qwnDLnbIAeEnoQTcPl8;>S!MA}5^CtLPRU)!9`0D5(!LamBG z5b2{Y;B>>F*pSuPix#TlYCo(rKQ%e1)x{7v1h8jjTcl^&>{_k!MH59IjiA7kB%(_D z&HxkQFJPtp<a>kPpc@x%F=cnq60K$@OMk(stX>vJJOgE`{N5<t_RkG=QT%8>=lERs z;}4Yp69jIGxfW^-u)m{n@l54LbZs^wd*QF4ZlUJu`Fg(o%NmgQtc96W8W*`mFVpo= z3>g8Sk8q)In*O4?&?piZum&3}CZAfMR7r=VzyOBB#0lYf3Bww>*!Ne|VHHQR7o2j1 zI;4-7f1gCe<1(FAHrwS+4-%TC9Ev2DgB*baB@~pr7AC5}>HVa_O!u>quo;Oax>%$> z@$&mQeP;;=dO*-N7MEe1$h<8)GCFr@C!89SmD8QIKCoWN*Ew?HvqiOp=8G0Iq_t+W zLKmY#A&rP*VWK9J{?<GP#+38CMe5ec?yx=1-=Ux&m^V|;<iIAX2cnU~(bOG_%M`ea zIpC?QRqvhn&;pZ9SEQO6p%`396ayTw5X!>@>0%nB=rotK2#Xa%LMsyjYoVVPQ~0Z~ zKrX!3_V$q->2<M>+PC$$P1|cOPK)GCIBQ(p@w>u)hg0=kU~Ddw$~IJ$!gDKN)xAvp znF5kD9M^okjDgkIS24&^fPSm)c7<c(k_R%@s0Cp=EoY1ey(a7Q9XPcCxtOkkE%^f^ z1cMRtn}RvYntHp}pM~Z-SRYWH*vJlY`2<45pZNE(n03g4GVV0+%w?jqalc2DHFunH z=|FXnEdSs*zIs08Guy!BeO^s|{)*n?iF`a?|NaJqHr9)wBk_VBIn<fPz&1Ih<n1oB z4*cRc$c~m=oXwvoWfm;c>R0!Ex55OBMq*QAu0~;&ojgh)d!UqkTXp4L5$Gom_LN5! zjG4!tA^n|LH69#EWVq0$R*3&fBO+<~F0O%(G@<$T_w%HqR_d)$XP$ij9tHh#4b(hn z>W{NVJ}0<|biHMBU246J82r)3yy%o-zQ^w1GU}E%?>i({gT*GI2^iYw=*woJJJ+eQ zP;R%IWtK2Ugi<Vsu?;PYqBKkkO{$AfwLF8E9*t#a>&>R@1BIx8RjG~8U`I^-k93>- zt5Di4j63nv;b>%<{(Buln6MsDQm1zL-ZM-NDxp3^se!Va#U}JI*znriBT*&6f_L{! z%SQ!R&Q+nki_*#gk+i1OD4|e+!aM3@u(27>CxrpbZphHrPq3lFZfj5G%V$Zgnb#z@ zN0lBp87>1Mq23D-wcuc7ftp1f;O36sJ2jft&fu0skd8jyr^eqE0yOyo=~>kvsP{pH zGi$BN&XI(oImtt9knPuQP{5EYBuWp2Oe{nVLK74WM|gjHFh9g>_;IU2(Qfzi`jRc# zws1rg3AAtEW*M3p!91@05cPA&#CQBR{@!=^YhTai<N5lVG$0GXIMj0@OhSFL9YmX2 ze!zxVC)Oa&v;^gRE`!Z3$#6E3K4~Up**7G+OJ!FPj_y1=ZG^@<1o>k2lc$aM2VaCK zZ9(XKknm!A8rWy>CnQbkmPvn_R0UeXX5-0jR`^~jcxEfd`~VYis!MO3?%f^A&elQ* zWEUZn5J&_K;z1^RTR~0}#gC_i%O3zL4JTgn-Z2a(m6CN&6c6}KqCiA@a9W>=S+xtr zoSZsoCU!5t#VUy6QEXgGpk|TCY}lcI#_K1m+ud-LD{;;BSnNuoU^ECF^$@#aMWCmi z52T~FZq~SZacZfNz6Ms+HnG=zpcK$^fS5gl3xLFxT8VojX`W5P%w%eh9RjKb7H~(y z(Eg(A;0*6=ZKf$`S@<&=01V>+<c)cTY|_SLXfx>!j#7|xKJK%G$+<V6Vui40s|0n+ zg34YNJRI-a?pX_8Q{2Ta2oLjqD)2c=r_M~={dq7{R?rsODP4+UV^Af+%c~|%w!;%d z*ev9A7RhJ;Kq5<HheIIe8^}U;lB>bjY&=*vW^BmCS^}!!r|M(AIs?C_MCa&i^;lkV z@jmN$wzyteVc>L2WD9Vj;PH+i_GdICf8*D)`FOtmHVud@C2rc1I77qEjgMIkk>aqQ zT%Z-9y3I(+*YHEU5IR|LL_O>P?b9b+H3s?%`=m)kNOl{|02@*F_<{gN3oYlyO5Z{V zpC)v(+4v<j7W>Rzo=!-KM=mP|SRiehllZZu1Y#4COPsPr4FcN?H0VIknMtWLh3PyS z-HyX7KV#Cg5cPR~aub+>2kDWgdA30orvu961{(#n0;1)hLd`z%DX@~S=G(GqOL>(m z?|>Q+x(K6_$;TrA03ZNKL_t*I5MC%VJEKg&xoS=NY%VZGZy+oUuK!GZ?mc9M<a~mV ze2&F!`fB68yN$Nd#HQ(h^dTazrGVR)m{!9nS}nM5NuX2o(O8v2g$p(6)MNx1R=n5R zs1zQJMVMXav!gUMT?2gz_Tx<vSpT6b3+u={f)m0fL6es8GSz(v2%**9*U<`?$jZ7G zm_dYDQTtk{^_ZglzHDl4p}kJ-gH13daf{z0hG|YIb)pCovT+u4Wa~;7oBH0xT1Yz! z5-O>3IWzTQw|XYwpaTnDS9rbW{R*E(gqn0}&E4DveQoZ!A<u{)&`=%@bHal?*F=#5 zNFwi1^Lc*ltPSOAG9Q9vIl1Ca^bk;h-Ei;`Y4GEze<bET%<}jIOt4Cc9=y*5V!opj zQqGLQvnhm9UJRg6L$c|a{>5#>X3+I)KAx}tcmxDDA~B;94%Cx1ZFI3aT_#^Uh&^gM zB>R0^*dZq?a1P=}`_quQAf2dlpL8<*6l}d%JqAjb^Stw<E%p@IEk-AbLL3eOq*%pk z)?u?m#~3dLA*hX`y=4ASu?P}6`=pi4B4%l-pdoPts4u?o=pKb4bJq*Va?s|a_mNQT z;g4Atg7mpSlH-kA3&+(No8l;1UxvaD1?&>K)EIe|!|I?(fr+qe8W-NA{ua}U#D-M! zZS=bxbxiC_UVAFe){GD7wAg8@5k%pT$epc-3v&uxBnq@7@#0=JA3EjL`&w!R3gZ;V zcOfdCOES{fM`6|{Rm(Fnnp@~jRIMJBxDEQu@$zB=i`FG1%$s`^AQu+a*ZSh-=1J2M zQa5vmqw5c7A$<!vY6)$NaACK_wE{UbpAv0HF|?33gJY{8XMRnou?c`?PD5Q6mm(}s z6Ix0+|3`92pSbv!#L+w1ebB9n*FrzDO?z0|9EJP&{h4Gz_8h0=Yk@qk*&OG2J}%IJ ziWmEg6(PsF->H9h0F^*$zrn|g6CDvzd8h?qU@!zK)j}ELPxS>$bFlmgSxKq<;kSB> zRDbG2QR0hZts-ea$m{b?7q-fa8O%D!k_3$W{FuUzS`P@s;sDa_B{-6v#eZMt^n5*E z*9}OfqTu1dVQ?gi3l)W_0n>%0&}Oem;=hacoii|>;z*ntjgY&#Op-+;jCK*EaQ7RA zhnZ6mPg@rodv7K{8#d_`T&5tKsC6OfBNUCx>R;bC#esgTp3>V_`jJr1r?Y~7v9?`d zd(?6mg&|Fha`7y{lb7jjf8%2ozp|gWaB9wS2bPK)bqwPLK)7lncmFlQ==4DE;piPS zlxeLZ^=O|{Ls=N*DcNC?>ZfGye5vgz3$i0AWjjux#j-=z!g8P=#S3-KDPdYe2uWxg zsmAd$A#Ehk%+UUKCTVjjauG>WZHFOth0SJFubqYxYV%>{6mx+WX6jS0UMydvOcYeS z;Z--TIlQ3MfSXlv7%a>^2vks<3%^jX?DBRp!X^9q9CIwvI}}s(c(5VQy-#pJKx-Pd zg=x}Am6tA$2h%V}$VF@g_b?q+6saFLVr@<Y=C%2`LXi*>3HJnZMDh?~Qy>ckom6y> zim0s6J|hEBhmeLI>gZ2s378*Kmw4|Q#oMA?0$M9DEQl4VT%!v@Yw+ObyOW*w-6t9o zdN>-q7IMpXPxW`f#LIigs*T(td6~A%e{nNn9dA0?XlLaQ9CR4wK7o(t>u-vHB+-P# zz`bb2D%*!$gwynUEn*m^y?VF{So|@%7==lra(6j~9!sP_$Sn56kd!z+^8=OEr`V?0 zyaYsTrFwuQFf=eh<_^=cJ}C_qxYw~0$b!WvP%gnjHcoTGG`@I&r@>>T6sK8<3}PB= zwgT3t`F@9D+BU-ZUR}(W-}4yOph=?vF%*wHax}u(#|guc6z)ZF%C*qy%I3&oHzru< z3b?kGvzl!(E+o|3Y9Bf#_p$I8fp*43vx&OaPm<PMOh%?aQ|jS493M{C0lHM9BVAE} zrSutGI4A#wsq{hJk}kv*2M!W5b<$}cu1RhP8Cm;&i047Y4vidZuE0cb{QKdcHPIY( zxSPm{uIum&OSFgf%nx7Z!-}^$&z~+dAIaT}36Z*S;W_--R0w9f9?8){OJ;X`mtdH2 zF|CH7L@6m}gd(jZYS%PWlZk2x=*A;TM@|E0a79xZrrIU*#&(xd-ckr4CEB2-ye%9r zoduoG7^mBe)Ge{bFAu6>hK5{W{#z{o^OZ@)icnmgo$<TLWn%Zzyvc*|9fxlGz|doB zI>YoS<FyUG@fqRuXY1f)^!LaFW?PfULnP!=p8*GO=`%22I2&%o?SJl-k#pSZTziV> z7a9GWNS?H-=j-p>fJC}Vu8lEV%MTH@z&R~H%1panH_M24jA1j!906KWq1WP<0<0J< zc(HIL(}FNyl#-y!U@jDbl*Nl8V1vbrA}K^_1>iB@tIP>*Yv<%r$Il$}7m|~d_l{L~ zaBGv|GzqfFs5JoOV&+o3pcJ4|UF?2wnnsS4lv3zC&*?<6%TLy%>2Ae*D7wQTyq0C0 zC`u^Lj9mjvIAt>f#R7Zh<w${r6S(;8oUS^h&~Y483QrMrN_*#++u@?>4)rMqyGv$q zPCb|H!DB*h5)g2+8v{@b1RZ~_P$}cHo#&l;6QVjPfl5&-1rtmtk{XiW7I;C3$eDu| zd&6Z-us#P9X{c30D#--(WfqDWuviMy{XD76>#c}L)E-gLFL7$lea$j7Xr5a`)HVeo zOu@sXTVl5PbW{q3tWcPSd*;AJPscq{yd;IiN!|_D=V{RQin)JnpP$8ESOS`$VWFd; ziy@A?Qjj+ebE==nV)DY*?pD`)`)f2N{A{v>mW1$L2H!Gty71XsYq3GfYl=2|BMdg; zPICR-wrVfF2<ZK2x-YSr<*UZ5Ckwz2W0UyPY3HAQpWV;NBZM#=_j0L(2|vqQ_ci%c zW0ITCkI<9c6lC2<HiP)N_=sE>d#CFZw7bvO^YwRaK=?XvDbLsJz)4%pC@Na?h`)M3 zI0^i4`X^Bo%1HwfC)F`g8PC~OoGdO--?R%zmk|xw5*Nx})aAkbDvt97ighohRp4mO zE6JuYh{+$|*M&JwT0$rsgs>5yLD&R3B(j|nZBG{XS)H!mZa0!z><S|xTYJA+3vsP< zzrUwIzz3m^&@9AShA&Ui7~vR0z?fE-%aD6`5lkpuH4Bw$twRW1tL0Ky@rT!a-rwUm zrd@4B;CPD4sdu^^)ePMvaJcn7M*&}lofs7nDy^#ofP@Ok)KK)`LdC>|OmA_2e|LHk zMHd|bUU7I9^0V6sXgrb-4jewfy(0-uOSu5(s+A(mbMQiPXd8e^g)VdIu-3aZJi0k( zhDa@OO_y4xJJ3C#HG%<dscz1R=0w%km(tx>+yQLa%ZSzx7TkekK}XiyI`kaR^h?*n z?HUAch<#sWjzbi*T9&QOZKI=lWVH+7kPnM*;syOc1UNWeao|s-LQnQ$@XgkOIuS`4 zi6tw@zIoZc<<+Dc8`edv|J|=$gRvIYm*7y@P{<xa6Q6Oz+U(O8KYR7Hg?In3HX0fA zP~=py*CeMVoIl1}mZl<4adrnj^M?q<em#FbW$e$s_}O?oU;h~hNSt)x@|8^!A(`{c zylfs}ekTd#SZGL-G!bkaJ;gLmqvAx$3wTMeGy`3UR#G)>@-c*r#x?fE)fo(r1PfFP z@8Jh!U@bvvwe(I+WN24l14CMf&7{TCtUYa>LxGslqAqxS<~Qhj{wtHecURx5QmD`3 znx<`JOsXI6)slV$ZDsYB7v`zaA(D5P_V>OvbDQt7(;>*N2uO{XB=lolL;J%Ut#Gw? zE45OsW#n$C4q;N8Hu+@s8cmv0P`X45>ef!W_eQr`sLn6Zb6TJfy}i8=6{cIMmW9*1 z7=4OFh^M|tAooTO)8jT~3}65FO0_y_A(JoWF$*5d$FvJ{1gD~a3_^gQtow*J-x4UA zJk!Y8ke_i4s_H*Xn={M0;_F}Sh1HH&Qo^=nI}|pwh38r{;Xk9jvaD0^gy7;Hf=!78 z!w6VW3=T~EQ6|q?H?in$!!G{EKa)^IMFMuyV5b^EP~)z^o2ZBmN_N)ZyE$<*FW8|U zF-)$^2K#Dq&w*c*{Di~4BU59PHFA6RElMX`MvfM=C62K_VK=+Z=$SLRMc41O4Qiy# zdpe?@``dv3@<l<KhFe$lI$tJ{e*zWx05GvF6Hq_N4lTPu;dX?`+XnJ8$lC6AT>Urx zgpxbDaq$N~^K25Hum9r>ND$tVZ-9%zs0GtSNS;GFEamot%4W+#s*^S`Uf^JQ`Hlw- zX%|_Ai}tK@0_1^gF;$hoLf1Ea3I6ke;)4@oc)vJW6PwH;_t*m!%cRAegA&6fHgM>+ z0*yzQ)|<`ZwAh`L6agturyi$?L?J67`e<>mm@Lf1$1w_B@j~0gxtcvts|)C5H{cbj z$BjxIG%fep2i?Y|soWm87waINW^9G?k_OCI2PWs--!(XG7G;)8(K;a%7tch$j(s{* zDUucn+)}9=Lg)RY-cGt5WrhSIdN9_}?N+FrjqYcg;c7Fh19Bt==dQp#qM%2p$3e&K zHk_jhQ21tJR47xdoIh`FNGxv4970KDX+F^uSDmkvel^~+Qr2aS^l6@!vUkv>L<0jW z9J^aLOZTz)NWw;nBwYJasMdq-_q!Ln@Ei{<TcU<abi)#w!Dr?!=FfiA`wps>?*I}T zn#EaAa)lfQ8)Eb}FV?)7jOdM^pdOIdSOBfmDsT46rupzxQnba5!L+=|o#9;{@S$9N z7yRmefDkgNsGeXG#T&zv>uENwwSb7^vx`5PE??OZaqh`4|M;WcBkbSIo0cazp)J>7 zukW~OG`_n$2IMcA7;NQ%akROi|4ICRn*k@op7P_3$A{<$E}Nulx_*z3k*~k15qUN? z&)0t(0+Ovc!=MBXM?H*~qtzku4TB|OepqEqQ7_5qNiGl++D+|JKM~4niJPm?;5&Qa z?p0GP&@q5ZQkWR{)SJkf;rD9;C*gf1G!z`tX*p;aI9kB6i^}ui+%5fGJoJw#*z-y{ z4D>YUkgZ~93)~+rgR-J&)HX#ee*fBe4uNp3vml(sY+))qrp+Wot(}ye#CVw!rui5; zjit4Q#sDiN1j8{oS?}(TzYrdVlVx^YK!<f8oPU>U8VcQRH#*xHT*D}Fy~pJKMztO! zy-}N}7<I8M4Gewj;*;M>W#}n{s56rY&y;bZ!qq5*-hhq<;C8#w*RNmcI1b0ym|;K= z9q_av5NINDcqYltd~|mh$_Nnk5N1e&kHt9_6bzQIie#7*7OdMosd9sM#R&oQG-Q!Z z$L*l|c?Zg+8)I<h>hWgEj|G~3mm(XRXrN)@cZ}HNV#Q0LDTlu=yx_6egyeON_a~Tj zgu(|3cXJ}^+qyENV1)Z0aS&670K={HiYZ00q&oAe0F1(Q4z5Jqb3H&$l_g&?^-sC^ z@CIs+E^}%?_Nc=}QN9BPH$}Bvj7Kg;FTqf4i*{T#BD8n-`lz5yL%x+oAj`eV<^YoN zr*J66TeRc4Ne%T!Da5^Bw}szPls_uqKVoWao6k=)JU^pxcs3r-*MD9EBGF+e#7<)Z z^yQ=>ZA6MFlr@}fml+Zu@WRU=P%O=K|IiXlK_vtkZZ=uLV_z)DaE(or?dGv;jGH2p z5G~NcJ&Alr5lD2NLpO6AH6lKO2WB@^WoSqC!aB^S=+Z+VWJuUu`1qUq3CV@S0<}+P zrf!&d?`^tZ5!F(tiBgV6;aqDq0rh#FQ6z3tF{Rpk)&SoBZoAha4KJf{ALwduO}ZT` zyS|8cbD#AfbabtW#L58EFOzPFnThK`R0mzH_eO7TZ^T^a_VP0Se5d1fvyPc(<4L7h z@l<sp&gsx&pTE~y!4;~+d>UD&dWD_)-g-|weDA_^bvF$=<fy!1#?Vj!@f195ur~DB z>Al&{3luRU)5cL!pXRH(8pRZ7@>~<u!EAZ#I@!-tjfq?ek*#Ml#+@ODt6GktH7-sk z!Zj4Ioy{JbP~>jdGqP>=(4b;d!==DLLpF#4b@Ott4Fi{*#b@B+Gi~$~F%g}SiWU8! z!|vO`ZBMmAh}xoaT`grPymJC}rgQFGxR@_c55C4{zfY*Wwif#sEv6mi$%7XYg8Z-% ziT}Wl_CfK#5ulGU+`EW(ayV;fLAPa-CV&0+k1u01n9zSeOa*#;UcRgG_#xcqAqw(6 zE>z#^()DaUp0EEJ1Y~uV^aCb1v7qZ}*yI?B33)gOa4Xj934tv3lJOK~;+X!+9Ex^- zfB$*iuqE@%%qfd}`rgS3%W#btQ(#l@(?wy7Q*thT@rrWPg;v_b3<IQzLU@J)Z<;Ab zH?*KMmoh;iFhNip6xDKZ0Fl3EbQ_947$)SvwO6fyS_0!QxW4yD>HCQ4uyIl22a~S{ z1F0}oW!K-7nd&_nz?u?ttz7qCVS#vMTYRipF0;rY8BSQG(s{qrmr|(|qVsg!&+Ry< z)S;0e9vL&O_ki?mnDC+5;DQ>g$h8jw>iM6$(#$5xkT0hG-lANj9M-2!a5IF@?TJAj z(gdE7@f`IwkRh7-Fdw`-ZBi|H?OBJ!c7i}b5ieLvnGL_{OhC&O^VD@=mAw#nYEX=~ zj`v$+{x@G4l7#26DWP?+z>*MOq;vB0VqWQTN_P`zo@h2-SI@<+Fx;UktHp!FW-mD2 zGK9*?;s!M4K484S!5hr(^`JcRq^ss=+<^>@^%DaImxiK1Q4K+q)+hyvF0bxITN)>S zN4+Wwy!NR-%F6@|o;!)n{>7i=<?Q_2r=@_BCnJNj1Bh&FMZnxZ!oZGF@a`v*y&)`f zm%%isvXTD$`KIIZNqwKEd;Q#o=J|TQ{%aeM-NUu@F$o&iU79Gvl$V!j1lm3FLwXjB zt#*|?Qw)T|fI#CQOAvJX#uq)Za{yn?7_s8*QyUI}t5wWaQ8a_*br{7$n+*oXa#Y3M zTF{caEz!<+ixF`FWW=&Uyve%e%tk-`Tqu`m-Recb_&BX~y1l$uVT=t|Yi&|wc+D-L zHBp=ZalpyodPMNUf_{#yqeEH-N@RBr3s~qvvy`XmyICf0)+)!OV*ewUQtR(~yWOZT z)3>)bI*vL-*>ioKtx;va9=D@Vl~HiEmJ;ppQSGj0F_eNi(RWfYAjzqS_c=h>0m)GW z5C60L4r|Wh^B9_9aczn_b+HW`y7Z8%ph2W+5J1V~S|%DL-LLUcE8XR^g2pI??F<5Q zYp+6Il{F1K#aQvy#ywLmc=jA7rQ7E*pvRab!>Nhr)cZgzOW`>Q_O&~j=T6J~fD$zZ z-TP2yw97A1VSCB|$_7?}y0z?;vPDWvM>QSHtigQ%E0j_KoiY~O9I`HiyeTRWp2-`y ziPQbs_6Fa9;94R7r~%+BU&=k=yO(iXp*FN_G;;$Q)86AbgU`EPH%Yp~v~D+gj?Xn8 zN{{4C9*V#^`oyGZdHg=9O8U-b;zwlqKZ0UBk&ox=Ke_=)QC0B)W>k2r?l8RT6JRq# znw4#24EhYdu>KV<!qM;@-HBAN8w0NroeU0mhLQv))bj8oh*QWl`80%fT*JwXo3MoU ztF<^SsT317yLBlRfNKG6Brsu{2oIV{4D1UoA!%9_-KDzQ9_PBAu_*QX>>~T@$FIS1 z$(A^!)8hue6h}~K@nwTdn-p^R93hM>JFsZhgCC}a3sIqc!x7#J-Pm|}F2dnSC9Wgh zOe$wnU2cb2)SkUt6MeQu@9*za4|V1$_Ib;#P;cYsw|3KAOvG-ERk6oj^s=~)QS6&F zTzL7f{<*al1j0QUe8)>$n7Au#Yzo-RNOP~EW(gHoZ35J)94My=>&1%NT91*y&IJl% zp|jD}8OonAe?QJ{etcDatZr`Gl<nntlYp!-$NeVC-Mk5Ctyv+y?z`msNoqK8m?ILO zqkTPxhzw5jRm=~%H2A!d%nq>mVa(Q<?^Tp87|=OCbkN$|5IRn_6?{<;>i$}os8b3} z+%+KIQCjjvza)9PlKq<4j{oEeQl%>gu1BSKb~m;)lV&P@UWkPb6XLD;?Ax80OCxgC zbZ5k4b3ZrJtMAcKTs4$Gqrm?W)Z<5yl4tYreEpXoAQ#+U*%eA0xaACVnVrzrCXh1A zD1kx~ILKE12Au%3KkTSU?<tvjXXCnI%xWPv{&No}0jJZ!8igGTOyvJ(?_9Us$aOSJ zgwoaBGw=VJGu=IX>eMNx0`ns-1VE4xAt}>od+)Vsm7P}V5@L|}aP{*6v>jxmTNk7v zYue1b7l{{>6YI_?*FDP{-+QN>r08$!BGgWM_u@!rE%P)t2b-_WF|(~>^8qts<?ZdQ zysyU2{eIt5VYZ0QBCNK0lqo-NBuN!2wbPpYVJy__b+oD;XlrAH!`*s!U7q+-oPU#2 z-fnN}=Q0JvnuNOSU_`r~>_Zywb^9gx&Sa|yx>;}V5=nZ$&!xP-mw*4ae=mRhu|x&_ z{{F93l-$Zqq`c4f-O$`-cIdn`3wV3Gxm2b)DAd$3SaE3vNN$^gpD<m*;}=V=rZCn* z=XqX>(SvcM>J7}L%bM(|n%3}^X<C~b__;J9;U4t!RqG1TvRteAR@29(smwap8jtP$ zmbvJ>PMF`Wn)SMbLJK!oPD|SEbZKVgQ`vSSu4iPnH_S3Mex4hH+Zyn(%b4Gz#kE`B zI}@76XjX(0q90qWiUi}mnI*Co{M$6SOnlf*Zc9qd_SoQBx8iseTrMJBN*WERXPfvD z6q0n1l2Pr)#h^#$XSxrgl;Z3ArKCAc&6!t14Td?E4gvu-dJ!E5CCqCQlj<9Xwpyo} z*BXA;&bnIl*0?z5jU<Au6(7ACk~~s%TnqTo0s`>?2#}Co)n<`|&O>Y1wWdw9`9Nw6 z^vP``#iwvhzBtVujbbJs%UXOL_bxZoE*yB9F*4f$W_wX<30^_3FltAv+J!4MZp_Ad zUne*_cVCerH>q<zoFFPbf-$Qp^q<@{5Z866rnYT|fyO9P+@!Y8Gl`p8?Pq&bLt(2^ z*`pwHb{1|k8y3Un{r!EN6h0N(U~Knh+8+3;(Nfd0eM+32pU@8cGU*`J!?(U~o9?j` z#fMI6X4s=^!>d&|Zbr>wG~d@KPV3dS9f7oj0e-5<><1q&iFH@1eoff>Zb_|K+Q_Od zwIBcb`+Z*n?|;7+Deq-ki_J9()Ojv{{P9OMl6PTYZ(T_RtxebR9#Er&i=UJ(p_;p? zBXY8Bb{mjt7%%A@0%qoe_~CiBE0V5}ymsD$mizsEDOO(B_<dgH-b}Z3296e&Dq2g% z)`l1*c9(0t%F-Ez=WDQ{Krw<q^BE5%w2andPbe-5y%p?Erf6UGPKI@UM{xt*;$Gqm z)U<a+sGtd5>zvp!@6Wr4BzUsb%%{=DNm9x>U@}P$bCErhS}LYhaLs7drpuKb?&{N- zv^j&?+8J@e`=Ik~nm(nSK!*l3t4(}Fn}%!Jo2D-9UZra9JL?#ngK*K@+0}gFFfS<+ z0I^73vew7#<Q)H=%hTfHvr9H8IEUX}fHVcEr8L9m{N0%sPKKvw+Me6jQ5ykp(~oVM zfKBfVsW5iNhMkbUPdrysSh#Mkt2nUFX$Smi_;@PDC{Ukj6LYd{@#hrhZkx%{c4~Ik z7=05V)3jc(S)Gwp&lWX}m9$r?@6Vbo|G(5OK3m$?{r!D6d}h@mb1BnQCn-06EF*dr zT_bCY<Jox3*NOIP>W`YCkXkgG$L6C^X=aObTOf*ru3pAVKS~)Yt^?DW0yod4sIDnM zrM%zoE+VJaFjaHRYTC$pH?VE0)7)C{Nh@rVI5_)MnQ4tMEke3>npreg+v4->+qZQ_ zhUwZCI?!!~h;4`<r49t#=3Z29v+iqjtMgfYxA|iCD41;~TSbE}Z{C|9sP~l5I+r(@ ze2sVs>&ckW8j7E_=-y3kp0#lYOtM5mw1j_4>XgLgE&7gnaZp^bUhd*MLG_HXEVD~W zafa<}T7-YJp4xdNZLO8MYg?Rn92%=bBTY-JYw<OGwc}ZL*rjb5?ly?o)c2`vkyUp< z(+$htt8GWdW^k$<!M;UyL|46Gy1B(tv!F8eh^uCjaZEed)TfQ6*7i1hbkI#IOYGX8 zen0!98T8j&yWab340+A}*($4%=!l9-@~DS4AIKjnGFBlcbcvi4HCH=r5%mCAA|PR) zRFenm?;7Ww+9M2V@|88|9949mgJEAn?5sZt#iN=O!maP6=B295g4%P8tB0)AgMUAj zWjC^#=!>f9{xO++Z=*`2H8Qp7VpX5_{r+BV(`~Qg$UJ9uqu+{-{gha5oNmR@vKwjh zp0cn_8jjyr);4lGxWwgIuW1~2b;@$fF`upAn`bxIWQlfEgHhMNw*^DXnwi77B8?C! zO}90X_H@c3B-y%ZjgHo%T13kIeqW+FYvkeEw{PY9-+!;s25BQPT{A;duWZ)%U-$Z? zq_)YnWp>8<=9Jyu$FzQ3>RODxy}gyUw^e-ToEW|8(pl=doP*)u>k@3JRKg%W4eeP& z-di>Fq7cmn(8<!h%8irJ+P1qfN`qkEet#Q4Xw%0uc;j_-1Vp<uosw*uu_Z%Tqw7~o z?T#gh+x1*`qU!Je_U*0Q@9*XPeOa%qAz6HPKX3cF%k5I2#77KOLc=Z-^=g|Ew4Wri zA=N~s8!?w$4ci8|7~wx_?N(T;De6opX;R9n3ewc5tK(U>=z-XXX<||P_wOTu>HS~w zCLhU?$(>b=kkD|OYO`K-BzCfVt;Fa*(<my_so4O<(TtKtuLQ@A6Ccv*fHd&jYar0Q zIiP}e001BWNkl<Z@#JJQ<%;llTtFZ`;MWu&rQHjAVc{ZvxS%b{UUI0XnkwWvElDzj zDiHuhI^Lxu?%%kuef-86B(lE0^|T7bq5iOz)i4$<oncGTZqO21ks3p;))9nL$WEEw z3hTEif9i$RB1UYzhi@af+w^PNi4DTIS=I5N+74T3d$?PV+v;2QhW9?4uok&4b3)d_ z(Y0=2pFL6XX}H__u<0OiYS;d!#HA)_n@amy(nji%W75^{tlyi+Qor+ddn@{;%K$rL z2Iike5=+Yu^4bj~n=Yr>30GT<<`JI~<}K9qIu$9m+q8E@QkP~iH%4dK9m-WS&a=AC zS<Cl3m!>#6wzUpXr|5b29_J9TC?yoRifhKOMKEHn{~moPQf6nAEp;jLeTmN9_5$st zt+I8bY(r7+CDwF>E>~vV$1ZC&ZOs*pZ_$Re<DECgHm8ZWh-s|t*xV4ZHU!wxHC5mD z>ta(&y#O@zEfR;l29NsW>zbDI&B<GKQU?&WV#XI5yL1{2b#|$N-dRJozQMIo-#6?y zO{K)p<1)%f(rAHX>N$vcx3BDjWHm(jn*g9Q_Nzl>9*csJFiD~-c^aB`=4EpcI~O>U zI=;Y8;?5^SWwLjql(FsabYjV7hm;b7b+I{y$T^X8<`IuXN%E)%05}06zVglq4GkXS zcG_?B%+JOnC`0eqmQP;O7U~<2P@iy{CT}d72#1dp#3{DA*J_AJVk6F>vz7IVY2$s9 z_yj>Hl*vwnZx86SGPdIt+6@ZhHE#<9jli1kt5^88wme<aYT^JnD;%?f+s#t&sdz5k zO?_(6)?sN&XPVcE-u3fIoo(WxF`DF?WJ9&eaOOvPa7dUJQZwTEYjZvQYS*UantuEC zwzfsS8{1ji6V_<bp0sWpbRyk6@pO8$6JX*e+MCaF+uA0tvsjkzME80bH>)HuvZ|n7 z-rbg>R0l8Cj%t%k<$b=FTbW9%Q`pwRvYw?8ByQkiXiZ#GB(>b$-pc*`ePF276s~C% zOiRFL-fKvvX{qzrM2MQU#Wo5w-|xo5uOU^>rV05jMoyTNP+zpyAOxdVw)>z>f3?r& zM8=*PWV%|-^PXxd(&n&8lkzmT;(HG(s85NEbq;n=r%2KTyH+Y|lV+)>EVCF<+v>*} zLp+&M?*xXc&bCgKPAmCv?eo8z`at#G`o^T!_A_bGL(!2(JNl37d)<BEc&XAnnQx*c zZ@OH{sBWX(x*sdvkFCIa-L=}izHv33xIq0Mo(qb|^`|HD0bnB_k{Wr&JPcLok{E$L zoyZR?Yd1rm18wt`cbBe-KuF`=D6Z~7+ktb5k4IdzLY%8kRqN#Eq*YTrU$ylb1_#ls zTHBnKIz+CRg3(yKYEvHSf!T)6Z4E)~QdM*3b=Gpb)%QBjR=k<K?B>j?p_JxeUUIEm zs>`0nqt#12&vTKjeqeQy*F5`PZA1`__V1}TD_0=RH{S-foX=3qly8lxMaBT0@AvXu z=W@F(-J9OlXo4N;mL4^dj~vtZt|j-b?S|^!|GspFa<0>%B`MZiYbG}1e_rca)CK-> zLuRjMnx-|XwtUOeG!?zq`+d7FROeEro16I%{j>M`eGx=%xS8yo$0ixfI4~c3FS56d z9c&ubdOy#bp}9t7RTlxX%v4<Jd+zu9o<gdoIe}V_x$8)0_Z(j&?NgGr8mK&-%vTc6 z=@7lNnS>Q2CiFRN?YkGbncPu6s#04JPQ|x0ayw-Si^U1T$)q+(F>TRBT(o2NW*0TZ z&N2N|bL&mRGSyPrA}~qX!27>7Q59R5ZR-DA@?+?%Bx%$}n|pgCAcm2jMtke{dCnN~ z;d!!j)S|wrha{(F76y=x1MN|Bxk<Ik?wteCss~2<*+_<*`ei*QJf6@Gh!6PnBOt{W ziOX=`kz^yV#oTopXg8&NenTyOZFbHzB`Hao*HBZCc)i+Gp8jsIL<-al`?H6FZ8n^5 zHcePt&7}0Ty=U1CGwtqOTTMmT3&v&dR@9XBizyDCS5rn;4|nn2W3M4&-9j9SC9Y7| z8Yp`n_8k0o5<Q5<pqq6a)TTx-h18ux;g|^%F^vXV;q2E<5HCTH<mSs_z?XX|^L;M! z?N+9}g{-()H1@6Ajyf@kVJhP0lQ>U#QaB!lGOPn2+x+i)FkY(wS-j$Y4Tzh^;|gB) zR6<#0hv{P{xiP$VlG?jR&2H%3W~zL9`&ML{+%Up9u9w*MY4a4DNb6)ee9fD)V>5PL zI-~4v(VN`L^!9D<cx59U+uV$8qWl&WNll70q?M$~XpEqCgh<oPM@>}A_d4CuB=2U{ z$4wS*!z8s!UTu9Xbsoqr#=J`1_k1hfN?ViBn{eG`#l}dw?7~vRJ+e2rQ1$zTi)?uD zpvjDu?0t<4x7tm*4!QI`B~8*grAc8e#SYvZ8<E?dFS16Lnr0J^35*M-Y;btx4joBF zM?3saN<V;QQ$u5ektWSowTTkur@&dkbwU(eRR?nZALQJNB0d0W1jKF-V`DHMK2^ie z+vMYtZcuI5y(w~cUiZ=+g0;89loGskRva0_E;hCoX?w+Ig@danb#jMEasBGuYp96^ z8Dq{GnM=O;yn8X-)bgV36!ze8(XI8O`rfUwPCK^w^w#(&TMO0D0jWliYFCu?gx=?R zxFLe>I@hA-vUX$ICRI;+n#kHors<F-C2Muxjx{ryA=}WiVU~8NnmhbLYKoS&XxDuA zR+{MjUdsKwJxI3>XOme+op#7pAViP9?QUl09N5lE%f$2h9$^&IRAKRi-|DpP$uw;U zX%?HaK#M6l7cs4j>(8r^TGC0_w)2(TWT~}qJ(s1fO)-v&Fat-8XwL#Ywn%(W=POIi zikb=OMV8NQhgRNhOJj#EO>tU>8&-p9dF^fTb_um-QnH9zA{dL9eIyhti<~x=?9js+ zf!vx-Xq^kQb!Q7AeT)9grb&dzB3`CaQ?%OFw#TNDt0UREuc<7>+U7sC>8D{I7b8sS zo>tm<IZmv2fw}KpF)}|e7@Z4jXyA>VR%(V<N;ys=YyYer*S*u64_f5XI_jlUpW)`5 zbfOwfWJ8)EqxMEs?Wn0O)zO@D@$7D=*MF|~c%(4>_;(Q>0DS?HOm_>T@H%&}ABrTh z8ZDd0^28173rTIlfNzW0{;uEUtWn>@JnST6W8$V|#4ci>Zen+{Id9^`c^~IpK-8Re z+3O|t<Etqe4wDfyDP|5Px;L;FPxUk{1+Fd&Uwu~?6`N|MuAU+0-xj&ogFiXOn_8Sw zJ<+ajd@0_WDbC56x{jKLijp0MZFEXPR<Z=GVFw4!t2oNj{EUDSAElb3Cw7|36qczi z=C+-}w*SBH-N$@!u9ju?h^mi@-EOyi*yCdO-}biE_xWDx<*w7lcgMgwNxTZ)SlnDA z61uk2&5Db&Lvj&D>%dK!%6(1O^DSj3Z@j9uo$pi|?`qXz)>FDX$NfILxfhF3I~m<G z?QN&GMi3gBKTINJmZ^OI{`ay5<~c;HItHk^KxD@VRrh^lMY5Xwifs$4&cV=nkMCQP zhv06Wik}U%r+}7HW|?csXRnXKk+HW4#;puOszYcQ9%xg_rrKUT$zXLS!?f&Uw%3{_ z;zvvSe>=Owd(<_t-KFc@lEW@fk~~l6sN4NgG7fPh*@vfX-$80reT$OTl6fad|M|rg zx@a=MQ2pGOkou*~oDm&fuxsYG7Cl<CCpu6eJ^+451Vmg>ZVazRPjp%s>>P&ThKQx@ znBs(4jlOa5#p6*NsWje5+ZxyogLB2@qpd-FU5Fc^7GB>zPOY)2+dPw-pLbwVT{a_7 ztkD@J4mbTxba2qflG?Kwr~80H+kGa90@*nUc9OhqoqBdNAY6xNfSR<m+JUR4<?RuH zl0+Ir#&%Dq{bz~AlVZC_Y1bR-hv?-Vzjy#l#(0itQ%hGUS!;jhH5b2rceAaj*`p#g z`VeD0b*WEP`K}^m>qxa3b+@&x?y~mQ_cJdMjLC$wmZdz^*Ay``Z+zO8Ot+8@*<QyO z+1b|J@_D!VuU5RMYTBWw1{}mhzt&6@V_@nkj$%5|ZED-v?gCTiy-C6r3ERKV^*L|1 zsr>cV>^$=AbEzK_5ykPq`yGS3M%x}3ADtSI7$GTHha)jHVxbe#{`>1%TE(WW>uZ}+ zB%NA?#(|_71{lsRMOS1l^DN!^7Hg!sS~!u~HOZ*6cpj8afxDey)GS6bJXEgx+Ec}l zKFj2tAZ0p;WVrbseN`Z(Gh^eR7+i)%ujY{(JGUtrz_^{R?Qp{Qv*YRK<-)ho%m&NO z5IOgZk9N6wrSL#}z;7u)M6&q`?Vi}}?;cKn5%q0zlX1R2#kTblH=f2O0ulY+;r-b; zASE|`o5RPp{acOtSv6#Wm?_(vk#7pIeQmp@yH$K$p95_qnE3Fts<<IqwstfrpYffu zRQIwOm&H7JKclSa9%b(oWDeJG_}DH#qLQ4+QgrpuZmmas_&y%sntv}LEg_$1a&FIW z(+Z^P)o*MGJDhJFythrZ78B)4ec|ip-wgF-;`Y4P$L!H5E3C`3v|iq=UK2&JGiOwa z$gNCo>u+tv!Qvw!PT&}^-qg+<owPdklxw*e&t&Zk)pS`aZKoSscVwqjYYlv?M(Skh zd=|k~J3;9#%-lX<ilggP_jO3)+FdJ(D+ysY2_3J_thpwwGP9Hpvw^Z=aN~iO;<|{5 z5osE2W_2a>rOaC9-SaF#JcL>u_02@06|C!kK|2^PYjay?b4VDNI4y$PDJtKXB#qj* zNPW16vtY6jAW3h-ZZt@n_~9Umab{C$>Lf~u)Ad}>fME;WQzmXbKWwdI8sQ9wupNqM z(&3``NJY#E1#so_Wa1-U&dbL9GaarF9{`UEknxQp<`59m3cTMbTSAwgb)sza8a5le zhFXfMZluIoS<~I6go8GC%9oJ71_6}q<i3@P9k}Ov!kb3=>mP5^Vsve-Tbsd+18?bO z^S1`|Vz}2l?qUpmO$Op>y!vJD;$w{yk*<ez-V2AzK5JoWHuX^St>I_efUvEgeosU5 zDJiiBemt_9)}YRq^gmD6;%Eq!*h2nxIAN`ysrl!%bC#4@Z41`aXT7GS)W54q&C@yb zw4cP~PS@EiQxQ>@TW@pv_nL>~I!M=0tA*p24m~@=L`(tho}v+~q->B}n5>h{9<*Xa z)fZ^1YtK3RIs;=XZS@`dz|J6YOL(hqw_7SeqF23{XnxXR?rTPpoYzs|w1$z1S#f|F z>?pybysRe8BLU`L#Y8;qnXt7<Zifzfhl_QFNOzc^n)}Ny&Phs{^<Jh}KerBy-LH|x zdX+Fm+X=1G&b~Bzic8tc?uVxKFqi1j5n^kna@8rJxGnRvh3Oh%U2bY_H+MQ782w?g zmDKK&*{CY(AlrX`ZX+Fi<6BP&u*15e5X#Ckq~wC)DT$DOK&w1369n-AU<61%T_v0U zQCwPr&284ym~5*pV);X35Ubx9T>Eyn5trl;_k;Rejj^;tkcM-U#1~vfudQ(rx<c<_ zypM4kcAwo&I2WIyWxeyVdnSX(bKSZ$nWIqbP?td{+7y7sfoie$e`!;>;{L5o>X;PU zS!>VZ&&+l==qvL=N;&q|_YCW-A#Ur~j|ap1`}<x?5Z}|D@2++_x$GX>?f14ka2u1` zjiBA=tN*=8Euwbmkzyl8*J)}h^h|n0Yfo&^g{-D0{d4N|_bE@(<SO}Z%C*V024<<n z<J-M7iMV2AyCZ3x-dOC=(A(`+x(@b1q|M&@qNgV`3{1oR>dt2hh4(4es9%fidz!_F z#=386>YR|&X%t>vO5fnNX{fFP-WCCt+Iensh?G*qw7hQG6~}#2>JVBt)Y7#eu4%b> zlYoABuUDkK3o5Pmdv&U1DMIRN(@NHB%-0Os4ufuQ)@&r94EI6}T_^pF5FP&cID8Xx z6x(bFIe7+auN7}ETyt?>e8lj7xSJN@10WM1(TkFJP!lhKghMAj!(N-wxr4<RL?S0V z6sl>iYV?ZR$Lxc_2D^#xbn4ZPjozp+U?h%=x7}H!wB5Wybfs<IXbjD5s<|w)Np$2r z744YSgK<owDZ3JizePr-SmsbIuG%~_77*<<5-{mpNnw#B%TT(?LB?NpBUVb2PjA=2 zZMwNGW?S?^_LMR|w`Nbr+UK~`mc2_vL-w?-X<Cd#J365~;w3-$nzS14EsX!S#&WOc zej~6u9>|itm*{OSXC@;{_aL^0qyKZeHgD6--A}XnHm|C^eDrP7{Im|y)O=k@lV{`u zfyo>MZDvF33CU~URqJn8pFrtX#@=eq8pd<TtrwS$X%~j>&tbcGiR<_`Ow}oV|5c3! zXN{tyjZIvHH#b7<u*YoOWJ3jG<j_**=lCds3_6x&ZL|02NSKKgJE4tg%jIZINN>oh z#@U^v*8;jN4i9Hj=L|WJVrJ1wls~QWD>$p{@J_cUoigvG40Z8G82+ys@`3mOs5KzH zNy|e~(A!L7!L*b#DBsj1NOlaD)mxRPc1UkKcPT;#PF?d@2{wj5=4*a^-7L*uwXgx_ zA>r1TYqP*~b^rB`s{W>{*~42A<dPWl!0GLWdc`b(TJsVc3z%;>natc9Bp!3=_Q*(b zcwNbemX7ysTc1<NjEHF`+kig%H1pauYI~B|O!nR)Br+|XfNs-NY=)jBsq~s&`_R=$ zeaA7iqGC57)wh<`R{BZj-c~(%KxVBr&6Cfa$cjr*Ir#dlr#sf@q=n5Q<yN-&4$?$< zT>kq0-&}6DxAOk}-iBx!&!;4YR1_XIE$y7KBBpJ4BM^$;%k~u^t?MB#LSDOmtu<fm zAkC5tCk=HvQkqmJ8JN|3%Vl#9iR5?SzSDPWu(Z2O4h!W~L(M=<W4)&WIEav76dx7S zUpF$F38Lv;nzfwof9703sP;mXk4_-*15i(O^9t)s2Sw_`Xh(7?e%u_DvE76C0C-A( zXy-UQ>$CIqg2m-tANZxam48P)W_m8T#0D<Tp<Xv=mB#4uGf1?*0f{u-a&oU_aUT9E za^_ml-tn&Xw_=TDGQ-q}uB9Q_>|o!<auZyddCAh(cGELlj<0X2D<_7_W`hzFvm~}J zRrCDP_bAS0_Jp6sx0RENYbda^!d+ig>V)}umc8}sO{Oy4rgaEh*^9#4mb1o?3r3Cx zVNs`;hv>y%nz>D#F(Yb*)eCv=|4!OZFqlqfam7JoF?}zqZOUf!gnQB#HV1FFNV!ex z_Z?;gZK+4oZ7$R8R_6PC?VjbE3aB$oy_gs6?3@w{m+kkK8L_7JDA|QIN$srd1V*_n zH7#hmnbzj&(__+IM$N;tRn4*Z+tvm7nh$BeGaD<@GH917od)hP;&WWrq^4V;bu!c; zkjuZ%Wj2PjG!xOA`$m03@}|Lq9QV<^W|PX`WFDkTy}(lM%zwRn|DQauPXFsi8vU;n z42Tba^<MZt|M&l>vn7%`<6d9v?l9{jU9U*@aJevfNwPYJxH*bVVbP)YHrr5D4!Qze zNSl{~U)F(vl^?&Fp2giWJZ5lp>s`eOq3Eyd4Tx^9<vM{o>2x#{p4wY<dc1;qYcw%@ zq9N^nBAqW$oQT@yPHe4Ar!~s4ccCh!E#{TJ$k-;9YZBGSjFclUtV<K$3dm<ojX0a8 zcw(HFZ=rp#>a|TGYdr#unDYMd{QYI4)7#G<({HlqiH7fFo|hqh_P@4SfhM<9k_xH) zd*u}_*`<)$cH=9>b(;%@&+YA7d4K=j&8Ko@YCU5yr0k01f~x5%CNbqU?WNndoh7tH zF6qGS^0J(K?F=e9${Rj1I77<f>A@e;R{dmqs+z+*ew^_l?6eCLKk)Y4x!0!4JtQmS zWM0NW+vu+#J`f%No;R0bB*vwu@vtezBizmnNjI&74X*ZnPdqe(o`a2{9a{=Y_Z3s& zl(k)NTJM(A_Hg@&-6@&WU+kCM4Ld1rc#6qmOGc;oSs0@>pTo3#JL5haC!y@cedCR7 zsqHlk*Sfvto#ALY79)9To`(0W=@V}q$o6IhaeB3@O<7Z_)>gM$lw+yq$iC-o?nr$< z^IV5C>T2Y=$-v>BnwAmk&S>_B>^3Rg2-&1NS9<9}8lFl|?sl%Rh^tlb`P`H1%4Q2_ zn~B%+9PGNKLz;$W6s;i`vgfro$6%?a>Kn!4I@fLAt=_iTCaV~^&*lC8z6wRN7k2NX z#$vqW#LYS>#dJDb9pxP+ZF<d?5;niTr{%*XsgIbmR^l3*6~^F|bayiiC{$cJrR!zY zGa%F94%)3rd7jvjN=ocJ+%t-s7O>h*JlEpW!E8!Z)`d&1+2+HwmbQl<dgex(eE)N$ zj<W9AD5r$oRgv-{eP2kq0{A%OKmYSTwYUG4CPg9~{oA0qU~IcS`<>biD?nm>fX_ou z&LOql9Z7~HozM%~ces_rw>h-q(u;R|#5JDM;0^92##y7UIRr<|N*>+=#dnn%Y}i{) zy{hkarA^nCtgy0k@@hEL5-+Nq${rst;Y9C6I<`6kKR06OtTRn(YL#q%Ud@LPfr{%} zHv?AZb#{n}Y$Q{Oo0Q0qCtbTi*_^`SK3DUVi#2%iwG)N*JkN_EKHGa#lA`NDe9yEb z)sVMWg;EeGNlRY$^W^)h-gQkpy>e(+>}`63Ac+R`79Dwie=qknRZGs^ZW8a`Y+vda zuDz|x%tWz+O+{^VCP^LALw9m<t+KKL;WGx6jf|Mz>CK)J8Q=S@LD;7M#rYzd4M{rK z!_xQk3Tb2Z(B6J}w!Y-5L96=F6%rR5atG_^(vdZ27|`3JK3gy#J^(uR#((|Se}{5m zZ9=uq)2Ag(&*^P?Tk&JlS;PvElGI|jn>Y04FvAN|!J+vEU=7q};JGvM$J^iT@e@fr zgX2w8`!1yLn%e3l^F^d-9!Co6aL$}0lNt_Nlm#PtG0^<`Qr9k06H%2FsrSS}Zy=aR z?oqT+20KS1o7lb2)|jRuGVLDm+hit32V)|NjU~#lrJ;GlC+~1n2i&EzaT1Zxw0YJu ztF4_>ESVtI5HU1qUweW59{rIL3tMfSm1^?Mso!H%`x4#0r??YnZ&NyPKeU;CNo1rf z-?#tnHi4$)KHtmx`@2uk8rb0y?<?tgBu?%fVg`Jgf^;>Fp4CKT?6B9)t-XBaX?G-C zDjDcB6$qt)hoUe~o6L;4nCf@J`EyVwB5_|!og}dnSN+-XI0{W2I!$JQ9F0rwOq6&2 z!v{r&+ZYbg&&HXM=jM=ivhE)FT@7mV5z`;>0q{AzwG(M29Zb}(2YJlo7JC>-2}Qs? z6FF(kYBtKfbXZ!WY?S`m+AX%~vg4nz?Tl2<ZMY&$!Ex;0uZfVUEi^kHLJoXQ=~pDK z&sZ^~ukCY4>Q!2daWQoevUrC7{(I>R<-W7Br&CGE+f=r4sFbXW!QO2wF%GKHU<YW* zUIUS}<E(~UsnL!t;xR2l()PDt20E&0x!><D%AvEG)Qz<V(d0Yo^s<_lYih;2KUB5k z5v7vN>lqm#YP-;EOG`riRFa6d3OOlKWY$v3txQvIxMiDyrs~rl^Y*@>3s5%;NQ(68 zh2%K*TuVt)Be&?#ZXjxyGqK+H(<Eh@-j>D$^IYEV_wxRJugxV&y8&sKVI<nS%_Oz# zq?rOMZtbcO(7M%y47*Y%&K+6Tt7<9p*8aTxI(nI&Dt$vz>;S%CvHF&<^&qh6UEBBC z3reVK5^%1aZ6*|Z`)coZ^-?p2zQ{UftIGJ^9tuXEN_(i2Iv+?hQ5`Z6bE=1*<>1nv z5+AQH{1G1jpNIVSf3Fb`k=9$T>OHJUt3Vw&AlH<I#Zx*Zp4ggOf4-fn_p(|KnV-Vj z-;9I5wp?lD>TEvuCaggis@hK%tPducxsc7(gC{rcwJ}CA521-htn~=fCOFnLV~x=7 z-@lhX|NO_^@-v$(sL8oy8;WLi7_OkZgwmwq3sn7(JK4JtNtQ4prIa!)#k^Z5t3Be8 ze+Q~_xo^eEv(|1}>$OoguW`^xEp;%~*04*>$n2(3x1QPDa8b=yhIU1`bPcX{a&_&l zCDXJQ<j06u)CF49MTF*cu8Ox&bnrQ@8vt9X*U$#iGj>i8BCGhe7iOO4^7r>8J<Gc@ zj>4nTI8#o3LMK3cilJF6I+w{s*ajU2Lye5ubuiDRiMYynlku>qVenq^f9e>p-PF$G z_t~U&cGXFCe?2~1LQcK6b_R;SH|0Z9t<nN`IeTUE4=tB($niST@?63k1?K>t$D6-# z{g5>uie4Wf!G#*cN@L(l7TJ)bPwv&6)=n;WItop@b4aRTSsy2ZPAttk&D?|i0T<!l zrAbIi3pwmXRAYp9g;l@z*47zJo42-Jy=n3}@ulo3bW2;=Y;c}!JfM5Awub&d-gBL` z0Pg$5n#Kp3^{tYwXSBU$rto;$Qmt;jla(Ftr@FLgoo6@buD053tnJlPK7~Vi(6y?R zGT-k@6lpEawiCX+!K=QDlV&1ToM$!`bW4bwNT*X(Ol{M>bCwjD=jGp}?CYb3qS^)M zVvDY~Lc0QN4M<;*_6?WbKsa}uRP(*Xd?|6#wCXZc(+QDv9sT<sf0X-tFW=WX5itY( z#?fQlhgTNo<v%u<H8JRXlaQ&*TMKZ}FdHfKCpRqwb*oca*YUf~Ap$e<XM5+xkwa%B zEc(BsZV%qCLui@1L?uH}zVkatB6xLgOwm*BZO<ruY*1Y~&Ahj~?Hr}7=INtE$Fo|} zv^s7MVmbCW44TqBaK$f)U4#d~2MLh6Dd;}Aw1gT5S-r&3Q=?{%_}Z_-001BWNkl<Z zLQxGxz?yn&+|fHp>E=Xr+T?a8AH@U3w&GQjN)TJuxK3Kq&NIpO_4N(4Eg;Y2<rkA) zP$$5a(wSc#yAzpIv-DzVYv$G#{<V;J|893rZcRVh8&Vk&;tW)&BEY@#HR2^r(Q`>c z@xJI<o8W~UZ0vIG@MsL{?X%h;fm6Aej#hRVFU8|a7o=>USuMP;#`?4m9JDhh)=0+G z|BiK@*Etl`GT$Oev52>A2w^{)FSc*4spL_UtT??INPb}0e4ooa-`DS3$|URkK9xnp zl_`8L+R9+rCdTK9<n4Wbl*-Zbd?&@qMu@dhD($}SZO_|gitIvUkK!)#Vy5Y~)QEil zZobd+?de8yUR>>2k&e+5W`k@ab2br@S#vRG-qe?9<3>0z0j0IYRrBvrE*ODz56nJq zyU*^e*n<~r*MrfKmUQ>Z9Z$X!SpIc&+6+7_QuMUYknxK?XuQig;Stu{@cX@Luz!$! z|B9zYd;na$Xa4j5{-+kHhK}nlWo|4x<g4{;`@u_Udac%a$97nfp4kZ8#Jz#9O>7yx zuQad`2WRd`jCUk{C}$PdLS~z))Sc2h_<8!krwZ9K1Hc&h+d#b4YMxdv^<?KFoH-AY zxedElTebZ8&wrMAzIWefZz}QdD3E?sYUDA^M9VJ1cG0m4kI9&As_6`fGlxuCV<M#) zdl3@>wan#ypUeB&Cbg~6@m-qiJ=dEh(9G*FEj8uHp4Wah&}Pfc^IY!lTgp+{)AOcj zD!1FM$mG*5ePO!RSre+s^ky5q(SZ>pNhi-XD%te>N^Zi&=+819B^Sq8OW)0K|Ni}Z z`TqU;eviE*O=d5WpBf<}y?Xr6!r92<>NK+ILF`^3Ys%qV&L@bCTCzW2BFeRgw^c63 z<#K0C((c?KdFWG>CQ_u2U9&Tj!>@nJxL2P%A4<OUq_3H_t<=QfIC_r{OjvxdNF4zJ z@EYE>RD^j=rSM)!dvk}DEmFPr?bO$4KhU>gWH-}E4-9^55HzV;>p?k~Ghz)mTe~gI z|7CO>tS_r+ijS>nk<RHP+7~5F>*8#$4TJeyB%+B(Sns!gtSxfPJKY8gc{I>TTj4ls zH6~T(w%FbrsFD_vCPTfwbyQr>(kMC!5FkN=LvRlPLSP^`1os4Yg6lw#!7V^=cPF^J z1sMpz9R?rVWpH=i<b3CM*ShE3_pNu=y6g5oGqtOwc6D{{?&_+p4OwdwSY1Xb>Z1_` z8%U0k=;Bz*4spzKSZeNLP`CQCCZn#w$X>(WNWCf<WmczFJFzcj<ctjs+`?Em|2p4c zyr_QbQ(SiZh*)Xc@eJF$gbJ3g?5%93>?K4R__~)nL+1xkG!u83na&3Mz63F+4Fyc# zq>1M4onkEg*d?M%{Y0682O*xoFh{~!zPCQP?8^b=d4xyzpN9`Dg%=_F<CO>Cr-LZr z0Z{5d`{PArj{46%-o{VrXOp4Xtq;+&isP$iRu%$KxNu$ma)@-yJm@ARWjR*DxnYJM zwAMfVYuX+q5Q7_s*YJIbWtf+)RJ4Rn=1G;5@g4g3x16AII>}#V&o633S-r%34D@CE zzTxYFPtsixC-t6f+V2pHO9~vS@oe)68LPH^qoSL)e#Ktt7Z%o*;p`lN4lp=`2T61S z)I6JtIm~?qs(pnT#@(Cf+$uCz;Jy}}>W(r+enOiszj~z5tYV?DKYH-qO@EXhvwOpx zXv$xdrW-Bdefj+Kq6`1c-mzzb8FA*Y3-@q278ZozZ4JTTAii?NUP~%CL}aL8tbtY_ z^`a`D@&}d{6hvuNsT9#*6YE3fe06!*(7JrkBuBnb%z)BICw-&!iZqlhZ)WTldz_vW zuO(xd9P{RZGYg-B>2y9y?T8#5!c@UQh1a2iqJfPdW>V44S|f31u<T5Tx;1p#efU-- z)wI&ZkzNB~Zn>V!!Q)DhGhd&!x1B0?b9q@VKcV_~3$H9Y|7xKhw#9Rn`K6>S?&rhM zQa^2k${gk@mx@u&Z>x0qiH*a!UrRieAaXQ`)9e_C68qfN*qvU}^pn~P>-{0RLShu3 zF)Ij@>K{xx;~(}ltRl06nRjm%KL*UtUua6`tGSxfQelsvh`ItieF6QU6<&CSskuj( zKjuIIH41OkPs(xP)|#d{^)6Fi&akqex4yZJ<szQS5F2#ATv(44=Am4r;(M2kr_96N z{06Moj~&w4@r>wF{Gd+9W?<ursTZ1I$(h=S&8IMNNMGL_n97Auk=5A{virr3*fQPc zQQH<T#~RWLO8aUHMM;WOznbbS_rR?$&z{x3K`5ynab7nqk(*J@{?d-*vt~AZyWBQ~ z&j8#TbbG6J@VRf;C29^<lbUOA>M4vK+6~5*6YqN@j&aaQBWP`JPrAGFaC>@$$Uj~7 ze#ZrOyQTaf@G^YlQjj=WLLYbasNc8ro8a2~Bpz;^s}V+1zCCpmHL+xSjo1Ys`tj+6 z^6AUt&9-puO|h3<i<8S}tQDxG0qfy#%CgRDLI-)lTLAQyBIg+co3i?TS<1!soxA=O z7SDX2Z4J%h%=oJ|I}+xFQoKg5sJ-kH-q58<i}*J#)chBZ`MiziJ1!m#PyTCSY@Y0- zv@C_B!H~W_ANv6UfB>_I5iyLYLe}9|2^m-7$3^Q@|Dt}U<BYH3-SV>f7!trA`(__L zDfq{<ooGQXtIa!Wp~DR1z0#2rL6juonUKK1P9f`~lEu`pFN_uMeHFL8a8kVXZ5Yzo z4-D%SYt@<gM&*{;`wm4FA&Zw|gD_Jo5;`mwC>QhvvyhKhh<6$ACES0@&9boc?mjX< z+0_~}hZbfyuKcFbwIEIj5?N1Q{w@Z4;&(@c;*L8{KE5S;*1j^^Q@81s*gZ0cZ2cP7 zng@7Bp*BdT;?@Eo$k@(LoALUq)3Vw4N>rdTovMFg5~@UtIJv4Pn@Ut}#{2}9vzXp$ z84d?qJKfEFvb^SQI!g4JhpDm87`=Uh`#e>iZVNxgkY+<5IWt)5ErF>NM{hqkr_G%5 z3+vF!E!BP+nMR*>6PfzhwrFekRhQuU5@=Ibc{?&sbG-$t%N-A5*6&oWa#%n_hw!YK znW<#l;_^5$tV}GkR<$Ec*c;b7SKTi9Rif+?SK1*!R_rc~37)ww{ec>T?Ms9fy}&XZ zIC0Q121}f0U}Cd#AEckDXZY#v$YUORUBOUd7Ol=Kv7K){XwsY#zZRGVQrBpsw#n+0 zGD<BPy_MpRpo8g7;OQ81JBr1zX&>Ui{N;>7UBD)Tw@05JCgGEPP-lyIfl-MD!YcYa zogYMV^M9=7y89mmLkdbj?QKxUow+*t#Tl6+*HFE=(A|ZtP=Cg`d2~BVMHjs8>Wm*Y zI*aG2QjFIfCDHH296XBihs0;DJ`dDQd%SxxV`yYNGh7oDw%z$mOEPR67aJT|y716s zz9g%)_1KEAbZvinY*{$E5@ao@u&aH%toN?yRI;9RGw)9%<W#6}*{L}bxfGO*3P<Z7 zzLyM_d3y_T;o(fH*(oz^R@hvAS{EKL@OhXbP7%ZQtl$;%%e$6H690+Kg3-WL<E4{S zcPOzZ*~ZW3lqolNSi90Sdl}b~=-}a@qk;)vqFKY7gdkhvQQYZ-U8qCt;Cwi5)?jJ9 zt!nIlJo-bS*3@^t-%GxT({=BBz#%9!LZckRS*eRV$jy0EedNPTNxCcI322q|4No^q zOB&2eRb5vfJ~x@?=Dbpu$nBkWmRD9$D1aENoTsyb8Jqm&VmqwsU#jpyiqdh=#R82{ zSs|n~cHtx!SrEsj#Q=DPc|%?IZBO6li{~`XR1Qd6@;UK9<g$+F_Fo^7q{aHgbZ;ZI z%Qg3<k^94i;yl_XHQtb2UkqPk33ZnhmY*dZe5)_FUWV1Z+&r)1jk9{!UzC0zYn{P) z>fKJ10R}DZk&zX}53+LA>iXy)DHob<)6licm7TC7jQN#4A#(s7#xggE%azgP{tqX* z+<S~<PV%rspg@B1p@LLdnej56@*#}peLZd(Xh5z(ax!G6W@fn9%FV-rWx363zQwpc zFgtNP&jQX+tn%jpNiR_`hSL<uyD^qQc$C#A$-<IG$aK2C^Q)O^lJbCVqCUaIDXEUA z$A@euxw*MFGC)3-MP)Q{K9;v}(ka-Oj`oVV+0SkR4BvX?KYRm-D2|MLtWCN2fP6lw z#l#-z<m9b35LBp%u#?bd5}^x8>4`^+8L6sZc&IyYS$2(zb;1HM085!Y>o`K1GPI{; zIIMC`R=;Hek0|o?IQPoOS4&94WAyi1!-i_`hU3M~8n~MJQXhD|ap_6@y%`48TUIfu zzH&9sIAxXpVq@kuaDC-q;f@1Sg}7tppz=r3mi_4*WwU?r?N^&e5<CA_`wUoHePxDx zXfIpcS~iUr<#kNoto4i7%64wwFN|JCR~}z3);b9rWX)k=T#{d*JF;xEk~eFdO6#nU z^2|J~LaS7V${bt$S9@2?r#bmYUBeR6{J%a-FIbS|Q(EHHkLUBxB+4?Gr&_=>Gq<4& zFa9W$?Qw$%=Uwg(<|#K3F)Zy&8E5om+N^m=#}duj&rt$di5f;oTg)v!e(V}yei^1x zj%Sql&=lM7tnSJ@W5YI=1+s)?p4XiDo~s_YvRTM(Y#Z0#+~Eh^tA*CzJxQo79ybi{ zU<6~MOm&?6sB1_oa<8H%cVctV$^C6f#;FL8z{@HwYxd>Tboy5DbY}v*&v42tvQFtD zsPhkf$G5zWDjN%4?^77`7jS8?7|@@!Ti)g#;#!0THnxvimkhj7CY4PUqc9lVP%oAF z{;Ef7yrEe;<0m==$JCx+_|3xGp7#@Nr}EfDGT~;z4~;x!-*kvx=U8z6$%eo4XT_kc zrXN!q6zzT9{ZOMImYP(d6DRMX*qRDt%BEuI_p9k#!44<J3^cau>n$>{wS+lsNj4@Q z%Iln$D<(9Ivnv#a-^mFIot6KYc%(?+!aiP8!NZLnYQpjtyUP1)>Gf(@8a0gr@wtcp z?h$^x&b@!QT3*D53aFYM0+|&jg>2+4l?)lN@D4NslyjrCJ(FwgH)fp|P$kXg13%`K zk`rpnks1Z#t}rObTp};o_AI_vtBtqq?P37KMdzon=)JhdIABul`EJ@hFTV-!Kf0Yz zSB`0+Vf#|jiKGsHcts*TGc|VgNiwaQSmib9Y`MNFuof#cD|RuR<I*JRSzvAXrTBf~ zuf{~ZS4>k%j#<;$1`3V2tToYFyLW2?sumx|S9Np_gXS;W{HUy7M3_qEbDYDxkH)LU z)ZYMctJefND#%UWQ#p3(^XY4m>;WRS!NIejly^F!W$|EWO9odP*{$J^oe(jp+D^8v zZ*}Ks^vOQUq08-FceDav;%O*(;0$lDLe(ccAf1?T+x!mbt8Vv#r`^gy6x4IU{A_$5 zr%Rbn5!(*y=9~uHvzd5mc2z%gnJ6k60e{J4BotOzQyn*D&1b#@Gh&HsUt9|9b2;+e z^&WS7ofuc#K<*Thv2ot@{4`8$L)_B;hR>?^tMFBCgrA<Zlk<3aN=ei~9z6+DX?;uL zUh%Uig`iKE5exhWuEyIX6P<L8x4nk0dkb1q`h~7QHth=}5I@Xk6x$#k9=i5y^&|$d z)ECn94IdIp8;HmDo#?U7Fd-$dHahCwC7;*wUp0sr;#MndRIxhAbXYu%j}Qr2qP5-# zyN12cU}BCvoN=^7x}P4(0Aq0~$xd){r1h_c4Paxz>hy90VR6n&1CN>5O4a$V)Xf@O z1isOF_vpQ!Ct+Pr#hzg3U`rK5k-anw_Wl;k{XKiO-ki*=u=dcB4wlwX(d1$`TMSY# zUwAb-82i?_kyXY+zfV8ZkO2d1xd{(#sgHZdPJi&zk&DU8;*t0}pMueraowP*5;De> zh}1P37cRNI+F@mR2Q$tq<4ZIt%jS?daj1=5O$3dij+D;BJl&>qO9Dc*tW^u+!rAeN z;aTS$h49LHaGYe(Nk``qn0-n49#fFoccDiYLe{Efjqu{i${TW&Zr9amWB0g@=Z_oG z86=aD=DX<UbLJ9HG3KI`6s|#EE>R+`-U_dJUUVU&8{*SX0^;XB+x!C;pdoDYJqGwH z;ZVJfm6E9BwJbR*qEM}Pq`~UjLnB7-KbtNs@3*&HvOnQ`Rny5XiEXu-H~cgMeMun` zZZjo{>t-=V!=3Z993|1r{D*tw36mvyP&C(%EK+3YT}htILJeU$!BL&{cz%v=19>qa z95kjS`d7?ni7gEcdpR!3c^;Ndnmc@?OPg^krtB{&o|`;**Y>HI1H^?;XEBtVG7>&j z@?B)L>@+p;(Gz!ps7s=%Y!<s2niAS7snCAJ=A{-xqF_!eQ%H<8T})*VY*@S^9IcY` z-L#_mYr)*qIvk2}!#P@j5qE=S>VP0{&gs~*2HS<z5T|rDg(Jk`qEW*9z3$9HoF<8* z&6~iB+H=}5nAOZjavQ6%{j0=^nPo|dL|6{&pp10KDA9X}aN>JR7F!<i;<$al^mL?j zlV;M=LL=}rR_1eUEf=S!3T5zY(S|j$sP(IzAhak-YN23nfM*q;7%L{a(E}<nWfsKN zW(Gc^>7Qd%GdH;o4;Z5!NDIj@pLTXsH;`^~xvb7mEOTRlic?(bUoGB7f;L3L)15+> z(+bB5@YLlWV35EbjO1amsspJDf0lD`tUm{@S-$7PRmjnoy>;|C$#q{W8K}evEEcGt z5#y#hQNy>lvjhpd^W5VF4{T==GlEk~GZVejKX^rHwLss^wDJJUb!<wTh^9&1Y7Y-w z9^kSvwk!U69j~HNZ8t01D=`OzG;uajds1IKY{N%e9cjaE-Hk^Lx{6bLXfuG$*#)^x zg`ZR~NQz^6G0Ig6Y<RjI=H|CA+&^yjEj_v@EaIWlG`Kf3SlGP9GAd6_brhFl*70ze zQWrqZHHh1uth&lLL<6Sxu3hn926~ZN<F4QD4RkyE$yNsJ_s0QFo&mOzgF!OPZzHO3 zc;j?P`J{^3)$zAS@XcSzS|rspo)0(l(eZQ^nr>hctLcoIw$)Fuu~|hX*F|;@4SXxs z=XM{Lr$1CsIMf@Ab=nEdy!F<g_Nv~CK29OcE$pwARXogA?6(eHd-q;J-{<HsVM?Qt znXDz-$B^bQyXtKQK(dCyn6Hm5(S5N?mUzpQM%?m2;WF_2x0O7RVlt`;snG1w^Hhw+ zba2WoXgLX6d#ArB?FCOz+2|K?JY`uj%$O~)Ymc`XTl%Cj^lad9VSTdfm>u|Q?d#Mn zv~lWn@1^9h5Am%=lS(!mHro^+3FbAE4S&hZ3^GSUw17N*+a2lIci&s}S)HlhX<r>3 zKC+2Q1~s%RytSciI^z^e!>`5pJbsz}(b_i5QfBE+jn!PcD=h58fLwR4;Sbz3B!Kp_ zwHIHdy>){fwJEf)VH-W>f#1k7v0}pYg2VX(q|Lr*vdHx4Gl9j3;^@$Tkb8c@jEg|- z0nz!<NnJ+455IdlwVU;{D|WE^Z9<G`P4UV5Uf}V}Ty=Sb&dnH|E$8c1k8pj~I_(Au zGw8*}UqYI->pUd5aaqkv`0^FuZOhvZx7Pf9wRU@|sx3-o1$tKAn?@sETl}oRfd(P7 zQqcIEWX{kO8u_fYJ-7ZZ(l+4o^SQ?ojP9n()Y1Cfz1!l#;mJK`g2Q?V`@VcVu#W$$ zlux$<=-;WJFZ~W&(vA$|c-Y&S|Bx0LvO=0~-`{QjPQ_@$Ct)I|RFDm1O@+{8y)re= zck&i)ZcViwODkEF`C40S@8<Wr`1asoB+h#4fhqG+_Dox!w-;&k*>M_rG(=h@^?luZ zkVNmiLXGfrcvJ)4*vVl|1fG0zU^1or6xpjWE+CK-y+*XT{ymhtc4kCs`f`6-l_uUA zNW9KwTz}p4;9@?8F`*(EOY15qp=h(P^uba*r<51Ub<4r#IXqEnvly}0is2on7J#qU zylJz%x-swDGslpj*Z}Hf;HMUqq=EXRO>iY#UET4aRVuz*hOD4=V-91)X>RA#6Mp4% zH9Z~WAfXlVC{Mm^M2{HOY~Zv??1+SeM_bg+-@s4{q(1a1N_s?L{OHNu*}T$g&$?Z% zb28=3IJsnVg;utcL9{cZXzDfRN{|%-e$sgy7w2q16^LScQaEwgm79B7SyrT{^U5<U zb%29K>@pL;p?vbITT~}9kscC3{h_E2DQOK&g`wsnn13z~0+g2Qumj&wkZYZuHX<x; zu6a>{6{23(-sl(`=nj%wVm>PCz%Rr5K9W38(|!eNimi(a4^q4D-qsY1(1lo<DbTxB zdV%)e()TBe$^>+!oUN8gyyy0&fNkZkFUB%4NoM7q?dF}OPsbw+CL*vw^S{3mOv9fB z`Oc5LeJYWN@K{!*PkFzy9sm^41^pHU2x<du8xcktf8Fy>%BLymCw|u22Y9d;#xNi= z82a6r9WPxnLm4EjK?=Gp771Y2mDZVl8!<#2y|G8HT~hTuK%X-;c~@Xw@#<LKW|6aa zaKQ&Io$pf1JG^161;`D7c3zp5EzT3r6U%m6o!)~7VL|+-n>0<8Qh8Vg7tjG3{4pkS zS-J)w#jejR)+j<kdgidBYMBe@Khx!vhgS8iq$w@i*)jB-Tz9UghE3eq=(R6bO`b|k zyCRl6R7)ODX9iFCLF)R+7t|jjC$aTD_xvUXMo&(D?K4nwzd+G|2(Own!4^J82|0~^ z6{<!roHK<A8>9(rpf=uet;O7Hu_N4wL}T(o1Mn7R^v(rFCsHpz94yUQ#yTv&z)j2) z)AKmWxjPyj66Fv2<0Wi;;#SNohj4vEIKPe@PoGTfR2YyT!U|^j7>8&NS)*24w(C1< z-#dRVux!diZ2B5^WX%ETRv=#1Ty+sr-RBi%hArxQ6&VDoT7P~rz@M@)_tpfnOGLSD zi+bxqqaj)WGFoXzSDUGcW322XugRV)wcBeS&UiX$@T4Sv*`3ETUpF7h6q3~qScj|3 z5RB~8#--JBy++xdSH`Y{e*PgKB>7qY^5;6En_1DV1|9{%!ib$lq$V#2GG(&nR*L(Y z`JpxV-W--usy(oir5F}&{zF=Z^aVMl|3rr+eof=8(dK~q{r!RtM|V<wdRSB6%E}a8 zl5UNFBkyrVN}kQKhK~TVJN!=_$#hH7x75Uto$SSG)~^>ShS^-2QEiAlF6i}l;}^0c zwTbf}gj(^zQ1W+?WjPs^Pcg3SyjrPrh9T4=*F(rFxUNf49=7wK`B^w6K27}-9L4|+ z8<RFJbD5T<k*y2(o-S4HlI4IVU|wZoAI^*x)xV!0H)#<fzzXC%V-tZvYMvq)X`jy@ z9S)d$<7NIdLOQi8-SOca*35nHC|PoT9iH5<%WmNBhD!GhlQ>T7#JHdlmIHS;v!-5k z6iSV4glXY*21=jL(~LK4{?CBTG8Spq8xx3nl)19+q|Sp_yRtc~c^4_CFfzit@qYhd zr)e~KUi&b1GcKt1lF@w)IX(|_@5b>hg$Oi;xEK(V>l`l?D8>t+=&IX@?<q=L#A{cw ziXN6$Pikqa%r8q*@8@H@cr4dTJF(}6WuL`TTp~2zFBunq1mjWdzW;E5P-ebKDGjQk zGtvrzYrp<JkI}#;<wqC#8q*&>fVy-<ZrtDk5_dkKuF2QadZzc3rshKJS#O+C_FQKe zWf=C+#YOeXm1Lyhm^$%<^_|Ay1=5Lw8PTQCOZ%+38H|S7oV?;C4`^E=ly%IfXTL3v zUf)DzuvY0@g7&YBRMLq&E<a7YhS*iN4CbTxZ4fMO7HKv$x|j=2qe6a3D%u}d1aD-? zH4(?{2+U|krtgQvzA?L72<xKrF_}mz4MJS~4NewYyi4~Nk#2hbth6{ACoXj@uz>`( zhJL+N;Q<|Fl!0?pBzX{V7<r~qW8`u6XfvEZ@a4f)o<nX~%E}4&4Lj5f;kth9p@B`w z)2e~WqEj9NLJcUnyz*yc^TRL>(8=o*7YZ+2e2Go=jM=(tuLhvit*|d}pA06lVl(=2 zs{)t8%D@=)l$fsvm(OPS<WN#W)(T>SM*f^0hd9*JpTf`o^h)w0tm3OqxYMb}_K8s` zo*+rZ<%*S~)tlXS&z0xP8D}^TbfUdGvn{J;%zX%tC<pmB2WQXB9v!xVchi;~wvwO` zs?+{gUt-4jgPqR9k`hu1f|_+*q25mwU*A>KW1R`yxhL1S`M^ccX6~LQzqQ)Dbe17X z0)DD}Y7}EA<#A{E8p#@4s#sF2?#P_KV`IBM@^%U?DOYKb+I;y6)PEXNpNO%^R=by~ zjeqpVyY#D;q!CeuIVa#tsw$V@av;k?>+S`<mbJC^sv$WF!k<2tp|I^Pp}>!kD*)DL zeggdX`cfb0Cv!hUZ2qg)<84LvJMeKV`W!Z>?*~XcwSKE!Vq(<}j>hDE?|qKaQxo4? z(aRawBybxBG4P<V2CO~<M4?4P+}yPx#U9kfWPv8!@2s6C8}ej;B8A*FA$Cr19wUx! z(S^tF?lR01E78LkWwH8E6N$RsD6#juWr~u`VjCj??Y-E8%|w{8>$P9TQU>6e(lhS! z^G;#v@9Y8}_LVc%YS`i?Nt{bB_~)id8MWytGw14Q69PmX?Y-qQS|P#b^9R#)N)dlL zvE?SdnhZ1<0$?w_4v3c_W_=%8-Od6y(6>z0j^#`c7yUJ1be8q%-j57wpF{Ry@<rx# z@v<5c#N~!urYYGhD+ailNTbTw48&k+52Ni*<zZ@X-py$(btK0wNKgjCLsAr|x9Xb( zEB*wWE@6Nama@D~%*oH^1+yg<cjDHC8fNfBdU5BJ6_Ne<d1haQA2S97a$l8aE*ECG zDj9TdNO=N0C7v0zN*bXuT0S(TI@j5%eA#tX9@*D{D!Iu75!n)Ur0Xb#P^-z3#1lGW zHRs8)a@zi53vehgWUjQG;S^5G|LO}W&ClJeN~G*s5~f;)A7_Oo-QR=Xf;0<DHLcvE z8TdZH-;`{6{%WsgZ7!GY?X4iwZw!f<gMp@f6ChKLHZ`6-q879y4dfN)+K&Stek#j{ zP3L?6Wc}mpv(!#n%xp2AI_uHO@L-qL4?2J_id}f-pUxBaXcPJJ=!vcS&Lb{QxcV^K zELAOTlA>iKZhHABp4SRloQAzzlt@XQY<PQab>fVlzPG<k#n*7u4{nI9-#ptQD}HOD z4(vX=Xg7W0JSuHe94P~;AVEQcB?kws4;2MqiTO)|Am#@02JM*Cr@JXWT7@k_`f`sf z=0geriAuE!y8iYx#oA1%wH)NZfmf81F9gj$-TWrSmiGdDtdF=K6@JW?^3sE?F3a>1 z4wv_8GFhu|H^(KXS$eOJHBrnJr%<zOHx6m!#|W<@*>p|IEk`?@Ci4luiUi>@*Rm~o zif^pKb=d@4IV*K@amE&+IWDLg9%=AAwLsq`SNEHxr~a%zPB3J;aOT-sT)Dgq-*OwV zi)$?v-L`6DLKR@P+w%_Cc##QSQYq&C(m;IesLvluysf=&a;dEpM^JgkN7a(AX8&vW zB)Q=DA@I*O<grJB-)N)To4lU-kJc(R+`ZabrVL4JWF%(H%Q-BOTVb$mjuRc+G?MsA z(qYNy28CaDH_=$|L>XGtEXrSrP4d$9kaLhF>z)yhQd}6&#$aa^7;TD(jdk9lv-^uo z(QAJ#B0}phR&cvPr5AbUdx!noJ1bSgO!9kYZI|)5jKIy-;9qoh6qdnHD@Si4p0fe* zl)5NEq{i={Pc~8!hDLfFP1rT=G@DF@BYCGG0o32JL1i}NwcNB&r(u|cypgBO@=@B9 zxyAU01WTT`y?8zMpvHWJzRS!!X&z~ly6HF?inWOrML;$zvzJi_)CM*|%;c(5RjOA* zqX(h%R<D^|Qf6#b;NJ#VjmGm5ZwPo&n77oNW_k8dj+W*I@YCjLZkC)iB!aOpnbI=z zC1&R3NVC7W^JPt|*ICXqv!ad&Jbm-3BWVViY1TZ+x;P$<Qt|BxYgX7!6~c)(R=5Xf zKAJ5HSWI|qnE!H@Yg2WlBRXSAyF{oN+1W%&o~c*~9aEvsk??uwx3GPpFTSc$v1ydq z0=A347R#|cs~y=6>fVcKDLofdUh@F${`S3MeyP#mvMY^CLcy&we*TlFh8KTQDl+e^ z!y0IP8|uF18@~n8%su=XdlNE=j{agMCW(FcaZYFV_MF?iwMdD**nO^%c`<!EHt)XM zchTrg$<tEc1x+(qle4;bqtDT$YAtDHeLzD_FO-L;e4smI!Jo)-D+!-d6cYOTT%)jf z2%$zFe+!u5`XWP^=W}I6s*f;RZ**{38;x(M1k+sBhPa+k_t4tGgZDR+#rPNBirjY> z%l&zLM?`tDeWE{GpE)~O`Kkb(;wA$-3|_<+)FG)jXs-X%hI@P2BDWNc5o@6|ye2)p zNAV-+_-eJnX+>oB<M8Fdr4fTV^EThxf#X0gy*}N{thC^3fUlab=Hky(cTtdbuv57D z_Fhe-wBxnSnk0WWjMU{9F~N982%gbih9ujPKLaS_Cv3=WK1CV`bf<Jy+MVl^EGcv_ z(cWOqznyLiK4NjCsb6*xc&m^$9uop38{nx4bPtjyEe~6|EWnMt&9@?q1Fc(5Xr;T( zwVw8`wiI5KN!FBbF>70b0%RJpy0AF7dTfpQO2EYf+Cp}41$8CQw8Hj9sSla#j%!&x zdkkofa}55dNTR)4ONi5FbJhvO4L`w6ON%Fz%4!<|qj&EIEXmS;k#tD<&LsBITh5eG z`ztKy&mn>yOV|?1g}d&2?`M(`b$7o3>e_P<Se9h@<T$+{t9jJX4WbW0-aOJ7t(?Mp zwt3K!(4p^Aj7E#!1*g4&;(aplbfjqdRk1s1E{u)P8ptwlDum)El$C}wV?{-v4%s$T zJB-_$o-N4?HU!5gS})($E?)C*j$1|H&a4#Grfv6z%2?vSGbZc$ZnaBfg@0FM^cJ_s z7Bc#5a;iBiIea!`1jz%JBlE^t1Z}OE%`0`ML*RZzcr5ZBH;&`BA1ry<J{W}t<`Y!x zwRR~NSl&d?A4v6xW-FAz_at}%jT@&8IU@`AvWe^#37M6*?jS?-d4*T*FHNrIzTk80 ze&Qk|Z?m@Xkhu>-_zx4ZmYh+Lg9@x%%4jY34LNYDn+YZ8#7|1lCM}4G4CbqkRJBh( zIp67l?Q}Ri^qBAx9bbOFQhi4&5ssr-(d0aQQ)m(@FrlrkAY>j<aYgf~(|^U}afQSm za&UPe(!R$ipb9Z~kgwIgE!mg*yWw?<e!9u>aoXZ(By17S{TA(4M}kp;SkYI2us}1# zsfHV2GeGN$`8oOe+Ddhu5`%?zo$G7&Sc0A#Oi+$@#|<y4%?{ftGI&+l^D}H9WOl31 z;WqA4mNNWv>DA`iQD-T9IG9Mwm6YPIS$8%*JL;7;IMINPNT294nb%lRyJ1s0?cjdC zGxQ^CTxWvF@!3R`#ej{KoQtjK%jt{=(k`hvc*d|ybv^qRXA8@CLmYPFw7E)Q%7hxQ z$Q;DERW>e5ergtR)dpjD`53rd%NxX4e|GT#O8$6T*TE=bm9T-ko%<k{{*%Q}*!73Z zqX<uF@6*jhUSRTFKd|FkM*Q!w6C(lD({-;f7bTyk!_R<(=fgPXsWl(^koo%XgE_~; z&XT(o&c{-PSYMql6uYb*^X-p--2>*`VkX!l`gKBf4Us!t8ycxPtuRN=1P=9`KaqqA zxXZ)++j(BoK#3(!eh<R-B|F(+b5ag;a16QvhHR|jiB2RpmT+hCnp7I)yVeJ$c|*() zi@FE?=Wd71yfrfmdlL;!%=2018S`$$Ew{reDCL^N`(JrFJGm*Uz7!w-pg4LT8y{ca zdC|ZZyJU1+FMIGNnwYov%%Ln!vR5Y$cLK`UYGAre&naC7h>2^dr+C?>udS)1F4$`Q zX1BD`9AL71qGZuai|_&eb9Xr^{4{B{B(nW^@9=u~hK_t)0<nF?7{L&HFF!@_aW9NJ zSL*JAm8x_Ecmk`*3IZu)oxn4@9%I8U{6&ElwTP3d&GE6nt^jBE<Ljv-XOC}R2RW1S z^?IaGer2duXX4nyE8?8vCO6Fn@(6ev1dr4!bG8HaxXs09p7|i%tb}%DR8cNcZaMCZ z724w6L`De3>}!XRENT9b>FrTU!#>AInzfoEibvf|=A!zTS~{`d9I{qjc~f>`YMvDz zs~f~pc~;`rn8&H@7%=O`P*QpP7_YB+NH8j}kl`KurFC(T;}4UU%aT%p*$;%oOCa|N z^E@+xoI~PcHCzMyP>4sRc5T+2$Kr<Jmzm9}af^%bCR9~I-(#eqnJ=K8(Ej4}IdnPR z);H!DSIlll6I|s>mrbA}t=nA%y%T5XEiapG)Sp!gtD)+Z6Yk-@YdB_7ttFPW?0HuS zQ1zgyLw~sOjiflY-O-}>C%WpN9+7@3(`in~L6W_Gsr0N;83f_8ACK@gn|ldVC<_X{ zh_HQ>J*j`Q2<IKiwyF4GV$Fv~C2{4{^q8tc&U)xRkZnJW^=DE*0{%mCm84L_UB;Mn zZf9#GVGj|Ml|A$wZA@-&grGhncg=hi0oCi7Ev2{I2*;fESisG8*09Z5PRRY(m(O{? zU@1(ic_xv^vXlF0B$bP)H05^Un%aw&FN1vd`-|popYMS*?{Eb*%pCG&J~F>s66!c` z9#oN*<<Kh_Y1Q85_;5&3w%6_#vqN4|&$+h#Cv|X7YA*|ty-W~qtI(xy@{raEyPm&I zzWVOcdsaNJMPOdB*knzLDoJrba(D~6*>ix5tFQ>%duVt;cVqcf<QeP1O2zX5K9G;{ zHH@D|UY?JW?jv&g9cq2?)%ECQBrLFgqA&EOe_>8vP^jl3hS4>G2*A0y<M}p=Jr=Qz zj6O*$OvX3=X~GL1wzK5Tq#e7vf_%=a{`JWiH)~zbZ=7}OD`^29<|!Eb4QKFsNBt%% zoN2V#)mWLc)-gK4Sa5BacLwx^cDwyme?;LUZ>2}XpK+@CS1fDjV!sF?w}%cKpR<-1 z%cy?Yf(%bj>r;U+?RSTN@*-|Ax;1v_^3-6IzgR1HA>?`>n-U4Cr!kF<Y^2qWj=-%* zLY8tifUDs8>c33p%E^8qcuFEj!|3@2JGsx+cU4^nS3D#&Y<!4p+&Ejy+9`6gNEgz^ zQ4?Jr@;&aYj`B!x&Zt?6sqFQ|i&Mj4xdvZ%tm>>;U&LPL{_S&<3q@<_2?OB^?zEOj z8(r4T>jl!Isf_LTcXo1|9UneaV0o9M7&6XeHnCut5P_=&^m^>5Z=}FlY;)#2BZmh? zQTkOzM6Tn$u_x5kMDu&uUf?yGeFN&4>79A~<&oQu7ZiMqK76n*;Xi0E?=U5mCS(;z zk=(dE6>l>Lbv=x$jjo~f2YTO$D6hGn3^>2juBMu;sgoUn8R+WBLM98z<dVZHD*U1x z1?!SU%Zf`z87hP=>&<kkacS6UGV-`G4$NEzc#r+S>rd%fI*XSln=x*rj7t-Y#N9B* z$B2yy#x~(DRDf=C))PW}_qK#XuEUvl-!ESLzCN6$vN+OIf>}@VIC1fRwNP{B2J_z7 z>A=Dz&ran@I;7P2_xdM*#g~+(?BN4N8ANLJeOw8MleEP;T!{DQomb@*OAAq=g`|Q^ z%0A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 diff --git a/pykeg/web/static/images/chalkboard-bg.jpg b/pykeg/web/static/images/chalkboard-bg.jpg deleted file mode 100644 index 80d6703dd9f2914fdfac594b3863042e019e22d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136742 zcmeFZd0bQ1)<2wtISc~kAXQXE5pobD3K(%Hvk(D8lARy~g#gMBhA=3#v=s%^qv8Y> z#{x=#69`}-#)(q&;M7_b6<V}F)LLs*Xtm|Gz1MdIhuZtx=RVKp_kMo=yzf2zaI()n z`<%0fwb%Nt?^^an--{t*v*3c%RWw>e1P!OrXr?q1x-HEBN_6;-MxRJC8Y|OiGWw)9 z<utnMt2PX1!=b^M<^X>=^f_Z?7L?02rP2&vJ$n>>uhN)*tf$djtY827CuPZ!9r-C) zd0DwBS=o+(LT^V&YGzW_+FaTkPmY(b=Nw<o97m3iua~zk#~WTjGpM5f*|#dj>-U?i zuQGUDHstCX!eLA|c-7YU?Qzhj{5cN#%(utEpuc_x-GlMw-G)6cUq=gtUzm}Xzc2b; zJf>NUjbLS91daaU3C(Kkik7rq-|j^}t(azEYHDg`YGGz(VPnoTx536)Sd7E$$B)Ox zkGHq67&~75yuA45Gu_hM+|tU@+RDnBWo2c>(x0qYFCVe_-@M>OC(Xu`7DKBtpgYkR zHgp3U`ina-Nal-k^mn0`M)a`*I;=koXmp05k+F%X8PgmV|F1XcG={<Jo7ObCA>Dvs z$S^W7HZ?M^m<u;;3=F5)a*X_=62?0zisl%zc2&0qOrL=XK9|k)%Gq!&(8PJSaCm4W zG1uF!=GexWL3>0=!Cgo4d?s8+y5yfeEk4_mfA{AQm-3?}Z58Kk+<R8rPTjo!T)b*c z>0YI#`_^~A%v&N^y>`>bb;r;5KKRv!#$Z5i4afRqVr=9+)`e*tTSMr9!fCwGoT6PU zeGfhtTpOM{LpGGNVRxVqOU(5eaW>X>z+|R(*LCQ`kqJq`$R{sZ_ofT~eGgpz?81w0 zXch)z-?X8<OM9?KY1V~HjT~*6{?2SiVONwZ+wTe?m#u0u^k=g_s4}wsS~#)BxVZe* zv+MnLYv!kIX>xX&VabR$yC15twR8z8Ki76@`}lQfo$+)|io;Rmr^T+5Z5qoM8`BR9 zgfz2dpGHK*8`;_lUtE2#VQ2XG^~A@vN|v91?mU+nh^#*;FlCq1%138hjk`2GdUxff zfZPOM!zXgfyufc~GI$ZOOWU2TTMGG)6gwNura5~b{F-BScA9<hxfw^3I(vgmI`T}f z*or>j4DQ~4Rrte>hrdR>FA&U+D!+%B*fMw@y}0(^StN5a({F|{zQK$?(aEc(c4$E? z8HjwUlo8g9U2CrH^S@pYwsd*I8p85EH=#VF=gvj;q0AKKhgv^R>w#v<*(Wmm`^C>n zjvnGQJawW86GIp4b|1(X;f;&0_{hlVyY;(wX|3*?U12VpQ~cq*@=po#6G6G_ulYT? z1fReDplc^T(pKoHbaXYWb#`|6VRLV44ee*4)sMD<)C!+l*89HO_H`J~aU8Mn;N5#R z=KJU4Rtq{dhlOrtMp!Vd5|v?rbC^7N=R$V-E?bq)S<kY5zlp=UcZV4Sn>uq&Pi6#M zv^H*F%lZPchlBbe)wpxD^E6-Hw(-M3AMH*FTlS*oL07)@Q5(V0I<pxJ=Bhh9w<Q}U z<q0dp!e&_VwmzNiSM|s%(3Zyw?+V-9c#Jm0&=_V12Jqs(JbYms$(#Pu0<SQ>)r`x# z1@DG<J6m<V@8&Vb+TnWS7WUT3x@{hoSEtFh^R~<w-o59y;={sA<Gt?BZ_D0Y{&dDw z!R?v{GwNR4co47?XLsRAtPO<X5_6TsjIfBWeR(pX`;zs8ry;AS&L}VUGn*{peRz?b zVo-eDg!0`I#>+jJXLg_tiuax8^q&&`>fA=J`S9YJu+W2>oNc~OcAhh_?&{2`kIY!* zFK92me(~5c`cGv%*Ta*>4G4=cbRN?U)???lPGk3c$12+4tiP{Ujx?Hic1~($-m?6> z?EE~q)LQ@=KQ~V(%gU0EwFt}1OHR(r&(Pn{m-WAa@*Ms3xUpx2sRjBL0jYWVXY{vU zzB4%|G9e>b6dWyrDo0uXEr*sx%cG^xlA+`XdO4itPMbsH(B{!RX%eW(9lMhX=Ulkr zL#tF;COn~UPkTAK1^U<1kHP8B5!k*pf@Rrxsacu1aNkznGB7(Y^L3}7)3Tg57lPHf z5pOO6b20<}yvWS^^CDa(&wX<za&_LCHy6Pf@}M^tFfV_;Iv_E9^)gvnB7C2&?*xq| zSP~EjKYA-o6C^o0CS~Qz{IUl1mt)70oXr1H7a;$y?E-R=L?|;aWV%4EU#mAqfIP|Z zU)2k8<#}WE`~tb3;7xPpn&ia1tel{PyafFS#yZJg&Ch+k%KEatG5qSgO$$$6_3}0U z^jQ&rfPeK_VWRwHJwGSWZ@K;rFIUgt@mSINm1(BG{vDIenPc~?#?E7>ch|pKbIY+y zy<irMwS4Ez^%VWJ!OvsYW@BeK(Z?hOV2l1>zFq<vW327-vD#4D>{YAajvUSaHsGMY zs;S<$|4q%DvHBP|ziy+)G;|Q!H#KAL9EEEdEt^Jr@h=a9@AbF;<*gV0Z|;rFh5pqv zfN=D&D?O}xwS~v7J;$yY^p|(_{nqzfzupF8_f5xYUhO1?AG`?uUd{Rxed(n-7;8IG ze`yc~r<b##zohBGo5^}8FllIPtER$smBWTjf?47~{i_WCr9Y3i>h#aP0f28>yw%`M z-K$ROuQT)IdM%?Ltg$RBKQk%!pLSbfp8nHgnoKXE@~q6&a6NYDMfvUPfV`}Xm)9@5 zAy}RA>i*cUjC19wiOIQQdANQ<(Esusqp^EXt=BXrV;5mTZ@t@Obxu}(_Ft-uvvN{b zr)Iv|XBNRi{o9v~)xkR~6Y}%2mLz8;=OpAMCqV^G^j`LB)ysU@SYM;R6PB^s5q|z} zkKZ6aNB&BIzgiUi<o~rMB6sy`CI7OGae_Qgl(70Qt*jE0;ko33ys+F*QAGG_wPX6a z`Y(;mQnGT^`O8yRzn-aaF9#p`x*A4ql9aqEA%9E_nypFB$@>@0#jmUX+T2{WIxtI~ zmGjo*+Pr*!z>+sN;1OD6R;GTg&GNFc!93<Bzb!aSISA5!skM-0<$*x`mwIzp;*@`G zKDMh|^&g^Hz#rq?;j!{dJEwQZUW)L`ovLp^Gkgjs{Tx@pALu3eAdObv3H3cRdvIa? z<Kq0s#rcnm^B))I|2r<uOI<h(v>grb1t>hd@*79<2Y8W1lL5@odkHCHUPTu84Ej<w zv>5+Cv~Z*a(uA~^U~WtczeF@9W5@=+@nXpGYD!*Sw(soOnYkVbdfLk)F)L$sK|=Oy zj)&)L+QN4WvJ(>1lk*&9$zabHIXyk~nUiB`(jq5`cZ6p|c3^T!YUsM0WZ}9<QR2Gv z#Q8~1?=E&+Sm0Zbk)4s8m*7~CA<xY9Em-6<_Hth+>#JuwIgT~SOJC$PMou|KNAMj3 zvvQIhy*)hL6Fq%A9ep?+oVi}}=FOYs2%MYeY|lBfIdj}O^L*#d@%8j{e04a%*K(3p z`3izUUVRI$7CF5d)Y`RcJ=V_k$jVtgn=^m@eEmD-%yEYn?z!(}<|P!kXXZ|S{f40A z+{B#JF|W!||3>f_^79rsK~G-}AtU?EYyah3z11)x;@>yT$k0!~*lTn1g4e)T{@o(v z>h1SzL2_<ZeokU?@S5bzyy>qWPfC3AY&Ia6v5_Vv&Q6vmXF#)DSVYd7Pi4R6Gv7S& zmvOwgJ+|`t4`llW<|HS8|0Dw6>GeYW>4?9@ioVr48Jw-;MNWE})ZG)-YmVqOP3rE+ zg@t?BGy;Sm3B0oZUE{2z)K%~OZ<<C#_=aWX<|Sk%CWi$ra)Kdvq^2hM2KaO4c?Sm0 z^O`r`D|jx4GoS0}<?rni=ou6o7!WeYXRJ@~Y*1EWzJA_bKbxd~cK-kF*_YrpLH>XC zj-*82RarS12_Ooo840VCXQyQ+uXb{LvnIY{cr79;38r@L+x20Af&84TRjG2gkqh3p zV_0yY4`;rQkNX@Cj$X834q#-VskyL@@4ebA!eqs(l04OMOagrq67_V#BBw<CiYF&I zy{b<ASF`y)&dAGGu1!gX7ycVTc-bsBYgOLbgq&pm)iCq_Udm?wcfHO{So1&h`G1sv z|66^2HIa!a37M;tL2u4>(vM=cUc<axhS~qTLSy&d(nhbFgNoA^-{{uGuXW&me*ZHA z|CxdR%)ozU;6F3)pBec7(G2|Qoh4@iv{(zi*9)CRG+@G&e8IAiu<+n9N75oRJT)_m z0mO0!L~ryUF?xB7qsbK@md(Hu1PVDJF*iFx7@`kf(Eva?>XD?r{OSN_^p{&N8SWnU zP`;z%>l^>eUz^1290=pk`OtoD68KqAE{3vvZC<v%Ue5=zWa;`cLr-S2a-f4yw%3<e zzbwxhYxA<~r!OaEWCC@}(DykzDI-Z=J_qH^Yx4D!vOzeMOV^|(uZ8jrD9@1RXQV<| zAH!f}BqspPZK&rOXXGU(ra;*f$`&~yK_HYDLbi#;>bJ_Wx5|0I?Lu2xU{>~fV{E6R zYa-hb+)J)wX!2Tla$cT0A6({yoFs5)GqMvh-=oo9j#>W{&Gx^b^s(xfr+<6%t#<#e zs9)Qc_kWHWTQj=d7k}3M`Q)E<Sv3#|fq0R@&Ohs9`)IV|B{Z7-H-Fa6r~*!+m`2ll z_11Xo^z!nSyPcYx=%Js`H^=|j;7!Z_zVO!fJoMjt<KZ|4y(GsS^-`S(WOsg!V=gcj z$&T*-EX4oE55Co{xB4+lki056CmB3VM=?lQYUXNK?#!fAy&L72n)w$$?5#KaA3pZh z8}!AOat(#?NB==%t@NN-f5oC1JpO`aINqFQAUzCs=x^37+)NDQ5sfC9`rxJ9LmBRm zo&R!T?0`!~Zt7UTg%&6fIVR@kta;hQQ2%2D(XVkd7VRC{6xwu}>sU~G9&G{5j}}bh z(U#FfwB@uFv_zn%G9Zw>mR3kBqLtFN(st4+X!~iO(2mj?XlmLq+Hu-x+UK-x+GR++ zx=HJ&4btw@9?^zrztDb%v>y|?C4D^o9r{$dGu@3oht8!hrU%o*=>qz4dOUqKJ(HeK zFQjjzZ>8_1@26MO8|ba{6ZFsN7wOmNU(<)^59vSAe`6RhEEp`tWX4R!YzCL%&sfS3 zG2$4j84AWaMlqv|QOT%bG%_@d&l#5)HyMMBM~vr?m1S;VXE4pc-GFNlXt2y6#$c5} zj=_fpguz~e8UwY#NrUqSJqCjYKN|ea(AaRip`)R@;R3@@Lu8m}s4)D{aGT+N!+JxF z;W@(|!y&_A!+#iA8aWub8TlH88AThdHd<>`YP8o#Y1D2+8QnCxZ}f|?v9X=8i}5_; zP~+vsX~ypxZ!<n*+-%%we9ic-@pBUslXpzqOct3eGf6PXGbuIMXVPf$naOpN`zE8N z=B86k=a`0=#+YWBZZO?zN}6_<UN?PU`n#F6nX{R%*)p>vv-iw)m>o4cY4(-beY4-0 zHcS`hBBqF$#w=o1GSy6qd7JsOxw*NM`F!&z^HlTo=9T6x<`>L|%>QO#Yk^w?T1YMO zEy^tFEIKW|w)ol7(sHJypJj|?o@JS3gXLMvZ!Jfy##?z<g;^z8ePngON@I21>d82> zan9rX$E_H*Zrt8+pN{)#+>h2~)-$aGtrM(2v_4>c!n)V`xy^VRj?FTg44Z8>q|HT} z?`=(NXW9naCfOF-9<e=Zdw0CS`03*V$0v^8IR5B(YW#hcG0TM&#!6#tWi_#`u!b>P z%nK7^1=s=X3^r(IU^mk)%ua5%!|s^fExX?)OrGFBA$h`<3F-;gC;VzZ$==UC*`Ba( zw!dlr+dGc$1izF1&aQWkzjJ4z;Y565)Wo$D4^N~f{y2#>X~Cq#NyMaMlfH3aIN%Nf zhxZ+hIDFyoeDajZOD1Pe-Z%N|<R7QlP4SzOHl=(@$CQUt$4^~6HFawF)X%2=;D|Z; zJIWm^9nU!qPji?SIxT-%^|UL~es^+lLQWf;nw{=UXHMr%Up2jade`*f8B=FO%qX0p zn(>XZnKRcp#rb3B^UlA{beSocxoPI{ncutEyM(!{b5Xh6cC~bU*Hz(K<9dT_%;vJw z*@xIyaR%;<r{D+huiO}JK5nUQhup5sGMY7iR_3glS-tKS?*8s;+*R&F9(Eq#9veK4 zdpwyvV|L8!U9->6{)eZxr`+?XXFtc5!{cn=oaFp82cMHT=fIpBb1mnF%>8JtcJ7Fm zn^&^eVXr>#@!k>Mo4mWc|L!x-C&x$a^KjmbdGYfO&g<o}xP0z5?uGeA^8@C8H2?Jc zzxn$3=J_7;eY(JXLHYu6!S@SY7A7w|y72BIr$q^isuv9|c3d34xN7m>yVKrHc(>+V zo!@l7BtNC!1An%Ent!AJlK{_voPhR#UjuyuKM3p$G6-4{L<C(4whczX`-8s?aSB-- zq6!&a;=SbkC7q#0p-V$|h4zL`4oeJc2pi_j<9)z8x71>(aOwV~x^O%^C;VgtBZ3#P zC*pRbb7W@Z@ny7SVaxU`yTf<kEBL3PjHCEb2co_ca0G>d^TP4Ml|oYZizq;}L)4F4 zQ9kMtj}uG94dP!VL6Y5)!RXo1A4FeXK5=>Ka&3%Bj5tOa^E@^<wj%bv)LU9Ay%pyY zR}gn`#l#iz6=znCTbZ!((|DtJNjw?<N5Zm%nuO=FFxf%baAIKM$BB=U{F2I(9wskJ z-ktnl)uL6qSAD;F(ds>`AEvyUvNz?&)WFpJsUvBjX`iJ1n!YT(F8zgEB5%$x&4|x9 zk!hQmo_Q{7N>)MEwQRTS((FNnucAURoU=4XnM==&%hl$w08D+6@0wqdKeT4?ngeS_ z*NWGET3}O<S@6Ys_<LL4d$2BKUG4jZ?<c<BRXDA%sBq{5{|~A^q<<*;u<N7g9~FOe zfBlm6^+n90^r9~}cy8Fe;n_yX#*@X9i`N(5Em=~cDzz%jDec{~VACg?4L7H5zOrTR zmVI0PK_n5Ewt8;eyY-K4iQ6u1=WMUs{-SJE*_9nWI}YzO-kG`c)~<JV)$g|1y>9p2 zJrR2}<&Nb<`Ll|Z6&Lq<?fv9q=EwOT4_1a(YWL09w{zbg`&0JcJP>f8`JltWEeC%+ zlyvC&VZX!bPbPn|^^@PKQmgu^msD$NX4dRIVti!Hk?)R*kDjmP);1_7Dz_^CUYA)n zSTCqQ*D$Z4fpj2us2Hkz)x$<<<JG31Cav0CUEOTgytRealHc+}YkcdiV@r>9eaih* z-R9hOuzh?xp`mNu(+nR^IX<XeuDy1GccSa$f|Kp1JWkb}o_6}c8SKoC4rWJj$BWO_ zefGRFyYt7-SATxDYh_pe+32%3&PAQOLM^2(bcb}GJ@0@1vkQwZoWAIL@x&$WrQ?@< zE^EH<{-XU$?=Rc0_*~I^HSa6!)%jOXUR!vr<NCYTKko_Z>An$m<MPeOo7ZlkTYbIK z-od`4zVE-5e?9Wens0vZUw_-^HgU)L&faewzO5Nx4>S+@44xSZ8u~&f)b-y@y!+^0 z?!7<m7k_8@-QEXNA2fVF=ljzSLmpoJA@+y+kFp>A{$uH5o5u&AxISrn>i6`E;ppM} zBRL~4e%ki)J3rSw^Lp0xod5jWUow9A{a0f2ozeQgasPJyH_2}geqZ~C$sd(}XaD`= zKbHRE_KOV2>iIK~*blJ4%S2)Z0}QQ!Ap_EL$1+}x;4n4?!)0P(YHl`mfQ1=5EdJF& zH!v_TF*LC>F|iy624>tieIoHVNJoa_)sMx?tAF)0)V<Ir5*u<&)*H|v^Y+g~;$cW6 z23QL@<N5;%V~3%U0mGP1dzDBGeSiBdM3mo3BxXR@Aj)oR0;4l#<kA@iHik4K$RzfU zG9I4*nZ&F)yQ)pFmx;VXbM0iqGjcYJI0t$Och?+C%<b|Ha@lj_Q=bW<q`b4&b*3{n znlbI)DJ~BVIoc-fL9P>jy8E*}nK(JWq~c{l@qd#~%nglBDcD?Duf5Rs{V02W*z(l( zw(M&-aq;Vif5UxwF=^|F{p86@-~8~~%fw>?BO^$LHZ(Ob$QX-|>vNy|jiR8(#)_g{ zbE;d1S)X4UnjU}&WH}>qXLto}u-h$ku1P%BWs-Z{TNku(f@lw<S=+xe(<gYMOHv-1 z_tTM2&$_aE?*3d{ezfhcT@HCG3Ht3E=)d&&-*ow}xymEq84rJ)!`m*oufaPuVo})~ zw7y4aB;T)7Rb-R8!3^S*4EI#Uts4~I5VBOFL#+W0^(KY*sqJg2DDxIdyun{>6!iD% z4or~If^VOnfJ6@2_=7Y;M!MM>Ysm(zA6tGFlhb@<<g%%=P<teoY_?Pti7pMHq=ngT zS>i5o%EyH$&WMBVNiYGY7n46O5<QgS<Ywd1TIs~cgx#^C4!ot#y%k*xJlBf_?N#=v zip%>k`Qd1?s7$L08R)<pScQ>&<f`U#GSc>4_cFZXZU??4qE)o4ah<FwXP6T8=MtKu z7AQKCgN$PwP<ZQP&eHgtNjfr_P1tZe@a?xP(9(Smi3Y8Dl)PuaB8~47Dl-jbx$dY= zy?TTaS^citdts!Lv~nx4Jnv7aj2{!R2^VDQ?cB+&0n=)yv#R%9mX(a0@g3yNxESS6 zSXX!tU}DQCqWbIibrsd4I(4EHB}5Tex~8u-vSNX*grC~OA{F<0SzadNi5hGKMQUqv zl=!JqSE-6XrG2U(3CsO{xS($U6D=$5#YCxTY@$i*s3WPZvih*Z`#qR2I<=QIfA>aK zqu-KnWD`Lukkg%3bm`29<lR!&0N*`CgXdi$_I?!6R#RDh-Fpqi53d?TPF$TzTl%O( z>|4~sXfk|8NhfsRjdhsF<9%8EJ4?qCC)V+GO~sS5N#{un&9|fEV4q6vMrbPHMo{v? z;}lZ$>Bv={k)w$3x}vi7b3C1}!EdlS>z5zgzYSSV+^?(OpTHYtJSEzq_YgI#t64?n z;g#eTZ!WoS$F8n&fr|~%%%aT0;|I}VuP*XY4?~nRkWj*pS8%JN$9+S&U0y?pvHH$p zhfmBXB;z8Rm@Go{#p51^gZ-fq#Ga@{Y3)ATTI-avg($vXiT6#u;+lF=rm|b~h(JF` z5{L=J^*Sstq61edYbwdB2O|{7?*W!^_y{JH=oILwdx%lMPiidY3*UH=!`90fe{cdO zUOvvB&^S+5<2{E9RQ~J|iJO8;I$rw1r?ZKXtvWd<zM#gIKa{DM5{5cj`;3ZBR*wqq zo3Li1YBj#)IZR$^{T+qKx7&=0VtCG@B<l_a8{->x=EA^h!aDi!h`qx@i$bQKyDF>y ztPm;Fh<MRlk&HBoNH0Nm2NH{-rfHvbss7fB#c-A;8QYUP1$A=%=@Ux)_&zTA+y%=j zi5w-nH|JBLhvz|5_SJHb(>zMN3)UmU4zK=xeL8U@@k6IdReX*&CBA6AKt~1+JuE^W z1Q>aepGc8%r3162R)KuBGR5Qww|cV0KlZ6{$oIZFvV8Ncx*25ENI$m1{vb-6{0kM! z>Qr^X2HPaXzvIDL!WQkTO_`~!wzldc_dHocNxBy*&}!DC1mwJ!i%AZ%V<HrRqOK+h zqiLN^wFg_d0)+S%Du$uO3hY%G8obR1lUiou=e@kTnoKBkqZeC|N;FLwC4cgJNL1g} zk$#6qG1h@0^hYYJ++(77#{d?zeMEw(@v5#$6)zH3O_d@{gZC-%C(-0}HzMwQhwF;1 z1c@o}qp^hoSQIAD5>!+D`?8ANvJxw9?YhSrTy<{p2nw#EVrLVqM*~>Oe%;>BDf0_l zm7h?J*IOCIbRI;VLRK@k+N!gcsZkMR$x{O1#(3Qqy(~BSWwlXM_5>wfeL+`|RLK9@ zo03kfRE0mM_>F5Rv`0ZmFTF2Q-8wTOzEBs=|7M(nV2iSk+!sh-HXISJiNkv$>c^y~ zbfsT6v`}tWd)2NA?*+0Zg&NmRo6JEg7RbmMGPO`hpe?Y{6$;cTD{<12gH^JMvh)^; zIb$t_UxFQBH-P2S2QXot3Cs1jJSrx^pWuIC_K0Y73pW*lOmr%-=uQoLg(^~O-QZ6& z_}t;3AI^5*wa!*}dkB8hjZoF}V0jy{*ojX&aH4jdjO?g1D1@P7aV2iJBA{i2atCcG zJvtchwI@0HF@y9SmDR6x!7|2`;f=8wt-Q?(hL9fz#n6i^f2Q2<Z1ULQKI`^wEcVhy zM*SXPiHFW}+A$9DS!^$8TWsjcy{ACmw{=x~h&>|gvJF`3s?K6J%VF}#BneC7R>Zup zFq>?!$Fi71DA<o9z64_YxQKs0ExQ&JbYSEG8980fyxY--!hU&3G&QZ^l4mtW{8eiF z>J%>7y&{eyF}&N0DQM5An5aOa#xUO=C2T&(BzFy=`)s0-i)B-imVRbEenUro;mSdd zcUtf!+^xh7ti>m@Q2GW%U_~mSHqqc;$LQ+Uu((*VTZve!#*a1xN|BxEbVj2Ri#dx$ zxtzzc`wN-%mf5QK9yvm5K`Bp??Ik&=bQ6ocy$siC?Q1VPD+06&OYt@}UYgM=COP6^ zw<U#mZC4$OG*Y_86`?iLnfz_@DD$Eb3eoJzTa;LQDjqFcmNq1s?=M9W-F>PT*GBIB zk*>i4y^XQxNmv|j8;UH|lGXiKv=!bUP@td~9eGfJYCXvw4St-}9MKxk>J666BDDuw zq12MyX$~kmP1oe=tv0Ojna*O{PQY>){W|ifOzl#Je|i`{RZoeb1K0vx)0|#xd3R-P zoRI>Zla=^TqW2t7LCl~;p~S>-t%&y%B`#Ovr`<USu_(MKotWrqg<pfEx<Mx-HiR9R zK~13ot$#|?EQuHq->g@l5bsGca@zX`k)ofaF{PLlb>T>@CF?9(5u=SuR(aX0iYW0! zU6Zbf0j4n@)X>_+eX8(2lJf2(J4bb@&+S!}zfj`!@FjY7ZA#jYo^E++*UTzeQz<2K z*h92|t~L)x3D8E@Bx_=+M{CzHWn{ZO;1ro^b3e;{g_b<F|3?MSoyM*HRKw2prYuX; zxVomYHUW%<7Zum5bd@u#*g<Oi>v#@2{hmx!ocEAuyDUZFGx0_vj(D>P7TvWG<5#<2 z(T~FU?O~KV=P6;A`<OU>8Ov#3r`vlNEE<bqW@wC}ycT)ZhP6y<lcM8O?8$S6I&%Az zKGLD#F;RUdl)_sXu(ir6Nk@-9vOADCF@Bw_{v1!%H2*Qtb_9%xr(0nNwlW-rKQ6M| zF}?(kOfNF8(CSF?k5=BnjVv~~rvyJ8X~<RLCyQkj{zC(-`TT=|`Uy;xk<!qsQ^>4J z8n(yMGEQ`TJhw-Qf77l&hlZzxX}GGiGgolZ-U2E1oMnnmhz0|<3YnrXwc)%=rxJL_ znhQ;(zC-B4MVzHe7?Ut6X8L(7mN&%fuIg01mw?Lpg$(PXx+Y_oB+Q<yVE1CtqvYl( zT-AXD4PMjSf!ANYjIEsrn&(Rp*r0RYa>*Gs1X*uS9@vKbHx;6^TUydNcnw!2KbVbo z-%b$Co8p3r#`R-aYBq=+IqU}L=bkHtFTG1(lxb&uY6zQeqG5T|mEp?JhlJXABNiQ_ zRVB2dnINn=kBd;bu4%-j5LZU4`)adySCWG_J4^oVS(_zAU%tbwjt|h1(=0hCt(R5p ztaOc1<KF<1eHf0ay0m0Fj(g%;f0wCwzjifwHirw8M+(t$%_Ldz0uCjfo<$rn|6_ry zUhIMi7muo5Tpu|UcKcpMdV!2g62jKs9@j!n17p4HG0{*$N%AOkH=~8r^{J$-Xx;#p z8o}Y!QxYM|>+)TqNs77`N0ZNa`IPkcJWAZaB@f)vVle<>Lo!B?9as<*p|Wh1<k*w{ zSYc1z7U<jv>{@Cs1_IV#3AT5LP@SKw5bs|!g8p&1k37UZh}4N-njMhThB$r&FipR% zY0qU$?#>bST@_-1z3V_=(pxFSm0-CUM8k&k4t!gb25;TYL37dxb?{Syl&Kk&WXlJw zXp<UmdrHJKanRjD{tp&R-9nDIyFUT7eXGSZw`D4kO)nPr6|>n`i=8_t7<@*FPr>4E z!o>Fpy9zZ<8u!(PW~LI@8hi3Lk*s14=-S$O6f<vzj;yEx1G`8eJ_wR{JLHT)luWl* zZLmNE;R5X+3v_CekEMJy4BkS}c0)#@1`3^-OQ@szF^L;!z#I#d2-{{-%r=1<CQ)g? zayMV0treEK#)7<Dr&GA}eVr;viI+}#Mp@3eDq&Se0}g&bkOl)RuP}f@{!(V?tS}|( zIM0HA73(A~PbdZWB5T6SM#%>cHF&8GCIfglaRp<D*Miww-zj)bNdc^lm=h}HXl+=x zYm5&S3l2m*fVZ}Ja<+6yAxib4MCnq~m~Z>Y`)YQaP>OHa248Jf8hQ-HJuJazv56CD z+0$6%lN{K&`TZD*iYj8-0t&W&T4c_9T;jUctDiA3MBPUo$>_j~R}Em%$$CGgf<l23 zIU->(W<~Z@uVX%^Q1J&Nh_5A2E+NQcJs5xSsNl4aG06>7QyEuK)&IP+ctKc1E3$(H z*8|+DZRow-hZN`?XYg~*?kR~AWaBkuu@307Ah5JG>p5umI1A>dB??i%l5qSED4T{7 z$)Rq%%^g5maeO96tO_Kwt#WjO64^@_4JAqpnFGY~>c=vVFd7psGsObfXDMK=Z8ew> z7U}&aW4xp`(rCrH1c|$qkr42UMHm+$!6{t@pIyYf)X8)}!QV$>IRG^iCWCG9;i}4i zg^_LSFp7yzSh`W7#CyCs0h2Gv1uf$Va+(1s=ahA_lBvtq>FSGGI!PC7%?(Pt{R-Z2 zzJt{;pE5TEn}t6mj&N^)tY2sYxacelM=yFt_QlWPY1*k+FC|`M30~$U&_dr0U@PrS z<aoaaeymugDtTYmv@-;6W9mLuC|$)<xV4|R239^Mnj%I-!9Hqy(`xT3FbNFF<d*7i z*d|p<y!ES6qZGzET}70}HA{`RJSNnZ;i$lyLM)jIP+HAXDatD#TkXlytK~=mHl(B* zZ!H1EE&~&MY^GaUX9BnjhK(7mfr@s8$p06L|6LuHZBJIwWcB5@WlcLd$aWruBuci> zsgC6{9ur4}qm#0x{X$Ft25q??W$CHJ>v+0~n|BEZEBu5>8GfP#|5hu|Xsu6gZ$%z6 zwF32l_<(<SQ=*k}<hTDIS|02xQ<bt;5)<7cT6qJ7{4=54T2Z?(UUQ!1HIH&@Aes^` zv%GeV>d0D96_Q3+eTkhCzb}i#Hydt4pLXD61EHda3x)`_oUhza$2zjUpT(|MWe`yz zi@?3)fP$%TBig=)cY<TpiVa{fpl|)siG~vt(@9&a<dVe)bmStAc%O=3?Mo*bpZz|F z{3mDE)|69LAjF~Pj7PC_=j__}$VCd2-&uM)gQ!-8qr`(~*<O4zh?j=<j6#VqGIfEf zgDtolj-vdz)z(MK`f7uJ?IN)OMva8!_1Hg(;3s^k5b=)7`DZ>()71;wD5+5-z6Fg? zcn$CfqUb+7$*QO#%U)I+-+|w^<1ABLakt1kUCLJMS>Mm7PCBrQiWSp<b$Cw^U~`eH z;{Cyqge?Lm`Hx4$@pBry*VczZA7^SwEk?zi#YDkWR9agXc{>EZN=a^=l2yzMM_CL` zzz;pFhEuxY>FpfRq%5Kl{4F;4I-gje;JsS%ia`fHxDi9oH2qjiy+}vin<yjwLjgw% zr%of<TCEkLl{VqXzXUWAu0Vovd%&PQOqFXturY2O>};hWcZj!<kd;h}859Mt=^~e4 z!Ze*K5L}mrFNBzIwv<`bzkdi_)Zk~1+hgG_W%xr^Ptu|l{3m{-(c0RQ*x$k1_}N5> z-^q463HJOh(LDDtQ9q%9iUp+m6|A)&5<?+e@+Z)4)sKj#{K>7n^@h;T8f~?3FW!sm zRQ3R9_SkaJg)j<jm60yFpdVFI6zwvllDrbqM#Z`T)p4I@p?4;4jAV~+QQ{&Wd(=8& zIf6b1gm_bl<ttEuhLW^4hoiGtehA)iK-NSLN2vhgZs=6+ffI6hFMcMNgYN$hA2^SR zdGWk%6Q<oWV48Xu^~a?mpHo0w=$eYc5tR-okkM>Vh;N=`fx-zLDOHF+SK{hZIua(L z^;b%CrH_1;rX$x|;G~Z|7P^rj^X$nzS;Pt3O<2&zex|mbi-i(0wG^>7$&rQ<Et8_< z>%f?ST}#Z2CL8)O!Kz_O44CtqDjm7`JcAT#VeeytnOdyvQMiC$*;k(d9M$a@AMlA3 zKMj_9Z>QRlAXPfjLxHSDYwZqk0-kscV2X7aM13#o_!&;X=$R2Du_q6?5sltLLVE%* znu14ylh<y7$vZ#=n@d=#?s-&H8|=Ftmde8wnM(zq73n4NuvV2;-bD^duxwT*d0RtC z?O?c7;Ex1<sSsaFCz=!dJMc})QSu33jy+P;h!U;tVgV<p7;`Bq@bAH*@~S&a0FdJi z@7!BUxdB-*-`-kz(_WR{fyLbDY*OOnWxxy@^Qx(sXFtrNL}%PbM1?$d2i~t{HAziH zi#WU;6AulO)A(yT)n4`}xPhoI5)w_T9k0d*G|h*_cIG(<8pku6r^`)+fFh9f5U+|C zkA66%D_J!f(nnSfFk{__CinA<iD8PR`yLSudx(jTS}E7Hyey)A?l1P$3EuYPUi>Kd z<k`e2fIaqPO-3sfyAEDn1^i!C75Gk+M139$GFVYb{&qECX&Tt3A`aS?T7n0U1YExf zFIzM`EvPJ-{MMc<iW??>lU4Y{#0M1Fquc2{j1&H9oY0#%gAPn$7F8sQOYLE*w~2K1 z-#S&2JAnF#DR@MPuB9jfR8KfO!ozjNntoQ*Jr|Z&#Zv-ScQqD!9*g$xR4Xyz44CSQ z=5Xdw{x)_-h#}4b+U%?bZ#m;b#l;LFlNryuQ~_mLa=6gbEgzI)Q;A44DkD3Adfdz< zs{w2wH$puWj`Dq!cx`u`9I?Q6Z!#y^&SJ6JPIBu=0<UUo2Y$NBzS_Tm&>X=;Rp6;y zW4I9wjd_%W3wBXfUlK^Dz-Nnsl{#4tVqOIZ9d_c)k#beUsiX>~T^$y5erg#e)m4%= zV_+A7o#-R4cWcQiAd0NOJ)4C-Z{@WpT~msPdSAf2@iqh!9W;$2;z|%p$WSMgn1d4t zD5fbNHgKqc6vY88aX_}ohNz#SC2NQ*Li0p{E`BCOqI#~XIFY5EUgj!KKt~6c0+TtP zKZF1qNZe#<cc3Qh0GV$?%Z=I6fpOvd)|KZm(Yw}^m=0Pc62GYsuUF%ZK9n?AfucL@ zNflpLzgCKZ42ohG<aae0EAcZC3SKYQ`e+kDZUkfcDY!%1qlgJMgf^oW%Li*zF@Pa6 zaD=Ra9FRoK7J`GZvxtbD4HC0aR{99cOl{gh!IlVMGwpjZfqOV#YX#23zK9WCoh2xP z4Z8qR_OoU`BFI?<B<`hTi{$8Y1&VhCn;@H{D_%~s5Y%aKJ#y~F#CN4=tp&;{>mzj> zG;`%COtf_XOAGAB0wo|Q;O9kf5YVyBljl+Vrv&S7Q~GK@->wL#z74!44}?18^jb<B zn%<*_yOp)dtt>W6$&P)v_aWHNO9xF62EG8eq#{!`A=<x?f6^1k#vPGISdByB{L}T6 z=$%wTbn{ElT=pVay#UyWET(AltZZECWnZl)aR1(l;@t?TsXbYT190Ak_!%ASnDbbQ zx2I}bB^D4EB}Ktu6!R?D^Yg4GOTz98u!GfZ9r)4jDr=V=c1_<28t4aDycLzIlUYR5 zOsz_>eMCfs^r=4JptJp;sqQEOWA~J}mW+lN&Prty$1iwxmCsUETGvd}lHUO*K)b4I z8V?Y^8Hg8m4%*&<m%4^gQCqMOy!S{TK?*i9t1o!>V<Ag=u-qk5W}AxxPEG>0PNtgQ zt7fOOJTfcE%IR2YE1H6Jg2UdWvX_y@pqr0iQ9E}LjpC8creQTE4V5yLQV0CV<qul$ z?-IlDwyYvi=m4|nengAg5=^lmLE=iG5?`QWr>pN`Q8sI-SaX707q3&}CQ?+TK!1<K zd#+lbYfluSFe!fYoCWgJHgV7mHLkL!VrB2k)B~6x8B{k1@!bg010MkV!hA+aLMpoI z*SFo)HTnE*fq3PQPEgXpgD8lw9Fe@ZHFA1GUE%JAlF2RL6dU8!)2LX0@n0y=#zJ%q zz>5_`RTN^a5KEDfMW<w{M?kqMB$&M_oYtul-Oy=N=UL4VL15mH)h~HO0O)mlbeEV= zBn8kwiTZl5j7gZ(51xvasX`uLL1acr?A>tY35EDlFP60(*vxaFQezU(DAwXeNJv=; zsHL5t9gl}IffGTCZ{aPqzB)A(OL<UI)<M47ZX=eC$zf-=HTQ#cW@$BjWM^OXSK-Vf zPeCheWA-z3_3N?-RS7suQq*zClWghSJD}{V4l;oK#{hHv2!?3P05Vg78Vfn7s1-$N z9)Mv59nvY1sr;%b*IfXvEtW_@DArQU&8dVWpF*q*VuIm);?y-tYFkO3+$JC)mc)Yv z0{*KG!bM98`DA3jtO6`daB+Vj0+tx%_erp<3UF#VqCqCb2X$m2kV(r`Jy_tORy5d) zNoibFC7o#aM2`GF#!}#upH6k)w~ez9oB##4Ag_y*E)y0ZW7pIjrEI>-c_yj8lRZsY zP2n>v@DsugLyyVOyJOI63VmKhi6S4cJf>$1*M>w^T9-y@$xlIT2EVT(VMAQ1piqIV z34>i6<ra=s%!P%*2IK-#ML^_3tihrqjTDB@frkTjtj34pe+e9I<1u3(l(GOja_!0D z<^e3q_7~9QyCeI^Z`M*Vx=6gOnv&ui6z>B*cBbB;0}qBr$W)^eZ23uD1xkC~MUFfL zTK(HT%%ZQlHrt1CpGOfaZ4WcXMPs!5d<U?=JuJ6+11#5N7Fr5E`atafmhqtjT05;o z{G4(hwpW$&btUnD<n75%Y&ik<F)EfLQ|+B4IN}M6ik|`naCnE<#Du~TF#$A799YTw zTvhnN7W|!$%UF$KZgo27T?gh}4Yu+U0H%I9vo;Re+Cn_B5)0GxGd0^h@dih*o9il3 z#62axX*|H<A8u08uZqMf*o<=k3a*GoNK%Fm%vnQ;J-Or#CE!j!CEi#`9%t&Bguq&Y zNd@uT4ipBq!cL2nfy8lpC4S<oGW==-B|0ESIqg7CJi&gCR=wyQ`E<&1@0d;CS<BW? zq6Q&Bu4fYs8vH~mjQ%(!h7hBQIMFXhK|n9GB2br$moP~6D9W8Zjc6#=DG(nbNbD07 zavLfV@kF|&3J`!6ayXSxu_q6^1sM?S=PXBf-QEugJFr%pK`#GjMcYfHT1@1C>$36N zC~KXC;IkcNt|{#xAHX^E)wV;}N*WBHX!|@0zmQ5ylB4*BM-W&fG}>z0HcC8Kws$=h zyXKop(qUqJfNm76g8&=QgfX{uYJe)&Z-6&;!U9#nM!PUf#Ri5W&2%iAOSS-n>Sh5Q zFhWU8)a>Z<*zzl&QPx9nb6?s-SqTN)^iI1+L=8=e-!v&iD3pq=2cPXYmmJ*0YBmq& z4|w#EBp{-SUn%KjFiDrR)glYTpXwk`o6O>CLGYHgqF{`Y7!F{PDfX&Dc*|!AM3Y;@ zh=k)siEClKc#oxsIk<;7Sz1X>?#54W&~qi;@{~|Fm*PhO=YJ0VXyRpT<-`J=st@+% z^*SsAPzm^#$2%cPS>6R)t{hnaTB~mWM%Qs>pUN+*2o>~VDd)ijfQ2NDafrq+EkG4= z6_k1OTFN!&ff84yMY;yng$w#6ET5{wTJm_E6n*;%cq&6riRLJP0NpiDiTb_jK0U!A zZ=vuI*kZSUw=TBWO2lm2MNC*AVbzZ(8gr%m8jeH)HW7kI_Ar^dh&EO}C8?ld3HKiq zq6`{~ihW8*N~<VlIFQIUQ;FkWY=r3WJy=lNA3aIh3ALe{o2+8pjRdg@;O!cq-P1da z;&?K$-i?@)1bVaGvo`!Z(f;rt`t}efFdo>Tg0jlmwU=333xT!?grkIekWX4FmKHV; ztQiiiyl4JE6@x!G6Z~X%BT7<4G@Q;K!1#B=`9nl~s2dQ{cS~Z;q$ttd(@o|PJA`~T zZ(}O`?NL^TkvK+1=6D*&5#!4XR})a=446>6I;I+=I*F&NpHt37d~XhKWW>Q#Vxw#N zEgCIPG$)!?0a=yiMyN*Y$-xRr%$huc$TlwN%s~)-q=C*`FH?n564x&Bdx#?^gGLUY zsE<$)?H63D9ud`*wrhbe?UOZyK6^-f2I0oqv^i;YS}r;KzKkS*7L0#i2D>_4iEB0Z zeTbYZZ&IR97!4-hRwCQ-PE|vR7z|+^klP&)EreJ!Q1p5e2yD%*N^+040(qX&HMMlA zC&^U3SjHd5c&jnqp|>1(y;il4BXO;hnq{8qVR<a_B)=I%mpHudxYd#CA?^e#2yCuB zw(Jln*7@MSPuH-KNbQ=^?0`}+%56O*G3dwE09HE42jLZMredF69AJ6yC2Au8r3I|6 z3LorY5!1*DKZA34XB3j09~A+&xT-`<3Ruyf5`QWy=Pc${xAdtp`$+o}YJ6KjC?%ew zYl00mZ}N!v8(2v328H+sK)a71>}1RiDuK;gSs*Lji|gv!{fszE69C)M)NF|j&{hyz zD&Zh-CRzZyS8z!(gCO<c6kveT_Jh}c4-6}tIF(Gr+`kMf&<W7e2QS_Oe4e)&C%a&r zdKjjU(Gq}86Jc|tfa@E<k-(}>*BEm5Z)3-3F@6hB4Ta3!Rw{-)fJwJ@xCXQOS@kR> zK6rzQO(YsE`!Qj@`Yy|zQCXY)D}3YcoIrm!q8{X8*A5m5TcT*~0IS(+GDM4XC2?ha z<N*Lt-f19!KJ2KtE3QFwA|{bwZKgz*d*p243<uK`A(qhqWXNd+GJ%jDp^gUnyVAZk zo0dm0<qC93fszN5c>O5{^j-rc0ZveJ7K_;qJcJDqcg}(TLy-n=-yVXOa&CZzhK4l| zU&-!gG(P)Pjc?u#Sj`J{k$xDLJRVgfzJAD4_0dAK76Q<F9upI#NCBgeU?^@xGCo{z zG{iMSf=PvdlO>pZ%2`aHAnb~W<FHt95QV=8%9`<@5Z$ilAOpvTMX?O9K`<j(4(QS| zpnwdFyGUE`r7DIy$^7Ze>U)U;jHXB}!s3ooVv|nQzV87IK_Dy)HZz1jQH%qVFtosb zfN*B!SpX-O!C}K7I6NlxHNlbisWQ9|=tG{a$qP&;Et`A-Y^1<fM|K)fZp2Ry3D$D% z(*ah!b>!b$1NK2u#FNh!qK*w(a!Y1Nr9P}!$$H0IK}pXjP&NP<5ZCWw;*l{p$Y~Dv z<{gaYRg`FpnjPEe;98puT0)B@EL4ckihyEDi0H;r!A%P8m7`@!oUFs5za&m5kU!B3 zUg%Da_-cVnHC2tD2*K}a@cJG743&WtZz38FqKMN9@wNl;OLz9NoQ&}vgOV87p*N2! z@zc$vhH5~H{wE<5C@rJN-GN`<7{ZS0WwCdK3w}fiE-a5gLgIk#v`h=qGY+N@Myhy7 zh&MkhvdYkOk%@)O&*Uh)X&&Wak7~5mT3HjU+L>4urT|hY<{3Ce;0?Ecw)P!QG;9VM zN~=@-?I#$d(nz{^7Jk}8-v_)MGJDGXytvh|dvW!YBUsAh5s^U7S$YCs?QDurv+T(h zIbTyjdDs96bV^s>c}k{E23Iv4or6S|a+*#xDkGB>Xb6H-A6cNt_D4iBP}9l}LEb0o z$QgQU<LXARw%*WHoReTFH^6(c%?d{`TI)|U`vl<ZUNpc236~kLzykmkHesmDcTnOb z0yW#E+QlYnxIorvevd~}CXc{;_yN@I)TuVJ)OgL~A)*QBk*6(``6UNI)rCm>YK%<P z*`<n(7k5(T<vmzh2;~}Z9uq+5yz|B*!Y1@~X<u#P87tT9v~7Zt54F`D-k3ePk2Sz* z8W-0Z@Y4YqIZI3S^%f#KyGnAauF1#?I6??DJjB2mM*&uNQ<qk7iZMaL6t}32gi(+= zG+nPht3!!{=)JgBG>y<)mZGDqM}(x+g{j_d)>%(QPRE4qXFSQ_D%h68Ks+N#dR14t zS;yfyl*K8;odzrqhPGA#Jje0vK9uOvo*pdrEVjakgW}5YD)21h6ues)B^De26f;bj z+xKApr(|RhnC8nGqrlB!fI_0e@z!p<1{4BBp$8R|sJ2t(=1(*>DUb_q2zm3eiehtt z-Kv2du;jLkOf#jVbU98=*db+}I*hk<U})POf>b~d>+BGPf+`@4v$7Bg)`Q9&8Y0?4 zaP3UIFUA2^K}=q40AeOM4l3b~5mCUNa1?wyj}n0hm|#&&RyY|EGD@-zy9`k)A&^*q zQMIGgC<eZJCA9~O8}ES70XbrR8IHzXs>4FM*HAHuLLdYm6QmMXvx%6rp@7L(@K!S} z>DG^B2<kAD0De>(<pv?M*&4%n_Mpuem8vZi|8dL^DriMAFv_6sj-F+lSkqNs!NvH% z2yem^w=;_PU!2mZF@SKk+kphRsK$?Pg7_(2Z6pbS@9k!n@b8Iqs`Zd7!J^zY!{Ssc zafp8PMG@B5fwtT<9TPo}3hFIG4B5we3Q^k(89DS2oGB>~1XsS(s(^Nk5|*HSYdR~e zQ;7+7CRprcR#U=?%IYeZ2TM>;M4w9V1biIQ)SFAX?Cm4BdasK|1|^c&9e8VznvDYe ziAfI#@(2($h-u|2y`T`6;>2bNCaLA{nifKEB@_~YLJAcD|ER+xz}yWkkX7UZvHn>Z z{#gY?>nx>+5AIx|Ge=?!C}p|?i=76Jm7gsr>fdDQyM)#PrA`8tc|Dkn>;aZfKLj22 zMWho*2ZRHHfL&nmw_4R!AsDxGqA6a1%3T;F>45i$WKAwo=9aoLOcd8Dfpm#zaV5DE z7~trs4!{gRylnhkptC565s+UqLF<x6A^4H=AB;#a1J>*y3VjKF#vGud!+_6OX@NQb zrkKD!p38(D{M~O26$kEKts-FKlE}*1<%@w#<E1IYyUJYC!UZQRgE``_(+RuA1%PQF z14fh*>6#%v04o16B>hMQcZ~5C<#Wokg2e*tHBcxZQ^WbCw+|vAxJ7qD@LHY&c<D4q z8Cqjs8!jvDgIuU~BZ!fFQz<w~gS?KqLemw+vU0zLCuJpv5C5*K=qyM;e7y#<m>@Tm zF7p7ktho#m4oL+^#hWnsM49T`p;En(S~IW^)o=o(=|npOX3vKU>Xte1k1N@N#15Ra z>Z=X`&vcrQXckd13Jp8v@MyIX0>goyY{k+5elJv@#RV!r7uR4bEd?-BR_Lkn6UD>- zLKe7c2&SLrh&OfMXF}}}DhV-)Zta!h^%)O|=FkyQ^bTP4Gr<yQc7Zs)*X&QA=_V{U zpiQ=+C?QiLuB`1Nd!+n&K#J!f9b-F0)zNH-%}fV)0|4S2Fl6&s5D^)f0h-wC3`YV{ z#8#HqeCM>o_GB0MBIb4!62U%=(d`8f*L9At5VZqpxiB9bZQ)p=#v)5k@;DCJN<g=I zLk5*-8!7}=Xu&~|2Z9K^jGP0~nDz(PwgLR60t|AOlDkw_W%cV*iAEPpAZN1nws(;? zl}0O?N@5k@^~ydLXsffs@zc&6QGnV=x-O%He?Rn5k%v9MUe9w>2@6d{;>U#a>{(0- z5;h1CcbI9gcJ67Q_$91a=D+~MiZUT_H^eCB><6t&*Vjp1W3Js8M4}jgP61U}M0<>` z!Wht=eRU0+(A1sB5G+{E`?8WtkObup`^N?V%xus!RlN)iz<Gdcx6@0+75eCx6m)Tt z7r2bwcd@kq8DqSZc++`cq=XPZayo*=o-3;)8`Iv`6~_-#9<{zQHF$)!pnBLun_dZY z`EddZKd0Pcv7B+IFlpBr4k}mTy|d6q;Mxs=p{mr==6$fXv(glZ!a3qy1wh-ZS^!v9 zio*7sXEZt;NI+;Hk!WTb<EP}n4?;3!x32^9<beb+AQP!gQOxv@!}&)O4Ooo|jcXKm z(kZ{|BSYv14l<kY0b~$w1SETLMI{O?Ta@jV&_J|Z0l#AdM1Dd5h8Ym#_ENk=aYhli zJ(b{hR{=34`4K{l8rQUnM@0S7<Kf5z6n0QI&}YXChzU+IRkW-ECXaOw0-@1ISmekP zPJlgRy*PoLih^9K@sKXc>tWUZRIPLsfg$=~0pvv`5RwuIE`78K3*5UXTg6)%AMmpV zABZY(+ZEbbvQjQ+m?$aatA(&{oTw<yd7ze#I6|KE;Zd>*;K;reqt*>q6L?#F@J}I5 za!#iTfRsY9jczYM=MOl6$qHUqYLO){^mTwQN?i*1ciadui?Uk4l#w&FwUL$NPi(?& z4%m_zLRN!!q^pp&4Z&+1Bv`=V1M%Xb=}dA{rwV`&`@>PxUdXJuw}()j!{<@bhb5v= zWgjN+0%|07ha5#sD8n~H($5K+2^Mr+TdU?)Cwg-bnNHO3W#mx{l(7InmyijPr-tyX zLNXOnPm}<)+M3oukWUSa7Bq+*8o*+|(BMzr{m>}05*31{`58nJ-&?o;UPX2xx}!k1 z*@Sk71!@Q420)&2z|PRisf(;qJS50wszh?^D%g`L&%rJ6FA;s-KtcL6Ijj&Df$Js} zY%$)*ns@mumOUUx-3w9htxD|DjYlQuJp-c6iY+#QK$Uwqe$)R^k;DiBpWVMu<~;xl zj6gux#5V^rdN66J7D+)dT$V62fPK3G$$V=Vk2*65@j?EHC4~ru;0-*Px>kX<0ce_X zmep`WSK19}Q{dO7hcne@JXP_)!7|!H*x8hM7oazY?lu6QuaB|C%25VnvUXQi$5cS7 z%r+FE0fiAag1+#?S=-q1j2_lJK>b%iy_r#HgN`hM`B<Q9!k=pJEl~tX_F@vqMeH7} z&W@2)L<MjH*DKjUuHb&9r4th9e#$rp6uT3A{@W0eue|z{hy_XXhv;KFN8)A+Ig7y8 z?2-zA`2N0+)Pl9pd;9+BkOBm%y<%QJ%gKmF;j43tBv?HpE`{SKA@wbs`3>X<4i$;Z z7qyTz?w+_#i!>14uLGcigQ^&zq!FGFZ!HpScv>QvYEUFv4tatOkY?Dl9Z28~yxI|R z%76oLHD<4Ije`IA_v7^gELY%AD?Fmf?=VV4NFedzoFd>GNcK;^3DN053qe)lQ(}Sy zG9e&hgvJraL7^SBO(n?6U(~LFLfGNKUVV_&C;|%9?g;AyaK{Z^kPrB%m(@@?5?I<V zQ$eahEod<VFu%7Yg#!5ZO=;~`c>S_jh%e`$L7l2|ghCK_9ao6f9Yn0H?b+lWahpB) zje|ZyXO!YTuS*qMh?sW^QBH04wA^3~tAXSXiu`UTppH)f!qbVy1sO!+U82#cvO4H# z534bOXoC!o?n)I{%O*A<&aS4+r9D`T(K_g=gi(FlsH=k6%kmLIHV@Dv)qV6L{;|ba z%&~YBI0C?>Y=ah!y9%sdlR^{}D^mfx0%@v9h>1-gE8%WjH~wUXtVs#cT(CMPWonxo z%B^^zBA`AdVQDG;HH<$>DmYEV2VBi2$=_w9U>y8o2POW)C}g25fH>qS3lwn+z^SJe z60sqYVE6x!^!9O0*8Bgsa;Hwjn|9?w@Fq;R3sF{TOVh)Rpd#QHdv7!b!qgI&%Dg{D z9TA6miKq!iiXH}RZtsgtFu>sr5qN3o$y6{XOl4?hW{D>|d`@+~zvuk@aUPw{@rGTy z-mjbI-5big=toEYgW2`gz)owx|Gk!$G|xcyLNhEH-p0#f&04%vc!$o*TK$c|pc&?a z`;gk$R+uHS@$(ywbY;ghz)i8Cjo#p%x6|I4{#)5TVs&t?#bB;~Z>Oueed=U=X3e3* z5o*1Z1e`N~%yEs-i|Eb@`i*sKJHKNXR8#;o7fNVHtA84PzKm;Z3jnkL@L6uM`TY>l zt#G#>-O}SR{{$dZ+$}yei<_Vo)c05RGBIj659azZd7aZA6lz)U1SUQEEdVInUy!H@ z5ru^#mq6SBNoAFX7Xh2-=;PGj9?wsc8W(dd2SP|PK1>+1HkH{3^|@AD7ba$_1U)t( z4r^r{wtrU|)PJ;b8CH+^2G;}bl=c*~1QpgijMZ__SY#&+5Ntx@YK&f~>d0t?bsO-~ zoA`Jb2*v}DQtiQba%?8sIvXlwjH`)fO4-`pN|FgOrddLZ)Rknz6RxF{y$RMiw3w~= z!oYtnXbn6%J6W$MB)~rt)132B33*SHO<o_aV7h=&7UHSpM4Pq#ZFHTRN{YC~JnR-g zc5{B^n$@9@9|G^jv-EtAb;ZRtB#jDU0h*;@Ca#0>=@Q094^2D<<-6T3gu8)>fCdN^ zObL6z&^sppJ_aC?)?p+|&`+?j?OW6<c7f!uL4>>O%^BpDpxytwkTP@)y3R9SvFuX= zjZfGlq<bHaX+W6i#F2(Z=cik};<p@}r4k2TLC?-)`9!5N1fBl`04k!C6W}cP3#(Ip zzYC1^iCOpRxqGC;$TpP1*PTy~P4nOI#7vU=;V<%G$|J2d3^o&?vy9k|696s7=~O0d zObA&S$2ot4nATV$j!1nmKdGEStaS>ONUS}74X8sd<Zu><i|$zEF`wk#Q@>Hk)*2qP z`lregi86Q;p3z4Y#8CR455HY}SJX^_$XZk;EejD93USJ$QkGjJgnv6%5QX54^85$H zPq(<bJW8T$YDnnd>OxKA!CP6e<%&LXfK#^#qH>#T?eZDQAEE)B41<h$0^mU$rk~p@ zEK7nh^29}rN@vuw1?4Z>enlVrW}xnvF_KQ&kM&zDkXsF!y)L%7Hk*77Hx9I4wa^vq z=SUt_sA#ScRQxxPkEU?Vy-&>QFWM+*h2~4=`n(bw2}DuRh2*~_s;aMIqs^i(wty%( zeg@RuM3!PiyA2_NFQo8z^$f0zdbVCc&@)9gPX&+fl3)QD|I`kIs8baBHIuef!RX#5 z*UAOu&yC)B*{gvnt}!ID`yd6fdr?(#y&HHghc$gGs!E9H!Ql2j&6jfomYQPz-RgHH z!@)Va3#2O`&{|yTZwlFN@T!3Fx&+aTTaP&Us>k&~gLX!lkPgN;8=Ks1lHbdu<5Yb( z!N8Y~01n$g)cY<oi*~^aQ_9j;h492p0!bCmTJ2&lEc6op?ETpSd;5|!9h?D&vV>t| zo5%dzCCeA%t@@jh{NroJ_*n>P`Y?_DPeDHc{fiBK%|g}=9*PL*Spbr^2>PGVqjN98 z1otB(YZ9_mFS@ZJkfp~q3k2Q)2QZiJ5AooKWRZCv^pJ)^HJXr%?F}TO(YRkX--cx5 zg8}llBkVaQO$&4{BA%^Ak5Z?3`~Qh~A!JRjk>CZ+I+aLH*P<Y$if7=<z~JJ1R}jtO zlz-s08rI6Ttb~fI(<zU6h3C#4C}ka?^9=UiswCFDGsV)_a+la0pX|Q|B(BpAgTkR7 z@e7lZS<lH<);-xsaxxXX9;DY<H(xqPKL=8m&gkRfObG`imNBE`%RVrvR~d(ZXL|sa z1FBNI<^IsxOg6YiLMSs5V`w*i%q322=ii&i54#y%m}}4r%Abbh@mJ2dy@V_ZA?FD( zX<yeeDZf1eiXf<0p~!h(UI6swm?nXpws4S!e&e>}V*ByztWbS?wVxYvOHkfKWokd^ z<EU@v&jyNiZMjn<qLb}y&Wb#aj~kCgHp-WYy@^RGS58u(qtKcK0_jXO1Abd8K6g_X z=>y`e%vVH@7t2!7nsfAQ<4pEEcGlej=Qs<dx{~C~0ZSIkor3s@@P$Du&B}|IqHG%I zj8cXbdtX+5si59J;e{!xdtl$25l{J#nGDV~A&|gDpn0pEA6I)%or|(i>LyDfMw!T< z^&)5{j1{!YLyL^6^Xs|Lb~njC;NuKWWLsWFXIqtE;1ApUH2})9br@h&J0W$r4d%sz zN90UYIf1;jt-+3VOG00PLeC{rPphyrLcscKVa$UbgKJc(IVBeGj@C!>dZ%doH2+0_ zA2Hq2kM*i1vpi<6&O_~GLdxVP95e*PiK5gpEQDYsB`*K<d)muOPDuEew@DuSoF5Ka z&UU^ShKW|}E)msZ9GeD#Ekvi_5zSdSoa1i-*MjMSc=;~J*hG@WDCm?hfp8#An=7o~ zhZj}Bq}K^HPd=TAv*v)4_+21M1CKx8&-Y7IwO`?7d64TdN6AUw<wUYI)6Fj`QGIin z$(+D!oXgsppuhrBwvwZ-0Vq2)&%hU=6QTX(Wi*gg3hKzsBIPb7BZX^f_6r|%sYeCJ z4^s~)=ucRN2GB&W{2I+wkHtFm_aRxDk3}x1l0@|o!-GwL+;_+JJ`ywcu8%$Rtbx~K z6$!=89F8Be*^BUJaA#1Npm`YiiYeja5YlC18;ABXnjr@Mm3VeHsOgcY;f}L^4O&(Y zD^T4i3BAO22P%8SLWDw4C%~6^&$KKGX2rjMRKXX$ERY?c0}0i5R_8$8U&nj=)|-OH z8Nl{(zjAfD5@qlDPA29pl+Y=L%LPg<J6f+Qeh4w(4+?8LRNpCE71p#u6g(}H2_)eq z#-vv5z?6bVvF99Ge+A|x{hBRpwBN>7bzBxf+D?KlGn-{z>50e9N9VIs;sThQuCdLm z`L}EAxz1nVU;}5x-hiarz;A<}P#s8ycNCD;8nLWd78|*sA$D0adopaB!TwfIugCr} zSYevTnuuB~Vd7I0@x^8rst3Eg0CzTtDTrk6Me=LGoF3f?WJ#`0+yn|mWWd?*665zg z<=L^=C^1hr#SfCPmuh^(J*IY=&2uf+SPNdxeJLE>{Frk{2FR;2t_gjZ(eZuU_}9@z z=iDh`wu%6sMGXPz<tcyJ|Eyv6<dOfz_<4OGcT>B4m!LyIx7XwvoT>`i9*&g<e7)TX z_E=BWG5TSp><#>X#V+7J%}hqG4-tFJ*@-XYSltqmwN635S(nB%K?~j7V@c8hL!5>K znAU~Ot`-$Hb1o*6aSH~>^x2OJHQ{~aL7uyfhcT>a@>4;F*KCNr-RTcAr1A;J1Bq%3 z5%qE<Bz~cr&PZiaOq^p#9@qRFm|VtL58r{45Di-(qX+D68>H57E*<@9t4pf>KhKe# z9g$NODf<$h)rjX@oa@)rUO~3y8u*d-V&5}y>fsJy)SDgMP*FS;Mg;?mmI~o*sN@pM zWoGNd4EeHM=x<T*E(Lq|vh^GdAt@_Sg5B#|Ws7F4WQf>1_q+sLNL=cs4>Jep(=~GS z{PnHu{rR3<%TqYbkZ3_SBVMXc2EEz>HzVMdE*JZKjK?*Lt2+f@O)$U@<J<Ct-+C~R zLuG8R*Cu%Qe{JLA-zJHU30WF@K0Uw6K=1h$lAS}%dX1Y|;%IkLl-{Fj3%#5re=wC% zPj6<MEBFdb6IEJ>Cd3%94}+cLJbW#t(}4C0+V!}V?b>+^2GtK5h-uPB?%duNGOT<* z10D4;+i(!p2aAOE>Aec60Ju`mVTOZ_04+Qkp1-*Gw>-|X0Qp7TF7~q>;OV=-m$=xI zk35tP5%hO@tXV*->fU=Q1Zjov+g;fAMk?_lV!n4j<}};Og^^PMO6-BfH{xgw6GMO1 zla%Y8BS#kY(AUCjEPWXkjJ2K2qNjdPHu6cu>|UU`JBAraeHn(6Las4N!Dj`swnx~% z>Zkdq86?npGntM)b2^6MWj-{ZSJW89f}=_TbBEqh4k59d{-j<Hb)t=}M#}>-&lh(v z%Cb_oWwg%2kAQI1sN8iJ>t#EhOw_N11RgQF{1nv1GkciCQ3L9zgg(uqL^6hNX5BDw zI=64LW^>0p=Cp5)8SJ-Uo2lnQlyx=YMlBRA6MHP`!bF*FJVWfh1)}1E-4Lv%Bq}f1 zO@xC7z5HiIiLy3`Z8>HnK}ja9$Z+Hfmo)v0Ss3qt%H4ovsrt`+KJF^o-Pi^wx~A1I z%6ESTVtQj>)%$(wC@e03nQlSh3>i%v@S$`trGtDHG#=J`{=Gg4J#^OxEFTPjWcxjG zFO|{N0U9cInDsxnnMIt(X%e*f!(ngN#CffnOse{B0eOE2#;&BG9_tt<HzDi@d%d)R zz&+h#&ADro>i6|=)luTM@?Gnj#jK{NfLt~;`#JtP%rPVE?R<Em=$H4zkYSGp!V6{O zw?L!tEUOIk$2D@zf3ev>iJ-;a*C=S7K_#;tL+6GzejY@mhmnEsx+&q)qD19xMqrIy zaHB7XLkG*_)OTR#`aBc>!O(8;OtFx0wL?tlGhr0C%9|z1&kjoH&Ad)9cNlJ-N%1!f z|ITeKSc})Tqd<8Uj3FvRnd(rdc&?&E)$o-m<`Xa&uVciE3V?#$W9|x-CmfDQW`8o6 zTTeh)pGe4-2_AmJM!l*>=Wz}|+>=PeRZxL#1bnv}bVmdR_8+@on;NAbzW&Id>TYOr z8(pOpxg+FcwVwedaw8cZ{H)CdnWRsr58d4EA`kFS$zTcWAU=)N7y>b%CKUpIi}CQG zTj50oG7r|Wqm{i0g>C->t}YFW6W&$3S7*L@2{5OZpfPEcZ5<0J|LhLXR(&8hCic*4 zSiDXK2ND`c*4rj9v0nzUj^QA8by4z!z@s6=2EC-`eGflC-W(7_m;zHK1BKrTeQXL! z#AgQzNKUS&+$(4itsV|-n~#b730oEcs%V@h)3>|nZ;8qlvs^nJOY{HXixo(UNo~NJ z69q=rtS5iRrs$r__Dp9?UUwn91=-|fh4-VJK88~?6sBg4n;xFYq{Rb6c+53|Pv4J` zpi$5sh8&AEIANBKjoKhYNZJIY3j3?Fv`ZMSo$7JYqw6`#{ZkMkJ!E1($}7~og|`ar z^fu&-uLJ3o>&ZqKtK6Gj*iRso%q(IE+`2%xHHRR8s2Kt!#3o2uqNBO=`JUn(HukfJ z92wGUl%}ra)ITOmH_J7SLhVekW68xzWdk^$Js?(5Lvs7byN@_!E#B6XZXq4MI429u zA?srMu~gPI0_CXxuSpAnQJ)U0R~WOEMJGAxp*0sh<yJ?t^qm%HM8pz0(9NviT-hmR zwW8DKjP8k9TL}1%#t(%?%j5LJX@!)(4mi4j&M;|x`#DW#fpRY>!_B7HMJU~Pj1Mv& zGMN~^Qn>Vh3#J&GEG;S0vId`Of`K*(`jbpfDSH8K6FsSp<g@b%({1c6dBRh$AG5*K z;Jt+d;dBkNHlFq5aQ31LK-E273EK%-YPg<kpD9(#yP5PySs*J6&K6%rDX@v)G&`|f z@27I@ONnG@sWfjtDxO(E|0l6B62MxU9Rm9SEEa%O`~_(vTGkTRprxjdgSpebynr;M zqQm>kV>b&C#hCYUpK$K$5coU<ITUb9VE1z8phJj+9=pd=zGw(EbQrO3Es&E1m;A!x z^SVWRu%R5t$O;^GR{8+=(#X~xdTMMZP$e7?I3W5l5moiB<eKC1`CK=xhjV&+dY?K0 zlTj`5P{b|Mjo7T!_s9}pcH<ULF)QoJ6wF!BM%CD$ASrnl8Yw+lUZ|j*FSCs@Jj~D6 zuyS&I0Mjd&N*7D_CA)dmtYX%3$<4d3W0%HpJN_m}CXX{8L^<4I=%2waakRRUoYXxR zbR+Pn_5yo*3N~o6ppTjle`~42y6m8WUO{0xgngvPN3IT!fMIh6)OKF~NucrqNQ;Zm z;5xCW<!}@awro0n<RZAhdaN5>+bRsVD&-0Anh_%7s6C9)V8WN9$=Kt2;XRjbY3FZ% z3GOS@N#ohZ<Mq_c=Ce<6<Xr3n$a9Quw$sG<_hJq|=@dI5IX-JOX+X>_?4gH*3?N^B zcw8DA`>=onbt&kIH-?yE_P~O&)z>DAX&B}+=5*vEv+{n4sQQ+I9vmj3EOH{!JKJ4R zI2yf2J$yV{$8&T5T^o8A`+>_$#>Fkz-%-SCp&vC52qVA7ae`0}1_xavrIjk%4?vkF zZX5G$d-)Y8yMM*#BKnm(XH+&GM0^1-@Sbc^hgI-W5B+~bmLGY@tY{kw6$ab5mZQZ3 zAT?KHbB+PmRc-~?!`;CEXzG(1P!ITQD6=pUmmKr(Q6o9}T*4>75$KpL=$!fdVkTcN z`awc+&xDXM!4Rea0XZV*Co!25@wM!6vDQSAuUENRCA71j3+)zB=`bJOA7oK@EQUe6 zL@T|rI<273?EwR)pcgPq>qXsHMJ}8#lZ06VxTD-9%^Z$3r+@%&ocZc;Q|t$5awG7@ zV%-O-uP>1ULXvH8CYi|nfnM>vCP5RZsuPC{&-)o;rH8NRBd_NavWfYYck#KC&a^=X zrh=b^>~Tp`@a<2wh3A6mczum2;puM@OFqo-S3L9!d;&+(z>C8sXkLecL%*}a@^?%P zr4{_KUKpge;H45YFP3mkX9uIzbuwDy2$5HSPXcUPi6XGyl+ds|gj5f~xFn(97fVf0 z<E5e1c`7J9YM?tj&I2JL`=raF=8oKZgkH8WnM+}kF_U2!;V~555VQ_V5i9kgn=VG< zQ{&?zz8g8$EOdo;C0?1A{id5=xsr2V){}aS0Pd5C#BdZT244au?PPM|SstXv=V+eV zEG%(9<A8u_&F1WQiS*;4%|d8Mw>Tn9Y;RmuNwy0(1wRdav2+hxhdu}s{c04EWVW^d zs*|^y0Se+Folscr!ZU=a>Irr_pIsgo5mMOW1KMB|#*@YDjZ*a2*B}|aQbB*&&1eGv z880=DGQ~8$d(Ke)p@QC@;IUgcp4}i2ACo|0A#*!-d<$j{EW@V*Mc>XAH2=m9lXxAf zr~Lt}dr}Cvr#9YQ2)+l{Q?E$<g`ls795O_7!JJR86)~y>Chhp|ikNqj)99|EQr7ZQ zs*A0DhPaOrBUS?CHBcj{+&5bNW9lP1;meo|h64f!zk&Ahs49cG?RP;_j}IDz<$a8a z#OVz5w_b7Mu@EIU0W+ve>iyfmz#T&dM9pPJk9~73(Eh?gtyW}rPiJ&5F>Ciom<?m{ zk!<0k9`1rf0W&es%lg#B;mVKu1a%jZSWNH@vfZzmG!>~#J{rci+cyiEmoS>%pAXH` z3UGvFMSI&Z)OQK#eprTffVf)P&5+!oTvbmOwzXF)$<{~+iuS>;@D@g#XFv&BbQQ#u z3uP0kD}R~Ucw&$WgJ<y$V>+v0AWF0^yv*bz%QUGVi<g&5H_vr3>lR$|tG?7@iNg`x z&XpkI!#{0&2PArupWxa2d^^;=SD7^~|26M>%AX^|<+v%Pqo30T2&1rwSz+VUkBYQx z+~o4leS<p%K0Cj(f}RXLBe4EBgg><^EXtpus?X!b2da8!nYiZS3d=Q2hcJR=nG*gr zd=2Mu#R(Bho29yasHR*XxpE6LCNeTG>;XfneFXUsCI)wRfod;QJ~%#*q^JN5<ZxcT z<R^o3l98;*HJGyp4E$Mx^TaVj`7W(^4it7(7`VkaekmaM|CPg?Lplv4iV-zKn^~t0 zJC~g7#&&S=c!Q?+&LBm@lr4y4&$@cNWB(#M?e=kuiS89ukJ0+LxezZkSnZ*3Yt*j` zV{*^ev%ee*WY6qXFxzwhOT}wZL63qpf5J846)TMv)KOT#w}oC~KPxwpVBi+@c#qcr zHfjQ2xe_p?Fdt2?4pm$Rd;0?;x$(~s(mY4OquPu@XaQUGNKd}ND5SwtZ9?9HX2}T& z9W(g<BeMIPqfDe6J>nO++82)9Vn<4=OliP+F2-9jc_?RD@nHo8nA&V}TL51{VKOY& zKu2@U=L}^_UIop`%z-j6*HG@;BBV$GfI?T8j+3dr2r)Y7VOkA{<l+zmErwF&wPg0f zcx*4|{s%!o-h(Y(PJ$0{P6e%olwdlOcc|T|ax=G08V+O_fVO8gmO2qHl(RpQ7GVyZ zl*(k{c_h5+k}j*o-x?IxpxGZFjr|n6q21;m{UtV56~^#+J98uX*bX1cz@XZvfky!D z4jo*t<WdjWa1??@7~3?Hc6Ewh9fR72XP~g=800Z@eYe<U2<TvP=HXGhF@8TxYKYBi z6*uP;jzov3-6~}K4*YNm@|nPOp4dhbBZAnySb9fIdnj%U`^6NSZA$15mB-v#9;mvJ z@z;Rn>sG09WkxaEg7q)m_t4;ne-f~Ujh9Y}>=@c|TL)>&VIyfYl8sGXk1Dd-GCP>q zC8M^qdt25R$5oK>GZp+!0CJed$xvVM8NKp{+Xh|<v;|XlJ+v0z6p16i0k|Zv85*27 zPckGNI==b>Ot!C?NGX6d<rDMBOM}d|6(L0B_CiFBPRzinTM|o*tx;mtN5o5Y_-fRX z0mu}ILL0OJSW4eX%4aPInV1iz$hKQtT?WeQ1h({7fRXp$RJha%H2+3<!ZpYvBcPr3 zGOt1ZQa|BnST|zt98cSw<p?cFisZ}GS~0>kn16*s6#@+86FCW*t*~aq;j8Wh>!Mfo zijX5>a7DMu;weJy>YobXFVFLs^8v@LLAi7Q=TLacBX40h>2M39WD4q@bC+3np<x-e z=~H3Qd;{>Q9-GI}NxR`!)GMhon#<5(q($Q(JKD^1jj~+y%zZQ28v(}*d^O^I?DyQj z(#aAyT2qER>E~LKwtM(5PbP}4ZwIV6bC9~L+Ib$*|Jx^e_%+A?NX>MU)QZqZw#p*m zcS9_8#7*}>5?0geLrplCTfY@F#|Jc6PtTUtFgjfYy|c;#^Dz6v`VbOx4i9D+*qQ=z zaRWC0bug3^y*%GTciVdC^%0Lb7yi)2utn}z&z*vn$>o%5gHiEAuN$0xHnw?@ptPby zkBPqwA1emyO9=*=<lRfn{ha;n-I&|}hPuH&p*j@)Xo{J#=6jO{z7aL(>i#~?EiyQ@ z;_$*|**opUfcT=(YEwc@>O>R3!o4`6pGQl0C=}M+hbt|)!V5UNgAGoAD`Z2kfnGLo zmTM4Dif6#&McM?NcY)F1IDyXW%&ipFV*4v^cfo~FQp6}X>d8n9IBEL_H2btZV?MfB zp(=7>>D85xz<wV`w@5rS%*S$|!%P?qB|qT3x$+yH;kZcahV_V0@fsYuUf5d)@VoX% zthVGqOAg4D?P^bXvc$3tg?~M=eptx5Ck!i<rQMuZVaW!C3n`fO8e88gwW{X`+S6cd zz4Gkl9#zv&L3AF=m7FY`-|chii5c6xwKeOxFsevTF5o4w!Ji-WLs5asaryE_Zh}`X z32O2E3&~8%RM`5eFM_6gA1aa_ezVK()$tvovt?+1QR`3x#gEM?W9udK(S#!%%qBwx zpTyN+H+Qj)4#fXpQZQ+5UKk({BcH{7um@!XgC<_eE)QJ}h39q;y^N4Cs13fUu%=AK zbeb$%3(?Vs=L}BFYR0j8qMw7c+(e#qLKTZIwcX<^wtzvV$gD_~uHO&A+XX0fW;IJy z^D9-KF{;T>lb5aKPL1s6TvCMkh}N3bSAa}&jY7%@?EAc)jGnr>l*v4FeQjZQ!gbGX z6Bt31eRnsLvI@-KT22eK5TGzeBFU3V=+Wnb^q@(z7xGs-qV6yPe(V6te=3Cw!I`n= zk1{2+z+Gj{?D5)=EL}F4&L5L&PO~&WOw5OaEX#tI{xMuaNe$WvJX<xw7PZe#>Pbv2 zUghg1(*L2GF}3skDO`0i@(CVu4q#?lSR96o8X$ilmd`FgDj-6|%WZJ6`=Ta51sDbE zgxN%r7Yq>m(G+?S{&!y{W@#(iI8njJKoH4m4}ucS3}a&7z>hr@6%#FIuFGrD(1eiq zMo445D=WJhk#%_7ucOK~!kVcW#sD*-&j4<*9v4<)v7ps9L+u(!0@I2(*F)~y6N76c z=lB9((-=7shJu*thIIOBvs5Vu%ztKgh_W*xKo&c%k}Q#-H72tUjmlaUYrT&tA#8`Q zc*@|fT*}B7!_J1GTn((G`Xn&(sT>WMp3N}<GR?@0Ypm@LgbiT;vrG865sy&I<mxB} zb2>n*aZN%{+M`z4+5s{XEAHnFB)S#as|r5T8sMJ-frzicbr5NB-k?oWZnipXX)G|& z1yGBw5Lv8i8`P87;|&CK7FdGe%FQVJqWCb8Bf#aa9wt6D{jx~Bw~fDf5^kJ08)E|4 z_9f^aWRr}kE)qE%u-bS_kRXCPwfR?+i}F&|DqGM%8ZZ{YD~+fZ9?W`xEK`a7Is$KJ zNg>B91Avk&ZUVEblyTy39i7ZO|AOFeP8<Iw5SzKDj4v!45<VU|l<zJGVsB#IP8bk0 z2h+u$!K9eGvxj7?^erGCcx5;q=bMSD>RP<&=y>YY(~;taMQB~PIXzKS7r=VD9+|b% z1rCB&L^O&{!Psl%y}Bc<*#;uhQ`}{s2jH;|=T7-DYG^4i@gf2Q98Xl45T3TpV6Lw5 zIy9}@i?|8v-1I3XDp@ji1ZZFK=8OtpFHFMV9tGdPNhWo57=x+XBBAs*#PXD~-$J@n zqN;;<7IKidtN_-w`VI#Ei*P<8a>wHuf>8v__`R*rd4%I}tTjhY30xcoclZG#hF>hl zj>O?>P8G1V@qTUt(AnL96w@!ctxK#yQZ?A!nW0-yKsp)KMwIa>uRP|MvQ)-cNj~3! zEeTFLd%z0>_plz45GbKkc)Zd0dqgJ9&Mx@re-4nQUls%2X##vz4Cv|{l7YfG`xjk; zcG1IDc0U5}G)wMCn5zFFSaUlzg)MhQbrBFf(9(xYM#dx9(cPpf>M;_>Dv26D;Z{Mf z532B{2Bs}!JC~wl23x_hni24c625n-RIWK1^Szuj{sJ9%uE7OlqRA%cUlTNqJ+vLO z@;g_s*=by?YhNlDB`A$+TwZiSYj+J&&j~zcH@ydy<NgLBM;XDF7v%Q-Z}mgq@04r4 z&y}lNlS;jUSws}otya(nIuwpK0ht0xGrv3}MAc}=0LJ8e%%tH@KQ%9qZ2JhG`YN7` z5aV%<M+eNkSV=<c$%C{$w1M=2=`SCKnaC;EK++A5(_-XVv328fJs4E@Hrqo+dC0-p zdC2h5zz>%wt2A!w@_c+RHQ;VqqcMW*%*A^1oyRNNSdYBmz4>$7_z4~f9s4np_ka^$ zlcjF93&T|k51sKxC!^WVb4^oRV(aOW;VLKqU6AoYc=KK$YabpOIVB?*{j<*-_W2!` zMe?Btw+G1bPDodDsl6#JXx-n-H3wkHQ6r{nC77;pCd~jg00-WX0Ol@}CmIi5E(|`G z^(sE2eo7Kb=Sw)PuM874!+D&e!_fWuZHOFiJqA*5kToN2!%crt(0#$dn-#S7U0C<P zI3CP$69LSTUnNljvWBhtJS@(qIRmXk(A&X4Vtu=w{`zTQ`e?2RxXU<5B$yThzZWhx zpax9}TCbpg;zuQY=S|u-Qkit1L2)_{k50V-jEgBoSUaGOhS`)K0vrjrke+CPMac(( zJ+!YGQ%4l~ZV+34)Wg38CQS>;&n33=povU2ku0DJQK)Fs#Vv8B7&s#ms=0fy6{#Wz z;P3dQE?L~Goi4Ven7xk1bv2RTbZ;HoE1r1(#tP7sLtCYbX8O@oqq4qlSsGI<kGbQu zDP{t6v*rV(9#^T_{eYvq!HitC@WHLHb+>^Y@t7}|68?v%t2N$~Navvxt`2&(wqH!k z3h#<pKkWU;ouV9;bzdfRW*%0_Wa-8b)ft<Ax><`{n5XY&FI(-qzEI;oqEpQBP#vIG z;kWQLfHgh^&v!cn{<k6~v)Xo&S@aUV&dT>al;&`>2sQY>9`9)SZ8dcH9_Pzg;jzwL zh-Zr;E(Cz~4J5fsl3CXZCKm5{!2q%0ON4e`hhBdWFss)i2c`iUDV)5{(IF%#dU^qQ zNm7OF*~NakUrw;{sJ~EH*7#Mb_KbjAXq7|AXs@7$QaP8;ag%m4^qBXHF{B<WA*<p4 zMpwNIaN;ql;jt%NRR#9Elh~{=<@Ws@Y}_yx+bDowdld>?KGjH!<qAvEs}Wqv(&4FG zjlb85G4*#rFY(ZUamnlfOat~qzzwgQ^U(7q(r5BUj5y=)D*Y~@FDDI<IeL=Wh=0`@ zN!)%^{{qOv{v&ALcoNH5{`p}ASi4BJ&`3Vma+isDhIzs-RXo|Y9ZXEt`Vdvai3&^N zR~SK-zK!*F?jWsQ-_P+IhcU{7kmrDh9RrDiG7$d5N)-(|g(Q(#6Wt*1%+eij>->B> zS(;ggn1TWXKvj}4Hq4F<wKl178SFg|TcI{yH)u`$r%`$9Eu`!Cn>1yf-7j%xz@kR| zWJ>VVG_$o=^=xr&QK2^CeUJJ6VD_>zNYIRwSgjCV>=kqm@gBW;A(E|*cvGQ*ja&2b z$Zqi*cuUgaK4>79=v)9iHwMbMq3teU0RSzOmBb0y?wzfVIsRxWqf}6)(8a{Xq85MZ zVsGbVx|x$;3YX#BlR*<nfp!+)`f9vK7&A#~KS!`|S>G=KmB8MIx*hZ-2pRr5M(DNI z*zZo30`OSNIT}EXYZ>*#L2Gqhp=e*dknuH|{eSzg3|OH}Tb+wD*eK|RKz2=BtOpbl z6xakx==^p{vBJuiMMEj~7s8iblWT6Zfe;Fkt<XU&_`avu!RgjEBiDH<-uQIv!YWfN zc!Q@oh1yTA8_Jp7N~Ikmez_0?Y-%`U3u2glK37<pGh><9r+3A4moU6SnCC4c>M&8I z@&euqYA8zxB>FM)4CdNr3fdpdssCF^(u=Wkm7xh2vrW5E4<<@1XJ0Bzm)#XL+K!tN zeo3R3!Dy{&qx4og-x4A^|F=@s-DJ|v1Q`r%h7+>Rcwf+~ZfgxJD;-ScZUl1qp|hd~ z9(&(FZ$S12;%jaX-D@NXjR0ig5o7`7%|=%bEyT3ih!_fu2#O9}R1jN><8mF6t+%Q` zjO~Zc8B5o8==pCad&5@AYD^15r(-ATK_1BfS+@Xh`N;xuEgZGMtJuMYuuW&+sYyE& zx>~?CFh7w+9yCe5Cuoq4iyECsMob22WP2{5KR`?+@xYS}e!XnI2Sz>h*bRWHUL6op z7(eJ;pk?L>&r!IV7a2|DQNvv(E@Fc1#Wn-Abu`|v@uloOSC^m@bTG0|9$3jyNN%2` z+F0|}>Btwr`Tg-NED%}aMUK#??7zrL3{CO>+yV-WJvoiFVPO9Vf*YV#AAeUt0xwlC zNP8KXUO@67y%zmYK_#f}`s+vwWb>_O$F};-(h6D_$r>A7GW`#TeBJ$^S<Fj+Efhf~ zVb=dLKTA`?C{*;9?SUlrKv=6(^9LN2k2yC+fUE+!*BU9xYe2S|po3ni4)S}%?#rNC z#>4dz(8mV|hLsCT7nl;N@EbRy?I%7lr>A5L0G2IOBV-3Qm>tQotuNgbG2)?xx<l|N zF#iV%WS57(iIE3ud-~)dhEw1gcm7jbz}Cg#Pd;uUtE<o{*Iq*ikaq+W$j$v+UDnWE z(Wz*NX8|hYH2dqH=viww7DW%ef?T@)y<N{1UCP7j6Fioqsov3D)6(tZUeCE+<iLFn zRkrxtfdXaY1-Orj0T-g`Z56Z#p&9C8F>xjwGv;v&QndZo0yX;%1sEY#*`3S^l%6Zd z5k~s=*mZKUv00WfT^xbmf-zV3B}XqoyLKNaMY#|T{6aGq@rZk7p$IPj5XTztV>J$| zDdtR~>bqbhb#Ha~xqNCw6VxMHWjPHodtH8K%LJVt#+_61I79Kr8#(?E1iWS!i?l9a zat3ETG|jUe;K$?$azKs`U?1NjQvFNJMu)<>G%kqcQkw_qrF9)*#d<hAe;3r(J@oky zwWqkGyjScErK!p(6s^m*#vi}tH#fL~p2i^Y&1^v%KIkcr>Y+^ta9I6jn>kKku?u~U zcF_f>Fhz{;FF?Y9ByUzJdk-r~&>tSY5<JHSh^a6P*mQ1w^^bBgTG?HIXa`iX5%AYp zt87Rio$BFl;g16SzOrF~oD7JNDTC=F?zI5+yc5sdAAi9=f(`aPA6+mJ19oD(ZtL(- zhjM2w<1GTI-tZp<zZ&%rz|+k}gjFFySckAX2eSZXef-L$^#b%PoMkHZT7!r01;`@t znA_l`357a*moJVb6z&*5y}#$aNxL0jPSa&^copEW3V7{8j&(ALFL@Ai25=;4F`hcs zWW*aR1)H@7;}rxzSG&C@!8M{Ey&GgxQZZz020FAs^BCr61o^J=0rwd3^d9l~vy^SE zg6sg6PvvH0JIN*V7-T`;I*{uOcIW03&XVz%bD%%`HL$D<LXS5m<8KwQcz^@s$E^Zc zff<Uu?y>J&BPWr!6joKaFnmw<0nDbi`^f&M7~N+sf=N8yEBXO0;693F$%LNQg3q|P zl--Nc@_s=W6Ei>9bEM2;UOfkR^CM1|o%GbQW=@-HYH5YaZo7~_C2uI_{#j1O4B`$5 zCa;vW!!erhT~}XBKl+npm7m8sy@RXndIp<-FO#2NQ$U7=fBfwWBV)m&A(nRfuUmo! z+Wmc7+KT%vkIm#AY!6<De+&8`d0-~(*9|ly*<THW`;&H*QDD<*ji4P54E7e(YZ7w# zvX6Z%MxcINN^$FnH+q6Sg9d>y*T&x1U`qG|q5*IfXO0Y7((q+2+m?kvobDDiBLmju zTk5aVLw15N4O$F!8K%@qrL&XCt@4z|WntvTP!$p{+rW9uaNe##DdY<^u=roA@QUTs zU&TvFOtNedWX|4y?MY>H6BxCN?O7;68l}v*t&#}!Q_gC=4sq|O)?Q&<`Z>(Dy9-oY zHf(>>D)@9y`D6IzyA0;YMg{!|(f+#s04{@o;=oEQUxL01-sPN5CT#@N`gny4+HlT3 zf}17g)8CO1*es}v?#0y4X+KiY$)vp7X7&OQeR-`iHJ;%&Zerjzw>gjYX{P{si0gu8 z0RjXQCU+Cjbu;<727B3IMm-L-ZM%o=<IY^E;1>aRnz{u`J@CO?OtX(TdnCZ2^{7Oj zL6~v~JD1TETkhaU8LYky>P0cgyLl~$g+7gBzao$$Kyb)6ktVY0Kq=dc#D&6POwNS{ zQVzNkIOY>XJO-d%PV4c|z35gL58mE;4;b{+byz+^ASpgQFu`EgK(^!V=PYL-6~GpF zbSD~A<2L#Yw8044_IiB2Kw&;#1yKS-(M2B&kPRsF6X$@Yr%td#yI`ioQ;YA&9Hikc z_GHqd7mmr6<tsVIXV8_uaY3$LCJh683pjQrzIaUqvfEN&3Hq)Uy1gYf_S16YwqOXJ zxjj(%Ei=JW77p<6fA|r4(X22}fB%PpV#-h++-BG%n+lHVFc*p?tv;jP8hz<`n|X#z z?RyYdcY*<F{X#m>qz#yqYFe>U6pr*cWM=z~!&iJ=FK7b>+Ih*dHafMFN&O+7A&VVt z_R?F(w-4@1m;#iQ&fF@D{Me{EH6c|z^W6vVN8<Bz97rUHnT!F~%}(tWow>BrJ*F|( zQ+{`b@+{_k{5J^m=a<j(IC&5K3JMMN4$Kf>hBc>s&B}ja62t^^W*#@|E>iu1yME<D zh5+Mwk%(Hfwo}wx?Y3SvDsT9e5cf|(Y-z@T_H}F@l2nmb{7@I{wtl`<7}enGQ|HX5 z)H_kc_TknQ0m$4<JeM8WBnt1V&)_}c1)>0srbMA^zA=<@`hoZQRLiX0f<idmr_Sqw zEPlvnAu1Dck7mU<An&mjkTKu@ZF2<mHhdRuz*=0iAZ@ZqGd0KMFcrata2gO?W0QoQ z1tCsu<v{t8P@=5fqVTFPw=D#PB(V^LcubRJR#%Ma0Y4Shqx@Du&EPQO?qbDE=_?$$ z6f&f@$(5yZgp@oSc^to!-wBYjhG)EOBHkrOI0yaK1J3mu;66~D)HfNxM>yBq7D!f` zVt)Dv&hLzYgsIp~umYQ3J)y8#F+%@P#KaV}vU^-TmY^3FXg~WTypFVoBw?hq;f4`l zU1!hZx&4Z1YJoh#oaa3T8kB&qIPKIj9E=Az*2{2Ffmd|zF6;$6iN^I@(DFE_Wyt(Q zAkX$D)c^Ap^oCT>yn(OgFCDx~;8^T$Dfn{y@@&Z8fHHboCDskjAl8`x*@MDk-%(&v zZ`wv>z=^=^0a8x!W<3aRK@!%07-Jwh6WPzq^9)V^_PT~ja_xjKlY$vcA4vYrNNC8- z#!y7|%gI|3=)^UEm_~<#D6QJfWWumtUA()1yd!Ky9NQSwlNq38YOms%QP4r?g!UlF z4#aRrwn{A4Qk&bVj}KrSkMOxCEypP6A0Wm0ks0uZhYJ2ID#C6fsc9YLcfc~^jiC8r zDVC|=nXLKmYaov-jKG)EwMl`#0~Eg(N?epoV0jt<CezUhw*$sNoZgZ_%i?mR>=dY~ zQOgjU^#*3%F1>2^a|A%teczzDi_#Iit#4Uw4!(q*F*P%`(H(l3c9F}EJp>e8*GDoZ zXDw4p2;C~N#N9cTMJ8YLcvmcY5U}XG;&Y$0neX)x+^AeZuSMY@v$&$bNK){}u11p5 zKj3oT=5a3UFsgP#7i>T57DTwjAQ@|>w^CnuzmnL(pqaq|gHK}X402_Vo^f#Q1^L#v z+gomX%oLxR_?mz!23DHKi|xnHg4qOZNu6=|v@cG`xO{|d!WYIL!XJguTjHDxgYsPO z6<K7zDWN9VuqzDEqe{-vBi<(zLbf3TEwR?)G{e?s50Vn!4smm@!8|S;JrsL<)Eaq0 zQ0#!AxMfQle_hLvS1b55-oZ7$?1peMJE7d?=)KrQ-6F3CKocIFD0=X;o##@Sj6_vq zrIHUGm&c{(x7-!W#$wCLX+cQGD6eG2xdNCX{5X#j$(q~XJLd`--$b%Ss)k*q9_HUb zCA56kJ?0ch)(#Z2H;X!b0IIsAYkxE){BtNbepEw(1uI2jt5p4ttXs^Fkb5y?_gVzf zqO_W!joE0FYx?gp8*S`&f#furEn*6K#h5>stzq1$cr5a`7i5^Lhkp+M`;iWa2mTSL zs>k~Gw_?@<+uKTjC3-EhF4ClqGm$rqs+LJ23SIGS6PXvn((*QXaV;W*V>$ZoC!C|S zNf_RUYi6nz43KfX9&_9&y{hv~;4AB3T7gXrjDIbzXjq7mvmMu^+-;V|{(CY$_j3uo zeh0-V-5Zd3>TWaZ+VLMDB?NmA&SGi-iQFq!XF=6K#x51KWrB8i1Bt3FXwc5Q%&4bM zDu7;JuG#Uoc=kMAmvzq(RKFR>)Kal8=ZZ%@*L@=y(QPEH3a?qS2xG5Og_3}kLAxKH zsc?QJ**FJOr-A;7G3#w^7zB7?4BNqc3g@)SwL=l*M1yv}a8n-(M*2~+pp^~7S4*z= zn@B7|1*#r0Yf1;{zHvdIBt3isd5m2qFBosuJ*>As=tecD=M0Ah2V5vrRx|;nW7WA$ zg7Wh-Li$#WsKdezA@}+DNQ3>IRf6(=4k5^UWm!pu^-~CAL<Ky$bD}KzsiVzI_H`hv z7GW6kfjHlS8S1{4S@HG3yCU7lLeY<J3M6z(d%3*XZ}wLixM5&wcEbJjA;Wd>n3U&R zQ$Fqx%L+N9jh)*g%tYiecA5(-!$j4GvpJ0%N^owx!^ZB>xY%#Sw>|u5fzwo6lIkw) zEMj7hU};`)gzf9+^hpp8ENDn*m8OPW7B_B@ShA4l<>ugDP5ZM!^9VcAgE{c&mi-Uc z?8ME*O#Yy3=G7KpLEjA2EC}c!i%<Mvuva_=l6)6Yholt@HMX3lVFe;?v5>Md+pPXl z&<r>PatM(@kX8ec!Cb{VFfbj#h!nZYK<^DaHmi?6F4Vi}H@Sw71MEoeYXV7=gQ}gC zW7cl)de_6tx?NCNMN$vOh8_&L!;k~B*v2gKkzj}NfR-bVxicJM!<GBus|4*vKz|;J zjG>ZFQFRM~VcrsS@is9XFO2NJ>%)hzHm#TrEev{$R921#iq5#i6ntl5x6k;|*vwKz znj<zpXz^w`QFmfd++``8154yccsczsa_m6y2MeJs;^-6?`w&7D-GM$7@4xC0>S}Pl z>>aL5WIuO`K>eLy;750Gb*~$o8zp=uq#Qdi?kqtV=}NP<%Ej6j7yHMyOzzXpDn$ed z;Fzv#GEF~x!^}ZC876=)UnGm0<0g3cyS-wVW9cUbZ;?^D_Ul#LF#OP)1?{Iw>>@4e zu{Z-7e(*8Shi5MK^kNKgJ>BBjwhC)?xYr2BuSS~SSYhN&>`m6phhp9=p>ACFL6Fl= z`X^wTtj)szqlB~=qIa-35E0-`Bd>TV=@l52kuK8r8yt}cgu2UQ)C=hk@rE#8hv5Wv zV_Y*qkB3HmA^}z8e3PICS(`J?jVtoRY_JsS(YH{RuHaHZ&{Ug2^XP$X?S+p$ps0Y* z4OqWM0H@eya8{Bi7g}Ut?p$Hy%{MrLKd#Of-^z7Z8V_;JqgP@pg`2V0YhF9uiqAU$ z$qkd5Gaqx4$LSR~d@DJ`Sz=+T;6txsI9)ftgd{G@XwZBy%q5Natb<c-2=>_5Ran-u zIM!i|QR#uJ5}1=wmLl&g5Pf$P`Ddntv7JYxX$=@C(W1)%?40@*xiN=Z{pNm!yj+CU zW9F5jBoxIjP9%v<kYtW$)T4U(mc<nysdYt&>a$Y6nf-8Y?ZBl*=YR|_5@zYaKF!WU z+^K05bnqHm_f<4!-(Du9KOX@S&|}|#$?GMt0<xOa%aGKHU8Aw`Pd3F&jD_wPc>jY- zY|mt*=)QlvnEmcar-**6L~R~+fBVmn5O14)7Y60-fe%J*Zs!kS9^C}}!AmWeyrHC& z05g8sZOuDbEX@e{;F`Z?2KI{&o>FMDuNNrqpyYX+_-!3yK{!CMfbn8UC0UPslS~lH zTK|%hoi#qxSI^qw{kOnUl1&nj#>aE|tA(RLbm5r0?~yF{LVV<;4REa$|9FBJq9pJ5 z-s=ssiZ~2$?J%G5Qjq%J0JWTxkDQ8p1gweZV!#2v{07N#%VvQE&i9C8{DWjB+%jnI z#vLAq@Us0Zk6o1NQ+MA)Am6>S*oONgFAdUPW<yF2gtN+vU!D`sv<vLc-A1w%l2wQj zvBbF0&@ThEZCNl7(~=8vPVY6vVb7Y6w=BGqF~X>;0xRm*4J_d>*ODyN0+`mkT`|TQ z(?d^wi!WHCpkK<D!L0Af!s~Uzfp`V9B(ZWW@=4nH)@_W*Dp$)l1hI5t4R-41f+n;< zQ-LKu-hyr9-*!QVJx`CVX)lc2p!E#qDB$sV+?Z=}vJZl7aE{a1JxaW{as-nH$h692 z)+H_>Da%XQ{UsnvK+oE(Vu7%zhH|nAodAgh5Mdd~l@3soP59r@88w31n!64Y<p&U? zw9F5x;IsL9Xk?+@`2ZE;yWdd|ss!anusc1)KnXGgejgsvs@)s=IE$_cDvStIEFgs& z*!9I2;)fNppA{<T`8*7_)AwLA-2@N=eeAx3{y3mkfz<g0m<WsyOCNDg-^+~gH)NwN z#c(E=)bkPS<Ms8WdgBsm5t5Xa%r?8dS2IlyL(|f$ERllh8CH%nKY8f5Wt`msk8{6K zxw}7>tIOYBqQZ?{c3fQ~p8roHIlZO5%o`R(=Cqli`nDYBVQxQ!$WIJ%>!2y$Q`XME zmN-22BR~+ZOhqE#i==w>8;g<BKeGz~J-XmNl7;&y+V~cb^5^B`q}YK%Ibp1zbqne* zLmOiDLqZq>Va4e;i&>jDkPcQH8=!8rFJcFMn`L<i0iKQJ9EXrrji3<#NkN;ipe8G< z)#iqn)1_hfDdEbfjs06vu}ojHJL&6EvEt~@TQQ=@=AS^^<Mn}mUKKUla6X#i{Zof+ zH&9$i#b+V}m!x=?0T-(HI@X%>6U^K)O@N!<V;i*8f8Rh(L7F-7FSt)3i$W>>T~H%i z&m@8CI>C~t{B=2FM97-S<*(~6WpqL8c>|?xemQqWf*}1s(&pRg<2q?%zn99%kNAo+ zv9|()dyhfpMmho}Lr(NqbEhmY#eDXy5I*u*TXDVhrI)f|TEZB_=(d>QqS)rKHyKqo zLI+~*sA1Tg7|W<22_O-ic8Z{lbg}iwEYl4UBFZGn9ymQA=!C@w2o;1=SvX%N*ghTT zFi@H?X#kA9S72GE_0R(|z$g=K1s>2*gZ=eh4=$k#dcdhGx_uf0q{@Hbny1|iSzGKk zBPEqfNjQhg@SvxD-@rpsE87gNxJL)~Kcv+%#fy>?hkFSVkz@oJqH}ATbNzJ#--VuG zL<FzSiu2?jFv!O_xVjvS)rzHhRl`xYWf}JDSHhcFx?fKm^UytSAbWuzBtHDiFedI2 zu6GT&itAcIJCaRd%`7(oP+9>Q|4J_tw^(ITZ$RClCpU7{B%Za8nk(VKJ~jRUtwjk* z{TM3B-OM{Nxa>*vo1nyB1gQ24%yUcNfP+4-s{I)FOB2DZUoK!fMfpqN$U%=$;ive| z0uveG4`8?kf@czri5bcO8Bq1-CCIHG3n&LA_IVg;oA<)Bq&B?ZcabH8$S^17$hUy7 z^H&l6{3++WkLFQ>kdb1%&?-#(5aRA1AZrH5yS_~9!tZfR=a@(ph+Ldy)Tirzn$+T( z-8QxmZ^qSaP(1YTHPe|*2XOU?FO2a~Fc!E=dwAGi5hGQeU@(uD@Jr?!%9G~^q9lMD z*TTfFh9#1B>~30t#;Zph`6r0Wdv##G$4;Lhm}gwPU&QT7meTz2)zA~D1#P}dri+&v zr<bxAV)bDXYswN(Mp&#&FdXGTKx8l%pJddT6^_)bycfyUAEOdPx3V6@G76(0X^lcE zOC;{3m=n)dFE3{6c5GJg$;*sxe#wr||0rn7iXZ-HKu{7cSt-r}pxW&_`7ZMh5Sdl8 zADea4J46)nPiHt#1bULeYKpM>_(W0Tf_&N(j{KjvHx=~GCPDk(a<QO^$m0l@uI*1y zwZGCU8|T3Oj%u<ii|ptl{YDjqbsGqN><73qwA06aC9hNDOcdG2L)KG4-un)Yd{o_y z4lq7C7rO_j$`6950Zi7)Khx;7g$n+?b#9*L>Sh&^nwoW>?}xwwHHxbn9!bAR6g7<s z>QU{P4io>EoVHTg4RJQ_>S44lcK7Bvy&@VB1sA0FoOsq~1YBV*beAZ-6E2IjeR+q^ zct2ch1-RrU3Ul0K+$(xGku**9(C-0K4rA0w=qZ`t4Bpxdz@>2;EzDeC!rdUw26)=w zU#<)2q5GhRw(x}`zx=L9WIz6tz0rVsM2UpY!X<y(jq-$>e+RmIu3JnGHA~aR7pP8k z7|HTdToxp4giEqlJmX}63R-hBS6it%1t}@c@-fiCqpqM$U@?P$)B<vKhl_0n-|hvw zGGaNjn~}S=S(P#g{c^NXd3p{M6}v#CT`nLgOQBXCjqeMaTQC%B3+Esm0Zy|;4k6{n zPPuxMQ3h2j{$-Buhl4x@l~XI$xoJNXt3QWx&e;mSXeig54wMzM!0c`G#`t3PUInd@ z*;s3v2QV-kTNThnI66_PD?z`PmI=!H2v$2Ip$D)u?!v^q2k}XA05jjUgWR6z<tuez z0!iFPKL(UskC_fm6=ZfF1nGKNfE8xfW(oZXxG#;PNHggNX#-%?uOFefz%J5e%^-2t zp=JSVScN|A9ZzF&xVq;u#92CURW3-9_XOpBG?}Xassoi(k2!r2le^?`t2AXu5y#)G zVO01h1$k9BOgz*3>$8&CmH?LjV)O~NvmlM`O$C)YYM#fn#U;!6U_kQ~av|{zEWxM- z__J4(t&Oj$6xH<_Bdu$Mk%NHu?sPDzu0d*fgrc3OdNL5ZxL158qahZS8~X`2r6tNH zXh@f!=O;&bcH=sxMD&@+E}&m|onqASv;tg++$3mrS)hW!+Uwf~fY|ng)AG+AH%qlE z);5qoW}&i$K0qyPYkS^qH|K*kxjE2y12<O1MGM;EIX0HpdH72m2-yM{1YOh`42}Jv zAd$XkGn%xDVN7g3>ZDrm+Pv3p#V^Opd=lUFt=uPtT1Zq}-U~b~z~7do>0Wz{<*#;# zoKta+5rfMJCwe1(8;aTc5+)<ki>Xh8Ai1B>+c2yjRpLHG++6pCSC4=ji`<qRorl`D zaR&aKz4HxpAI=z-#a$8R@LdI46=SG4MCDO<in~Q;8!_-rfNu!ujiSPcvUXf<vTRd3 zHP#-lpE7n*2ktC#{hy({Ew~F;$2z#+hq#LTF{ho01a4#u0>fA(;XiR#lKQ`AYoPjJ z&i;-K2LU;{RX^h=3~3;2s+XqmUT(2F07-D3HnVkGpH@^U!o13^0%%>7Na_bwE*3Ig zTnMl3OS;DPFv3XaK+iVyBDw$yPba`B)k!8}d7!fP>V;%kW^o1m9Ut&DRCIbgPOg5l zHV;P(sSu~+cok~zNaz(nH!E?!TLapx6F1rwp{e~O<Cu8xs3j1NDgnJhvwRDM(`{p0 z{N-v*7gk1egb^rKc4Um~NoC?;$ACWT);WCkuc5F$3MS>ChxUIkKuS$So&rb~I!E{h zt4c6ti?AzBLmtSzW9Va7!61&nRSW%`W1hi27bxpJ6B$1Qen%Ln@GdO`|C6}~02&jL zsi6Gy5V8biG?Nk1hnvV%WEz~x=ITap&eeC^^b!<)Ce0T()HrCRa~OQ+h)Kn4{o+_0 zA*|#L(Jq$12&nbHE3s%!Mo9X4Ag$d@x;LZa-P{r~91p>EC7HGP2MyA1gV@~>oE>_k z06|oRCf<XK&EUX@c*Ec{4J#mbdMq_uI@Zk?jOF3DXg)u5Ahtl(DobTe8pMYw>xSSC z&HTJ(S&q6=N#nrY5B&+j;6R8c&QVaiE|6_F;%40c3n7{veF?|#49h^5J%^+p!As;( zlU(D5lN+>_$ye-Xu(8(_NRk%VHh=<-v7F`mAn95)PEikaFpMC5FV?HW!J}P>sob(n z(BXbU(l`o{h`Wn>=$(ZU`aJ4fCHdEVppB24g4m*sh>p!TyIIh^ee7q?DOfBo9{4G= zo<8^5S{SVK1E6&dIn2u2a291qN^#BXaDi0#%x$+Dh9hTfwg50is+)SLd@Bn~c0hoE zSanygJX1Qz{3Eo1V9-=6DD_Y`?f486W1xyhlqu^Y*R-UfDXVUQf*c7DGZ@0pdzy+) zk>iMjKa3ta>mt^fXQMiO&Q{QS@esa&g$IJY*E^a8Jrq-Qpwf#+5XKIjLeq9baX(m+ z_`Bjcoy@xOHYYy9`BjHF*N^$^skc=(n7iT`?d4xYPQhl2tvWlpTkMSJL&SWaroGdr zIiAUHbN)Nb$l6c(j2-b=qUwiI3|3d;grIj_vb8U}`G0zEwu$-0P+?sJbB#l<Y-om~ z4DqcVv%tgI)n@)jVhCB<U)5d~sUNOg!gDo#S)&FtZHT#ihAzSPK)jm(zHs}866^Xv zvKcvczd<U353oyLJV*~Cl$g(6Uf{jkDshKgbESxLe1kFh0c2|-q~-}C=kqwnsQp3g z9z9t(I#AVvX2SvbK!A%MhEvW^miQiGrsBL|T5z!}#G}85Id30^TXf{#1g*Ldcd&py z^5EXy<wl}vf)GgX8V8O;E8dsvW^!<Cqbm;EH|FNX(IG_b75`v${LRMJmyoCi+|z*T zHD}{ITJv9XDM(TmHkOMRH1-9tbqzyXgpm~kzYA>0|E)#74nEgV3ycLJadVNyfqfRi zM&7G}K3N8u=MB)3ax4%Mx_5Suf$tc6aa&cEi*<HGk$S3toXG{`T8i~{rb%<P3+Arh zpwGa;j0JUh6_;P{wZo4+(M^krI7>Ph(X-%uEeL0xJprK;O}7pFa0MR?f1oq7hYou4 z7QdcUEY+nNRgKe2rP?^mdyEC{Mud%AWzrsT&8-sN2sO`lc7-LS20+8Kx0UvB5aHD% z4Uk?8wGD?0M<y=X)L!m+JwU43B<R#a_!ZD1PN+8kM1o4%1oABy%rXSNJ(i~Vpn&Z1 zWeIs)OU*BG^;>V7$jc4|o%se1-06&l7{8sD#cqehQajB}r<F^*Y+s_Wz(iuUI0Q9r zETdMy?||HvV1>^Dj$VX4{dD9D7iRTfAR^EGQJkD#ATnjrE`xmodWqZMk}zp9e17h) zdftfU?%ZxD|C9AP&&zQB0=>b>IeOIt<Y*Lv$i58UHf((XNT)(LSbPtugC63Ahj@*_ zrLZO<;$v(w%Y{P8GXxH4s5Q|iz1jPZp5D_`K5KVQwgF%~e#uXY+m9Ko@5jKhCc#=! z0(Y96To_2065liCGu*A-gu<td=9tLvo!u_6>#j|jue+CUn#<Po79ho%^>{C#BdeG; zyVcv=jYwOR8E3M4$kR4+(m9CB@H<un<5IGXRT6$DgiW9`Y%z#VKu{Q(2p^3{^!j>E zTnmEghwY$l|09fqdUb<K2DiR;vdeGQ$x<;bL8Nng`Na(qTCs1thyK*~h@*#a9pTwc zh+N!m*sX*qrJ_Nt#r9GCP}BlHeID1SMMw{*Zy?eJx)usb<PNK$RE`J$DhLK;;{tgs z4-WvQsD>z0OlVgixe|^n>x&+jkK3vgVT_Cnec_30behOd=YbeZtJ>c{?DsHa0=Q*I z`*QkVxBwOa2dgb0YVY}!ll%Z|d3r+P*&ckGwDzdSZibdm9f0eNhHOzNKkGyW-NgBU zB*AUj0QML+f@$ij?1J)QH*h@{dk6D81Svkh3qk00-<DpGlPfzm3+XJ#k~J8%RW;(O zK_J9EXC!>GG!Kv<j`4l`=bH-yS}b76NSpVXcY#?nm`!9N<ntGb*<Y~3WEos5lYmYB z6T)0ZxnW@?3F@J@iD(cPYmy6Z3hLW9z9$ov=MG{AMf6oUAcR8B4p27-Uu~7a87Yjy z^<}^PX-c@~<8fu*WuQwzoFy)g7Q!W1F|a=DiNlWwVDF&LP+VbfRtfB10qpfTxS@Bt zQFXFIbO!rDXfT8zLL@!p)#E$;g>(}F^y`o*;L>0gMVA}#yJ8&OZw@L@-D|>a2|t_2 zb3Bou{T#mmh2xc6Q_L@u*K$oU*qV3k2OPGW(Zd~%_iJ^VpgxM4asMvj&KW_wBY=et zmu*05k+Q!P0rzX0Wy)2Ed2Xtx!fCuU(4MVbdb0=$UlfXUdazBec8gA}7L=D)Hv6l` ztxbeUUiW_<`yK)H@D&F<7Sr7Pjs>8^a217%y@^1nV>Y(x6#PzN$vy4s&)QunmwhM~ z!v5mL@fiKd%S<LrTG*H#q1?Nze@|3ad*c+?qexhQ;$1fp*T%XAnFPcpzY~|w)}t%D zyKs<BllPmo3vmSw99m^cDAr-I_{S`?9pDmofcu&>*Lo~hdaVDLp>)pyP}|jBUdR^` zSSr1-fBKw4y=^zMXyfGUge%Wr%)q$(Cxi#M14arUs;&qZ^r(7f3pxe8jtqv0_*n}% z=W}^X(V1dd%%_LB@m^<Fl6+a|ACR%w^QTk`4P@1X?1X2y!vH$-YRq4qHpGk}uWAc& z^h}6^@R%nzDOCFx*^y$@hhF$zHfP@f)Vv&u+Z>?0E=UO)p_l<5U0z_)zCOB!N%7ii zQ&&P(hSvCB44JNz%!)Ar(KRB_Gnu`;SxAY_!)30}CPQ-uuvo#@%$Y5uti}tTiXJzs zfTW>dJONC<5Z(nLh4a$A8$oCB=+kA7xayT3L4=6MNU<l6f&`NhhMO}7t=mw#+;Uuy zQjZX^d_h}{;Th7RV<9B)g9dNVtF@Kw2O9Q3012`IgaG8N+W(KFbB~L%PW!*2ppHNu z=2lWPl~lM<b4ragdlVEEkp`IW48nL|tURGInuj%OB?R>rF%KA}76XFAcbq|7Ks-k3 zt(9e#nxvLGYHhh@^jNXg?(g>=pFf`0KD*ljbI<+#Uf1<GU1&$PJI8CT##MeAyejn~ z24QdeBGDz79{Zi2BV4b<%r96O=gDIbIK_|wx>*v71A}nOG8F2io>H^J{l@G_k+C=y zl^-QW1X?e(av)7=;GMeLP^FezK~&hp;j#zzTe3<36d9vs%#OjvhH3=856`PCl@f7_ zv_^K(%J)MN9iqbd0<2#<Jg%LRF%R1@mGBFr-r0@KJN)E6;~}Q~O5X3EOz}E0q8B-6 z)d%q7?p@yGu1m_cjbeZVk61%45(r0>l5hZydfRA+1PX8uCU3z5G!_nV`BkaMQe!uN zGmfO4JE%k20zUnMm+4pL`;jqP+Q+kyDqW>jX?G%K89DoGty@#9Y7_k?1cfQ;0}ICZ z>KWWn;|w%OTQB*&?Rc5K>(9lS^|ztMi(o%rwR~hGI30F?6fb$%F0ANOc0mu0|A>=t z+*FViLn&j^hsB&2JfmQSR$~OdTq7VRLQs-kzpuFp)s5+?THR;KV!nel%EwzQT*`wY z<fUuM1gB4x9lC0D_C5#Hlf-qsGNab=KQByzVQcb^z9srS+ay29mA~-aY%nENU(42d zT)|e-4tqUddI`|Mi8mOv_~;gvU5pA|y61<2==vZu=mQ!nS&-~qel19WnDd#En(xgx z;Ob^XO1JcOUgljp>6XaUHXl$gfh`T*91>WbQBJUtxeQ3d0$?Pj0zkPQkjzEA!8-)i zKC#B^VF;UeM_0$UBy7~x!N#XL80D9ZF0@gTE2-q+(Gxp1=)<C&!WDxAq2?SiTFl4S z4Al>t<Q}Xcx$>@gxH@q1NngOOb%wd-tp`-|p{Q|r-Tko#&|C)6mNegz^=rf;0#D2@ zgJ(SC3=qrqR)lBPLLd~@1{rQ87(&zbI-v4k0k2o{cr`Mzw7{y*0qcI%ZD)=-;|G<K z*||ncElE*pt~Sc|$HEyl`+eyNT6x}+fn8%0LdAzzRmv+k!xYwYTGy@q5;L^B{PmtD z-vqJ4OZ*-Gl6OyQq$!()rhO}X{*)1VRuqVplJnHiTA|O^+*6qEj`|<vZJES>5}W0x z;<5g`i4SLRjGRdqK)HJ!I%!HmJMPV64Qoye*F~tPfaSWMC+74yuULnKu$g{Fq3VKv z`?kDPK30s^YlQKE=Gv>o$vljef%LiVK>L*(>X*>LJFQo##ZS=6J)r*{Uon!!&$ZV7 zJTK-K(Wm!uTK_XdeAZXx%FlffUm#3-w?^`p<XMVmTW&r_!Ff|s6FgPi66B)4>4tNC zNVCk@>X%ddm@H=gsU8V44#)u`s#Ljxtot`g<tKFZ*ZndDa_n!YpPM=;Gecs`kV33c z$qZ2O3kg7s<=>j3f_m7_8Zv{(W_YhzZoH-}{g@y4=^aFrQPtJDnAQfBQj9(A_-5L> zUT-<$Z?;x8ylsrO?F7g5eD)$jjEy+J$4u2c6YltZB|m7D+w-FXMe<6^vAK(W_Ds_x zeui5(Uwc84GKH0e8ors9D=X;0s=imOQTPv9#D|0%b&BhDoXb4>qA|LALSEM3xA@K7 z4HDcVZFlX|Y!>$cMik)E=ZT-><rU;Wj3rAHuft)KH{}a*)rZiF<zIMcsJ0v22h*$6 zFN@N^j^ghCw0xGJ)n8Fo++>Q604Y7c&!<-RVqT_=Yivza_x5U3gv}tPpw{!U*WpH0 z`)c<M<A8P~7yRk>lxI>^)&>oin`jHtk-@gx(1e9mb$d7nCp}3wg;)T#%4D<n6ghpk zxTuW8GR;Q`oqiiRIB_5a;S+YJ{pj~>TBI4j+UqY_oo*b_m!dvXP-?p_3@9tj?v88- z;uUBL6{!;m*o{mv%C9Pvgg(W=fdqGNOO(N9ND0ol^ePsbZcgz=){-lV*chwHI>x|C zyu0v`GefXIYDXr5Ig*6DTo;|&m_(0$MIyLgwQhft3SZ*ZJ6AMc@XNd7uRBV50xSaV z$K2Msrao01WB(T|<9JT?B&4LLz#o3s?H!TgfFKF=fnB_w0tWf3p1NR#3ng=vx*xEy zWTf8lbh03I#CGP{8^)-%Rm}lND4*}(hRVNQnWK3SOwHG7ATU-vUr74ouWSiTK;BV* z5}qP%w@7}MU1q;?gXOb-TenkDoBUp;#?h#kKfe8cl*iq*y5%J}U-O?=)}*<;$>xKJ zh-@Co#H|r6;&wJxG6!>?X^?uPd>13qHO5Ws+n=-iW5I3=E&MpmFSCRE0ew4;2v7Sq z4mpIY;TL4SaNZ57OY@F(CR7KuIYCnApjp7vO>qOE!so9$t(Q&WPtMubD3PKDsaJto zKQ-Cfm~6_=C*|zfV)i9HYu^yDx)NE-eEhkwCxY$MMrVtjoO|<&$kPc?Fd3`V{H+T$ z_s?<i?zNzv-3y{uUcYFJ$&Dj9rsU}paa~xmNB%!^&C4c%$%E1JWi|sMNMr%`;S<0= zbnMcZbO1C9%3=q}r?&_Io*0c~1jXUEah}EPkTi8&e^}4Ddy1B-_U;vB`bRNMHPDua zGZz&E<c1vr0sA8NI_Sh6I8qv&Ce}mQ11@vE{BAeqD)EI-3%_zXs;m4Zw*Y`um=)LF zA|AxlH%b*dnPa4_$h#x-Xrc@j5Ok7s4LR~9e)#=#t@@JR13{b8?3uGB#?o2qeH-90 zH92iVy50Om8^5o!CgKoL=2Iqz;u)<&F!=aHQ~VQKxIIY^@@zNyXt~`h0YLGtPR}yb zU?c`N$X}rkgQ8r#%l|ftj;cMma^T9|j*{ao@qeTT%|KGyi%^yw4o_{;S0mUJ`%6_! z+FZSJFt|X<tMJ-GwI1711;ik?G{1?fZyxb<b!R!X(^kaEgIhw=j%|q)2kLb(VU@&_ zy1qNF!t|bJ6^N1K<1NBf-N1(56Y7r_gN%{>l9t_~7lZbHj{3by2PJdB&${TLzN(8! zA8Io87c#ltLQ=LL*k}D@Oer%WOLW^u*BdBfT~5S#l5q`=dDkHaw%Bsf>vm<Zhsd!u zy3p(gVliW$K%A;N6Fh_ny+elnr>EZoMBSbvn4#w567Ix5yyp)PCYDbOQ#}WOGyv&{ zKer;TE4T)c*|jh_Ad{bUo_xo^xVd-+dN|5Jlp@-o^l8KGH?&tdEk^WWy!e?8xgk#5 zEzXPw{6pI*o)@prGl~7rEha30?q&jjW0Ov{^E8nEttq9l>9j-Uc{DF@<M;;kAmF&) z7j;URj%uh)kr-dVph$x5r|jW<Awu?IVbybeT5Qp{0r;VH4CVOSY{hEfUG4!8nQtke z9gHgC=g(k-PO*9CTr%bUuuKfZW!9a6WtE#Af(8GUs8+xrfS;|~>US?s$P5+T2GBd~ z3Kf&L1nRZ7(n(&S^?BN^ru9{-FN&Y{195%~AADFBkv=UxN)e9pABcqKZqK4I4;6+$ z=+;)$Pc%?-Bh7xi5nNGqcd&%{$SM&*WEffN$hzYCAYx$LXs)Lue+drM*~>B`Ng>e9 zcRLZploT2>156tDF9BEmC7Y5)uX>sHoKN400H{4+5s&4W7e8#ywmkPF=<63PCl3u# z8<+=QopaVe%9F^Yc>yIV4J1$$r5&MH?3|$0%z;=Q6N$`$@cHS3zA*`Rs~ni6EThc~ zs}<K~TQ^oInNG6qfdo&zZ8y~K%r{h*p;_U8@8y8ED#_Jx0s6i&gRt!oQuEN!(3Six z!h^W7{%Wb**qac>ds?r%s9=9>@-8RU0F6TVE$b&x<;MN5*T%OVqU8M@WG}9AwPAP1 zfX-GRbvNF!waHc0XOcxaoad_%Y5sY`W4B6l2%{Y(w+hv=UkLSP?Rn;4Wk~=6yr@N@ z2cjX;S33%VIwIJ-ucdY@b#>vrfE*zz%oF916-v%ye7WVNF6RyC&PBCiG~wdOhU4iw zl_eM0Mz3_@qwe}MR6WK}lbvJOu<4CPG4s6$Wf}#>e$*iewz7Pc<nWGJ79qD)^O5_l z^2?Xe4GezNd3@aEN0V?W!DPt+4~FQr0O`h^-jfOIBYKn`x}~$<(-yKL3RTZD7cqAK z&ziKu?>5TvP?7OLq)47Jv(z;My;0tLO>PM_yN}|tdrI>pUe>c%hf$s?P2wEdf}C++ z=uc8{{+JD;9K)nI&M7A2aQ%}pn#e#Ruw*;d&rHKXl+c167&VixS?+%GC;~Zt<RD(| ziN$|90!w22V@Rn)cQi~r0M$==L4clV^%Kc^NIS9~AI}EVt$Lha4%KS<@L9lF42!h7 zo<Y?|&9|(F16>%WvQdU@Td!nt&qM|G9st7z7S|3!l)=ZEJAlNRwgh7@r(aBp(FExW zc@dtuYs9=6blr#sz1ft+z=;~2uB0w!_&p0DN=R%Vlqz@R4_eobn34P@t*$Ao*7_!G zL{YXV9F1VVyE6aB5b8wNm2kNooR8WTT2@aM`XxV-oc+iY7izdvcAKj*mIDa?dBGvw zYn*}XnApyt=6W8!LYmwWuH3=KA-9s#zK(EZlXSaiQZe%%p)OTMcb{Ulk;%2I9<I9g zx8aum;)p{|$`Mn}tCe<P?o%r|3=VQN+mwWlUd#y?NWN^@bNHkzu8$L`le%iwTD@}{ zJk0^S$u@6_x-l&zX2wU3f~PO(EKZm2L`c~;N^!Q<3YSxGb$$gN-u_v;!P{%QCJ$x{ z1g6^;H!9t^nJ$N2G3+04pG`_kdcjq}_TlnBwIXF?M8M(8%TcuOqOx>3XSB~5q7Y3< zH^1S|h9DR^JN_N!KPIjkCdhe7vjtad?JmXsK@auXASI)$C`~?3`gL*i%%ii#9fGIR zsDk5uy@pJQdwgM@a67Ge6d9*z@ymi^&Z)@=xZ~^Nq~AFeI$R>4zJAP^P=u=GN6`4t z0FIKwny<k(s*Jd}PP89zuR*b&AbqDDY$o^Z?Y<E*I#gf>1ox?7dvu@(WnBxBQ0$&7 z2G?$+xrscm18Gj{r>o@t`OG|x*AQsTB*LOCiWEM}mMR9=AOy~vP3%v#Twg^<0|{Ga zK|V(5;q0PU!#}JQz0wuu&U_`|osDeWo?ESFV#rNfp_^~f^EA#zE7NX`_(vkeeI4#H zQlh-ch}egS#=lIKOuzdrB&JC70sX=sHK_7LoE-2%qkMWa&ehtjn!LE$@5%4V#nBrl zn3z|r*7Wn;CJ>h@(6Eb7H{e~=(G-c{?Rc%VMh&6qFhqbK*lCM%@c5xG*Z~aIjb)SA z>oS{VWMGQu4X~b~Ug@rpehR#UJn3*-d@VrxZ1~9nPo*)g`;!vI89_LNJx)8+y}MR^ z7-21SKJ7RK=9p7toL7C5(S&v2WvvKfU26eIE>prawz+vt*5>=kfepd#aMe#0{pUh> z+wsX{S(07>n8{q87KVYF4)GJBI@;^v>`9ZbaGgv_FUaZ_-6YAoyF#pinFBVY{s(P; zCAk765)Q&7c0r&-$ZsR$F0+G;cg$ZrlztBP+z8pT@K+Q|$>u9FYQ=Lsjn!uK!n?&0 zI*S9k;dQp9O#)2uHCG~^4STfU;|V1_jAOheL!KN3*K6>5zXXZnWOr;T3Rr8cdw;MS zTqF@#8wKR!-Z_O+M1oBb?YVPDlE23%y?%j+I=JI+oVIS`z?8c|A|nx5-IpHbjovn8 zsdsqn1X7CfeCju`T1^>I_6@fK+!2Os!H*6IBByM|6ErkMy^)}KmcxN&`b$1E#qR_9 z+f9Z>;D6`6jpvEK^uD&ANz#|nEZ<ih^8JM@J%|)1R#hJOmgq>($8`$!kIGe%=F1BM zXqP=dNIsDhGq2qZ<5QKx2QH4zt<052+&KncRFy&joKW0aIgypLkHSP=VIA2Kf62N$ z>Z)CwM(g;$diY>v`sYUX+ts?^M{Kqim6g>qp${JF)-5?A<7UE+-2hUASOaap5h;3X zI;YsvN@ZDGmv3SVhT#^Q|6-_^TLp!}is{Rc<c_<Vx2yA{{1L0qH>31SI>34!_naaT zuBNCPEF|16Dpq}OHhT8NTvSr&c~9kt@M}x7h8oRx56>&7YXcAdAD8gVH%rFVe$Ad& zfbv%IPMLotC+rj}6OWC2W0fr5jz-;jwbXThh+1BkhiOjXL@dS)d;MsndHpMcvoUNt zEfZd8l$4U`0F3rtdrX$3Z7J&J^aFZog0ceBc%wWzOucG|6vkj`(5Nj+dOH-$aznHH zfKa7n>B-_1^&1wf^ou4xB$QtjJzw+A0py(jk>6Vqr7UFz9oRNP_R&q)=Z7`QfAoux zy-zd;QWxzh>fQ{8_vzmwB;g&Ou=|NJ7=pi=yr<9j$${%kiFR5tT>ubUAI*Q(QAA<( zW_{5LcKFb0Hsd#%dxH%s{Inu2`F?ygKmQALLZ(9k$FAaaOVvDKfB1c47CS}I8k1FD z9SPSamO!{bBDB?{(WlnG!F})*M|=MXY-ld-32AUhou#g44b@NEa>P_jP(J>-^^9N= zA*gM2TdnfJZ?){%i;($$aem&5lYKZmpQr5d%V{KWyceBupIc|2GXJ;h4tK)9@ECh1 z^1f0zQzP_Pi@(6ifBgD~5Lmm#H%?Jt3RGWug+@q_4B}@K9VSu2+p>HgWB#}KLDgVv z0<?>)*IhBbDK`0DtNb|zSJe!7Y?R&YnH?<;Plk%|o5R%~FJVqkDODP{2sZsp5clz1 z^)E4h1pFoT%YzobtoNyneVYjbx+TnYO}@(Eo;4scU#Da-@v+gH{L2H#Lue{vF~%fe zw~Nv09z!9UuJy5t86B%2#WjGdwan*-3e`hv#7uh1u2+<Wg)zBX4(kRPqm{Q?Yf8%R zJIOerN28)cvXNr6(PvZ(s?;wCi`ev9wsmbwlWf6-W8Mz?i@4W7PGn&0IvGd~pBRqL z+``j%pk=0O4bz<QU&df=*g*?1uh}#4S)aNwv#Vy=Tj`9ytgBSiAtAs4Md4~S28vO7 zYUdN})!YXK>K8;T4uUb6F)Os=%r_g;y#L4a%)ZE8ZFrM$&+0;dZMLXH5OUI6!hVRu zR^Eg+sLA*!-n>9l$^JKM-75KO5}JWxG^C}0xP?rN0%j*<$oNJ;k~;($xd-upGsgps z{jt`u^BoU1dbZI|-JMo$-);UPUGoe+5i>KIUv~+n^cvrRZfRn4e{7wj;IHBsF)Pws zozm)Yj0IO#s#J7`>V_~3J8mE1%1F_T(rD7k@x|R@LJ#8eoKu8VPwj|oY8o$4ETwyn zZhP`oL|KF0ER~&pkMm>@FD8;0SPTQdU9VWa2Yo2zHZL!v<hS9kE^V_=tMOgdtvS>! zw+pSo)&|{T<W0M$9VwNk`tXB&tL|%Vs&}v{ApfkVct6M5o~<3@<cFMMSyQYQCAGz! zq}))(zYr+Idm40W_=#2-^}Sa83tfW-CDAfi$xRDaHzqt<U+Poz%$o?iH{f34VcvWm zxo)V4=i=0D7rJWhgBR#9G5bO=Db%@PtzzkxNW*u?24XQ)kcv2Yex9Y|zkjLqyOb=l z-mOL!hfh18zBA&6q57jcpdWu=7CZ}NsX9t(5CG6bH7stHJy1ASYmw>3x*jNkl0|4* zqdY>^Pi4ky4)@<y=wbbI^`_ZTusJ#HKqZdMWDxN6fsn-gcX=buphP_Hv=A`p+GM^d zl72bqo^K0smsP17#)JmKUXL$Lg6V&S1G^L%$|(x~OZy^2{q;QuWZ!x{tG6Q%y;jrN zF3$9)pd}lQ^}-}G<)kNWJCj9qLY~-w<9z%Hm<)!fIoFI&1yv~XVXwN3LJomDj*`|7 zd%{@YS8}gQ7>0B^xlrIB`xGlKVjykfNF=k%_1HHZ1qhR+R+I*79q%F?2bY7MHJ+v# za{Lz@<LT^FX?w+B>(n8+W9I4IV&2SFPcquxkW%v(ZxwYClibi}e|%G$bduMjK|S7^ zgc1h<SW{=1Y(3jJ3LdjIDszgnZi&hNB`j$#ny2{q#x5Sh#cZKzJ}yE3Sp0h=*okpt zQR;i0NdtQZb#0T5%pen>j9IAqEP1%bdxYB>_IfDlZBBZce5Y`*jE47X^?ULn6tpx# z{-;$wWI0WTAp-m->vW_zg1E|iLs`N)2*9i90mvg=nGdh=n{Iyk-ABV-qwKqq?_t>8 z^uX4~KD@9cNZF5(rDRe0OJ3*?m%85A7=sW7?X=kjMOa$7ibnF-l7{F-fp~~85cbP@ zYHGbxd`5Vu8C^mtNK;OLQjL%UM*c)uYEU<f*DAVPgfZpM%BI#|;wIMoWRxGJcwRAG zV9%?K)Ii<x0~xlwKfi2lvHVXZKsT7l(om7Ld9}mKXFLt<*qbBYbM<cOY=~Oc>}gzN z7mn%<eEVfxQL1tSAFCCkjJiF{X}t&G_bi-_QxrevkPGTi6>}woQ7G={7C2l_GU^*f z$uOQ|ncwTAp8ZrR@kNQ1y%_B(=%qS##DtKpEPc}{ZWa)7^=q7z4$sRk008ZvDnf>J zQ05H-Q-8^*Tc08YDHVgk*O^$u=W@qK3qu=_&K|Cl@@YEy2?03;e7DKgqscS*q?}l& z)~}7Dj0+oSTKmqfNvrzA$)*L9csf>#WGgVTfU&0dFYCE8m-R`BneoqyN(RgBo5~Ok zERA!K3SQZOoqB917J?Z<%~f2M6Vi?DXB-7`B@pH$#+N7fP^f(5#7TDHD^-%;TA^q9 zM;D3sNv^6#T;r<kPr5gJK18H$S29;bcv62Qsd#Ch;hvXs)s4oJp4EOY6GM-}UAuu$ zbjv#jVi#OGi2*my9_3ROGWYCdCi>?gJ#`2y7;mw~0gid#T|VgRfY0Pxh_bPPgjP>A zyJitD9jK0Tt>zOl_b}b;{2IT*kZWZ2bNtHRElN8MW_p`%gs47I2}MB2(27<`9JYKG zS3+)o(es3QZ72eODwUcy<2-t^!wz4Rk~(I$m~PEyUkeE?yl7X3vxc!(sr*)eWvq>G zeNeAi_=?Q0-_sPORxI$#wKnC^w)63Qo5hEC(b|Fv3#_H?u`Tia+mOXfIB?tKwCbcH zv7{T<+BlPVIYRy%qE`P<%u;7w*UE6%GT^`JJks=&MJ+HzAZx5H9SZW4aX_~U<NmG3 zOg3yj8v@VZpC(bj)s&42xD)ZH9|1dG!mhNZnv3_N@dzv&F`8>Id_dZl1PDGbw?*DR zw?ma$b{dttrEf%~-bT^G6QL;<Fxq*Z$kU^Xdpp+mXP$<@@;ikkM>x6k&K(BQqA6h) z8x2_JYs%tM&w_Au)5QB&LHH0`l!@h7%4afN?m=J2{D;JU_SjmBIj{omqM=BHQOwJ! zZp%1w6N-eBOuJdUMv`gfX^K>zS~2-|?juuiqbHf@JG*EKkXhG}xbXt4!hKNHW~_;T z8+uH@^<!d=H&HDQQNQEoe8QZCYDKGlo4fldLaeVj+-VCnSq6RP91D}OlNT)+Ma>U^ zOM{mGz<Uw$An84qfKYg_R+KI$t60gf7=YB^mkvH~l2Z?~yPw!t9Wk2jH32O5eD6zs z->V3U{4a3t$tmOyGa7xpT}c~!0)*hVCXan3Ei4O3zDWd!KysaKH#D~HR&TW|f<W3j zpXNsZ?p<U*E*_2s+&QF1@_JO!-4}I2djXT?@Vc05{~k`LO>~seb;oRqSMpF&TwIfO zY^!E`XQ5_oPmC8+`3o<^$sL7s8^Oh`o^kLTA8X$D4rGaQk*vp^y^9T&-!{r$mtFA7 zw6yv-4~(NDut|AB;$JIJfaK|xSzP(76EJ-Ft8P0ANL4eeRQ$a!yB_FcsH+Jj;laqO zJR45>xZtM0O!K(<p>AJ^DQJsN)%Yi-?nF{E_7A^zE8+n(2X|97J1Axps;qn(Tx#PO ztoXgi80V+7=)!zad3Ceq9;V)){$8d^MhZ!4c_%JaB#Exc;2$RD(e$7rjcH#ji8ME} zK_ah8Sw2ONZQv~#^`GJWlO5ijw`q`j`Xeg;-lfqs?fr(Bz!$d!sq(u;Vii@`>@V0$ z17OuHl@6z93o2pUN>_f6KcIWS^FBSLxiXc7ndg$z+-n_7auUj7Bbo@_i@P1b(4(EU zv|XrC=o(BSZN-hC>h65L89z%l2^gwgZxNGOb+kEGEvHGrrt9r+${<7Z%$M%sVle|p zF%3sJBjkC(-ppp+o{+zXijLna<0sE^ib1R455^rwFuILH`u1I|%a{C@HydKoZze`h z=*Oy?gG_PN@FDF3){iqRX6O>l-8Mc#zJtI#fZ&A&a0LcN`uZj=oxW^~n;4>Q+=38; zF3!xY#UQNG1I)gJwsLHX#j5V(C1|1*%U!TYtNAlQ$?1Pj^W@(SSQSZ^k&BPFSg+&= z1X26JFR@n9j%9(S9izqE*M#G{Phqos+oO46Ex?e9c`&NH=h`Wm(?A1$`IGndI0Iw_ zBq=zoag5&=xON_I1tcnD!rOc1DEVnW(ENTGUMl-+PQk%;Ph+cuSj*|Vr)3T(m77Mw z)})4w!azbW+DKi@htLc*S)oyCb*uJXscf79kKYe_0xfxmWm@%Nb}{Vmd-v2L8RqmS z@&AkiG(Pm!4}rCK^0PcdKwM+<DNfcsXVmrWpcDe_=}X8sh6T@LThf~Od6{E}OK|&F zpot2x0$qZ&BsGNc@roXMoBXbCIE&-g5+olXH_^$Z#epHO;9KaOBT|yh2ZmC~-sM6s zC)Dv%etFsF$zsAsopdp;qc0{N2&?1D<TTf5KZ-pW=)!3l;%-`^o{dTtsZnm-J_nX_ z4}muyKsx?oVDQsPE<ntAT!Tw;#43*XS`3Mw<vvn<LqBiJSC(PM91e>{_{%CiJSwOz z7)-@$nwmUcQ=)o<=pYwz7jWv`i{s=^0>2|mQWcM;r2NMu8Y^v^6QeUXa@bx`=!moD zYpGocjtDjXly7uzPp68lpbHC4LrDKR+LzyT)m0ds;Y_+NRxNN8-aBVJ{34)nk*NP! zH|&V0EFTBg$P;LrY^XYA*dN!$+f^5lM4{b2r!1o!_rp3Cl&|&SlIfHz9_y!DL%H`) zs1+%#D1K2G{Ef>$gf&j&gsB?n2Ug%S2;uN}LE7{*s(Bi_Bs_3W<`m3lXO;QAkZ8lL zZ%%Ah5)3sn{_uM?{M;n7onrZmk;2|qJHm^`-CNbRhBbN|<}yIB4<g0P=N5ABtmpgj zY7O_9d81gN$}l!A>5^`~19$yyAnvKvzwSBSuW(rB{AuUaFP3m~JqIFExxf^EVWmzW zHZS?aQUnRM5v7%x&n;|-wg8(xgAd_+v%Cq!ls<-WxA>V%fAyP#F0&$RB%pRh6y#az zY-Z}q6f!~}`sud1xjwZ<VaGrsplUkbb!zw}-F}~!qPH?JM7MlO7kL@-4{^^aKPmxl z&wh}`eE}Vs(RSJ@P2x@~rHeonSg!Q07Jh3~@mXa7Xr*_+dSzi?T#$(~TEqnUug|sp z{JMXjR6thYD!p_?p?A$ra>!xzy7{}O;6`@b(_}TAQsz(2q{kbYVO63t?_*a!`}*&C z>OUEpXTX$ElA<sbc{EnhRX+i_mGqNSyi5agejaB%I)gYTL`)r&Mca=0J?&p*!W`Yo zPr9}nW2lqTJedB8?syjwdb2?3TSS?yiZO&aaWrGrobGH1f?H4JaPRVak7kP~yI7E~ zdAGv7O$aiH1TOJuZ!2m03e_u>GtNintRa86n98}@K?@N`KKn}Ddk-&z?RG<q^M-L0 z?e~kC8)e-@kLE_7V1B6|73T-iDd&IyKZ#9-YP`ZoUGBYGWD?0Y{js67NxchOyKGEH z#<d+V*#DT_0Ppcd%fG(;=INw@CW+&bm3F~Pe9Dr*dg}K$W;{n}vR>mlSdSk=)VFbz zkXIJJ>4{KL-=aqsplRSdD_v+Oj>0)y>P=+;H+G+hkghgtJ!Jh<DiSKcEMwB=kNcjK zU@N<q+YxvAVsW&StMNRzny}E~e-@Y?Gee>21s`ylNldH&z`JO46T)grI>h^N6TH`X zvf$XpxXL$F95y#|V_(lj*`}nLY@@EBH{9$LRs}`0nX++Tt4U8MJg7~&5^n-{M_YZU zPhoVr2)GltG<l{Nj)ghq0JgL6N7AW3cBk!^%t<px#>o*m$T5|9A7pDa)7b5?fRDG7 zx;LjcEnxv|$eeDuvEzsf8?L$|4|p{EFT+}u>5~do*##&EdSyPklN@;2GXa)(2tj>y zdy7luzUT3g;_qDPYnEYGckwQju$TM6MP=MSoN@A7aytI@pW68FeJ9i_pl^*}L20Fx zFNZ|W;8M8&fR5&NUJN<klnL1(GEE+Q7~wK*<}93l&EeS!8E|Y;0^u7)AOw@pYSi^a z%Z?9zkyc^hjBY@dH*&P!-LwD$!y=A_Zg*O1ZPc;bn*4*0_(qlb-L3@=kJ4g^M;1|Y z2fGTL=mADw&{pg4xPYkVtK%u^cU9`ad?oAr9$LH0_q4;Tqc|NYCN%0+n5=|P=4*A^ zc*au(sZ|I4-v0$`zPN%Dzj{xLNc)Q$Y#?n+Pu&)Uy?<D<?31}(NsPH;5`+27C$Y4U z_OBl9d6wlzs44Q-2q$a4vL<2|YnJb{Qx*mi4PVtQ8*A7{1fn&ZNn&24)4J(FvhaS6 zc0{-ABDjWqWCc#KR{;mbCgKIUWU>m%54>pJFwN^2<8ZIOgn6`z)b#mRg1p<--7m0v zP+dORt{`)Tv8kY6*{!J?+9_$P2||vLmGhuyR?<tSs0;vhll5~%(G^DDa>ST##(-YD zMCkWnr+7RhCM)S*&Ug%6J9jt=ieXtlj}+q$L)$koLzrJd$?z^ac|l33>3zq&J6l{| zcmjtUs!HN$tvy|c=e}(DYwxHjW`LGM@r;6@tgI6m!_>w=a1CS&vFDgrLW0xc#HyLC z@?VC!fw}U(|2NUrolr@Z5<x8F&@+QdJ*!Z0`v#RNOBu)tHsVEifg6aFG&4AfyS!BX zeCY=*3r)<MQ;7Y?Kqg+fX6(Ot3PJar(Vof@7cnenm05jN_cg!UMt{|SZ?F8YdA9Xb z5xeqkB}p<SN}*bkYt|SJmdf%6nh$BAwZP?zo_Vq&N9^5l)>sqg%1-ioGDnB93T`=< z1;BS5JZkmKI9aObLtFTV1q{N?dOd6h=*ohaxXK8R*6U@O^(4Q$tPJ3(z!WbJ<p?{} z)9a&mr@5hLa^J>o`|CaYJml)r<mWL5U*o+VihYIN{?82Ya`cKO`Oh^R!<1%ulG^tV zUUHXi>!6DShbOOvUCkXp>wY1Jt-o&Rb5C<47x~8}ZmXo=Sgnj>TeA$8!DF?EKAgI3 z$etGK*EDVK^Z0w8H8%7<rQ~RS&$uXM!o-H?32*gQ(jQV)4qR}^g7J{&oOqAJ;~(R% z-u6?Y=S=|L3w)QP)8~M}O#cIf#bj}yeCDxlaccYjhBLTBoU9qk_%p%p8!`z1VioED zpZX*HQNj&Q3GaMhb;VR_XS!kyrynAe+<GSl7XAD_C4Fw-ug6O9B!m06l<upGYAw$p zx8HV?`|G2}2yy-~m<qhk?*$m_t*oT*B{OcqYO`@E-KSn!zmshaY7MPUscnszjZbUm zKj9zqm4H2@-ED3|FhY=5zvuB3_0X1L)gMdei;c4`M3q#l4w!mr6^|#XM>(y1j`%%m z8K>)X`-?-wBGgWsTWmwQJ`dtnA;P1s$y4~JLpq*LQKhw1OnDz)(i)MrgJJ)}rghKF zDTuwiWsNwvFwZcpAa)!t#<Y+7IK_ZgPw}5cq-;bpQ11Aj(UIokP-j_hfobHJ%Trn_ zkMR5_9(Jt9$wqMwapB;(Zx;sG%-CsX)WWTee%W>t4&spDdFh7gqv0eUE;$!eZlOmh ze}1@Uc6yNeX`A5#c**nkFIG*lsRcBxSILxac*tnITV#xS1d<jt%NxtIqi@B@vPHFE zlgAq(Toe8$M-UY538p)oa$oBu_`<pvLA~apYnC=8HQ=XO9;Mh4NtlZBOueWqTFq-w z$Y)Ds4~{3o;c0sxks2|X3@&93AKh-_50rYM3L$#3a?Dk@?hk)>UyIyw))!+9?QI<K z1x-&BcCH^26>~MGI2I@(JxD4w_UQR*+XcDUM6$DF^2vhPmzq3}do(#nrMD={GJ5*6 z7VCQ@VJoBU#(1YC*-<L1GhvMb91OBiv&G@vTr0#4icK5vB&IKNQFW8JNpsUUEM^`c zC*o8qT4kSlXI7|~8R)fK{3XNX!Mr@noxaGg!j)O5Zwjk|h5Mv8|5}iD(IGuE47y-5 zjn%9<TEo5^Q9ICN{j^l(?NZX_b1hX(1N=B$Bp&;e(d}WJJhQXH7;Ro2;n_%3){B|U z`(X`w$8pmL@feABcn*zMH8Umb(KKgLC9?C1vx+5w`wsLTI9e-jas!9-ME~}AN(GMo z+ZS1GJ{jB3Kb<1uW2Wmv-DqANq{^P>mn2>Kw?qDyRJjgJN7MV3%D&U1QR?iXNlZOv z5-%V``8T;%`zuY>f0Hgr3-h*#<eA7Fm<d}0+e_xZTPknZx!gbb-s=?qWr+3;UZ%PF z5{^~<_5;mbx0f%NLjJOwR=q*J@-zy{w|A=bpP9r4ZmQKqf~3ZFk>c-er)^oB+`nj6 zy;i;|UprcW*QyjelMg=mj4Bxll3@cr#8ThSQL=kuU}03NJfbnA_U_Xn62}0zg@HHw z5$`>#XD%+4mlYI(C=e#}out@q^8BxFrRpq=lP7O0GkY_Ujnb{L4q3t~XV_Wg$59cU zH(?OKQ5Nheq+RlRH1aP7R0NgXNefr+jL>awpY%+ZCJW>CA=;X6*ue7wRu*0ek{`<K zy>7-2GNqm{Qh($X_9rlx6eNNG&d~z9!T;q<NRDlYN$Z?!Zmc)imUdw8QiEDBl&J1) z&V((=qW$fydM2XC9FnCU%Tf1Q{5vn__J4iMEupWCP$p9}Kj@00^-|0AVUI6Osy~lJ zfH6CWVFrC~AM#hLE4FJA$$QPvLiMmCPS!_r!Ttgq7>m7D>4*3#3=s$+EgN-PjBeWr zNStqh?0iaV08ZWQ@D-&iiw?zk=&SZa=v{Y;bBF9{>~BmT5h1^#GES=%Gw1Nqvd=8_ zN3wW{Y{uM|61|93?28-4x9<Z!Rnrt7PR~&{px?u>=8kAd`Zd!b5qlqLRHkgiO<y2J zRRx=~X;Lcy<r`&fn<Det<u`KD+!e-QbV{giy%!wlWqp<5>etLN8~GknyKX)No2T1? zf5u+NGK}zD4*5!>XTe^|^BgF_i}2n73r1qh!m3k>-KJP()QbPtW}%XKBV4^&pR1NF z=Bv8nv?TeU`yUGxNu|;~#^G5xn4O$VKzimNy1Q-*Sggf;kiQ&_XG){&^ZWHj_gBW3 zPKssSu_Hhh&{lT=VGV2!yGk(K{bt7wRz<N^ZD-8<+wF`ouL8!h-7)Js?#1x$c-wUW ze#Hz0fYD>3Q+zRyp0vK%FVB6|D5Lw-lBZlN{+iF?b1ZZw%ks9Yb7;oWkFV`86Knrj z3nIm8=G@7Ei<QKAW<7DLmb5$~#m+ZMIb6?tMYnPienBu4@EdjgjZy4#CF2(h6XK7E zKAvZ^V}zVGtX1xs#vlK0gfsJ*^W2?OVn0}r_530Jh>?r4aDB3}ERVZ6XN$Jq>Qiq# zL)m`mDh#PWs?CUD(ZvgAn&pufRNoT}dm-0}P5mA8jydou8F_;h8ujA~oRep9Bh6~3 zd4j^Ru03EOJ0E@Wc5bXdzRYH#2G#^b3I`GM$G=T4zPH(v1NJoydUZU(WQ-&w;A5F= zh9N5`QY`7kJerP#m)UZfKH4GY7^=to7U7xyf!%PascnI|o&|%u-X~#Tn$!B(@cz?^ zjo!P{3e~djl}xWzGgwJo5O!WYjJo(ZXP!q9x=^dm10kgFZd$_RI4n_hdp~j%ejJD` znUX9fzC76ITSgWrd8y+}*5cbaqT@-lgXcL<A$PSJy5zS=%?v}B6DRvz!XetkBGyqi zsG*lzHrLNTF(q{fR4mjzCmmhLai?uc&tavwa%mulb>lpI;<SxY%Q;~Ut(AcZH+Z;u z_oU1tOyQ&38t<hy5m(&o*Br9e@7Z-$Sro=x`UVPQGGW5l)&*0zDO;SNn4G>6NC(NA zX0noSmW#yDP!}PwF`)Np^yI`|4Dz-QRo#!RF>DNtA-=x3GJ9sL*}WOw;(TKlcW`dy zrK<KL7C4jOpN%8VX_lrZZ^nOTj1UvvI~&ySCZni3!nLedXxiQ$NBx0`iezQ^-i`>@ zT<%<k%dDtVN=CEPulwb3)70g0uIXW>q(5xHJq@k$6gx5689lBDS*zRYbi-a4;w1qh z4)O37CGGBM*zie1#L}UBI7ESZYClTF;KR&1O<tNW-(6&vh>7fx4o@dg4@4Y)i}Smq zMlnJ^{v$7M-&LMXZA_LY-|wOBH5Q3|BO+WuFFncX^^y0qp0%B!m#<XC#80_me2Th$ zo{=(Es~Kw&O4^IuaNQMqcVl^!-AtRZ$fiu7c`a`sN{jb#{m*)8Y@<(g*PP|fJg3ZT z6DM0H>O%ZwvY7(R$0bDU3!Fkgz}i>PEOp~zT7CJRw*R})tSB7FEBZpUE_TAZltTaf z1zNKmO(vGYn#ay6&h1M2({zD2{QonHu6{cc<X<awbK>`e0?qB9q`jNz@C=|ix*Bj6 zZri6!h+>#MM~=iZTJ=8|B`QaNR2^>-r~JgvAq40ZDIzx46AJfwi#T~aQ9ZIxSqR2C zU=)Y3z$8NWrXH;!J~T6~GBs?q!?QabinP;MCz*1#Uc1H10NJO1#}n)zckZ!ajh=v1 zX0FNve6St4DHD;(y+;K8=3@0Y58@|!LaxsS6c%=;EuzJGoO>?A;Yn<kUoAchiUkKq z%lolbef~ASyE~9CO9~kdW}7U}7?u;DevA9UP~|;=j6yRu|Dq3d18xK&av&RApPx{# zw$*A#fOUsqb=`f$;f?0MzGm25Yl*CNxceQ$%D~JP6B6*RX!fJHi(ZMS3^`{v-!aC? z>U*T$E(F%EixBz`D9_l#5H`Ay&`NW=f<WTy!Qyr~+hlajRo(Wd!!zSGzg#d`Pjwy# z`8>MHArX1|3paurP%vmD2K`18mz=hroT1z}dGpVkBJH_Q5qj^Mp&`FG*w$v0k~s<4 zT!k_n`0hRR>%j7><&&GFcA1`{QDB;V6RSH9u%IwFH@hJAL!bJ=hOxu@m)D*2a*>}r zT4Xrt)NDb{cyF%!^#(glBGXQkx~2m{##mDAX7`G~E-Yt)rAbcHET81Ff7&6}uJRYe zyw2i4I-hJbJRk>FZltALIG`dQGZ(S~_oNz`*68l-C_H)5*tnb!WCrKkY&JzGoubz8 zrFWsi-!fTnsk(<pExV|Q&D9{ztKZz^mrv3n{jq3#o;?JcKOsJKNV`FWdt-vrC~4}I zWRXHYzy7;KwebbDnF}?om*3r^UoWr^pZb93Ffy<;JUZcdsDQD~q&|hM@(vs9mZmhj zrULWbRx*O0<>uI_eoz&Y6GS~Z%OpF|l&~D-9JjR3Bwj*N$N7Un-@_Y_IBlh#-kyf- z*dbkfQEQnz+bPB^)O^T|tDL|?+#V~VP{QubW?bvkn?wYM%=s1shGzQp--v=k0uEUG zgknuZ4*Xh?SUPoDvHJB6hxeVfpsa(L8chp&K}GQx=T~d)b5HfxD)*mWq8*B?yV~ek z`mtTSx|9M`Gel&Ysh)x2a^-1`y1a}k<F0n-WT|Hn!F^NCDibS0B0Rek%a*EU`5n+w z1pu3Ux5%ao!zdtsqvLRjPul9@O@^OU{<jn7twa^RMl3;Mr_bOznD}m~ClLIRqV8W; zB&tY?!1h}G3@V<h#ToK|83d|cw{O&FTQfT-v-n?BXg+3zDz)q^7LxIZ2We$W<@Tvu zsn4zntbSJCoP+rhRr7(#OxvCU%fQ#=a5dEAYZVQU%@epE-WbX3677tyaJ)V28)y9Y zIcfP@Ypvyu6xDa;ILX=$@3s)N@D)9rG%xqD-8?TcM`JsZ!kecxQbBcF*Ho>HG28;Z z$+Z0OwV-OJPno}Mmw!k1?JSI&KI%qL&5ZNS0^aiLeL35Fl_6>!519FD9W=$z;jtTZ z%g>%o=}P(_D&&YJx!a@3V5pqoRirXYx!I%b_lChM)Q7anO?31#C?1i+)Sv7J*izG= ztYoSq9C*UTpqf-z<KqWB>rdrn-APf8g|~W8#q57JBJF@SJK;oz5EgnCRy9;#@kN^h z(W2$dp4Z1C`~h=9u3N1gsSoHBAS=}md;}M|GJXmWF4<f=z1}NT4h)w+KWr+w>{F{I z4KWk$iYUsScC|>n)+<yPuI*`wFEd6|ezV#k-RKJE@;&fC(6dAnCKBthWoyFV_XNF5 zA)#?EZ1zlem&WfiMj?`ncP&Aq;_&)?cg8ol3l{h#*y_IAMv-v2y2-oeOmupie9dM8 z7VUIT^SuSw`z~B@3B5m3pqe#oW{c6vrf=F)D<-hxfCz}~&qk(|z2u7y4B{n&1_R>J zURl=$k|o8$NRhOg*7LQ<w7TlvMdmt!2q`1EQy!_L&c0C!SJf(+*RI}gP;U)tmHi_C zr#N?Q*nPYnQVS?12uQ729$!Iueoy`Bs9&}KTCrn>Uit(=z)#Bz4rxCeDe!l=Us+98 z-7UOTmcQi`ndwT-NGiu+@Dz{(_tCDJcZ%C7mc0Otvt=Y{z36o>TKt~l=)J>Y9q#3; zBZcklVaNo3xT08Xde+mc96kkllA(HYvgo!gU71h_g)+a^66Kd$$C@m&RG@~abewuE z*7AE=IXaXoetZ9vW>VO|pN1xj4`Hx2!dT5fDZS4ZZ4J9-tj8eUK}mNF#*t`xw0+ad z+2d0!G%PlWjNjqQSK))0uX%EPs1Zs%6-2BJ=70?&IU`i)3m;j4^WUQ{I=WmB#OBhb z=c8q^Qr33_%-V(OdX&d$dra|Pv6{e@fu7-mV)YA%$@cz&Pfl<~M;lm?&1Pk)`;q*H z==lY!L5Zu>T8hnQ14%?4rT(<0HhxnrjMydr+rh*Q$ToePmLd6+1$3e{E;4E_K%c+S zEc?z5SJxqOv>D?(L}$DcnOl<cUOcKs5{$7X8uot>9`J))Xwh~KUbC(I9*T<kKIa3X z2b`?FUx%wV=>wkS)}DV+nFpLVVH8iW7p^j1@0SC4<+9>8J?lY1tfwJ5>%vWOrcq=o zj0D*yg0ntpl;yhx_iZA-AC>0<B7;1;z^HtxZ#19iS-rs+Td_#P`sK2kZfh7nv%)md zbB+0H2r297RRN8Sx`T}-Y?9S#`o;x*+<|)C)`FprO~*jF#CrL|)h{-Hdk$Hb9lzZ$ z+xp>PqwGicY}a!fpYWTGl7BYK+sWp_#YY__rx!u3>gq9=`}UD$c3vj+8>U|5mkf%T z7y^u48G`)4GYFBTk;HK(S1pDRlr5G<xFUJtk93l_6*Uj+d9PBnJJm*B9XxY?6* znE=b-Z5-bIO>)bZjk41gzGOm3H~Q2s7@osE9IRyYKw@}NaXK$J3Oa?OYC#lMvfAP( zpvbwQtK0BT>qy<rjS~|2J;dn2L$5=Iv(+y@e9hr~p6+f4yBcVa&JoBkPR~LBY4m7~ zACT63YA0}8brpCB@4cCOVd2|3A`^;Z%?1KKq84m!5e)A{5>$^#Un3?@rMZ5}E<SpQ zZeVE`G<qMrihQB}yrdH-tJT=z0$O<QYABcmRG%QcnNL=!>*vR6`=3IQev13@)&?Z^ zEB_uDP*c|Q#_(WrLr%mn0#2+(RWzq59nTJMLr*2gFHcgbbGHL2eQFX<GTT-zSdL(j zIh9Uj0hv0sjUJ%wb}%jAhpUf|X0?yUrU+`p-8ouK2gS-_xxl`Tr4R6o8lnL>nY}(s z7L)1WCc9mzi@P{2v%(I+DS&p_j8Uw7G>O|vroTc-AD>bxe`lt?r%B{>S=7dS6G;Kx zkrrZmKu|Hln=Cqhnxa-s=>ufDy}+7(J1;9_pE5m`ERxJymN6W+j4n5xf)(1+GId&k zZIJr?3lW~Jf04MOcaFGed1jOnUprE_2Ro;7;xV)yK>r!%I?eQvTiocHa-p5JpJH(- z4xE>#wt{vmXV_&-3nX)T^2`@UDG5XN@<dKtLE=!3DC(=Dvu#k7U$o8j91az$7H4>< zQYW3Ff}RLw>HX)$_}%%qt=T{$#&Yl6HBx|YV<lrYad<BltL0xp3Vt+oO|1y5gIM|? zuwN|`Yc87Rr6*ct^|r>!1E-8b9ZqqNe~Shp?dUCtPs6&(EJH<)(V<vyl48aI<xH=Q z|230ql<0d_P8ObRh_UxJ#>UzZSux8+vR*Wv=yH%W@y~Get8;+?#dsLh>ct#&|9S%8 z2RF2LeQq~5Qy+iT!^XY_3)P*yATHV?|3c09Cu-1Rq*WlT1D#9@iB7LHCCOfn!d-8a zR;KbDzPMAxA*O!Aw6*FAd))jx|4q9wWC|_?0*`&Yd1~XitsNo3OY5JF6U!!pILuq+ zmnBFE7CS{5?@JH>{oYLK)xK@zfZ74jS-zCV^-srerY&9uoZdqSZizG>c&JCe0(~~K zhB}$CQXlr%Ev*N*Vp_i<As#DMH+5LxchB8ch@kt#ZK4Kl7!RFmh_*ke+h6uI%k3jg zR?M%{&p_{mm+1C`>DgNO?FB{R%b^^tt)M<~-y>#jV;UoeiG6sfeQ3f%DCAZkD{K6V z_=BI#VK3`yzno2Q!!Ew`CcfOaxT=5W=X6Z@leNph(r2z8ak$IogF~$mFJ1y}dW<NS znR`%%9_Kd=22af#e*sAdh}ko=8-eAPOQ~hwHp`y|(_U9=Qi7`jO&zmDcosKN*7~lJ zrv?{-f^Z3sDCy%A^is0lC=~;{Naosmpn1oQ_hDzTi&d);9r3T3;0%;odv&@dTOPot z*mA_7B>&s}7@)ZU&*SKwouXC(1CG}Y2mDl)OAgQDovve0Vs2nds>8GAjoo50eQ7Em zCmyoVqTmfOu?__o;DtE35gGmWTHWW|Py9Qb>V4WFlW!J@&^vxlD&xwlUg-7$q6gjy zw2@Wq$H1PfGDf8BJ-eo({Rybgg3LgGt^%xcexYXJalQkTs08(Ll<ZAcmYd>tjSP=j zP;$dKg3l&<(}C_rKk^(hj5yC8;Iy0_aRH2w*^A(3^}u^GoZ`LGds<Cpa7gg<rrqjs z+ZMZky*ypM&)`kP9+Oz7&)^B~9or&~(PN&1=ubFt7IYD9eb#LlUe6+}dV2ysnltL% zWQg7s>`eGYHw+3S30h#)e_@lnwJO^Fxpp`V1mGLiM_9&20lY=|)T3}_0nxi<D6MlJ zjMDi?8yYx4<L50bNY$?Kch(XV$(6X456xVZv-vmOin?PJfhZ<%P7{}GM5Q4)|D=Rq zKfj!tV?OqRTDJ{E;LS&Hww286M?K%(J;T+AceBNZKMo)0x~=tOibtPISXygk_6Rn{ zLOcw>t6)sqr_3Y(E1v?I7eEJ9m&y7G=Q9wxKcmGm2^SZ8)8oTq=Dq9i<mYJ(h>quV zC;nZx?iQ;xzdXiTl)RIkjGN-=`I;}xE;vS`T0ITAW$!hoR)+U7W0o?nK2ddjvfeoA zr5Y?`&%EVK$obRZetgzyN;_VIUM$phJLCVaiPtl4!@u5bK$kR^eVh*iq{Clv@+}&! z+A8(Sktx`I=~5*xZ+?zbm@gZ3`=%3W(Jbx<F)c;?;O%Vf=+0It*EUOcGcCH(glGJ2 z8@{)wrPQo%OXXAG=Dm`jPzN%}fhAjZvoD3h;_hP-Rpa==Hp0+%j)IRaeuMaK;H;TB zBH@ZI+5^Di0F?tAe6^b{K@7_)%b<_hDAmnri|)rY%m4Ca?u8gY`Zp>^VL>QExcPpR zCf_#TTOR5Z1*i|g`ObBC#;nYT3>6$b4>hkFodVxRmV)|E{P=JL5K+l>CXnZymJCY& zCnhm_6eGbz!UX_U5=ZD(uG4_dvA17>!w39zNZf3t_t-fw3F8uP?lTBH?axv++kh)v zT17E{@PHkw>f-R$_k1*{ZH1%6EU-V3yjHpW<75&3CCxviYM<*|T3d6}`qJ5mgOqs> zG-KpNgEh)>Q>^Gs)8i=^<_N(69IMrj&oiX)3!>a3_0-U7*-7h}vKQ<YO%JrL3&uxO zhWpnWhmL^}pZ=QP6U*d{J>zg;bn2YswDs9k79`iP4QgS@st1}mP>w-jHnT0Yt;Q(l z8_a%;NYUw;ZGqj-7h7&G(dubq`H$v~z9r7AbI9ijMfi*p`tsi#fd%0;A&s&uGpr?P z)33VWizkR7V=Q^u*DBvJ>H-?DjP(XzIBhGT1`&Pip9D5kMBTcC;R=-RFuAxDHsb)E zUjhUF_-o4Y*BF&pf4LfI$JpUcYf*;02|FAX9y4*+ZR3bU7O6GMtH@U-s72yzj`{0= zCcX0SY9K1q%#LOG^YQaB0rl?Wfhn!hRfazYvF-_Lo7wS?-H#NgTml=+A#vCo9Ww*R zs4>)B@Ro%!j7qDqc8I3)EUVWmk{_{^3c_O<qSgm;1*+7V2w?e)N8+LCUJj38sh+9Q z5U_J2BzT!at`gH(2L3bc|1;?ZZ*SrecJmrp$@_9WUTeMdz%EjlZO8E}ob-sCuJVb1 zXL*DiTKok*UbckxcX*d0<5>WK1u+Tq(?U3fN2{4_O4<Zof>7CT_n+``Nx$4M?l+O; z7Cl+FoJ4rAer&CHDMuttJKyZ72o%bN$s)4?!lP8~U35;d#cDpS%<uL!dd3H~0(jWR zB!j4OT@Eh7yTL@<*6$Q7kGHfZVrqCh#r#x2ZDsvmR;7O0EW3<S8!-zU+k;qOP(6G4 za7z7xl$)9LB_z?Qu+$=rN#);dHLot#a#L*nk<gz@umz*2z{`k#=u6b};so{tf^eZ_ zOq;sr2cmFY$X8KNJ)Mr1IP)kb+B)5~|7-)BuZIC#Jah%31hbbkVt)TuxGH;<dh!68 zqZXZ45qH{#UGsal-_|m3-O97IO=%R%pAY!iWew1I6?}<3QkeOJpLw=Wt^A=!oIJ3F z+5<+>Tgk`-`M3<RNgg2J6pA3I-I({$SowWigaswVYE>uRTX^2kYkoQGAxLks`6|mt z;icu*h)y@~n7V$HR@$ZPv*eicJ1Ol|Yrb*+T^!Vr9aA3^*i6@gT%|yvP;mBV<77V? zog)u4YeO{5!%JrW&i`h}GkBW11$IDa4RmcU*qtKgvHp3Mt<UGm??Be`|BA{nl<!|y zAiy)GRqB>03{MAOh8R6Bwd@-W-QJ&<=qT#PBZNA^YraV<mC$&@;KgZ`AJ`x#Jb9MM zPu_|jh>2rC;ErqcY^;VY0>yP&w^QYK!4B(OzvEbI?rV0D^9_jY@V286#rL9L`jd&| zS**j%$aN>>Cn>6j{46%ki8E;JRKQ;251P2(FIY`8x*1g?)nLQFk*}XM4!etvl9dBr zmbw<Ds6V}`$Clh<tBMx+VvgbR@XDshj#>S$mR637G@qzPTH+aimc)$NEcUlJ*OXlc zbPFqCD@B+|EJrN?%JvoQN|{Sn{{p@ELF@JOZ)|@ornyLqHVIEUfF?c1?03<4I~YHa z2ldU6-*NK8@~oV)x+Mj+?RfO=0&d2Md1Gz{mi5*41HC%#v~W*a|8bE~ZP`Z-8K3Wq zws;fOy*F_O(UtUOT^ORuzmu#nF<d=XlvYn%Fn`spwYpk9K7hq}I{GNrCgfIu9kcer znC0}w(Zio4>vfm^(N?M>(NxldX3AkTI*>tixI=p~LQR-wL}k#@27k3XR+DB_uI-fc zAuxT;6C`xYa+5BgxF;VfRLcX}&2>m}{+GDQlxDf{e^xMA&O=JZ_MwEOAmqe{?Qz;H zT{Hc1#2u$tx@!sHm+)!xc9zPg0sQx0e^n<dUM#Kc9VyaFoHm=X+$lPsq&A64%60vZ z-I*q1-)ogc6+6{}jx={0rgzj+J5jK8NQ_yy__)1hj=Z5HSCr#jS~p6SwO5phl|7Z2 zVbh$#!Rl%zW@`t+Esc7rox3a@DXw+AJ<a=r-xJ3$OSwD|=b5=@wZkikSRh6v^(7!) zCh(drPO*Q7ZvGVc!g;m)+H$<Yj=)kcTFZaXwv_tag7RhtX?vQ)5%YrZM!6BBB4-V$ zWlDr=T>rtw@_3$bU2s^gtfq#Kyr0)O<D$Xxk+1!bn(hU|=K9)4b0tgivg@Wzb51=P zV51i1b^hetMFm5ntD>zW8}AmgpTs)AEIJ1tjc%aVso<hv2f8ix7lJ4Na&Fq%70meL zxKmUn%oZUt#}wgs&h?B3ShSA=^Q@2jZ-xgx^KY#wintqqg=T)Q*nyC~<W}p?0_rP< zYBrJBMu3C>1SX_vlEHj}!orP1c5w-0|A|QUyJ<DAqd~&>R`WO#pnjl%wMjoUdNN!K zD@p1A_?Jc)i}6}RJyrHlvbrDZzx81?PQkYWJ93tQ;Dxu!0X$z|oqfgXVT||_*nbsB z7fL$RpCn?fM*%V*FVYV7eFXBMx*czsI=gG0;gg5Nffd-6RmE8D&MZ}?@CEca@~F&5 zLLw#VR$K?2E!#Cu8)wq5NxYOy$16#w=uV&H6cZS0HwUP%Mpt&GqvR!Ch7E1fVeuT^ z5<vDUw9Q2#Ctooq(9b{TeuOCa1~hu!iWILsRT!K(in-366G(Gk=-=@I6AR#AIM;Na zLwe^<x|;Gl3)X;!dQIYwpRf&9GNjSfYc!b@KDC_m@1*k<J?pXCTCXSjVqwEiRKmxY zQ7g;~=@?Tr*Pj=S&w=rbyTTum4?(=XP^}xL)}7@+M?~d_?x(wIz6_`JtFRW!i`|Zf ziq$Uup144GnQgn~9?k!Cp-nl`ooTn{0>U*f_~m~R)k^x>P?~^M7nRJ19r&<*&%mTm z5xawuR#p!!-5qU3uQwaz_RH`x8cqL}Ihv$aj`I<5z#n=vQp{phK_B@qrzoP-oCAw( z#N2j=YbQJ~%Dv_HbUm*YbvHZYAbxRvJL1Tc^l+M`#4~>tJ~CJioS4`w>l~%>cqazs zT084DCHFul-B!jNw1I(fR<Y_Uig0*;M~#0U^|8V~$A8l=jk@*l-W4UVVCg~1QIN^9 z2<b0l*11I+V^d({FaXbmOURzlBD#~Rz173QBA@C(^Or@wvE`ZJAZSl+0vlMHG8SiW zoIIZ)H$4Ei&1TDvwx99t>QHC=cOzI@+CEbKCRcqA!erM-XJB9FF!=kmx`h~pyVDNH zyWIA@jygOg(CZcEQ1N0=&s*ZCW2X+VcQa43e3Pel<g8|o47?B)`xQoiY<QQpA#{3< z!BdazZHyZ^TwS*X4SOA1@VvkL%Vb+^XR0sg`jgWJo4M}f<^p@Ed@}4n><*>}r9JS< zg^PxoIULsshDgCa`JsQj@yJhU{e!!5=Ot1A&<^DJnkzs1*<Y|}P^;|6bX5ULEf;Ct zWhC#Qkz`<>$Uu4-WbetRl11h7wU6L>!!2=|iGn3d<F-{O^IH9$jQat-A)13Jx;^%W zv3v&%#+i|Et|o`vp<DTj_+O{S0F(6hoiauT6g>GH#Dn9I>Nchw8#uiG-!chxzY-*e zUCS1UnMG;qVotOl)_De3gz=u%Xdu#A^OFnZV)AejwiwtH8t17_X=F7Vc&9Fo6p6X# zj8C!E)U*7yCc0cvELE+nj#Vp?c8fGrSBHv&vy#;#EI-P8_=8qMdxFy9rwU{LZ=7JZ zKJ~j7P)lfDFG?d`##Me9O6|qIUHwcR-j}CCn$dW|rt6*6kQl*yy83_~b{vl7BVV&8 zncAs5$u;!CD0dYgJ=-!+KIWD)))tInm&M8m`T2V>X)oU}s*^xMCpyK4yuw3XrMZE@ z5LN2N%^lJ;xh}%9C6jBZK7wqIaP>l;78HldEQXTsQ)|TEyCw_H?Z!6re-2NIy6$y8 z`NYA+YVFm1xZ)`F@68Go!&Y#6_AUum8`rGD`$2_IY?T#VOkyCV=F>~CrVUW=VOrf9 zCbd#uvn)TKqW%!Mm9C(E3=n-Az^TNPu_jRnQenwV;^21fuK7|iSf58{F-e(lmj0}q z7W+V{ltBa#wAn3s_S#dZZsc<mjf>&(kC5unLwf2bV1Ww!Y^kScm8_dOUXz>8t8SVu z7#If1nZ1qWkT2D7G&a5&wbmmPM%?IU0f%#0!7`n^xGnuPm)63n0buUuA*9^{I?*U) zpQa)FV;3VSPbTPeF%Z)vlIHGfuHCJE_tGhG@*n`PrF03ih~9DWKBKHI)3JTJ99*#L z4b|NdV`BH;J1WjaM5DoS!x)|G3!ZfniF{bNv7A@Oe(Hq!Rdhy1k?^)mT_wN#)D#cq zI%=?D2CI2JR`b4E2J79ySRJQ#?hX;K>~yvW7a$suBDWnWtOdBF>aGXS?i`bNHu(2P zCe6As+Zwepb5WjnD_?84mTf&g4HSOl6p-97GLvMu>Sk=mMFW3W6(P%qI&E=*^+`W` zwNJ6Uu7{}Q<l>Z1pJ%dGFnYUjGRjx0)XOWeE+AR8DHdLZhGT{5tw1`-Ul~fqFk=H% zKN$%qEc202;U)X)9xM%#y7?w1hUUtQr;4L3#t2XHZDJC_I5r73<5PWG<^K|t6SXGI zeWKa53<;+<EV<K+^lOHmSCqx|P2L*2K;>x}v&!#-WnW-3)_tt)-^WiX8{^p7RHd?P z%~kH4nx9U)d`_9SNRuH<H%{`ueWchPb`-3OOsna3agE5>(;`kYxdizOZkeXOGY_MI z$$F9ZH);Xn1Q+c}SCa=#x_1zb4HCas5u)`%fK7kYkG6HU2tA7q?0mB;<eojPsz<43 z3zR8QbXAkU2HK$-G+DoH&||yU6zlAcsQViOC=S2n`a-QSI>N(d)1-Gs=$)^C6(+&u z{YGFFuVq!E9NP0R!(Y$-4Qk_f+M*Yyo>eTo-EQDEK3;Gzj^&6&Euu2oWDBlRzaHao zr}Jozn*AOc(=&E4<pg8lx094~lnwh>DQES|bry&0HZ)PqCyYCNxZk@MhHLr%C+XY+ zqN>;Kuc&Av;-%S2il%7_8#SlA(8Z2`q7u>o^PN!`Oh!8if-;(yj7n5Mw`h4m$y<Pe z!`{vy1~_UOp<6RgrlCn;sYBLLv!tWNuT$^)`%LeDp7%9m_U!NXd7ib_v({i}TW16a z?3GAu2M8)&EoYk58>d4>FH~q+H|Py!%Gq0N9@%#j8SnCKyx-pw1XcRGZdqH1=n7k< z`jr%vz4FCOHgw9-J}Ai){Xz1&DSBdD1d_;vnUG*|vkOx<r1?|Mge&{Vkg+Yfo+bJX zz@Y1m2(-(@nm&)}qsna(Vjx=oDnhT^q!I_mN@=rGeQpjLAG+SJbiI=xyDWZCh(({6 z8pJoO*4C|yR6|zL=MK9*mm|x?33vO`w>4sawp|1@s~dXMh#_%4t+|aEnqnHzEXv}$ z37`rm!3PCKObHVS9ME=OM1nr>zP6%Q-OiGv(&<?uk*{_4jp&Qsq!Tkt7F>JP%r`?t zeWG#%HhB83O)|B~NOye?HtH_tqaQn4)}O}6tJ)e}(`WCRW1D>Cx}ka-%~2_@%-(h_ zE<yh2)2>h<XXbH2_rB*BQMdlRs#*8!LR^kQ#CaN6{&bVJh3mgA6?V!v4^7(GPEsPj z`>V)DQ8#jE<;vLy0L;dcR>v;Q0{l0IpOTWuneB}f&rL+edsLzBL}siGG>)2kzOsuY zs+Fl2WPV*nzVJH?^GDUcYtj6=Zb<{L?HH+6Jd2A<Tiln&eQPJr8!dla>=fTW>aY5G ziY_qqSw{wfmi1<k_-B}XKk-&P%-V606*(_PmM!aoR4Cjs_$kOE=7?dT-DV#E8(2<Y z&m$2^)w7XhNzbwU`8{+wx761$%2B9TOS6B?)~8)&X*ZZ|%k{z$y+@O=x)U#6NHDV> zRwLuX?L87mUkeg*cPc)$6HX0xA$V?xf&-X2?KZfOh0uE2ilInJ+pOA-Ss<<4+;}l{ zyIeLDsq8Hv0^Y4YXn^qPTL_)bo#oiR+Xv}sKjDn4BU~|u)!$jlPM*#c-PV`g(FKHK zLH=!YMxWq6@W>xU11Nc*V-hzEYF3Aj1+?n5k9z80-!k>K!vp`cOs>61g}~<w?lHTd zSzUKmsXfo8%XH=huFdZr>h?*I>Ka6!6}VkfAG@Itp1mayqtx(9&`PUU-Dfa3)HDKV z2uGQOO!k{q4wY{6YeYP29By=64SATLf8gH>W}EToK&QAcohpfa7R$*Gai}`Qfcq-1 zS#XRr`w8?AUzU*;nvYK4{s=tw{9AR!fcE(`=hCAbR<2d&Kqlwt+7NXFgGNIWy~`CU zz<BwXU(^h!S^KD6417Eu^W1iA-K{2LJ=k4!B7#4M=lekU=M~yg@Evu1+6DQed!Tl~ za{hY`)yVUi@!c*4ynk$xo5st9uj$q$Y~A_%w^hb5hZ<NYB`xuD@V6(hHd83gA2FJ1 zYb?^u;P53rEmoR2HP=x4lgTm?UCF_~lCmW3;oJrJ5iDjM-gZ6UVE2<@)^6d-L3vEY z;rXWM(DCgR<`06*A2RdVmrFE0O;R#9R4hZxD$YYqW)Me~7X!2~>e!Ckc_~q+3~CJv zaLUOLjZHy?tEEqYR}G&LD1UPfM*qfuzXLAMHD~8rGPod3q6M6j+bpz3+?<5LcgH4a z7KiPrO@4KA+zqdm@Me(tPypk7H@INrG@ovyp{b6hKa(QW4-E!PuxtEMStweOA1t3p zHh8l01G}W0Y!~KVngVLcwM~^~588zu1tCbT`Hm9_1E8B3Twe|jpA|PJy5VwUl49%Z zC@8`>YyLv~*9Z3?Kn$9Tj?|vy9c79>>~J5uYAjn<+1$&u&!CcNAiw(m(nVtlbBF)^ zdvC_?y4coH=_l!_6{uw!)tVl^H@Nl@MB0Cml8V@w6~#IoP=|mcr<mRBZ%sX6#2VxI zBh7|ej8Rk<q7S4Ul2Nxjep9ziMFjmLCVUw@C~JqM4f*dX)?^Cl$N--@oI*Wei&tI0 zh+07x-H>do`V77>#*9XZf>jG`5pfJ=Cras?mkc0CWl9Q%p)(hWw4QU7qpdv@S5BGU z<LP#U$ZJ5iOWI<#EmF#h7bvxJ>HB+E%F48;yNb51P5jvbZGQ}B)1Q&^HMS=7!j%YQ z{hGt&-|*XF{5F@YjUK@=TQ_O~y-0^3KZzgw13gWLU-)QMx;5^KZXQ`j1yrK+)Dp&v zSU<nX>$(um<gqr<Z&;C-R;63OUD)c&>9~@e8I*oHd%)J=fCQBfbX)(?@<+X5<$_m- zksBmuGwp(iL1ETwcG0JbJuNl%O`m#Zq*#0atHGMp6WE{#rX}7KNfQoGi<V%q+bI^k zlqF8xr1Y?WX#KPrr-{JJ4A5Qa2+&Q^Wqcwres;UzP|GKQN5pi*cCP>KBzGKd+mw$m zof|<9_EsB~h`{?phLZQSRmuQe8o|_l+2<PJpPKPIW5=*;J$*KH4xvHCe{_3GkqDkj zi}O*ie7I0r`UqZz<SAC2#+ov_E&5?(#gXh2Z6X-O*HeU(Z-&c{KjDnNglqQZe5-{J zC|2j37=^gg<4Tz=S$wX%S1(0(Wk7rH*N`&C^j%>1>lxFzDK|3&9lA)<%=}!QiZ=$* zkQ9e|%>70!;_Qz~wLkM}#mk}M4P%J9Cqq$JcVicJ8{_HLP5<X3dpvhyj#dCeGQg+Z z=EvYRl2#z!*+P(AquUcMx*8`?hOfgxRXmGhDwFA~Rd5BIu6II{u&xT5sV>M9@5TXQ zWt@aCnIkNW?6J~pJiB(Bl*^Frt@cXh;XoYFG)y?16t%~Z2KO^JZ4tjWsAcd8eVknP zUof)2n{1aq-W*a<$Hcmnl#z=!MJ7GW$9==Ct^Rl1o^%lWxiV4;O89TOc*uOP)o!jh zv8<uk>0f2Bby5Z(l{_Yc2_3BrpWok?9~YGL&6|$=pDyd8W6_6kX;l=2&tzI0r`z@= zv$8vadLthqUFOMTW4V-pC(a7qP>On9r9UuyDH91aOjq*U*ZMR=af5nkYdm4iSCPN- zNV>jIV~NOSm4ji^4bD}HfzR`fZNtcvRxh1J0o)X8in|^kB&uIFj(U}m>7}>ZHG0Ud z_2D=@xD*1GD#No;A^NuIqmyX(XXWA0G-BvU`TdcpjzS|_{GFLMi^0=e!+3>PwAYBJ zLGp=JYz9Z;%Og@yu2S%3Fn1!k{xDg}83)bLqfOjRfUWdt%R6DD&%HTiN`jpKM8Q5O z=k0cs4(O+NZ#_u}y%#7x)gHzHSk)QBkvS7kJJDKSCUJ~EhHPvT|H`PB%ONHraB^Mm zX;#B0AxBFb+m)q}Bf8&S*1k_#xF1Bhc%)PKu5bTQ%8EHl*Ghg2sFOzbIup%O8XpdO zM%pr02VIn>-7#5mUT}(~+mcGO+013GgTeB;Xgc5Vky<9YC9crjEc53(g&4sPJK^L_ zps!3dRzIZmUJO%`Xb6-q4dO&YO4Ty@QVmmjG((UyQtw0?#!KwXuJE}s`thh((`#0X zik^3<9W|v6Zf>xz*nhoF;b?q5iIp&9f$6|<n5Y##ilbNm-EwVFx8ylMYD%r&2JsTt zrQI2~p~4vxbF)RtEXIcAkd}!95FUKpUK_@a=8PQmFyDJYjAFjWh?e+}yXZyC_NHDB zC_9H|-$y+47a_YATs5dTQP=#%)=u1>HcN_vA_Jwqmy4%Qg-P^ItpD2t@xx_f2mGCN zd8%q+j`~S`v$npi(M`y0TwSEp=g}-Ne*ou$-GXo>b$~CQA-*>0_ziJ~Hu>5FkKDAk zS$rA+J~-d2-e{E;&5_5*>)*Ps9!ONGBzl{VCS)buSgv=g&_|OCI*0Zd=j)?4ME;RR zRRjABsW`Ez^GF|^4d`PLL5g2_)$$?S9PmNs0;S{_rj&6l0p*xQ!g0Crp3)SRSk0?d zq!@Uxq`P7Lpv7Rh%yhr1%a|d@9G-Ng>N1t7>u7I<{Yl=gt-D1jyIV+eIEW4E)ASOB zo8%S~UWo&1Vxp>)@?Hc;J1gaNHYVL$$%<Oe56f>cj=#ss_8Qo)n=yC}P(SvJ8Ip6| zcr<U|81)l4(cbZfLx;H5PR{JL|3?&>K8;qd1rvIpmZ<G)WDMr&IQ*zm_8G-+AJdeR z%O|vqIx?ueY`MPyV-c*3FwDW|+=myGRP+mRv4?Qgc%(o5c347KBD3H+1V!st5XpD3 zncV8v_3jff8&R1*d@qPYe3f~qS>C`5T69H6y~kw5@}yv!PZgBe^PsIA5|fp(J$E=h zb*y4K#qI*R@>@*XP1N^CfA?vbfpX~?PVgiq>oa4yuKaF4tFS;22hk9gQ-}g@*UP0R z;BOC8_LpMqQ(h>|Zq2R{>**9}K0XK)E4VVKzccT8^%OQ=s%M_f6~?NBX6<FkY2AKp zx0o4CA3d~_^h$$6n?CgKG1}FEZhLA0S-EQm_*D1ci6-lIuX_IxykR>0M(h|LD`aCU z@BoOEi6D}ZU_-A?0t;bK_X{8vG0#n2D(Mk$`0%g2+r&fCBL30SE<S75UOgk1rl3eh zfcC>05VFV5N=s&Nk&Z`A;u^kkV2vpB(d@n(Bn&-F0vcmcpXYqVsH+0JYSD3`#W;%3 zz)#FwM3Y(y;?~@wCVCH;I)~R)(kA9#bhuA`JEmgV!23hYdk$3uS!l(=uLksgCrd7$ zz02WVNZ@P#9``F$Xq&Bbq7i*rhVH!ilGB|t#J=~564CLQUy_x&3$!A`y%K&6m_x!* zd|{|Zeb)i67G$iP!%Eo~gXxRe=ON6hzLLxnXwa{peR7svWJe&XrOQ|I{5i)o3Db!b zB@yc%edP^}+Pm?FGQ0c{v^FJsi4QAfmUE9{*k4}A_n(|=ST`B#sz!oTY+={=Ujx#u z$BGQ~=#tJG(iop7<qSE7G6<e-hDofVFuPzrU(HH7zOcP4u^Sm1Az~W6Paez0DGs$* zPxVmk+Ev$<lCpQ6jt$Rt+WJ*?4u33|z^~3!a~6B7@z!0Vkg#MWT?q^mF-$AdD&>MF zh~Mjgqi~jJ<ZW5+37a{w4aO}*Ta8WNHUd<b^|-XlxtHUT+08#?9R2;9umOv8nXmO_ zkWBT((ZIZZ@2(rx4Mj3Lf{bCw0iM7Tb=%%ZwdZzlUO*LGdg_Pj*5}xfG!Xwe3gcvG z2(}cCUxdbw1JyWJDIeJ`SK`EbYP(!|3G2Fp^Ket#upakyAUpiQER!S>V28`i48&_! zsHO43@}vomXJ<@q2XtF@v0{Uib;chyW37r&+>lxI`#=I0htQvn;oQumg*qCksl1}^ zn3Sq%S1_XK3I!bCv{FwjT}c<2y$8P!K>5r6M+I(@uRf!=pLTdg0f81$M5&X5IjmnV z!;6!h$(xG0at>`|qz@$$$LZ2VfTW>rlQ8c^6VfwFIFp=W{=P`R;dCYk{JF7hx)>NJ z@4M~u>xnWZImLH-0_BUO+h6vnwVbNO3Rp&O?hQ_xxXmZ*fSr1aj}4Z@uomRbtFB9F z=!wLo1z-d);q_|(!-mr3-nJ)QO8AjQrvmxI_t_$Evqi9=yB&Pa6{5Bd<_LXL4lXzz zqXC!GFZvgK$LT55`3?P%rcIAjhgiZqa>4s_#Kz$)pI4nFgLkx7Eg9_4>}<WKwTVrS z3`n<3sGRQUvZ#P$mWsn&OrkW|;Qb}f@M=bW#7j`VKjsBLl|RaQJhWT#tKaQ2RKHS) zdu4-b@s9?}`Ot1LA6o9^qdoAlQQ-L}|Ju@9dG@OKaOaGg=*L&0Z~+VK<`g%$e7U%7 zrzG)8u1JVcT;aoh!F}%Y4!lTRrCEa~!m3<pYg*be3|&PQaI&>OtV|lL+})dsr!!3q z>y9Z=dP*W(`;453^{z&BuH+AI+I2&m+>@i0zRO-pW%%q}zWnHLqL7%b>sF>?kdsuu zuRd({1l@MS>Q@#Xyxd|unqZ6w$cfn0u9kzv3?U#4>$mw%>(|T+S$rce+eOXncD5|$ zDz%Lz>i3aS?<hk5q-1tuunn5hsMfY*b&HX%8`PCcL!>#OE7QfCoF{SjDqM;=3cr17 z_L;B@ct{P6P|w^XFUO{o&UkmODY}Us!LGg>Z$8+?6!-9YmU&%oGNvx2z*afM_1B~< z|4z!bQ1i7_K}q$`Bp?R8$W+o2%37&>5O>QTylUtgyC}!7yla3;Mc>R#6?)m>>dQYj zx>Z{Kco0tL|90A5K#{PnEoOCZ#oovp`IWq8v&^fTA1HssCm*;mSZ-#*r;{7bGVzw@ zd~3~YDIT+NWU!8VL4>$~LudEGaFyn_mdoV{tW&x%Y7(00UmQbCa>uJST!TjFzf8Bj z7c3VzVeukh92)>{1|y1$7lyNdrRf~ftymK1seL+fx=OQ5;<3=(Vmj|&?@xQP#dK0G zWYao!)l&bgt|_aS#}Mvn%k@+O9xnWa0;mJ<7o4%xu(w&giT7_AhRMS?p%_l(Jw8Nn zt)pvN_n?7R@WCgn^7~wCL)8Bal8-(?8yiRQ^<YZQ-MBPTEulTVf{7gMXQRJ&h89%s zF!ovkO4M7Nl5mr_2S8lx!7mozmQQvF8^#UN)H8?z$LMzBQr%XR)Sr8|k}Sc!a^)9F z?c;u6(Y+py@{Py`y4fABTOX?t<te*G7GHcn?#oU8^?5v(!D9P6-0163nYwUzS%<Lp zEVS-^>~RaX>>~*6eZ)jGG3JTO05{5JP`$tOChe!ixd6T}Iiw<M7q!cm|D0nxt=e|J z7`!}g#{EXg?ELGZ`0$JwIYZ{HF_@dnPR<UI;`iKFzsfRv`AfdIa4Mj->yUiQH-p-x z%-E<#*ZtK<gI0Of;^~mn70>xR*Z<D^NbYPiRyz{HGC;<g>0rNVb5$pA5s4?8)%#w} z>vJb>!rq8$-3gDz{qg-O?)yEP<m21rgU5?Rx{)T6QFKdS7yALj(Ova&eKCW2xT5y9 zi&st7OFb4S>a<-B*ZB5?E|#etSv_#p;Q1$7wxd-I8ZFiVl%iK90mvQTt;iwcp*pQb zL^Io2Vp?%y2M>KbNWSLqR-|nuJ*;nubZuQ@ajUN(Uk}HnAys<ivFicl>szwI%|j6) z&)_!eeY8<+EUD1nyb*mPL$Upbx*C>}x+y%H4y8}|YH!6{vd%ihhFg*qj~px?ECp&a z#Y{5$ir;<{B}mVqik1XX)pe+%hWtB1si)0F|2&`2Njv|G_*Gbdj^G5<St6TV_~289 z`Ysb1w3i(2Q1NPn;yUJ2Gx`0+DA129TT0Zy{}@sqwp<4OxeIEnry6?3i|EPBJR0s4 z0nHV2PrpfG4W#S9z;?BXfe}P#1uv^BUVIo5sb$bxEvc8Q4gS-9EKjNJK&-<QaGz#) z8}!~9;?E+M$1OveeOj>mVX;X(+kc-FwWr4R*m!gr7NlCcBr`@?GvP-D*6Zd6<2bEw zzV$r|WPF!=uBl@q)$$kRqaS36pjW>uQMWQ9yo<q^p2C?L$hmy$IfuHQKe#`djQtI> zORqgO!Z%W^Jlm?&wlz7GqoB7NxbIVYU-r3c;q5QJD`ib-RgTfzyb6*CT#Qbk1``|* z7U#QJ^usZV`o!K6_2UDrV9-8w{#xSB6e_RE->}Uj#zI_zEw#9v*0nIY>mY}!2jFbG zH?%-La0bZr(Z?!f?@l_#2&K9;KB@FCr#Svrq&g^iDvIDw`M=ZRpxk!b^t7R7R86zE zP%hR}0RH61Rt?&hCAy}y*%nW1Ly7%&;<`C#B@4g5V@AQduPQ$E>8A?hnir9nbU2l3 zUYlJLw_ehFbfhcKd8<vt-F%7F(WL*E@PLKq=^=if2G`l`VbL$PIJBm>?pIXmmUS#7 zB~1t^yY@M{%RSxu-w+K>-F|wIH>rHC-rWEXGv>O%>d2pLY*33L@`;qv{<TH|3DM5K zXA-0BHR6-!i-fvJ;Syd%9(5g`2E$it2~<K8oFVp6AG6}wJm}dcE!|n)f3aP?U;*|{ zevb~T!+3l|I!Uv4fr@-hd2&^DNxf>&Do+K}Gy8tSCR>|s$jga{_loQcW>_n46|Fg~ zJ9kVvNa?ItDK(@z-r)K?p+qZaHCT$4M)va3tC{O`TTZ83@d<w&o}xQ+s(Vbu+#Y`& z8j|x{qq-r_Honzx<S~qhp3YWy|87JdHS@FLUe|4)AX5vvEZm(_G3#-O7P)VImsC>D zPGyA&q|P(OJh`}ix4BBO>~`c6fRM<GbB6%wM-}U0|I$Vbt9K@X-Z!@Sh3_dnv&`$K z+}CCNbUN#TclpD0T+|{5ll6D$&k3x|3sEbeajJ7gdZfBOOO#(}P?vt^6{mN1%Ne#* zAGMjQrthX*MWT$Ox?#0R%%83swggNFsc@a6%a8nBx4o`gUu>0P?vFr0Fzxoqu-WGl zPlhM;&O0f)qZozq7AW<Th!kUTxx?3YB|)w}vxc39n~(|JD&=dCRhSieH<K}8e8K`P zJOb!|^WA-L2Owj=axIgfbM$!qq^KHh!a7buJosL&2u|fCo0N%g?UMxg&<UrN-ZEb$ z+vkg;K;n3%oo<q1aHV$LWw3NDP|CsTB_upUGL$NOq*8`Os>cDfM9<q>>*eELR?4?h ze4ZP*<RJ`P=~Fj^glKyh=aa_K%Qkd!u<5+Yr^Q`_0F6#)Rv!Y-Oav51e01>&k}<%S zIDFln@T%%mMIFy>M~Y9oM8kYDLebRx|JyIKi(E$~^E%5W-FRHCbqnkwbTy)_#k9Ge zHImhz1PZ3`W`D=F&_c=leJqOgL0)yum=NvgJ<#gU?TB%@qB(f4Qr_Ror=8*HEoK`p z`MASv8OT@K(4$TC1(nICPni{E7jF!3sAHLmdeE61xrXovUqlP7(`RVXefh(axUjnD zBA8r)88w!0q{>@NF*|ZaDpzDbrjW(=kSIKCWTShJUm5+zqWUiOO0UQ&D3K;Vdfgx* z6lr{AyA*sU7#aSclBAEDT9pAq{SkzI!PR6ijL!q*a-1Nd{dC(9tg`OJ%9zu&tM2i% zojm{u0s_fdI{-_^(&yJ*7RR|BhoATNPeCGs-JXL%(@W9BHfzUjh(HuhAFV-b`tMJe z%}u4c<?>B&vq1hjO900=`_we2XaHkmD_q@Q+~D~EzHK@k>eBDWsF&j$#V9B~IoZYe z8_uv3+eFR-_C-G<n$dsHzg&Rvu4Hr3^h%rBMIFFo4nHNytCmyMA{YqAt}dxa-7YsT z3dIjbVkh}5ljmOt<>nA+X%A=IAK6F}Q*g_Ke7_W*RQW@paU4I~@125jC8T1ONi1w} z6x76hWAUwxE8|v}f+Z?#lzqk&lNgr<b{~h)?n{p1hIS^c+t6>xR1V+}HsHm-9yF|d z=0r|KEs=pLV;Wwp<zDr%!d$~mr7i~Z=(dwxGKmD@npze%Gd6sA@Jv;ui%N@osHfeA zZ%|j4Xj6$NXjP8D?Ud8+)+!Hl3;x92`Mn`wTjBCwgCQ)!zPqZ2(>4~WWCee--^~#9 zmpa8u$#^4WV~rTi!p{D7hZ_{RKV@+5Omzb)(jLLh8neRnbfx0(&QKA<fcyAn<W4}X zQO{Gbx`n7kC8|zG*`2;^mxVc)!T}(9aZ84xZX4(ng}J1*I<4&&Y4kznMut_&t%Kwv zl`_lksgr+piU%H=!b8Z8XnMRl3(kMM$|)`DNUPQ@Q2si=-vs^=FB+Hzk=Q3iYICkK zURn|HvXLo10U#XJB|-jhBMOFX#sNMJ+Qz?*aKBDZoK~XxyttTo@DkZcBTlO&8qqyR z;mg7+nlcai^n-!a8cnIMJ{fL(+Td{6Kzq0mnJeObTK`F10_DOVLG+Tmnw=li1I+Dn zlgRtiB&xsks{J;1mC`PpaEfX;+ZiUYDMN8vuj8+>>56WFg12|Oi@wBLW*^lBZkj>l z8=G--7zb{*Q;&#Q;VXoh9kz<}gx3O`F~$CQHzcXHrop|qQc4~j+&OYgWK#M6L`qTb z7D&mn!g!6&eQ$~zKu*rD7*b!}s)+d+O21e@ju+)C9S1nvo!c7JK2H@$3r&nt+LN*2 zF}+Xw)X&J;8BcHjANJp;UFQ2e?o;RC-Z|`lF35*Z{LQaiYI~qeKNk_l#8XqIrvV?Z zq%x^180BW}G*0p<)|9P<m>HbzXctp1bPm62s1FXeLLIo9Sp6I7Ps_0Er~BEz|93si zdw<AVVL7VzdX}MyqdpsbML}~}aE~$aA+~6DuJNy1SrbasszpJfhS*%(o+0J95Nk2` z3u!Vw^=@vGXGWmBe|bax1L9sW-o`y9&c9OM7@-U>2Zp}_`ViUchSPegNt%sM;pF=E zvblfGR2e&lVuyb6gem&xk_z+dx<PTq-9a2mCG5N3;jV8kn~!zR(hxuVlC;Y2_`^T` zZ(ME8a)I6h4x4d7uKavP0i1TTnlC#oNxV24pA433>vAHd@E2Df@VhpqI4D=NDN%R~ zd&Wg-)ZZ?ivyzxh@Bop_rC`Jf{vfnkJRv-Dp(Rsq-d1X5Xo9i2tr(z0II0ncybWG+ zkXP$XhuTJ3UwrRny5-dle=C0GkC!(T;V%iUd8uBvK7Z91{wsdSEN>#!3$kN6-L4vG zZQaVzoxlXcR)vbF9oaQv@HSeYKWA!ozQImeqNn_Oh`N&(KMF!EI#}MnfiG28s#d;^ z8srh(?$E`TFNn$wl9goZ#NGx@<kU!YGm<6C&@9nM4OiUV5nWgJ1fQj*_Av&D=qa6f zP{U$CGGN%)rRk>IdIpIZd5peb;t*3QCu+nq3{5lsAeD<ZZ>=u8_oy91m^teL{XUlK z6A8Kxpl|qVh;n>Yh<fojZ2Ff}%10Qq?r^zsB^7<|(7NjEK?c&=2g^Ua6NJaa#2Qgo zO=RFsp4`(9=_1$$fq6oVo5p6wkwYPBpO|D|CCSnX@V>?)mrgB^j}?cg@1vb)L4mwT zQ4e2+1>~0wV-=D|SUsxF6rGo{)3^OxWpi14jUJKEu5K7D-vSbVnYWa5RC;-?;J@}P z>V?HS@8!!ytBV`f29<(GG}A3<n-Rt&$q3V4+yC4R8*@fP<W+;)HyxAI5<%-zkk_CM z8+gCM!IDVykYm|-W@7CckxRx{=sNByRzMWnc28L5o(po*QzJ#j?4gLCxJPmZwux=u ztwE-MckQo>>ZhAO!|Xh(S^f7Nr--hl+d}I4w`lMPJzwS+`PcA#%S>B9m6?9G2MAn? zCp=?+WmrzGST6gt)i$H|bYOc~1*ZSYt_Qe#oRmcN8Tregq?Q$q{4sm(M{N3*t(tL- z+FLJ(w0@E$!tYh`kzXInuB<B05la*EQy3h*29{GcwMw({46E*)WJOt*{~Id)l`~}8 zc%%9d0qh`P_NxJXH#0Fr?K<UGdzouW*7!Xage8~PYp&hAF1CY1JJVia$!;=^=FKt> z51)*=a<w5A1Od4T8WwE8oZ{OW@nV5jb<=JJ%15WL;qd$lhZ=L*S7_2%5EsLt7;CB; z@<mre>QE`O_HLei2I05cM)<SM1m#0J)3RHfUW2a-6K|npWiMoAQ<f-eRjRE6P56@d z)XM~P{K?_`llksZ+_mYMk`(Mw)TAdT=+^SfO;T(*%O)RQ<h?n%6ySdx3qaJzPj_XB z&tq7<+&SrZkO=bQy+<zVX?MWhvmUa7KXq;s$&tK=P?e54tmr5<!Qe;>6nFM9Ryuyy zQ^!IMqcz*cC^1#3HaXNTJy5}w(f6D~v2@|T4tK9uSsU~hm_BKzidL?$B+0b26cc9v z!y>`8@&qVK;#{(mAIDpBXr+AgEF$s;U)aUcFq38M0VxJ%(7M{E0-BCT^Lg0eiARUB zz+W=gcEnwPeF}9o-!-WA%W+<<2+BXPm4E6{Me7(Z>PJu}DYHZgYo2CxaAYTG{yz%1 z4^6PMKLPJXVxqA#4v_j8zL+O(D=9tgVjeyzQ7`O&pj$Pzd``-DZ2Ve$dFp=T3p6Mp zHYp2A@UBvJ-P5kE;{ter@@W!1{&0AFd?Wi#u|$fuQ@{cxaaXc&$h@(-9JNWlggN0I z+uxQc&t1*(M_MGlMr*g>QN`sP=5vSKW|Nl(81w3X9j-U%1+{u(^>99X@d7g5;|&G5 zqOMWZV(QVdaUJ=z#;cX`C1ay1&~xqdr}Q+qmcvSAOdsIb-bfSr({c7<u!4M4asPnn zAN6NP|AkH)`J}TqGl%-kY_F9c7^bGeJt_=Bf%4&)n|apL@R|0;LdnAPkYo}pfqu`G zGjdvk2YsEWXJ5eX-|5JB0pB~MEdF`*9h9Y9j@<tn81;+Cg{YfX0)xIh(trW3c!>)< zI(Z3qVUBz&E<LUq&A`+6{viTO>02mG8Qv;o0hM#}b0RvOHP+gQaxW1Lj^c+61%EKG zbOiP+f#+^U+qsAC<s;S-lzI~h>3lbv>%(XB*6m-UNaoO_bs|#r+RaC;h0^3MzbO8~ z;R=?k2;}gSA~&C;w^s(9A<ONQlp~Qmy-EItEk_WwO>F0uRc0k!Y{6X^sajg-9IDA| z7RXuxu!z<GV#*D;_kwoyQn{%14+6I9q*OonuTO0Q(&US5gbKRJ%4XvNMRPKZuLJ@u zE23KCS;{ZZ9v<sf2V{EKX8!Pie<&4H@*X(Kuhi7(K!~3ga+OT$z}LFc=X!RgPo2~5 z%YWEuiBcaDDyBEHeYDrB?s!3@zrZEa#bj+>OmS9vD^)6B5#VgigcfPZ0bqOXQ{ZA+ zMPIYJKD*7@&Zc0-RHR`11rg3+-km`&FHqS#)CO3N^SCfz7Q^5*8kbA}3y+0kd5ju? z+QRxYN8OK#h16h3AId<N&Y(BNWIe~tQ;ot1_v|hhYSHYv7!@@|^<NqNdU4(k82W>X zBqJY3hOiF&wpO?O@fN0jCZ&2BZc?84w-r|nAVK!jQD@{E`yCp$K=80KPRfR)Za~L~ z3@hHA=(LP^duGMTo!mf&M=jSar-hzs%2NoO_p09k_k+E--g|`0WIlD3U*Qq9zJUE; z1e#8UEq23hzN=J)NxJP2U(0?P{-F%T1zv5+e@TGO6{ROb${H4-?Rws!$pf$x<B5J; zAQy&B*Hd3D)eUJT>j%#I@EGEVfJN(V+vOwqfkwA^fg(*CN*GeTTvrgD@-p_VCStSq z61V!?RfF0o-cZNa_4wX)kv8=O5<}MODQ=F)?URx%1yh4zFQN?I+g>(h@2()RKl35! zS%u6qaeT|$HkD|(w~yos7|&BztIo-J;}C^51*l8(6zeTQ#gQixl`VSLh=sggpKxF? z6Zy8IZq4r$P*20TKsma_tL_|SiW_R2aJ0dlGciHREHtWNm2%xaRFV;AYC|e!Y-I#K ztjrOf1^Jd8bMq2IwS2sVR64a2)9Iyk8_^xT!1USLW+|Km$j*-KryQ!%Q4gkV=3(_c z03B7_V@yTbfPj8G8jE*pFvjnMb~7*I3ka6K<^D6hN6oG`Q<}>tQNRwdgq4+Nnxa+r z@(}fgw<4)T{k+W<2>9GycDT9XRi~H&@==viBx*Aq8XVNL{ti+>JdgL*Mf*jIPn{|; zRHo}PCn!LQp`m#a@2tv%cIh*4;^T^A2S4%tY3_CaFMB`fmD|83l*$BLCQW~9QQn$_ z7?m-T3H16CV7C_|lzOMNKt3+fm_w_~?o*<H^O}FY!k*+H2HmL$KwMMD>6SKufup1w zIyhLRGatN_AlFs6bPIFbp{uBE5ouPx94fL2el3BS;2@ee9?>n)7cV>9aWGl{a8|gB zak{-(BeO)L_mwMepOum(El~Cu1CULTJi^Gs@_VrCTFs3bW|I~zL1%D+dGxQnCEApF z%;PYwpfx^oKr#=bmsBbBft`KYuy<I1U&QSXP`o%GLH-_vKzJ*tHbp|+mkAn^D+U^Q zSq_Do#KRF%N+a8<XW=i~P~c-}v5onyO}7t2nl|dZ6mx75ekh>o334TH)618rbMMT} z5+5gd)jnqOkh-5W9(;|%^v*=+6T04O>!Dv*Ydi!Z{nQc&fZr$!F!b&~Ah34$AznOc zUKH3;DmRJ0MeogTbQq2^#es%Iy;$7rQx{K-7r}hRe(Q-FCo!#OfTc37CWR0ZAlnq@ z&w(|(us})0tg5`xTM=}3#{II_-@Fm`TS!@HsY5HtR!Z5eyM+Ej(KZ&4fXm83ly3W~ zMA~=KSY^Dg3(I}veb;K@F0y3&2h$F;$aJOb-*5U{Z(y^2Yz+1L3Zj48^zf_FEaE6q zHekR6<9R-aIXy?4=Oj4^2NG-}|G0sltlvlQMzfZC0Y&mn>z#xy8S6tt-D2v@FINN9 zDg=b-`SuCAxH2h3{bLP<W=jbgK@RLe%F>-=Y1ZtS*ew!D!}`eKCPVFUpSBK7<O~x7 zBLU~AxuTtMUp|N|OPn_XpFL;v&wvQM(f=m2Ynh}<2=f(vRDXwu=HI}g-J$G5+EElF zwzuv_l;9Q0s*ft)Q~G{cQjw9FWs0s{>`+UwLf{QL=vO8^QZzM-z?uSop=fNbKv>}! zb()nDfAyM4%C)2TC#KQ{!r8{re<dp%C~I_}>^TF3VWS_Wn5`Qj&1SHA69;y)uk>D? zp@F2&fh=Dm=?+5-_{k*F3|Kbq;1oF#O_H!o<R=+fMS9&&rz4+!l~Pkm2Sq5YfJoDd zsZH~%H_0~w<&!0v;4^-b;nmaN1`-x1>?q+gHj^FB!f|>k+S!!NRemGpu;eAYJ59-w zIfH93klLfdmhc);68f>TmpI|BQaz7;*y7XnkJT-H!n~Qb&)5n{&$)y-I*v}vJXRNs zg8RP<QNM9`Qv9}JK6RacC7zVK199xg*LISu*hGndfbqI@72C;n?za9uztQH&w<FbK zUMj+t!b*AdmVMwv&w;J{j{bRAN8%Wu8SCxXL0LDh3=)gard{xdaA%2(b!+I+TdL<O z<%3WrC1PqKB5ApzP+eqA0<u;!{I~B?{;lP#QFWD;_@U~qx#C~3ayiGoS13CtHQ&Eg z<3DItsWLqAJ%?*J4C^gSB^gQM%2zntpL)wCjaum|o-GY<Xr15m`<O13BGnB~4Wd`z zTR(tZXMYkmCti?i3bRB-h+6eLdc!Zh>ieA4n^B6p>$^yT>XwD5#n?T|C&2&eLezCd zkH#pT6{|u-(6R<Kp2v299<iBSlm#`&8LtQQIvgatU+tnB9rNUCp>qAC3_PQ8<1>7n zk{;JMsUd&WRYSG$7oq_Mr;C9XNNVV<^v9zfm3_y`E(`WJ#g$525XZ>hO}dvKVef<w zRkz?SDVOc?m(@>gmyhS0#9Gk7Uc>!L+ppR#7d@XYHoy?RU7`-OtWi`rIr?4Wc=<;& z6Gs62B$P|-vPSK_8{&sT!$EO9K<g7I-@t<bNk&?YSj_vrrN$FJrTVlfdiQ!>sxBsf zXtqFc%i+|{{+%2#V|t)h{T0ML#kXzJ0Eaqxg)hG~U9r#&o>R(A(Ki(_sZH;`A-F_+ zACB$n5G7SlWAZO(FU#qC!<JLlSiE$sv7rzqppLem9JtZX|JfFOL1MXMn{EKPNDNzm zZ&r&#GcHmRhp?8k@__OA%Oi|xC%R#Lf{fq#XYV#Kd6>ghF;2J9vy6ec$X3doezTEU zgle|Aip%HD1DZTEz~LDHE4LX5ahiXXN}Aa-)ckF@B0AAmdj|o`()fi<Rn#t(a+O^^ z^z-rtH4mhS(}5y%C_Ts1FrT0{<%k~LY?*o08;qX|6!l_9rR>_KW;Ks@5-H64^yj7c zh}1znPBe)}QV{*c#mdJ&7->H61dA0fh{eO()n_?xGn0t|3lepkkTA{1{kut8I8>?q z-wu5-L|}$}o`Y_A9>v;R8q)zj_1_4}@$DGP0lCH}K}VS<>4_ayW6WhwAiSDd1J6-T zY`~IXKHT$y#3yLd&*MxsHbg@Z*ynG!ZT_cFCJPi#QIoV}C*bT=X)zLwR3xy|T4}o( zd6v#N!fnk53poq=J8FE0x(|P$P3`Ka4xJ>YfsuMK@`kNo)?6x&=z`3LCXZZsffc=P zv9v-<<&ls4sJMTOQPhLQ@P-`~^99<C47-@dt+igX<eD#X^Vm3A*IzcuS>+`auV&Kq zT$h#%j>Hq}u2Ns6sOHh~{?8THW)yv1ZH7|ctrKra0#`x2=rSC6&|EBaZxccp&i&56 zf9)Xpoaib)9+Y-S9e6dMY}$7`jml>6uj6wpLk(y>OLnHmy*Hb7_Z`Ahozb@jUI<V5 z;Y7}mplP#9lGvsxdtb{7W=JY$bR2Q_WS80dld&z=ENH=&@HgP0AewynZsj-t`Waki z=J5pH%s#{fLM2FgW=4(piQYQ^v0Y;QrA75&??7^vCBp*@vBBXT;IV9yZ|T<Y@;4K? z;nrizyev}vEt38Vz^AjZLA4;$S<9=-4m#%`f0-W4SHG}CEz!e1EeSGTD?+)#%ob2D zkNJDp?7k?^c9XO!4$=Cw0@*uW{<?+Y&!T`UA$)RYFp}SN!+Cn@u^|;xx3`yl$Py$c z#{5E#{D&c3JQJ0d0;hkBp?+tO@Q0++vAt&SVSJWlzDcZudi;Uj{WG7|G*?mUTcu>i zZfB%=O^9hB+6LeD9d9EHR|do=iGzcXcbK9}rRzp__HPs!I&2f35;o8W*MLo7S-9Ir zBpW^0v8q#B$z(StOY@PHfcpWaf)gK{Hny>Np46b;*>+dah9dw^kbl`Odr50{xQm2+ zRBW@lrXpC@xM~h!!}MeXF;LuRGy!Q&F@|@(Qm*|pLB2R(5ejv7RG$L3@pY7F7a7$+ zFEd~!e;}25Oi9Hj;Y~)lXD1eHaZ*7+{w&hyD*w`O$_%H#-7>Mm8aTskHvU6Yvs2o{ zMugpuo|T*~BkuVO#kKzaBv{^HLrn1+Lsie-%JChj^#<OdvqW)H4F2Osw&_m))dFKt zgg|^t0|9+04)@67NNpiA)B&1GZf{mE&2yaAE36|6G$T%6!_W3f;t>`a{G;T*16dMn zS8w5aFc_;mem#?jX0Xkl%8=$4C16?Uid5_6$_#YOD7<OLdbi+h9q}j%z1i(*BW*=P zva|?+gztbf-ycC72Ln^bti8RJRV*%a3h+zxKObSaW}k=5=jG8Qs`?~g&%RUjvUUoY z#qt*t<l6CmPpyOV+Vm7SV)Ou(5|X>pd9V<f^QTR(lvPCI&U;s-SDu6-*+57AY^Yo| zWJJKh8OQu1FkZS<S>{W8n$Pg~dS*`aV@D#BF7dRanNbb-4e4=bGGA}VA70g{CLDKc z8xU%)S@}zzNNBlf>sr|?#s4|eA3U8i?ruI#Q&P;15doq+(tM2Ge9kybIx54>-*N}5 zZVbYChDpUC>XkIQnN26Tu}cR!Ep|(C@*(`aF1CHYpJ!9YGPRaZBb()K!8a6%%qoxU z=53lw)70oT6d7D0H*J6@i>{C=>XDC5=VweJmg^@|^qFybG$WI3W4)ewU0QHU8K95) zkKX-mVxA=u0aGI#-4pZ_3ou+uRE}55EwrFSa#-Q?-Wi!h@>L<Qi7w-;cU2A&bGGIh zv^y*C(bKLPNyF@Qs}qKJlC!}R6?0D!8_+jD9b~S}omt^bIAxT}+vsaX-Bf71wWxCx z*wCa~#O8htyncOjds*ofENm3d*vJZ%y0(thAD=1iK1cIrt3vrT1I!!x6GtXb)9naN z)LTqtKLMuu^Pguj@*iRJ?GKLefOE@+taPi%P+rCcSmFy&%+>@VqLXBpVV{u*O7=i) zote}pGo|HsK@eQ!_hHTEdnk!i@70L$>B!8vqRGU43f_qtGdx5~r?gi+8iN!1FVy{x zk($?`8GIh;wjbjYL5&Bb<p&hc19-Z=^vGW}tKZL6s-KD%IV(4|i6?SRLiVXQED$Jq z0;dq|ml=?c`EQkO!!^~7CV3@S+;^q?x8RqLF}+jmh-Rplz3fi+Uz01Q{J@(&V7q)V zhaT?pFtowdiuae3^6`=oZ62Ly%+aBhvey4sJlDyv3eyD=_@mQ_>jEMJhUkrEVMmte zRXfosT7twCkNhnsm28bapaTZB`JL>@4_CcoL(~l>-3ruu$tm17m3qI9`NAZa?*LBW z{}cn`6s^#vW+m-Ul~Oo6sqFT{eriBECpfhe*fIScW1*-_(CTwOrzLK0j1+V3vFCki z9DQ*dmqiD1Byet>1O%LtAp433u>1uu8fNEVIkXgnE7m2WP=FPQ@?}ttzoNZc*jzE? z&oS!v4cy=Pf#V{Rd=Ytuc&}Q>7U@#(b1LqR`;Em<;0o@WKSti1siemRPp;Apb3I*b z6|r(D)nw%&#Z7~~a9)3h`yrAVPrHh-fbG#d>tY19fNk5@J?1@wH1_H%{lInH;h!ef zM1Lo~Uas3y3s1M~78utmN3+|+6ma&>SZ=#;)}VF5s<LUj?5a}IhJR~{-hv1DK7(h* zeYrYRu62Qh>8Tu{x5H=mFDaW*LY1-jisyfUxxg?Msf-P-W!d-D|JldGCz)Y<g9@vz zLdB*`V~3^rh9&OjG3r-(%8U!)v1LA!(DU@}-TY?yNjI9yR%Ei@Xcy^(sTcT1u1QS+ zBJeL$jG#-6yIL8ReCuRq|0r8AgpYA$P-Mj{y1GMI;>rkYI5%ALxnKO&WZgkn(HWS_ zZ&<=+4daK*drE4IQvL?B+(c*e5O@Ke!%kjevJwp+!K?jbiYo;@SW7ANgM?iWor0^= z@Y#&4y5x29SVEFWs}XZ@O_u2Y5(QK*Uw_V_Ry~;`pJ1cBx${F^EQkjvIl<VQ$hr_D z;tG6t+52q<whU2wUwzAO>PYfI;t0BwuQ$nuEc`batRU^iKZbJQ8Y(5H!`kOFs`w4~ zGH4(6<FsDSwfXCbGjh$g%}TFp)0kCxKuVcEc+mM6pee1e9YaAo&EYkXL0Nkwyk2gN zWj+IP{Yoxh#?Dra&^0WD;a6}*bIsp<HCIS%w4tpifZ2aYX2O(Db<rmdlddH%-&9-$ z<SwPW7bvgY5{+&ln*BuUER(qQ1&=vWZ9m7jm$J*JebNe#e;%t5kQ?JY<v3F^s56OJ zLSV!%S)$qDa=0hp(s6WNSIG&)JuXt+#gq<RUdPm0f~R2NV0^*OB*;p4-nh1^+X_k` z%YFz*cN&~<tAb)A>F~5RiwV(c(mrVkpv=^F3uOH7eX1)1Kdl7$_&Vw}UERz1{EwnZ ze&(HtyXkRu{;8+)Gtmb#iuU5EtbLEI^FIFlxi8s%=_)1h)&pJr$PM_>^t4U#56?SX z4!-4vCTW2u%$b=Ucd5<cp@6)0R+^uDvU7M%cg6MmRl~tf+vTq}WF-|u#3;t^8Q_5e zw!<1!I4#jZhQg9%?DPe|Rs1^2DSE!druioMD7V1OrU0+up>7=mYw>q9hgQd`&2zg& zUlw}n60xzwjsCZjKZ%^Nx0SMmp|q0BkzclX-`yn5*7C$l*@!-wUO#V=GGFvo7{}{| zmlby>!*SZ0IYK|gVtd3Jj{HmuYU~k4H<>zl_`d|oj8?TyA{*z37gJ$Gz)D}{l|@(t zCzzwnA+`xi3MTP+A?m-Iq$wEpRAF9~mg2~-$m7eJSs|9`-Tz;*@gOuy%o>7%Um=+m z{H5=Ih8o=?QN>p{ZEUi5%9*2300SA_imY(z-A}QAyu=gc4}`0z;x7MVm#_Gpq<zL` zr^7F^;egLetscxx+5CG*MJ1GQU2am*j5G4dT4=4mZ7%z}opIkZ8ONUSR@7p>9}(e? zE_r}gh{2~8O}`C723py%JN2YLLs?G5Jj(l12*o%uUQFZK9qM^x1@8>yFuWkl&sNH% zexL2TLxxJr<SHP-nWtEDf1*TP3p>*MdnA!aV!Q+uUd#Ur!TZJ<>nh&FK!%>UZ2Hhn zoAFQU1samwgUtZdNB*zBs1B%XRzK@~RJUFpSR*Dtr3B4B?$9`6UnsSuOC!~DA+M7d z2{`a6#cB3z`owK~d`_g7uJ_t)svU)^WqM+a;#wUj9~=Ol&bHtnewnBgK-8VkX)DwZ zp25O-yq*|H<3GteB3CT?w#L5~(yIff_=RBkmk$-KiktbvAdxij^H{lv=eibTeDk0D zyRA6ZNS2MCKv(}nbCAF4n#0qFv)-r0;W5X`u2d=Y3u#u$9#9*bWU+KdqD+?>NOC~9 zQq6{~XEHW_8)*Y*;y>FhR^sqtSm*?{D*Ly8XvzDJZvOQ}`J27%T71Mw`3g>$RUG8+ z!xgm~AMfjyAF&&v1E29lsF=S6-rXrC)`)|xQqt4(JYR4vAub-rw6u^_nx~z2m8x23 zpDHq#k{^aS#Vck<eqC4NL7vK&Ah;Sebu7ipIKD@0cxG**>oqc^2_nF$q))(@igc+V z|B=4v--qg!?_MzP?-DGpOQb75f8Nt&zTx#o|I+gq(BhzG^`g`Ihj05CRA&koXcbL7 zJgcp9C3{YLkOfS~T9sVYe+0{F<;M%8*(+BBiATmf{<7bPr0Lhts?#^c&_f=1-xr7i zhA0PLqjl56-fKyZ-Y~vhN{nq5`)F2rOo)`0r2ErI#v-A)5+bFKy_;|E@Ab!U-1yEf zF7+Y%R_7HN_D_gZ$91S|XTq+Y;t99kjk1R&C4>HUlCs#88Z^;l>ts*z><8Q94*e$H zT)VSK#3A*WyB#MrkdG7=*dQ+NDR%dXG3xMQ2}v9^4lY$86>T@b+w1zMmD}|0@vFFn zw%^y&zK~dPNg0L&e=CbGP9dXbO9Z6UKVr$OnF{!ibj4O=zM8D;OK)DJ*ba5A3`^1C zg|Yt{f9}RCoU#fS#C{E_m~ze&mX=~50`YD=`h007jYWfv-yJp37yzFUXz_XbDi+jt zu@058qtL(0>}t7J`rOa-&(2TX6i?t;g8U(~3tYq2Y(?G2J+1bH3E4xTeU$`{8teND zl!F^ru<5cz1}Sf&)xxV_+VKCub(MV)+(fp~I+r6BjDv&Q*~CC|&*5e~nx~u5YCQi7 zf|Yy3-t>sl?cbt;{e%}vc|@sgfa2~!`7HR+1M93D9maX?J2$P(`d;2uwwCVe7D%1N zmmyvIr7KmRo<*A#iWuxiXoOD)5Dq0p6Q$*#S8_!ohx0XrO3KC>+Y2XZgtP@QtF0%B zz9A+HpzMbbGqpq|Rj^#v*{5Cv!i8@5AFg1+ebo2Ci82|Si<k_48NyGu*URgtfL!zY zAc?Y1Vj?s<v`G*LoLNNo>eROi<Z>F^W8szZ@g@d*|GNBvNOcuIyfjE;{H8}dcDzVT zC-l1SkQ&@tEG=)f*|1$K(AjCQ!4;q2kdH)(6xV|eBL$}cuu765)cggCi#>(tXOOJy zZCCqG4~I>oCrakP-W$&Dn5G;|f^&TAHx^`uAIHHS6<EJ&7WRE!^-7CT9xY$qGhUY` zHAy+SW><f25|iWPHFonQV~DEMc%;dBiuLKO{_(8rHG5L&`52{NHCu`Od8N1M)*YRs zRK%fQcD$`v9?QTwF@gJs1f%JdVHU3AP2W1js;$s!DfuC24cPnOvivL>JmB;*d+G;) zd`}AetIhVmmwyfY(sI)ho=N5d@!1C?D~)K!c=>pMyOO82=a3e=*5^5pYxqg_Whhl9 zvI6}R@;r3CK?YZ2i8ftPnHy-824Bq*D@V7haxH}tzr{21(Y#18shVEhScrbYzqsK( z6TT2l8=iu<uNz1Gvr^u7-nh^4yd&QVS}>k*<Vj<sl-MQ=O~!JoIWR0~)Th8bpy)f^ zwTm+;AgPPNDr4nC?LJKcXD^S2Ev%QD{0@iDhu`%p<uiBrRCNI-tOnksm0PVZMC!w4 z$68C`8b$T`paEiEV$7jyTSKhwC+w{@Ya+7j{4YxCKSQ)lB*1>Hi}!#XRCa~HL@q<D zj>;3Omyy-&pDpD{dg_mPB5GoSWbawfWp*Vi#^14nVwcw?w**wTvhL6k_sZ=&Z=e@1 z#W*cxssF;><?|#{YW*P(ztfL7wA*QIVtk}p(tO#c-32*B{O4Z-SpjF2k8im@53oPQ zxL_4@Cb2;3NM_Ne?B?|xmSBPkEz>#6acFoyrd0HS{d67KB;$8X8uq3V7RZk1)@e7E z!kz5(YHMtML)l3W5H`Q*P)9w9w<E$=Kw!%c95hgqWrz%2i?7gr;@oVfeeE}ZWaD#@ z>J?rUq@zi7Cb4u!4ax$$ND7B+o4g|gj|?sI8a(lzU_y6+jzZL3096}nEcO|Ev}M;E z?%^x|&bz0mT}Mdb)>&z}njpK-4Ag;oyv@QBfAVi=b_T~#jSoW9`>Xt}#MTg6@!PnZ z6my)Xz!*5TJwtPm_)q?;MI*r=Ryx$1%oJA-C<kv+--~r|^(K4~82{JL;TMVcL$%Sk zKAq7dEq}3DJv%N$oi!9$S=}Aj`cD@^lF;MZa?Sah-^~(>p<ykrwirvV{Q|nzm*=^4 zc-ZXq2_+T1I!2ZqW;2_aXy?s1KVq{vWlqeR-UxjL+_3dAMSr#!4K4llOn^VLW392! zc$D73bDYeh@p|e%g2SUe`!1xc#~1!2J+%kpJ9z%UV43hebr*v~&Y%$O%^nxzJ8VSb z>?fq>cZ(HWjybgLV<zy&KF@Ir9ry+q=t|q=QZ9rTc+t}~L%pWZSal*y5=#QzwkY2& zBks_xU0KlzPfX^qT{j##)ZmWf!n_PA|2~hV$e~s&P~0?f*97Zdm{xkV73$$Z&B8){ z{rGYCn#jj@fcq{`svFd8jcyAc>0TaYgW~0lW8`DlGi%Xx`~$2dRb|_gT9S=nD6<P3 z3$S6I_=ivZZ;%N75n;$%ZQ^zQ&1R4ZGv~Xqc!U(o*X)_8%~UI!wc-fHzs)-zs9+kh zE7Wst5_<WL=YNN%z|6ffHPKxeaO=F$^LVgav(u~ok}DSb3de(|j+ZZPDXFL#99d?c z_#8P24;%0>X)GSI;A+6Wp^>6Dyl;9o2g|axDZoQ(r*|x97l-zSNahinWG@PbaC%%B zF5*$eyAVg@%X-Rx)12ZKe2{C|ZvabtLG#cPww~Y}<!cl;(q+;{Jlh9$xQlKx`?Ll+ z*M;qVy?4q3%<(s!l49zwj}#f>{0$Q!k+ES(V9TG>h(~5PEuqI9Dz#lqG>Kl^oYSAm z5?zL!3{fBXK$?AcGYR3JvL_z}Y`dS;vcU@dy8RA=6&_lWZgseqfQS1-aKEtej6Mvc z<qlUoQHr{!K>l*PybhvXObV2bZQ}#)28pF3E9SLdTq%D<qu-bisWy$4YhO}SZFz|5 zDk&0uHe$s0K6U+Ly1l@ClARa5+)d5RgD}hzrCm(6Kpe6xj(zwKSA9U%(sNDH<W3x~ z{U9^Xbl}G5L?jCu9nLgu;m(qZ$(xnZ?->R*g)4Rbb(z>GkE~cr5l?0M+=J>ORn>ty zLWF}6eaZYcffbrBX0WVFVH_dNOg$^TbnAIS#BxPEvbmy?vMC=qEkqE1KbEDMak291 zISZ8DmwME^wD34#>HUnXELve>F5zh#*XS*qx^Ya!8v!M%l+RV3nGm)x|CporlMF1( znI&H_){`ArK9`-uew)HmDCr&R!)BgW%D&^8i(OYF98|YqqnrC&!X3aPUzw)cs@LlV zbaZ}j%MRlYebcNCne^8|VTshOd;Y2sf36ykF8WoU5BT_hzxp*uJDVlLaFT6fvPDpi ze&>6hV#I!=(9<j}UY(<U3}4}P3RYbjsFW!7pGG_K8g3CsnR8JRK>kc+k*FRu%1)oB zt7PFxG2w4j)H9dwDr!x2ynHCg0PMRJsZ;k>r5|@yv-*A{u(EEa4|(Y%79lOhgTqUD z9og)6<n~<KEqfhq<3MzKkf_c6C<>-1c0DlrOdqF<UVNbsLn@*xy=AFVPL}B1TTfl` z_oh_R^&s<!s9zM@_+~BRWSHn=toDRqm0Wy>Uied8?pYs}jhk41(9^5NDh5|RKynA) zwm93#&JiQh?pMrei0oB2#T561DV`XB<3U2qt@2}VfsB#W0~2IV50L$<0kuEkqlTvK z74}&kcF=8I(RzNs`h%&fBt|f3GBpkQQF0D`ot2fp(4bYyN8c@wOQ$$(NQ!UMnFM|V z;{`&HI+!=JaSiTg6wJqvq;F8Fculu9Q{3o9Hou%Dre!OAO&-Dma%p$5$XnQ~_L)kb z*!vr{IG+g;lW6=;V>b%8fiKUmAsPg}_~$hw3DlHDa;PvP6UY)Vc?c#fd5AvI+H^+| zvO}`(@^_=n+9X_GHBSrcjMTmuD4gFG@)CUZ5NXVfJTFau6{yfin7)|x4ES^2aClls z_M~W=dn=lD5pi<c5FP(Y$rg*AYQ9sjmHkyTWSevsHP;c2${K0P&}7MqV+!4^Un?vg zfJCL&2sfE&?|HTNK_3R*<^%r-#{P7uVDCo@@wp~Y#=o;um}xs|Xbz@~<(8oPfyT90 zE9x_p*8fzZs&)FuRqMcGIOP(|`&vnmm{KxcUcI@Bq5Uf_G;H^hi;m&|6s8v5POl|h z1iqWw%~q6b)bfGe*qyI||7&I+62bfDN)-vV2K3FAxO8i~qZsvI@UnrXxV+>R<G52s zHJ>{w1H_j@F`h=s@Z?8~ExBzrOQ?vB%9Eql7`kg%v?|q|wud`G_t<tQQGdoorsrv% z%>#qU7LXv{;-hSP6dL}6O{efsGgbcj_&zl2SKI#k@z8wh<w0Jx|D;D?y1Ik>?%Ww9 zucL^mi;@*B%Vf(UoSGAMj$gEl0RiikSb6`so65oDvy!C;+YYdCUlvN_nDExRR(n;i z*<}3`po0O~xBvA<Re6NF6cI~Wyf`RwaQacr>9&D2BJg@;mkiw9h8nn|;>wVVyj+~n zc{JT*Gio{ORd=vleHq~Yx|A6cFJRFu0SBaP-6TSj?tljCiJ7o2#+Scg{Og#APLki< zg3@y_*FZjtgGP2OjrF*B_ARF;tJg<S77jZKpGnS5s`$b<{tP$y2TuhFm6&>8@u$?q zpS{8{I(#xJPc&+x;|Qbd!fIW&QT;-8IXok$L$+AxRRc=2xkN)6BlpzAeL~N~bTyfW zM9`9*9hKSL{2D0b;4g}IPmNGAonj@vCR7;>e*CjgzZR>i*K~SiMp5|v^%G;|1LqME z+Xre&)o~WkcsbukK^Cu2MfWhozr8{&TD45?7EL+as<=MAVW4Rk#6ro~mIt~;IK?Kf zI&g;<!7aM5_oqdwqo0VC-O90AzN}U$(Zne5RH&H3@v7N#L`Rfq?FiU$?q`$OzeaJr zu-hpVn%+dyJ!m~MT60cX*^@L;>oc*&8qC(SyD#+hY3k$NDqSQMlB6@R#(I~wV5p*w zN|l67<}bc97;ApZfS-Y}!G~yl&FCc7>6W|LyrsZ)jOW7ckISArQBkY8lF*z%&o$?Y z%J+gxAW^bJW?c`H&BUa4BhbGftL~_3c4$0^DK%pJAP~ggbXzj2+Vz#P`!UpkZ+q2U z{T*)Z!X|L;P@y-V2|S-rq6VEu+V?zY`?GtgOQ*KW`<b`4Aq_rTAb<Z#s4%)rF>jIZ zF>y?@x^)BtxX<s_pG!|OWsEvtBlWAbFQ%Qe)hBAKp9Oo>%|_kO!=6+d4mj59(JXW2 z`FK&iJv<p;>7Z9#`?=Dq)rY<Min6Gap-JUuyk!tHWx#_Af<(&bk_yC;YZjf9KYn+l z*)QZ_sB_l{@WGtY7e`3eYY$OwtozBU2BhD-%8|U-_O5GMqnpk@EqXca2uKfOMeinm z_-(~U-DU@pBdJ@yWs4|tfua_0In0P9%~bv|fwq-C&SY(8ttT-G%n69i4?vF(7YtAt z&Ax&S>HaVsQem{1#X7OM7U+<<DRZoU+{?Ggo7$x}!z!GjQ+@=oJu%675e=2br=Fi9 zj<X4w-6Y}Et3@#x``sb-pYf{gXJjBFL(`$527L3w7a1o|gQncaN!Wjfa2|9hd==eC zT}T;rD^zNJ_+K?~dnhd7usfO4IrPWIx0mJaF~#*F<w)hpLzs=aY8*A(Td`O;Ez`3P z4XMovw{<m+9#J1YzZ31+!OG*jUUm_pnn<k{`C$tbt)L~KpQ*8!V~R1!4eR?f)#m_7 z?Lp#N#!30uJ}LE;AaUhySUL{g&f;^sT3MF+#3Q@*VcP3A>Au0G;k}6aN~2dTE%&KQ zB{F)rD3cCk32QCLgp~lbwWOyEe-Np~VvClCLJYUyEMfTZWSIFbe8YQvpgxTRLV!nR zr11JZF2(r&^W>(^4%e(F0DB@g!(hbi^{U5C^Rj`4jT9@GN55q~HxXgN875-17<Q)O z9lXJx?q=mEmeYCbxWiLb4Z!1%5IDW`nnP<(mU4z=D_Woqa3|(68BgWV9?ATfo{DB= zUw}!7l}q*1x%ksw4i%3NXkxX_6D+Uq0Uf~Ax%R-{U&iYp>e2LzOwPP8vD|IRirN=K z=~^d*H~`9zwTYomZIX{%!OEXag0#CV%>O!y9TEoZNAR1Xe)ePsMRRED*~vvGG(eiN znB|qvpG=Ui0{B%u#@%=AjJ*FBy8sL-@CVy|iKw~7SoY~KpQ>&Hcz}&74aX;jC7R-K z+~b4!90w}!7m)O{IFz}lTKhK{>R6mrr{`H3AUI8+(ujJ2a>mY;W}Q7HE&2)PPts|| zuBi{tU<L1WU4EL7vG<CSv`>?bgKtIRmcYPghw0pynWG-#_I&3X0<Hq(LlaHb^X<Ok zC*E)n!t0Fw-wx~E?a0uV%rB9$H?pF<?yl17%R`BOvn7|>nob9vGE|Mk;MkLi(6KCT zxBnGeI-NC&(;M5YCs$M?mvo|0n+<cB?_{w>c3HjBi8IZjPKs1V<j2Z|OIrcEZk+%F z&14qWl-mDk*5XXo3v$(C+$GC(^Y@FCYNSnvt}V*5Qaz?zH>e8Kp{L6%^c24iz7hQ^ z-^OR)r=yK(k7K;+ZK9$^40k-|$ZzYzb#WA4O1C|V9Xi(Ui&4EF%*@f|zEvZ>+biFw z`@iVHuI$g>`rGJlDR<nP4y`_<;t=cP0ls20NyKAWwA$!=X;-fK@HTRFe~dRbZ$IIT z`)Z}5U~RE(BSY-BhWr=XiMR>3#H1Y>GPA>kMs*G7-VpM1`Dbo{q8$4FB%OOeRCW6Q z@rH_snsangw7jHnNOH;xtJx|DDk2TTd}atn(=kgFm9b1SY$XKsh^Q$_UJ6iPIENXb z0LQ#U>QT$qOf+e&)G;eHQ(7&ycKiKa<M*%16lc!)T%PBBd-%a8W{db&9kP0vTBoYL z_vK>&7{{tC3n-u@L8U2@Wi1heI8`~ciQZ!(eI3o2OT?#;TAFxYw`U<bzQ}-Xbg3EZ zSXaZ^RCR0-HOz75ZBYq)5~H5zEX_I*Drl891Vo#?3fj~S7hPh*pr261<to+VFG-UQ z*|W_5+UfLWhskT1`?V89K8h&GK)7Q&llY#SqZ^gS`Qg%%FImn+Fjb#MZpQ{Fd_{WU z1j?Al!^PaNG%apXotW65+t&dZZDYK2ez2TB98Be#*J<M3e3<s{vOiiUOfmF_mdy$B zrIGxQS#vH)aa|7%sIw*#FOag3vUMUV6F&DC-R=gNOuNX>__D!eePu+QJ<=Np6KPZL zT6Q5Cq>+DsGCm;zrt`;aY7*x*Qcm`?T6@Dol~0=#hpKx7%7Hl4Xub>1;({X-uhg=u zmV}CF-&0XuTu(-Fvo|7p!NYN>GjH1in1Wgkaau{kSw0X*d@o9M1KT%syX<dTOe;B> zK)_KqmFo2-WY?s645kl_JQ|U4@Uo%2Pd~<Rtg92&4LPFs&31&N{Dyb+<ns>kBB=P< zNGitcpe6aXZQS-09hKpAwqxhu)*^K4rNt#`)stf37}8}8qtf9mfKvkws^#O*JZCCB z-yvnl${@567j~N)cF=}?mLL~Ai46WJhOn-crX>6g1}b-@U!8GOKCqVK<oR$*Wsf-u ze*T<fdH;!aHd1ToWJ=GWVS0*|d%#x=IfCZAZ1R#*RigIaG7PzBVJMCgW+q}Jh9kei zr;=Kj-;;zk{xhCo^q;e1Bf&h<uM?dEi9M8-dhalK?<61&<si3>rw4+-9-(61c;}9Y z$_Vizb!oRVQp!Kp__d3*+AcKdoO_E`SPrK9dLAs0EA1hN);DQyoki5@2x)facc3rm zEG=0V6PN%P)s4KLU_B!mb?yUld}&BJZ0{JQHixKhM<$7e4(Pakzp2y+&LqbZbZu`p zOUtJ6Rw%`+yDh3m(IS6w#XiUpFRgK^LBH!!(?RcKf5Aq|%wL22o;tUlK1tC4>|a=C z>{*EmCPi!Q-fE4l!p(D)z1sG_R_j@LK%Gc%h}pCWabay`9~D~8jfzoyh=q-6)nnme z|A(MMQ1ap$IBh3gOsxEo0UpxK)8r3^i&B?>*2^9}9`6$vrxopP64-5H5Iq}Ar1ykh zoipC=S&YQ^fbOUwb<J>#vh^>cD(yqQ6U-<uqnbDEGT3%!gBuV9O3ON6W0X?%$xwfO zc8?_S1s!>hIQY4uLy)7;gP&23X4Q;ydgEWdO&E&HsOAQA;s5rws2{Cxs=U>vKxuHU zms0j^f}Fc03PJ!DnLX5vn46*OjhWPCXMWSIoCTsgH+mrYLQ8`<SwQUbXJZ1}<LY}Q z>al%J?_^{lpj0Mtay33U6b30mx7mE^2R+A;)W<cJPyKuf*lrX1a_H%)q`|`zm7J9K zGfXIJn&OFmo|<S{l5p*i*ot1>a_Nn&(t^KD$r0AiFnml$kwa(r;&FaA%gL^%b9FBT zJNCAfO*Ju;4Oqgr(yuvoiv{$`mIp?a*(lV|me=`Xl*^Za!MNWi!`9%7Pe_)J#?aqR zsaXa?W+ERyNu)M1mJx`~z&uQ)P_CLdj*)@wJ=mO2dJ(J&^n6cHWxvw{moU}k5oB^N zwF5mK#v`C{G5QORJGU3Lm31BLcQ3YrcfVy+A7qI}fGqEOMs-V^a?mctLtz~}E1!pb zQyZ$1EC=R-2(|k2Pjk#fw^U5-5o*57bv7tVuBl6{>=-a-p6Py1g8+Vx3qRH*CO;RW z?OBT$`>`xBx8H8D@bNiH^%`!PpG;!pay{hg@3<HaIe~H2YJJ4%;E0rN`Syqy$zC8g zu5oJ2SL;Rxy-@K|DSDE`ONXcg&ig7TXg_=QVGebN6IaEJ^~ba=bz)Ur;-hCfj_MvP z`!7C}aM{Lj1x=-T+x!}Ri$hd$N?eje`#k9dkcvY8wy9SzOee|v9313EYV9cS@Dc)2 zUXdJ{g9H|1S#61WKF06;5hnoyi_?ADDot@evjjdRtx$L;Gd_<5>%1h9^X9T+?yWv= zqy-Or*|7<&*7W_o@R7aOq8<qG=iioAI=3awEt1ujj6F*;a%A71&f+sl{pWqXvWnrT z;TEubd9Q;`^@c2G%UdpoXm8{9T2Hl}V$;Qm3`!?UNno(WA%LJO`;vc@tgMaoT_|`u z^+%u{fNK1z@@<_RmS_%i_$yKXi)cueD{iNPaezuZ3at3dbm)R{_h~K3$J-^P@5A$4 zDc9!BsI#qEX4Ixj-Ce@mnOAj6F(|CCBNl3#&$rzsykM@h<Xk9v{y`=Y-2V<1ExQ!^ z$7Ixb0qxt5i|VYSc}t!#7|_7?hWRj~OO|V=z@HQXZzobm<3F|l6uv?L8U?VJK)RdL zV-Ni1Duj6@TAG&RvPbfzrj2)Me|;sZYog_K)gV<ROSuLoJ>e4bC>**Y;eBC&$(FZ7 z(Ws4W@OjpWvwiBx&F>-KY*V-XGf6D?Vy32ef22+sR(TPsXCXMwRMz||+;p*MjV4~y zqXs5skr4V{kR(XbclO`~+abAHS@)xLdl>eIz<WW(ymEJ)ojW$^AdaSKy7*6O7SAn* zqcLEPRf8&JhM%W|&~*exsJwtXO;w=_?|z*0a3;4=#BVQ=KDs6bCkMh1)6hlgwvUQh zw6_(fnw3eEDLfIEE}Ns_@~a5++Mu{Rt~kav^67d56#v>w>GMZ1|B1|@Up(<iUArl^ zwanZadmzVB`FU`}(l0-9x;MuZTI%ZJwmH3XTb!PVd%ArKM|KDDDqmy_VC*kXeB{(( z{x>{CbyqpMPVO)%wf5LrOqwSON<^5EVS=EtvG|Y19#?8;o4{N?LG0YlsQv<zl?Pc9 zo~dYMoWzW9f49Y-e~YFjZ8s@Pr=%C3r}`!kX(Nl)s7;YX3e@Z%hHpSv3J;>bLSYUS zsYN8Fi#b%y<@<}|>Jy=s9~RZcmPk$Bd3W+{tyPYYi<ydAv&~54XqA+a#FUslSog<f z31>r?>^=|d`0pR)o2-eE{r&27gbxRSNN)@(lD$l=vrWCVTo-9Bw!uVy@i$0PDRcrU zM&Y<H0;4t*A3x+W+=&h^VmI-Qudv|q44R9vixpwO$IwSzG(~KG*6aaVm~!nKr@H0H zN<1<vXUF~}j(N-v^ysGiWfdc}Rg9({HWR4?$-#YkUC)mwA>IF#3AIsHhWGADl`@?H zXMZbKnD~UUd@kb196a-!UR9E7HZ}}iX2z0r)TG%YVJPf{g-ZQYF3acSeHkQ>{%R&X z?(?I}7h|_%vT!qI{U~L>Q=;Cx_7P!SbhG8>caeQGUFi0Wt@g)48TGK+T*E7S@~BbU zoQgjr5F{<y>FJwEx-e7V8~@xbl1g>kVe$sc9)%Jviw%<xBX{Ty8B6Ite*_<E0wx7C zg`RH;MSQMT{@4B|h1orT2KYDK2F2FirzKGgEFAcdEl~3S$Qs+!^4$U;fZH6KoptgO zAc{BIp<N8pMP4dg9~}6IR<U>#{AaFG9%n|JaaOKJGvAJu<b$!0w1J?}jEhJj(%F@t zK4B7-^k562iqmcEuF6CH;^Cu58P&Gm^psHK1b>zF4;9{50>jqhlml$<WVsSnwT3>a zjSIUoI>j9ELMK=3Uw?l+GTnY$TFyrgVe$`Hkad$3U$a7+Z1#KZQ9-5sPDs=tHX)fg zZdb1DZ-!&;m3NcG!aMlUljX0aK%Dj=7^MZYm+@Z_5cL}X=(DDPvp8_8paXu?CEkBh z)V8CtF<A|oQr5(E<}9u<M2_34*vfeiCs#YyjE{^_e^SHbqFbiKEyl8snhn*LR<V9E zm4ihQsTK4%rHSYc=T)9EG<wcd8strjzF2=VH)GKszhno7bRLLyR)th!r~7!lKGQ;Z z;?BqtwK0BeQnenD|2WD!)-+<Uugl2D7(p6+sOWoQj`i8MOQadrt@$bKA_;^J#=Md( zdlu%~?vKAJA|I1dZM3I>NHEa)p(C=jDT`|5a?UQ(^sM=&*d5emAk+3=@o|Du7iOzX z7Xaw>=-~^l#uhvX3@MO*U|l+@u-#rm2mE7B$l=P%bF9yFpwTuS@^8~K6P*RrVrfp* zS?aGY97YUP&{*^}qv;6rsHPE0KRDQP2=tC$$`T0PHxHLygn*+X>kU$^Tnf=5?kaod zf+!7{(-@I5hsnQ#aM#cLO%HKLD)!w%$BezRXn2+d+~`j@{6-i=5VHr*amJvN^U{jK zZ9HgF)e8XD(_+-faonYM^HWTI&uN$tZzs{8mXzfXz&_yzhD({e7qKK<yc%;yDSZ!6 zts~GV*U9sH&>p=T#G0KNCg;CG9eMr|W)gX&KR=<xSscRO?w-&pMqrOBKga&vk6J*| zMFB?%r$P<WF7n6f8DfMYO?Xnwoia%&`ycz_uRW$fWT6`@IiW@E`diGyL#+~sKe$7+ zZnOBbx3?(jNC??y;b|iK7m9hoa^rh=TXJ0XAd?u=(XWQ>bE**XvbRf&dYt67UP{d) z;o^fyWPG$xqj>uH)ymaQb@p#)f%`et+ls2>DQX@EVjzyfnuMq>HRyhSzczum%;)5f zFLsv9Z;aLLPd42F?L<w&9n^-}2-^S%x^3$<#SIRZHs-S5J01;1j}uE2hY^Oz>E7bI zVi<(*Yrj#wrXU|m5B33?jMe3#mkd!SGL@8P>ul@1ZE8)L`nU%sSGG&S-<hz6FvM+? zn`Er0fw3x$#YnU;a`I83g9{4|`Q6!IlfNz)sa_lvqgh60M<qU+t!-+QxiRW9+V^Qc z{@V0;Y`(9T2bdUVzDXgHCL<lIL7>(3yJEki-fgQ0JwcmlD=DL`ne&{nA{z<#{Bbzx zE)YzWSZJ<21+ZFks5?`2Vk*j%8Y~1+1DSf)eYq}cO5ZnWzpw8<cud>7=|2a4Yf`_s zmOr9e?}2ku%^Imb035eez@gk~=anlRZ~)pj<SjNJ$eRg%@oq<sg1ty!xK{thu5xv2 z4mq@0w{4l_la{U?ss2DkyffTVKVsw{YdDu=U~+J8%qLu+gSiFwhNMst?p~W?K4`K| zjS-nrlPCAotDJiGP%E@ad($7v;4_m%X%H>iiPv>2e`$FxdeF0SWxE*l*G#2GCx+O~ zSu=Pb3GFJPg?D%dn=sYUh0bJzN$;6h7oTgZxM(a}5xC*DuBx*&kyCQzYu-8qZ9|iG zJ6~ROG-6RILjjEHN2Nwp{gYXs7;kVwt^uP9I32M$E-nrTb$4(hx4*-KBS;tmzrC;L z#|6?0i30$L194YQPTo*>{H_7nV|SBv>1znw6>r?p7FBB)cU26Wyj#qqDEV)lov!Sw z0j;7~pZOUtvPC_)l{nW7ScX+~)@P>0DV_j}SN}caz}8Dr>QkxoWr(XM(j2gc+zp^% z+mEo)<4`Me;jZZnE1$^SN4LGkD#d7XI2ra=TqkLsE4pu%h`(fbvfFi~J|68W%0a$g zbF^HrqSZR&DN5NYYVVLjk@OVI+u?J5&zoEzAV=n{mGYV)WT*sGfypK6iP5@v4w9$5 zMD4ZxP@(vA7DSb@TO6PYcGDdH^C+S#PFtF*uU8g|8C140>X<<(4|NNNHpi$xNDMx5 z2&o_WGvxv5$ggn>pLmVK-~=iA-@m43Ok2kmp_s6)N+&Zmxr=TszO8t@4`^ai6h~E^ z-W@qw^*udepX-WYaK~NF;=ZH`;4~5!E=kL<hR?sF7~a(yBhxkN{B^yyC{po4B_(no z&nMihJl{cKmMM!?|He<|fs{4EWc#Tzw*}T=O(7RJ$7GLg(JVbXA6Lqth8OQ?6>F~9 zcJYv4C`RfCM$st+Lg&(Y6v;<2m?llYR*Y`lbR5KVghM1Fr@K#OQl3d4`=b;$My`#H zNdMMld)uC4sjo1_elAkiV|2K7R9@FV)N;vT{-Hm~0F0lqos7s1Fe&%y3B)*7+_d7V z$lir<Gwt)><5}|gHpVG>BVYKeV59OFeCXxXC|ox^%S6^&BjroXms)r4n7XW$Ih1xz zvY+WfqZIFRMzPeX=7Y4ou|1Hx?BxLNLt+BotE#;g`LC*wbRv!7W|&9H#tXYG%9?O< z4W-zZ17(%XlSGHJ4g>c!YzFEj$drFNLMl)t3<(<BwBwl$is64VTBipRnEEC9Rn1qe zcbi&9Jo6;Q(2u3K64CZDu%F*`@drz*P%H(ibT?fzYEG^nI75fgiIPtVY`3ub(MEOs zZ6(l>Oke3=lQWpkXj)H7qt0`c{nW;55fQnpQ>utWelgVYEkiP&N>R!UPWNgQmZ+a? z@CDqqPmglr`CJA@r215d5zt+nBxX_%n572l!X(O+2-38)w50^pooZ~8yoMOj`>_If zKW5;ok<IP*R~5-s#3O7)FnxZ}r4Vl>zgYd~n|}4V#x`xyFizqQPjLKqpO6eGH|;u# zlN{0G79`=X6v>WoVPPqmIVB2O)bkgaDv~4WgLVr;&+vzFTHd+37((NbAEh+*4pau} zr-2~ZiunYxL@E0L(x&abi^5B{wly2Z@sG6BK-)0w5`AdYl$j7615D!mSI8^nMDF>U zp3#L*RuPYs_nj&}M-$~TaN5(Cyz<q<E_*Lz;VxVq`wZPdqxG>yZK}(*o8x4*OAOv- z)QU~w{{_7iAlYKnYmKtHFH{)3!ScsmS=AJ^M+Xod!!46|X@OJylXxs>rrxl1sG{l+ zPd}C{uYH*VAuy-c>;f`>Ww6PbM4W_u>NSqIw14fD(!XHBSMC=Ec_pAU6%Da=@#-mq z26<v$AJ^j7KH6>ZKZ{knz^BR`TlJLxqEZ?PzUeh^qO@5tDhzm?M7|Y(H2VRi_{9Ol zOVDmTL1|IA22k*^3zhPR7t!*1anPCUeZ7)pE|tx8`2$D<-X(rMP%ej46Uh;?NE9J^ zB=BAWsnWj?@s?*8^R3Am*`FDB^El+=c2J=YH$-D9T@@K{v)H)Y)V)U|)0?<{(EU*d zr^cFMdsZY942j79V5;G%TVxyc{&<oyv-#(1ap<IRtlPU6v{fv4d*y4bP5IvT{T{>w zl54d`jt^BIr_*@)>7Y{Gp3^G!6_M*(k=)7N->Gd%ye5j-wuNDGO^H-F<DSL}dNBI7 za&Tkd?2wi;qgICCqKI%l64oa5oH7U%_K-4QdJ4jf5Z`DbF@Jl!P+s$NP-d=OvxjK8 zig%G7EblA5loN6=u!16o@@+UNxif70jB2<S-9Vm{aRw_zC(AtD#({aYM18{M6EhR! zg9Y+Au(ek}C@(Gzla<b!Q3U||?0c!uvi}Q1<RQD1La`(STR3|F9r4GETzki-2HVOm zOO7>L6z_N3&0ve`_{jAV^BpS4(mOL?oPS$v1lFez+FEjMCr(PT)KWk_@jBal(TjVf zrDPR&hwe5Xe(j3kkd!iyC6<Z~XST>+@cJ?JbiGkMJol6|+4`DM`XuToOujP!4+UVu z$~)XqZ@)LCefc)CQ%%00n?L7PnM+FKny1l>Hvaogl4#%jj?3PazG)NeLHmn(i0Z3I zoLMJ2vBnSIRC>8ayAsPVVbup?X~R*or!_!<Bphon1_qb(ge$8JOg(ca$ASG(xhnyP z`!(?V83l617b~6Q{{d26Coy_3;Edf6iLd-7X9*>o#uD01C|^5*R&M4g9#bo}Dfklf zi3#^&)Vs-hvqYCK@%PV%(>PBhv6L1q_@7ubJMN~PX6zH9Q^dx8PceT->@VF-f&t`W zY8d3a0cb1I+oH-tCnU@3`!g(|A0j1U*#Zabr6RfI9k9p`Q@zaAq?|nO!tL3hTa%6l zJP)=bvmPeq)G`Lq-qmdq`5VGT|NiLgXKIkNlaa~ob63iH@wi3EtaYNs@<J_?|1Or3 z8@pAqv0~-h6twHsv&L4EJ!<9qe-q1{&`84)&=4ofhtXR^{Y*0qb$cDOcFQNaIrQ>1 zqPg08doX$as~j=^RY%Cd_k3dhXx+Z&quETS*H)Rw7{$>vEk3tpwym0Qp<37Ul7~Yj zk-C;Gaab;a4?cIw@Z``?OMdYiuc19z1H?heV=IAuG^p|lzjt;pW2H*evuRvBhNn6h zYK9hy<f@}`Gr@PI{GQ=d$O)WGn+Bq@8Ry^8;hG{v1m7hHMOqBGl{j&Tghuzv*3Y-i z_#kmDwrusI&A~0|wN|J08S88kWlmh2(x3!lk^v6|LY$F=ulPh#bYx~x#H@|rh`+X} z=e{#)%RtvUO|A$cczZ}#i->!7z(`r0;1Y=g(Q*K&biKKK^f7mZL63&b#4;eQz~Mg3 zXQ>!`HFh<cKQC{ycZyQe1<0-~h&fIqNr?CfMUk^o2~+U4^{h^kc_g(b7{*d3zR{Rj zkR=j%HK)(Y-cCSAX}QhP0`w?WC?Evi4#9vZckI~91~16`n(<(fY47Z!Y;Fn{qA$*W zg_%r-A?Ef`V0gLB2KSJica&a3R-KhUsK<8-*kC{R8|ocQOLW5T=ZHs8pq)_+7pWM; z069vjnNcTZH&DQJQ}%b3Y%e~HyI8Scw(V1j{DccJsy4O&QsoZO4{><DzX?f|;+{Qn zRxW+TsIK|Y@9w*Fxlw(e+-|K~p;-9$f{3^e!^P=~F%_nSK$!p5(KAfbw=8UyvOLKV z@h1XVX50Mv<~)PfijaRB6eti{Y8Urj$zk8(B?NcTB(R}ntk8I5PCUDxzyq%$4~s4K z${#iZaplq%9>?}!rl{<4h7^veF=af7S5GNr3IQDPuhWnYfRUJrf9l%=6sSh^Qeb|d zv?!yfMO{-+Mc8^KbkJyh=HLrX_mDnq>R%m*Cg9u6Mit^yLY&@7u$ni|VYJ*um{{j5 z0UINKU+8!1n<T3{pt@H}jp`FqdMS-m`(tC&osEB@xbCe~!_9`TJtf6`=v2qkoU2^* zCK~p~PDzfR$1!MGK7#rcqpn&WHq&K|kHLcz{k_xO6lAPeu+yoXzM;7Pc-dFhZ^NXc zkxMqZVpR`9>zBwDVsOpl!EzBnKeJ4B_|+?4lL3zusE%k{+yAI^HZ)+UKdp<<UC!#9 z4_E~50=kZX%Mx|eamn&M3o;k~Q~rn@cXDT53Mu;&o8>o7Z3-4j=NLVzJEk?Iejta? zJHc)0qj<F7*!p&K<_}3_iSeu!DTW=_^z@g#k(phfmMdJbUl}XHt{Voy@XuwS5jOwX zxS8!zpqIKhT95h!B{agE*i)l#9@Nd(#%fN+)BFs=Rxvh4TeI)YIl`--I{y3B0I%x# zr0i2!DO(iS1Sa;U_)jSPD3PcwjBrp({n}~(Xo-V-Ir9|hURUPkTfavkF|eg#8TI4I zlAZy<_^qS#oDIj+crXU?G8Z+s*PeVYM)faLK0;96r?O-9ugCJOO@V;L%<h~LH|gY_ z%CUT06yX?iTT!DrD2;a<UE_9}Te#A?B9j_aCvF`<P>^pDy8|ge>PI77(=8)Rv72%K zYNbOEmnO)i(}o-B(_p4@Ty)9mUz{#WhfC(UGg`$bD2<Dwloa_rW7$jq%dSb5qr05> ztF4^cuNi>`wjPae5J^uH9J^K~jdR8yes`JDhg9MztM!l#kL3ggER}ttDf@#!2zas; zpB1B!ufoW4R#w$unWpXsE~AZgA`$%X!yOc{v-akQ_|x7_mY2!(0{Gern4gR-g=Dv# zd4|Wo+5EaLJI+ST3g2z1+hrIx<~yG{DiFRRr(wYVY7a#zjshZqgXImA*a)f?Xa|c3 z`;Q`{WQ-9!2jU?U7S&RsK6vacxf*(KSqv%Teh)cHxWX6ycL<g4XI0WHpn;GJ6eV_P zk!_DD_J<Bq+|zz-1?Omz2Q4Cavf42fvJ)!iRdi3cm6~}Jept^JDsGAW`*NF>Gf6k! ztpi~s$<B&ww=p>orS;81<={4C4e5Th9%DgIYQ`rld1N1Y_}`F+PcFlCz5<vk0_=W# zb&T4?2Ry8UB)t<RuioXA*Sw4acr$DE0o!{9-m{g5{M!Gh_J6uaN95mT#x~f2V#WV` zq42c;J%#sQ!053$tMfJ8zIt4t<uDfloQBAbQHMPNsjIw1?b}o-tCi3~X+a^VFMnbz zB76m5sAuvN_g1BGEML&sS4zp`USKd`^~%+hlb;~E*(%M)1G5Y{8-K?3+cA|2d-a$m zwa0-Z`NrZ?lK36(C^vSs;(1xOs;=07E4FO>BAXCno{dN)0}FWw)``+jze6D2TM5U6 zJN5M|h8ptltm~;_Zkgh&;7PQqcNCk}=Fg9erxIEKp1ISRAJUHoZ}*{S`IiZ2+q4a> zH}l~N@WkHgQU5Kn-=S8NyU?qLJTsOies9q2fBLmztya$%@6<FV9DcBqI%0rJq&_wP zk^gn2I)=QbO*tV)ed>3U=ZGr{rR+qfT1M2B%XaBX`-U?)at$G8m9#kRUDF%&Zrv9) zcCvQI=TJz$NffgtEu^<W1F^m%pYi_xc@fqQ-sRW!F3!LLj)VAQvRsoKNFVtZ($McE zyzFm}V>s)dq2kqWVKd>aSp=Lw`Ts7&<`!?H4MD)D05farmFz?BD{pX^-NgUoSQ-$c z$GJjwTZ*iD$WQf<SO0n4SOFZ?qOHEGNKsUtgMAfsXf}pti78}B)<r|08#M)pLfrz^ zC5B>a4R3RLsP4+lixjbKDctcH7rSzYS5|kS@p_%5eEQ<;0Lz}0Dy83<q`3Ri|DAAZ z(`Q@9e@Z}Kaj;x4mkOcoyFA07orp=+G>p=tzEPa{-C39C*CNB;dP>UdEs41^isbWk z1U&uASN4XnBBc`-iawAV0%dz4h_(TS1q_dUP(y*L&^yIq3T;=3>x&?^StaUbE~Y>{ z2KCo25T!77@u|gJ5TrO%`qU~s)!)M^mo8NLNAbINpo^u1v5v0@lPd;0-AjvU0y;(T zU}^np_BlP>TW#+q$d%S!ihICDlkhw?0_^Wg?w$LbIXB~!`mXqgljRTA>?ZVEzLtK@ z@7|UU%1~M;LOzXCyz!8jU3BpV&Bly4QV%}I!HrBiZad(>(=Ofo>rQ|5YiqE_x$%Qf z0d+sLC8lg@^{~B?O~j~!`ohB9RMf7Km~rjWWDh?Iqn>*U>GGEAT<N|0)1DrL$cKCF z%5U8F=3S+-7Ylm)Z$>Q_B4=QUT1E*L_wI1~=UHNML-z#v$WX6*WOt}Ynhr1ZvKN&R z8GJD8sqIU|8#f&x`9r@dDN8@(+|iDH|9F;Q@Yb^V*%hh0#mcJfE!vT1sQMlB9*t-V z0Yno0S{qu4rwF#{)oeHjcCYr@amo<cE6L*C*N%9GXEDz7Bm~4)Xs-8|rYFJA{*g!h z`&@)MbQ;R(MMvdtnF<p3jFoVRo6XX~AGsqY)Y*!wxeKDH7JV}@B~3fC7(P6afbK6B z{`S^?#feU%@8;XF5kR=!s#u!X&`8%rjp^~Uqj=aYY5_iPEBgU1t+ha8AA)33QG6Ta zYx0&I^P(nDKZqvW?x7>9G7zs-x8rE1j1#{d^D>H|4Y6l)`+!BFuWmnaU$>9H;8#y$ z)T$-q_)f~hd~v#}%Q<Q4#aZKl8aE9=OYb+?RFmx!mMdY2^(^hrQs*e1v_JjDu_a|{ zD<dK)l@{d!|C4T1j=lr;?Qp}GF?wdz;1VrmiBj$(tP8$6g<4d1Sk^1!oNJsM86Wwz z$fIp)ZH&fU3B8j3ov-2p4w%b#U>^M1mpQK35ow`9Zxz<X8UBac)7EFWlntinOErvb zjI^@Ri(o|exU91ovOD}rW#rODv_b*w41)_~WF%zq*V~-xQ^O?72uH}iUojj$^;J-e zTKGY4HneUdWpdWT!PE<R6m>_!+SHL;Ra)b91i4j)@*#=-HL+xel^duq2S7|zD~*7? zFL9(OepP4Ly{^wZINljZ?z4o7<=DhC72m*_h)pU<{2s$an#TS5g_M@=Q+vIC7Zq|B zJtKup<DQCO4sG4LhMR$uy}57t^B;F5{u?0$$|iIXk8tiaOO|;!W?~0(2OfSaM%_9h zSk7IETzA&C7%eA3_S0tk&9D`3cnEjrJLCM?31-Gjk(TNx3Ji>T*l(?r>-Kh*(hQ-( zywj;BEmV8~HA-udPc>FkVgCz>+tz_R+^)bhG34W2Sye~u5d;u9ngJum`!bTK(;E}y z{U>3j2)szxH=7l}bd+sd6)7&2W17&C>VBz)!LgUJEQf~|Q4Ioi6`Sl`s}<jw)12@> z0i@j>_9tR}`f;mM+wcgsu7F2xz22?xyO@gE?;soTKM%(9K7V`7_kMLUM>AIP!B)R| zBgiPcqi*I}lkxJ{n2LTa@i?f&k%*6<6^@bUxmHJ*VjtxX+Jo^9c*lVmW*9~@fW$n4 zI;dZHo|LjA$6WrMv0}cYXLK<9jRUXrl3~Bx1;0R^QZ|2~(zh9o6kvWi5cM2<DgBA> z&;8kD<Lke>pQIB?f@Jp5j#(v8=JSl|(2!p)`#pU-R2tlemN#jkYs>Ef9$##2z3iQ4 z>z!}im>so{P5huqYx^B!cu2rCX5Zc-Js;v>Y^XIQSB#;c9;vESM=f|$m_q`zxquNT zZ<R=;naX}x)Wg-vN0iWxc5EFutGDfy9b<T5Hx>ZSA_jWe6_?1BcEuZ+o)EF@b?Tx? zlvVlkZ046@v_xtI|JtQA?A#8eTuKLvO3E?=rTBG*odo(U{&@ud#n)LPIe_TpSjsQz z-Ojbfs6)rJR4ifr#(pqGDZe<8yl$7^e#ypMX8Wp2%0h?Vk1gTfel{X*{BL^n#%|DA zE7C)p`QuUzj1f3!!I?6(%@tRI<;{+;T(?t8adWOC_n-|qSUf5(Vt!VWf%G~QU3{w; zHUZP|Mbr<Co#M7LsUgvyKjxiX{O=u`b@MB885MPiVEFY6S3pkZ;F$lG?%_nC5DQjP zc-QKVPJlCUr?M>T+WXXB@}w90{7@w&1f)QIXon%(q{jh4Q$7aS^D#ooMCb%5mrF=^ z{X`FpY&CJURg6Y{aV;>h3U1~tpL*`iaIvJ~3{c(>v=G!x6msATKxXb<N<DYMy3QE> zu;$JIyRi<%-DLTZFL)CmYlKUj$`Y^qOSe9OJ<MgK6J5J0Nlbp*B;wN_=o$AX5wa2D z)UIz>)oOjEGLp>Pn||%cxFt#>7h)@$^;7a#<7Wi;UWW)dNxl8-Y2DHM8(q{HX`&;< z>7MvM@?hS95&x!9Pmlb@?-?27BuQ4TFPb9Fhxf)Vl+tOnp7DZ7ytYHK|A=stT4)*Y z=wuLt|2Xs0t{gXL1%&T7w+Hg=zerII;!@n1s`&m6xcff0C`8)h&t3Mb-Jb{p^aWYL z{C?dlS7QX3&}zG_^x4TJ{H3CG_K!JMd@K>>{J**AQbKn6wS@{ftHLoQ0F$4RQXY(V zde#p2M!cAg%}RDzQw&CR12o6_%18_Erf)?86S2s7m;fz{Tc~y+>^kHBayDgI)W@>S zWkX;uCf;cdRNDrXg5#b)pD5Q`el=&~e3OXdJWhzTgb*3wBQC}!v0*=PiL2D(Bf$17 zhZ^Pm9mD@Q-Wix4`t{;BM$aEHGAf=bYhE=%@Qn@;n3dWY`&^Uf{xNkG6<BaffG@84 z46Se~(VX1035hgL^BF9!bS27X%rQ@p%RZ)4Hh1}Mrz#$2-buJ{?%ZuDTxU1P(~Ls^ z93LrB|3F^V7->nrWEj%Z@7aQp=@X)yzE6-n{q5dBl48JElwMUNUsuFj-2uv4HreEr z3n%e1c&$7>`)tmrYx7BrY2Yp>lJ61-D;hd8LPZyQ8SG)TRG0**AE`u<r%KEI=G4}a zkw{<T!G!b?NAy8|L0<31NLO;3TK}d~z0n#N4o}3RWFSEa$1b%+_#>PUOlTWRg}KfY zm*aLNx{;_3;}RT)UXJ+7xFoX4VqQhd+kl1PN6NpaQgTCPTvyDN(Wck|?{gx(#o_QP zE>tYW-^Ce5Fw0s9G8?!$)c5B*w_mzOW7heGA~q8m*J^c4Ib|3;6>|5YArNjRkSjxo z6^cH6eClDOi&{ISd=jzso))L-rn4)MzmqScT)OO)zr?r|2upo*hxEb>3}NR<hZq5y zKVyMQ#2dA0<=_q}1!}dnP|S-|yw}ll;rKbmku+q=(TMq{(7JExfW?FgNHXZQ>7X7b zIN<IiAhEumi`;6COYEXA-9MmCOy1ywW<Dh?i&A`uI4HT#UEpuz!31+<H(YRTi`v*4 zn`?F@Zg|2Zimx|DOgj5bU0`7NFgicVQtL(yov+g*Mh)F9dL?sr&Zic-PS{2~w990x zQ@zELojfB+^z#Npz04QxD>=Hm67T&Nt;jrz&HayX*M~tYQ>STvgKo5wH)a0#J(x+1 zt00ST@F_2KyCl7u)Wc!EYYi)@$lmT_Zxo>Z`9eystn^jb4P$&3ciL5ZaO*J-dr>_d znJZrSX{0*f{q1rEVRj-u$eBN*F7X<R{EfF-(5(5j5Ig#qxqx6(vfzh|>YjxZ)8pVu z2hoc9bn}e^1c0=a&7-4Vn`1eEeiZWdb0{J1G5ca)S#~1*WquC~@;<d3=sNw+ER%TF zay20^fw%j8O2(1u;74P2vMVpOz90R!CuU)2w0!~S0Z&@Pns{}D%T^r0^Z>Y$d7R>d zohoq|3YXz^Ma2rr+?;^0O6>&tTiJ;at`%8w{oRLi=+oiJYeW3nu@#g<agwzvR4km1 zf+grrnp0vH^$Z$-Yi$%q4`}2+(e3xTlUinGPW^Jd+tAB=@pcqfa2eO<K-?7HRy^~r zEBlq?7WL3mgA{i=dfssmf)`@6g~Q|qfS7ex3|fTV{T_GR`W3syKq_P!J67rW<Vb;1 z?Nu<IwK-_tEOV7U_}9%VcU!7wK||4%RV-BcAZWCxZxcuokdwP?tFPn;LojNRZ|f4b zv|KVor_QXieS>SYp(`EEE<;3LJ!(s<eJb-puur9&ZBaWi7i!*3#gNXu@lR$|K3^mk zz@{&K!1eXR+j(U4pm_Uh2=f;hOSFOknzxk$>5z6R3BDR<(R#Bf@jidk;DyP)icg@- zwN!=LB&C=2XP5QGNlN3sOE{{zQwC6%$fR#tI6qg@i%h*8D7MjcEi8IK$Ho|{>LX!t z-9)3dm`jd6CsL{JQ=*m@p=!|C7aJrCxacPXT=sG2P!}H1#R>(X3GZW@p1vT=S2n37 zT!fgnDh<F>3(wQ>_tIJZHS>81Y5A<JBSgnLN-5Lc$48~m!lllo<H-woO-~PXO`mZz zB6U$gWNa;*d6&wziln=&+L%hxhKy$hv?lJy#PP^~=8^-jrI{zWks|x&+&bZ=mfkg2 zsqarO{ySPk`tfYD%bIv1l3=mzYqP}ZsWGZtCCyCbJrAmkShUfVc-D&AnqMCAgf}96 znjY0PrmXxv-wdSxoBx{ZeL!%|_=_88F~MRcxTePia*JxH9~}pso^!h`zhE~j=XkkL z)TXJR#aBaRb??KxkE}oxD8OmAPdd=Mjvk(6Ru6?*z8vcJ1j7+@sEnMylf!l?x7@0U zNK;o5&yr5e*sr%0>kBLV`Fj%DDkgCR42(+>S&Kj@hq^29tM_+qGeOF=yRC>-CdD07 zm1I8HZ;$KYp%d(@c)=CBwJ<VuFo(f&qfo@Ao@$?Q-4U@QFu|Uj`NyDHi>5{IFNm;C zbctkyz9rgg-@|Aj6~Z4ds5>Xdf7%hTO7=%UJFh0o?o!@3L{%lS%0=m{ezPY&TRw+7 zbxZz3UE+Uci*40c_()`bzMCah9+fZCfIXWmf0^#|cH{DREZpLzcI$)CK0P8qK94tN z*<7V@ps!3&jI(rlE>aFj8O??RU#!z-&Pr3y9iEX8Ved}111N6nyE`G7<}XeohEP2k zcq+4*1|JLA5~b!T+LLMO2m8Y<hl)*cx!lFQrCEJSEQiT-DUQ+RlCd<n%CNty5=dxF z+~?1Kjog*~sRlP)$LmII-dXve+@k&($@?>d%58F3Y99+XyT`zPcsStRGgc(TCPc*c z+p4IQ-?|d_z8A|Dv@nS$%a1#G&%HqlYmKU*R=2(o5GtAPB8i|iYq-G`L}xFelyWMF z-Vl-x^bs<}cKVbQ<p6`C<{>?AR~a$WVR0W~yBP=}#Mx8U0S$aG8}c^b=Cwvy^;}oV z`xNUbC?@^!ET(nUdIn@%J(qDAH6)W2dK?Ono;DLdZ}5P#vbsDlP(k)`U_pI6C+}6f z1KGiEm#FE-H_%QOPy-M`n9EMv4YS^rYhvQq7=&s72r>Z^ipO-xFy>QUc3*?Kh7^H$ zl@S&a!qa;J!IrN;aa*z6SdkgDOz*aWfP=#jIr9*cx-ral-dZH@+yA-0pk+DBrk(EK z`063koc1|{BepG&80Kj{jv|t3q#cf}z@Si-S=<z848u`Xuk70#)}lFDZEHAY$WQ45 zx>%H^mO}BwZzb>WN|xo4Txc#$FVTwODZ(yui8?*dJ2yt_;!k8{Ii|$&(XQC)fic>| zR+N6b4AD2vfZUPF;U0Bcsc+|v5Y<M@;c2<)BU1Cl+M^vu<pdi@7gN8RB8kFFUily} zLv&l&8!L&$+V3#?Li{@zQvjUG-%>x?WV?MvN+&O48Df&in6epGx>WTgBBnpPWT@el z+CuV_@@-5n>E#d~4hU{h_i)0_uD_ih^&j&hr5|VGjVU=|ZqP`%I4a-1I^khbP4KMF zc*VbL-M8@co8K3wHdo5kr`Ew75S`&*&fqr0)TLJf@-!)%Cvg!~#xAh!jV^2KNX~Fe z6OCulDTC@pug2NgeQk%iikD*S^%!YxbinO0A6|<TM$gQ9as_F|j{eee-u_ocQgaO- z(NliV7-0)?s!J$ixM|n%I9pMYaZ?b0U^BqXjfjK&*mII}L`8iZP6_1Pa|1o-q25YO zudRwV2&7DHAadGG*fXf?os(^9G%wHlMUto+ks#mVFwoG!J>Ji$<;}s-+LgTQ#U(v` zPvwXezv+&txbI%mL)=k{c)pP{!(Xsk9|3n(S}Dy+?v#y$=e81VSQVoob&E;?L$}^Y zvXuXDg!0ar-*=^RM`uFWw<mRp`vYXzOAg)3y1Dc&k&=>bI}f-Dja7|51(go&7<=jB z63y4lV?g@0aXh}?&8F!K?(5yC$E**+NWVX2C^uYi=Fb~wtXNKM*`f}9Vz^h{1Wuah zvZFOR0iD|n&{xfKwjqN;d$c}AeJ~JN+OsBG6Be`y_+&=uj=kGuZ*{UyRVhzOb;s-I zx9B=^1XsE*tWEvu@2|^iR~+Y_EumsH@p_R5e^2M{fQF!D-p2W?2i;MsQziWUspI_` zqS-g7qlYsuZS^t|tY+3(pIr~ex?~dD(q%i_63C``d>&JfBVND9XwG=u7IB^Je3BDo zC~o{sq2_%*BE6V-QqJ31>h~75fr}1o(E!1s$K&;@2$nCp#Ah@ZG^@QQT{8HXd(b_Q zT34USlN(%8F<qKG=(1td4A=BGL(Qf9tRGPlf!vCjANh-aNNy>coh2Mau|D-IBZTZ- z7jjf#oi1R(BFXeD*lj6&J*KQD|Gh01slUiz-b-OKF_w48ev4B2MjOgG%X*W&&7WS0 zHeO2-m6F~)Fi`rK>`E*(mK~k!+`hr@dG*g$(K)8<`C`}fWtc)7w-v*g75?Hea}@XA z8zU@$2eru9qmJb%eV*oJ@6EC_@*%E~Q5$oPR`SOX+uO+z4iCs{fWy@;8|wGo)w|cR z%O5)=#eJTC^z8q|>fYKv;Dbapft?JK{W{%mfN26RPseQI@-huesliiTePWAJEtTo^ zPAmk&Z6$--H@18cP3dtdu9(w_qrknu>BSp0(dprE_#_7amzO%E{eH%4kO3N*MbysY z&Vqu#^gkabB7U<Sl7rZvc1f0R-*o1WS@4=}Umv9$qB4!cZZVg}etwMl=xzG5TPL?+ zKwW;tP~L7po!z{Q*-M#Nz^+T#4k4z@h4uim$cFws^Ju{CDc5L<prBqkCl2`U_-rAr z81}Q*;uBhW7OX5Pc^EGwmo`h*nZL)Bnfoo%qi-wy7S$!*r})20r}h+g^3~%w`3Q$; zX&<Q=c&3JfN6_E#QbS(aa>?Ks@6R8csaPGC+8Z(e<o*QP{9ZSIb`g4~aNA{RA=$`a z;bhCe&LC5SSJXzj89F)NWli5xt@LBJ-dcz<PU#o2P!U$UAu1>#a&kf@a)4x6-FS`O zD@HZ-qsYmwlB^vht5^Q6MSG2tYjcRxGZM``^(bPV>$6B)Lln$Y3NGBLXs7zf>+Uz* zMtJJqV-oJMx-fzWyYs7c`v))}om@6P>dV1Cb;H<jG4)f(w7wHKrU#%nZs;$Gppo44 zv4q>Q#b>_}io<OgZjjrkAs^SfWq4aEvZ3u74#2oNwa8Ns2ULt<J$QmSh8Ujrae-Vm z1OsDl#WvEQTSGW34{R!mNWuK24m#|zUG{@um!mG}Hje+57nJ7^*0Du$<*&bi7P5?{ zdF6Ufuv|}pz_#)*tC@mR+vZpIXi8&uQ)2D21rcZ=SLn8#u+=pebn9DR>g)p>pr+cY z%gKbORF;%I@>mwl#c98`4XnFZ7YcXIRg=&Ug^I*tRA|u=)&yjrPvjacwJV%zK4Q6` z%=~nYGAcxdYRhElhz_jhZj40PDw!7{dv}P2Q5@5!44%sYt&xaLFjh<+BYQg!QfmGI zr}oAp6qv8VEi8b<pKMC}y@=;8@oc<{{_qzRL^_ypEp@$|6;gpKj0ln<x!g+i-g^Km z>7SGbTSn3D(P}S!s;I5P{6Ueg3`X>q>)vVUuTauFN_%<zx-JB!`J1(%n_LdJTC|c& zc*6yO@F|?vH%4Jl2n;Z>ls|wee1ZDGGxA<wrDU+J5YlBi3s5~&2DnoTcI5m%=~rzR za5H)3Tj*M7*u3RF_5TGWIkk{hedbKK;1NldiqEPHPeIjiakh|N;xC@qqG7E)k=nj7 zB3sJ|mcMj}x)j_T6c@5d{K$wNsAbeP=5X;@J=D@U@*dgKljwyx>+6>tD_)bD)#ZiQ zWZBz5f!dn*Aj{0O5l8nikd1_5M34AC!{<-q@yxU)?psJM+DM?|_+Vlz`eE(eZE=5q z5xvgsjZ7I2^6hi3c~&(g<}=62;si>+k(wLwG>wOKi^jnE?n>DaTHq|7HoZ<4T_EAs z&pa!8F*{bEpIEx0P(07PwqJj7@obg87Y3G8%<OBBRcG;kGY{%v5Vig8DAGkLufHTl zEkr8iTU<!)S32F_S#gQ5-9NdZG@{BQN&{7*Gz(|UeD1flK!o7Tlbp$C6wl&A0p^O; ztObTQeRh<a-pAVXj7Rpze_tf)ter!2j{cv?`c$Z>JsP71%%+cQyiKq{h~M+?A4xlE zHpoLTSbg?Dw~oh*<L5g5E%Cl?{rn}TcT@-T4hIV4f|W=yS_ZU=$Qi7?81?IE0K}Br z+6&|1X-u(sZ)1QcDSPvr$7Su*brd5zms1r(7$4gMP}If|lJ3-u920{FbDkINg5LFM z@6Tbf8#+$)HmZt-#esv~9}tFUr;Zz{$^A|*wD|m<GCeFuWFq(Jj0ipx#ZEO4At^wW z3kuDF2fct6dR-YkK1i&J%1}&3W^#xvat%;}i)2<|SW899>i&i1tC@;d^0ru%IL<U? z>t=RJZV_p4ETtsLDNc1=l%g6cBVO$nDnjFvBOi_nu$2Tr?>P(j^qebeXD2gb)Rg%6 z*l_dSA$f{B`bWt+pIa*^T0R&Kbnwx}*2F$DK62&<&B#_OqLhqo$-c4=9U(tcw~$ST ze?_tWC*15On;UZW;M4&w@lN6t29++(_$wwrc3wW+)jQ2P-Rk#70;D%Ds#QHbazYN| zh*hsw%8f@Mfza(usAEN?&tr;neWWg8ui0l$pS{ArmMv-Pf!tPd%m{9irW7Yf!h6-C zl2B$aHX%l&#IN+L^^ADW3OTS{KEH)o!W${A9uzK%QE#0?A!ABBrFXHdYPGTQe9>)c z*{Bw$I(es`+E5Mz9)Hez`8N<Y6)Dpv1kT!MSCaXhZU=aHDv;&bYPHE%r@>=qs|>4j zZ$9MQo?F>5I&>t9-JkyqEOB%vP7xN=VW9sPIB&YQha?VJ0rEZFZty0V*L5efUn9<e zLGZ>37i5k5X{4IZiW!ZV>43Z}J>nG4J4vF;dB%M-wv=@p;&eavvQIj&fLuoKt+*$G z<+V@eDK$47kr}jrdESmsg`r;y_~oPSCW(V#E$V==qxF<0cP&!Pe`1aMsmpCJA^*0d zmrKfC+(cB>v2jjMKEK0NDC{&hp`src4q}btK=3QLFqzw~0c1~YPbq48T_Q&YW`QEN z(->Z95ZCgmlP&56Ahg3}i(17b5LuPZAv};sx0RSZ^leiw+*ZoE{Yr3AGE#<5`BpEx z@%VY=FH!XDqht&B#i+Z2mK*so(xO`{o%y#e7%MK^pe!<kiWHaaKP0G~fENQj4Kg=N zOTcG7iGW|+s`&HQMJhFcd5|lbrL>>Xo=!&eG{R&oi$CxUfZZvOy*|4*T)dGYJ=DB* zTb^Q_=xr;T)+(aI>qPu4aGIoG`Mf{>9l*yejQ)$PMRc_Qe(+qOSXpOOqsLISJ{~Hj zdvT$erq4F}^UrqYR9Hls*k|pdl%97c(aRSK7Y6fV4F0X&-c3;hv%oVUR;W%k;<rnc z#QrD6%)kc$?)=^Y-1}rsoa7inMY_rqdw51_qe1;(x5(k#JC17GBoccoYUk_90o)Mt zK~-1%u7|nMUBy(?a-jX%gKHB-$69ZMBQ4ZYerkKf3+NW}axC6c2qXMnd<yG&C<X`q zuGE9aw36mIxg#pu%3gi#STPIJMQq&ZdxUw{#WwS=z@r<V#}c*wJa%gHfZt=(e}3`& zAv(>At)+=C6)%ZHl!8dwp>|FZxG<hCkgM==bOYzhwb@tBAp)<x^~}!ZkX~IDL=k`2 z8W<_KHY?-`VXx2O%RMO{SskNp#>H}9A2HG!k!jBfQ7t9HiyU%IiFz-NyrONoZOw#Q zZB7@Qr%rTWf3IdtR^<_w_(EaKG*Te0b9lU*DblQ4pcQT+3BzQ=?^v_I`%POZKvPaE zQG}?AE21Y^=n${1PZIHS(EugxPLR2xxg^|M66e@M!bMt4hxXOaw9OHZV3CR_d2eq{ z$Ym&v8>Ho&Nj1pTUipU@bzlMA7*Yq)QbA^<`B*8LC}9Pjs{fSpc<Hq3O3H%oV#@S_ z$h5P#K9euTXn8R07f{5hrr6NkmMaq)^^hmgOYvsnjxzD1{Yt0$wAJZ;ts13nq)|PW zU14i5kg609k@<)fK8l8reGxUpFy6W5llTPrnlS*CE>bd5lFZ)VNLw6->nvZz$`F{# znRS8La9)js{W|ga#ejY=B?#t~g1_e>zjsIu?slA(f)iKtzd#4|DThhgULZL}&Tcxc z?1xoMS&GwOD{r?|w>^W4oW;I%^f(G|`CG;y)>Co497NVYjJky^X&LhDcfMUCVxr5W z%I&sXSVT1aZKa`k4r4No;-$T-9D21@7nY}2`n}62hy&y8eY~VsvP34v*l2m}FjBGr zQr{;;d&+pfM`bSVFuAPR5Yda=R&!WH`mqu<k3KoJvVne?F1P4M$;R#F1wHD{L0f<Z zK5|)m1bItYkd9C@Z_Rz$-x0Oed;LR6pd*s2(WvFDouqgzCNV|o4{cgMTF=15YCXlg zQ0|bmCDhOXt>d>UqY;rQS9{yEJ>2c%3dQUcSm8CgIQb{3L)-L>-*r20Yf%5j$TYuC zq*L5C1tl<6phdlRxK12{y=5h<TL%DpmGOPP$}>dfosk?5DkJ0aQjbPhhvgaE?}W+w zu4joJiQF2$>D{VN*bN-k=7TPgWVsdAR+dRe7KNz$TE3h+rb!JO3tCsioDRmJ=X7C$ zd`={&T1dxG(sRc!uQm!Uq1(50)ZpFGdclX@{1rw0SFQVAs{K^1PDBb^Kg287bPpyW zwoSc?u<j<4K}O2u4akWk=3pUvND3h_n;L#u6h^ccix51lypIb>w`uRSRTwvN&CFTQ z&*^<i@$~l>pUN`tf9$B-m_S+0$?a{ckRJJ6?|zzEKM+yXa2dh+2&Ul#ZP!!I)IxXd zw$yV8uYrQ=Nwrqb7~4AA=1Y?BUSMc-j^%JsOxa3QO!Esx5(wy3yFq*ExYGBr4N`VE z!6HQR+-A3L&6o455o8T->^R0q`h;a~h=)&Gv+K1c?XetjI+Gf79MFeO<D3<tM^_cd z=VrEAEzy$WhrIS>XBkGS&%`d@iITOVtx!yzhFSS<y7eZ|8fhNpUzS5u4>t@NItrIk zlh&V`Ysl~cC<xzx<XBBu;aD<m7F>u?|27rt?YL$sd;FZle|5+WQ8=>pN{b3wDzX;E zDZPznThu$B;;Z7L`zm^Z!qhz1qN?HI(SGE<zee+)OFjG1rf`@bWa8rXKzUtA@^LA< zW4Mrvt-7d&W)l1}2t>DX8n3LDdFi5E2Wk1=L&d2a!B(ts*|z!BHFu861+Oql%8#x| zt~z^!F#3OliY|EN;-0-gAlLLW(u<#C|2#h}iJ<^~tz#fd@Za7R_3%WeyHI2s15)@0 zWEymPbb?E);zZ1xksz-LebcEO$J#O1A-bRCdOkt`7yr(*BXdicE{_-hNc+Wc5|s}2 zbLI~|Lbu3X0UKyu;a3e_*^j1eQ>bOlH{s@wFX-t%gvs@Hl!FUgi4~D7t{;FmR(EDS z!t$0+Q7TR6y4Q(E$N9ZUmaio}#QM0uIHfVd&TJR6x5<fxB*(Jv<XVFq$*<Jkre6c1 zuCyHTYg3K`JH5b1Jp*pN1LB#sGvt2+sOJd#1-|14TL=W<j1>2dsh_Z&?$chc-_!(b z#h*)2w0?vgD>c`Znh~dP06RqeD2}%`f+J#|!HIFWMVs1IX5L9EV5ZWi9~11m(NXew z1mzE%>@gQZZlEvs^E15{3C_dea#mjZlp`{0#PS&R<mJi;TYg>QK2Kvr?1zETtNW8I zEddy2DU{Ci-*8<70Ju9%qRtNU`NhD$J>gmsDqkJ{9;_`)T)?ou$|Nd&LSh!4pB=Tn zDoOruOVjoyZ^W!lCXw#n@v0sY&FZhSOIGZ3nV2wJcZ)Yi@Md0=#JV;j<;Tdi2j~dC z^GP3o{*Mc1Xb1>3!|v_T$J;+lbMvVe)1B&ZL;aK@2sGmPBrBo#>|EH_3Vi6ZG7M3} z+O&PtpbbVQ&zMB}eY?#YCYS0_CC&oy_{rJiyX|M@4jt2eydQa~`6&z9^>-GRjV08g zIm=Sp<}bL&OxCGrDkoRAskc%MT7oO~R~&M!wvz@TbfxnDuB5z8e4x)fV;EDzcLM<e z9Q!9P#Heiu<nnqRjZ}ITK8TTKeD`*V+MQ$Y*neH30JO6s%}r%Vz}>V8`Hi^{z1oAN zR7!N}R6Vm(9g&mI=Ur)UxHXAuznFBC={dr<0kWhWs1;<&i)6s{L=zPJtofih)Uv+N z$z%jpM@X>j-iPmg5>5)I+LTIKT%lOjIZIgT3DUAlTmsKP9ai^7Evy!rYzK3dn(skB zr`=RELSfEPWs(w<c~t&j8Yfo%_sMd@K0j63$wYEWs4er~EEHXzXwuC;%x=-9p%l0? zwm@FHWj(#ecz^LrzcW#-YmEBb=*qwp4f`O_{CLY=mY>=0F6BP#lbP8pO?p(TqkMJ< zHB~}VqlTKS&)6w#(G+`%nNxXnqAo9<s+&15CVR%}Va`Zc;qzgr7mgchwzS479PFPn zU*Q#*fEa{5lNu&nHZ&G{BW(PwtKrJuJ1(WUlYb<>o2fAyIY@!r&6i4vGoQum$?t)G zK-bzRp#QN}O2zp+?!795$5z==_6Eg6@O9;2MQ4s7pZfh~YPG~TbT5;P>JQs@IknBy z{bPyzFgZlu@D&w~Q&$Wzi<G^yQAI_37Zie1v#gXC)~>%lziLsP5Z^d=EQN}3IK7#j zv&>buoZH3|zGm~vKfX1@FsNTFY_z7hYxNP4Lkv-C=_CH-)A9oZx-{!DB<b78fd1E} zA`IL6nNNK{yyzc9?xgpZ7X33JB95qrtIXLRvb~Mb4#eZp4(E>{Lb>d(73!@bP&qzT z$l{m>G=e$*HCdm{+wm|5^jvGr#xujT%>%2@jduQ8w;pHc08Z)WH?;S>2IbO#-}P0e zr@aYzn$v?l9GgUEi8KOf<<4uuLPa}1+@cMPu-{hP<LLfpcg81IxhGrxYV<LUs7psc z<Nw687)eYC7v?>6;<+?!fh#a{Sd~}~RY_vT4k@lSM!ipfon6wSs+F4Y&Vto}$yt8& zHZ9jnffg`H%uM&Gr2|@pxkW7tFOVsr6Gtapj1dc$<c8#AYiW|28j{ilg~b6!mnB|< zw^Z-mvB_QBe@^08DBgM}by<`lrKh3HIpOzk#75D0h5fux@oti4q18)Oqzi3+@5=yo zkeSzqaqGMf_qEfhM!T$k&k+f>drj_@7yK&Lk)B*B!zl3&1QNi}L5gYXbUD5{w;QOs z-NHo(P54G<DZ9Vly$`gbm>YxYP$V$fUR(I+;*yF-4fxI+z~8=RNzACTT8ISEd@KB( zd>G7X4CHgA7tdf7TUBSBNG?|6wCA7<$J|uP+e6Q}yU=NV1w-9c&qy$;LpEd3CWY|V zR(9cAY3hy5RJl6~XfS$3%N0+;$9`8~vOc-h>Swr%%R0WjD|W!A2m$7e)*~9YkHh9( zSFF#2k&mHG_6-1fKJcV)m~mGu*Ttq|QNT;%xtcg7O8@x<%)%d38P_tEk9=xtl1S#m zPaxCQ<&DUC!jyQd$?2ZPFb{Q9<-=*cQhsn-S@7jOb+#h8*6*!sshGIucfDH?7yp>? zPW5q!>vgvvI}F&9IiEg(iCPsb|ALX=i{!OgmWNZfkJv~?y-u>?^?Q2s#3@V>3Tr9r zHVAo+5hb<ODDSP+)0bDu6(oHLTAMX*`_$FWF;vQDBVRmAcJ(94@`m*$@sFuwYS@eZ z4>#ZORzSv+njiW0<0-ke@xLAOfUP}JY-HGU<ScIxgB4xOpA2=y!fk#hm!IHCQk2B* z`nX6g`^;C7G9^bWYz}zLwE1mh4kwu_akpi%K>dJ|H4NuDLL2-w(MT7T9F2%i&9aoz zj<A;2`t@$fEtX$Uvk}42?V5PxPm~6T(1ZBubMKHd^GMhRrDoLPL%YS^J{RdN+jDuq zi*9b4F>d!x?b0bJ?If_^Y+GBAPgoZzzMY72yReCBC*4+j`wQf2jh&V)Kc?=fm7DW1 zF^R2N;!P01R(nXHWt|QA!FYnhXN<dQ544GrGda@EK{=z<cDhWrjec{st!XHreO$gU zpo`1_80ci<7(Kj1@jO0f`s_uywm!zPB~OYA%zwH*Nnv((UCW*V`Cs;<vga6&RB?KK zrNYxw&=N$g98g<kHQi)>Nt3qjZoc&<lGE{iZS8Sv=S%YCt9}o0!XjDLK8KP!>9ZV; zAcc{xaTt~PXRwH;q20Ex)4Nym0Rm$bxD)10FeRRcar>SHTib#|KGK1n@|+*t3f`5c z@jljpcZGz8K=F}{X=|nL9EC%VW>1Z;t(bGAeg7y$ONgXoXY}YHFw)ISVdU%IGO9J` zkId=Rv>0GE1j6~V6;#9<r#2bYS^%JyEc5k`lPu?}hf4{kgf3<z%hdzrBmcwxuu##u z9CnE_1D;D$KY~T@m9iQU(DED{GhDXydU{6=dBTGlU&5-j;vFu)NiDm@#GQ2if1F@O z;u8rJT&Oaqy{?;=j5b*x-G%>EHHm^mj+>F>Jp=0W>`@SDyW=p|4~w*QQ&blR#onQd zlwQaiebjr6cTOY65=ivZew3Cz^;V1e!%A+90^QcPgJDFEqmc|XF!-FsDF^5k{>}$D zK%a0FM_QE99~@bJB=@p3@!l1~s3tb=l^pQ_jsLzSf!IlZgHc_#E>GDz#HfBv`&HHi zP+v$--#P)(Z7rNpE1>^6-LZ$U85URKy8(~j+a+a<k0VCtK+S$5Q}HY+kn`!IYiZPq z<7cX_I1<6?E@7X&-^$t1g8M;oOkiGAhSPmNs89r|-up$n@LV=a@h2yKb1iYm1*B0` zL(s#QM$1|{D_To3Hvl0!2!rZN4<FE41X_CAJ8b!9$=W3UkF1`TDkCjFV2k|u5HQ+- z&Ib7_6xGkgXt~!PdTIjQsf|wHK}V++5iB2iKg(RnE2~xSU1;(S-!A`RJytwyH0H30 zx^)_py%9=euK0OulR9+!ZKZF}TZK$ZB5>;ajjbYh@p%7!Or!^cUb-0n9v$e?9^oM> z82jP6fHhXzNP&;Zj_tK&{q0=we3INSB_{;o3SdaSJvYhnu_0PCdA1$%{zS>ua9a`N zX10$cA;^Hcspv<n8!gU)JrvT`y|ZoKZBX35b`CiJx^H_rJmesY_DTmuQ_sy2<E&T3 z{mVIW*^Jw{4vMUw>clS$f#V6&sQhKnnQ1S*_+q#yr&e-+_R(f!EcRh~4+%`$`{uVw z8FbOTO=7l{bZomXH@Dl7y6Ll>`6rsCrFZk?3WWOeU5Ou#X_0zx6^IxhIJl=srGF0y zpm~k(mj_VCZoh1(euReU;{qgO(<eedi7-20$!r%FjrqpHqn+m8$+w=lDuzkW3*0XL z?|^7PA;z2je@WjS*Hr!guONsM$jgo{#L_I?4x+3?=k>!yP!VyAy*GquGOgsM47_Dj zP8jM@@ro|RVhD44A2wM6&KuG6crEV+h9!)&)J*Zyg-^Hd?>T>eeLnRtfpO0J{dzsG z(;*;GsN5q3f}*9MjA2k3ZjZ!QnjcQYdnD8mE3h;hR0jm}i83wLkEE@>48~?R?SSd3 z6ig}u<^gmhe#z7(q2At)frvNYW4&+x#h_J#{=i6s-1UrVNSJO3nsp5?DrkIJPZ%wq zLz%k|qt1j1<nkqx7(BKRh#nc;Lx;=~l*v7opc^Z=%+M6bXpkvV2=(BiADOq4Rn8J- z;e5D31Kl(d&@l}dj^-NhC)pAB>F%$?=KBa8Fv`(~At<p*<1WHn($pZRzfO@Z+JJZG zYY;aj+_B@nq-G|qKW9&Z!V?y(<M+hUz0<qNpnlkh@>I2GlPy&6ddT<AR+2(MXw=YG zOeut5<3u=J!=emx^)p7{ACUPdS}A0rATxVop7O>K6wIR)C7!b!zbSU?yeNc>LRum? z)7s~kK<gvvE5jeG+=kUSX7N;HY(QvzCeTNM_28`D;k)(|FofkmLBa^q{Yrh=hFfq) z&3w1Q;|oH5XToD+$kA|_ZW|YV4h0C`<Ie|vYPKwym&&OpYnh@MZ0+S{Y5EP=LteiR z)(}Moc*vc7uy?eh4h;pPdgqTI6e<kyE}{f&e(|1od<f{)f3C3B)e8FTUq$WO5g4S= z7q*3K@|tP*@NUF*N=RUPIMD*djgN{JBDr9tw~bkm<E8IhMM%&NNHf8ao~=Gmxy#lY zdd0<XW>yFpUIQ5<#qTGNC<hd<t$-M~ERus}5l+-Wm=AwKh)^o$fT==6ZfOygHc`+H zMt;q^LZ*a1yZxA}+Zl0_QCcJ~Y(;x!g&~^=xL$uR*rgw$C3GkxY!ED}s=N*eIj9Xx z!V-jg1WA}Cq_54~9t<+4BW^VQ<U=?&RP!M3sSRZ*RB$?2l*v}mTN<a#09<yU#OA4p zlgFFD`v9id>@dWg=pZZceK(11d+jY7{Y@-qh<gC#n}i;13~Zyjo*E-ITk*XfNe)tT zZq@N;BZD<K_4<kto2;zCM|lqFx!N>9hTYB5RdUV$KxWO6w$K?z$`IEKUwgU;xAhy# z6}2&89dVW_{IsJ_N7c5Z`H68c&Bssyh~#^=k%zou3wJ0L;ixJk+Il~L6dO-RJVz0S zX8X<+7paAesCShR3QS2h^R+Z^bI5k#Z$ozRKj??jFofAL_k+ot@i(~?0v%VwFs~E& z<C$oZ>DEB^0z{R}fT35rT}O_jF=_AjgS{9C;eYTcY5QS$p0poo*<=G5j5}@FIs}Km zvS6xykIXIv6*een4d8My+K$qBq-X&k63Fe<!noQgUQ<k>Y$2BB)CkNDrT<_J42Adv z06L=m=zDnFi*TnU@Z3qJpgoIgXxBS@WP0aBA!F=NCjE+>4Ek3>55Tn{fjRaq&K|C+ zo&(f12b4+Yyljq2Fb{P00xGo?%DFwz#FzlY!XHw&-)oA)W_&3ED=$L$GS(ncBlU&8 z2dQxtrym24YZXh^E%wqC!{tem{bBmDEjO2-Uv1H>7rndq)}lNWgQ7;JhuArF&meTP zYf6eqGsI?Z;1x)yO9weWThFUaidt2pAlejFJ0PRPZ-~Ds;{6qHjwl1!qkCC5XqObs z>Tex)N{jO3Njr8IE4>D7p&0YWabH0g$i^m!3)}d3CJ*8Cds&KM>P@&Um&D1*M-#w> z4-b{D1_5Pl#}*7O>qnTnP-$!D7*Jofw>Lq2wI3pjwTE?VJ^Zw56obBl^kKAHd0WP5 zhF@tL@Cf~=n&_7R=UrO2{R=QMx4J)Y<v&mQ>1sL44fA4zuh<I3&!7n7LR>tmAJpiP z{o4iL%GqnHOf$@<vd+NMS(D#}#BvaVflhR432Z5PGv+0-HPwevZ3F&3=2Hc&J`K>G z4Q1^Tt4udPPk9FzPW(1xw<od<i7Bj21u12U40&*T#5LrJ{)GscdrYn<v#+1M{$8GP z(<XQVS5{RjYv?SU>J*Z<ag+av<hAXu76&Z{v~h<~)D9{u5e*#zCH^yZL~m2X%ZT>A z0Lrwy4W0JF!k8%?ac4{st&q1@{RPD?KnB+sKYkX7qlrDL`ZrRf>M`YK{IL1e7LH@T z$l}D`orD|X)o^0z<ian{gU!Xx9YgQJY=jkEnS;Eo*rtHIRj7@F?IAQRjXNf(YC%$e zJ*|GDAmU(*ga*Kx({zZ@20{ay%{7(mWu2}xhKwm^j|V+6kahUReuD^n#sTl%Hsm4< zF<V}#!RJ8m;sTPHsWB7ss^5`!B_t;@B_JW7>%Y){55hut&1>VXAqfnA=5&CzH7uF| zupZ_j?+XsR>KkzP<>E2}*8A#S<lsTS^NCA6X?!?&X%y7F=G}OOfr0(~M?3TO6%Yu! z7k0;8%jO`aY}&9<T%FP-o;(zxO{Gx7xo#G5bbBy-r24XbVt$*8EWRZy{3@Je;|L+$ z1Q{N_G=h&I*Hqw|5?k4yiLy#TzZVOc%gvU)5d%48WjTAY0_j^|NG_|rd<u$afLMRx z4|_z0cjMS4OxljMFps<D8eswZ(@QCChGi~dL_37$ZGY}a0w|OTALwl#&lkHnJq4X^ zhAnU)r)laE%Z9*=Q}Yxp$yXi#CzdJbl^F_p9+-P9s!_4>{=<4{^;q&n66V;YPXXa- zPI_(T--T2zN1pTq%000VGD~Gp>-WRi%i~V&dmifXdwxR;VGR7%t*X8euC!uAq4){z zB9V2o1r*g4_Sh{2z1BwmUCXZ=V}&2o%x^)`_<io=zA{9_8#A+ICM^z}sgSzIJs%6% zKcp#By!?7EAfN4=9f0)-$XzG0?fbp9f<|!Tqj2G$@o8iiV%>;5rekjdIm~nW=ZQ+! z;49pH7boAlKu*5^X}Yd4agOFWJ{3^)Exjd7?4Rf!5{NXkjlMD)Ki=XX1$`64%DW5E z=M*YFE+qDmZYyVWIS?@T=P8ee_RyojzK8mVSW>H;zFH6!zJbIT8Alk{g=1r}%3DDb z4Ab*L5<V-Dbq|pH0;@NFj4;2+5L@0(<Lv7WbdXiM-1J$ZxJmt~dBDBFCU#SHQy;dH z%)|)~+o=|-59)EC7<L9^+u?yk9pgL07Hgvv<oa$dwHHp8R==So$+A2+$Krc)j{giz zRyAx5S_I?5h)GWAOqo^OG+V(`70_p}Y~T2`g}(Ecqjt>B{+tHj$;?UR(hSHF^W3yG zT0)2IML&?94=+KOxsEJISS@5kKoI+_nF+oDEy{0#cCUggc*V>V6{pk9FM!ShM!~<6 z%T?<$f{AtqCf{S@%zO-TQ^Fv88+4e_zLa9FU7O=ItrFNX=;P3VAyzO0LK4~Ip}!(y z%$Fj%vR4)mVr#&HbFeG~7>FKc9as*GHe9ZW%vG*1s^@B%)SOB(m(hVy@k!K&b_=?t z;2xkVD*P9w@m-w0G-|ilcIiA)Il|2JIj%Zi<>Fmjv`#e?Za&HTfWa7RP;4^zl`c?S zY|YtLh@V=WvOL>x<Rt7aN2c3IZYW-(rFcg|p%B9p6C?N44K9rPPOep!yXm#t;AX(6 z0k{W-5kEVEvq<y^81bDPvvGR?&oV{lscs_Zp-4gNfQWc7C(q`&VQW3!J(IxGFUce6 zI}x(urk`Qj+O!7fC;VNrq3bf&&c=u^)rg=;P{g6n*XnKBT?mc9I&Pc_Z51L65MX43 zyknsRM<yJbaZoH0T+iP1XaOw&l;(kb&~yajEm$AtBo7_e*iyE`2wHxB*4!)}(U2G! zNI_yB`_VL!GX!GSvYn^ogu}yez5uD+$)e9IeCdYx>L-En)XADzTzt0IvF?-1eaRxP z%;bx3JB336Vwwuvnb=-y&NGWP;A|)b_FrbEKYr*+3Nb;H<dpfa=SFM}XbsE9;r%&4 z6^X@Kh0WmeEHZgEf;_`&U7DW3tv)Hrmj(Rt?52Q^!ISFZbI`c>6x_K~o<uLUi{XDi z;s^+o<qs22nI)*#!hA=%xTd#74F-+rgAQWBk6J0?PMB#2zGYwW8dM;gg#Nupcx}dJ zW(8tWu=8>Fp7}FbWK4_00z~{cAmYJTZ?H-g3cAOL3CS2Ms+U1YQ>9RG8H?i{%)mIk z?XihqB)VYj@mVv-0&wfMdA)6$-K6~4HzA>Q!`R6k`)`YbZe^Phg+I`wE#UwwTMAyd z&-!oJWk~YwkqkIw%8Y(u%p7g5U0h@$*IJzcKJ!PlJZ@wldn%Y5e#luaJmu7%*tsFk zu|*<H#-=QRBa#u+n4-Zg7buwY6(;HXD))d5D;0e9GZ^^)@HmbFdfkRaJjlr&%Ok*q z!9b{^Cwd&$5cgR>3DGr;h*893PSko@au0jJVs%m{!T!1mzL@^_am7`_!Z2KjpQ?u~ z*4#c-KpRmB{+Q#pm9f`%`_(-#Xak++8Fg?VduUWEMkV-IczltUB6>qMli$pmcHwVV z{#_2wo!Js|5#8<&+?Kv0UiUhrR-YJPA$W`L{lycjz$Tc#aa+VdV5+u;T#@N!WpS2E zuwJIFMn+%~NSa9qE4NBh-?wwh`C~?L)me){AlD<Wp^_|q4A}$@6u6K^!6T2Y&`T#E zH!2YUoOmWnUxyv32*1RaA>|zQo1jq$K`PW7%urY$5;<S2yd5ahAOq}om^`)ta{1O> zoBW1Btr9SpT!;S|m;dYW+=*zU)FA(J&!oui_<7ATcy%oOWljJ*jG(E+gJ2*dWSj$| zbPd!*(Y|712whScD+Ihgb2WVf8{#;&`XatBvx>%GYt!>d&`sOpIg}aFgF%A&2c*>I zOqNi~ZYJ{)Vjl5<m&{2qGd_o4_TCcF@o~M|{hF?XvevpNz6NfF43J4HngYlyFOrlW zn>4*}-ZJY20^e!;S|1qW;2ggJU}?i;QdNw)IWIpLD~S_>#Nr8p7E<wXYXlu$&F2Q~ zV5EptML@@Q4>m-kHJthkj3kcg`iV}26rKzg{a-K8pXTjlOxj0{s0>(GE+er}h>uvo zHLMnNZn}FnlBOpzP}eo1trjLaA+rT%Dr*a0DQE{`Sw4g~#3ra3vbl^tC_7Du1m@dH z6%CZ8C$cAZ=veF9esq+czjvNVbI3LSwjvP)mD$_NWZ4K)F(p2XHL5*5V89Xp5RHOv zP);u8az_NV_?XcDvF{HXIJ(M1R{{~u_(O<%CP7$PRPBi#eHq_{Z4)9rdkekw%;Us* zMBl^g72+b7+8FhJFfx9Y$5x#Nzf@N&CkG2gz9XNzYLr!~hFuTbD!NX|A~i&=b6b54 zAA{m?_+4fSCg9&3FX0+6vHpPR=a5m;7r${sGoyYzoP<abE6V)>%d4{0??~1KrJk>j zbJIoyM@%#L?C$@X1w8%)jT1SIEjANw-cm5_F0aGzy_tyZu^7aI$=l`ZX^_Z^ah%}Q zKNZ!&L%N)rV2ICuVv4x+hk_o4Ug1UodpM8GhOBrm+D{HMZzloF9?#h)37l;bxc_-` zgv>U*?fp=;3PD_5ocMJZ?)==A(`C>)K+G66qf1QLG)x7v;NqP=MNestd@ixR=*@+^ zdJ7aR2sdUiA&8;XvlonjkEUh10U{;+o}?(arnwc|kh1SlYd#&H?3NKA0+lho2s^d` zrm5|Aj`XQ?kvc$E_#QSOpM95^KOKYLX(<kk(j7Yym%k8nY(yb~^v*EaZEkPH*W-b? zV-88j{Bj%XWX#`SSG9ZD@6U+GE&*eK)lRk)tBWhcUHf4!H{j+RtZMuIyse-eJ$xnh zh@;`Spz(p$40n<Ha&6FK?&M8KPD@94X=emS$KqF-h3#V<MpGE(>Tudsv*LV{bTyFH zDJzU2f4WuHMF%?KbD>GOiX@XB`Wcq>Z_OlTwt)!GKnOV5!()<3udn97bFJRWI^ql( zkKvx5V>)i%ZBPtsIE;>=)MVBj37U6^wGBZaUK`YIg+}hk135W@yqBPs-JEk6G{vx5 zAwn!;D<)P;va054Cx=u5fwbm#ldZX2on1ozB@+5W^kWVgdFlye?poVpZs2=3azlG4 z&~5Gcpd$QzFn#{K9-B>Yi=Ov`qJNoOi!>c#fTyzTJGsV&KWxL7D_-LP?u=D2<+dP# zQ2z*mFE&{`^d~@HDF-@`$nI;Xv~S2Y5?p@AS0fnyt`Nl@K&RsXVKd5{IZ!I<@$+0{ z+*<ni2VTcpddFbMeJ0@KS=*tNi*XTyH!cOM!Fdr2#?o1NB($rTqy`kwW8owplM_Vu z2lCi@InvT#tce9Kuk~|G4Q3nUEqhcm#1p^fj(^xqu*YUCKO=7HTh3lr47lb*dof4g zejz5PTzyWrK&jHeHB@7`P|)p|P^ZHrZ9fi~(@Pn8QyqAe2L_TlK2KD?ztR`$)}T4L z73N?MJ@pvIHWbN*Z6#KnsQC>j3yc8~oV|W{RIM|*#Z)uUM7mali+IFI)E4lucqBU? z8-p6a^#lis9glLNMv8$L6{KZ!#Ep!qRf_bEog4*a|49y{K|{|*u@+2}fYBOK&>x0z z4$;G;0P^pXOMtd+6+PLQ40SZ!9Sl*X5|-@=+t8K<b!jW2_#I`kv>(&Bx*g~Utebtc zm|T5%xIFHs-yd_;6_fSOrD*B8VNvj(gdp+dXZhTPDeTFO<<ezO0I%-%no5e|xrMKp za5fDnfj$Bp#W-NB5CtT!lF*3Hkc}16J-58a;)a>0`Xc7Agik^A-u|Bma6|+CE5=<( zQW3nWtm~n}&Ee1t<U!HrrWOp>c9>)0ktv52zRrfB@`9i--A4!38E#+zQcApbKotv+ zp~|wAsykvK=)KqV70tESO_ydM%llU$WT=7;fj2&B*EwkC47k-KybimVYAJRiArKWJ z2>Nxwt%a4>gM$tdls^7q)&O<F3D~G`ho~AJn%J42_R!s7l|c(Qhg0l^w&WU?osDBe z+7ew*YNRQn>vD0wW#^NXa5gTyfJ1^F!NrVw1}<9vo&rf2~0;Mo$s<acD(G`7&6 zZUOw%k(h%xg(3qPGTxYRA1yi;T1C}mJ@lL}Z%;>V129|f{E=CHYBl;%m?HeeTU@Zv zYqL1G;QG4(FLwe=-vtG~)+UJFi7-WmxZ<AY8Z-P3z`Za%kWp{zfe6-T0zEMIs=)-! zo({9Y5FC>$xMN9r{xMhQz;fXx*?_r0LY?9O<CNo_o!~(YJ9~VdJjs#k3mw!PT@CLm z&gm%joBU_|Vx-3U{0(q;_#($hFNn$-bFpJ1%Kenq%03#*QA3Nv;NkmW&II|e#|Lth zA7%<hLFVB5?c+JU<uH&7IDIijz*+NO94#5xq5(4DBj*~<nVG_90IOa%ul5(!K^rhP zp<GI~@f_WO{|=_T*Nw@_D)3ZFV=@U=V-8mqM8Ix>Yox8%cW|N{8afkX-A{zMX%bSD zymWX9`^8Pn+n?)Eg(o9wM1-5ky8Ko@`xmgrg@m%UStFq>5_|X-#h_F9AVi8hbdmM1 z4s{&JueM+)Xrds1qKC7LngAzj<GJdaR;CE=;&}uH?a<Tp=>A}k2$D<?Bt>G{{cNAB zJJmDe4(RF6jp(<`6WPF9-q<MO{Tp$<X+;QW6L}$5z4HuZoyLqc5F9`|e+-Hr!(}E- zhH+;zYK<4-<a@=J!*(f9s_v!V+XKB>^7*q~o2gCDw}doFbwkXxMdQoasy2R~c;W+d zZO&8f_(SL~hv`kbARSMQ!Jsx9POW6XG3ih}Fz^ZP$KRI?BsL5Jjvo3P%71F`wWT#& z1`3^V5`#|)czPs=Oq8X+BlM34s8z;VAC%;&Ha;-Koyzaxs{7~T6rSc%t8nF1V8pt@ zIwVgyqVPJ$l(WZ{aJCbz;*m+vaHJN3#)MKIz-nCn2|Yh*1|Vt_MeFwk2qC9%)toIW z!z-UmJkwNlqhMHk2vz5;l|sbkF(Q6sRSSJ{qBL$}k4ydKvNKHTvTk)m`4~pG;Sl6X zSOgy;#Gu6P3{aCQJaSf9>S*@>8WJc=dk>8i|J!ZSgo`?G)l6K}!<Tf!Gjv(h@O83k zBW#m+TF}91NneR~;)^^&J4mMq!DD}U`P-X3yd6@LGdqpiGTZ}cMoqoP;rr~x<5H8! zS8cWP5>nVx>)jUkh<@a>5uo#+jEV-+cpFV6{>{vqu$6ehq~O&rnCZh&6Yk+nywRPr zt;yq1;&GiRXaVM7K6`)*rJsUijds(KujY|L;1EUF^~cQ;Ih>ej(F4l7-JYky^%Qp> z{9+mdZDv<J5QqBd22IJQ8~v&e`D4d!2Y_1$M0gM$3A;cxpac`3bAvzU9{xuQzdb2f z79Un(>|as{^yYgvb&o#a<<+}<4E?re^po(E0K?QQ&7sGfRXWkhK7joYl}0dr*#unR za0;cLXLK9=_~*_x`i+EwQCYPK`(;oMBB`#nGb{6(+vtc&$VQplR`&1(eZ}1tK{ElQ z^-GV`UU~+(v7<m<--5#WW6fcdKz4ByeyZB1Z-mO;79a4IrbQ<P#QirK7iCk6a{;o> zVFcNW3B?X#Zbqh;o<c^zk&HDSANk|NMf`l4oCIP|b5+WUCQB@LHw&r#jN}A>Ash$w z5hkKG2-=r6f$V0Xpjr?Lu&kI2l|13-z%H)wJQ%M)h*9}HMvgBMGG03g?GGM>`C|zT z^~X~21zM+{V-H<9si*J3ekI}OgXItXzKvF_b|P)QSb3rmY%CB8t-24Q=7DncvYyo2 zDqd00Dg+}GV^4t9-Ck%B$Xwq$vd&v(28gm6kWbcbreL?Y0W~IJ2*Cjh2k~nJ=j?21 z<1u5zVspTz2^AuI)9btr%%?E5b^>sD!dZf_$nJ)$KlzJt8DhUJePuusO^XxRAM|qd ztZAz2(_AEy=a?907o$z^McugojT?YKPZavEM{!G)gx>fIGJ0gCfw%)vtDf8AEuFB9 zvx8JAY3|`?_I=E0YnI?dxtt8)x3{98@gc`-01}5V)GJ`j2Pm<+f9N8pQ+d{m<N07W z*;d~!QhrtA<uzgZJJjjniP8mEVe}}+JvRa&>Ps$*)El6Zfd-FD6H8|sk~Tdyib@CH z6xr9k=ZBO8l8rSHrH1paW|`P&IRzs>z9XTZOslV@YoS9M2Tj)IWd?P8(=Akwa(FrJ zK`f)7-)0ddIMRnkZ67DI3~+dX5CPY!=~5tj%3EQkyY(9*vF82AHL0Q8+Yqk2H%Ly9 zI*tEq&)p6POsN5_DZp+|FLTp7Y&&9xZg%Iz7@L`d0154e^?k(_Ce?roR$a+%+qU|i zpZ&tgPEAD$yD2qUby7TGsL1EnIo(apB6Zr}i~n+}@mW<sdKtNs3y+FOhFD3lLPvC< zgR1o=CoTY=C33?S?nnqcco=7>jLQ&0ZZa7UQ#l(=^E-yeGYvy($TPHOM9~{<^lBqV zc24z{7C>ScoC_vk=R?j{gry5xOtzVPc^k}HV3ydYwr>$fE=9#j&SLWO8Ic7-W)hn$ z;&n1m<9(!)pLysgXMhebXH^a!uS2zKAZ^`)yonXy7<@;^$H~xfOo)c&=e^ev81t|Y zqnV#U!H7?8Wy?M+XFJ;U*c=={a+bB@w5fxx;o(hD-Ogw1jv^C##&0OjNJkXw%jS1y zX}((3;s|<ZBI~U(Eom{GaWYzh3lRxB9qaY<*S}zgC_&REUc2k?xslCaD=_knOqkN4 zF+)Y=&o#+O7ZO+8^v|>(xkgpN$l1H1YP0d+u{}VBaydE}lD)7*Jpb0JgD!Gzx+~6@ zq~8ZZrXQBL)WkNrd(1cl6^lXty7`q@N>UTq_M3nl0#bVD???iD0|P;AlOWXsh__Yx zasrqj=tI{+*9~vhvl_%}g(GLHi&==QsCocbhz`Nq_#z7q`GUC!)d?p}ixYb+p-b_p zUIqF48A_G6U>1671!p^o*Z>Y8wte(v=h()5*u1x<iL3XCU)x<wFfr^yb6DZ0KZ={) z!9;w)w{gCA7s66Ih^dKKSnonSkD`Rb7}8SMA2KQl%vpJnhPjJAW$V@lD|zT~ElU}N zC8u^uXVQ`U`jHn-dMlQj3B_RgPo*p~rftCWn5f$2XRHB52VHS}0E1LTdnzXClt+<v zdMZt%u2BrQ@vFzSAQt6#uMIY(&c&58I?Jg1d?KT~uM?fdGUR9$JMNzsPsFMCC4wjO zL{<-eVO{V`ZQ(5Dn<8Jv?vW|K3gaAWT1=1H$QR0B(W$wng^w@-`Vxx{?B)hW+++%X zjqK#ao^Wy(n*)9mploe>U>S6G5|i8)I4exizi5NocQ~0W{{jDElQ)8ED0Njs{&TB) zL)fn#$A9r^1ln-?r=SAw2wdUi2k@apN%)!mtpjj+&_|%1RtXF7Na_tFYMwzI17rwL z+9v!?zqAIZU*h;e*rnz?6GV}V;BtsNZ6H5jGfv|iZz`di!%rsH29xZ^90jegcns<h zZ&{fYw^|%!-5#DRLEwpRLGa_ns9-H)kK;-6ExH)dp@~!Qi}BB51&=wxg<MJ=5AF$w zY1VnE1CN^#Sqw9e`-bo8wBmj`LtMxA3Ln%pd-!7$nT)Bh@lQSVYlLz<T(uFRu6sJ= zoe_G+KNd(a&o>8X0ym&l^+#C!j>C)=Jx9nGZXoYubSC||m`u_sYXAVMCo<~S4*5A! z(@fI!?g4EQvUX8ALk5|tBij_YOJ)qIx^L2&@Zo=)OfF%1jtp$G7$Cws*=R_rMn<`& zU$b;(wOU^>KM6S|h^8(PNBj=h1{r%{zX_RMxzEOWAMf0iMY!Vd-LGn)#gns$XGR;N zHDSCC$2GX8TZp(0K<gJ=g?hxbj_aWZipMZ{h;Q&EV@=4!W{rGMg!yiQ7IfWKWlfm5 z_H%p|*SRD3;L4@x8aMqF*+Cil3R+d^`(GZTuJxW+re$&ti|r^H(>%tTuvTxHG#zHT zLkxMMBXjQgqSwhwX?Rpe!uA-6sQNja<?^kYOi?cgz%eRxhN3kQ*#<*S8<Iwqwd>1l zzSxIb_+`I^(FWmEsAv(({8D5ZjM^V%BCBBud<74%kU)`e5?L8#U1>mP^?NJUdTAA) znC2>d*`HqeZlfSA4KHKw#3Jpvyaaa2wfc&LwoVP4sRbj?A`&Fbth%|o-A^2=P#ynM zZv*3-8kB1k)db5_1ydKtNp5A4(pw!Q2FJbsVlr{$x-7MP31{C0QP-k$y6+VQqa5x+ zv9-sU|14rzwn=wmwS*BpzxKqGsfCm@(aJW*b2bDCTm}z&U+kf!Y1V-BfYlPBPQVy* zETo=plL8?M7dg&|oN3VUBR@V;0~mc~0C-&yY|Swk%%e`>KH9SLrifa`Fq;0*0(a#j z0P!(0w_bgr@h2H+KYRJ?w;MUW`eqw$%iG=i&$nceHz(OV;9h*%QLN1APtcXT9~IC~ zHff9={>)9kg_qoxwZPP&Wj&Vy{m2JTOxicswD1zta1?12v>vo&{r3_|pF;DHC{<&& z&V^V;GsGH@x>_Jhrs|zbxCSf-jtK6E7(-kPJkaYQWk)m@6mZ)C@-+G0EN3=CJX9eU z;C3ALf;~rMBtKb+rs#95H<xqj$ZaUpx2W}HyBRHvI;rS-MCTv44tpB7QhA&MNRq#f z^|sZ{uP9(|G<Y0~<M11P=cK-(Mk`h%aE{jw=qnHovq&DxH9)c-2o?4DVo?pi=$deu zx*s?E>{iv$TP>#V45ax}_TFI=355b7(8F&n#h{8queRL}-h0g!t%wXYaLggB&bU<k z!Ne^>j8Q%Z;U+?wkSKVVnK_Q#oJ<DeX)M+AkY}rxBWy}yIYs8-WZirE3PKVA)<h(e zRUd?tvq*Nut9|s1DE1lnhFhyVybP@A5Hpjvk%_-4IuaV##vD#b=VKMX$MUhAqPZOB zqEQf4x-^@eGNtw3Hhw7}<2Bf-Zu{dg_Q(9`hb=)Yq2HFYiWLLo1OR+`3V>+wcrUiS zQe!KlES#!0(H~HG!*g)fWg>fb*+mHQia1+1NjcaZM}c_etq&(bkD$l(q2L#Ry#XX} z@5c=&6GUg2gv1Dr?hzu^qDkfjupbI%q{>`dwG7gTQg|`aigbvXgipOgYv7u~pi5Ev zbG-3_e(yh1yk*=#NOru`vMh>v;08|bCcjBY(fE-@r3p2>9q{|6;*{0}sk%&R=&@P6 zx>5rG&xF-2rIWW56EeywK7I~L+Ig<HGu?}QR}yB+E$VPl^@EdHn$lvEfxO%o_grOu zT62JU=LcR}4p#n5>=fXdkHs4`?h!9uY9dAvtn7G;?NE~5HgOD7xWPc~2YL9`59`^E z1_e=mfw%b5Z!L~Li%<AYO$9}85C8HeAv5r_ft(I)gP{ZbFc!|aotm<q+Esn=U;~2Q zD1<!k3sL08Vsf@Ogz*1E5>DmsRS@f9;X1MZw-;{CUB?Y+yGRX6G$tVf2Y(bYcJ+nV zJK{R=EajTCNGcL%X&xF`9$U<ZhPVS0+53w_+0DU0sCCOhiY8v2!)SNV@!XMN`n{KL zipOi5>`5fB01P?+V{mFLcci}#J(zNWi6jIHvR5E1hk-1e|FD34ZREUX^bis=N(J@z z(@0eVn2!m<IE!!RK$Jba3|97<4GuhPr%Tef1{i72u}(R(qsVcpR9(kGGon#p$rQtR zW>HFg_>4`zwo-I+4%e_vN7OP!ZNi=sj<<n+{dAPr@;XMSq((vXWfNjOQ%xFFO27ty z;-@`6(V?DR9`Tc${EU9rA*Gcfr!Vy59Xr?LFlm~*01F=~R&5&C>NjxN`e61nVng2q zBBL_XYUtpRrXo$a6(vN(J>>?v;H_vDE9i;gE)DJpXAfQm!~kJo)H0cHk>No5)+B`N z6Lg<r)cd&w6c3XL4SlhJl)?^!Z)biUi-AT70v-=T2Od-8W|F?qE%f7QZ2hVh`WtMK zVOy0OcHmVedWGdiIEh^c9&u-ClMFuaTqq*Ca`b!mAhQuC%e7wKjfi1-3#ce06RvyA zik&zOT_dns4Ne1<2<Ra8BJd8|e4Pq98mxqIM-_r5Zyi=xOq3|@k?2k1+&s`1SJJnI zLQwW7NLj721SM`hF<33YyRvEWq&KI8qJaW>5B8-oPypuWO)>B5c^i<nWd%6ueuao` z<BT@n=33o|P2w^n$W`vzqr)+B#X&(wx7G6p+WqVWW5B*~b<4IxVDBfNJM*cDkb3sO z4td<G6$P~!U^mfP6{G_|zq=N>b=jtcSH<>k4*P@|#JXHznX?~yEpZ9H>V$jZ2tOJ4 zXj?XCZ|)he5hsSs%B1alKUic+J=;m3)ULUlEHdrrB-B6_pYgL@Y1boz+bJPoh!(hx z0L;2EO^hZD)aH_l$?V<83mxkB!rAJdQrHs{gj6a+%+&TQZiorpv%nPI!E@;ddwv&z zI=wu5EAzPlb^R2GYZEe8TG{V_E~l`khn)v%%c<LXaCH{r>eTJ#j)&mm80{WWjI5H@ z?$UQlL`Pl^hif^DAiF0g2VoI0f^No0BVzRsY<7-qF3lp10zqB{R3t7`RzU4jBlxoU zmc<GYKgr`415W}mdN|4JKu9E6^kErW1I*%uc^Ig&Y}sefRYxPpC=mq6oS!jD<JrLT z*((s;@M2^u#QmZMp@_Fd8P<Ua->pa(VH@`!&^xw)=|Il|(p_-uMjEt?kcmsP^bqF3 zy{zj1^4FjR87UStCsD!q->0T=gTsT=zeSkTub%hw33ArrP5366e008;IMeAj)38R( z@da`AKF?(1RvjRp`$+_veL>#u&@%BLtouOzfWlCn7;JqWT-kIXJY6?MCr*Q^PY6i~ z(7a?~AEopeA83Z5t)AU7DUbcuOKmlkWEf%%Jbz$l%EtKiPXwo_O<|pbu}<Rhx60OB zW;EcDZM`J?W<kwiKFs?Wkq=(PEAU?ee84D}wIW!FG^IRMT~){x)^!2E(vW+8jK4My ztErGNiop;+;F?8I`#~_f5!#BgH__8Z;$n3{%LW}{@`}@I1*jfEl9gSfS@(1(D3D3p zA4yGYz#6O@;_<H?Vp5^u6+2%U1CKa*{eqR>_t5TUS++}yXJtyI(uP+g^el*}&(N#u zt>^`zP0=rM^(0pB49?}45EQq|eXWrD?PCB}d8sKz&|K3)TCDQ^`j8tIc+$JCkC54^ zBg#;PB{$4l5fJF6M^_4>X=?;+Z*C!^bqV->4kLju%SFEYJBr%w6^q&c0w&_I@tDc^ zcE15%wdfrI_e~MzfR@s!8``tx&K*8ULEX<JKJx~>kCY_A5cl$4H{BKlpazvIfuLlr zumvMUKWvqyqnVuM$v9uAj?X2Bm>REnfMs+W37X>!Sh(<*hvwbJ=MVWzu;^acDi3`# zG@S`vVrBA|;M|uP)mOp2;KJKk&llPiOdip(+qGEZAYg`bVBsa0J3a@!ZXkuMTs?9a zknL~HD*m!~++$+~8^tGO8%g*Rlk!m;Qg4LNUWn7eH~p=*qPsRlx^lf#P?q-S>CX5^ zU{1hEs!-7T9B4_J9mn@pANr*k2=m|k;q~l42bksH7n<-w-yeR3eGvW7q#XggGnp(F zx6n#}zLPQC-_HqG9l_vQjVXK#vk=DKH8{y@p!*t-0Dm&*j0*i~R1e{s_}-1W&{|ca zgx-eoa#VR6HEv(Gm7MPse44?Z4H`4%BplQTgm%JmNfzO{-;VAUs40j)bV?F*oWOAc z;(lT=dC$JkrD+8*Qg{nV!QHEb%u!5UxXAjWsNv)jAYD&6h$a!X1eACjd%8@v;OuV# z$;Iw*T<ygWuDS#FVbGdqlG-_G>+r(e68c}(G8qw=mrz~EBJ9E6uc1w~@ds2d43Y4N zMdHf>bcswxLO}#3C^<xf&<}=wSH|A3OgE4MKd;SZLRCY%m<AJN2o4PhcXn<MCj&A6 zG)9AW(>BS#>1d#p{49^uC-z~-iR*S93}kB|$@B8({_^s#;w=OeNj|rvK%wu&q2uKx zAWT}Bgu>y0z8uFY*nqTl507@G2%X6Fj9xeD5(?;z#>YnO_$IdTYdIOr*&+6*&*rKL z!ZSt#*MZIc1JqXtkv|)VZ?nU1suaUwBsSEJTtEe|0IY@#=~F<QTdqN?xNfVc>PfQF zwG{WxP;hPEZdIMA5Hx0&HmC)$*mu`LE)mZiSt{sudg<NlW?8!DWU#VBW{SMwM&PMb zhgGvzsJk{Rk2GOk@%vSP6iK?W6zV&>Agxfg@hPbNoz>iCSyUlJZsNJ2e-<0&Rvfc3 zGiAN>G|!-o0Gnm$Zn0^ZsafPFX;j3_r_H{@m;CCFp!#PcKUfJw*>9FkdFqvP)ph@7 zY5e6UoD#e<Lz<Ao7BWvB*Cm-+NfOpW=;26V`Ew<CBnisR`@I>DZMC>%U*XRM^gQ_C zEm8>yZDV4vBKGxj&%iI?vtqU+y0706n=fD<O2AA6-a`Te!iy`Q(q4%@%*<=UA$5k( zZ4(;4>iU*5i;$S4`ETDmk{UD2OB)f*myV2*jMyh8);6tRq_$m@0Zs61EbKfc+W;Z6 zh_e^n%R}%b)NFS=zY4nDdgpsTVn^ZlnRip#e3r|YO_eOQ&C-!(Jl0`I62sheAMWrT zy|b4WK#F!(AZyi?<6q|BOIl%L9LUw-nm}GIzW|;$9Q_ouV;S3cj;)^VB7gV0>veF! zguIQK5@0NzWTH7$#x{gumD-ug4Fj02U5QUUCs^6I2q^CmHy@t`hzT!^wwTnTDa5nE zOgE-sXmOD)?_&@H#UfM+^66ksnkS(u7pbWL`X0jU1j@hF$vTGo1Cf`Ul(Zner{=d7 zYL7J$^l8;v!IJ!EnzHURIQ_l%{D>>g1D_gpnF>KYTR}UA7qAbKg4sjy;FK4;VO&6{ z2OLpw(podjl>QPGkvNT|RAy8@&&L{la=Af+S66pfd~DvMD9eD;Q4yKHd+1Idnlu72 ze`#=i*lbNgY9AC{jFu80(J1ZZSzu>Z*dNj|ynH*-6QRs1>ta+EXB+(-BC!cz{sCz` z!{P#>Is<e>emD6EPx4+2xBKy!{Q0XdA_8LRBY~h@$1rc7JBVf%Ya5etSmdy`nBtIi z5y3THZIZ5loE%}+X-m>fTIx3m4%1jp?OtIbLlNbKwHkZjE4W<8i0fWDEhq7#;U#uk zzRE>1&L~8roin2%v6WeYd48O%QHJ2Z5mi>1uUY%(b{uUoD1&-qa0Vv<{$(bpX@R{A zYwXjTzQ!mWO2@!r&S>Ld(MDIplyLH~U8ky#PLU$ag;5SW=pw7aaWj5cr}|}r&#tTd zF<Q_j%DB|n2=LRz3i#UiT#2wy>dRdyzNlbQ=NFl@`|v4U!+oc$_cN=GIoU_}H6Sko z6fAH9(H|h#H$amVKn)r@Ft;U6*)j)|Qc<W(`#vdHdB~TrQi??@Gf!3aV>8mT=7RtE z6EdV4AcxHXai<Q}(=98EnYD=+>;qEsfvD#;u{Sx9m&QO-Itqu%D;pV2#z4+J`maus z(c74bC*OvM98D}xe#z!!_KR}1b~KV-Wv_c}UuJ-9M%Ytiid)$_R^*gG0r}>NCPo(u zLIXDpXDh^wHRn?|vg4r|Yt7>9&mtj5G4sGeB7u3PL7NLY@@lV8M)fgPhny6)4zJ_C zZFJ`wpcN5E(>oQkP%~^v_XfgC-fM~;Y6RA8_c&8i0Lz25(CPVo0JDS1GAHW`Q>d~F z?1T0C(zil;cw8q(e~w~<acmDoCziV;!%Npc;dC{)@-oa8D`s-%JQsO)gqLTh>i3?& zigQiRAG*gZkLMhIZu$*4=<V@bb>d%JRjzN%7MB}|n)oc>%WV+gchu<j+J-TUhHg(* zdQY8z9U#pr%Y~uUg3I$v9y!s<<d~`VmSm7?#wZ;b(#tB%MZo8hFukc!&{abST{}fj zS78>ce+CJ9vZ}t4oVb-HR=iMtW@@^O2>BPe_b*nzb*vmFj6qU4*)(sB$M%!3&P!|b z^boTQQ21l6nuB6@(Em@bG+_vX%n30phNKfuTE!84+r{qx<dFdmuAv2z2xAl5bjlE~ zJ10}4?=|l!%no4LmaPaTP3!b@G=8I_p_dMU+z=qn&=%9uoX)wGxYSaSnlK*fM+rU9 z)MrAVY!xCpMG$5FE1`RPsArNB`a>`OIK@4nW{nVWCQUpRSu+KXIeHWD6QrRb$Um>0 z3*ke5iQcvbtKNs}vdD#(l0~+JDd7Iw=$)4goaIpz|MA!$)%f#Fj_(8IpKT?+Iw-Yg zCt8dowVH}{v8)~rPdXn2%V@SM_NKT2JBoL2CFHJYI9}}%Oa7#L;--1v3h?*oR&Zhc zxsz7*I_SL}`U(|B3!M#1BJgC=3J2=VzT&1KIQ#bNogq5*3*>qB8!p$hdxv$ziEVvF zD5uSM2QnS=x^N|(F;;a46c|C#?Kyz596$;^zrdxQ91SIz)#s+CSWARNe4?G)fI>|3 z2|kwKV-c2;CM<(Mqf1}J%8S2y$k}gIlKI<G*!D;{xp)IRA&8go&ZL&J0Q{Z{YWKBH zb<#FFc2^vUJ3k1<#{_)aj8<waW7X}IBx6KkKth=nff8cdoHTCuptK?`b+NHYO8NkY zg>k=rTo1LR0cdxV_r)#z<Ze{g{tqw!?t)E%2G?a3rjRmgfNBk>g;qmT8$Ht@Cod=T zeGwmWv-^5M0Uch>)>zBj^cXbv9k&Ev7fdR~$U%tO?V-QwNYNW8l(DkEEY|a9%`i}6 z0yhxL9D$ragYgHV0fZ&~spkhf+0!mfIg0^b(+k^Z6|Ckcb8!sj98b6mxVH^XS>}21 z*l}RY?&}Rn2%R+HL;ps>&&3zG&vV)m93x*F;<f>}&S{6x69Vs{BHw_e%fJXR8*h(} zeB{&Ou^Z4BfiZAqbV`5@8omguSg2JrYO=^gTy@%gV1DwAq<^LIm-m>w(8R+G>BMK$ z08PVu{8!r^bDA07$u(vFK<^kUga9<Ujhvd`HcPVHA%77uvvi}M1vma{xQI8WpJOzr z%gr4G4br(e3VQSjcY^iqxfqft)oCHu!0G!*5Sp?l2|=zHdD6FF4*X%3ZUYL_9fvEB zz;KlTH`@j|A$U5x2%LcC{e7=95|8pZtgLvOQ$@EhB?F58IS>^7N<ljWlcPHoCYlu- zRBI^}f_5ue5>DoR(&BV7>Hm&m(nJ61AO#(O#oL%=(F%(}mB=3Yy`Ywa7>M!%y<>N* zQCasF)LA%vlkpRWtpaxr8>sK4`RV;t0;0IYGQ}7sZda^8rs^vioEVtoajmdSYO1=C zV<-g+HONgb;_u@*(hnsfAy^?>py{w8$nu8UQdlcb`h5ht*8FZO=r_nKK%vwGhe31E zAO2M&u#8pJ4a*~#Q{TfW{&~1+bD|X{Cmp)i{_G$}0M4H~c!jNtk<go5!@NK!coja8 zOluUT*Da#ua?Lj>ZPa_)XDYG`aMv2}Hi@8!k*1(Z<y<0bO~8?`R=>|bnKVVeNNEtM z(!^DlVZ4vQG8~RI1wsxxXy&T+4l*R8Q*%4Q2y@Xx69$j`K(?`4Ela8tJ)O&B3^5a! z7^;5tI1yvEjY0vSI)E?&C)+U_?TC=inudz`NI>IYiRjF&WJTmpXu1Nvj7Ysu_UJ(f zynGwx=Pi2EXq?#}RLXP#lY|glNYye_RqP05H{y8VV}6(L?pJ`N_B!N+gjhnul<6z# zTV4>4S`l8&gZRzhaLe#IYvJ_VUdGx2<XXIIpj*C)7UDMJ=q+8#Z?eMqkEaCa9s*Pz zM0<EK!pgX?|9KsQli5>~ibc0`5qO)dY|A5S`*?AG<T(I54g|&4#nEyzUnX5<Q}`ML z^2NKkBZYV!zwCxb91))ZNP+q5+Tu7bxYT9ii`hF+bvA)U8_YR7pg<B~OT-Qi;&UvX z>cAd8Aw{|X%+Ke@_aAX2nXTD^U-Y4ndUgl+Uj`{ySaU}Cg$DqijuF7rx)BwN*`@NN z*HH$y2j*AEl8z&KcYm;I!*BAqj@vE#o=`UtANI2)L8=ykgN+I6Bp;P91<{YWBW+&( z7LpJE*B`=2X~LB_6@lj<`0_*tyOSml%_AT76STfc<%QS+QsiU{$3toetK)IxLVPXP z7C2cK2;7$ej#lX*j>e*m#AtL3z)9z~2fof1$rPQV14tj_o&pJrf5$a92~j_rVVpY8 zEWkwlXc7<|iC<K0pa;kKV4t6#*1!+K-Ny{G2kP7vcOZ?3_BeNRsHHvSEFH`kUcq%* zskBxf7U>=Z_L;B+QgkG#T8;xc{{*W~JreD1VAWM(f!4TdPbeWRfyU(@@Y*d1X5`>_ zY>1R6J;MF`4!r2Yf|ZZ7;uBy6p<Y)na3x*x@-LT5GgaUpHzD;P9*LRw|22SjM<F)M zyKhjaR97PA{X4mVK{1|+f-XNQn#gFyI+6A3h4p+%ns`FSX?fDsPy0+RYg3tC+sLf= z5kJfKhfqPJcf7Ej*v{t>KoVF@EC~n1mLCN5b<E42jSMgnH71HTkCm~d!}fdW)?2uG zf$cBH3p7R_$|4a!J851$yKlxA5#JX?P<T%VF}7guY4tmv$Q0!p)yqD>{hG@;210Tr z7BT>}K?%($O1L`oMzT;wu4-orcVUk5eZu;ROO1jEFG?wNbEmM7f8a%Wywm=lv1HXm zDC@%6JA(GytYUIJ2ou+H45nFla_Z0*PY>GyQ7<v%VN<}ea)|jIudORH6Q3;-?Hv@S z-<@QVI_QAcA-8y_YEn2!nhY9n&2%}bPQr7aoy$@GCYi1oU9vZ@H*RDPKBJC)5KZ@= z2UAaYxbjr5@9=FYZ$ff5bR^f%Z9qJ}*TJ;olN0Ip#7rw|v!qnc1J<z`57ScEFh`Ds zx;+RY=wsm+#71;@>1bsL7G-uFbam6a$=bi=njez9bWA5Mc7!twa|z0?IwtlRwIsZZ zQOiLU4eyG;3cT|VYe3>TIOB58r<yY4V41IDOsMNJsxSJBDDdpM-ymW38Hk!{R<=N{ z`>Zy7Wd6B6veR17zb^;MGMxQ9rJm^Ei7oW4Pzi0@^pTnVulfIf0@Wp2anq$Br&NVG zu*rx|91}v}eU7sG(X@@k*Gb#Udw5@Uo$R&g29lG;sIqjTjnXJu?e<M-A1#!t<B*r- zyAQF8vPW+r4{eM;lh|?>95p(>@TNCQSI)a^l_huf*-DguBW<fXo6{yjl=GyCb%pj& znHZsh;{pEH=$#;G`vB)e%VKPjqLSqM3aV11xxhQW(CI54M=5AmBvikb@h5*3M6Pzk z!O>lVnFUw(O4Z`0TxP^wJ)iiOo_@M5!Jt;md&tpsOM}TAic-E|DZQ--=mPm&+*=6A zGt+x&(868V=%&2luAOB@YQ6nx9wCE8)$S)o^;feX-OeIh!#$i<ch_|iS5iM~pHa!v zHjX9zQbwEU(b2dUgX<kwn3KE}=b#u{A5K>F7PK3N7L%&ZCL!|kom@i&7T6?!lZ|(K z>r`cL1(UTqCNghd=xtQLj3QFlQH&T@hl=eN;A>tkN3O+A)F>(Uz>=a%fOe<sKjGvZ z1rRu7rOn-Nt%EG>g_MHQ<ps4>w_8e+xXz>#5DlNy+lt1N_Zj<ER#HR$Wu|D-;AZqU zg11P$Y-O8fLiAVT#9f^_FGL<U>c;(M*|Ks8-2zVMIRt9bVd2V?Paw)b80P(Dt5GzQ zCT_Tq#-zS4kNdW07!=M>;a|iI=lXOOGgI!JBuK}Mbj1z-cla~*?CzabM!W2HdkYUf zu5s*pOk7Ag8X>C>iQG^_yT^}eVzdLEKnw(%TmFoZrp(t48i?N+M)@Xs7e{@RPQAdn zqu0F%KMKlRlun4+>zME!qhn7S<{mFYRYTUiZU|vf3-seACwn;j)HXSJZ~4?pcx+OQ z<6y6+Zf}GsD0<J}SdQO~NAkX^jh<gLU9O%S(0nC8oxbVrFQ9UQrh4hN;fd_wfmr4E I|GV@50G!B)RsaA1 diff --git a/pykeg/web/static/images/favicon.ico b/pykeg/web/static/images/favicon.ico deleted file mode 100644 index c65e55da29bbe76ba0d483abca851560e306635c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5686 zcmc&&3tW}u8GmYPYb)TK!|iYp5CpAMKoq&<bvYCftlXN_?iY!bwsqNN(Nb%Hi`?>- z&`J?8%>ia0g=P+&b5l?Qr-001-fwu<IiLQ|bIx~mP7wZ%hoAd?znAy>-t#{1bN@fj z3(+lfE167$`F5Ie8&M1qMMTJV1TDvUA=dg~4X;?S?ZYH5WVypO<Xr|ccR6OvoJr@- zo$K<qFQPHl&!0a}ug#f5bLY)-oBrChYqWXuW~!~NrEwYK=?6dj5&iP1r|Ia?qt`vF zv8jo+ZQDjAB}>U<@g;AQ8M7btj_N}{o08Klee1q`w15A8-IJM>O~IjIlrVS*-8*bJ zB@9WV^syOq_3G7b&oK0#c>e?B<zuEhy-l{^V<IoS*VWZsm;R#-8)y*t#>Nf88K4(h z`*=Pt@4EE)`31T^acGj#stopXl2THyOTTyTUh?%1fbNMZdwB0i8k0VjGBPu1?6?ft z2Rj*hb~RtTc#-@Atu!<_h3@V@fCk3KlNbD8)5A=!78Z6(FR^3x^`nQrGuc&s*iY>6 z`rNtQ(w{kVMtxphQ2{xE=&pPE(<6_5mvVppIE@%JnogcP*)9Fnty?v2<Q(z$&Ye3E ze@{Usf8{@X#7H`I>Qt9!R8&@y1^dM2)1LeV9Y1~?XIYfah=urs!Cz>@#Y>hr*~&!o z7c8KspLv#oLPGTnAG3va@7~=dZ^IWwMaATA4Wi5mS+s85I^BEr>{%)+E2EZ{mQJ*% zJI<UvcmBe~OP8<w=jwm2@xS)}yZykY2M--Sa`f2o6DLnK?AW>Mlg6gq|J<{;xutbq z+lG%f{-tiy=D%+F+t$DTW83!niptgRt$DwydTq@IAJ(p0|Iyovmy|3mT~@aIofRwJ zUG?YkIe+-$>vQMLU$F3vMMcGL{^_mXzBps%te0N?-7EP8vw#0;;cKuH()*cbfA#C% zOn>hAycfQYg#YnReu{K`3@&?OYBrMT!AalxHsax7`0;xqMvfZ&jr+!YGabP=9!kc= z4?>zE+LKdK(~ztYy(6RgM91{)ch}wb^dB%V)?~K$`uPV0T7!Z^LVJaU(=E4t>C3l$ z<*T=U?dx~k>E-RCxah$j!Py9m5g3BM`T%$xIBQ!GyLbCszI>VATeF5k!@@ZtGKygq zhR?XMv5_xby3~pG%9Sg8`t<2e>o>aa_Tt4H*(aKjtG3}|VvC<YXJt?1=9U(hV;dS8 zcuGzVXHA^Q1+!=Kkt0W3es||XbU-jL@REVo44iNb<U7Ov(6fWv+S+&-?2&r!Fx@A= z360Et0ah+szT6$Qj=g*K?BV3pG@NPCvw+i#Ty>m{z~fDuHZk%Zd;;zE!SAxi*o(QQ z<^#u>?!0t#bf}JMcl&w5KQJhS)5m3~-mR^zs<TZ-*vM(0%8GB`9M7CJi<_I9-C@tb zIL<F9;9g-7Y%=?*?M1J=ycg83sK<Qa!UaY>wb?}CLww{cgZe^jX5u9!C2sLIHj5m9 z06jy_`2=zA{OsDbi>FV2jsXVTC#J8%_Nu=<4n*!PTedipx%K{jRh6EL`opMWN-KFO z!+6jWG4P2adPn^)PQe#|#6`u$jQVA4b$f0<a6t9<3$&_V7A-1r-~oCNerWQ;yl~+g zT)lQJZ{NOM<%o{yr+M1m-tM;VKQG|n!-rLWU;jWpbm$O|Nl)+OYsoola0n--q%m-q z0nZHNW{DF|AM|*3{sCN3QOQ>1fZ~ButQoPV`6qtIZ?cA>!N-mr^GF2LYvmUZ6vQY_ z?Clg+M!bvuB9riSUPI5u=oLKTkG_Jv%@($Xgz^(pr@^lQ9No8{4VP6<!AOgZKV&el zQm`W>EsfE;dBk6ERxm%LSC|cxpeuT3VBaW>HNi>rATInBgTa3^V&MSd*OTYOi4!cb zZw(3IjLZox_808U%D$h`Dli%bMmN9{va)$>Mh0+l92XWAdcvBeo}w{P`}zRu&}#sL zgB?CLe2x2r+627@c#l{9=tNj#_v8`WMgwEZH~2O&DVc{PCfR)K6l)HjJFN{LInoo> zN^7fwsdnF*dC1Tt9R@#RmROT_%|o5d{7Qbl$NVMs1xqxZpxb?8(m5(RM)?@L48HQM z`w*Yu5s|!p{rVokpE}fe!FKeO8qYqchc;eLxo)q2h77~d7qp=_>8Yo*w3Ma(ICOUM zvr+4G#=2loZtmkfqPrpgi!)|ujw{aCc{pR8#(}X8KfJqYl|kzEEOx`)#Dxz3chDTf zored+#&K+1JfoR+<bgB(${yU)T<G2TC`P@WH-Ekh3GQ5uUMIjBq%z>D!MLTM=Y5PP zKk}$z&y<{8#?8is_C`L|*3@XvBKapZ9QRMgz1be$ChhyQH-xQ2dxi7h#G#D4HA~%} zI_=3DVd+96xQBZo*Vi}jij^yY;h(bfLDGLpKQ8r1V-Y?#;?K)u!>6XECYQ53{g57T z>C#f|y`+}lUdRIm#%aG7U=7xKC_ax*NZ|7Fa!=WHqL&`#<Bc2n!`fPntI}o5^uAGC z{3hd;%kQjM!Bth&ykp0X9?iMW3xYd7S5;T@gOes{4UjwF&3>d8!Udag^LF&YH&cfC k`g+dE&E<m!58h0+4qlb3S95q|B#Rw-;<5i5;Quy#2HcR{0{{R3 diff --git a/pykeg/web/static/images/info.png b/pykeg/web/static/images/info.png deleted file mode 100644 index 3d92b8efb3c795a73e4cff667b064dcb41b05a32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^+#ogwGm!MqPT>SnEa{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+JN*1_=LDJge-HY-@_5P^8f$;9N{Y- zy!sL|>6l33TEY0$2d=(k2wIXj^#o7!Du$q?$~l_@x(+2wIiZlbal+OcAHM!-Satcr z{r3X#Yk+z`xCdMTnki8d<QEL&Vgn3kh4o$m)lBkqaSW-rl_cQK(7=$C@bp<iVp3Al z!v|@s913h^a&c^KjBIRia%MnDfhS1`0%_0E6CMb$042-V*w_Ta92HLT2{`cR@bLU` zTGQiT#_hmhXkchiU}W5U!-s*9C5hQG!OVf7@ruJu9U%9bHdoqaW)^`HJ`1W8+Pwu7 s8XU?#8X6gOF}`KuP)IRnV3A-5&S9Qab$#PSpz9bsUHx3vIVCg!0Hk(}y#N3J diff --git a/pykeg/web/static/images/keg-header.png b/pykeg/web/static/images/keg-header.png deleted file mode 100644 index 27ea8a80ab61c57d551d58336f13b0058645dc58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109532 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 kuH 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 SK7o7y0000<MNUMnLSTYu6!)_L diff --git a/pykeg/web/static/images/keg.png b/pykeg/web/static/images/keg.png deleted file mode 100644 index 520005ebdbc716f538c1d451595039ce18b9141d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55113 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 diff --git a/pykeg/web/static/images/keg/full/keg-srm14-0.png b/pykeg/web/static/images/keg/full/keg-srm14-0.png deleted file mode 100644 index 8ef416e311c211e2fdf9f6ee1f82374d03e97ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415151 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ⅈSjYL`{g7X9K*Q}`Ku)u>H#%Q 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 z%0A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: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 diff --git a/pykeg/web/static/images/keg/full/keg-srm14-1.png b/pykeg/web/static/images/keg/full/keg-srm14-1.png deleted file mode 100644 index 06fbf3f8ba853623a03f62d264ef69d888bf372f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402516 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ⅈSjYL`{g7X9K*Q}`Ku)u>H#%Q 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 z%0A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 diff --git a/pykeg/web/static/images/keg/full/keg-srm14-2.png b/pykeg/web/static/images/keg/full/keg-srm14-2.png deleted file mode 100644 index d2204b137f8e3a2a08fb38eae560a9582f7d890c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346138 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ⅈSjYL`{g7X9K*Q}`Ku)u>H#%Q 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 z%0A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‡ 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맏Nb2N=Ll4q$8_98%TQ1J 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 a1D-ekN4`yD*&5-y0jR5Lsgx>NhW!uIMZ5(7 diff --git a/pykeg/web/static/images/keg/full/keg-srm14-3.png b/pykeg/web/static/images/keg/full/keg-srm14-3.png deleted file mode 100644 index 4df786d2baa87e1bd5cc789681fd141ea6f361cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279080 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ⅈSjYL`{g7X9K*Q}`Ku)u>H#%Q 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 PBng^{ew(86eDw4{fvli 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%0DU;r5#=bye;}579!_+Q6YgKCsg%C z3KT>A7iUCf+Cxsi&Zp~&zSbV}imt=M`f`3U^<Ov)7J7Y{0pz7)%1gf^;o8&MZ?pV^ zo3yV!CKx~jR_!AeA0R&vvRzGHj`KhBiQFgC7>}!fzf}iyMqV$~-Tya<TZtfsS3>4R z8w3e4tV40GV>*Q~j<DB)jE<(-V)FKv7Wo5OIFPD43J<Wm&<LFR{(Z9$()-h;tO&HT zd*j9C*@mOM3*UCyC3dZq0v|j3UnneNAkzMr`!hQ$SkOBz<^AU$%a;(T=oB1af>%^R z&BFFlhhQm%KUw~12@&NN(X}f2eo3zYc5lF;;P?Ngr4+vaLM~qX<r{Kv@(9cjr?-Pe z(BfcZ6`!{IBx*4O?)7v_X4|gFH9EkBwiT{QldenZAICvTpi5B@nmD|EeQ_(#Yt)PE z$$m?u`+qQhpLUU&hWO&wd4!-cM+4DQZ}wwNpX*<vL(1Yu`PkLn5uuCUbLRj#-CzQ( zI@Ya{K(li|0Gkx=ai226+<FzuFiLS(5)k;u^A{QXAoQy@)a@CHK|m3+zDT7v#;3W^ zKm8c%0JCg3B+oa*&8ioL><)z+*?-*O4>=F{8*7~i9#1O6gY%Kh3a-K#N@A$_Z(ug> z@5Z8?+CpMqB%UkG(S4Gi?2!c)oj;c-hLYRU-;L9m@R_VYj&m@L=t0In0A*jh^rtNU zffIO5_z<S}{D=58=%k|Ad58}vC&GUw6B4xzL-T9wthEA<62rD0Y+JXj46|Gaj8^)r zg^>Op`dTPx!>;Jwk1<}3F8}9%8t{)ikp1{xVI^F8{P_M6=){*wfJF09G9awHZ2hGJ z8PC9e^w8%X9K!g#qtmtghpPA@<CAtt%d#9#<}$O>B*am*v-|(T#%H9`w3yE7OnG`^ z&E)=1c_E;v!Y@#aI@zuexwl025=|5n?&udwMPe%z7{ICHrw(xjiZ^Ke{Lt2pw!d(* zlY39|e|nLE0Z2;NiZ`l)m>+XPh|YZwtR-azEGGXSc?)`4UI&Hm`T>yAP^I4)G93OW z06r%LOc=ikZVTVg!cp_vGUr*?266w5rx4f<hM<j_iumcrXsoxvj}DHn{hZ|kh+jU{ z(9EyA|62H_0U#^?LKjXF_AhY$qa!^1q0}6K?6snI{RsPg%Rl#lCLhWBYXEw!t@1nD z+xYnBLZbNJLLvwHwvZw^@|WJ88k%z9B#faNce8WVe<*5<OI7LQ`HFYXsPpFXe@uOK zSXAHl^)PgI4=vIS(k(4Wmo!K>QqtX>(o&)V(jnalNGjdk-TBT8etzHgdH9q2%)R^U zvtymL*YWXaI3NL6ZOetE5_JJQr{7P&H&i`w4A`e1QM^riV1#^szYkq6GY&sTjLTWQ z73$T~iqJvAzx^&1zKNOM%7!phOX5t(O!uXH7_f}@93{d5!@;7q1K?ZrGTV_JBbzz> zf$jRNu(IHIxFOxIo<7X^>!#zDt!JK(aJdafEex{V&GwKeoz&MhSx^#5@;G~)Oi6nI zFU(XSorkr=x}TFhAmgbp1*UT;X>;~Dg-O*YmvER(2grlwO9T`|Rdu6V$ado1^cNn} z$@HridftmSuqobKUls9bV(INPpix3T=%oxoP*49$4rfy|)0DCE-Z#8^b^4_LawTJQ zQ|7nWb-&zU>xl&J1J#^-Ug(Z3rban)5>wSZlUYmT3=rnI#sKN9fqnN4GGq%Pk>c?- zwl{`9fyL*d*b$&lkfRM0h1)K-;lTpTLuhIxKS|)T6G^(cv)TS%ct=f^el#|$HlciA z5Q2%vheZL;=|C)A)9^WrvWX_NLlNilw|WoWf^766<-LWk8>IDx_I$Y5DVru=p2EsF zWrrhf&|HwVv7cKi>}n3Ao5g(W7~;%gfuAQ)z=mH$khe4i`yKW#1=f(B3%UtoTv$hL zI!ba;V|g;@661yI-?EVfM}g&C?55dwv;^nM;s2|@i0#^4{duBV)ldN7yDh-~UZwws z+0gd2x5GC5<1C!=k(B?M-BdVue?xuS{6J5vdQflYkzxxr9m8c}mtPMa8W|=MU;AiZ zb&roGnBX`1_pKekL;MKZkiJF>#f4pp-t3iXT>1zfesxb_@e|xAfn8$#k5M!Z2_nxo z2EIzedD+v`o{c}fC4$O;+5aWUcMXk>$KQcj>^$wPU!Y|hC$XyS>;usTpY)R!OEU$( zFV(s@1VDQ!vE1_D@&P31u2j|AY<`J3-ZpInP2N<vE5#H)jifxS*XYMZ#~EA}Dm<I# zA&FEUnn=^XKD@+;70mv#xvIWf6!aX#3ttzs?iMGR&*=yORU4)KXFfewy9M@OTQh7L z+C_-AcaJlqO*py0s-gvWV?%BIAQj)oZg17Ly!%79{&<R0-jo`Cc%oChzYtm$$_^Ym zw~8*aJh~0*$;P|&xVN99LY)Gydqp8*oJflWB?zb9mP6SRInu@WX919}m_IRI4stLQ z;neFDK~{2W!1Hq&f7XRZ`~x2g)bwg9tY?JO4=I`Cf;n;oXaT`HvB2eJf*`O@JU82k zwd+d#Yzr{XXk-9j?NrD_{*BPHV>G;fC}r~F6V3Qc?;n1f0z+-w<N%hR|JM*vIV)wY z=Az&CE-l?&DNN#6rW3>$JSl|3i%~p>fv~8HdMl0m531f0xLlM~>9up^IR7>3X7jwW zr_9}R@XmirrVG}@3|>1bQz{=rJH<<O$&~d?!`zqgm{urmS(vZR*6g%G{^gM1n7uUM z?O)(pa+S~fh3wf~0cbc(N(lBNQ$&|V?p8vLUq;IFEt$w#a#IA?LhOexsc@5oSIoA# z2TL0LU68^DfXOafkPInN+^u~-vD=e!Mi4=m+-GvT<~vslsSYtAfQ<A5V&eC<cM^2g zzoOy+V%S`WM(58!NgTQwoM~Z6Udmo6uNde~%>FqqLShwXDFVQC>d|aRhQknW>;!Cl zjt9kk2rq^aeKHb0=aW2H=I!xifU_(#+p}k9NBFG8B?}iP@7Nkhpg#wkK53p;(orYZ z=4Ttm!ZaYzzFpHRaD4#Dyst}c2!)qcPrlt7-rmj`@E8m>LbK?nNcLB9l6ZpT5#$d% zJ4;Fq%)RV{to#4lD%1n*4UdJ>qL29=5`0%sJnCKH`K=b$D~7b|YUCtrQ$C6>Pv3!k zzpbCG0I9EOlyKSezAXy38)BQlr}KQ+xq|{`EZ9L$H)4KWyV5lKiP9Mh#A}lwI`s#; zSpV>iaNj34RzMZOd?Ql&4NN(g;&&wa7H9`ig&)chj^`BFR~cK?VzMuQ)h9|u2t)ZC z=@}!#pKkb~--(Upe4nHnD*^!NhN_`Od81)?@QI8%EL?L-ryx`B$=jY^Cz~gAOc40& zI{>Q+-C7NxjC3)4%JyrQZG{gUm%;1H$%7J-@HEjb#k5A?_t`u%Oo!j7t__m(enO#& zmB8Dy6_-Jlsjy9@52Gbpo-Y5wRT2&v$pol(C9m2}`)x0$rvI(CX0kN6+In0E_p+Rq zxwUI?f{IDS`QnK8s{hLQOv{G2lkiZ}3{BX6wZ|fX?6Je%vERdxzJUS4Z}}7sx|+QI zn}pkB&vi3|ZtQOP0QGjw2qwG^uLrs~slQ;{?bj5r{jhFN>>rRAtPck$k?OyQ;L(Sp zyPy016%HB>)X@qOe%={>F#1sCyK`&#Sfl}nt<z`v4@B6Y1{BabO^8<$zx@`QiU|jH zG)RiY&0i5U2PB%pZ1w=ab*0ULBM0nhqhJ=SSbrh3Q7H_0EL^=|YkUj8yb74^7MRU@ zF2&zbqFGn{HSBx&L^L7G!|Wn7Y(8n%L>-*P3UPTx6U?vT3I=g;NfSRU1yYs;09ycP zMpsR&5KX`RoeuX>xsvZkkJ&xp(QXM4<b(pCN`mxFZ-P;yP17!5OB0(L=p8mG1yu!~ zn?65|-e_60b3#PUL|zHtI(@*a-1xplRvE5;88>_vy!Yuy;_L=sWjo;TvH;NZ_mu;d zggAGiQ;_4WA@?3th<G$0{i5%G;2;_<>6G<oSDn6uMUsV|E-~fi>*w9}vKQfIa4n&E ze~CSwL5QG>Qbq+1NoXVl0ESAyN!g6C2Iuz=&NNXkWIP49aP+FKoo7rToqePY=NppP z$~4jV-|+?~G)SI(#uN&A99QxmqWJg6)iHXM(gdCZVkoMmZER*y^lLLbLa~@t%EK>% zI{>ip9l;h+Gxok);BJtwdBWqX&*#dUgVvvQp|ujz9rCIe>7!3>_yBBoPd(`h9Va8n z=hl*dzTk;4=TS-0K=-C#G7C&}1iSqkMb678K^!Ef$Us7|%PScSqbzqA4Q2r-*a`if zQgzJe)ax@+9S&s|;Iuc?Io3t6!`P|gIcM8|fhN|b*huV3?lmW|u>{Y+Ike3PX?k*e zGcSj3?^<M%NATvkZo}zB@mEE*-3I~xbPK44$P44)0P>dHion?u+GtcHJOz1*x~Fnf z`S~2o&vpXT;h^4Ot-hBN)g`Bn$TIwWtOrxssP=hdLf}!^Zw@pabFrL_-EzCM@9_YX zECmWj(2ui4<QNP8vroDrO2X5vh}>@ZWe*H9{a=G&ydd)#Qx=hl1DHp8s|B$}JhH5` z7bW~TETbt7ygH-8qui%o?H$%FP{7g%Qpop~ett);HSsxh%Q@X2q$yK^4BcaJNC+dZ z_uA=65vbkLX&yxZ&E(6S;6nSm^mC#8vQx<&7K^aQ_0XBMKUasX{trsG{)W)=N=sFU zgoh)WfzXKX_k79!%Cck{El<z6m4WjSWU+Cn+!S1u3z~=kKTiY*)#%R4lOLdc1FaPt z&Kd#!**#+Z7Zbg4`YiQ}a+ni`L3;3Rfr2DT91%+jSDOtw3iaE}v~Wo4|4QzVgd3kc z6T(*6DB7o*p$>z<nXFYLDz#1qaQ*lCGCJv2F062EL$%4xQy*#-h6JJ4UvuN=y43r0 zkHvVZDdX(P?Vvqq2^i(0?*4f@7ysDqA?44hoHs_SPKXJy2~uO+w6?S=s=3flN;)ER zm!aBm`zCX67=YxZKgljDp+P-Wex3$m<AqZKy4KH#5e$Q}6V{`RWc=(m!0K?^1EpX& zQ1&_Cm<5-sMg6+#IrSq+BKdvOk4<SX0xnp=KlI68u@0$8(+M<UxuM&Zpp(4-JuQ01 zHOyC*knS&Pe5Y7)Ny~XHpqc!T$?dBN%iEGT=NHD=ZC<gOa19mp)z7Fjq&n&+ajG3~ z=F{?nyJ>CqP~+B@hJ`d;{oUc=97>ivn%L@8QdnX<$R^5bGvfbCWD!_Q=S}3wG8s-B zx@V3ril)+uiGa}kGLfK39f=U$pqoIT24@>DS}Be3YY-{a4{_F^N%ubl$980!V4Q_} zZADaxArHlM(zoasnm*+!Cjj5Jqz$4;R!I~xI=9OS173k|pZkRKxC-tkYA5|J=7LDG zcW~CI0h{URU0Kgb_v_c+LT^md*_E;PPD^@1dV^HDPI@{z>b^seDaaX;#2~-p8nTOO zA)A-3Tv!U@voA)fyX8|-l;M%I5cFg+bHhop!opq>vfBRNYk~y}8xt+g-udzWt#rs< zNIRi|y2vlA=+qlhVm2%b0c%c=ZXH0a2Fzp_IG{pWX6S+6-k~N)R`nrIjI9`${-E+j zLGfR^<as*S8xsB^+UoR;v?~)CeiS7PSr7o{x!}Yu+A!cPQgPj~I~Fy5uBdDiEEkq6 zgG;&vBImwIy?Ft{{>~oij8Fp07lby1ydx|oIg}AU_cDL^=g)eR6}wG?TOh)j;KWSB zv9nrRzcUQ(Fd;GLSGe_Yeu0a<^NE<^zKoO_Bt2kpa%5O=6vGxENlA}l!eʮ~{_ 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 C6^3X4 diff --git a/pykeg/web/static/images/keg/full/keg-srm14-4.png b/pykeg/web/static/images/keg/full/keg-srm14-4.png deleted file mode 100644 index 0e567558d0649bc200a701e9c568cf50c2488a57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224973 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 diff --git a/pykeg/web/static/images/keg/full/keg-srm14-5.png b/pykeg/web/static/images/keg/full/keg-srm14-5.png deleted file mode 100644 index 312c324aff3759c67081107bc0ac75be7e38d7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174972 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%0AAG7_@X_Pd4)~M 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%0Ao(?%waFn}P;NQsxWJ9AyVk*R#Omb&fO+hXt z87IRtB;X&JeuAp?Ur!af978LU<jNGK@8k&c5)Vygm!B+S0~_Y$H~S}jr(AU#&#CN& zvJYvOF!0;*fx=^ez|&PIofeL~!EY`(kf_Do-RSiTjJp$Gg{uN$BvR3dKW!KX$E;z^ zr+xSGoL<`XjsQG#gLjKW&Qzhv3t}J7&6ky?U-)WTqDYsF$*Y{dA=0#b5I;yaRVfs0 z@tn51x_UjgVYSf+x@qd^xh;1hrmaDTrop0WF+av<fEwfH&DgJBF&py?zedG=epH2i z^+7Ho%Red3OR!fsL8NX|-RtG#@~KNGPLyw>#E!FPBDa#!aGv2b6CX7*55QV_rOy-V z(A@-%sPNMd-c|E5pM6|I+>T&U8Z1A8yx$-3ba8Hl!}%LM5Y)DdFY2KPQ8^dltVEpC z;jm(pqaAV6qa0v$+<kOc-&_nPQ`Vv(>F+q4tO@x`Mtmn|wa4fjv#DiBZ7ViLqB+5g zJbTn_=kf0NXl=;{XO{Xw!Y#@#s!|{V7X%!`<ezGn7++pf^I24E-7VWzCV+X=<Y&g7 zw(~?Ne2G5A{x#vm>P0m=RUa@5Twam(z-E5Q^y*p#g?=KU5~5=ms2@H^hK9)bl0BoZ z4efqt+C%__)~03C!*_>~30@tx$0Is;WID&N(RRm2&K%sF)<B(yFj^}WVHxo0q1WQA zON>ybJq!-Gg!=xX0?cWeX;`l$JI3ATMwVFuKzgY$9Wok;+EW0*AT6cU$(=OZdT)Ik zXnp*?^BCDlmFc3xEx0C^Ks-ghcX}GN{xDe796eK%GMqAGB{<1N6&QH0^VUOjSq19a zV1~w=ZoQ-H%91Q_G%ZSlS{%)6C%ru_0PjLbBNa2;HR)iekEqGs^=(YlM6J+Xg2`*! zrY43UNz0+MY=CeLa9XKEG)&eE7*k^ifVkuf?#}bF5isC&fdm*d*x0%w1YQaNj1#Pr zd5ivn;msbA1RgAp#VlLAX{I%0xg<=w#WR{xJUShv|B@CS%$fMxAlx%~2JEJl?usOd zaFDri670o9h~0MzYC~;^lcUF^SqIJT>sw)G80*)Qlc%EvNU0<_qYxNTdtQv5;a5U{ zm#`mUX{r$WHF3t|RRrW^1(m-BFu!ANjA(v0ITkhC-`E|P7&1OHw5DZ6oKDryj#_63 zBUK95)ToV$Pqfxw-fu9Y?QphEasSB%Z~?E;pKL%199-W{bUu2A(0}c=36&8?V163) zN9X2Pv<#~BKO-~NliwD1HxZ3zG8VUi7bur(70M&n;cmf^x*2YZ6|U4=dc3<+`xP(v zFMaTXjR*1lL`T~<rY~XL`V?TqS}xz4!A-u`cD_ME9rlfaJ3Psk*H9W9?SMI3`2MuP zpXC(g9qz?B+lZQ64u4<IcMG#=%R`OshY)@;E(m@xnakUtB~qG})z$Js^{(PzXk$cf z&8V^541b>z`1ec47p<M&CoaM&L%sYaP1U3&6XxlG-|zB$sE$VQ<wD_z^`>bT$^W%~ z2-jZ!p?b;QpY7`rUJjae5=VqPmS9u*TAl~z_f<{<P+HG#=N$;{E8jBz`}{}QYp8cm z#hx|WsH-{+{95X$33~7cMl)QQvFtF@05FwPwAjtX6#Y%%c~e-!^7G;MXgUmZb2?y< z5=~ION#F&)=Rb~Fip?$8ZQeMGyQN*A$1petgQ$NUy5C(rv^a`D5MY~RVm-jEOfW;h z-*aI_LC>ijl=}^&Ee2zbIz#E@LwIAwff;j4Aa=^^dTy|)i4?GhAs?!T4(L_%5miD0 zQus?>6$L6BBDGwWZ$IhcctZtX5Sei|?PBj+zmcNb4OA&OO|mm9^2w1fBkFxwXP>_o z^+f*7qgBzroF)o{Z$He^2(+;w1wFI%pVYDn4c|?Jpeq&0>U<=TG9P?DA1;DzLOLFz z(?tM9Ik4gLA@36dMYhD(Ut1^nYQNQYMG5p+LV+G~NTb8e`!-D73jJn9g8K*dp`_P@ zoSf1Bv3g!H==B5)<~L;MEg_)VT)=ju{u9wHZX|Jj{H@vUKtKbUsvJmd6QD}Kn*Hq9 z>6(d-e3jQ$azH=M3<^d9tN6gcGC(vWYWbONMIiEra^UHC4P(U8RcZh97Z8>D2!=5L zdUm1ga{E}7JF~CnWC+A#Ke@&}mvl_<G=Zk(ux(xtGC*b0o0K2p>YL<7BZ=1bWP7R2 z>;}?zZSBqyvcJB9yx1(jkX}1e&YTMCrtc@%N)!ZLx~r!ni7R}}*w5|WqFsaJO=wy} z;@P*~&dm$d|Cj|YQ<ub@m>E!R^&fO`*lxc97$O_dhG@_&n$^Q@V|Zb{!ki2i${V6m zZy-eo{GbJ8<5s(DF9NYLKEp(9pTOh$UWqN(x4u#d*Ka;SAZnPD^Emieg?zkPZZFlf z3sa4sC2=#ztsKEWLR^&^DNnm0_4iOyYoVo78*t3Ej7f1C8uCo}=+hn0zyj=-2bAYy zPr%^m*T2A<$7zw3)(GECDuLRJHQNYMw4VXGESaf#Z;+CoApF-6+$p0U5fFB_--y7U zLr|l72~!LEkL%|VN%b2ycg5cpLWF`{sLGtN0A+=?GQG&AuShY{kO>zvNYcpTZoTil z0V~}>w_KNU|EL-0S{#aMmtpxhU+13(srB{n*iizgzLOLUppaRziXMaMPs56I>PK9X zFMT|l+_Rwy4)8YdY|d1kgO(DIsy+$J9VY4y*#!9c?U4OP5{{i)DY%;n=~k4id@#oj z0Ws}1+!|nifQsd|$y=}TW1^QDbmS{KZ7;`fov|S?>z6P_GmQD98N8YsKo;MsxP4zu zX=T7GFM<H0`pW<8)qbvJ{mJ=V*iPMs_<f4(2bcZHQ`(hy*keO(k=}W`n6iz90dgwV zEcgk7aLVtu$paZs@?+K5<0rUM)?H=ZIn7Lw5QVM+7)d);w1Exe%6n4N8F#Rs`#Xn9 zTlf&RrSf!QtdIk$dvDS}d`yiw5k_wj2TI7hYl;Pcx(ZF7Jy3S4;gT#w|3QTl<f?^R zwe~a~RP}5ReuRueDGQ{0$<-juc)@qcCV>Tvs7Do7L;CyTk37bJ)*q-@u{WJtte`fO zLyY3jxRR$v9aP83>`#Smk$q;Upijqp3JMLsk4wAx0#hCh@W)_o<-*pvf<5IKcENcV zA5bwYk@7Pd1wkLPz^eZq@g}4$db~eY8%H5K=~*h(KP7l5^YzAlt@CsLAYxz8)bm>A zhLanZ&L>yBL$US0k_COlr|H+{SBugBoe%u85*1`ZA+1>7ltOL$aVulU;N~c-Ey|*I zkiT(L4X^7#q{)qQGZzV<Hv*=(QqtqnDb!X<0fu+#DtUTYJE92<WT+p);m^HG`j~(4 z>w~c65SHfi86xoT;@Z_zrTIiSJkWZr@uA;oCaB;v$vyzi%74DY+iu%H#`3x)%i&_6 zvyI(7^$nOcaO7DB6bVAP;h&iaKt*f;^9hD4RUHUb5jzFny`g;&Aw^09$J{ZxRnr$K zo1g-e%7*DdDn&T)OKB80U>fmqyZvq?i!Q<HvlRF<jGwQYM3&e^&L5eOH7(WYk=_!d z1y(C9fwShH*Wpz>V9W||-wxF$GKoEJXDof}vAEu+sAC!m-TRfCk4Wbfe<aEHv5TKu zERlzi;(%Lz@WFh@Ah0*pg9u<}RTGK;nzT>Q3&Rs&2ljC1y~UI%JD$s>Sz~S9(rP)I z9N;{lO8b?VqXzLe9%8juDr@E`;wmD12O}xpd@WZbI%}t7Erd|$FmmTj85&VEy!ekp z^$LZ>g$ZbXbT57LtYU)N4GfEG>iK(c^i7Si(=_hGDHm2K=|1q02>>i)=q_4@qjD*8 zF;6R+pz(M(I2ejT;G$G@gW})byfmC|NH3qwUsjF)G6`7!pOVskuXMxsGksgfMMT&a z$a58uL}#Ln4!7h<wX_lCclN`W3Mx8{#3PA}K4NRTmy-hYe@&jL;e64iMB6ZnGSb>S zPX`jW{9C|Z0?X=Rd<*bFzLQ3CMy#!aDB^rL1w$5hfUZA#Ss?o0fpVtFTNmUy56j(> z#~?nJ7W*RI_pk?vTmq)e$A?QhQg~uKcV2ZucFwEh|Mne-&SP=P_j4$LW4Dk#Wbf9W zB4|!btrEgFR4NRNyNsug5E^y1@RcX*tDcNt%58a}96Z{Iep`8CZ+}`dL)TYwhYc00 z59id|wUa)qN^vD*Vs@#4Rzx6BLITb|uIwvJ#QvoWPmcVFPZOwO)zA9)P=Fi5pbu7~ z780%d1(NjyDB%U)){sY7E#fc3zYH2zW%UNc?R`P|Ms=^ap}nhrM~VoumWA}Y?1Alt z3y2)p=~0|iCed$Gqn*_Ds2b${J8~uCyt?xzY*U5OGIomr7vJ11nP84F7I*u%PMItD z6B`hDH*=)<SqxNP;GHIALHFQo(TSv+42A##dbj}FoHXL4&_;%Y;P(?ZtQ`Jy_VL*% zfZB7YGb|r+H5d)Ju!NX@HDrZ5LIwlpW`{yt^Ww7Qc!t$NPjul_E;u{Pg2UlJVg-BP zJlayt!1?n?rs_I7Y_}<p$^)>Y6r>N9ZaSk~J}#Nm*NS^Y{q2O*YZJM5^fRc$mvRcw zQIlWdhrssxbN-WL%fO`<APw_Dg;vNcZhjlOLBH=ZRUTl28DSI3W`YUERi9HJ(G0aY zef5hyYuxLGi4!eX9K$RZa>Q1<&O6p=y}K{d9q5FLc3_ifs2xp)s^w>$tZShA79+@c zixuo4-`{fY5WEk!Jr-@KXJtH~K-?OIEi{)FGj>vKgOS9)!GT7$;C}5TLdV&H4N~vE z)uAEmU5U7Z{RH%Erp^i>HsoE*(LsbQ@z}rrGS+4HPE<||`tEtiT<iX<4EH_NRfCEJ zeWvMdvqSHIQM6;~(?+D;h1#D(Z7`a<7PRLHcRI&Y<=VFRY}RLt<q>S>D+D3$$x7QT z2AzZM(yfaW%oFF3iphXg9)VCVGiiq%l@D&LjbVLx=CRrU8QK5vAchLGCiI9DO@tH9 z=f0Z~arSoy*{*f7jLOdnkPd_4-83dh=a%gB{_OY&kmQqio8H<05C4Bs@VToHWWiqw zq49V$r{r{HkmSj<Gz_&CK-<+3VH@3gN=t|3^QRpww^Na_E*c(?iH5m<s`TPl#3h}- zHsPl00=k0k<GhkabFBlY?$WY-Tz{DC5*dSK6G^qEPP$F<u;p`fX9*S%_#uNCEFO-c zU$r+jy9H(yGZ-&{3j|B<xbXGiGJBiLY4kjS^QlnRV>Hx_ToiVcWEzktHB>n`p%?XO zqHQnRY30s*a~sfSfPLYLCB8YxM(0ZxsW7P0PScsl87(kw&JF&J(DtSwtjP(CXmh4p z>zX=#V;YYVAXb2$lR#MyZpwQ(%f_c^z};uYvqS<Gi+MaonAhgo(56LT?{(4guCaTT zY`9Eu@BXNNvxPMS8S%QGnHi?*^tI&ra8kX0_I2K#rZNdoZa@>E%b5}_xZfFwGU5j# zwz#D-W|fe=4UGBn1XvOGXqdUeFL?oHC9q>m122@<CHvHZaN}$RZiI0Fo6)9o*3fZ{ zufnubsRq*H`+@)qiN|GUyJe=Nz6^2GE_DjnT4rxxc~|@a?A>?>6qZD@&t+h|*Iz#e z8qY6DXdEAcWc36B*I?~)MbU>Kh2i_9RU3bV{%4tc;cVnAYxdFBfUocY)J>4=?L8wy z;LxY*{->hw?|VUuCDZ*nV7-C_(f{|zgWJvIfUhHYY~jFMf2cf)AbTXGZag7&_RAZ4 zFiG_ZdfqD!pF*xWZNsgimMDhvdryfuew%3XcW;6LUX@256g;oWb?J>B)JkAW?Wx2a zP(Oma8f@VeYVkqg2ErylW}<^ey<|+8&5MYaYQ%bI4Kp+m{_1me8N~nNQNrH9MQa#C z@nw+Zy@N+*2@dojM=VQ$>|WOn*5u(&-yp$uU1ecV=l-w9LBIsNu_slRz#0vid5@yp zwzAn^PyQPc%z-9{tcK@QE+BFBZ;qx~d;(o}5_gv1{Y55W0243oh8)YsCAWvl)uSXW zO?zD(`WPS)d<x~t#NUQcnH$RyP;!NV9`%1lSOD$u4TBHF?FCZV`qOz>C^j^BK+ma| zif~K%FmRHlvo(<xr1tq=zfeRzE!Xvs%$U1UU@f{-f5aZ#^^uR6tez`_Jvy157E>&p zf$Qhs&H<VOE-Y8Lv^;I%4&^K<cqS^>Fl#KL-p2#CRU1>(MZ|&SCZnIDN7Ib&HY<9E z;)0g`>nr<x)L=KmG~HY<eNLt@5BYQpmF9{Eg71uZjJ~!;x?1cYqf{XfyL7}fbe53N z)?h-r=s2pbE6pzlntzGc_xFO4;d^JNKp9Y5cf*5ilG?=lG=USnHAY=cJ?398;>)id zk>gv&S4!E^6YLie!U^@!5^z<``D1ZKk|^vg5WdnLnGmZQdphO?s%?!ixnKGH&#sJ1 zN3KxQE$Ri$*AHst1bWQfZGvF_cFbn>!L}pX9%vflxy27!cSYCwFHd;kY4Jk(sDV_T z1Fl-^7u{}ksr_5{P=%8oXDE5jU}=;UUkhq);K6<s{CN4*QsCeA%<4h4mFD-T4E;C? zo3fD)Xiy+4;_w(kmY`htz8ED-*jOCgX8kOZGy%Y^M1Q3t;ww6rrrYjxouhBqU8!S< z0Xct52{zQE;8tL}i<(nLe9ei@wxp|P^XT9h2!Wk;lS@cZWJr`8PYFmyRn&#DfWh5& z)9J50@gQvx_Ry@V_>mi8h9ag4F$oZbNBK~LrzE@|Fk(J_d1D%#s!NvHd#g_VkQ`85 z;K(gFeoi7vk@kQj1f?izY{*e)ax_7nx#rs8Kz}VXn;?UCV!o2PBRNqEQAl3Th({nS zR1Fn@1*$8nX4;G&_k!xR1=O@gOHu+swNK2E|7QN4`LvZiz>W+J{8`tt3JNp|f^I+X zao#pd?|57|mSspwY=o)AX^C2h{sXc01oZ0?*7w6f1xdb4{*R<!5}BYv>hWF^G4bK; zYfuY!D9<fteIUg#NsHI3on$<CQ}kzM9#E0HWN%m;2|^3SK~~e1jW|@%Xu0t08*2pL z*Yaj67mx27&uD-ksj0k-BJks8(=-RM|HzoO1oaGz7L&cK>oHMOtb@V4!l#B;?E@B( zWP#%SznP|Oqo;G5Un~4~XNS_L7O0ok-+RQaO}2rFctR8%rgI{!9XHf(ulS9^DhY9r zxSJZAL_I8lFlKQ5-G|Q~W(m%Kv9^!FL0d~s{Sn<Ba){8dxT~JMkRXh*-i`g*#nXu# zB)AUs#Ej6AmcTT3UBpE5=403AY5DZr%6k`|K^xdGAx?-f9OojxI;~?Oktxs)Od9j5 z6N5uR7^v7d`S_G^6pc`^i<p2O_n-%yyW;aC9lj$emc2^}+!Z|0;Gh;vo9Fh3kNM)K z(uY!F;hx8y_D{w`-HYOhfG9K?)vG6LXz;KHGYij5cT}NplsY6p=g-2Os^pRL#>vjV z=$%dTT7g=)vwrY*E5V5RXfxp*%rXeNTuRoYmMgy(Y>Ul87Envwi#DW}c7)#%Kv#hX zQGxiyZ$G58&%I4)e(^YSLlg;mZXu2Qv%>AgdhCuF<SmK6ENAH@N^45;;6BwHin8UF zi_^^Mte&QNyxIJo#sO8+uH;0GyX3XYnMql6sh_-HGAjg~@7K5G_A)@!4$HiiuS5_Q zHb-nMY*J?9`-S1!oN3^|_LGSD*>#Xz5iW-u1|G{XLj0F-A-nf!tR{kL)Z)T0WDbMa zwUYt(OzmG>VtX84IaU}B<>wh<BEo)vz6=rUa0cS$180eu>j;2A>4to$0G9s=?Zu9? zGu*>r#14!}Pa&W=D_MQr4bQU>@m<)wB<+dbBkbV4To`b9j+EOu0XGp)xB5WDB>GdB ztEDHS{YZ7~rM7ClGBhI!?2pI;%L>WqZ;|gRl&`WM;F&a-0xiSiu)C(|Pd}Ew;itWA zzZ-LAjZ~sx$AH@ubVte-?m!+eB(0oIUuc>XBrInB-$Ubc?*7F!sk+1{nioz#kPwCQ z6`_6y)%)A?N{K9%pJXhlyqPJlNyqYefd+PX0nv24H!A)$NER=1D5u{&U4j!d1`Dor z-)y+&3)=Bi#h&*lsyfhTtQ=i!{?97sdi5ykj+JW0+k21<=4Owo8NsEJVEeGtly#{> zA@-sz>eP7VrB-Ud1wg5UwzF#i@dCsw>*};|xu8(;MsrNCfD?A!%DMe&gpxJXQ(l_u zZ1GwV$BiAh6J4Un28NUkRzRo+r`0aan9eSLC1zmaN+TG623Np}FEXb&;|~=`OZXpP z6x%*z_x?0XwYxSK1eFprD1zYCw5st3O%oic7FcGSEbYOC(xBpzw5qsS!@KgddS-kF zV)rd`2~N61t_2Z~;=gdEn^{9l3XhLcsu6z<8Kp~{=>s<WU7!4NLJO4%|01oGA{((a z8d&d?uJ$*F0IY}qajmx+@0FOZIkRCD${S@$*h4*XgB^6;JtPSI7&QB1ybhWK7|t#a zHMBM^|6*S#Li~Bv`Z=2CG`#K?;WGIITH?qK?C^Ahw(2wP*I2^rzUL@9S@T)>1r@|E zuP=N3i`%O=b<PC#&O-}(Qh#<VKo>;Seamak<I5s=d|R#RM1S|$HpZO@4Ccm$-kC=L zbw8?G!edU1NcCrN$_n;4Fw;;JW>_h#%PdpiWPVpDm>z3Kxt;h85hnwP+Ft&L;ShTQ z9&8mq5U;;g9{yOEcI5PE2gnRTH`U%Wn@C@%y^$X2uBRiS)+Y9tPC*5l;Qh~0qHVJz z)C8HdCDeW~T9n5kE=yI$f}Np}#MZsJ2U&&7^5B8YR_p661Zb?Gb<u%Wfj{-EUnPO< zT2*Scp3kF<l{3Q!wwQ&Xorct5Yh=+A&{jo2kK;Z;CP)qnCgAs&Im}XIhNU5l^`i+M zWawU%h7~D8UDgpk-t{k4U{d1kF~vQv@z4yPOydC;9WI{u4`7_jU%jI%iXL%5@c))- zwPc`3Bbx#Rakv#^50L|_9PjWS5%xt3ySE@BOg4T0pRDMGWD2>=oW>sTK-y%7zo7{K zMO#@cRn1gnzw&Qs1;|Vk%b0Orsbr7Dp>&qu{|z26(9&oeb^6r{J{uq1fNDzA3RU0= zt6S?5`VQ1?WgL6>OEl1%Ia|^7L#Pa~)BgVg+6RKKo2&XkN%-VK=Sh0LQ^Qf{xA!nx zO=V@*JhvP`+Af9ZoJtJ(uyU6{1hJmk{FmM7l=8z&tH+mmpP3R+5U=JL_9ffnAtlU7 zpS~|7s=Gb4CTmKhT=OEE*g5Yk!32gVK+CxibcdnyLwCFRzuWs$Fe>4-f$^5NwCFC8 zRVl)VLY!ieXflCpB4Yn6ZFjy0#T}7Eelr?&=GOA&*U5%eao9Qus_}Ext~3L;6T}+m z?9JPYa-G|7uK*2IWVbfjE_VwtF0?uBnbWeLKdcjrsgQ(9_V`a95PLUB@}(w23X@7^ zps+TN6<u&oVd1}rDG+S^6U*vM6TVZqTE+oMCFuD<RB>B6W=m}gvR({yloV#wx*CZ! zc)~OYo(Y$TTodz%v=vi57otV@T7vumVW0Z}9Bwfp9{1#5l}GTIQAmS<jH~ot@TvFJ zXb7nv&*@?y)L>x?vYvSA7Gp>a{kmC+s%S$;vIvDRosh)}n*<1`M92X7zvK*FHqitH zfz)=nTUS~pCqB>y$pN=z4CJgPNUz&$!#Y02Vv*1ZAO?;yB;WwfGVE`mS}v_E<IP>& zrHidK`H8xI`{l907WDI^jUa-^Qst`rBakXiV~62$Gvb$Op8pdw%1yoFg#3GfqkvuR zhbjo592gj+0NWzqBaCyHJl-}gKPErE^hT4yb6AgqMvU;`Te5fuV<<QKn+T)KBRK-+ z)_GuH{sypIm(RwZN7GZ*DtA4&T{7J954ndO<)MHT>bb@lOXCWiDb1H3C462{b2S=) z8y6*tIE6G|t|%DMiYU90KQIGQw^AMHQ-T76k_*Dp;~hnDaRPrr#jn$%X&QPc8*ZS6 ztgd=g%72)mt3O)e@aWe=p-S?7s0S}_h&BXCJ7Tah+BIKoI=@_6jY(X%v=)&c!pen% z>!)Soe#C7$$A3QdcYxn-KHuz9=qk_bj{5K!7uDhYJ(+BcYSMY<BxsyGlUN>>id)GU zu4N-Dl<n*`?qqd8ptGt634lY2FaUw1KxjaAoael^)1In6IM3RFhf)qZUJvPC4W?)o zs3MfT!{tLwUblwZJHUXgkmyVZ6Vqznrry8u5}|GACAtMyuR%XaH^O5&VESQyY4gqV z<x8hWNGj9Y_S5ueaKo(hdC}g0f?7a6&1&xYh8q0=%<UfyYwjb`*s?Ucb#-#{t`mwP zBvw}bFSB0sHrZ$dd5EXPwZDLCjbapmCl~ImdUCPl+ak4xjS3OFgq`je@6?r%Y2{(} zrPFcUhK{OFyF0tyhi%d3^)>Oo>1W2shl4t@i;epw90l^}E^j`obGc$=nst}{DHdoJ z1UB0uD#!j4$;H6g7yQ{9*HG4B&oAb<f5DOqLfKH{3{SYuOHkR4&Kl;0OEg3qXW`L5 z&#IJfH{^3JuoA{Rl5**;EOACr4+AhOtJ!^WI{1qnpCft^J4h4`cB<h@tqr(?hcd6F zBxz29JS;&Z>!6$uFjB!X-I~0h+zRS__zEG2gbRGaL8+Gtj+aSDfY%kF!55hzB(v)K zb#1QW<!;>AV$grt0yZ;DV!E^z|Kiz&B1BZJ)Tra~Lg~LXa7K<xZGp||k<qH+f-&<J zyWwMFA^12N04P~g$4j+M(ZoU!1lfovQB4t_4|L^e|4kD?jhAXzQXJAvnOn3Wa*IdF zx0%RRPdKy_?9ph$kuosIa+odad5}UB)vJ;FRU5pLS_r%+yylb>XTad2CHW^nmrncU zsP<dU^JO6>6CHSV6#*dkyF8AnB&N?C>!%g!)l=zI8vs%q&~Y`ew4at@)6J_^x9&YM zQu(<gDp5EtbYGIW<EPnt3jzhV{%pf6Yw(Pzfr}}$dZEP6_9ro|SU;`)!~-0(^d#>D z5vJmzHWwTMkVRgaa?Wro?Ridf67nY?5Y_DeLnk_~Z@?E)qLx}xW1>l%>?k(tleWOn zC@WSfs7>nXp(mx4DKZbRk7B+8wbUV>U=lYl86ZP5W6+dy7sOxQnON-5IE7xqj?+%` z@7rQkj2RWnX7OmWVCga3*OUYsm?M4lM(|OD7E@tSxGdp8v6#U;?G`~ne4r@jN6v@v z+?MKtrQKH@+!)}m_g+szGcGdxXtjvxJKwneXJKAQ_dTx@7b$sv?Z_g<VZS^cw>=;} zhMfr=YYfyaKfLulJ-YeBd@rb}mVcKC(IEYo^{>ERqWcpf3_4RdEm!V*^C`f@=x<<0 z7o*9r$KQGz@8{zDv6ozsnFf&#U28F=!F(d}KirKKSs1n6yv_fkP)a<B0PdqjEq^cN zgWo@c_{82Z$P4K4{@z4t`Mp_gF9#HxAA`_z(YEP`Q^5sgPGYJ8d|TazCYO1<u=ixc zO<*@NBe#DPAMiDRQ6f{B+#E4AJp*12hb2XIRjvxQ9<7Co8AhXL8hJ~#!jW(#;{NeA zk^QNOL#}|*DYh{8%fpkUC1|A@Hj%=9sB&7r&zo?|SgI?J3bs_?m!9Wxpn;5dW=lM& zI6)g!!b$c29pK=ZwGg({6qC{8#U+F`Ot>TB9lmDsr~YtrUyVho5xxFip~ZQ92R8Mh zl?2d@w@CyOJNqw%hVHBTi<JqsL;hAA-|9VSqELyue}C%VYfht!%=_^LVXcoBv{Vh7 zmiAdgfcLeIT<7mAGAlHYsVt}=goX(WJvNJnZPP4~f;9KvsqUs+hRC?sZLg<(m$S*j zi}o+FiXb#rj{-+&lWFevLdYIXg!XczaZ$p<0!DAt5yN>K+HItIwP-yY=0FZu1_M@! z+D5T{alsZ4<ze8Hw|eZr4*DygNa5v@FC(yQzTTdwelSP71lM}*gyX&Hfz?r%m9H+5 zz-@?wv7;$=Nz29r@l_qW8Q6aj6<ObcK6_D|S(p}uwgm5CgjsKkeFq4LS~uLDbm=i@ zi;!P7cOC042~mOQ{>+|ahrvKCZUr*>dsYS&<tmqGrKgX$)ykhxf%}C~03rkQ-chBM zejc@pQWvnDXh4=?-qy$n68!L%iTNL(Jt6pE`W}DSP&E%0$H8cMY1~5#{hI?REV^j< zGt5Yz#^L(&t^-S~)p#gUE4=T?%DYIApNGpoi1C@ZaB-3bq=0v4>IMp}T3Z^xNP+q? zTCNOkkZnBM_d>)KLQ4@TTOx>dX9@1#fRS|5?IWikX!;lEiePgC8II7oc_K_vxIc=M z_IzmTyCt?>%s-}$8fiKEmw~X?<X`JRl6qpyn)^g0973#6qf!TjxPX8Gewd<Mur*?7 zCs4G1lU%AFD3nS32M}LT>t^3EwJF|4cp8Wk50SU@*8L?j?5f>55wr_Hjvd+WIk{pC z@qokyys{*n4d&WjB_XOal$t<BjwH3+hlOHYJu){w0b7xmJ)b(PBD4BzxkE_+o8=Bm z>1$T6Y$hb8$>mQtV+VfkB&-U9n|D^bc(yH!lh8<lhwr2kJ8B!UF#dvUHrkH}tDhc$ z^hk|l;y;7i&dR@668;UPT$p=Elgbsj>I0}snU(Z}uy}9lt~&r&2u*eX;Z$^Rt+AtC zYQeK~A-iC=)Ss{@IQq$%6?+7QZ>xl=OHn20qX<2+D85O6`~Qa82@Ew&8nNF-L4K4x z&<NgpH4lI8acW*-7J1?Kkq2`hI_vLd*a-)%Q=t>|xKU|n*}lBEF7`i4#fV%Mok;&F z_4)%G69^o5gw<P=W0_&{&4V?n5V8!<+c!hvvHlhuWL!RCu)2&*E86Xlt7ha+jr5mb zw@Ac6rGstR@cP-O`-+#S$T;Uh-jAT&m1DGky@3XcboRf4%#O6j@K2l$qxt^aMl}R% zsvVz*YUQIL{|$PEeqHyV%K08f+^BE23p<?u4^4*gB4s*Qrv+kN5&yi_j}avn9%Ms> znV@kR9L=x9vBK(_DkGHUB!OP(@svPy7Tz>C?&r346T0l~Z`j4mg@^jLx{SvIY2<mq zFBm5N!X;RuSME1<ZIc8nUV(B*3eB0$=zCL?#bhE6GGuNEZEHA5K_y7gSNxzgc#{!r z9e|CR?`ZIBL~+WIgXEXt|NM<sf-T4@&0xW0?cT;cWyDeLRLJlzAc+DuFMp}^5(_`{ zaTt;Le*C|T_lqo-shaJT2cGo>M9z2~yGNpgS5OIig;`<Z1R*Crzq4E0Pqn_2;|h-G z`A4oOQgQzhC!3BFdsk@n$g_e6<**w8sxrVU)+cKc<m-IwlUBwItZLId^}#HU2Aiz0 z1_BH-==47P{<-EIMU2(_<c->;iN5N`5Z6#8xYLlQLAi7~V>J^uXF5%Irs6CW$OHH$ zawr-^n_+rDDuH&#i7W*u55^TEXP~|ktZZlTuqZEp{FZt*kjcqvMvmLepbu6}fq}>{ zt8WJ1#sg?P-xp^{O^xos$Q&OM)CMlg$}d9e?ogH=q(mJPK*78!lyveLH$*DXHaaz8 zdx9Mel^8>cMyL%L8lj+iixBoSQ-<0oWUggYnP<p_Wd<w%%K>maZEOC1eB8V{ERuX* zXr=x%uaFlIap1WZG6m~q^CcyBD42wdlP-LQpl}WpK42@L=^`>()aW@>*W0ugb9bMo zN5Y5E;IY9|Ga~&*Qe17#7(Rr#7^AM%=s*Ds0~!t!YX#AH1Uou{!iSoNa4a}Ps#l>e zCjzm2+ni1${d2*gv8)xeJpgWDa%-4+y`~<pH#tVPGA@-vPRkXWaksP14N4?J2wXsG z-^YtBcG+`ExK&0e(oQ=rgIO;T<o-JvMYPN@XVbfJ*U>1??nJpVqys0@@c?YP`;39t zXReYM?F2W1f$Ct%W8)j9&JqsVQU)OJyz=lcN%GX1`+X|&!7sXt^UR9@nhW#5=y^)D z2#;A+{4Vt4uVytP+vuaHP+hf<HRCp~QHoXY^e`vgzYs@kiFtg`jB+9wvN-VMfa&y^ zmuiRRU023kWoHTN-xd7U_yV>DKp!|V7f==hkQW0uT09XpN?n)Z?-BS1aBar1sy0(H zRuH5y!&5!^T|SO7;QlZrzgt<qMN;BcRP|3@ElbkN@@|IEjnP|{FWI08ePM}Bwztvy zL077yndj@jE*{(G=M!|Y@+QVGtf;|)^s026wym+us8(@ndS{w_ZB8(v`qKjBz2=$d zDpzEvn>dcdK4a81TW)V|(HDn@QHhzAmo+oMEtwOQO{8X=YfG)}-D5M@9I6t5{Ip>X zd2yb4F><@9v&}!~1J$JtC6NxEf$sFva_>Pc19zj=lIJUgE%yoYppZr<DDJ#&qrMyo zctD(x06JjI%s@J5e!I0Fmt&5gvED}{9jdb;G2tS&Ih1krc<l$~GBP_tyD6?oJe_lV zYbKT`L*N!@qtO9}kzLw|@-YfXZ$MK@7L=xnio|n89JFOH{es{4iG6ZvOzyEo;8vt< z1$t`EB6>T29(e(}>iwE74^v^7-EZgL)@rM7B_#&<)<kxDO5!gQ`xDolqsOa`4Z<~g zGRU53aj*L%fA2muI+AB~!as1gbry)H9s`f4ac^RJ2Q^5nABEHsM@eTB>Ne%98-jbU z?obI_>uNepZTW0b#yqYWzX=I-Mc7D~rEjECAK?vU*AuP{vX&PtpubrW<B-cQ{&`qo zfAEvr;?ke!i_WY+Ti^OiFgNDYQUMt>;Bu2ESK2oPJr!k@ES-^>7MdHsvlKqjeZY}5 zF)m5!HrYz(sa}a48OY&;1Ysg{7^ua%y=K{<33ef|Gg>42#ciVS@;ifZG}arF-tc!v zP94ISBtH>dfy|{c>8l?!XEk4a!fiA3_E)D}W+n_Bt`mF`w=vykIQnKrr*72FJ)FC< zQ!@H-eC~~usSzF|ZAN)F(lhD~Q*bF+eOqT}fBaNe5_F;tx_AS+GtTb1cg4SaJ8<(& zlJCCP_#!68&|TUH4M;Yx_$~5f+)}uuhgQbLN#+;a=YsCZ0w<Ipx*;e$t=HHrzj8!K zzS5p7BU8npJ#7S8(--YV9aMkS-Qs=1o$_U{DA;t;?Bc3{gnE}p^_s3~@9df`a;s=k z^%<VO7E#0PO328Z1hw(21@(x7)Z+2uqDl2<<wjhPvyUZ-ZD5s=NZa)7+hGRG0oO;` zM0^?{K0HD;oai7Y$Tx2iWyOM?=c)&55?q(Pjx1dtGN$@<6|Uw8Y3JBXbO;gkN=Mq_ zRk~ve7Tyn-QSPiBMJP|l3d(X9nn*BId(1LCN2=^W;Nq9=_iP(uL$CVbH%yf=#vGw1 z6m6vtuyMPW%ZIS~q*H54Z2To8Tc&EFhKfclVG{4Cr_pfv7O&%U&u3NtGk(-&65HxP zcRfO1Kz{KFlK;B&nkx#!Ln(RPX`g2zVPC(^(g<X%Y2u=Zz5f10{(IrPa5YawyJSz? zrC;m`*3)bU4GW~edJN^K{AAUL9dzc(Hs=KzB;kv8`W1S6@=O=s-ARj=TB=h_NZ$D* zUy@)dg1$#RTuoi%1+^xQi0y+~g?%0yGUTW#g|UCYd1J!IZui9?!G+=hl5GD=T!#)Y z-D#sszEWfnXxgzumiA-!kGV(^3!Ql!JcrJ5=7;g(omo<(p{7$*LS9Evp%+(oh>4xD z-w+J<0<Mf=Hdl$BKOD`f7%W<7xuBzNN>JdxqJGMGhDkZLjU*dp*i1B~-*?JG4L)#! zT)a6Jzh3~|<ON(*X80aWY@kVX)%2mr`qQk4eUv=PlMJ=R!KB|STnY%vsl1~7eJDWI zSMxyGgWh#Awoc!C0>e<`cTw<y_Yq;hM!(o(cch}_WkSfdAAWLo(<_H5p#(qWbYDyj z)nFgRN=!^9!;l!=_*-u8%=mtN`)Wt7)#_7K>HPfiJ@oJAR3H*=d!lozzIa=XnTOP4 zW@-JqlyCP)1N;3MB$I+d8EI>D=AX$G=)D~s-OwY%@*`Jk92lx>#;(pWXdsuZBX!T_ zYRkVWs<d2qq@K3(=EFwMV66Y#5c?||yvIjU-lT(CtwnkxuMm`3mrV729&s5o$C~A= z6rw1TZV%fxPu2=7TyTzm5;)NEbBG`BI)6O(<J$;N{L*NA1jo+XtJSOBnymS^M-C8y zVwNWl{P~p*)-FHU`4tX4$@{G|_vQ2p&+fwO&fbRL*Ob?HCr$2u{HI;V#s?bT7{)SV z%(#fErVQHiR^|VieN^MA5>B%a;J@@d@k~rpX3x1;Z~Mi9*^wXD9u{SLR5R15W(*b8 zSX@H^DR!Z&%9kA>RLcZEi`nXHq4Kqa=DIt>f^j#N{cPJ}vmzmML>_bsi^mPDs1;c` zUMMy%5}&W4xgA>NM?>VwO+S&<Nr?pDwKg{V-2442Il)#-ahE-}sILFAfo_vU=aYQ$ zCvY%cJu@02N!*f&0y<J_7C$bCT-RsjF=4hM-&g*gJ6RT<+#7kG09hB2n2U%Q$#D7O z4hhyfmyI7Sc#=gt-WU6yy%!cV7YD!>=duT~T7lsp=_Yrm5z=3Q8lmq5W#or`xHlP@ z7sim<h2Eeyco%OD7AS?AY0ypB!U>Y*Bsks(xlC{&Fws{P_HdydyM&-J5c{}q&M`06 zt(KzQs!WeEyQTz%Y){`lloz>S@f|9E#pZkwWG69+-e-zP+0ofoh2vU5V6)Ty<e3Lj zj?ofhn&L1AO8sh7cf|ba${@l^^$iv!M=}yCS}tttUEfibO085`3~#Qw1yo|!nkxFX zpW?14@yiY+Oj;x{r`zN7FU~Y_upc1<b00!Z*Y4#16ls^!_$_=j4&RRqslTY0zrofG zs=^aY?xyxa5#1d}r9u&}GJEE^E)m+pzi_9<Gk3W05pP{nXdqbYeMpSfdfLfqIM(3x zB!{)YORBw$2BJTtTLJ;4X--$Elw0~)6=VK2>E{ZK)~V9j5`|}J{*Djo8dVJuch8Td zd|M<dn>tIbvyN(5m8P%hey?`=FvW}Sc<g?2`9^PrrBtVbDzxSmbg1gpT68qrh#|&& zR{^<S-#uF)KEF<Tr39i~AcI1rn)i_{Y6sWP5BJ|M#Xv}i-^7txbhcKN2h(6;{%CP+ zX|v?;)iK!d6uq)v*&+0I6UcjR*=Q=Zo<9C#x4b>ko&i&tf3!Gu>FHCa_Ggktl!!lC z-CjUWLZYmkryCr(Uar^jA(Q1qQ8E*=If-cB8tZ=<X4De?{Mz;FbX~hv6^EH)rB{<? z#^T_sk98_$yqxV~2bh8}v*14q-rO=lta_IqE`6G>HP@;lD^e-76>n9tGF>)28m!0T zzwMlJnfP<%*i1{WU8W}lf93t;QBNB#<=D(VxU%s5=^xEES@oMUoxBMng7tnAV^x`> z=6yoHjcP_mFwh@4jI_^~Q=hKATPGimTk`oC@Er52k5G(^`WKK_P`{SKmhZc*Lyfaj ziGv@Vt^QA5^&h637!;@4X3q+el~Oty$fMEahNY|z<_d7VeFjM(ZY*R#-=Cq?RezFv zRg~zDc-b&98~-$r?na3VtA60sx&CY|OCovVF~Q+E2gcE+NICij`DZghW8bzj{kq*8 zp9`6GBiAqa6lgK1(xkhV$0#zd42WH4S=q@;qugi<LALX*uCq<qQR^vJ74baM-fKNV z4uvh$#H}gUw|fi7E9*cLd;A9{Nemzfka4-Q9>@{+=#EJ1#+UBm$(+mWW7-i+DKf>v zO03G}gmqf`=h@=&0TyS{Ys90yW=%urgM7qq7owcaKW=<scg!SpJ9WniEj@1ZeGnt? z(j>VPea(t{rgjR&-hJZg^5^Mp#th~wv6m%edtXA{R0lS>jPhHR&95L1_@33D7i&+Y zmf8+lonyVI)G=OQFcKNYH2>v0F{@liZxgbrp^zCOE6mV)*6+Fy?zKdlqh4bu7T(@( zZ^Y@fNO^kc)5<|z#-@0}IVTXY+~V%rzRzs56}8I-TDF`;Fx?($xNF@%##((e>ev#s z?>y3`DzZcvXAu2xeg4wtnSbb2CPET_si<iDV!!XSM1UrFb{fGU<ecKx`ojBEWs`p+ z^+q6LB(~oADp0oZm+Jmw*CN+|<g@pujhnuMpT6u$VoPwP<({EsEW}jbnl@t#8hZU7 zQ)d+wN7IGt!6mr6hM>VExCIXug1d*{9&`v0AUFhf2o^NBGq}41g1fs9GIIvLf1PvI z;)0u=?&{vVYFE`;&#O$>v5Ii!2zN)0vt|u}FG9e%Fd_jxv7t7J!X`d`ST<9Ss-~$C zH$R!I0%GSC{rxoFhx5E1xEvmy`N(T7Brb*r%&g$5Hcw<B&phne{GOoeX2_m|eYjz5 zQEOH7&)O=we>g#d3`<uxpC^TLKfuEd@0Kz?$Uw@|HAyPzclO@ydVP5g*#hi@n;g{3 zW!G(CLt@fLD$(}z6S4SNLTns!W2ptxCpU&DcVL{58=)pdkH6HYgWHo?<0?MNOTnAF zZvMfZy9{AxB?$i{*al$l>3%>|nF_*R*F&{Aa-JqS7It89mj4_!W!Sh3SuPcrIL2Qs zJkR{RfNHPdQTcO`K1rqvX~sYs%by?nP+fT275g+7MW7bw8YA?t`BBYLwJrY+xZ|Uj zC39>bUaN82oXJf+<=3;@z(L%A**F5MT=Wn!ke{FJo#%Ik_p-YUA{0AwPdFKWBVGme zY64jpXH~5g{GF}y6vJ)1ZPq`~smREsH0K@9{O7px!*`w;?!5uXso403JM%3A$WvV# z??kgQDospi$x6TQ3e^v<13P?;8t!hW2)NaMMh?BA4#K%Gd!E?5x=0=O$GU8ivH~jr zpke{y09GXA<EEcnc{#7dbE>ouY=p$9hsr3=(!xeLDH~=keWc7NREMJ4{DeDfEhWw? z8mCmaP<8*ph5no4ap?mIpo5y=dN9O}mxiT-{*0YgcVn3tf_+;&$4@`~YSN~yln&Gx zc`Zh+y!bwKxz<w^uwM@f9%(-56IhD45)l762A{2RfZnrn?-09CliwU?XKVUJgw{^D zhnRz9(as;G&WcMCL~;GeW)beVMstTmdhvF8rHAQkOa0=T4bSM);RH|hg8l?$j{vq> z*=_E_f(@gM>JbYamO+ibzVN73JH7hEe%tB|q{Y!&RUw$={jBvRa!d$<*5-XHxy=w$ zLi(*hLT`IFSn$tnPNm83W7j?ZTg1O~82sqC#-4RHqwNa>X7`mhw1Xv^g;a%q{_>QI z8C=r|cuVydE<Y^p%MRTtABZ+6LMCn)92XO;gbyB?6$8^n`tnSu+SfgfCR>UGSgc09 z#M&Bd6>qzV$t!L#9TwRM7Q}w7BE+4-pEb~4oD>1~JU0dW!O0S+USj<Q^~tfPOza>q zQONK*O70y9aJL&^mw8%T>Jtp-_=LY}zTvd{V_|jI%imJ;Cga25dFwA@HfCs<owgZD zPwNr3ut@^~%DfxdgSU3*#~ZcYpe~algJlmzOpWA!hXj8%4;r`TZ0LNH_pQ_yRej%x zT80#^e&N9lW;)-wp*Slb@HCg&Od2N5<uBj}Y!sGD?=-GxX?aioILFPKh57pk{Ze~0 zpwgfko#RV|eyKHE7)oF*9~>Qao0wHa6S->oZecx$clV))uU5vo`F)e$f*8s%Cgxvh zzVGUHyT)DhgVOe*LUVrzf1l=PN6vrYJ^gdDy^>PcB-akNern6;Cs)j&Y?~;%{&Y23 zCX*AHw6_3oN&^^U+dH`WG584N{FS;s6E3;wk7D0c_o2NObeB54$n&_?xap0!{zF(T zFnd7pp-?p0^)|B#uk@)f)raVT<n}1PY2)Ol#z}eJ*CY}&@EK#ZTkQ3s8A!YkeqoUQ zMzw1F(Nn}NLGUEB$$nJs{S!LiT(Edov1Quma6)->yyb7m0ZW?qwfNN&r#U)QV&<p! z>cLL0a0-wj;Oa#6a{0+T;E_7V8yi7}Ov;GB8)h8`59<n_NbOEmybwyD>;dArHs5pU zJ`m=%VbSR;N#8NVZ=CkT>6U)@T;^14uH~sm!un}AV~~f1t~MLQ`f;8qh<U%@X4~QI z+jdGaTNU|ft=8pLozM2w>1-KhY_HGBew(P<{G8sZY9yDpO|SQK_c^^%BhyepJ)qFs zPe6I{DQe1~RB{@RU$m#zkDe#eQqP5m(13{R4IgLkPZho*m4$wD)^N8GhTq2wsS4^( zt46d`@x{$gR-m$@R-9f!Q7ARYpK0>n|M#h!E=faYJ|fA-X|1zHt7FXXj5>y9WO+u7 z!)Z^g<xAraf6dt239HWF(*)iELt9C#1KA_+q<vckyS<)9zx1i)si^H`v0_-z_hFE- zv3WMve#Wo8<OXok$^@s22~gxMdg(T~4Hdk;?_s$n0q6GOJXovoRH`@@JoZVI0Q#ZH z@%o#Cz)Gpk?Zu!{;^+2TbvO!xYJ=>hhY%Fn_ENXwC2r3XOlr#X*ZpFs-s#@piFZc1 zndAnKsVME(ELBfFUTLk^`vNW?gX|)>Kx(+HR{;OGX#lDhSC#-j?bhGRQ1J)Bkq%CH zs2l)_h3FYE6Jx|^Cv?0+gB262)Stw+FYsRXG`jZ5-ABqfh6J$xCYKZ4d$_`KHv(hH z7*)XRtsXM4L${?2FyrV@WHBHm&6rR}t+4>7=pi!e-BzJr*{B~keiFgI{w)m8%k7D8 zThE|NqlJ9ES&YNqhGjQxIZ;nY^FXAMUB`(20~#`$t%7v=5xFUSrOYzW<%|CACPIL- z+9g#AF6d@_TwGueh3T;FRFau!xcQ&-ZO<4_8qo8tySj9sijmU;$_!sS-)rIr6~zGt zUx6W;gKH!dho4I1)XF|Tt&s{hKHarec4B@hI+4Z~7s4Cw$`8G`YB*41-8Fw8zvMy> zIFnFLBhqWC^1r@|Y(B67zv=ClcTLTji*DDtz8brnfAn|W&}}n-O%GH_Z?U#_`TYB( zTx;PZ>%5G;zaP}8xT0y05Hsfciu}A7_a;%$la#=!1r@gU?jz*Sbox`<OLXlJ@;*Ux z326`IB$R+~OJ|=DWx{P6SH9*8EN@Gs+C%($fxDTfJBCwFt?)pi4soz86bS(y??U8x zvV<&l$taFO31IS941fwFitnN18livbtI$2HJYHB8K-;U3769+(s?=LtnpM^&dse@* zbm5eep**T*f2ymH?cnB)YJA1gcZ?P?TF-B+sM*)9Rm>HXymw%%_3Fc%5NRpTPt-r8 zC>T}&HKa)9LJHI1#Uu6<c9C${;)8&2i+YT-(0J`UzyzkSE+d=Ah#yL1k3Rvw(Z%O$ z;Xjz#S(J>7&ryU|x=-@}w@|Dm#W_)tuv@<EGNrQk-Fz5TjamWLq3YOKMIa!b{FudE z{=RO;y2l`R)oa1LxgBwb<$`y-$F=z6_bKgDL&qzU-W7BI)AW)<{nFuAOxMw!ToG4B z?SA9tVt<TbzTY}*S^vljm{wyOru&EcKuo*&E<+|_wf4<ym|8K(-kH8py)D*EU>3xd z8S$;!KyOOi&S06;SbF$7uZ!W^&&EP;^j8WZf5O-7xRm@Zf*~M}v(*U6YS0UHxw`%P zlg(Rnqqu*2e><`^OrY<hD+_nSEVl=kz{nz_yf6)`ICEi!<dAt9;e(gQ5X^F8e_!3? zW3PYOa7`IH3>}mY7qHB0KDH_<j5u)Lej&j!#8|(j9ffRGPy9U={xWj^9{p0}?YO*_ zIQfs2viW~rkWqqgJ5yCXNoCQ*Oc}h@wDyzHq7fxCy>i7>d0LshhI^H1JJUyVg61S* z@E<nfC4_rmZzPaBaCuw}wj2}nq7)LFVB0JbpuH2wQMelq+`mjJnG#ytN4u~4#Ybtm zKtz897f=`tB<TGyLSjiefB|?<0RI*gD#G49rE3j#$9emJ7=gp47CD&Ksvy0}l}SHg z=4>#<=4EC3MXa6o=MyGWSku?lBU%-*lHHLR<7+l(O)*6CnF2Ar6ZJ?pWvuH$2k8>7 z!{ft-9iCe+TI;zdnGvaJGe+@F)0PI}IjLG^TMh=28+%~e!IV}+j>z1DHsVeb`aA=* ztGz}$i$z0!lI{3!k$16$ptgjn=$lVb3?JIyCEUHT-0Cee4fPZG)lH^YKe+TNSo8;$ zJY3^Sgm~dL*Zg4*A|6r3;o<74YTN`^s5}q|5@-z7bITLfXJpX;m&!i^#zFjuB=Ov| z6t3{V-^rR%7M3=pTc0cR{fiVWb1&Dt<io>@V@W>vE#BW<+zhE*)+u8BaF@RxnpPYN z4u3aF*AUb(Yc4*TV*R$ix=X^MBT^<ecGqka<`g1=P<>_G@)W$JaaxG>u*|mt*#-tw zLJ!1Q6r)HZHjs1@m|eBvB{&%!6PXJ%4E<S&Vo1Kf9?$R{Gl_=d$?wDK%6tD&c@vY3 zie=cjGov}46s*HSjyNY|^0ybEjOA&T6mN>MSiEe7T(ZhL$W!)eC(ea=Sz;?j`U(`d zR#|y#3R{GG7ApyMSVLyA;kLwbV*JTEpgmuz)6YGfG0RJ?|H>@p3+SC5vF{lS*93}Y zx`m)+3pMq4+Os=br&J}9(i0IMNY?6nm1F9oo9E~cc|Bo$yWL3v)w<Jq>qiYX1fgU< z{#ZpIZLs;I{(Xy%mpFUAiT<m1X+2S={<o%I04FK$c48yAoZdVKMB}|Yl|d;tt}$%c z6qUb;O?uMRxI@UA8gSLjr6Jusw_=eNL-T#nUwQSB+Q2;|V_CNHbGvrCyA!&Jfd#+& z8a|FpUrF*x;a^+~;HiV1+Nt$Oeum~9(`VHj?`Vp1_*okhw)%ES^OYilV^@ZURx(@m zSX(D3&3D+)v41UvW#OvRPH2{4?7R!FE<`<+*0ck_la`qMqPk6tr#S9sQZIv@#NB$+ z`zkzHR+YK>i2RFiBz>0OBb*rU+EN5EC0-hyObiTP!PnJ|{SFpn#<*BzPJLBa>-e!V z_=@9ru@pvf=}q>uzPo@B%n7~z^?tXBClC~M85_mibQ*Dun;zw5keR#@zu^ggw^_4s z3RxfbKMB-;Llwk$*4If9PRLOspMl`cXiizQP!6$77#9=>4@6~YO_mP7h<}b|c4FZX zYi{cEw68cD9A$V$%{+9sbF{X}yJyuraW9@9Ma8Uli(fr(+Nq?4%@&l;agc(wCP*)9 z#XXo&bu%HJnX$J4<bZr@mX^bDo|9HEn(tLVl)<3&iSLLb3%MZ{LDxS*21Y@x?l&?o z-lNH6WkJMN6_7zYgTYH-%pBEST#XAOJE;>L8*xnU>Zf0>o#~;d8#hpOIEYAq@!be) zW9%*!`Zx}ZD2G8TF`rvy0<b`a&;$Sn$xNau#WH$~K2+PprWmeOOXWnVd=k1nI`C)V zSt0SfyBg&29lyc54W%4|k<r-TFRwD+JrZ<=`uCsqfkVY_j0$~!VlxSyu1+uc!S;@3 z(CmU+F~lCFLD-Ja1@SIn5G111=(ZOV?f4S<Ot;#{_r2dDg%PTZkdlSg(x=h<g_)6I zAg&|c2VpC0@oZadG~70L#XL@8ll4%<J7O*jC`rk538wsjCk{+WHnm;^-2z3E&col$ z!7U*fcp@;K2@3!#!^iX-1UT5U*gM)xV^r<f&!vl0&wn2ysk|Rv0$WzBc)ls&8C$(0 zF?yK6HX#v6VZ7;Ion+!X^}-%}D{BofaLj0Z{fR3pYu#KN!m&O{48)wC?X6O}GV4_V zs#^5@p1~b{M)$=1Wc*q}?|*rZ<$ryT)y|)};X)PrMx2dgQ~rvmczU_I^L^&(CLJ_6 z00H3>glPv1#auf!Z+JyZ{RvhI<ahrW!F=Qm0CtWLVB0==drnXwj^ScJytE<Xq;Gsz z2a){mw$Q}t+Is%FWmE=6Y0@-4OscLwc2iegJ`8$tqG$dF&@>RMAkf&JEfo1Pp7=dJ zoSg|k_p2f<vZ_SeOj6Cx(vHr3#;Dd&RI)d;D^E6(|0CbrERAtW3VG%I8`I#1L-oh& z@RWQO#9~SC@zaKaZD9L1PJba3=c6AsD=TbCy~Z4o#Q2RiicZ?Uk1svF@$VnxVSEJP z6`P5)1U+Ow^7b7w8(}8)9m|fQqryNY?~p=TE&6`Cwt~As(C=mdUq)xSH;*eda(C1# zu&dX$m|Y@!DNGtFOtx^z|1^01VRuH*^aHG6hqap!$VfTR`U;|=`R>$YcdJ6a!#?*t z2cXgT*M0hXK~Cje-#V18j{@N`<d7gn)pPOo2j$0#X~uUy!HEP>gdI0yeoIdkrv)%0 z35i4TrtA4ItKinx79`G4{MDH0xs|U4Sq&ms_wzes(4pmqbJ$OGT@CV&<QNJT38L~I z(?@t-s<K!Oy$hxY;6S0Jgq*<kRTXf-{sN?<sFy_Ip>JRFmDu5$AoQLJ`2}XTKM<`f z86bRhKi;4VteIQw*?+=r`-qUT7&*ps$^bi3<VLXQgY5*}Ts2NA_e)d*RATx(<_e## z{Y+P?S#m%}{hZ`#aI;&Zwv5Qlr32uUIyYB~%m)92-dB|>4xr${hJ+t%l;gMX_mh^3 zR7${dZHXH(rQ9#r9<%6=9fKN=otK_Y)?csR{^pKsyxd_l79{S2-TP{bW=oS`U;qU} z({B89{iI*)yY}pd*hBzy>0iq`S93aNo1{ee(KW?7`*@F(bLX(u=x=6Nw4!%bI8!-* zD}1$9b%A5rOP&h*h%#~chpBVYz!>|AbCfZvjgz-H5IBiGTx&<)NVpm!hIffUI23Lu z^jm)K`Sml}A-Iu@yI(c41>nxkj|tm7eN443OHY$85%);&hu*P$s6%wZnpK@JkBSw0 zPTpN*z-@XPT?IK2ml%YSK~k(XkyPC69+CQ=0Vr?zYXk=U7*(qzc7Qgjo){WTKliDs z?SZV`)7Zxn)P}zH!O9nUqboop5qC1nx_pt;fz34(_QB#+T#VDBq&)S@%M%^81&op1 z0?jYR(+-xnTGoJ8(F<iAhuu`!O9p0*d>i7Nk>qx#OVAr0I%*n+@k^xv$vuFCmSmME zDCiixtbOl=&tyb>3nPVT9KD9CjV{OPHDVd&)}H(3t>%s}I|q|7{_j@o*4D9{x#I5J zd^6M;i>X`73hJ?h@aUb(&M`0|@=_sTe*d(q6Kp9C5#{6aISuqkMr#t)@v|>LAQB_@ zX2nRvgfTo^QnyM+r6PO{M<~(&0#_U^-7ZWYkw3mOk3_Q-B>O`u9XhQJPw<|`%W%Pj z5bx3lq4$Q+@Z=O{^QQL8-k_>v8IB`-O?1dk3+5XKP-@Yw+5j>&CICCuPvQ<Vpam z&1J%}ShfB2CkZaVy8@U}OpJFN7w-?3b%~Z>Nwzwkg?p!R^(0>Lj)(jEZYzW(x|mRH zYDL&t!|FHO7_p{bx5Ys`0Sd$#Ak04oA{^cEL*ttAudD#VFdcb5Hf$uh`iC$~QBy2o zR6A0q;Y@3rF|3!#26Gc&ch7nE;aT+*kHb{q)}cX3izmYQq&I98$>9HQo6Lh5bKC;i z$?K>Y_d@cS6$EdCzMz3x*j#Suue)!tp`fm=cEg-CMh^r3ji2LxtxLHTZoROI&_|lp zettHg@d+>g0&x&J%%mWq=(12H^8;A`1%A#s`X3FxOR@B#11dUfK^S%7IqvXu${-gw zEaN%e(|ENvuTSH(EP)vCB54gUxZ9N$5?qGIT;<V}OhY_Q*pFv*ury7|?Huf{pM6Ma z`y+}k<eoyq`L@!PlR@{MToQya^2n<!liKHnxi=SMC?F+P3|pp@mq^~WZpYf|E;Cmt zok}p_9X9g(=%joZKSdR|I=|f6a=G(&Ky7*!$qi<PigD2{`Fz5tECeupO;}i})H<}f zQhB0!p57wd``HXdZz0to6)X5jFB3o%)xi+JG5sp;zm~{fJS5Xz)Q5d#t)CP^pv6+I zg3MXkRl}PGz}T8Rj|a1cN5<>XOWdkHu+o95g#>oA2qI-jqKniCxgfns9yc0<<si)8 z<F19ca?^$CU@UrMg>dr{z?Nw)jVy6Jtk&v!B!u_BPom%t4J`3TI1BNUSYD`Y6Z?l$ zFvwz$WQFPvxqyTGyUsM%b|!Soa=PB5<U~I$MM!pk9Sl=Nb)M|g8;JWMdiC-G;Maac z-=z~%cO~Ci3ls(+7Y!8$L`Y-wBCZj`eGtDShQQ8rB*tRDe*Q}GdRv}|ckZi~DPE9H zW{GYvz(C}gfF$?0R3mU!I_Jp+GNbf<ze}2Y>YIu6wGyw3JqV{65X(1V6H_YZXxiM| zQA#kP0)QdI&uUaxJ1Py9d+n0t**6Pnbqha*@ah3~2;l<E9On`47SWxs=x9;aK1auP zj6V`9n6upp2Z&tdS_ch-_EWH$iy3ZfGe(7{iGWZ0q375fM%~|GT!<4T=_1iAzsun@ zidJnD(s@f9sejq6ZWhi^;7t?<Wy|YRRvtv-`OHn|?UC~1#kJ^>CSdYU3Eq&w2QCd3 zzlRiBor`MT<{(dkyN9k$6k3#j&!{V3PF#uengD-|Zzy=RQ{P(&qP||c3T8m)3+VNQ z%K9(EK<?+XzBa&+RnHq#>P3U~PdnaYtS}YMuqWu-Q?G{I*r_v12W!AU02%Jj*u}xp zooHpTFjNm!>disz_A^S+YnEhR?9N{{K~Ttnm_PV{9cJ;ugh-dm0n?+F>?8tSS&}48 zv1vT5Yk$!T(G^Eovpp*KulT*ffpdev2Y?XProDQsg$XM0i^)Fc^i|=u_y+6`Ai`?6 zY*2d;$LZMF{!i<>Z$FE^y1GU^bW^1hOlr}tR-wavGl3qVW%)lfoZsI*p<4E717Pcn zbd?Fh{NR8*9`==cZuS+(g6Gm@{hbUuC4^^rEz>55!ytPzx$<;<*(-u{u%ps_;!}~z z7vTb9TmNu3qbaO;5j-CN&}(UpmY9}qi}R%@w1!-Y$7J6h?RwCkWuu=lYC6kVOls{y zWWy7%E#g2&ti`j)IU`5|;c#&5ZXH0NJ2uF}j~MncH}KP0Tg6VCf%BVnrZFwuRQl=| zhMFCi)7TCsgt`WZEfI`gFSb{Ef=-{-`6}d%xVbStYxU7=@vBQk!6rN@o^xLx<{*<w z#)`LXVuNFQxN4{spU%FntgYAfw!m28i`nZ9p4MOU$ae*kLf^|K#W+05*C3?X&hak$ z?@_-xYuFX7{jmEwnD=?711_Y%6ReN^Xb2Ebyw#@#HQou-1A}zO>m$iEm$`6FiUL;` zGB+DMJe}xxPB8Fc=zZbt;3y_prh0CeNe(g$5FIr_l1l;?si44FSUb!=)xLciI}O0m zg<$Cz?92WJwh(gi`Kr66oo(3~_iT4JINdLht7RT?$>_RBj#_^5lY{2*X6^SWbM7+W zFdc}cz=i3zNh*8Wuwn4|^;5Qc!DF%6y1i5I>3U^xp0%*EIH(!|Cp5mg@h{ld`cl%R zA3~GxKC7mt(XM3^FB)_!6hi2gZX1T$8r`n46t*b%)EPmsa1uxG$nY3*IPv<ljDcgZ zu&?Cn&6vR1m?Pxkm0!^!Z+pg1_AW4niB=~D^TV5bP%{Mwkjq4+l=ygBum=4G=L60W zVG5Ut0EZXM)2crp6CE~4WQ~xE%wq2Fid9!Y3ZOOyECta8@tYQzyT*j$c=z@^ZzbTs z5fk9K;(YootCux7t6qT+I3QLB2z7S4@hXzM)#4k!yGWki{dFF%Qx;%fM~qmIrO2!@ zF!Yk>^x*GXcj4C@2nxxhQ?I{Kgma>FCuUR-sE#@kI0g#Qlu+8LBoo5x{-#042r`qG zx|TiQ>-)(5b{CCEruVGZ`s)+u;h_;47n59V7Xr6Q!|<ldgF=xW_W!RLA;-Slq;ZE` zm&k6qKZh8oe?}RL_*XCj)i2rx;J!~KM3u#=DVM+@SxInlRD72=M`v>T`_X?d!;RRL zMQK!D86s%k{<qpzMJp=dZ>D)IjT&3;bRLs#0>hUQ)5^r3CBup{d~!lWbvirNVNF{J zJU9b?IyWrA<>xDJRr;^^zZ%(?JK=~rttdY@K1f`vEiNS#7CDK|?3^-wL>#^!C14!B zCPFRl`qI35k>}Z_tVuE85}sg5_%0|^PmII3rcoyX?6_iX_K$%0&=*%<p#0piK-&=s znfX|=NLha0V&SRT0Q6O7gzqgfP4B>9=Xz2roCzmoDx0(7N3kYGyz|}J2Q8nZR#DbJ z*>5!XO$0_2tc)*~kA)Yvu~<E(4IH{)-mcRILyg&1A1<f-Ygj67@vG;3+E$av!8gR> zF`>rPx%bF7I*3k8oCUQd9aIPe&8XMSN7)(+q!DUZ8tlqmpB>0${uwvp>)xXz-m}ea zZV*WgDI#f#8&-*tHH#ppQFZLL|9pc|N;3I4GAj~}*Wrx|0Oe1B5aX7Oe_dzCl0P2_ zLdeL3OHNkPe2hf(M-CK6@3=Mf+A^<ulxzf^oblh+CA!u*$JM|&^V#gq?v$N}>(ZLa zelK|Z@=<X?QPQjSZG-!?>!QT8<J<+46WRdB6Tiisi^g^#S`UWQWmT521gY9wkVE13 zbH-Yt;@(%%PTW`(IKNQ&g9!NuH)%+Q1JtFPg*b8H>ZK`rcF1|dOlrs9o6$$)$w@b% z0Mg+!)zu+P{L&w>2p!Sh#tgsv^j$^s4I74<9ipa<+J!+@5L~>7*oAW`#UytCd0Dj? z6_=soP@B54C9&VhnS(l8+Z}ugf;Sa&p@L7fz(wQZB0fOaWl702PC5GbmQLK&sNViZ zl&k>aTi|}LNt{<%C+FoYiyWI=eTmk(2l&ks^xwnf+G7221@=R9-EF1d?$XKrz9^cz zyp$HgK)`!dsb5MMosA<tomEXGE`pXrG9R3p;uSMU7*$9$2>UgAuw+UogsXzif6e;f zOp|mca^{%O>Y<_04#rcd7JDrptK2?3-5AjW%l<`j?HD{{Je)j@`knq;Rb6%k`jqp{ z8Muzkj&Su+xQ^Vn?KAhZkjkEy>(xE=p$GVVBul2;@yP@Qf0T2+)SZ=3hn~2T5>}um zYA1N|a3){cZzGiiE|)>{)8#(H9o_srFpN31>Mg62YGO?zoFDHLMT^+TxQ+PKTgS3_ z9sDFRCxRG&ep4bFXPjm$z<T4V*_W&2e_3{7Y25Coi54|3LDA-rRcN<{>6g3!-8S*8 z-}twO!Bzpi&*1u)@``l3bw!G6^-PDIIYxq1Ms>VoJ}%PY$a&*~O{jzNat^`=^#!TV zu33kjnx!qkFSoNCGIhT+aZ&C`0>$fAHy!OsN<v~8T@IwNgDJMQV_M^ZkXHcMG7d)- zrKh&w@t^$iH@29W`f=8O*^t}dDp$a5yjoCWR+A#CW%c|zmjiEqF5OzsGP6bI8A;oC zfAEH&YOx%F9@%YI;zjuzF||{j5JvK_g|3#17TMEUrv~oH&$G;1i_BMWmP>^8+f?q3 zY9iuE`VU}wQnr<P43dkCkv&b%^&qudqeJo0mR1rSD<I|}oqa-Zo|C0aC)&xes2<is z`mYKcLHzRi&U_LgghVslh()u=1Qls_8BT4MWF?0I%Y4E4*BZ{VyjK6lk~x#z8eS7H zv~V}vHhJ<qSP*|+tw+h~tn;B7+MQ0#9jVtkJk_g2M~N)3mourKwqovE2qjownty{b z;AfJGKKBq^ZfQDfk;PC{CgyHDaSF7b_0I15s&s5^Tb{jllbmbRn-x?qY9_cLYAAlP zD0qr6V_3QWK{=$taQ*gLtPL-FT&JB+F!$Ei^Q7gn5YhV>tWA5tfpE7~N)4@)fYn8q zfMAht7KmT5I)H#R<LNCy`cR=VKJUOO+Vvv(Pk*ETO!K7IR_LG%X&Oq~Zje>d7|;{b zWlx9}wQ14QT-Ta0u2~L3(ZC6G-nkB%p2z6>l;z7wTwA7#wQ-BT0*M^V8%{)}73JDb zwE7fWKYusXRUkjmJ)|`aF8*6*AcXE-Wt!y%%5pQ}Fp=aacOz4H8rahN)Ad=E=^-$# zqRqbjygJVS;>e9Zt+ilP8#ukRs4jr^;QjZ{yQ4<BuPt**e=BC2utQJCu|5g4kMqm+ zr$Ih1PJTU~d6*UF@Fzd!QI|E8j_WzvI~Z@%w_KoOO+NXRgK{GIS!LfwtzOi&%gI=; zcXT=ajuI{0?a8igHLRj-eCGH^pVI349pNd~qYKbd48@%RCBMp5Bp?(cvC3ZEd`cuL zU}>IX4nulW0pec)WSygOfp#-Lj;&1!?%N|TIQJTs;vezZ(z`_|df#a^HdkH^um5|j z1%U87vi+{{seObFsc0FoC@oRF;4A$%%+=P~;h|gsr|y}b_Ds{8rbWGnGL|`Zj8|yg zqqDY@V7}QWhH8H+Xs41@N6?}=J5WbwM-3I1H^ah*MHpF;<n}w1&Xt4<9|MDP0vxUN zCtjDkTORo;lb<OZiW#H+b~pGPYWtB7{4aQicA&^T`+L@>^x<?lQ9Hfz-FKH#a=4SS zCfwE(A5+R)W|<vvcZ4o{Dx<<5s!|z`52kH*Mc62Ij!Kj^S<Bk0OPjR^+l^pqj{d2U z%0c^&qQ%0tS_oF8EZ1|K;Dvr;0_CQp4K^^xoYJtq<P%t7fWy+&%jO5>#ztWNRO4Z) z9OJ9Qib2=531-%O4Tum&`;wH~kk#TFU$z!-le+j@#c0hhX&!9jfsUYUJ^}YH4wjm{ z1_6Q(OMTX@>h*Q)>8g7eM*^c_HQ<Qcn@mjVppQINsYNaH_FTt&GX{O+GWOet4_~Hd zzT8=N8_l?rXIj;C8XKAy@f@^F`+skRYxqS`arLbthKoA>26uo8$@xH<@!>JDCwYa! zvAyAj+z9gJfWA8@>co7y$hXp$YRV#S%xU`a-4`<K(wJ6gG)hnq%L01Otz~)TC~%Ph z;=OB(a2LdLwtBGmnOjPQk_@)1joyBVPu<PCE(dtbCb&Zr5TYW0S=|ql%jniW^jdCe zlC1vJGG#rE1}{?Mc?ghOWhZKu_ox-@q=~s7L}2V99p&x!#o?50rJE*}@NTtA`{yz> zHKoPD^TeAa)>CO}zY4?|K~*I6sAc?{r=6+g+jcyP3Bz76u0w=P|2PnstKwp`adn`1 z{H4NAUm-(U7*3O8YYvgMm9snZ#=iXC0&lDWdNZJ4?dkBU4%$@^G}$c*QQ`PZ9ei<w zEZHak&!A-*hVHDTs2n#;cpS7{o4o@ssc?pt2{*`sI=Qy<+U+~E!mXAL=6;mg0VbW8 z7>S}YkNkF%2Clz$u;v5^u7iGk1_vJtYry{@{H1%V)gocfuJAc1x@5my(y-fX$v^(U zbc}gCjr>PBM}3-g1sSi<c<NhYG^X$qpMo7cJP!K>HDwB1&-9DUIWJwawMnN3vVLq} z%m@qTEM$`GBe@^Q!R<7L`777^1=R50_U6QlO&`{m-TUySF?Mc(6+_5ZY)IxJe=i>w zNl5K146}=qvj^DmI)vF8OZpbo`h{+ws2})+Wm_(KfRXuKALkZ^G8bD?x!{f->WSmT z-vmPK@C?4;T+F=eXs&ShUJLm15Zv{{w=#EB0?slB#eC3ve(rgN-_vSkw;M=D!jthF zp{2Firc;l~Cl8Oa&Mp`gT9F_<ybE_K=FAP6`x;G>Tc@yUBX5KBN9SZA$v$1=_Y)Ro zmJVE{9c&a6_3KKMxiqI$y)OIb-KW2ikd@&%Fur5F8+1GT#S>=f&V5?Y5Ze88K<bsj z?O(heNkSI0C^s`#Wjs<((H<EF7Bzic{;#tA_W_SFpH>40Z$}BdZM>}I3XA$RDgLdf zx?2`u%_=DQ8ez(pyl0F4uwl53k#)$ets?lcG_K<>W4--p)_gVpYI@=u_kH2*#2vYT zhY7yp2c~theX8rB{f*<)+x*3qb0hhW(;It7a6y^m*JE?FvPoyL36sZTp*_IE*G6N+ ziuqjdi#Iv~du0@;PoHb&WVZP{1fz=N@4_l>OON>!v#QFfu#pz5WwDkH8>g2#?!;2_ zsPD!qeNuU~$Q}&xTp!FCXX9vVll@JR&yor6#NqGIQUgvO-_b+yFKQ<M5(63+n=k>; z-Gbx&j_x;VA`_I(2KdIBH+Js0Huvv*95Psm6F+cJ$jkjYW>WX4rA2oNlPcz&0$S7L z{L{WTvI(b)ip0%CO!F<^$gnVNOeKmKb3gtrbc}B}qQBj^iM)W@oN4;ng5We=<3wxN zF~5}XcSS=BV`GJ=d7IC??HkW%-1cAalcM4*a=DxiLXuw{n$h2?Q3UsHRT)$=nj#N2 zsq1MC&Ex9nTXuh~lwZCPFmI9<u#);|%&xJRVz@oPq6*IBwA8mB&wGDunBm$@V6L%y zk2h>eHZZ!3rTN1$0Az9fW?u{d`B?F&{!cvEPrJJ<jxl?uV$xCE7FF?fm6E7vM(NS0 zpTEZPLlkS<)lHN8X>gm%aLJsK>LKqfI@!UjPsOP3J)cYsuLTzlMHs8eAzj2=pms{B z*@EvKmQDY~mh@<Qkl%+!hr9aE@>6^)rVQg)=j0!=InY*-jENSLlXensT#qw;dfzOm z7|)W`M>?x5Br<sS70#=yccFKBN}qx7J8%7V8O1`Vp`okTQUlY{FkYr(5H&RSw151e z(6Jrv><Qq3{)h+g)I!SGJMhe*Z|IURmoUb^vRh3J?%jyTIPc%+&H9AXvW)MoPFQ(# zGKc<Mi<}>v(ygWP#o*B=s=n}0x7^*mcp0@<J#ZXWVQ3hiNQY-=ATOV(7-p5msn~Pn ztyz+HQ4Cya9Oo92MNO$!?fd-tp`K!Qt1UCf?B<L(Bl2t6T72(o+eJk*QLZag__l|T zJ8NPIT3_MJ>*W5LWyLi;xjwmS&RIs6E34_fEp?bqeb$u5Me)hj38~)X`=xDffjo5) zA4N+a4y^XwzC;==((_ivW$kp!flY-WvvSWyY&`OREJYg*zEMHz5v^Znbek&AGZ11r zzxa78FV$xHiFvQK`JM{7{`J$^fcbR|-E&_>5h@GTko%m5^nq-t1Q#r{OQ^-h8K`%i ziScftCMbLPd37HP?`$jhj`E)LQoF_bRdKkbOlv8MQIfYg3LeM$^}O;mQWNp6TGt*0 za*R(@#A~$IDt`<>^$JH<{jY^d&a-1V5WRMFaa_Ff6X8yz&V+OC8ffmSABDE-b`E`| z>5=vq8|78ixWFs~w-zzUh2#>5!h|DdvH|y%WOTewpKoYAABUq!o9@h_i$LMcygDl6 z7uCpN(iNwA+!>`fCLs(PF7G{b|5$nsF`%J-c~9m;Sk#kdq91i}gA^yn*ZOt3tYc17 z$NQnn)qG)jXPOLiL$FG8UG+=ktM#QEwgop8L3BlF4Z&ZM&9ihLNPS?(Ia$XSd}dVe zjFcBOGqebTWOv1!Qd5ji{p*I>f7h1QK(iVdxC|N09y~7&Gd|v2FX%s9M`hP(SsDLU znqFhI#BjGI2tIl3TB*r9Uezp4x&6@~4-!`A5vjYr9DaSQ`}VJF#AsXCc7*PNkPpIl zesI6fd>eIJwZ}pWmrkyqN1n@W8ka#$DX%B@9^r$+U8{7VSCqnj8J^1;-NK{9pmo!G zJ7__SLkkg?Y<~B5&x0l~KwrN>bNaBI;pfd`EMox0{HLX+YYGJcZ#<LqDSs=^XhYp} z*C(Ip7NDW9jPI(?_<&0$D*ze=54zpJ6L-4)`eXb(s@KDFr$#(5OznpR7=!aA2w#1* zMl74#7gJG=QIsFtHa7V-*Zi`lTI^cDV5z?n^dPvDexoL@+u&UpC>kJ0iga=6SABG< z(JbhG+mgSvd*ww9IMQebHz>~uX90H~leu>_F_NYhubZq<$4=V9B8b~jSpvPXBIv}& zd93hF?8L|WP;*nP$=!u1=N1%e#@IV3|KwMV)D+qh*jNt=pyt$|MI-5lM4L5e=QJQL zmqo}oHh&3hx*Z<p*VO)DAP71f_v%13mD@a0#83~Z)b;3hY4&Om?187oJDt8lAl_fi z*lopWos_coR{v~tOU1b>gYZ$sJW8ppFOpAuiAsj{UGb>fDAu*7c~rpkP|cokMBd?C zm{+Rj?r+V?vGwkdu(~3f<MrA>p`?h|h6Nve_G#eSv9%!U2QN|F-K^7#;&EAjc)i!5 z+}Hp>06^ir<R?mPA=S|4ZGK^*?|L2&Z2}D}Vj|m<qo6~^Bl~}8hkny%6(k6@OtuxO zm!HK7;->2(Q8|0jt_RQReq6>8q`Y~E<VaPeO9{N4ehr`csQt;JOExwMWH{wG)g*I1 zHpe&KVZ}3BA7H|x?9LMS&!}B9aI~;*e&vJ4+fbGYBPd42s&_flUoW8MO!8{_%x7}A zH@|K8s~<CSQeGFSfB1c}cxC6P)ZAoXEvQ}9885b5*J-9RUns)J#1D9*U}NdkvI5)6 z`RNFuXccr!XMhOt+j>IDH}#HGl`qB^*WaQ-I0>M+fb0y(?d(|3uAAqrwWlH2bdIF` zn7-0ryd!%FkR7-N<cI|#Pq>nYwIF*&OOvq<0ad0cCod*{%On?wykYBFOeg?Fv)?%A zJlr4b{T!72z8%>MP>)f52Q-c0fNFv$l8vtl=9iC>7K+UpRymNr&B(VbQ<X%(iyuZl z`5V;}s%2I!T7Nf&W4iI-+vNy{n7x*dst9izQ&=CrHCNyn52xGeIvu`s$+AAOe-HLu z*40?>Ue!!~LNA{i4|%0I@|)@=gH&g1Qcx7-IyE)!vSvIfN&KPDBv&Qw-}sq&QRd%2 zB>X#hIKPqvUN5u8Pxg^(d5?E2ec8SqMDJRQH`0?li;XT<O1JEu&Xt_sNx9Q@({j#w zgOZrW*k;h?)>-^__^*Tb;Lc_KhG>)!v=&RLt>jQ+CytO<@KaS0m)Ui6sChakxA%lq zy;)_71@q}g0pPDpXXdBDoo@<6+e1{BNCHSiuPuj*Y?n8QrRQbsBsy|vb|1?=+P_L3 z!^O2@w6(tiF#^&R0I5@gO&a=B_Py`tIJOh>L^z6cwXbCcjV{XeX*&=*d6n5gBF4Ty zZ;O0iGapV{5akn?q!lK}i2~z)Z>8U=P6v<5eoQNHNFR-7PqxMD^r&I>ia@PjwC56% z7h=~KlXI$HX1{%%cy3q2yuJK^{6jk0v{jIRIJo<6{}ik)@>ex^^6|nq7ve7z8Fyfx z;U3m)rBmakW9^ieFwm+tOY_?u=GiWy<U(v4sV-g;4wa_?5(JJzw_~P{VIhPLTLNfB zc$u>dQ+rurcX}eg)F@Bda9~5adsA_o**Nx=DX-akV){U5jZX>csoopYmky|?_Ef6I zAuL^1(lRS6(yMo*21nHE-&;I$F0nX=4)fM*pF&I4lHC-lDwIr_1IpAE{dPRL$vUz^ z>sl`a!K)iTa%!a3Fww&eR`Nv{V}cB@qpsz%FkHp5PQ>G<vfD@wn*Ocj4zkjEi6)37 zZ@S(jaqbdPie(Ew+|;^{P+?z-&A4<^q!Xsx3Zytz2xHg!d2HE>21OM0ECOYB6L(!^ zZzlc~F=Xq@V%I7;<~;Jh`%Ji>u>K?M>gRBV+*`+V5xQoN(`*ZU39{wP3jyB?^zxW< z^+eUz471Uw{a<O|xxo382W6iG_DfV46u{+ksz4-7U4d{H*S3UE6TO7b_|qn&lSTyQ z-`MDnKN4>0VFMkaTw}-aizs&M)2F<yDbSATd(o$aPyCZ_%0duE729llf?MrdhCeMD zbI#tt<!~qR|DMZId;nYL7+Euadizt9-+tT)y1rWlJT9vGo_b+5&^LU`GL}!#NA^e) z@@ARR=w@>4Aw}RKdMPrTwHP9U3h9tNo4cJ5rGLV|IFW!=VW+X$Kgkz{K~KgIf}0j7 zAP|bx0Y&bp3|bSMd+Q;0O>fnHA3jMV7wS)>#wN9!hx%LF1Fk4Ri=q8QyT@E>P*!`L z-Kz!n>2FGoUKFamAb@WLX(4|Y8DJc3^zTT%jqDq9OjelJ8(z#Rc6zzr$8MyCgB2s_ zqhi0@YghhBAK;W<(+mXN6<`=5$XD!UEMTiGn~NXEJTbM|MiO>r#}R|=xhlS|DjX_) z+^Ke~cT1cos~x*;RG&DmA9WPWcUX+NQ}vi>qp}S|Co2#mZZ0*bWSOkbX!7klQzKYQ zX(-K8AJAygZ*jjT7@e@d)*MLai)T=-OD$a3RiMh$b{(~BDet#C5R=Sj`KxQnF(=U+ zvc*x_guGLL(aXX+=aWpy=Vla%Dye=Ql5axGGyU^|ppn~i?I}D?S`o#(?*6mFtEhx- zhOqq>sTChof095bBLUD&{IE##{r-jOKnu!qt|+zM7eP3UAbYGafBHR5yKW`78W6t9 zXabo7S|rFYIVF9oX>+a;b?*iPjWH?;-())PzlLqx5cqV7@x{o3$s^HGZI*IAxX&GB zPa}_f^c-yvXoebD+Zo>BfwY+?|H934xVyKFQ@b=S&LhgZNoNwd`iqn`{IRc8uUGEc zvV6mOS|ieHc|RA8DYbIS*6@x*$hRo|rhk;d@Eo<aDvp3BfEwX!H}_7J_D&LY2Xyg6 z-23PN?_xyqIYQ_vwQg(2+a4#iA@~5G`g?!Y94JgzhqmV`p;?jFV&gGxq}Cwp=vMZE z*Pv|(_q@C%SB~7wkS+7;z;Ku`QGoqC+}SSe9go^0CSa~|YB@VrKL{B{3H+fg4&iEj zoOFbug*}RMZjMV`X#?(-aURLkKSZ54$bMqbnV$A-T=-3u7Wx7T<&MSM>?%(&!$7d? z3qXS}X%1S$hP$H&KxhfDjS5P|X&bO$FMNrvl6~^aZnF6OkgAEm6C(fRI0_8WY;cD< z9&vM82)~v6=OH=D+7j}D-dT~8@ArWbXT*mb1s)2%awVxpwy{9EX89n0J)wdukl;u& zZ&-CKmDTe+X8zHXu+ZJa;;h>33RbWYSPr?FegUN{vB-QI4|6wWvzcKyMrBpfBQ){< zQH?<>oeLKbJDCp{7DRVAKTQ^rQE7=wG|4+nb9<pQHAG%2j|AZ`gk=*e9>L?4N-672 ztXCNY;c#QYR)$DbjM$2!(iWpAmdW>vHeS$r^lMu2Rm0Nq>3tO>KW`r_Ex$z&|BlAt z#)H9QF}ll&jOsOFZ005i_vIG0xfNfCCwTwTL99_0Kww;aJ)5ZkUcR~2UjV`UD(7ob zTKebblbqLdEWwmm|2sA)T97KI4TV{1mW&4Q!##6qBI!`69a!=fB(XqF>SFBwBxpWb zq#gfz26@>$2S||9^mce2HuWrMB=_*{PB>fmg>KWSBLHmiR*$#-G9q3TL6M5j_egj| z?aCVz8~04>Rwrm^<UGg*_JQ3v7sco&a9$Wxzb5oc-jxBEbT2uSpsDy9eY3OAyd{O_ z`*crS^keN*a$F`C!KDPVsIjrTRdq8wH?T=Fa>-PNh<w+$hoXuq+5yW#)YMbfJvcV* z+3l%&0OD-c0JyVszjWkNIw*!3XPV1Z3cfV0tA|dHzd$r=@EraqAY?|QI>q(Y&h<zS z*X84LrOi3D<Ud=$F{18t{Mp|Kos$i1j{-rW?LV6;8je-sLY4&ypw$L&nMgOYlgSN+ z6le0?MkSR=*)-lAwMl1pi~m~}{mgLLnr8x3Wrd^t;EEy;!;!c^9B{#;2jFlM!2|)^ z;nf%t3kfEu*bdI;YMXcx5io5Gj+882CmhWnyDr=BQUKfMN8DsV<Uju?TRsM75b?q; zO5t8L7G7~GaZi=t+Bqk9*WZW!0^cE(@#Hg;nfqBqekWc~-WMeEw<&G+8Q1tT5SDTw zlhpOZzxK4Xfy$Bq4LZzAxG7`J=LZa467q60wgYr*w0#al*x83rPBQG)kl+&;!}pFp z)1?)jF>x5?`w+7LgW`|^*Ccv|R9zMcU#*uoHXqCimp6(~Bi<=~<lJvXl2AMXFgbmT zFrN$i-;GU^I?sJD7MN}wdO@+@o&GbClZ`KAXx@Vs(?57snGY&axCfG36Lk2Y^8{mj zhXMIXLkxGvd*H)(5SH-1MO+))>rUXmV1I&af=ISadhw75S|a0g=Ahp9ub$D8IJAsN zu>6PZDrP*@fginuS;5M5Gff^`Y5(D@QR6eF5brhcGX`WaB7+EJJ#Yc{cjf>08Ifrz zwFM7382RJ)a&D#exk+BWLv%1*nTlN?sWrB29d|_L*ykxgN7=JWcic;e^js%7kW#eB zj-^?OLap}x1Gpma6o{j<EPwMqx4DS1Y&9pnO8M@B`M+c<W><PhY<iN=8yZ(d`x68K zH(1O8XV!#rZeRK%<jHrm@GF_d`QGsFO$&cg*)(nHjy=<bRnVWYkTm($NDWHs`Nhps zuW^f6dJvIyB9XgDUqE)GQUvBn-!O#3az|$ZT=Ke*0JXzNS;kHx@&7$6jhzSuji<j+ zkT%aBj>4KqWLI1ht%Db`KB@eLJi%w3!mpDT>A&H?DKqBI;hVqY`YQ-%i~f73LY+=S z211gQPcfY?7f|m~l$WrHq^q<_hy>`K%SEbgC82#10MZOgdzl1B0Pwhp?w4@5(c^H= zI8JZcT`I6gDL+%)B$Hv&^!<GfaMULIFF5A4;UI<lbwp39gFHC_&u8z9moDkqn`>xF zz)B1_4Gd4^rcwSBfcH+#=0964bxvETJC?gNT#qCc+)gQsPaOPTl*z7}KM_{Hl|WL% zm(<SN$fiFiVgCj<O8e3yE%sEJSu8<%<@mxcet2-ZJXoo~(^$NIPA0tamB&d26~$QK zxdZfz@3x}Y%;PiJi#w%wz9=#LQ4zQ?HGj+oNig|_E+XcUi7LoN0&|k-Oo&#i<%%f9 zL~J~ALWWN<mm>c!bvFY^Z8Z<1CpK6L?~I+lbdVPD;Bh}6GUN_B=*$MzQRZquF2!)E znbZz{bg8@$*${A`;>2@0b`u+n+qmyQp3l|`de2@1lAkQwkk4y0;LxqU1cWu@`<w!v z;b*WH7^1dwQ%b}E*j;iICGTwk&so^h<R6bdqbhBlL2e;&T~9LGAaktB%gq_AJDxM@ z=c}Tn&d*S^f*x%gtp!O{Dh3Unoe6TEW0}dN$H10QwMA)3Jm>t7__u>c)Ufz2;Q2dS z&_vL7pxm&6EVqM2;%OZiwt6E>JfCd`^<J*b7q>AM0`;E!DZEgbka&6Bv?;WZRyGq) zGY}?Dj>o-3`tr@uGt;s*2QDC1y^+s#)FH)ikgua@f;7Tw-|qMAi)ACPKmRXqshWUE zZm0}lP1pI;{}+OJR}r~#36DUYCKatIB{$r)|JZ|(uZI}Owthz2{z~V^nKBya{l7y- zKaFh9D8#w10Cbg$=dEFGO6>ig$r{0A++-to@lKX~Mg2pWQ}xI;60Duvc+X>Qa2VV0 zJ=#Z+05^%_YC$tqrv70A=$|iu>zCBVppSTis(~-FKnQrBC1S7sZJ8YV88WYe{&KCJ zOnU<)yQ4Cybhc=$7i-4pKiaQEh5(QphO@+UdiS*Yj&J8F{YN)xaAYv7M@Cjpx~%#6 z;NuF8N)8|g%cUpXzjOm3rhOb43l+^Q35}$H$z1h-(#vQ5^Yn8sjvPk}7yGADcDjxz z5RYtPcXIG0ge*uD;y6l)fBb`PO}Db;cl^Q(<v}GygY}4!g`}OyS99gr=7q1WE=;Un zJgUxhY>;FFb@}~b1NJ(Y=rl2gN&yDOR4t0Z83fNsL52zRfjk{-?re?mbC9ToKx|N+ zN0<S?hXAM$R$MF5uwoy3Qk?$!e17O9**lQei<#5Qz)6#&2~cBO8NKsAi>NV$FAdF9 zdvV$wa4H!FCMxnmjZFw36trqXy#4$VCUr<35^PaPpXZg4QhrQJQ*mFM(B;!W@`rG0 z8wm5;9?wErsSwjQfEmJw!)Uw?ouEa4??`}e*a9l8^g65D0Mi9GAZZOvJMuu#BuCdu z&aQ`IuR2ES1x*>57rFG%6z;LGvEar2HGnNE4t))Ba{g=p_g`Isdbs-DZjIuu&fSnq zxGmbj6?QXJ((mNMX9(m<8FcnC#3X0~SiyVTDd$VuH_yn_{Fe~E`_t5pAIa{9OK!(V z3OD5TQZ2>mzX@gem?&eU3$fPbKsG6Smv*U0k&m}tOoqJ@|6;b8pEDR0YaUy+^*w)7 ziNjD3i<nT2zyR|FbuB$GjVm*Q`Ck5m1yenoK$ocjB~r>+*UJF>oYKhZlmH>UmeeET zxha`LKAa?+Pq1F)IYD0^^qmijbqp}P!3=nFmu)zC2OduUe?y!4y%_!=s4Bts&b}L7 zURX5%X2kH^Oj%STikN>->~`u@6HZ(RM1y<hgfQM7Hy%vkY{Bb*MPX1Y&Si_RqYF<L zdGk_$-U6ISLDE$bygdk<oe@1BzUK?j)0#g6IDa_}0~BFK<U(S?Gue>{UeO?)Z1diu z7f`>;@H|qK)EUUPG5V&v9Gm2Q#t_VO@wtSAwMsTld5P}2p`<2|<6$lI(e<Kr%K-!R z1vSYX+bhi_%YubKY-(YA(YZkyTfYj!&mQ2wDl}N<NI&(p?Vk<ALxIv+_DaY$;C~-a z0zdig`2M6+SG41g_+}U~Y)pYYUr=$@;}>n%7M4p*2uFPMT=W#h5Uj9=MHfczAP3B= z!~!w=dk2;l0jcbhL<nJkhrlN}SpL9Zf~4=W&>1tqE@O4Ze%J@Xi&yD=F3;Cd{E+!L z>A|0u^6uN4EA`F)!_-#>MA<!W@6uub0s_(vQqt0)bO}hOq=a;c#3CTw-7Ou`%>vTh zUDDlM`|d9Op8xxeFE{tz=bV|j=9)Qkb@(SPi$do<6aRAuVmny-L>|xm;z*6}mehM! zSL$H1UZLwQA5b*jh2;U5kYh!;+wEpJk7w46*mQ=CHGXs?od&@0w{C~k)C2j-U_F)n z9iDEXf9Cgg{Du0s`-IL&AIEy>`7<<a?Rh@vNK793ciT`{JsofxNx6kEf*~wh3z7F+ zNK|@<3x`aIJ-v-ODQJ0RL9*pu$LL!GKoX(v4v$b57G-L&ZrR$bX}Z=&ASO>z);RUO z(cXa{p**FM8u!H*f_~03$*5#ZJ0#dFV}0{>P;n~YqV{`f{T>e)mmd+WrvM%7+fbAQ z@b|54Q-j1}dlnI_qyXR(EOH}8XkWh(CPkm5hb}Mb7u>7YJT*DJB@cpR`s$BUp4X~b zdqDxH={?>f+1n2&!`(s!EySTF(31!coAW$@*^c%Yw7L(S@{=U+0gMD65@XQ%&HRY3 zS>`sv-xpMooopPyq!i%hDbhapTOJu;K(&ww*`4cyJIFOIy5;~4r+_}}UvdnSYsxsB z?>zm5_xQcKpd;pBOAkBrI2~Xx`wi**`pzfdm2UKFxHk?BAW;u|*GWI9{Cc7UkWSMX zfuQHGInDXc7krL>`>>k@A>cz69@u`%{0(MW<lg>20`?8WsnsJY&?P~$nZDB?QylY0 zhx{z-B6y{L^$T9-fPlrvhd6s=Z6WxGPD=XIyZx4*T1&Mg*nCSuy^I>6Qf4(%Q?R+| zkKmTVwO-_WnYYe3O9SKWW|p7=>>!3?8ENG3a&kEV{CpOaASQKR>Kpmtr{W82-OH;} zrrPDeK|$bcj)^<W2%6`xo$7vzBY$d*aA$F^l_Nm&OK*S!0Z_Z4kMfwbibQ)TH7=Iq zL|MuUOAJln#__^mG?&eO6rRgzKKq*l7<9s7f=L<TYE<ZnwlO65|Gm%z%aeCBY@F3( zybJYX2<@i*F#e;`msO0etPo+%yM8&GfZO&vJ)nv<{VxJhaZzZ7mqmBF9!vVGVXP{{ zqe4R))rk7)F?=#bp)&2IBi(>y-eslEWzD#34hF#{&cYWYxQ%YFzMN5>&9_0PLyL@9 ze_04_nyBp0ZK-P&Np|TBU(L=WWRXAhltJfu47%cFuPTR%vyvdv`&#e8bO_);IH2lg zT7CaYDnhKEqU$%PXgEvrL5*Ej7ZA4ief7U{r5JDXAkz-vKpY%A<qj}}m^A@--5KD^ zS^T&2O?Ky7JIebP`}^pNh+chWf>6N?9{TDoW&k;@cS-|`MG0UBBLK=XO8ppv%XF}L zvH7QIUuh|bVfRckWB9+-#abm6;DyTZ@i0NRZVf;0yF%R>fquvey0DjTnnKnh+zCfS zzw2b*k^b=26QU{^;1%Rc$^uoRHHSuS*hDP4z44m2y?Sv-MM6bMApYi8@^BZhHrb;X zxGMN{^Gd?H!_J)deq<G@-Sqx33}(Ge(FyR5qPSVVc32FtnlVjAzHx!eDFh4O)(iDF zzv+#y6;pz&PXl@WuES&(;mG2d=)g;m*i_A|yF=LS^>r6D0uLViWt3Qi6W~lU{VYDN zjK4;!SoE9F$?LFW5IVz~z-M{{gum+YY3GzRKm_Qn|2WP#V+|i5Ojv{V#T$19$!V=k zoZn-0=P};GymvQr`1aO^8wH`y&k?IFbiOM;Zw0_)+n{UD=K22kK{bwc@_ik3>larS z*m!Jsd=TNFd~i|H)|Kx1h8BHoXWS0HNO#%s6yACU=NoM4$ZTg;QW-oYZC(1kNx8!6 zaUv1$U`r?oU;OA$rJ$FkoCkU%*M=aoToj^bj{<Th%u2@L9~3V}I$0xkc38~b{s{q1 zUjbo0jt&N$&@J9f)uRb(NT|uWc@8J|zU5n-g@-{lq~hMDHVp9(b?xZyW(?C;>%W~} zO*=wSu|5>cihqs;4%hPCJFx;jI&-C19DLwGg)gQ=b|8g`dFCWIv57e3w;>+#G#V2W zEWz=kG6E2qqJ!U|t|1b4cxZ5|z4(R#4{Gx-Gy<lGz%2XDtwBlofYBFLwdxWrGj4EQ zQ8-M~50ucJAvbxG9C8+BK%gEw$NBz2t`yF+*|{41(phQ#po2bqu*Z0d3K|{2oxl<m zZ{rRP7s*58NNh!>&jf4G{7&{9wGEWq;d397xrY-Yf3`yIB-WcLlk?2ES<v1>m7Ac~ zDPU*W2xo?qxxS0qK!2fJIy8k2FXiFi=OK36Nnyv)4SdCksJtUh#%c+8W3{+ycZA%_ z1|<SufcNul$HQ<_v=CIpi8JNP+lGoExU?Huxpt-o%69FI#S4dM1xb?NN!5>yz(}<< z&IN)ea6tL2jS&IU0FZuGVBjiwsl4#%hg<6JG5EuhqC{D2bP>onc+ZB12>e?C87=2l z@SNsxaWtoR#-}}O1BE}GL^%WE0FMt9kdSh^m_@sORd@sL8{z<zgE(Ll{vRQ8e2y~5 zoCV^I&d`rVF1Sx%`WSaGrfS04>prg*hY?;cQ((H*vEK0r=wR%b+5APvLlhT4KUE&j zYahOG!J>VToob!TcY{`z@}GX<P<rBwm_jcd{pW*3;`1NqK;<fp!AFJL9QK&RJ@+{Q zsdG-%@VHYWb`0oly&v^>o(0jFY47D(QP$Zf`M)2Tm^md=71)sXFxvT~n{neJF*fuO z3kKq7wD&O3TtQla=!7@~Eh+csWeoq=H*dw~Lb8CCj(U=;t&4iaj03nEYLyJR(7PCi zG`Nd=q&E#<^d`GrI-h{yIykiU#%d5eDF1^x_9SY{!B}ab;OnCwQXQV05bEJHo)^72 zM%WQQG5Ykgz+iDv0CrO7;Q@<BHq@8QBhl|6NTj9c#I$W4U6u$y2X#6yV-J4W$8!G) zFI>IPQ*e0&KkjSGYlKRFK{dhxN}pgO*F6MGyEl^73L`tuTMexErZKtwf*utK(2Bb= zRNjuz=5n(J?^a3xoby63*>Do)p$@6aC$7U<c^p)Qb$?R%4u4&*YIlF=AFCqbcx{bJ zwRZ%<&aNf0nB<Yxesr~!by#fi#-B(Bn@CNF7sLz0NDwZxHUBvzqG^R9JrMB>-EH<D z)=?KnaumkW67hd01x;fizXN6X!vIszuCJKmC=C>JL&KI4{$L80N=95&I~E@X+5YSS zOs*4-OV-q*(RhNil68>N-yz|w)~Px-oLN7igDNq=o?FAoqv%>0Egi8{^wu6dRvqX6 z#X5lY5x@=SB;hVe=)RaaF3PnZe{aZVl&QD*Y7e%UqT<WMIGi2y1u_7HV$;mml%AJ& zr4W!COgX^-p4u19B?ovs#oijyY)>iHxjA@%x<?q|_&mJ@l4@{XB}C=N77MP)szOU1 zNr`wQn&_zR-s>U{t0Q_v05I`LF)`D8+-YEMLrGr;apr-eKKCx=;-?HJ_H4BN`H!3w z&-kmCsUzJbe?Mi@oU;xL(;<LG^5mC1AInlsSq{i}MV}{|W^w%p#dYRR`tLCmEW}NO zFU1=GRqqYy!w;}W!bkk49{K=&wzePm42A9ZDH%Gobx9i7{+THnmK4zb<i$9>4K<tm z&d0HAPz9QB#hXVAU=w>Cv~caO8A~r3VOBJFsQOZppV!G9O8LM}CVo?g{rk7VRj+`A zNFQgboPI(lCBV*PIDa76E9qr;EK9F4YT*2exS%JL{0s=kh7~$cRt@ivN$XZ#smX1; z+#EBe1f)EklE~VAQq}eds=`{bA5zsLHU~5R$E*K2`V0BRm^deu7}lZ7CilEM6e0P^ z<H}ba-_QHbBAOcls8}Q-R*=I@`K_R8yZ@*<q9A-;?h;J>IF$Z8rCnMW(6hz7l6)8? zDj|88>{CqPOrJ&qEZ-D&{U3&+pg%Ogy-j6XQobATAe8lcROe!QiH9g`pG-kd5fbm& z(Z@^=0{%$CO$X#asfd8^C<C~uv8jI*xb&Fp5Yil9ZO$<?#(&JZ$;0;ITHV=uOAGdc z#UnTt%1RLP<a_}Kqfnv=7F>;RCfD|(L0~rF8tmtjPTWI}Jb5hr$Q@I`M!e1d8Xfk% z_f=GAG%&;-+F1ENcuu96dpsq~WAOdMxz+uojg_<FE&LO0+Dne6UWmW5?lK9cJake9 zoE`svj!0wUfHsaNo7zr#8Ql1>L`wT2i}C4~uPAVb`3KXs5D$-_1LaMu6HOK$p5t4i z(>9prd#rEJd0+R4F{2(=Fgq4#K1X0S@?;iAtZ9}<YljP3*~yGw-D_rH<+_XTmn}jV zu0N3o@x$>OY)Za}|5F!2Np#RQ<NMN?P7Ds($I#3szh;vfB+mTA9;c5?!uG}ROX1($ zTrgHS1D4i)rn0}D&2v9be6M(5Xw9&ai!uCYbc#mK;@}+C-ef>asd91*$mbU%&{!DY z?)G2Jg6?Gg-R5oB<X2`ntZs%)y1mMJUa-8~qc$m}e+8D@@0EhTK^i9t^K}P}4k!QP zcwtGu|ESQ0JWG8`z5>B2VB>wgQ!w1O#M<aW>e1ec4b&V5k1bLsRR0M2Gu^Si-t=gK zP$uCSh3i=ttE&pQqQ>Y2Zv)P5#S@rSh%U-mo;{QgeK@ZP^sr7B-B0&>{)(>QKg$)5 zP`i3c`M`XncgfElHn;{~PqxH2Uhx@d8UeOcj_FyscZdMp?2qps&kTo^kDePN@s%+! z?o1Qnv+g);41=gfbo8+i=lY*iN+EIUA;m=ogRB9hLXCn@iTi)?gfl#CE-CYd&~dT& zS`8$vp(7Fa7aog@@Wp;O%ivv$JaGh>dyygGqI&K^K`}IdwL+CZpS68&yp}Id?85at zqqvok%Q40UghF6M<r<nKx;atfYrMoO$cS!uBWYZ5Au&`p^^rrARr{)-`hy5V_{0XR zV?gT|U9SG*E*fqa;fiPT&>j`*@ZSoSG_az@b7&d^Tm0A9G*cI81x{LgA`qNo#`Q;y z<6x>D>iu^@=ELCkv|X#tbp8L{Af|!(7Wtgv)`CnJ>zKr0vT3lt?z9sD?)-pjUmzN2 z+dfQ@cMu%LVdBbsCBdYD{|a_ltf$x11V{xs!bw}T!oPE594Y?Cq-LR0Y511?0Q7~i zDP`zhPJM6m=X(at_CLZ5mZR?Usg+#^ntsUoOCo@!EWq>Cqp4HYG0y%3+_{NImj!RA zFaDCpY1_57ArStT)uB<|a&@MKJPjW+!s7)>z=`#fMRJKF>sV^1xu8A+7C?G-C1z`i z1&l(4)0Lg|z3U?$&odkXS%sTo1mXcuwjFj9|AbRjIQT&nb2yn1iDprl$|+wLd{mLW zgsRP`{`2jDM%#nL8Rsi_KbA;yP(D=&F_uxDJ%JOK?+Vb$CF!h=+P-mIP~&_xO5PRt zAEZ?@3UWD4jB-NK%iez5*AFBlOrHjBJ=z>4=31f&65>|LjoN4qR%qY#G%oogi!I{d zbvwmlL#?Qnffp5k_U;4@idOa25c*R?SU*N+JXp&aj70Zzbo`$;>1GE2TIBX>G9a#- zt;ycMp>hMTO?%ejN|r+p_`EFYN=e-LPG2mQaj8*C!}pPy|B~6fL^vSC(N_BGK>`-v z%KRau9H?&wpPYOFPcC=<-7EQK-@NpH7%y;MrneVpK@IZq{U3@6NLpb@AqY0}!*(ok zY#Ah`10o`qgC03s%P^>DpZw2G(M3M|tlPrlsxdAB;(z%m|5d5IPW`*@$biq`ZO=Wv zT-UX~kVO~?g5LOs!QMw+r~K{@u%l^nk;S7tSqs-Q^$}3YMi`%9a3aXY8cw1xWbTz` zz5Qp$_!ARL1YP%$wRA5Wm?g<Xms6r~bsj@vIR7$>6Effom9~EwBrrwWy5aSr=U>*I zv5_Y79s8zYki}zAN5H*|f-VFu+~-n?X+*q@EKq%nfD>;GbGz``933z7ZIE5*ex>I) zYhVDLK6K;~34;Ek99}Rb#%aTP@L03tE33%6D7EMQQYCQ3Hu<NpQ}`i)gx2we@HVqD z$3o^<uDr^=ZIl9f%A<n{-Ajl!B4Egk27g8uekf}f?VX#zKWa<idyJ>F3s6rwOIq;s zjMl^-l%SBSkTK7I)V2<QSCm5eSw`xw=8%IbJJIOu<OHzL1jEpmk0+pIn}4V|OHt_L zFl^$NV|Xx-t5&|Dgc+LaK~FzHu+Nf)N7+r&%tt_`cw`wcq7+{Ehmuxn`2O+B9$p7Z zJT9+=6M2_a5gEtO-eJK#oVP#XP0Du2dhO&lu|*sJY1h`>Kk_?@5K6gVS>r|`K(1F! zG=x?u$f_$Cu^e#GZIvJWw-uhPGG5A_fl;KG5$hAq9(M82p7O!0T^O<%gDE~gGh}rR zBJRceQSS-h%;&;#I<4LohN~{2d=x)A-D)B{<`x0AcM0^aLhf0gws!ck!OEa8vbYQ# zTrjq-;{Gj}UoO2Uo6>}K6Yg1!Fl{vqu%8aM)0OYyC2e_j*bDc$M6M-l-@$~aD$`+9 z09_vd!Aw9qt8Y&5rHAKINl{kokv#TeQ4DM04$A;rD&)z>IKU^N2kTft6wlMX|7s_p zKVk_0a>B$GazirPAD;4=KH_dF=31fe-k3pa6f}}$X-w&Zp5eyn*HtjFxW|%96e0wV zp)Li7c2woy7ar@|WNBE0v(u8iCVkEQVE`c{VS|o5A@MrI+$ST2pC8Wqz`W*LI~%`x zdZ4kIKXzWhC%9%eTk6|iBR#B>Rf>15&6k-7VgL1Sh_<t&C~tPQ)?M=j)%TIDA$LB? zdJ5wV?`@PGdB6I6l<8>Cp^RXO)5?wlB`e|8%Rr)577bu~@dhm>*6Pc+%S15q?29hA zoE=;0%SDA9hxU4OK%gu1`ez!4rbxs;r$Y9cuQq5a*G#JAZ4HQNR?jr&5ddRy4BW=m zy4mVX(uHcQ;Uc750z4&5Va)YoB{<W`hh`q6i#l94VAhao#f9WUjR>7J0`t$5zeR#i zhxqT(;t+5cN`376MnU9P$Lq-dWB4dpdmDp*o|Sr4MJZYj9h?9|4>$s=3FfyoJ(3Gn zMyibS6LnJiKejWo^Ut=#ky?Y`i&&3}*R!0m<&WHN@Wip4zM(UJ(XDA4u}UDf=dwY) z>wh4Kti8T7qrQ)`@Iiym(-Gp#iU@}zp`Ny<L&qWS$vjUsKVr5R#|U?Xq>?s>{|g<# zzZe{V51-;9pho7-hQs&@A<vu>9rj&5MA+DAd3a%YSQ_&!zR`>)38xblFzKX6O12aE ziUBN#&|p>a1TAk?20r+O&7a@=ukYO)6?HzJ=Xx^#aKr*?^VSNS&YC8H4!%f!_EnpR zF>0Bk_S}NCB<Yi}pSjQ@mpf-{jAg)=lVQ^b5i#HeJs>lOL8T<+(P2b5eu$Qnh;}g$ zuwcjcc@a{-kOKRCYZt@s>V$gUxWuJ%UxK8@qja1utwVLF|5X!$k&JaKo@&3iiSy8E z5Y|9$VJ1L({pj9FNQcm*tRn2vb%=+H&^~&RFo7<@F1kuy{EuzkJ(U0JSJ`SS^MQC< zHodUUk?3(Pt%$jwDS8vSv{DtJe2nFLQHX2<tx6lhbkb2q-rSh^3o)iBd#}}pM0O7r zW<iY>y3xK^$QYdB0Aw;6{|MF1&PbY#C~x3PQD1l)(N;&>_Q;2O1sP<!l}FC~XO!WJ zFsK?)okz^`T-cKikqCoS;E_>%2Sv&vlA0Ht+eeyetpTyXhU${~YY5Hr=Lm3D>3Qa{ zHWR2s{AwbZJcS<U;RhAW^n8pWzGV&$js@C|+jyqb3I$+{lHCfCr7y6=3e&F82uM|X zFgF8mX<pfB1pQg4Sb!IkTcINJ&)P1cLKYWmk;xLq3>D}HZQzfv5fx4+g^ObajNt`2 z3S+!RMkB95g^{BlQW41Ry?<?1+Cxs$Mu!S~>wvKE0R46HDBG5E^noK^%MzNu$agb` zZ*D#Y4(MY%DA1C7GHYYH;0w>7C&T^EVZa5gPRuJkGbI94qp<P?q<-&DN#OI$59)n` za~NYPKJ+WHw}VaI`7M;%$Us*U`XSF+8G#>TuVjGGSv#J==6bq+0Wfh{*b{AM!HLyr z9R8$nvu0CJ?bl!M?`B)$gtQ0J?x4^Ini{^owl)FMC0p8iz=Yu+0U3p(zq$9-wP3mW zsB)X}5;=9+D+kz{f+<3@qgg}Fw7#E6c2TBx^J+4o-QGWDBe3Qx?~gjMf9Ne%Vqbhp zrgmq=EIQAjD{+!pfvTgy&Ta0`>?`+|In>hV+C|2gSpw`q%$g5PE|86B+<%po)-QJV z&OqDmCHDpU01z9x%`%*1q*S~GGy2DiJQv>26xUVlNkwFRk4$qziOq%s58oOn!)N|h zD#=!10o8x@{>5#tT5VQOiXtD}(DE!p9-87UJ3n^l2cmzqg4UhAUt7nuvSQh_6ZNqI zvg7>h9(yc0m$PpFgxqkmg@!mIY4{Mx*@k2yFR%RL;$X3;Y|_SpQSbZ5LrS$^Ai|-E z8Uiv&0~c)Dc#s3{5XOxmqhLG6dY+3(rfP3ebpDr6pZ?Epk7EUH6Rm32@z{h`AmT9m zu*Ft?QUb>qc7)SrK~AqSwXTPJuGnoKhM(OMl5g1AJHnZ5_{!4BY)t=ke@;x-k1`oL zaqcXJj|BI@HDQE7>SD3D53+6m?B`@iLegN8kHpXdvD+&2R36U`G2A5p?+ws?zXl6% zL-aU^a!KLFX+=tyl{bTtoe!A(&fB>x&SSd)6$ONq)0S~yCEEFAyQ1XOodbg{Nfty? z30TsNM&OTB)9#bFV3wGv1#C&Sk_Q6jk^jqrexi}BpghPd3su;ZY><5VQ^%>9e)$T1 zq6tLLKKKOKeyZs!@A}-+Vil^51WkQm-<9=SX2qY1+jEwjS;RrsnjjZ(&E9T}xc-sB zduwh&#msjj4-93jiT3}YdGhUS3s!}L!-B4KB!oQw6heK-lbsznWFqg%W)B(ZxL~kA z^2Oo8kNkUFw)?(20OoJ9ju-C+&zJTk_TN)mHXy;ihP*~r7rCWal<KcutT9z5qqGch zl3~Ir6xI>^FZ3a`mw7`>^uZdVECXqMp+FD$lqbI*Q6U21iBK19?`L3OkwK*2c5t7t zZ=CMIC@iIi_3L<lnO`kGp8s%G_yhQ3UducbWBTc1F@eqVO&8iHT!XI52?%l}3b4PA zn2#XGYL9*jN=`ygGY^VJ7E8T{(gje`_Q{rP20LH>-ea!;YaZ8$gc`|6446Kw4Vq-Y zS|wqwDwx82&nZHiJ%;)AezOiT+Lx7}1xp(+?dH07w!EDpV=I-!QsXx^9v)yFIgjlO z(^9v_W<ujzATHh#lp09U(dHt12ONGt`|yI)Ed_3j1B{Ju9_aF-<HebU0CR;fi9>i- zq4-FJ4`QD-Z_5Y7z2v0OfbnIX^4M6|imq{C5jN26S9Jb3nhJHqQSiL82J<<6g{I{& zl&(0f2=X6WX!w2?Xr~uDEdXWNU_Vmx-QSLH%$oV_NDzAl$S)&<93JKXXbglgp|BW; z-ea-a&S~4<4d(on8>%!xR8fcuz|?#UXz1AMOV_6|S4oi$h6FJp;SNR{yfDuX1FLOy z2UAT84l_!N&-32@f;$rLk=h8_^FC<`%D!l_t{JWLWQLX?mPdXUMw_BVygdmUtOOC> zVeBd+ei#YMc`T1S#i143ya`J`lQF~z_a;E7-ROpO833WF$JP(|!QyAjjrS?sp79*; zgJn3<+)rT=Y9OszV=RWE<Oz2>FgrmTkhzqq`srM};&it3p{HsDG4BrE2ldWrSm@_j zX)o9p>7sFYHt&3Cb^GSO-V+grHVD&gF`tf9!i|_aA;Dt{GK~}2QU{k(?l=o->~fcC ztm5iod{nc82TZIN-lp~C(|tEs^$;+?r;h;P!>dn*Za>T%yXiBwL4%Z7Ht0?FNi}=; ze*U%=vdJS*rVgI?<4~mN+Rwa-sFzNkA-$1|TFi!pF*E{C;$>%1nX|jN`WvjoGfi(2 z#BV{c>K;tHk}WWY(q~(W@BK~ZPx*=|PsjV*$Lv^S{PzbJhc*cWMwxpJ<RuqYb9PiE zz&ufdflo3%Y{la<8(0+WRqwBNUpCBQJmkU(W3Wi`$Nb!>Ba<yJgBeL!oU@CcEkJpe z$(TUY7p6TO+*W@U*8<uJqy3I}7wANLD+_-notIG>KU`8tCb4f?YnSd&r5I8!TiNtq zdDRGW7U{5}7d*A+x_BQ6QJ8w{@yd}G>zBD9Fcy09jwi1ydpqddh_5o^0>_g3|6D;^ z2ZZ6^mdBwa@e4$zSN;e@7aRk}Vn%P@%*+W9B7BTx>U|MfkVx_HhY=&4nZz#EsDy6x z(WD7JXp_`1Uek`+UaQqUL2v>B*Vi69M}ayhr|VK?Cm57x>It33NBr<QA5?dm;KTN! z<uaHfgPGx0rL|P*lo?Mh?y+#ggJO{RfN1rk#iWD6RdYUWbiWj8EtLPPB{6$IVnJsQ zqe3wn@`W|`F-t;GG-ZArBGkzi+J_sL-UW=Xd$98O*S`fbOv$$aPaEy5D_!MI*Al4# zef)fBaO~3kbyO#Enpn~=YbrAyJmVC;Mg*vR=hX3!9mkod0$<(T4vyD9$S6J(%IN5F zUqaau*b&Re`VeE2{t%7$WKUguHh!o%xevP8@HQg=3#3{N(D91GnY_Hwxs&4H6%s(2 zN~fWH(7fx>+WI7?Z78I;(^(sD!CberDsBS<LNlP{^{{5Uy&Wt&HW+8B1sw_F!3UTD z+?;zp(BwT-U?$gnm{gH(X90Yf8lHGNQetfa4_bA^{dpgbRb@qk*S3R=U4;3j%HraZ zgLV%6R@8u3>@1+OImnyeF3)Q_p$-3rT_yD7L$L0ZwOI9{nVXp5>m{T!A=D#M;iG}! z>{SVwS{>qa4V+<x`&`-<*PoYu$l|HL<<MLjh#-`AsqSH@IKd3dL|B9n7FUK@$555N z=St@#5VK^;eLAmUKfoOeRHP2@fcg7&^HXl0^(~qJ0$Lpttiz_E+xo7X;i?0)9(Cmk z{#$rBSO7+DIefLOCTxo;jE!cx{p`>D!`iNO+*l9sUYSwqTyqH^9x47qx`vJ90Go5> zQzm7a8&<5!N?qQfYa+S1dNk_9pHb9`3#2t;_iu0Q2^>-vuFrY<Tq*|FYkVEnoxA7a z@>NAm)4;xVF*$UO>;uXy8XHM#_4}s!dR}Z3dHn_0o&*J6_eJs0QJ{5;h%vJ-ZV7Jh z2`=7P@yb}&<+>?s)*QR_znKOB6*3U2WDhZa>YMK3Ja<B1-}!k1i2ELNJYUx5DgFE4 z*Xm-;D@^@dtG~t03F`he&Kq1TFRU)bgN)7M=22)u^qx+*zT-5@cB!uJD8Cupp#xMa z^)Z+wf1m~xQs2`W2gU{plTFL_IX|ObI8n=HzNLtdJvEYQ=wWXgb%`{UP*8eG)spau zk5!s=$7>Hkm`0zWZwY!8VRyYgaDZxBHj2gIyS&BuhF#hEl{P4MwXQLoK8A9t!YYoR z3^T<-OBj%%OlXjRYg&C;)ywfN0ie;0&sH@RFWtKF$#*=IEy)hZHngqD<DwqX6{0!S z^~=KY?QJjTspFmii?K$p2I<c^+rNZnvE{ZQI$!r{Fdw3(3d?vd-+Mm1pz~nz6k=#0 z{eE3@9|{6s!N$7~s<Vrxx<lE5HJz394oxP|<rHMz8tH5avlW~d7#Dt9jo$>OySQi8 znlF75-yQ>`QIu6#*Xha9RSmgPy!>@P^5XM{osH7!t`*M2)AD}OXf~COb;2-PNQJfj z;$b>3t$=FT-2U$+mbSD(cB>25etVVVQfJpKe!LEsnl$B`b@bc&;02FEgSWbe7wYBl zQ52>0AvrjKE~V2kZgEYg&uWHr>~%E@*V1{IWHt3wJFN7^aK#jHxhsT(YF79eoHQ@v zzG3zFmz8n>YQDE;0vJpNL~EXcKlM(yBNTgSr9Rcc)v_0Sh_7X*;?KR1yv>%bGtjlI zM~fU)*jJm#`#RppUG;6TNjzJ7NNf9!U0b}YG7681?#N`W?vEz-j7@&#@(o{9h+z}q zhMS+XVf>jKcB#6l<&Prr)%26(9A-{zA5Izu=q!TBi|c2zZLJ*VGbb{I4j<EE<VrO| z%8m&<c&nrf*zThPQ=(0{RCO(=<u6A<5)I^y`%%1_7*atGb9Dx)WrIsptV2B<z&W!M z-sCbd%baYRIQR2qr<ay?x-;QH9kI66Guf37)B<y|G~fc^G&$@Xso)4VR!nQ|3D3wr zkLnrxb=NWvOK$9H!hGurw83gZ%N+VDfBi(Hxd9Y5sr)XdidGY4Cb}du%~2}DFiV<b z>*^qKignxS1yLi`0!uDzt|X=$qm~G>HY%Bf+<{kV?z`w|OKBpTa^)D~czSO3aZA-T zjAq#fHQR++rCiqmSMKM|w_mlRXtjsFk}zGy49C>3eQ2$v-*8vh^r%Dgpd|xCN45bX z!oYXAkiUdiEFdA>`%obS(QdxYYTuVoB&Kwf*x-2w^_Zk&SE_5x@6Z$%_HByL^Tj2f zN|^%m+%M3;dxM1U;_8A62Bqp!$;IfCmGP1!lyF-}yfos#ANAwx77Me_l*D~6=?{(5 zvUihK>$BBFl*E4}$L*GDTjzHqd$8P$Muu4qk|i;jEUcPvH}G;(ddBAMt&=C^(XCxP zMd#q1L9Vh`ZxeK^lM&0i;NiG@P2QJD^!n>>`?|a}F5cKNK&4!TW=wbnC!i>{4y@xG zq<j-Jh#UP!(}c-4&lp_itRcx<U#X&BG;D^On?3BfNU61^#FVR+bHbm|G`Df=SmIce z6==@E@Pj$9iC&K@#@{-}0PUD^r}GP-_IpV)%Q2t#5kYU6WbkqOs~o-)ypv+zXZ9F! z&CDS^{p)yXt4DWYh8V+w*gPfD&0)>Or|hOAABu-$EFn%^z4qf$&0HsSPDyQl#_m&_ z*k5c`sjA$T@XQgcG_l9*36Q0Tmo2$sL5f`26^7%n(6Oxi9ZJ>}PMu4wj8{dz6vW)b zu*6?qS?4_G8dI8-qUmn@<97e;81UoOPj@c^>7|AzEi|siYfI|E_j3*-^eJJ{UD46E z#Zr8~+_<;1>g3G!%94j@NM))9*Q3G@MjBi7z8`gbduuKGXS$hzQ~K^z5&!oA_N>1| z5x1TXp8+7u%~On~n=X7j&v0i%Xo}(Dm+fM%$4CKroeo9~WZ9QiupJ*7?q+ssFFz|o zc)qFI9qc;ROn0q8Kb5UN<jMZ*EdQl>Sx20XfSFdDqR7bGX;s`(|9sKCg<Z6%A6$az zr$QoG_HkyVV7t%z-EkJu6@(fGPwr5k3HeDxPC3?0G?v+g=zhO!cuhQ7ys!7$H6?v* zBFANAz`oZJU)?+sm42kkKI`W+VOdU35qCAN^a4Ax#r8@FRD}&`OhuC~Oz)F^zxCza zEOz@mbYL7Qr}$~3V+?fi@x>fz;gI=UbBJ-t0LNaa_>Y_CMV;}w5o*@6fuq$I^L4j) z!8Qxdjz4qulhE71bQz6J59zGvom_#ATlDHF^(EEYz@M`;n#xD!goJ$woM*-SFPl=h zSX8p~Nw;JSu}M8jRZ|HpY%3k5>bOZH4qi|An=aKHn7%2!sMrXZu)rCcGRew{!zw3N zGPkpMH*ztk@yC-B$1>8^K>C-f{bDT8cM*EE_1lHkyh~~9d!-_w6jLXR<p!Lqd-OYJ zge_+~Y3P+pH0YLGBd`L^n-N;Tlr0SC{7c<@vAE>ca;;ltv8uI2R<|?Mm8EXZxOHEQ z{C}GFdX_j$sKgeD&gfQ~5z@XT#Z+oI-wxq$NNgh{Q_W_pY>3+#Pnsoc)EpB~l}P>G z8KB--Ro>93=2MsoAU(9V%q{U6?y=`AmfCsa-6=WRP*yFkm~V!=K3EYnec?!?TaUtH zreJsJ_N#buHs3{Z&R%OynfLd_z_-Xu$`mi|{eTOCcW1$8vv<R%l?M0~JU<g&Fs!4` zez_LU_~z9v(c~ie{R)qVpIetaAn-P0#MQNDv0{cxg03>*`*4H!T@HsFPV>xuh4)5+ z7Pp)4p(A7IIpE3C^=qKVx}d{ziHsJ_w9PBs%jfR9Oa8P3{NKf+)nl0%9JMQ=igca7 z+N7JRYv)TS{~UDAab?sdBNW<;E}KLdjjg$S5ZKn?u}tP0zRp>#Z~P=g)&gc{IR;*E zAYh*S`~#)8t`X{x$Xcd=S7FFkY5;z)`tiUQ9g0h16KTgnq7wSRz*#ez)%(cLB&B-u zrziY^Qmy{6OZVl4*Wd>E`smrL1;t#CgkQ>LrFTI>#mcnKOi_Xmdtjo$NUu3M!+B^- zuZs}@Em~5YK%WR+^3Lyax|~Sr!%((nE<HBYj9k6%t^M;V#h`|vn0Vf<qW*cEOG*or zl~WsIpQgB@kR6X=w3uz8fGM-rxmgYz`&oj^s#%}S^f1FFb_lw%nb*o1Q~!pPA1YfW z#WePD|9LXe>}Fgz@^G@d`U>l7NfsCOY4g;Ri7#IU%Z!6rglqOzyrzoZn3h->oE&k! z8H!`4N?5546RVZ?Pg~gyUvhLv{iREAdP#0%nxkK95RFj?I-t_4ITggc4X^XRElJ`< zYeT-5=&p3hHIxSL-&!E1Z&cg!S{6j5Ozk(*UQZUeT`I*MB+Y$i_c<(XYqGu|Z2S)9 zC7sv^8fTxLamd;KZi_Xk`&4a6dvcHtG-kzc-Tvn1;<$>0fslrkWRuBun4wPpD&2Of ze^1SLmm5+aC!f3Mc9d$)&^TFbb@AWSr85qQC;&1-b>%NRot+=&6VBo}Q1%om{~iIo z?TdclWeqq&MY<{m40@8G;gh#HPG^MSNJSj-@k;ZUbwuhJU5cac(0^Q6CuSghz5UDS zjKR34D;rBlTO%uYk+{lYhq`Ld30!$QCsMSo&u)NYi5_w+c3<{UWyyo4sgIrRcyjvh z#f+<=_#8*7>D(krW8h`Av$b?xFsqSR>+WnCue9XU#>;2O0{0yYw^gh3EQjW#6P`{E zPMn3wdbP%W@>Pc;8Em{AZwY64d-dJY>IV`@+GwB0UqlDyZO&X4X5p2_W>n)PCXEYp zRg1XLsv$5Yx|S96v`aVOv3t<o--jKlyASqPP>~-lB98ZsRT>}iUSxMN)1<iKUla=& zey%vZ7iCGi3SlE9x|Kg4v|S>*op(xIFV{<2SWs|P{v|K8F-v`>@|Dyec+N$yQGUpO zw9KW50NpEP2$a-+yI9$G^YyHT*5fI)cByhr4zt0D=CL?hSU&hi9SH-FU1n*7$0UTp z;_FtgnX_YammK8tU@=B+mE|%u0Q@o##4k67ao?zS6m-_*adZn6M|6d?kj+tv-9lcY zJ+NTj*}q=QDoJ0$7AywXN*-?+6{Ij~A)9Tx7xsNo(2NkbvG8ec-mnvnENHMuP|a3% zea_I`9S9gxq)M*G^m$QO$AzF>+OLvp);BSNIpw3kKy@MRM`bj_QFUd)Jfnf!70W8A zJW!0aJzs-3>A48iZCrP=o%!(dmm>buYvw1H7QGSJU#PX|?mtCb2>Mi8mV7-_Q_zwZ zJ=)=mw9-FxH}g4;*8S=de4OtxFU=X%VpVbIj={U+wNV!|)DJ{%rT>#sAGcZ{SC_@M z{br^vwZMhNyJI{==|X%Xr5rQ#=c+}R;JnAJw$$xC`Z-Vbw?Nj#a~v?2LRv{KPJMX^ zbgB#)T`94l4fbIhKmQ;Am!#wyc<!>w9pf(dQ{s)|QXS_2@0!Js?bprOQM$S&>*Ah@ zZNAmpr|Gu>RZG&!A`rL0Tk)!;XKALZ3AoH-14}fYDi5n&Sm$e`Z{_xM*B5IzIUWjR zqm!go?qfVs&k2t+5tcFwgm~YB);8V$aIbcOwr)kxT)wZRn2L0p9T5tiNPB!1q-r_r zTDbtJQYmkenrY+w$@}cw{8yS}01brMU9>zB+-Cf_HQ0CNR|$H^8p*{UU010!Z_<u( z#CtElXM9NlYB#^E<jzNsI?dmZdOhKcIesteF)LncYmqCE5%{Yp#k__Di^hA=-wbE* z`v}U{WPf?~zKl)t4!IhFp8=QCbtryhI`TSa2@Q3BjyFi_X@(co#2AE~ND^~!a!9zo zyNxd<)xJ>pM)RVx2#x#KZSciG-)s#cLs(G5l#^9eTGk?6pStzsV&NjV>2F8XI>uDM zQrU)h0);?_#XJf35~EhM<I?ewtlu0(%F;n>)${uL$e=!2e(S2M`^);8eK1yr{zY=t z#U7{37{sADq-kg*%4WzLRM(K!p|o{15P+NKQWbcH-CXui{dxZ{C{jYvQfBT@h@R`C zHR$lWg^r&<^-b_B*VOs$dB|G^jDmZvORIe#PmZ>r2l%V&xpBxL@=+<`l@{P=r;7mF zGd%Yvl#Jx3*1MHkdd8>>0fhk|4F1|{h9Sb1M+X_@k=-VdNUBL`;|>}D*785Lrw7nv z9O>g!zwJx0vaa%@zZNf8*m_7jneJ&w*xj37nB(VV`vVmn3|>|GGSD6S)hBdW(<k1_ zF*{V%IahPsX?K=Jl%#p@9bG&L4nH+N-QULdb2-cRFS(n$k0k`GG)V&a)dYp2xa0(N z$MV|UkM$Cn4TnSmJU(As8*)9D*0i1Ky)}(XgM7UlNO4PZBi3Mw8^GJJ9urs4LK%y_ zCK<>mS%4NqH)6_(%?qh@8o`ccN<O<S6Bs4BXy@7%LmmR7dSaKU{e{=9RU@;GmiKn< z_v{!^aiGIJ``O8*W}ycnhZCl`S+H(GFUv#n3Bjjq*JG}4n$NGE@GDB`)O}jS6MC;$ zXC<i2Gtg@~s8f0=FnC`?^u^0fR+fmwLQ>m|+jU`D$Q6TTOwZ}$cUL9@=qk`T1Z`)K z8xL>puoVBt32WuKWfOPy8hwi0xY7AdikX4liw;z>D=VzVa}_<vz*PX~g91P_)ps8r zOn#25-B$n}<j@Wn`QjD}n3H0^v&;qH%6x0ER}mSX?`d<c6!RROCD)Q^*rz^S-@Ex- z?lCfYJl981>h;cmNo@96YsT!4sl+AismVdFlDwN`;T;Cmpj`<kX-#g5-)xy>Y`l&i zw?eYmj2ldHDy&Hxq7_YEI{X}kjs~Ja(?LiO<r#2K`Of>Te%2@rI2XE&po3vKz|AJ+ z!?bOmMQs?JeFxm)&nn?n92&Yb*uiBM#N2+Ur>ks2?If!3GWdo*Ux6i2E3@!1?K8LN z>(Uu^{De&pHrmQkrB7y)sc#`R=X<7_J1WW_fXzKG6-WYfxTPHfUoHK>EofU(+j%iT zd@z63nBlHHd7?ze!D9Q`flKXG)JO(0p-Bx`d2$P!Op?PR_-P}m;f|}b)bj4*DGkpr zr3FrtV#k;}HlM&rHK$)yN`f0P&g*)!VnMc<i&$b@B?C<{9D#qy-CR$b#s^)Fe1pD8 zY!bwG)c6ht&cs*P-A=d~$kFE5Es$^A$T7N1kUViZ=GQ|1880()sM}<8O*HEd=Hl70 zA8~svgPJHEUg#{@{5wr>tVB#6ZNHE!DU?BSPU1`u@YgHn*+i7Ibl>FDBs)H)C7i5N z*2=FNhc$pq@bi|XG+fAE6K@OXI1ku`T^IDxMu;^MOc{ISmtF|-Wi?*q?buRi$Gl^x zCsq|;6T#G&fMK~IB24VY<|a2PGixXMCwJD?OjPD?B8YE+%;*lc5-uO`x4@jiY%&lq z$ffkAIUy%=I1r6XnKuW@HO1%TSBl6d{qz~&PywR$)dk5XOtNsfFyLU@Jyc<FkByIi zU$y!&SXeTW46(FFmRpsj=;I91vR5jKI?>h?tQxD{>%V3OahDhU*+bsxkSwnf)o~Gw z<>!tp$rl70hhCJ2+SlneA4*L}J9q@tm#~t`jij6IkqRL==xOE!8sy(y5Ll%}&sOKB z-g6W?FsM&v>Gm9?kC2ysy_eTWjc`sK;;V0t@>wF>n+Uj(sBLb1>g=5V$78@lSuhCO zs6q!P`ECKLwMh9yzK60@`C2k)0Yl>%$~6<~4}xs<p_8qxm7d>I>vPQ8^So~~#|G=y z2*NZ<D>R~hywBc<sgA4RBT#OSB_~C_V3)oouM#Y15e)9zwChLTQ>Il7!J`*4ysKP_ zY}#0?>iifF9XY-eoGg=2K$F%`cW)Uix=t`+K-S~lu_(5N*I&Wh8K^C;vbS01_T!ad z=bq~6%;BbzA3;lFnoJsR?x_sH1-prkIq&<jrTw5$u)=1(l%GqOj(pT?p+()HVBfhq zr+&5}J!#qXIU{x}zTUIn0*GdAU-!_lc3HHq8Ms)KI}VgObn$t;mqGM_5K@zSX6P{q zyo|>e>2?jvzFPtwfqpJKi<F&5(G5s`m_0*p$~Z=SmMcz8bKw@4X|!=h2;_<{6H#rh z+DkH0#HX>hjQsU}fd<QhGKhUI8mFB8SDZr$;Gl8+QYrK6tB~wKNT1|!Ib_kV`I+7Y z6Zpm01(Bx#rAm5yIUphCV)T_%Ldaa6^!}&nO(TcA{V3!xZIlUZYkKL@ja>_sO6n;F zSE?<`c8x+D3q>0H`f?vEju`r{7PHL86Pdr~mShMv91;qArdHYCS_p7iyuOyr60_e- zPVX<I5pj~gHm3BN{K{$ex3_w&23*(qaP0k%J{(}vrUDvb`xK6)pI99}fD)ch*R8_J z4NiHP8Z*;FG&JW4od9bm7*pAIOpoMOv`PE4ZAAkqe?6(74dSqVHmBhdHpdK(X_OYo z$xlW6Av-}v7O&Jb3HF^c4FgW&^~o;i@e>C>z2m1uMjtR%$GKoD2s4}EDq}N=Dd5Vj zUN9ZXOYTY*KrD#+Fe5MS>o!2We}YLLSw?=&=33lLduv41?BYNwbnpD|X7O%2&C@7L z@y#GfWN(mxY_B+(To)&STd!b@!P*<M-}vz+F_D|PV|wHFw+@TXTCHLYqCF8Ri2czh z<Xwcabnu+`&;$i2wegQ_%47UR&%wUSdcdRChCs{{BN+V-^jMY9?P1Pfd3rQgesYKq zj~tV}X{)Ebzh_fVoOkTqv@Xoq%fOsVpyzswspotFh#L!jj-yppkyiLqxA&o-Wzz67 zpWa~bUnwT9KE4M5jsva~z2(h^6YEwy_xmYiF+9&f6P>*}MWYIX(vMsGYBiD#x;CnT z6{365Dz2eTzTj$w+#FfY9U~kw5Xi}8iGQ=b6Yx>u+I}W>vyEYEp!w`*e6?=Rc<i~` zG#1IN`h<Puf@$hV@=`fd&Wmlcw<H+G9G1>eh3~sveKW$0UL&VAr(;TwF6pWS@0d6( z2UG<2dP3XMv+IN3_f=Avl_q+qsT6qZhUCig{JFsJ_)@bsRL}ZxA+`NdgzkRmlf3Tu zfTgUIV|e~#E<Sgqp;6u<%JuiL=(wlaI4W4eT%AXw?2JX<)VjxCQy`6Ut2>;;8f0U! z=Qh8#{Xny-$QsjFVY_C^Lb}=o84dgFd_FuMcXwTqig8?O?#h^xcB(V=J7iX19RD?E zn5FD={&Jc8)sMo><NPEU?aysR8eHLIq~D$j$7Coia-mtUbPDe%gxCj`7Il}ZOe~>v zfF4dDd$^4^#L&dv4o08w2=90aGPcybUt>6V*qSvd9$|GFrZ`lWa9whlVD+Rv&+KHj zUuDT9aLyHI{^lBz2C^m9t8@2ZuOl{{%f-!X`dy|Qx#=-DwNh7llhZ-WPTwm=FL&Bq z;ZqhI=`3Cj<e=Q>?ser8-H*0)7M!=vvaX4#31sVXW#D~(d21Nw6}}qP%xy<VYH;!s zi()T-M%A^kEC&g%v1A3xjg<fC%w#eZ8|OtfS_L!GGWrJ3eDm~|N_xiNQZJdhkulT# z_HRe&t=PA}T^@k6`yb!{S^=9u$)$vXO7q_!)S)tjtH6q`tK;2<E5E6szo)nC{He6s zyFLQh-}<hBZj{95^F6^M?gKU|)|P*%fgY$dcVhil`7DjlRyP!Ak+r-HI=K&d3YsSC z<+oVB0+Yz8dC=tv8wm5p%h?;S;!|~;4RWl$PqJ|P;u^xTs15ydy)?!3PFGDPcb`Y_ zN)C*Z6x0`kLUG9L0M^T)$Fy6?V`gQAPGb6G>vZYjwzUaCZ@dlz;j39U=?dU9hwoYC z$K$cB60#huS`3k{u;1FdSvmW1Z?HF33;o%=H2wBf@YI{?!f2IAqmkh&FC{5(q7SLn zH+-=R3e@@#?&6j%BGisj($et&<QA};5;*t+4|q3(`|XLa<9l!0(=e+fVS>-y;s_NC zDQcUjYiUDru5JS}@7>O?DcyQ5&{<>~aGo73Jh9<KSLtYCxkjJAJyMHy317P(;y-j@ zc_O7Q_A^}TJuZvKIrmB(%k67z$k7s?li3S9X7*--TYTu*KoUOs$o=gr$Tw|9XIY~3 za3$9nZ#pLasW6{tX0a_m{F=KwHl@~pDjWL4OpqTM0cm_ru9zpfCb02gCzg>W&Jbnv zyBvc6CuZMkiJPQ(NbjBbr%PcxZaP`w+IXBL2U}9`dY!`R)Z#6F^WQr`-DIcyXNN57 zLQ~g2OYgoXFS-6eU#;+Z<B)SJM2?I%_A`7=M5T-e+=2>zh|{-svfW$ZuWM9aizR3w zo>}dy2|JQuUTU%SIAFi3c1`=^$35i;5bBn{zv0eQbM1JEgAF*^#l1p7K01-m<8iXb zJV}M!wN%BNc<u?({h(`i`&s;C-v?sw>(!JYXY0Ku8{YBzISaSBg`t(X1NRqtwiozu zY+#m{2d_7SsjgU;f_LlT&xwOmabxuZ93ZsW;VZG2Y+iBA8=I?pb$DSq!8KxBD1ery zV=utVD@=Ejn?fOaHpj1+->OjxKl4gJpff-F&B4W8Q|?I`e9Z>*z(vxU-9*#ygZ?O9 z*pxUw*|AfE>onmi^KugbZNe`ld)hC_JD&gmoLP`e_U4T}@`nW1v{r7N`L4Qt>ib)Q z34%BlcQiZ}5C1H~p_hq>94|!yynygBr~=}jr+U{40<4(Jt}%?bO&kl$Qw#U}9y2N2 zHqNsw*l!FOf31nrE2+_SpU1|VRbYQy=0-oF*xbS_hYgr3It?Pfs+$lPxTJZxFxfWC z;}ZJC_Onb64M5NN0TcYNxOwzz4%#GrtRrr7y@G1{a2MnN0r?KQY}`||fA%AJQm2zM zK%je9Q0goLY}Ts_Cs?w(MrmF@k<;$>(CEMzLG#4K7FNrBGJYOO%~F0;3=m{=6L_Kl z+n(=?fB3+!hvVkGYM-z0QJaCJ-#x6Gh8+vl-@X?7JtJVhvg+Uz8iXh0Z)T5z-Zg}7 z_RSZ1N&0x0P8@}N%%_3$0bSN~6RPdUCk{*wSi#e44zRBM_EGiSn@lC^QSc;=`52HU zRrpEu8G@%C(#R#a$|qb4HgpDo1+<3iUqE-HP`JY8#I^3M5wv)S*cQ!Ev2h36(whT| ztCo$88Rak)sG4MZ$5TC|H;|#1=<D}X**|nyji~1ME^V$yD_EQ4%f2DpjrMULwGKEY zTrMp)GM<k1h@Zy2RLaj$To64j{s>iuOZ90~gSFH6qd6ot%OdH$aA<-k*RLyJuMM3U za)}R!dxCCO<e;X#lkh1Qr^UhJN5$sW1Ejz8R!S1J8PDh$I@BV51jRL9CAjS1v;-v) z-n9kQyq!S<O|Fh2E1)FSA<$fv&oup5#uLt4#VkkBdm(z`hKxh19SzCb&az}lH5W7o z>!1w3ej->|*EYll@~<$>xecYu*(Vr0;CJ5h3U?-i1{yP4iv%pY2H81wZT`y@_H%($ z0Nn5B*XKiLRS>pF%%V}Uc8~$4Xtt~F>ORi9TvKYJhli6uz3}L!4Ec#t8P_Ieb<?@I zeR|@!trXfbx^kr2>jJ2HY|949(4MS0a?Zf3q&~i(XivKnI_O2AQHgv=6zi6O{?elR z!!)&vb0PBbL1mX(ijbXS@xjC7Q{`I%e;wESyQZhDar}s^*iY(kp`~T2bQvTF215N= zWeFmdQ2kQBRz=YG<lTY1D|8KCCz)z%Mw@vLuw!QXBc<+lL7TT0PrEByH&$K_&7xjw z<LK49H~K4u&{)sYao%yX#`69}WCplFudY+BHNgh=AVtbU5OADR+Vo-*fjbYw46WIm z_mih%g2)f9odY9dND0s(2*@r|F4ai#qG&El<k&gT8G<s$2Wn3PH**CJx|<dE440H+ zRSuZ`SSklusvHA(DPNAlY@Z@X9)!^{&dJ30-jm!fvnoYx=NGe4nCsX9^g;lvwd58v zfr_c@wut;)9KmJI%=1X1@ddRP($8^fu_78MhOW||lIxKX6;M)@pW!)P<4^FWA2N<H z3nY@zUsup0nP$Gj8_cGG{UbbK-S1Zf?}3&X@32Y9^SiaFG3|HXYrHTeA1FdfFMtl| z<`!Kngf*L>>}pl_qeAb+*)BpvvOE{g_Z;WfJ}uLs!&=2B2u=?+raNkJk<`N?qP-CU z?T=Z;fUgNGBSt<TY4Jk05cXLJ^l17znw>=w4Gvr;OMim_lC080wCNwV8$l+>II!M1 z^)3GQ&QKZ7&f?#wHd#{CWehBSt+8y~hpKvZQYV`I>^R&+&g9t`u;o_*jZPUP<w4G= zriO5W&PEM&c6}sHHxjskTOMKe=Y}@zR|J_Kv?-wNbvQ`FE`AHEe%~f<)PAgp)AEm+ z9Y<FdTFkb_QY8n()Ktnv#sm2g$g`h9|M6KJhW^y+utJ8!3Vy9Vhpi;!z}wSTr9-Ae z7aRcK#{B?AI=|LQPXJ|OijM=9$8I+n(y5hS5~{U;{ZO*#(PU%Cz00mDAeiB8Zo3I9 zO}<}yu5!l<FYeT;YKpZ5m|wYR1TKrL8pN6+I;cVzSiki0SKe$6xCEuu@qjwxfH?i! z+|vT}5ZS2{D%iadrU6YOpLvqg0nU=en>%*X$R^cRg#+fYsTf>98@kLytJ3ZPCelYw z3p&9|#;`if6M5LMrf!Ncca)YSfT(^#xGJzr^~)!V%ES;2WFaSeJZO1cz)+{gy83zp zed=;4z3obtyfF>BP#=(59yZX!^dNie#`Z4(r30H+WxKAJBOVA1L={*1kWrdJWzJHZ zD|+Y%y)&4vg5Jo0AW@{TGz13J<s1p|_c8w9<)!*~cXsen=-c`KW9lpeqH5lUy>v)Q zH;8n1cS?6iN{ULi#M08ObVy4|Hw#KhD&5^3l1se1i_h=>et}QBd(NDh`@Uz+%yo%+ z++tiT5#k<HQLgR{kFKUAYAABMoMu0_SS4Mz!be}(dLV1^-{%umUS8`HUOg832<JF# zw`t8Y3eq8G9OO#jEeU3$`}S<4JO{UHJ16T4qyeEB;e~SYqdNSxo6iS(BV%L0FTMBU zG)#!gzzb3TmAxBV54iwu(9cP-oSzR{k@>x&80h`7)}P{0m(jRU7muAEZN<?Rk7G@e zJ!7)aJC0AEU9V>N4Cg5W(i6V4Y~)Nlln?<l+>uYP0kfdnh&YPY^pG|N=*?m=d&%em zC%^?HwXUaEDOT?MN#iP+0W~jG_nIk3$nIhkI989vKf+B5iv`;Ny4I&9K9vbbsE3}C zNXrI9TqVV$w_EfJx&ea)#Bbt$FkXT2y136CJt;vUpo?oc<FXui!wts9bS>lKDymzF z`z5K<M!+IfYvsSZ&{>vqZD4wH-~;f>C;yETC|^35<|?X;k|Nsn`E@Sj-S>$Ar5|AV z;w1QbcM%C9P8?PAlEj5xMsQ!1A1Qup4vke1YU?v;?ibQ10PbkWwZ(xYE-WF#jVKzB znhTkN6nhX|SE5jLUx|LijdKr@jP$amz12q<<o*3(Z=*5@Zx|6k$$Zj&9(^-&LBG*H z07I*{EAE+f7zK<<pJ?r7mUr5Uu+}Q8AoC@>Q~-pAuON3~i~D0eZfwDu0UvP8+#yQS zIn(vZ1Lc5>tHLZZ#8w6DlNDQuP@;~#eJ=a!2ya4zWT+#EiIW|fq<<T@am=B7&=J?~ z7!L0x=y<YwFZ6IaOmTN|;p)XRdZT{&c_AYi5pslDI|lrygi&<x@_WB2&<rsrFEBRV zoiPh<Z1s-3skxT{&KEl%hXLNM?rcJ;(6rbK0_zU=`PZ1~E4-H<Fbs6FBX{@vLd^HA zYYa9-h21m%zOAmg%XOSGh1>FDP8z%{qNDE_)oSqabw$&8AhsADdlW+)s#PAOTLd|| zW4M6BQ5}vzfuoQ8S8qC+{mn#OeNZWf$rf@1y!=2twpZKN2M^>qvt}z5_j%U>_1~o) zhoo?MqPX({lr9@}GLATgn5zcCDjqLj8|BAVK{xAEKOL|8Sz6Jq@icr9gIdcXwB6>` zS_roh3Mg4G=Pj^6%@RM!AP!)`qcxYgb!i(&ZR3)Dx;jh%sS9z%>)L-LS6Q-dO<A*3 z@_f<*g7!@cP%BNrh6|6ssCqV|s8lwexn7;MbSNhHsgiwTXQQR-fcNI0&cKu{!Z(8) z<CkxO2Y8ddyi@Ah@4k~yS4zZC^1h({HP5|TPjw?MdiS?jI`+6t=WwE@epw4xmX@9q z%k(9{U!uLWQ+;6pa?7?&Q<xs;#=9YX=g6%iI(_s@IePcYYG@}7aI{ttk~&}M&5-=H z0zmvyj&JMet)LIx@XhOwX^)hh%OPvi2!?M)@g{;?m<^rzz`O-4?MA|MhlA`6%$+ie zYhA{zEjh``cfn=b&I*@a4s+|qHknZt2t9iEWN9fN0Kb91I)I;P7&-FQmqRA|D8`2V ztg@-KKEHal#8#Q`Kw?Z>CaPH$@rz&}%6!hbyCCRF)NP9Q9*%Cp(XQA#ZC<}ft>ne) zqvDsm){Cy`W0_Ku+yWY|sBb0<3e@aqklB>V_7Y#k&X)*%H;EM|cc_q#Kfq<Qp@ef& zqs2-}_DLgRs>xI2a(IbL*UAIm+mrw~ooe}FGpOTDex22p*qnAjN`G`-h{E?IZ>rf3 zfp+ka+!8-7fASC>ar)9)GyQSfw2!^orh~C}&e&Em9DK>KT>BC38wrV}du&3|_;me3 z>6#JG+hm(l;2?M5W$G)VO0LcKX_oDx%GUI(jfP(Y8R@VA+-%z5GfuaGd4CFB0@ovh zZpJ@$MoC=8oNx5l@@HpfHHt7PL8n4@-B&=4C9iAZc>5cj?av{3mU*R~ddB|6b>C|H z;UcfTwfPVX#sBr3T}rX<s{DW;f_f?ZCdL2Q?T2O7$yOU%<U{#Ix}kjk0O+vFSYl%V ztj$sv_+VnTmA$@~aI*}5Ed{t9Ts~D;`U95fuZ8;b$Sov*g!8+P2rK&1&W0&hMpz;g z!xu_lQzFH<HT>p>9JqP|M8B!R84u%Ca;{$78?t3M`<0RKN`NCRZ$(}mr4r2RG%}H3 zAS(94<L7tPRDE$yqTf}m$xI>uW8$CfkaFCGg2Gxk{BXQwfvtuiHk#(Gs_>tgi(Y+C zdzWEfjAny3Kb)L($60947Zwzwo&NqNWj?V%S(|NJ<r}4UVc7E>aT0=;hl9wtd_SqQ zP091hjgmt%3of@s<L8k8TNZTy!eCWHsTVO8lJ&_ft-S1gHj2Vu28-Iy2lz{+UM@O( z8`j34zDP@EP~%IJb!wP3msoZSbNJ!vq5PXFq>U&ZZI>)x*N_dpd=^D#k;BidmYe0K zkQcokv7#u`HrW<5x`DLvie{9+0AH(OJNZSy@dTx-RxX1%vh0=?U=dBHj`7dU&lj6> z6>BEq-g>Y4@^+4u%>;#HI*nUqN>e$kM|bzRoqUF;<$hU)v3po+j~E6P(tlfMDHyaK z8~|r>B%bByn%r!EkW{;vKeXL32JbEU_m=+(#*AF-Kt|8rCIM&a5eT&UHBUJ-a`Xn> zi&{!>T&;G!&*{pLxFFS$2x%X%=qALs_Onar(Wq!)JWN0ORJ8IDJduB(oBJYll8m|K zoG>4*WkEqg`q(Vm*HL?!ykhvq6LrPR@oVx!MUwq)u!&i=S@h=0C}b%T`J`n`=2Lv| z2`0@30J0yM0C0^Cc#L57kD5HrS_Y*duiR=?w^O~wEGh<}gqBiicUn=;jn13WQaDz= z!7B;#pUc>dQV(J=qquM=ODA|Uj(<XXNdIo_-A&ZAoNb7>Ni#8_%WSc#N1<^l;*5%x zb=a%#T(r88a$SodxSx7lU$nRtxUJean&ZRed#P*tL?Lp@qd)rMTgo}$4L=}s+SL5g zo-ez-tGj)Xd|SN!8Ut@Du{8B1@*D0c=3(!l&bGd`dA?EICBlo|6d9FYv~+Ep_C<C+ z@R7I!%P}&nw68K6Erktu-lBdNOGLByVWGnk<Z?{0=V$cs;(Omkr^mu{tAlv*#xaSz zl?$(rVp+0ij5G6u2#fMQDK0g4VJfliY38E$T8^CnbG8DIh)z|7@?qT=6G3@V#rq)K zi^)W*<WTV=F@tU{v%ldf!G1kre)6<qrMV{Ow$MzKJ<0aW5dUZ_f7&RMa+|J=oMza0 z0?F%2M{uH$Phi^JRcX`<j*H6?SJD^(hGSdzdri&X2_SNz82z=f1i<iB|FqT~)nOZF zb$#M<N1J{EY!t9+%EWQmR!6mF$guk#(_)2WITbSHJ1p5VG-pX#mWyvW9)9ZTGp9e~ zAJe5W(R*%a0saC30%rH!eUgy%4anPIatq||2|3;6kD-8N^c7{mggEoXm~J(pWBW)L zoCvogqTM9(+vNKj10@!*)ydbL?y9)&d>#{f(av;b8Y_3a-HazPjlvTAE{{Yl1q{L_ zgI&9=2I2|kSj$NzE=sS<Bsk0#n)FKTQQ$6H8^4vL@tX})?!-}V>|1r|MCBTXkdJ!= z2+mH;sQhT(H7+ZTcaOAB8koD;f-AQkwJRt25ndVdyKvK(Ey$7Z=)n5CHghgdl&9jf zq(9(@<lN)y>k(o50z^OVqSDlbhsbf`4?il~GILg`<Af(UiKjj)mghEX_i)!2VSB|9 zirzG~+mG=pwN+e9y#@DEZ#YsdzimvjZx7g{V6GOc(R$6H6*ql<^hLzaxo0hb-}aom zYB+Cq(Gj@5YSQ$^ue?sI%D97h+Hkt|V_IahN?-i!QtO>BhdsYhzUdYC6lpElG2eKu z%Ha3tIZxr(`%f|=ue<LgrW-HA+ucZO>_HMo{^{bwVq!-~{^{IPF?P>YUVJK>_E}jI zYJceQ@84Ij^;WQWGjR27oF>0x{`vXAV!CdjIAp7uQE-Y_o!BICmCrIbQJ7HCw-wH* z7h#%r6aVI=&LfY;4a3Ga=wt%{;(L$?OOZH32iyq(K!lyg@Za4@r4KSyw+ZCraq}79 z?+6Ch?Fl=~&)-IC&&`l2RE%$%U}Cb!2a%7i<kl~ev44zIVb|BekHmR{$)u-^dl;K; zv>s9xXP>vFQDPbYqTDDS@Qd-yR&MV%3cWPvM8$UJ8~hXnn*n%LqtK%Mq|d?9V#1BB z5nnza_RCwmn^Q0CD%GbXelvoWSM=g2O$#)y^tF<lZzM<?OSPGIxu75`g{#m7dnjXq z40*&legAytZ^>KYl0Yi>DI}R6s>zpgMX?Prs-ZE?-NZ`9WF$;&&E8xl#YaM_Qy(&j z>9btG8Aqm5m0zWNMx(u(&(_WNX%l^0dg`Q(MQlO!-i<t#-pY~h-g>$}9`pantipDT z=R5|L)>Xw_&#&d&g_1Ze*SxdhU7qtDK4IS^btvbf5ie^%13a?w`vu-(MS3R>_t7ln zn^I{+SASiuUVb<!b!%nNN8$R_qyP0K5l<odMTeIv&ZJkO3s0X<<ng;??`ge`!)|0< zw28YQX@~R3#(vR#G1|}jFH~iw)hi!81pL&Mh{ZZB(((ffiLWY*wT|?`3zhy#!a0?f zRiKYoMtEw<(;)c2kC<JaATkdwX|+JuJ~N*zn6+;D;m)xma7BUOy64699=8Q@r~1-g zv8*Pylc1bG!i&4{!kpu%{DHpqv|YSG=Gr)Q?eA!FUo~F2yBMV%6MZ16R#PQ-2f-!P z?1qk%<n#9uy22R^>jqYSJ~S$9(D!g1ni{9;zo<Q&VM$Fl(l6DL>ov_HTNPRu+Y+kT ze0FHHPmj{z*M56dV5aeH*QGfx2mq@3H7zR1NBHwyLi)M&VNS@pkfW>m04S9mg+lpi zaGQpvz0P|^SkZ_o#Z1G%;vTnZoW=D6$U#W|jQzq`_Wrf4-P~+_bKS+x_Hr{(xcvc$ zc96?`yK2!gqmd;;u`y;%EP?^-HhH~qmhiFdoEZGUp48O=DB5_aptt-=%ChzYx9KlS zcb)l$!e3Qwd!{HKKuk8aHzRge&pRme2a34-s`{HLraCrnfMO!AILthq$I;xxD^5jX zF1J4}6Xj5dIhlR5C&CUPs`KtRY@9O{(Bn&9Ed0z|J9BkpF4Bv5x;3|-o{If^u=T^E zH{j70;OP7}C%$;SovQas{1u?e|IRYr?mYj+894VE7f|$b;OB^ze9nQQ`m6b9(b<r- za~5FvORFtFt0`Z!O4It@8Eb3Z&2Hp3kGC&g0pv}U(34t5W}a!TvB!rVC41k@qkgL{ z-*OTHCA^lwEI_Bze0CCCqBXdXRH=vfT0q#2u7G>MZb5%>0P#({(I1L(hlce4#*eO9 z=cTAwAH(g=onp?)Q^9keSM+Nfjxy4hW3av3spu39$UoQ4CEF{6`=~CweN8AiJz$%I zblSt(_=nd?)S*oOi0-#{G4F@VF!IB2lO~j%!hO{3_MnRBkF#B1n+;IXx1^r+g?HM0 zOO|93LhbOaEnAK<jT47~#`K<y_#8I0&Y*VnEkoDkVq*<7OsnMQ?)H|ETH=j+OY;VC zcX!=2lbWi_HqTucr}spSOm9-gGKY(68O^(JR@n*Wzb<8)8f{;_w&eCvmcjYqvN$48 ze8-D!uB~>iGW$@C;hPb3t<NU<SMM}A-tz&=Q=B|XCQjhTEO_=p^t-z$7q#L-+VQ7W zfw#N$`G@%ySwESPE=8}%BY0E39ly!i(#B*S^UnSt;=vsI@pwW!gFe^({Gs&09_itJ zk<b4!_j3r&8Z>$q%U=0}?m^zg9!s5$$5>bu1j~ivF^J-mkeYHbZioH(^Mch-?iX|V z!=Ahp*QdPBpx3d9W}RqMQ%!GTMbH-NgFk->kY6$0&m9jL%l2O;>*<&NUdk7#$o3xh z!^AAP?^K1&`;5r}c~$4didyCCinyt8-0(cH{*g_$zM2n&l}p;`nUb^GZ`X%C<ev$` zwR-DKMbljRBUuL7FBekS%Y6F8!-Bm-#yz*9`BhwXV&|Q?h7p{>akNIU!DDVGpOVts zQZ4#?)TS0hzx;mC)>p?vh9Wv2bZ4EC)z4K^2JuJgoQkv9(#8FzrzyAPims!Y%W_1X zKT^8(r`8@@xRKbZ%NBCIO>fgZ+u-aM^Kl!>te&OY_Sc6p9Y?AejkSn&Z&Y6%sw_t= zdA8oG0jkxRN9(ma>%bN%B1h4mbh|h%6eH)xbnB$#v1z*c*XHX;K?9NW6mmMMxPv4p z9s2cq7u~&z6HE%DiY77MTi(@SA!-f7INk%Y#>n-go20{@>hCi`^BP8*S|AI`)-<LG zkK&==DdQ@CY&~%Lb*1cVA#p>`f{lHpW{2Zo+#_7jvcTbKW8?OqB&1y3g&r2qPJD`z z{^J5H0aQW#`v89-#8J3IYWTAe`CvtfR*H==W%;kav4?-ShloS)!p)4uO5<ONSp0NW zgi{VCy9$Sur0}{O>HL~Z#rx_ld1NOX6}TehWf-EiDCH286UAS9nsYVg@_SL-)Oi0L zG~aiyzBSk?@>?sidzX@%k8fx#C&QglH$g)zo6bbZGR<m7FzjkDhcs6Am`<r5(s>fy zQZn)4=%X62=IZ5ApM&+B(G=tBDKdJS*=D;%<<woiOaF=Y>5iRqt@h}|S!~7^<=hUR zrO?K8ezbeCchcuHlpneeUVZD9$2Fsr$u|>NmfNL@RKmZz_qd@NllK{IAZJf07ZW@Z zS#z9A*F4dn3cMyy2FLsVUGjYYa|eG|T@{ro#VMvYbm=<3Z{yU*kV<4dVd`dSzQ}}6 zsZV@hDPPp&Wi0>Tp2<5m%khhb^A#Dn^+uC|t)017BGaf>zdpT<pS1mY|79vxKIV^C zMc${Sz?rSZhU%*h*X33}wFA_2lr2dTl{f3?(kG)c#rW5r#c0c4@oZWi@Xjuw!>mz? z8~%Xi>>gm+_Z)8})VB@&^^OwnWDT3{S@?6K9oDjyErs$FG4C6ubM+#t6Am6vqNwKU z!h)I|jWIc(A?^(4f@%2M&zaeOa?2Jjlh<Qw<_Rc=9*)A@^*Dn&e=`Qh#LvD5^TEv? zJ0b{$UcQ}EnBs${ee+SSS(O~gl%u@Sey?U1^`Jfayu^2+BF|zcns7%{X-i>rvz@77 zymx}hI)<G594%5Cj4@@~PGYjZv8-!6BrZVR=n*{S)@yLI<VuqKytqF?VrqeG1#R@T z0vE>S=Lb7`k#CP7LYrpNMr8StmWaOwQp+5R{j_`Uw}%+59RRK3{Uh;jo>5>LaK)LD zc`o_++{>V+gJQ|mK8*-*Wo3OKXp1#JM##qbB~DqJO)BPjS8uB*vK%!c=i)uz3Ct4z z$rL6v>q}PNPPphOUsau$*LrDxK+1Q<^M}i#=SQ>tOgl!$9eY%EkbODlU}tlIXR$v* z4Qs*`80a+rei^Zo@o}@LLAPufo-0nbFI@ZfbCC>~3h~+#&R2y1d|UvLhRtt1yS92R zJvIQa#ko1uxNise2NK}7N_*?P%kGZUFvN;ji7I-3w@|B)DqH=@e5w#Hr@oRx%+k<N z_;@;5&Dv1-y_$8lcAr@T9~qI`tGKp_Nv#CK`$WU2wZfi$$Z4(8!S$Z>)Z5VCeO!?J z`=@RUKhXBnW%N5SDswff_p!|XM&nToKfVg`5O3t7mwoeYc(98kTI>DQz+%#n4`z)A zrU(NM`gPW2=?^1?V01adc2nD!{mMk6k-_JM{5O>R18;rqKcDAmp$3{&^6+buSL};9 zZ7w*CYPV<D^3>U`<LZ3r89zGwY_N@078dFo=h|+0judPS#>n$?IB<^%(y#O>@oT-< z&(W@$x3kqhJ%R6%;F$bL6PFC$9_QD!9IZLV6^>}V!Yi}OxNlHnnGPRps9e1AssvsM zXPL6X&&ANWfbKQivgPzsmQEjpoELBFN7E|yncKrq%UD?BBHg2K-eT!QkXL<`9~?#Z z9!1<5Vb10)qMo{j>!EKahBsFN3hd6|)o{sFzq+y4;t(%fPnxmsdAVD4lXadscHzN% ztpM3}QLS{-EljK7mXA7WYaDK2$gVf+p<15Te!RD=+jFel^Qa#(AVFgWB|@JeB}N1A z0v@>nfMh`_x<pl^Wf($Yz3AzSo8wLfINWKY=)UVWe!lbVqpKrz>gW)qVfKTKHKmP% z6E`~kV8;}00NtU>pFO!;xm}KYl-*lH^Vy8HGe>h=LKn`Q_9@pZ&V7%vwY4Y^yeDXb z1rD-Hj->TIv$D8p_Au(KU~YLNdHov&L8rgz8E=GBd(NUzE%POKmhZega#8%)upq6S z`LZ_eGe(RKMIBGswOFBFo;b4M77JM<H`*++Df+1L?@=%^)A_uaps0_>GG21MgLb)f z70O=+k=u*9NOhTc!7^k((p9Nu?l?Y*dzI<@k1FSmQbrLvP8O^V&GhYGzE<5<C8u8F zHiq$4%d~&)u)w5|T%{$$ihD6GhiN&$_tdzL*}PKw8Zm)-c9FfG3Nhd#Dp*(LFY(uk z*!C#i8`t`zTaDhjbvkW{S`7JUMiMX6fET@(nJOOLaVH!ri%Zk%MFx~ge^tKq8rvXq z710^G6st`yPv-xwp2ar*^|egEFz*|lS$TpFvfpQ~IrZm<L+l3j4OlN09q4&(SySn| zJkpi2<PdG=(OzgbZ_Ro<bM6!9X|+nH&$K7}{Mu!fKZBdXqIGetLj9hT^5LMEIyH){ z67Wj1YQT>&e>AcQHSu{)Y$5$~JR*xA0YH;q;;3q$YR6$cZ{aI&qSQ)PTMrd*eS2lt zn=D$mf+n~5m@CVNH29FG?c)m<gdH>ZlVgPI48UdPxq3g*$bXvFoNHp!hkh0wd>}y( z<Ry=Q?8#w(ua~<Oo6-4U<~)K7K3!=gnf-3GBsChcbIE}nBBNPTaW9LOE{1;Na&a|S zd7;2N4jXtVu&Ug#NhD<(I>Mu~{qiTvmbZLNK~?HGm&xU*Fal35<V;uW?~2{)MB9#< zcOyKTa0M&6t`SR^we~TX%@~Egc3>M&Ro{3_#x{w-uCTJnm$Spm$o5}lU*7i)n-22i zl~~UX^AKi)E@QJIM=VAc7`*eAbusaLJ(x|!%r=eaQM(*Vb82gXA*8|Q;`41{4EdZA zEaVkZo{N4!ElAAFy2ImBk<GAA>f0(-W?rT4g_fO|H82jMah#qzN38LT(;X_Mw#PrQ zc{$HKYS<#4xy0n-G5_v+VXQpb7rAdUymlX2Mc=%=G?)1(Bg3(&x0EG6N}D~Bs-?p) zFYiAWhWh<;L0d}^-~6t)lCY;yEw@rts%Xk`62!*3*IvgrdL#8c?MvODnzMYU@zUYT z)J$bysq&n7Mge18;@L0jG}-Tq;qy78%PQJh*?uOn0f#ohc8OYz<Rz|__zqmwa}NA7 zYB!`>u{lK6A}OBS)yRlJ-zI$0i*6SrsmJRkS|@CSRD{AL+j|qIlSkm_UwIetj=zkO zqF&BmB0)vmz5Dh>vmjZ9zKhrXB<^u;bY<MJ!!)|-0!yg&^?B>nq%T;#%~xuhFXy%8 z#CuH9y;0X=#rJ6OA5v>CUEeDri&vCBhKApDp<p}spPjixfzE6p7?GzppPtYcWsp9k zZ>H&sED^}|U@!U5Qu;uNd&kXq1oth@HD52Phw{c;{k!~inu4YDSU=I&H_yt;%GFTf zLrNXS5rLq=S~fSe$kGvad@~{-QrX{a%gv^bg&^j(El(jw_Q=X%AEE4MG^SA(aW^I- zR)vl&QISFsGfU0>?aNFHos*lL%+J?tm<8}82(o<QRzIcKfWn???tg?64fI&T?dmHm z?Q4ZHt8iQ$_``;#^;5USveOar3y-?E@)M5p#P2)S?{%&`A6Z<wTV`&KURAq-W3&vC z74j8d%i+mM#q^a)v&u;|cyFDb9sOdQs$ndZ*G$o1w;M=13mBD%GnoFU6UxuL+VD_M z&Zy-40S^#wch-xTpSk@JKVM2S&vlW(?9wHs<?tv$#}YYvhB9mY##p=YwYViU>Xp=< zYETG2%We^xZIU_5JKsPoZPl9Nghm$P%e8IcV|@E@LZRNw0x3yuj~`$_2TJE7MW-45 z&Lr@W=&`%{y?Q?n9AtgJO~&*d$o6FiDx|b*&Zp{=@#VmOe2xg&FaaX&Br&hJF3LA1 zV{c^0O`>NRJ;wE3$<n$Q+k38wKbqLd+Gs0ZU;km=l2ggUzOhEUQOxE!!B2qiZ3B5j zbWx@x%S1coVTFjJ&~QTZ(Pwwgu~x(PLfFIRj{c_jHV%aoEwkH9+q-i=h`;K@09d9_ zHtd*hlfj#4yJ*d-2LWxV-urTPs$r`6wbSdI=y|t)ysE$)tp_)BsuzSwOWt|{9GeFz zKc{IaQ?$ag8jFP}$C{?=ZTn3vt+AwT#8V{kgq+3ce92-O(&DC{6`<o|v*bnuSCd9{ z`lc>6q-r0aG=4FPFYaQqTRP6+_EeS@i6CkAWKgt~cxNPX92iOw0K!~RkL;(?pUlC> zz1xg?gs}g_X+|-iIg>qMJHP!dL0=rH=MnP-kn;B<QveXRlVj|F0-a;00)>-*j%)@0 zPp{V#ye-Pj8hf|!4Eav4_m4R%Ty7Kc$ra66AKd-3ne|W9!ocmEqE-o-V}96ICr#xq z-iO7togo1Hz2G|#I;#k}K!`n6VJk@c(+68`=l*>9K+=y}JQ(h%ddaTpO$R03cysq8 zl{>U_*4o&0?@Z`jrsLsXw=s60#7m(60bylHgbv$$>cc+WGrPX7ey`lm17+DRJYTLS zhIfG4UnQ_sk^m3*0YG&EkV3AlKbEo6BP;7-aq99&7Wn>19V$GEzasD^l)Xent<@ik zdkNyL2JGRB!d1#`0G~}t1iqq#s{vlD12<+SX*bfKyGR_;c=^m98Xz|U=-hwtzH3b6 z=Z(YS`S)@xg(m<cYT3_L18gpjn3yGIdrCgpupxjrQgid;p6A^!OZ~X`q(I2GAg_J_ z!A1H=1klyA-1?7KCbefy@4mM~gu#IT3*kV4JBc~-m^Yj1cI|K*r|U2*riHKv9I6n7 zR`|l0oy{}v@DQ>(FtK0?4EyvpnSh|X9I^*iwl%=;Z_TfxgRO)A*>a>NHkS)i|I|BY z1UHs4s0R>J<<@?9GQAwWaA#VyAzAodnkS~m26!N6bn5s&fdo$d@i;eMrE2wWw+gol z81}mwjs3oJz#t^da!Q$cD15<1n)^u!_Vx^2upRB5zot^q(z`a>p>O>OFh0d}3W(OQ zXeT%v3)l=%Q=tWTt<QX>+31FXMe}jsWarel@_U3jFY-nPvag=CKeZwy1Mux};{+$% zYO04kdjkXz1=&dp^KeGuBTC-caAQnZDTf$ea3S=lP<^+HGhu-8hcXF=sY5Al)w$sH zkVRzY+65r|Ae<+ZSo8}Yz{apkZu-ww^mgLWfD0XH2cv0}cbxlLPHFd?jY&6yDcVzz zChds;OszwZE(Vx#yXIctu$f21QF*q*%<#lZrRK}ciP&)5zO+q~`^Ye9`P>ua?Du3q zfoznemhEopc!jr76_0`B(0IsHe=Plk0xJu#i(2dg)~XLD_A(({p#ZD~-65DEXrF~> zK9MR|fS%N5a}V`43C7zs7g^abpc+Y79)^V?hB>~IFwg{^I+C5p)9yc<9Xi>>C^8~G zm1y7nga;6vPQ&CFit~avM-4~S@Bem_lYb{h!+#^RE=;s?ngIcd{-^7-m{e9v;uAZr z4GT&xVFcS$Qn<rlNYQy1D&0Udt|YMB%L?Qb>rCds)SX@qjXVg<4l;<jai;YNrv;rm z?o?06i9`U_x&eta&>!q)b5&H;2h$?4#!4X!o-($ITH*YIQ3v<SJN|kcFFz>DV3=mT zv1Qx&MeqT%!wdif0A9&T=}3Mkf;|V?_>mP5aic$=$DOMi$*GJwP3C;_{~+sczc51f z2}h4r(ExHw4LKC%W0N2+aiC1BPy%Iit;O5v=TW%8a@PFLU@#Pr47=QPQtaZp9jpyy z1G?O%d)q<b6a<)3#K6Tkk2}xNglPH;>fclNtY=*}=a3Gj^p8r4PSgSN$b5%|FeO~+ zzez4~wTuY+94d)YxZH%wVdFD$JC=Qe(ST=_b}IcEFxOCVP-({OakAGoF3|#5WXXjd z9U!6#?U4)O6^S6(TMljbwG~-ITtG}$=Y2=B5R6s}J@r6+kSWCGbBF&JM6$~<zV|_e z;`QK@2vhJ>!(}C}U_)RmqMkJT#uCp(Ffsn?$!A(CoEUJ%Tr=QA=AO_}i0E|7eeQ|G z22a*w2B(N4ok^Tj#Kxchn8g%54KdO|fx3{!!uX*uTme$zB%f!piE5b&1t?h*u0L@< zWo;>eCg?cs-`3+z2OpWySN38cthxV0vgZZ;_iMEG`MTF~cV^Igil0{)NbK=2Lo+8Y zX4;}dh##qDD4OZNx^z>df1)0SK09~x=)=_IF;PpzmE4aG#4&`0DJzUQEX%jyuMb2? zaYG0y#u3JjcG<U~SSlE1ZZep(HC<AOT}@J0A<~E9(>=5$ToCIXr+ZO$iafjEq|>AR z#}!8YdeY@2qY)r#J#zK=j~(@=5#4Rwr;!HkA27?syhK54>`CvRL!gwffx3R6#;agP zXP553f&95S{QPike7-$<L2$7CC*zb)x`V<tFitus+&e~$JwoLy&;7)g)2y4juMsgs zIt%aEXIy_SBE)GP-SmXXisHqMCT*5q$eAQhj83u@GBt*h2Wh`Te1n=hU+?EWj?<Mj zW2R@=0(1nPQ1SD9yBE#@FAkHki2{V=TsA<Ngq`;g{{26LD6*#LCgMJ1p$m*a_Uw1D zQ8WTXQ2>oow9eJhXX?0$_zoYJBIP>21;(*IA;)0!><~o;LN%dq(i3d?Q-M$UH6T*w zr?l{;KltvDI^@fv4~aq~O~5)~2sssGqYFu>JDdi{hlcIU_Qkf+_sTxklBdwdYrT+H zu2*naZL>@J9+5K$2TE3jc_Lpl12)uZ_HLXjB$Dmjj{vtD*TS%tYm`G%3who-Q)yH1 z`fA#>Zb0xw1;+Uf%sgri2?NMqOS1x+qu3Vq9xS%{UhQ)JIsFFRMT$xygDX?si_J03 zO8fXGdU=57buh)|`gC6<F%1JUjOgk)VLHilAs#bz1NgITwu1mIJK~*_btAfu2fLjk zZQN;Fe`b1JVg0WMh1)E3M1;|@Fubj+w4D|a5P-Fv72;YD0g<8nP#ds205~TPD6b_w zJ$dH|#q>Q%tD1BHSfM{KUH4w*q^gaa??ZkEB5J8_dVHT%YT%KF>A*_=y_)FVyB`~9 zPU=FGul@-&-o3b{&{^Ya8ocp#_3)>#d~%&4s$%3f)j3C;HzJA>?q+@ng4@as6u7<q zKbz27tV{j!&3e3OO*fh%$C#+YOJSX-fz``=Z^Qbd2i_?d|M}KK1^@t&5obY<U%(6= zyuB|S);IXE;8cGHe3y8DZlOhOwjR&{;Fin1Ow2p@sg9>%f`Pb6^&Jlx?&VVu47WIk z2wuHI%%n>ep0BH~{~9!Ft$WJ-jC<4_{AB>Z6!rIOf!jiaacA1;4+4-p@%%r`ax>Ug z0@&yfTc`ba4%*|hb$NPlfqxdJMF})ft}~>t8WC5xm!16&>!AZPDd>#=1e^!TIVeXc zv9TvVB!B(}(gh&RNe(ysNE0g;zRU`en-BIt-{_%(Y_0w$fIS3f3kFdA1(%<vKu)=R z!G%U?)Mm^?382oUoV1%HZL#dVgb3V*D@V>e`TvOr+UOmKSF4g%zw|dlSbPhg_=}y6 zo&s6`u1-O@lg=UlqB9s11f_xBwiBngMV6sJirs$<>1gRiSzy({HkO-ENcp|;0+OW8 z*mDv1LJC-y$?uoBqOZxBS-m4Z9i>#4*c-K?7KB2TVZ=!(#EWHhgm^(VYLy3dLf04} zXVNF!a_-C)0Fbt_NA(R3P^g-GW%8t7hgJopea5Lm)0%&cuz~hxhDJV5<8x6yz8l|a zw40wgfmh-z%%eM-xBOHz1^V!ek>lf~AjX_`^5;K?0J)cyT+!^p=n`zOv?qkT*AADd zsI@_ye^<N%bpFyAJo-Nw(A#qE9FxaM%84<lFN-6}0ojkx_7uXRW7qUR>j$+$>JVpD zE2Lx^=-7rng>Z-E5|;VrdbiJ(0PyC>n6QvYqS62;IC=1Y4ay<RO}9ax*^QgU(LkiF zgv#2Wsf#f>R5bR8h(jnr7zwa6a0GwQi{$l$qR)-2BmEN;bzUrAJFWJSY>V-*rS<Ex zf32s9AJvF&BuR22(EhdbW4@$tBWoF15d!2AA<#+bycCOGWC8T*sPsv|SpZ7Fu!H9T zGi02?P_>K$zB}A9f{zfD_OEGpco=(mf!`1d?erdfZJe+VP(s$-Zwe;>Eddyze|UR& z)S{6@*|1i=&(G#|yz_nn5~|ktSdjb@P=;4hOv2uhu)&nlRpJUEe+J7!+sBSJf9L7k zWFw1?TjX)W(<D&fLi`wDAt5n^o!e!gX0QpVB<i(JJ7OI&;CnV;dmH?OW`%An3FN-b zVKN1f#%yJiGscetps~b-wIIUC*r4rxaYz2lE9BIpe4k?UqyNDi)T#>U9gIpF5~`7{ zf7V1Qog4}SyfVuG(B{}64iS1F)O8>5pF<;Kl3XbU7$29!LPkx8a|p&yj6($7pK*U& z|4Qacgho}uG7|UmN#T!GV@bLbk1Fp;!G#F>hAHPzOsyT%CQly4_w06j==k_%;UB;h zT@mXrXTmFViXeL6afoR*Q}|r7%{E_L9Hz2_K4s2mZIBT%3d-W{*-H@tx_~*@2$Q!& zz^9vjcs|}={?4k0!dWUtc%L|n3zq!gAUI2dl*hI*$Xq*U*PIV=oT-ll38oXt*Wf7x zeV`&v4!`v`9G^MJfZYvD0{Y5XUsv(yaVRmMf}JY%m0;20Odzz|(lpB0jsRzmkT}QG z);Nh>{MDfTT4*l+c@o*-wzyirjx;0US3eD#Fp@|ni+v2nZRx0>$+%ft``-*mGei>j z4t}>JOw*rF$~{Omw`J~EQZN#%1GQ!RmA_c$GMtrfy*)kplmArtBsoAhz#j2tF#?k0 z_oJE~<Gzo+f|q4am!uYJ_|k<l#`V0>E*SjilDVGnPneOAcY{!LJP7An5xRgh`0ZOO z4*)_=hu#JPZYSm{heV;~^&~xKBq*;EBNuQIFbDy+K8O0yLU&oCvUB7g>4sul;T}Y| z++iswHWrXrNGjl{sWAkgAnE(X9}TDY&ke(L1`-qiQ~(DC0K3Oun>}C`mfuf{{|=eE zJU20vOjlqmE|IXJk@h|TV&*dwl9t!pI%U`t$2u)r{PLY6-gvhOgBseY!)ONs<ap@+ zG;z@z7N#v3%sO5@Nphe$IMmrwds6=KYPXz^qGyc#6sP^E){HD4vJHG0yCvZAO2r(T ztpfpDViX21hkhsoGt$U-#kd=2hq>`08V;7WuaKRYUXWc^bprwnR~0K5@l@aj&HFbu z|IaH*9w^uk`tY6)BUz#g4=~A@3w^T*jR`#wltFv3sUaD82N~ZY=~@zqTcvK7XI-JO z{K=5;f^4`)?NJ?M5uX`+!|IB<gA4o3)$p5Y#v6ZGT5OwgRd=_uD0r`6C@&WcN&*gF zqtpMfb{lNn7y&mkgw_wnR{2+#1kMyb4yZNF$nA|4QPJNILpaY6b_<M|AHRiSj50&^ z$5S3IK<O#hM5S*=#Y7&X2>&q40PMA+I=LS}EbUM6iu3(8{A-h~JTNdD+gy04e$urG zLfnS5d9Rj^pTSkP;BQR}g64p}!(-Q21&FX7TAImXg(V>@^SZ9rEIGErcl$gvra@&p zkUk_tGL#!)^Hshck>N6m?3GD}pql+q0|HVmq{#mVhK>!*c!mOE?hO0}=OOeY`Fx{z zZP)0UyiR^^#^)uW<xjKG4uDQMrB~YT-@B2Ec&e55v<V#K)B&rzV8#^4;zSWui@BWp zJ4?J>s?B&I#~W{VKj=+8spp3#{P9rwDA;XWo#`)jsG%*5!<{TzQq|(|`_6-w5^Xn= zw)1icR?~KskcD96b>Ho?ouZ@~2s;Z=2nghM<CHKw#UJ({=ATW4_laeocfb%(ie^Ft zzE>bEImAH;ov`E)|6KP4c0%?n3Ar*!&EhY^jdQ@p5^evQa@ts`KAVzsgi!-As$P&2 ztE#6CK%YGJ<&zJTSip;;89{fs%!a7dTudKN_R}~#>^dWxhRh=W5&=J!i)zbrA|@7z zpa*<%<VO83H!0R9iqJ{4AWRSo0}$VhDu0sOcZPPtc-$uI`*Ieb@Y0Y5zNGB^03hwJ zPxgPoIQoU$$S>`?eE{h6s`24os{%2-2x(&HG0_6<Hwx^M*PW^#ru68TQF<77xe&Ow z=ZCAy{xdx?27`NFn|}6cm8>Mi^YI`ri9%&ZMr3|~J#$KV9VUl|dpmgdlrQFe?%Qr2 z5G4J-v_bvB81(#i6%jGR-es1%=f|>rXru|j$Y*?<Q^90J>sEUfzk!--I+127=%ET_ zfO{szcj>4L8VU~+^AR~=!Oa>32ztWSX{=t_bc4!G7la%Ve5Dss#?6NR=SU!ti@n9h z*9SI2_AMlSiU&xBry+3O!g_zN<xl)B3@x|cBi>VF)Pv&j0#DR%Xh#mK2jm{lnaSVc zZao8tt5Hussa3o_NUpVv7uz8-x17ciUiv8UKw>B4z$7FD9;h6Uffz1RpO4SBh5U0} z^~v+`2NPEK*7|>ZJ&KA=wIl?inZxGJ6L*8zj^051$GDD%2L0h}7l`#2(rEGtR!J}N z47^|Z{Jp9JinMd}b8>WedH<iR#KPPdsBu6A)Dox81j7_kw9nfgCj04~BP24uV_2~E zo&N>uuDojz`k&F6bBz`5S?S&)!W{{dUVx!YO2<=C^<3yW2m5bhxx<8c3h&t7NGh<s z336yg_&+(;!Ik4SeD3S6tf+uAsukh!n#h1LGFXpLc#|OYvYW}ll49~Sa>|{0P{M~D zQd&I$z-iWii`eUg@#Wj4_pjXO0y+b|pCWu?sA8f-4GHyXA4^-U#TTHkTCAfnMXNMq z=?f~ev;3U_ACNoIngC?Ve@MI>M}YlQz9wVzgBc>xVL#i0Y=tGI&1S&iA~enYTNpsP zh+Bo6&7b}>rRG*$GVSg9Z_+9A3oFJNYrSSX#@;}^mzYJ;Ph4O^9#S+yvI#P-<>RdL zUBfu9oiL$WCkGwO9`7>05eO!adplcf%@-iNY1T4Ma%l6#fjt)LQ^9~HdK|u^ikq@e zc&!e#*F$V?JOyuI4<J8LpE2m_mV+{?)PCs2w{7^&&FXzgh&cd~?UCOQ!2v$vy7*bJ zF?2CKUViweQi+r!-EF0^L6I-sSD02fuPTQ>xrP$k>!8~$q`Kt*>2%J6YUeyuI`&_% z5&z4>fBs6)222<PxN~(r$N3%W(Ub~zG2=G^xipwbIK1X}j+^LX;pI1gF*zW^AcLw7 z03B5us4u@3#ooRb*~qaZ{Z?chJO7~pY^fjeWGj+S@KIFNJM;I=OrMe)-$k5;6MP!? zGE4&x+!Kyg&r>CP*4hXMS3q9+3Ir=$(6SpJI!VJ}=ZrO(!u~FQ=A?CR7<{03%n9wo z{f8FFJlsOR%?Pau9u(0u@)75JwJ1H=nTG!@mV_VG_*LT#gQv~_N}O;=46uu|;+4-$ zxJ*Sp?iTj@Q~oJAgc$C7R#mJC4FpXN8<G(*@7Z>C8%?BbhigIQ81b%oPt{3qwbVnY zs8-6o5n|d(b!rH?94gK=JP|x(9s=`Q*WnFU@uYx0qJ_}GcO%cP{)Md<V$cttABQl* z<B*eSx0sSL^g&lYWT0o&G<l;|f5?G}YUc}g4+gT>?f)%iK70G&GNUkBwjknJZm&~( z<KV6vv{Z-vMzkX+19>{)(hPpv;{&qWlV$SH_k0{Z1EyX$yxZkUc<ME^(Lq!-0sIe7 zniTRt;(H0NTajnp<eQ^<uCWg=ls~Wace90T*+}i=Hb5yz;vHbU1+8SwS3M#uKH<rD z@mlOR>*+R7=cnW-nz<hetijn5<cM(<qc5uhs8#GS0s-f43S`GSr#DX;KWNd3w{V~0 zw}$o3r7S8e(3JBjz0wpA01EMDW`qz+BHRnmKl?Mj1a$g782}I<4KdUIXy*m;_##vT z1RgFd{Q&SHLc5a{Z>isC&n9(?bkzAfw^IcCCLyRi@k!g<^Vgo&YhIHuMUbhzfENxh zz}@oq0k-<?jDr`WINYH5aGo31#02-2{}TNF8O2fa!Kjx3HMMxOfR-`PlbI$LV-A5X zm+E)ID}0Sz2mzlfDfE-TKO-cx7K$;H5jfHx|JrNGry_}2MqBrEd4QlEo<G8z1Ci7g zJ>;j5lQM?@4%2@cUg%OVs>mXyq$&P%^I$VI(58LiEkS?AfcMi=mLv7U!Nuzr#58x4 zzbezAZT~O^=*xPlQJ{f7WX7yCie#||@O$#ySS4$sRqG0NbBd9OiR*-+-Ve`awYfO# zlCerZP6yn1{$zyeBp@$M!tm%%eGZon1m5q4jc92FNJ8QXbf_>!j~pWqw4TV3ez_Y@ z4HiS1=YfieVM#^yB0A|o>QnN)^EZ>$Hg?#PRxF5QykEaDPv4t)Mp<G*xUnt(u{Fb% ze<6Zl)auFy{sM{Lm8dufNTeB3o~N)XG~TGYmpjpvbA2l$Jr~z?sJTW6<{X74qPJ_t zP1d#smsKOr7{B~ARZwPu<soDZcmjq^5JS*kJtQ2@wu|5eR{}}tFxcEh(WE%+7x>MM z#PF+_%{FJm{%sz}*n!*)@^^m1H`B}`XVD%b7ZS_@qZF++|K5C{PnO=1g@SUX99uSB z$8WZv1&wrng+&VUl$WGmGVQDVJ2B1IxGOy(ME{@9>vi`e>ENpIeZpU`*V$`c6Zxk_ zaC6yi47Ilcdbm0?G^n}hh(aZ&m#YsmlQd6u5~*<ATNCV(7;EF`Nzp^5T|Qgnu&4Yj zIG`l!4R}$dSMVk>0P~E&BVJ~YJ7{-VCM(W_?O&V;JtSF_Zt3FAe%OwNFVzs3tNJHm z!xzEK^(jBKn82Sl7{HhJ>_BzP6PE5*yzYfGe0~1o9+1Pqtw?z&3Xtk&;o<tUoFhM; z;cZ}*`m!Y4-Fw0*@6>#v?(uFFqA`y8XG8hwjAbnHMos#5W?X5ug7?W>!#FnEAL&b3 z`1_!q(Z63>n{$Jh*vbF2=YJnV)|?*wES#}?JNT`k!`;JZ&IHn&5alHf@8BI@Fi}4b zMLmYsh9RI`7tSLNqAG;iP@q9H#NG3mNTeQ!`1em8K<%Pi%fBIm-;-pfNAx1`<@iKe z^q!tDdK5LB&;PB%3A$9hx6@g4Cc9H7eiFAUyo@`l!jg8gpx9h4rJ+v*%$PoP!+A>x zCpxLC3T{WFTP<<r=6HnQH!5sK)3vc1F3!z$n;2179o=0pxZNS=DG!+rL&8&7!tl!1 zd{+k-Zw2*3g+8sPx}3P8mUu9hUOGYZZ&Ge8A}Yo!E8zc@9h~YGSy%7R#pmrv%>cMn z;Bm~Sa$)z^3vW8WMFw3=sRSRD?<z#12I&?sE78}*oI@;IQnQ8a0pHfT_pfM;v0$HB z=Nu<0TenDEV_fx`s}{C2SAGMDw$PLNQuz5zs4wF-sw#FF#QoKTD~`;~UO_ABK*lcs z|3AUYK5Tguo4;{DC9HVy$lR6CSt(3d7~GG0XRq*WR+^n&LrsZ+$+)t+4teuwPKdGc zyGf2Ve#0DSlb-+Lm$cdvuH?v*vl#Y>ke@Y``~jbHLB_J-K6a%$@+#}oT=He?nF5#G zkCM>2MZ+boumCZNM93?+WkG3V8u}(6Mu24_*>Q7^v_=d(UEtcO=xTx*4kP_<Vp!vQ zrdVg1Iv3)3@S8gqHI7E#8p%jrhUx5ceHZb-L=%EZB&d0r!FuCFhL`iG&AXnLgidJ% zyb`sooo3$GQodfUp&W~*>p$mNL<J7t&eB4MuZT39XsW>V-y?X5R#4~Y0sD!$TB!`) z4z{~QTlpG)O-g=f6tq@=-B#3>_n&=EBi4+8)lz@~tWZX$LOlPwTXyjXktUHtXZ=er z=h~m6v!<)c4f@x4!+h+rToD!s%e&mZ(AeUVF6(WM-BsRMuXcU+fFY5Q{4jlK3q97X zAuv-Wnd{)bmY7sZ^*x^NnUsjn%1AX?@RLqE4DasFUgt6US(eaux5|1Mf`mFYuUsS1 z)JEvBVhLwg6f#D3t6mfVf$QIwq*QaptA)c@5ImRb5Cjlmn-^cltIm)8n-kiIq9RsA z53C;-c0%5(G-V^{3$I?>VB{=jt&c+qMZj2=Mf2ici~%ogQ$-JQL(+YHk~QSVzA%lF zr^YQx{u9=OTi^?{TTLE|9J%~)RD*2WgiJk(d881(cA6sjq&bPHd%a&;OKR=u@TZR? zDkk$aZ|PFbpfF8!aB{5m!dl3>Y@+osRy>Tf!-uAiC90;tn+aDl2)?1^RsJ;|<&aTZ z_3~QG4MtTVXj*uZNBWb*s|)c7QNWuv;)?A&Bg)?cbcH(URwT~aa7%(7KmU2#soTUs zW0rH)u44~!oBGG^QhE=2WO0*sv~9VktOOwUnv*?xS}SO_hQ;V4ba<M1;OtoY(`0si zsjlyQoN`nZVwdN_`tTMRc1=k`IHH*h3ptHV5{^zl@t;QLgxFhX*jvMA>WyB!>Kcll z=@0f~zU-ux?9pER3@0^g#D<8Q#<gCHIIZHDnNqY~{8vk~Te~D$91AO6?Dn`-I@C#Q z(e3GDMyGao4p4OT*CYbyeQki*A@DuTL%TU^qTWc5o_YGi<`YrT=CbQJ)>V;M(FOzO zD|hVVpDEBJ9sZ_bc}V-O&G6A#kit2#<A_lkpX14vZ&>4{QCp#r@o>=ltUU>p)P%qG z<ImLPFBxmmd(dd>0p9bhhQ3WN`~xf(zvsGJ=hs>`ivN2tFTF0W^|@kGj1;Au#3Wrs z_{Prl^@y?$MfK}Yu?SN5g_0F{0WW}LH4-&l{0gEuZ6sP`?FZsi4=?{Yg3&;qajfmU znIczy$RCh4>LZUbd$1(7>PzT5gr!fcgMeqUh)JmQ)N;#)__tz+J_HA2%kAiuG!S5c zGZ54TX;{Z$qc$N&XR}7gGpa?uOnlf&#MUTAXYabj&oB;<Ps8R8#8k`l{2EEiZr87r ziJG^>16aM=p`-?w3SLtDn{HUfGt3!oij$%acnH4LNBU0aBf@}fZ)%~3%{W_b3?JZn zfoFI&BLm@zAiVm-?`0|8r=E7EbcWc(bLh;W%GA$-zmR1E>6(*20Xz-NO+NY8c^PDx zj{Gwp=p}83YNfyao{cst854($p$#!Py`y~)8aEs0ipR;l{paK`Cgt+Msrph&m-@2t zny}mgFnQseYOkniPa;#mtAK2%uu6_AUPQ(_J%mF;rB?<=tN1y)Qk$7v|1aFIyo~o1 z`d|3Yc;WVwQP1Zia8*eVoR`-Zs~u^cUIURM>=$$BddFrRTQK~77s!!Sjopn<HW4KO z>PG%f(SE_(4+pO$tvYx&^9}jkCQ`_*k7mH{9+T6GdqPLL<G_~4uEeX*p{7(D<ALaB z2d8V;pg`=lhxR5P=U5*i+a^!vu+|jlzgUrNqlH$%pIPTT3qs2)zO`IGF-w%O>uWF| zvFj}M7yDTd`5)7P%M1TF1?;MmlRZ-G%F5G~Qvyoyj^5zD!Q-a;TU!WI0=t7a&OP|O ziTp`I%G4m}Tuy{`+c~X$?pRlDaqoJ``#17)EOr3b1kTDfn1}=3y~WP~D>S()h<Rvc z1+W`Eqt4=V5x)<Kxz8anR|vh=gK}Y`T(^BUTE-lN{Q(k0=GI-o=W_A=`ABcr&8F{{ z4M``CYqfC(J{OYGsu&jX;IFhll+w@?w~wL4UEwXM-0Y2t2R#hMNfXSd;IWVJ3obi2 zIXCpo^4~8xI5lKBZQo&xnq;px5B6xBEc6H+nPjgn^;j@Ad3N;7+HemNSikA-Rtq3_ z{SME-yO87$BtV>XNXn|@F#JNOWIndA>3+}sVqa8by;<6+c6q&PoooU08vhy`S9!8> zin-+bm-vdxWVJ#;-^<NCW`8kyKZDHp__C>Ec6HB2|KaG$M;lAh3f{`-%V}2Ti=)q* zV|{stNv_3o4Zp1;%<E`wO%T2c^*tlsYq>xhtm&efSy;KaC!s9VMR;du5icQVDJ3$D zTgfi4y}eHLTw0A7)@U9&qU?+7KJu6~QY6=5D^ZZlz~?CuM-r6N(%h}SWDEt;iH>1b zQqL5UTs2s--#fDKT;u+gKj*7P&kUn7#!?}T=tXr6WO~MYQ((t@Hhkd_x4($xDAvKA zPeP~8Dj#I`{6mqo_@+(zkYiVmN3c)Iw%5ZMhUaLb*U=h=XH=khtrtP2V|CW|Oj>1c zdblE;{FsTAuq0GBdCYX);sm0Ek3=F^gwP;CVo^7DU=g?Cl0%ek7PQH9S!<zZu4j%N zI?_qmDavBQ=-?6gX<ER`>GOkFOK)%)*#giv6w<n<Q|m0EUcNDX(*nw-=h2W2-QdkD z2R+C}@N-cH4#Cq{zvebTLx$>dI{Eg3zWuTa=-f_u%NdpOq0ORuiukP{1wNOz9ar4; zE|QUEW)zg75hXBvJpkbhp4Il@0Dwmo*z14%xo<+7WF*IJ!C9BrE?vr^;$!1-{dUkv zME-Y~?V_tM^&^Jun{CmGWWk*;BSmV4${ts?NI@rOY@+E5z8^gUq1cbwR##}8HeXun zYU^T;lT0N>e7+I6X`%a;k@iXs9OLJSK^ZW`i4zO4AoJ!Q3B8F>`9K#{;C6h;<KaVY zrIe;`*mp+=Y3LtWwU|fQIjbYH$SK=o3qpgB^u`VXO``KF5IwF4+6ZJ*H+%!$_k_Pj z0TAy~Bx@HIgSiM>B~tA>Q<tx-bE(Jgvi=`YUl|tF_q9EAcMaXrT|*B70+Nb!w{#0g zceiwhAO;~)QbTu3NOwzj%)EpC{?Ge?3ud^^oU_)tSKVvR-eUAtJn%wb=)!QXm7zT@ zN%{5ewZ>serxDETcSF^^(>A$?Z_o4yO`_8~Z@=2Et}oOyM#m>7?;{mvMQra;@v5Ak zf}TTr59Tm<&+8K6$G>xtK6Jz$l~Q#+nn?a3Ex;}iej>bE$EEi6p-Awx$}-<v+f@6v zNxTlym}a)1<8!6_o5?>UZI-^_;!|;KD1bI;XTOZa%R2#8f-;s5-DY;{B}-eM6q4`} zpQ^5iY|+bp_s3HGTmN>aZ?Nghwp1n+a*f5DtDE`r$Qyl$ZkiAgc=m&DtZ08uzC7oA z+UplFd#x<DMoCg-kO7<iL!ki98I_{A$gxFL?&+!@kY+o7ZAd;bk6j!Nsk3lNJFFk! zzpKst@UbO4XNl&z%BgTZK}t?$+d*K>y!k<VWiBw}Jbv}-L%vHJ!YF)cEaj@h%f9lh zhR5c-AORUZCQfCx2%kLHLHW11@F@Z6Z;Nl<)g;&Nr@RKv@(M^A)nXnzUoTeK^o$tS zEO1n&A_le=xaL8Z5BHCII2;lW9^<|&efRgQ?Yng9opwt6;?WY<OLpz!x>XnBi)+`g zKCgXXsWAJ;2Vn)xb^yHCx8M<7#`9-uC;ejjtbL}W-Fx9yVq!pC-4T9zS_^z<zn&3X z9#s)<TlY{rhx9++av)xXm1dQOQ<biRAp>tz7YsEh=`C6Pw&1gl1DbLf@)rvWm8{F^ zuOH4%F=BY;7gs}b>;Vv*XA&v|5wydUEm8&W4L7$|4&a+^&J4u8DS1Kt!gtLY*^~>@ zq`#{nbSCJf>r1&L{q<iRJ-3DLHGZ9Wlrepchaa~Yubs&XIlO`&z$I{G(qmArEzEH* zl4_a*<)T4^yi1ipDYKfFSuSX3Aaaqy;1*7aLk~H}h@Aij#g43J>tSOQ$I{CXFPMV| zA_xP=UXqJzO0P>gnu}j#^I+t~rGfihS&_PSTZSfAoO@%=t$&kALQG5A5Qh|-5k=0W z*bbDU3xeVESDzE5im{l7X=B&A1(pmS;@R6J?8B+uM=5etrz`8yKxqr<S<#aj5NFZ( z0ON_W&TE72XH#k`(?3+n*~jwDuaGj*j!Cv=(!az(6t1O|{6A(Ver>`PLoqmhO?fO+ zm+!Sls%HDHJN)o8xO6pe;tCb6e5dey_pGU{ZckbxmG*sejF+Pw^`Q;#Z`cy+s7J@Z z=;Y||5l~#Q$RNJa*2eC01q=ZJ<ouThgQS6gIq+%ckFHpFFKDILPMPOYGPH94QwcTL zy`^5fi}IXw_73KJY!b?)RC&&OVW3raEmbA;n0vJ6V-CQ_L!|48RP0ReVtRp@oKB7i zHlWAhS}+r*y1u)ECIx~z+X&hcPCUb?*Jz;|3UipEmRa9bmGPN>r(4>AHL8)L@q&;s zz}{o`6H~`W=X1U~(?6xp>a?wA_GnC9Mu#u%#MF*kzkL7BU;F*@+5OC58qRzC_wB;2 zy7r)6($#r7_u@NI0-ZxioNaSr3qEj4D7R!#>RRsefg~Vj`3Efmh99o=am7EJ!d&UC z$V)$s*cwzzBMeAt86^&j(>u2UV<C8UU4VpcDa5@$rh=Pt!A;lCGDWDuL$k;T#1OZU zJ$^Nc=HrZaIu_irVY^fKQ#Nk_H4SbcF*S%z(tNyk#~rb<sD^JsTkj8;S5h-g5yRHd zVm)k-illWUJ|!hPr-Y@2=QNKAG$z{QN=P-Jh*+LBn!X&v$DLShWha|TW&A3MWdH11 z6!CFaiaN{YE9!MCEwz~m9(W8gnR;`H{xyPtv6(+^7&?{K;b;>Fz3)Gq1OOFGH~ENc zJ$;*mr^aMLa$b^ryBQv}<yP+IEQ`?^J{$~{GA5e5-?9LSbNhTESodW$EM(B--b0hX z7!#}@^o50G$F{l6l5wB+Fh~*ii;16R0=a4fBLv=2DqM`!+2`8N%-Oyl9zZ$EnTQg; zqM7ZrxS|m|Q`5jDa1+b<Y;LyuDVmg^_S?Nwdxz-_)C@7G!(|a)I|7t~Z;|nw1wHZ> z*0!>BR7wX1Yzvyp0C-oiXS{!ihhdd&B8P}uL>kCO<^*7N{HbvtB8v|r5z%!ECDF$Y zcteP0FrigY>=P1t$(S!0huvMsp%QztFb!70&Fu!190@^st~=i{nsbE}*lCb9=ore@ zO0es2hy<X|&YdwRTPOkL)Sv5?uGa*spvM}e<#wyRc)6Lh`4NTJ-q2%TZv&BGv>!u} zy5>HN(xG0km|A4~WYwH5?2nYAtjhxAt)FR6wY8^iMbYU(RJRxMMAtO)iW*a!x>KZd zeer8m!Q<<9_7et4kwp;=#a4T&hd|M2jnhO7&i93k+sI|TzAuGr#Su1Er(VAtqf?*% zn2~1Egc3$@<g;*Zwe}wNKs}dy+5x+iD7JZi9Q_D6abKs7rj@9m&8$At_S)+pY5MYZ zgo$_8rgmI@ngkTX{?pcI4@cHG_rq9gXBX?n1pmI|?ek45++y%Bi<D*4?z1z!eDqee z%8VIz+tM34y{{MG*htop0yS-KtT!R+uit%YqajWeaoG%zDe-j{VHAD~sj!CZy^EiU zci)oUGP+qh|1e$4yZLC19_Sk1BgAgb9Ay?SX0}T?yywrJXjIj{a|XnY5Wyn?U`K2q z+DLy#kYRGA|CYNlx^L5Y4aF_s%w~E^4UBykjun83(4kr+eWHne^c{=4QM!K4=Guq1 z9<+*zwzzKUv5Zog9pa#D|Nf)cBw}$3Hprc4IN=Mo7sxfi1#nO>_?j3sB5UfaGUb5= z3$vR>mQRFQy+6|i$@Odhuget<CU3U$ayi4cVmWpQSVVyppp94DFwJgodMwDB1N4eM z;QHe8DT54Bjr0OdSm+F%i-CIi#Xb&II}&|7F>!7K5@<6Eb^W!=Te^nwdjX9OITymz zBJe4zYlt=#<v4iIrJ|(&d<I<isNnhDYAF}=%qxD)x0JxA_oD&}?|VMJW1--SZF%bN z+T?omx#AI`dMygBhyBFgQW?wr=@Y>}^FouyIB0hI2UdLt`yq;(i8xG4ThcCflD%RP z59qR>e4-lK-;&~JxGSyw`>>a`HN-EwTCPf7mph7mbjulAoOG|M&Ha^pRJ?^0)Gg4v z^HF{v#?8O`+@xZuUw##G9WG?tCR^?lPY2wjR-54=3+wXvewS`lk?PHSwe6$P==@sE z>>3;LLcp|^+%U<6qIzxVvcVRjCT^PZ{!maBd)$l1_7IKXrS%^@Us%~ryT^SJkC@l$ z!_gA090m?*7qSX~7nnfaL)U|sfJtUc5F%}2lEKg;8vGq;&I#2)1c}>>JSGew?Bg{$ z+*P;cR+A{Hz7t_x_2S-Jgi7*IP{nb*mwuUY<+CM}8PEFTwB-lGhu%xU#u1++;x|mL zZL|dRNxw_JntA-HFBuF-Ox9lxbc@X-MC3nc6Du&?(#lYo`BS>jfkHKyz*UcRPQ(2A zhnm#z{xF}grw7-!AC^5q9#z6vktlB5t;kFhc<1h+m)Lp~bX;b73uKanZzxy<6_3)8 zQ9|C_gaq-TFcg{@mG@U&T2-N9XJF`F;i*-&eh~7VknV=Z1sffnO8gYXpN(tC2xD9m zx9*PExA$QsENZXl@Z-hae-UpHf8WoM5`a15SI{s<t7zVlJoAUqH$zRND5Lw^?YWc@ zWzChZyx*{mYR|0PANY0;8&`&MTb5f_eH<c=GK<7}>0E^#2f4fM+CkZws{3tK`u*}b zDtm7<XSrLH6|Ga4`{g5&);^euGf&P4_fO+KZ{tdwbD%C-ak{%vTe3rSm<&RR*A<LI z!I>*0z&frkI7(wWe*pJCKGG4P+xr_e(8gZBAS^~O%^g$!Op4ltgz?uspO3sjk_53~ zyWRqDKBe?+ypTf2fPVnxW*(No6%7)xkpbGX3&jF7i_m6Sq@Nd3C%1jB=c5QtN7Sn` z%LusI_7`1I$qMad0v1$2q}m*3F}t6I#X^k9z*gFUYNmE~Z9b(k5O&BVYYjf}rq46f z2o!=0IsNshRSnS^Wq)RZ1rR&2)qp(S0Mjo>qjvsydP)|RR!6bfV9OSrf&6fSMWA|i z+O%$x7UX!=bAnXO@y~~r=cG-EI2^-QrxZ4M;mjlQgw=0SH{(I{=2R1jb{SwQZ9(@x z*OD(aR<iO~8#vwnR4;z=L%zwkJtN*@FO@7#O3BooZ$LlFvgO8Eygani^eL;KK1x0G zV~+myJn^&Lm0_}0sYD=~#^6py3(DC+)FJ7Bfu1)?xU6C>&ti!tqP+vDtGSj_>CabJ z4=y3rnA@LqhO(kqX~Sb&{B<42R+9G#csTFQTwf@9#%1sk^BRmM`YSNt&zH%_hSfWc z3x<{1j^C~1#EOnOIImq)aOFzYh1QnWyT0>68*+wmr;quQb0u;IaV-9*;B9@Wf5ALK zd*tIq&GW07&oF!NrrWc~;Q>+mu||4t5QvQj{Og2Rb;%wsiNo(?uwNE48(MFE(`NaE zK&98?fDYW@ek~PX8(c*0avH7Kc(D<PY$4qk^lBq2bef{!I-{{QFlfOyveDgTH-MJY z_1ZN0af{;1Wl(^Jvdp*04*C6KG&0rqK)!^5N)}0cB^*Mba;*(r%z?>%Ly+~SmG|AB zs@%U<TZNY7KK3AP4#!UNR(H0_`aDCsVOV&uQ<^ohx*SQs+loTk)v&oiCE0M1w31If zT@+LO%*M}Q_A#*UE+&Q<@e@~;sH_+}eo^jd(OAdbd@l%V4^dsukJ(HsLqs5WTf6U& zup&<DcTB2k_0{^k&ZySXK&teX&`3|2ua#EP^tvu}hHNxoGUZ?+hWL5Xr|$u6Wmjy+ zsfP%w(I!WHGR5E7ZRib2h8m`~=UIc5&_kLCUEte71gO8kOT)8i63kNsmXEn_A>Y;! z=B1b2>8f%JbDlo`&UHMdGNl=O26&{>Dp*I1J!eJGh@v^=-n?k0@BC`dn^Tur$7P)d z%dN|7;Igj8HHZ~eb96NI@+E3s$N^DHH&i#*hL7}6sZJFZp{g!`TnimfJ4dS42V*&S z(P)7aTPIhHcUn>P+KIA0M(b%Ld(-D{Jn$_TQM+n7okT;|GLz1mdF=-KMzz*oq=g-W zRa}!If+`&!zK7yK;(ESzW&Kg*J&quNFFj}?nE!n2T5V`{>=ORiC3Ka}amb@HXHr?y zuD@a0)Vub%&rI61>8QrAxvseDdYZS_F*NE|0V>BE>WD4G;AJ+YFuEbPP4eN3+rl~x z;%;01A^PZ7eC1WlvqJ+#F)ph4E=<ZQ-*?gZEANab6geget(nqPKYYO>VaWQ~_~R(% zn1sVQ3e#BkS!}|ytd}pQ$rbP#tbYGC*%;hhHpfK0aQvc}a)?$`Kq5z?fiO~v5U=@a z5G#N0rQzo1u`VJR!NjvO{GHgo8M(-DJ`O)^QJc4(Oh)!T%ETQ@-`jKusu0H%|8!sO z*nj+)W=)vo&T#NMUdI{h_q71uC)O$C+l*o>p@QOmeZfJcz%m7u>1O<NIkWOIWR)e2 z50`l=%&{1{r30TO*eIr*P!bNME<5V!Ijy-!jUwSnG+#EGsM8%5a~QUPPWi7G57*Sy zKxTTW7AUbCoZ&B;PFBb=N5o()9xrPQ);b>5zDNq12flCnS>}g^|Hu|L3$&rM&#M@3 zpK~VtJo;7!fD^G1h5<nBQlkH<hN-MLGD%pkv-oPIqbo96xCvHTTiMZKWa{NkgLH}D zlqDv@YlWS>d97RN`}Gdt3mxFX=^j2>F~kEIUV?P5LGV9xn*<{d5YUX7Tna{O>F}DE zzO_VuVVPvbn0cduDF43HQ&peTN<19m*;!k(iW3t}S_TTkHYbkAJ?xc8(8%XUav?CF z4`nbRSJu-0y_muyfZzQpPaJP`^<I8dK?^Lnl|Uy|M%?7xY3RC^nWt9%F4k!3PsLmS zfy4UpECWr>Wu1P(mzY=kcPylp{T^HI(<yb+7@gHVlMJTXTYoDbXgc~%weLkr#pwL; zx%&{hW!=5awKH9Zj9rmF%eC#7Q@QU_3}aui4Rcw%sxpp4{ca_MW{u>tGW=W0NYxA# zJOjO7r4B6=bK990H`}eT`DphGkE{Q<$W5g|J}R-Na2OVY+e&yxz+qI}Vb}m}rn%ga z>ZaYrs~+sw-<+5LcOJm74K?W!cI+*7tWRXTUSz$enHZ6o*NSLN+VRhZ<7;I9<{c5M zIc~iEFsHy_bI(a3J|GQeCcu=JO2mynIgv0t$Fq7-4h!@>csCR~p;x~84EJQ^k>ctc zZmXQNU*_q!F*BTG><*SJq!(SQQhgJ!tCh!NGs~~{2xtd1XvS2ai{g&8_uXd4a-m%T z@LxTVW^&TSE}~XyAswu}mvNl<#g*Ub@QR6C>U>^?9A1<7vwCg4sHZlJ+uI1BH+~g= z!7AV_R!)It{pe%&_S+0XM)zxdv0C>bHq?pLQk9<-G@m7zI8x;}4F#iqMs!(0Kj<49 z%u3#x1-aERZFu>xpv$pIqOo80hgS9!|B@uO)BZJSAah0OlW-X1$L%x1EG=%6tRAII zUp4gx*8iqzSC_9SYrMO{K7szsUaOyQX8*Zqia!^JG7T!YUKzgn5Id@gQ}E+Xv_ru! zXT>c8lGHEUNST?abeMRbR^#8l%l<@FE`~BBf>8L(@47wQYH_3j4en0yda>{g!sD|T zH{k?8PAzWEId{s#iT`rl+XYm|sbYJ|AC94wj^lM)^YvOQ3uQ|Fs>p@RH-MBj$NP@y zlx)+r>+4rh+qMrT?S^zt^xRXMQ^Mb6C%8yij3`6bf<vCXicgk+MhF*+F)mvKtn}`T zDMC#5q0f#T0b)Uj6SXK9rYCDEjYChfLD)xd48je_sv;O>oI_)?v_1iq9S^T2*X-wk zst@5m`wE<q1VfimRyWIuy0~#^>g^Q31GDZ`l#t}6hcJVeap!`H3w}5P$02ezY~>&c z$$HiFhTIROj&*I{y3v)~!mwP^-quKkKReIXC6gKYzCnU9hKNL(k94-$-}7mX=6Gtj zkv+>|!rFYG!){Z8P*eSlpl6eGji@R&NANuIK_%g9e>)OQRpaLGx$Ac?v0!1-3;v~u zpQN&A$*KetiobQfwM^e;m#Io4`p8P~?#;LD4`nvQf0DL}u6AazrxvtCwaPJ3hLAHH zV$>v@4f)l}X*moF`d;I#v0gQbi4a5kVINmEr57UB>(eK%%jky}P~mVccC5~<JMx`1 zFR{-<2}o~q_Mj%sUma^E{e>T8=pt!{jw7T-hrZ&!D%sE;eRNg%nC-Dt?AvxP#UC2U zSN4$=HR`~TXZl|D9Uf{;%(<Y42aVZv+ml^tI*|eJj0INs)32~;=aHXP!VoOJN6{)y zkK^QqYfDAvu3z>A!}<>@x_xT%aquQDZ^B%*knx+{Vsr$6L;^ZPsPcide|9qY7qjm7 zz?viSg9!|zM_zMD{u!j^vE&+>HAzzZ2Asn-JVxH?d#bDn-y*uNGE)2&K}6Vw6z$Z9 z(p^8dmEI(EY85giEyxxdetj*WJ2f6tq-n*>_>K%|#0C7Ln?=*bENieQB<^A+%7@(6 zII{;!=lx8dr5seTh*7$rIzJ6r&)`7IcK}dAzE>q_SDGfFl^h0Qpb)WlAJ7vj8u<zh zF=CTp#^j7X`TX6=XZ9lMr@x6#%7dig4|&zwBpkE}<lmQrRUe6gZnAG5jEP+Bt*=iG z2Z#m_@Cum=>0cl{S9Z$xMJjY86m_PwX*r@$7&i!6p-HeE7j|0s%Iu*Us;8VOL>xZR z)bMreVWowU3^<nh=(BJW<byNcn|iw1rk?PN#VtQdJUFOKCQ6xbDnd$;o~P7;b+_g@ zFWGvgJtg6+u{R5FnS$8edvGUGU#6(I73HL(Lut0x)Vt91iF8r<gsX2~%IHv)wF@|X zUDq)jUBaL3qxn;1+bOqMP=wCm2aYfWfEwwL8sd%@4*FJf>h3Z10o}Tnm;a6x84~EF z%!Z52g6^GMc)g6R#EIS+WMCla&2+)oyhWA8hs~X|4(ROP3=2P@c8d4B%;^zM8k>s6 z4#*MDaA_TxfA$`ixU{YXy{C}a?IjXhY^6uiNxjXl^y<%dZacxGBvYhiM~s8|2bymV z)veStF~V#R8GR}(<x|~zH#|Zpu1DsTxdQ1ioXXVqNeA?fCN6VT6z;@yT2;yrCsiF& zXRX;^7r%e2^8xrOV$r^YzL5FdCe=|DGbyRN!hBbNLZ>7fOR03zHzmuq^LB9tK~;ux zoMgt^lwTqV<9+_nhJ~Z_ulCX7b+&rVs|>V88_8%*p<Y?e{PxW%89zUtIUuw-b36G# zk?F%mPne=+4N=R7&6@#PXbFpExc}b`H0pjL%=ZW^Xyag;L|Zy~dzDl(S!;Wf7fFOa zSKN&4Cy1!Lyr+;E&P0gY1JX*<BftJN^=$GwIWLHp-$Iv*4?9$(RQ#tz$m<rQn!K(b zD0N)k#u~{1mTbfzGcYFlFnA0H^nmL3^Fs0ii{J6ua3muucN5831Zde`;o<1aejPgk z!Il<KN<u?u>v<k`dAEMjcfJ{)JF0L(y3wM*isf4tvN_{bmnT$oc{>}MoRuBA3!WOI z)fx-==+o>Fx2nJnFcgb)dhHp|XeCeC!M8AHAhCDVCmdkpnbG@*yGOY~n%6FjLq(3Z zn0<)sH72NNnIARoL%8yuaFKu|R;)#6ndo$!I=gqwCz1QYTw2s#QfOd0UoN|s=s{!U zWZ@5<rKI4S4N-5p4b|_T&}y6L_U)RT7x|)wjLBc}p`>i8Fl7{~&g%L&%wg>>VP)Tt zmnErW-O6UWB;k+WjIJro4*n0$hUlTCoS!uH*>O9EW;k}lD#rR8X&=2p*NppH>r1@x zQIKP1EYV)eU~L^kUWE2c_jH@%*A#x^%ej9(ZO3`#W|aud&uem9Q8f7FA$9BXs5)?+ zO0zrhiT`4}2AYQ!_TnT4?Ah!<?O%_8)63ZVTly`CkkbfF(A_zD;!T2mM@8C$zyyIC zpCrUN_Jt*?K7~Dn!mU9xk)f&y%=qrjs~^@~L^rFWM~l-HO70^{4_jg41a5L7H*dyK zV{%y1kOsc9??01UBcMY0^aB&o%5$*a=k1kcS-kHbPjm0u@lD$CWvy`$Yc6n<y5C$j z7Tkezc@ZF{pl6C1hPUQSq{ZG=U=wc)ot7Q!h*W^OUqIC@XwhVBhUtj40JbNvByx0b zO?f0zw3Y{8dxm_5M@Q(6utq|i(nn2vUhE*f7b;+bLB9WS24!U2$$KG~<<8Pd2rqi1 z_x<<(yHk?j5<s4gC2fWp|Jzr=)Ab)ZWgVuxaGKAe?^jFj%Q)OtMsb>I;8S`oxrNrk z|Fgnj4ykc4fX5@_jGhl->}^17)KK^}RCv#Ifw$uKaj9XS3B(@X08w#|xYd6O!zl@r zCrZL1G>|0bHdiQYPS4H&`(o3bFu4ln@0Gv=tb|{Y-eii;!5(@ZNwL<fP+B}UN|AT! z1s-YG5onmt06^@%aN=c&kppa3*G_}iFEnu{a?TsRpd(wsUGwSgzyu=Kv_y&eWDmVk zKjR><bu(~I8{z5gzZau0hYxu%MdxM7(J<5wd3vq*C3*h63_IeO)=h<>-FhZaTN$eA z&2hK6(V?URhhX);h#F<?(-t9YQ;Be`doWlAqx>r@h(Hmq+d-m>eqI_wz1NU4sRQY; z?N(`az|<RJ`UU>9EC?alB4in`Dd$NblZHQrvsOOo^ncO@Xe6NqG{_vO*uFJy_=Vbg zT54~>E1~<(^29@cl)ICA{6_z5VtjMtpq`;$+Cjp9RqVpA*o$#3o}k4(MO=b|#9Gcr zSS|bn7wtLXrvwergHZkYdi|O>X=Mu$@ePy6Kf{1%6pIUd5#e690sKhBTV3NnNy7iX zBAM|byYUj4({RTw*gdPZQ2d`RvHP$|@HD>P&CiAXu%=7pdAm{i#hh0{<KH8GN`r1H zrznDul47bfHwn@)zN&r}`0rlNk_^*94){^1c$3Z3pvWN4TCu&)a597VAERhT3g%;^ zv$<GzR6@2^tMo8$_zO1FE<8flkz!Cq0lWAnbg-kz4g&G+3VE{nUpC7k#P1pf#6M>B z!LS&JpwXg<)#m(vc1P*}yh7$lz)<W)*#!3Mz7XbKr$+$SO6`3nhu_zM<ViJ!>4Wsd zsjD6uRN6{Y2E=MqQNf66Kehi!OGB(7obf7N6Y@TWA=)Y-3t~QQ-bEI=wrNW91bccE z0I}2KM4I%-9~~LbGPl9)Df0giPr11-w<ZGEqAe^F{YkqiNo8Tk1Q0C9^Kg7Z?KT43 zDTovY*E^|kZSAoMGkyDh=LY^moim<g=!ebEpU`+Ghxq))u91Lusg;QxC#D@wwN@i! z{*r6>BbJ&+$B^{<S((Ps9x|KsttWiJ9q`GaxD_QAgXHxeD$Hw7P!kq?YeWJqL)Uc8 z8ge^a4Dk;DuiJhfbI5swM3E&W{Ja)K_z&w1G;$yM+i7!H$K<nJbcf5aZ`ym-OYJTH z2R~uU*tIf^rsR`a7|m-Idhi$)9kBrVKWTvhs~Q}n;Z=3Wx3Bv;dtQ<AX|otHhOTw| zE#7N_Yo+m=p&6AhLbD2pn+3CW(Em(J(P5rkrO7EthO%k?;v?3E%VZtANn_Q;hD$m} z_uF5;H}UZyu<3T!;nUUhUjakc&~OPYG7%;GKM-S2P6k69tY7_YzI~n`fr85;rF{ew z!lli?`hYF{U|rO>zy$awVPA}h=oPv<MX*C17*U|wa9+396r}dIA0%^o&SL@4u)<gZ zUrbxV4pHpf0sq;NG3IpeR~x79D{__~8RWS87YgtJN0{nU_`u*?TJ9v{qveKf4vGtL z)}&I~U99}GLJfm}l%j9M;-~r{tt5V)UMCBmNg=prv1V>s!wnzv=~2|T>IH!5H2)+2 zrv#sof2aYy*yMw*>xQAfA<tAiM-wP9#HyCuV}HWxFcRFEWi~(iK<6#D89YpxKNS9_ z!&8QCM3r;G$IchFd+Q)4Gg1p63q3NIX<L))-;S5{Ny1#>e&0*Yo+1-e^kHF+NoUM| z7KpHTfvtng7Z=@MCJ|v_8OP|l=)JH={={Ycl@P0k3Q!vE`WuGstWZfsXO5nE0H5ML zr2u%!anvA!qL|}bepU%Yz6<}WevESfTrXH>D0-EsQ70VFEUtJ|OOZkgsB=#LQ_QJ_ z-M%@nxH~y6_n;tx#|i>DJyOzv$HxDPRK;#+6moZ(mM7wA71i7P{{pxg(3Ks0Lm;w0 z21EjL`v0JaNab$pI01K*JsBN)bhbO*ek&##=9W*j^HOa6wOB9gUqGc|*<6RaVFd!t zWaEqMhYc2vu3k4O>3=%?8+R~>)B7rZ9^1IX<aL7@^+sweu#o=)+8jaoxy=;@?h7ol zrHm<>FUqt8)gzHCM$G@~N^3e=AEWFRjT&$6n_yWT(jQ|Og5}}Jc!G|LpCT&8PduJ( z%W)0a3>EaZ+N8+i|HB)RF8k`8J(p*b5;q|v*UIkSB`2ZsaTXsa=|T5uwv+AWLCAp5 zKrs3oZ{my4HPGL|sS2Ih9S`DzjYPiHDph+sIvRvAVu-fadwXJ@q2+(^IRZqOtW3o+ zE8p*mIpn`R@s^j0<8P>I#Q!b+k<4Nag#e%T=X4Dr!lYdgbOB^8;Ykn~cxdvxp(WvV z2Wl|hp*n6yOE-1(&jVV*R|#x27@k98PgPc-wkoM9TNc^Xwk0)uvG7WvT6`2<lgKf) zlOgIJ($!!B1n$9NX)1~|0}xP%7mvC3n7TPE1IF<cI@gYp?}*s7U;4%VuefVVL9T#a znl9O6q%n~m+|liu)C4mo7Fgs8q70KRH@y3oebVz^Tp_<Cx_Pt%oT+9SC-9qct9tj; zNW7!Ula&$g+b@yED?|M=6d3e-R{Frod+PST$JXN=ui}$9BZy0cv8ErxL{Cg$B&(}h zZ!!eehg+oczMSFfE=z&-VkrL0Kxz~nCTdQY?suX+lgX#hNr`3$W9mfRz>A$4=;|0; z5L)@`Jf6b)Ug>IPq<`pIWTBGZ`GckVI3XRnc7|u+eG>|FZYjdS55hWQL1X_=-&YND z6GtaLcPSw+-cr(;`#+eY^QeBthrV3D5puas>1;;v2wk8?QO!eh5$U??DgeW75(^(E zOu8S=0|`dr$z&qEmWot0M<)IS7o-?hz)w-{n$YR72mU(+sfg2uQ~>Z7Pac{D(9tp( zim)5~Xx0khEOaF}%|x%ADp&ux{eP9#a~ht=(yG8@&_|TX&j|Ay+!&Zm4b%v$0VvB7 z@c{>%5$aIbxbf|?ZIc@g0Pqjx3aU05SX_M1n(rU1U$0IOz{+~OPyKfb9+bWYuA3l^ z33oW6t<$I6{gh#Fe-+2po!vJmPDeS+TVj>-8IC@dCr4Z6PAV<9JO<t;rp&fa;ym!Z z(gnweLN?Izoz1;3EaqSzVN?JMXwO)o|E2wI+c}Dt#?<_O$%%&Pf+KFH0CIAZh~OBx zrT!>tT0_)_)Qz+V>0++B<L3WT(`Pvdyo<tubvXsXN)0;yr)USoxcpA%!H`|cp-p1t zU1Xj>?%D)nMEa&&x4y&Cmw;EH)9_ClhvE#k-6|mPTASPn35uBT5kQ_a9pNR3F0lZ) z+kmmdz3c_7I}vFEJ+5`-po}Ypf+&hPMzh#5v%i&6esu$c!cW6e%dGp9p}qgQs$sug z^F!Y0(JlZ#Jg7u=e~=AvZ7Z9W0SRMr4vDf^_i>j85fGsu9kG4sY<h|ZBjimeoTlNu z2nYyn+WwmkP7;t=4iLsfcqJ}fzXo2IAR_^3p!iV~8oFX2*Q-r=;EmK?#lr_m&carb zk2Zh-Vq-y#7cudw@CV-reIjRE=^M6Z>tnse+<sCCl+TG#8F!cB5uGAlkRcMJCHr<1 z)}RSkNWhqSYZJ}9&sZSXoNXu4#r_)xg<CYc+e6$w3kam3@xPjAknUaPB5HA`@!MyB z1Fx&#-V0)2(?MBo2$rUSY~bU$Zo~<qO~g|wa{ca`#0x62=IO0~b}E5=gk$K#hKbNN zlp4~X0``-F=IB^1HDC8lD<}U7U_%GgL4wUHz}Jc3&R7%mc`OF-74AEB=|lj5_W?E# zvc>{6(wHjr|8uY#0CNrnc&tDbAa;0#Gd<Y<MNMG@@i9q2A?l;AH12T2xb$u6uJlE1 z!mj2)FFIe|32xXk7??t&Th4HvvoivGWd*UwOSx=hDKqmJGGJNq{-0-Tgj|$x&^;cl zX3VptkIFaYCtQESYV*-^F>>QT`P}4}RUc%?<3dTvD}D`uo+$v1`0n?sLbcJ}n%pq_ zJcg!oF~5C!psodk;nfkNuYnI!t7S-^I_|pELq)~_5{;}dJ28_p{LRK6w7#8Hk!;8z z*;BNBfFEx7+Rq|rRFD%2{75%y6o(j{IZ0XIM=}1_8f`pRdqB}EKj|eo*8E(mwTu9@ zp`i%cI1AD*$8*2i=Q#DYD)<z&sceCVS`FRh0jP#<`@^tjq^}5fSA|JotL;b;Y2xqv zS0yku^=1C0h-C^Fmo%0WKO(^d-M|~7UFnlCB-O~Z<isHOk{;XLU^8kwoMYJPOaUIv z#T%Izg8QYairwyUVGJ;u$TJmnq^JmtUMbpKkD>pC&IEX!;1_wpuF52lnE6G~_lnTE zNeSg>!XD#uhVOQXf>0-oHq}YfNi`~}sl+9I?~*bA&#AhDF-n0G+7TGJJ@ch7RJ^d+ znGO>{*yx|@iQv%~c?9r|bMfZ;QUMT_s3N7WVTjK8sKRQ&Wa7*6fq*;X)+r_3t-Qye zN#S<|Za)fJ0GTmq(VD-%?*^t#N1MOy=Tph@b{3-EoHONZx%}IoaKG8^VZQdwCPqIK z_1Y2yd?G>VI+Mgd1rQ#qGXzQGy}s-5Koq^?$&XT~T10Ab@4&+aqP3sU24#~jowvsx zaRlPM6&qi3{4o~Dmo|lnLGhGpc;j6GE!9%_KEz#Hct{&TuGfUx(vL%~cX{rYUZeNG zdmx^o{_#eqe@{xl-Xl#J<-VX4?JghW)u?}+%ZusRRuA`!nfQ^VrBo-+|5X;QjDht0 zuT81wMqn8ORwvRVl99!lU`%L1f1r0!q^O@+f{B>1K5QyQx-K)!wbB&*Stbs8qibR+ zv_d)t3P0coDYaQ=!vAvCC@+G<y8T*2=8Jz|As5eIh{_s%PE@!!hVAf5Jjj^pTD08A z?ylTVO<Wdu4<iTA?-GHR&1q|K^21qikWgxDn!e+c)P!yh0#F)szL0*rk(H65GcO2a z&(m+a8Sh1c$C<w*@LW>PMxtWx-IpIn&D2MK-dB5}9ZVDE{9Z>m5@b*VKa2-^DW*Uh z7wJ@6x;Z?911n-t&{!Mk5rGY(=9g1rjd>P{YZHkGkC=3((1rGxt9WP8wL)7@L!`ge z`*PYzX={#n@sgnKqX0|{4xvI<h|B3C(2MrnUM~Xhy^y{7*jC2xlq*!?$_F<1Ic7;b zxFeFNmajIvgKE5XNO6yr-`#K8y(q?h<L>?eiTqQS3_$p;=OkIr|8j+)i}M^afMrYh zwfbh1JNSkR=>NXsC+#mm?~Syb(=)HO1WlVUvh)X#B6x3GXSBn@MFS>q0M=Kc%b`TS zxeaD}7wlnR>cy|op5TM44wX~km$(QRzr$w?(sHNVy+RPIY<VQqrM+{HdxrUxOV{$y zXb`*)-c5xxqx61r2Xe!BaRaYl<nm7l8XtY2M;hnRlqg6_quaav+CjJ2OuQ$ra;C-8 zi(uCz6-am-_o+cay%Y7z7DC&dK|$Zy3Eg{+ZCQ*RtIRVGpWTnJ^$^6p>;1bTRUE<p zQ5~`N@a??jE!Xy|(tizn{R1zvAF#-QGxmPBv{3)UT&dW;z}-l#mLNCWLYMQ@f}rZV z*rc#QG5l?k2*f0yC7@0;(zSV|7khlJ9HIY8G*0T+^%~=%Ij>*~T)0qG(sawe-U%;O zWY8KW`%$*JpU@W3Km@v74>cTb>!}b_b+SP7yEEg2HL<vylqkpjp#ppJ)F#fE@Y*2< zOQi(x<?-}hM4tnenv})zy6+oBD9Gi$2G%)L549Je4sFpxPiO;iS03k&KRyPq7gDu< zVvBI2V%#Q40q)?x1-Lj4X(Pa8CHY6|TqF9?K<EXIBdk0-7vbMhCCh5lf8-e*z{5aT zY;(nd-OL8!__uea(%t}B6Mw>2Z=5z@0?~z7cxlqVA#r}gG|Q1tAjCNHW6hh%Sc)g< z)dfbFa6t;pCH%=Z_J-Od(SLYRd)#|w1k@#N&toZua=GLEO#m2l`W@sgAe3cMJV-k; z*}_pnrj5F3;UCDzF5=^!XHellpy4l_T;A5$OJcy}3cCQV73T`@(S(bUsRivZD~jUq zc&URHn!3`h6L^2F%Y`TNtD7%YUlokZl$|RS<-mAO0uWKZ<A+CIiht`sj;Qa20A3i4 zpB~l#MTK83<}XeB(gvIieMn4h#0xt99L$~sOP@{6ElQ!-2;ujkn^!X4Kf4Z8THIP? zKqidaJNLvW-a^<1`Z$FF!fK2^&IS)N=M{7q*zh?OxclCJG>I6;3r+WZYjSI6m<P$D zQ=#nFR{ooP*8+-W`_4P;ADiv(bBR88`TEvlEQ8XPzjePF&LBNOo<x-XE|@ka)$>_G zk^d(&ozH2{tw4RED(s4-QD;A1#JKm^A3A&bAOZy(Xl19<aXs4oUdO*s&sQ9g?Pq^} zBMZ1^@eap{KqLIe^N~Unbr2rt1*GNA{4xHZXz=<q{q94Ha=(|nZF4_BZM(?{M00L= zppv>eEq7fzv)Hw+1=g4lLQ5aYeI9Ln-C$TY(?iJV>wqMpYr#KsYFHZk&yxsVuF)${ zO(N^`l_3@QFh%2s8qlz%CsV9m9jFnXSQVO~e8qie3e_-m$9<~%R|#4tS9cDaZ+=@J zsR|t#BNzB%Pq<g*AuKVBenOg4*c$`!yvC+(s>$r5-G0z%*;_9P+r6W$=VPKTKYaYk zuB(FLQS*NCB1EHit3xXPe*Sm^4|=-evJpQE=`@gu*JAbIe>T+a!AC3}1QKUx8zXO@ z7WA;OBe4waI0+5@I}Tm@-F~HW8m%r_i+U1>c!R=g?OKkF$QpjO$wQkOK_)Guu*%Hv zRY%$H+TNu1fJZVB@A0PZbUE<>IGWoYR%YL^5oM^?pMiW4{t5~BqVlGXfus92+*|=j zQLPUCfJ*HKEl#3{ncSR+D$ymB0HCkN8!dUnI>znfpDa*}FMWYSK~{*gD0HE)^`ORq zq+I?fNVj0gNFZ8dBPITR=6w*i(KEdIO#n#yzDk*@d{v0fF04=79yRdS?PiN4ST!fs zSxOy}iXU`C-g^E0cug`N3*$B=aNr~#3u{gH`4oP7BwFLyy4OkF%A<n!-hxTj`=$%h z$4#lscIMExN$L1%gUCY`XLDT;97HHaVvD)&H3fDb=3g=yxrx5d8UF+^YI&z#6`SFK zQj`600yD{dS}`t<wc6|cS=$93l*ag`SLb9o5emwGfGD_ZcYfRr;o(AE+oEmTNylpa zVLF$M!aNw0%0my_pnShhJ1DcPRb8}MotaMm`3Huwj>2z^dDRf`s2EYg@7A!(qmP*h z6G2X`m_M(cb5ezl8wMhH?0g<_v&4Tf2kC~_(91;{=c_H@?FOcxYdJS9_||nsaXU1c z%17*z*&{t)+DYU(4~5dc9w_!<o#EJCUgs$0*1Fs$%H{9(MD-;n0e>{)8@_tmD$$)r z)*gH8_viZLLHZHtaHVN$o+aigO-#AAeK2Fl^1JHf(OBpS{D{g!n}Drvtw-=YqxhHO zVtnvDmdAf&4}uly%8JmjKMd53KBhN|V*D{I>XulK&nW1-oHglnH+dwaffXgLR?tEj zLH^L<TJ!FQv*ed<V_uclw#aWdVHp{@L_L)~$SzX^uZ@-P(YM<A3;}@d0IrR}x6kX` zUy1CcgMNCZt4pt6dn2qqq(Y#o$#^CHYu8|3k(WfMcw2fSiBFwuz-rVnMB<m<jr%Yu zymCT_rDjcRa6(;fr3ya>CsF2SN}J?^#N9zJRctr*%}&K-4bHWkzADukuH&tPM8Bz5 zp|9GJlppi}r4Cn?DzLlk!gccRN!#wHdDga$1Bkqwj6H=0$_@wEE0`bbI)gqX#Jr|E zqc_Eq3nbgP!K5&l?lT2B{ZmbL8N#_Y;A91G!iF#PCO$Jq{z!G^^n^KUd0GPO0}{6i zq(W_hu6w!usmnP1BmKZY<GT`h0!@5mQY&bW`fZN%OK|m7Gf6js2D(bra1XxuQ6RtZ zr&}19;pWVjs?>W(;RM@7p0rP)v#K1Sn!Sf0OdS6mc`6{Ph799y#sJqC)AZzsnaq?o zoffEWgm|a*6)6-P={4@ZA+mH@iO79?Nk2}@z`fId_*G2-Mf553%3{<V9_)$`jt@g> zajs+04-2X`w(vr|Xi<5eVcqw#X>eFCG{wnC{PaSIuCS=<6V#zuxfPytwyUJlY%A#U z<xRv&>UVqKT25vPzey@TL5-pb-6Li=?&YFgyw*KBhSxl8(ax}r<JJ8yJf^TwN0G4t zikg_9XGbr;;`3Nv&WyDZ_b7|Ra{~cTj35}2YN*Y~oii_$_}`R75D2S+se9jPjsYMU zfCqH|lo4@z0?Pz-FxWddb&i!jfu0RB?C}-TTiy%Fr$p6I*&6KZf9rM9uSpB>m3m-o zJn1Kz6ZI#p{f%vbj|fV>HT9?afP~p}kx1E}r179hVCfLFXqEhXBo^IfBgRoaKuL@A zTx3hJ6mx?6Iqxe+Y{W#y&5%gbAQAP0AINdyWW4!4a_D3L&Csj5suKTOJjgH5D@ZKT z$Tywf%V2d@ZB|o=e46kWoDM$$gdjl1`VybrqSC!n-W?H^=ul7X>RpNj(mt{V#d!-G z)nIc62T%CeSJ3(SsN|Gj_Rk|0m;?GB6=GXFx=BT;6ZP8A<cYTApL;*r^0a0$#o!Z5 z0&uUdUG94+y)T<ry1m-Ym>0b_gf0%!PP*+eW1mlV@(9m#CkyVVI}!CE<W819(jP zCHLSBr7L9kHEI{e>Yh4`AJBpZ2}Ig1K<fmS<c{GMGE~Jrx|v+nZ~J{^Y+Xh8VHA0e zCmqqZd`&O$aH9zdyybKFlN-T!!EatIk)WkloX?ZTa(=EVVf*}+`*`%EdoNr%3~O?X z;Tsh;iZbSx70<-rOksDE4^|mpsJq>J@9qU_I1RUHg|TK;Xvmk`+fk?%V_2+KSmAY# zpiUd}nR0RP0g;R%FuXiiQ)O}xJy!zMeL7qMDma&ma>SR5a*>F&kd=~pYe_8n9DhK! zijPL*D_)0il0eG>SP9^Xuu6D<VacXzy5VOVbsXHdY|%ax0#?1Do`j^XdF11VaeuUx za4v(Neb~BEz^I!pn=f+{ue>7jt0el5hB#Vq(2HCoK5-*%{OX$c)1vFW`YS7P9vCm2 zI4BKL-k&cu2OlB*@@3V}KmU!Gb}{)VJ=We9ALGs@D|+Tm*yi~MpJ&B5E%+|T+~A_v z;_+xm=aQ{#uLI5^1sTj5_fb~01nCsqlN#S1iMU+Pcv@DSey8WJGimMnxYfQM@+pG8 z=a(q<VL!|SP<{Qo{Zz*cPJYuq6)G%Y<<gJX012GccAH*J@NFgMa^pk~FAC}#o~4)r zlVqC+@JYRTLC<X@ZO_NP{7y#oNBmLg2jG0A=1lauQPm<ev>`Z`JBfjKM-AJS9k8~p z7RfTkJx+-6oU0sjS4@eY1|=vYuKYG(Epsu{Y&c*C5j@wcNAV(E%|ZFO{7>z|XFn@? zf5;VzI~V$Fh`SbS97=_DiSM>SMNO%G03g_L7KDI@@0v;gU^rSNG0I<p4nBwbgau&W zQMyS*5&a?!?6RPBKe{y|$vFY#I*0PK^zC#NO9Cj!`Po;9*9!F2w97e+c9eDAXNk3r zVHSa@4~Dq9L$d++RkW+fK?YxLMitv|)?oa!fPG2!a^w$hsOQ>!DRqn=xS#atdO1zz z`Z&m;OHC6(5n{LZ9H3z-`Q<R|R7U@C8ilnDFbu<ov=7+(J=VhD`;~>Rm6~e82gRv9 zJAj9B<OedqXjq1`-!bMv{SWj;9=6nh>&p2|<MFd4)qIcRrJup#B2{Z?&Vke>ut_qP zy9arRt2Vr~iR%D#ahuVioRM)sNBw8fJrMRyJ#tpL;KJunSu-7^5?XRc%6*fHU_z0y z>+&FZCRCBHDOwJcrvfbZ?Dkp?f6DY2bS=?GdxW+Kgio(TFT}~-ET6jTntAW~qZdCn zq|8RI4ZNd#Tj@82f!0w1PV(2M20Zf5<drHwKxJ2O1~mdelf1nUxf7Zhs7~!&zbB6& zcQz&mUNCzsDi7|dSEnq+R(EO`Lx@$q_A8Tn-(fB#g|FmxHfb&&DKwydJfwm*2HxU% zIkw)I5ex(ZJT{45t0J&|K-=UY*McwjI)E=8)m%z(8UBv_+xFK7F>7r9#LInr9TOi6 z9=~%A@5hfjF4x;aREJ9l0wqPL@#ytr;a?7os1|aNVLXd?099xYO6unjk68DdHk{7D z5az(p?JFoBP>t{%8U=ju&oN3hO0Nmv<T$iCXRK+;7+PvP&KB&QJUg?kiHlr{?w#MD zd@R-c8~eQH*{DeXc49lMtMTSWb56>Wf^wmJe8f7&uZ%8m%Ucl*=@%->Gt(00mg5Ih zwGo53n#QbH{}H61E$5L-y<G8MZ$^Kkg`foi2cvm=Zi$1EUgw3@A@gnt0bI_6`&)!D zj}i4=Fu1Tb7<Rh)uObos49DE^Q`HDPqAXB2pFBoVO>IFaMgs&j>&SRj^`xS@(y2+W z62!gG%Z5+VP9SSbn+UuK(LZ#)Uc9wgtxb%2|12@+27j?B=rU58-tf^%lfb(k!!D!& zz;GOUS7j2x<JC^48g)X4Rk_8F7{IE=aKsRA)Bj;>FQH_TqTpk+)k&vQ%wEA3^9NM6 zAhIK9onxCH&!XXa6XlROX7<;d_X;-0(=H=AX!me0Kx?Qp>fjjjC*pyhg0en3a<Hqz z5x23L-F;ob>y%ml(2Pe?QSg1mCv>j~0QJrvgb4*f{Y`JafCVJ($!npM*erhsZEA!^ z%uRTmfhfJgKo~cH8bbD%vb7%3oDxAmWnv|WZ~S3tSSrz5ccXuM{2By2TK(wkkHh1C zUtnHS6CFw8Pnbayh`GZp88fv*+j;aGE0c>9*vIDsL>_WyUNwQ{tx5p2Wv$f<vcD&> z?=KXs6TA|1Yf`^|&Sc*jCqow}z>dTW+H96x3Kt2clIvLslk4x1@~@aPFp+!n7QfK| zuw+PkAYg^6O?yiOQGkXmh~7=!`DN+<;PE5)6Wfla5i5uSaMedZdTRp3g!9cc;BK}& zcN6>tc+MLzrNSTSGII(bLT`aBy#wao@SQjmNwm{N@r^Z11n%0%IHEZ|s#R{Ay#$|J z4Yoq^nxU(cpYxuBqW8!(h2N2XP3)i}539n@wErQs@+HlXwA84`Lp!y?%DqrOOgBKK zt=*D>{FAzmkL&XHO`SnTszcGv!1H|)L;o$5maBCymxKKSAnGjMFW=`)!kbp-&lOk| zsGR#dP=bH)OB5%c`9uuwr`V_lki@}|abP^AjIbx>_i3!(g0m`#zzw*;GJR-AU_sm! z^&pA(a;5X@x*|Agk-HVsCGkg4f%4eg++uGQR)))VQKTz$O#$AlZh*W_`K@DBNn*ih zpuz8?8&N~$*4`Hv5^wS3Jw++K`awv!Thth?N0YRuL6e<46drd}<9!1c{iBpaIdTB2 zX|mbMIGMt8oE>w5t*nw9c78mJS0=}L1Yt;{V%VXEK{AM$ODFH*l$|=hy**h!E@?VV zDX_-xM$mgfrjdMPD0?p+h;x|nQV_T-<UJ$_02C6~B8avd>utsYe2cN6^y+}S@&L>Y zS#=+*_7h_CEySR*u9N%%fHl^dT~$TxR6^t%?&Hq|hl@4)0~>(%_(~Hb5_sb}wJ9v- zM#Fn#Jn=W(DGQeQ465WVyoY!@X1k0BG=RHBF=~>&a3H|PhkfhBHov{8`&=a5u2^2* zQ=y-DQ@iYUvpbfKi9Z26h!KcXw!~2CnDqTQ(BZqV*O;ObRrwS{(3DZQOXR8_!m8tR z-p;e0bmor(3B+FIK?3>Bgh0u$ow1&({1(;K3^WO>)s=`GTo<R5ZX2n0g9u<C?q{SR z&ew%68U3Ml?9!6~+xY%8nLNVPo_1sg<)f>eTMDjwr`PL63i*)UE4Ckwv1N_~GpuUi zQ^8Tf&8W1E)xkbG1(7C%e%(>f<lMnWSIUnYY|3N<H8dyir6HWsNE2#*bchg30d!mf zxj6Oa`YTeGwm8MAe&lDBMS~UdTuroLB`^4xE#jKPL7muwMwn`uK5X3wipXDaAyolO zsu)QqV2V%8?D*Rz57_e=ZP<d2*7U^woC|6PkB#snJka(C;G=MBd?lk3{7LtfwOK8l zjuZa%gj>>akL=tXr-#m;3GWi%V=lduZQIfypJ=6L{0B628(9iL-vj`OF~A*dHws_m zNh2@y>pk}Lt3`dawTCkie6B$&jW%0^LJ5TzrAis{+Z>M=Z?gDZ87*I{aG)m;?fYc` zG@>wW>tEtSzJ7aik9aeBDcj;<zg5tss?yyRWwy(QE$L*^9>c-oPgd1_W3<?ECk7{B zd!b9>z`NySC>^U+Z_wg`ikjXhDR-+9RE_}Vct4$?AP8$L-PkEL0A}*zqTL*F2QRER z;0=#6-dumbsW;^sQQ+NJ$oxB^IBBHLK;#q6{*gIwUSWw!>R1EWgOMJ>2Pr^|9Qob2 zIetfq#9d2vy{t%%McW+Yw{nK-Ud{FTx`q1suixjo4i4sRHR1IK#X_P<0}(;jxdyA9 zGb#j1s`~=wl#x60oyH{ia=|3zW7&L(L`kv8F^l&Inqm^Qo$8xx2hSvti|=hXQ}LpJ zLs{KuqT?G5?NVgrk41*AKf&`IOdF!RuNp`JAWoXqba7-}7fo-0uwQ&vNC2@$9DQ25 zs#Lp+w=p|<err{Qt!Jt%6uZlyQ-h1mN6JF+stqpR=~s+{X5I!NeaEuAgJ9%rM^lOG z?$U4*AAnr?(X|MdHZAOYb!iCD8xwAzJBJj^gjlb}s4^DavD_I5#XmLxoZyS31bQfh zuq*1vSxYPVO^woVm%5ifkOxErYb1R9L?`tFppj($N1wKf_Rare=_-TTY@6;K+`YI2 zhvHh?o#O6VpjdI2V8y*S#adho#T{CpKyhht5ALpC`n=yvGLxD7%6(<`I=g$$SwujC za29DHC4Y7Mz0uF<f+;Ku+jHlM^e4k*1#QEl&0&5VQksCxeQMM8#jvbzrWBT*E|C5( zQRCnzosQ=zZ`bXAuwu@$N{<EOAT4o{<{^g_m6z6bvJ&mw?B;s2L#=)(fo5DpRpX}u z7vxmf{Be->^Z)^)X(_+=^!h)F&?3qTI$-WR$t#Y08jLbP1<yHRa@9vfL7;AQ6HDZt zhfI}hGpq^b*V=AhI6>B$;f0lkSWph}n1AIC4-w@+`Lyk~Mt@Qx;r4<O#7tNF$+bWz z;chm!xtViFhD;+4vbEr+B<iZAr0~D^4yy9=V>!lWCerZ{kQ4-942?^dG)d=~`hA<% zd(|@5U}n5<-eKX8>7P~6#1(-ZK!FIw4@3(2^}-|*D;slS!KU}*b;t`i5s?x!Zs#?^ zC0`LSAOl@uvh)oSd##ng8@4v0uJFHl!6wPq9zW^$hVHBHDZ=BBJZ^**h=PbdD66AK zF|CTbaKc*!Pc@DW^M<OK$-VqZ?5Qm;SJ?QZ{k49`4}4<Uw_p0~SbyE1&#q=&F%HMu z_avr&qv-j^Tv07h%v%RL3Usw$yZ<;DW7_bEmWV7IC#g~Pd`|Hun`W6?RC08LNaOws zXL7UR9tda16OU<2@T+-G#b|w1wu?i34I=9B*k>sHL3$p#=B<R6Bc*xWklsv2)C4ak zDGfO}<wkS&)oW9qqu1BYCWDRhX1$GiW_?#IwdTHcCo8WS!JTf>3}eteI#<0#sa~Gm zM%bi)?!8jfC7tlOm?8J61Hz*%5QGhk9<7@DJp4EHb&7%2L?gf{HRJ^r+@uoiG0b?6 zk4H;TA*-vj-cWH73LY*hPR1Ae0?4^`1;(p&uuS|3A=w{Mf68_!yZOzMG^`s%18ZMK zxnrC3MN+my&=(srO_LvTFKKdPc#877wm=W(9^Bpfa#><KsrfmZVxPN3^0Y~2?gC9T z{hWG#9e^XlxlbwerZ^8`=??HvgM*yv`N?%K;7v|Co<1hW-nZ9)tF?<9-VHERc+JnK zr}$`pMyx*|{bHvDe=AtOU*{ifNsXQ5I$hLyC1hjvV$9c){y<Xo)$&u-G4Akwo`N!t zXUep1P(<h++bF&&LQ=Wp&ErWy;Int<_AN37B^PXzd64+{%frfMoO%`>UGHmE-rp;x z>tw<R&76AYP1hej&!W4lH?FhPGqed68Nw-0_0K<;Nr)q5qy%xDxnxa~FFA`D(U1yF zzu`s4#o9a6t0JI5IjSZ?Cx*GhYw5(VI63SQr63ZcQY#LB$)65I$~k!4LO(Z0j%6Jn zP;#Hp{y^3lr$vY<zm_V_O}iLy(#|u27W1e(DTN1h4$L~tpDsAmZp`YL^|RD=eT13@ zVd|~=!237XT9FU#8ffY-N`p!fo+gUAIOd{)zu(Uz1p0O{^Q*TSe98od{ErZU7g6}& zGtZ*=u5%LiyEnuuHUGx0K4hESkKcmfgCBnNPlF%d<2;Mn1jH@%jp|g|$~@QC;*@5x zQh5vs0F42yL6l=yY;wyay>TPsxE3&+8h@nqXKAJP&YkEq<VGx-kusP(QRE)Q%S$yR zd(J?;BZ4PMM=>Zco!ejMgW~YkxqlU&gR&1Z;qIh58d_OlDFsmA=Zl{;|FxD?xSo3! z5dx0cb@+@9jCF7{%fjt*&A~Bo>mB?uzqA^Dn_h*&@CqKyzKGz4C8Us!s{YtQonw&$ z$ExUynNv#Q{<p?!W0dU}<|s&0dnqbLlJEY<JcfY{V&C}E{i5vXi4`AQkImvAF6AkN zO!=5)hm}X;ulsXsIgOvyX*!D%UMJG1u^n>GPM3J$%v)9zMj%OAq5(vK^vbz<Tn-L< zCa+M1Xn+4A+K$!THJ82d<x7U7xi`Hde_CVvY0m44J?Ji5e}bR-C*2ztmk}q+L$k4j zk(zp0zC5nXd8Cwqu2;sGXYOITkqI7<`WzV(@X1?p+wYZ(=_AU?7fY(xdm>*|6tY6G zPaXW3B(#ZZu0Q-b2O43sp{ZDo^#~%fo)M1jxSTi68`qzOTLPi{=_B+}q`WFIB)EB8 z@}in<l%`)X5w-9y5$`yL+Q;;}UQTo<`L12a<^VD5wQk_l08nnYC&T#g;XkzXdtDc0 z4XFUTzZ&QCeakEO%f8;w!0my-D20iB!@*ZGRXBIoZ@q_Nao_But6L++`hKO~DWe{> zac3n&XWenn?LNh!^nY{}dA`MOc^sk@fZ?&&pKuqj*B!Y`JXye<58Ug}E}B#Fkup8d z1YcVEX||puc(M@l;_l31;#H)2%qim(Iq4Us(oAzfgN&tDX217t?v(03vQimz4GWf9 z(h|TyR>k64B|<|VM<hjGzkhf5E6LY+63xl@hIOL1Q`2moLJ+!?o6P@?c?@&@Q%&F_ z`v%>XwcK^{*T`QNU&~*8G7(q&vjGvQZ0?Yo;dTA_5iX@ur)s}E1BF`Fhi<5gK#`v3 z55Cjz!W-k*w<R&}n7&K8vMEWH(ae=ORI#wu%CB_YZw&cCLpAMhm_ZWNuhiP|OZ;$2 z?KCRra?A5S7GIHSbVKUmWg>M=k;_JZ5(VlRZaBEFTm6->f+7ghIn|@fSA0(0O{&q_ z$J7eBwSL34K^Y}f)&i$6uYY~o=2FNQHpIPi(i#u}5A9PsBfXMNoVAbMUPptCQfo}w z6Nt?GKpb7CaHaug^h<4lWR=@^BeQ4+S3*0uvS8o(CC~B=T>J+IFWR!30Cphiz2){p z8v)X}x9W<QJ*n<+BB(<l{3V1W*cHK)+WZmozZ!`0U;pa_csw)nLuyblZ;VvIc}C=X zrUHVHWQ2j45rYIWMmEHa;#vhf+c4CORw3gAY5P!#W$xs6>dZ!_$1ca5F80|-PV*aw ztrsl;ciik|K?p<~qH#R7W0nsySgJ?4eb-~mqc%KorWnM6)!OR#fE!+M2dd2MwnVHB z#l9By*T|4dVB+p0Gs3Gg$rRT~ZjCkd&4If3*U;-Pyh;dp5|e$k`?^`H`D1%XHDBu2 z7^YSe_wJz>yeTakq#2eWbWW`<cum^~;#9r5zwD^x6hbq;VSB2$(|l1Yje6&$_KSRr zdk4|dY+@SzyInFWP?4y8EqRkO^O2?#yc^-~5?^2|Q}`Mn?3BI<uV>|U`YU~Y@I%2f zNlKEP{g;C{y#Rp}_W5(AqTP3~SZ3n&92&0;zb)%FaOq$8IvbtHN6KG8^%BYlEu&gZ z43geG3`D?>JACFUgcbDF2oyR!CiSaN)e6y7kp~)1@YYT)9JPp(&%PWZrTp4#cdu)| zheS=_6b=4e@1;Io=?oM0cHSI25^nLk!tA);uk_hY(>vXFs9ir^ZYLgusU&@7#x;h8 zjWM646g0<h=H*3K4X!MP&y%3P5VdDHv!YzKMp_uyfqBVWPn*YiZ~!Q-5%Hdfct!BP z%#OT{pYMmH44|)R(A;N$f{@~<;3vx0p9y{;Uk>^A!4*{1h>6ag5091p2myX_w~)t0 zNy_R-NC*<gSf`_udU?5AKl<hhL!Za;gd^Rd<C}+n-38o_J94BXre4>wJual=p^e(- z++rHU?+F0Wl-AJEvB5@nmTwZNp4XwFLLZs;Q6@vF7Gqf`5lBR>TFSB41KwKd0L-j) z!?a0j0ca95+1V3J^@e*Kf)=#~&RX8(`aeU^dS7khY-@V(&_<n+m!nqZ-D<7CO{LVf z1=^g&T}i@*{(EGgl(qTehU}XNc5j@XuYZa(a6kre%)OGvjGdS7<irrZh2un^CB~!S z3K{~Lc;It~{CggqJUt<>oz2f{qJi0D%^!ZU*VBmcy2mbcU?;(>G$(PzmOzu4Z&?7& zRLT%X?sy}v?fY<Wa;M1DyplwZPaNHB`4Ml3nx$J@**LY?=X{}ua0!Y18||L%1%5Ux zLQ6Q*gP_&To!>bvK~JPLX6+vj=4&?>_->vS8Y^48j)br>kh$jj8m#xXQMNww==Ba; zHIS7v7;YbXM@UO{h}<LAE<KKrl?DvZX;>nzxdTCnGQsFQzipjrx_eI({-X>E<A_O^ z4~|lS*R;To4(1&hAx+NmEWz;aU3BY03^(cm`;u@`S|41)8^0hGDaxf_AC`0HDWww) z1a$RWU-Nr;dDV5gqm_DjyRH|;`t1IDZ_xkC<^0Y3>vLvU&RNa{lnTxmqk8(;?io*- zfO#)vF<S|LzS+EF>Pu$6qgDF5ECEUaUeLR3=H)w{jjC{5=1{x7%-XL&3m8IsAlaN< zYnId)S5+^jir=;*YMPSWW(WQi-=RBvWr~U*;TAjlej{x>s<i6M_d3Ew23F{&)iN42 zMJ3P9B<|SIki0fv2sUW3#mil2W!RAEBd^H1I%>1+^T;VKDVrHjRfcgi7iwu_?2KHZ zCnBXxnaBD)7L};^u6wOdh?M8jtToX@5GUCYz{`WAX!+-P=AM+$zS>{cTX$AQLLhL8 zgQ_QbcmIXa_AVmCCozVfx%&8CtSrUz^<t%6ckZ9c!22%hG+{;!gd*opHO3utE7Fd{ zNK37O=z2BAy=g49oAI#s{;WfbJCq+5zOn7z$Ce*X*gv`g$><CVyef1PZPky#@`m@! z-Jszy!@s5?4CfhZGyZRgfXjZ_)JK`q5w6h1dHhpZAQ-i074fv=_XP}xwf-+!`#H#3 zKt(se?K{pF5}Z6ZPIx8mSDf$OXFRyA6a~GFcST69&7-{$lSnsv_mZqd5YwT6c?x&8 zyW>6zbsx3m8HJ)B<_U(y5^=0=6i2#JN5SP7?b`5om_#-mOf;FClSk=ZTB~6HC?Eg; zML`18$Qo(7%apnZckno4lE)j%jCWC2STgE(-!t=Z7`TfF$G(;*XiwjMB1Zr+m}=k( z_Tgli(ECzglw=&huJUlw6ciGGu>D1K!QqZNhT1q?as@+>TJCjl-N&5-zW1k9iqKER z{=;n?BYEu&&}nc<2Q6Ag&^HqU3t8Xd+q6MFCUoN1f~M_cT92+PznKlnnGVk3ppxjI z`vm*;p`K577YxQM^Z-g|_QNe5OMR6dc+4*wLeo@_t{onx-JwnOsw|<tD^{i|EE9YZ z;^Up<Kr(#q9^+n6n<((sSn*oMc#smsOwn5Xvmtna`mJ(V@~!a<N+7i&x9QNUi_1aR z9}~5cH=_5RiJskkpBI}c{suqsbv)l6w4ArOubS2B>R0ROSI_On3O;N_a1<*Ig#M^W z^>5LMYOMN{9cFfcko4H~CvWm{!OK_jJm--TPPDTBJ=N$cu+9O0%NOSZ3ZEQ;h3?qL zf1D6ua<$-lvykAk=AK(gU>tG=TdRX%&eQys>EKIb(E5Xu$QdMwuHfF6N;e_Y`W-E$ z$(G_9+0P%iLdR1Mk`1KUYXIEBJ)vB&KqMkcKNKj3NVq$c<HsI6Sx(NMKYxA<>@X0L z<=8EbAydc@AaAw(PA-d`)4Di##jNy0G+hq`KoCC>Bcqb5PXG%=J>m@h{Wg}XT8#j_ zKg)0`F2#x3?2zT2Tb_3%o_>wo%B5uVsCd{tZuhj8@{U3tn(8mdgvZ3X6)`Viqdy*P zZSgmQ5^m!*bO}8~rb(J@t?-glF+I@fi1h?rWva3L1D@=8G~d_jVyF5r1P2#8v%eDB zpJZcc1m!iI^uF7!u)h=6c;e!Z$b-W<ubJ1mN|%B#hbJ2!f+XUHXVXG*PrtBEi%C<6 zB-T4kRhwRZ(=Qp$zA5@m2KKe|`Hdc`PDHtvqOOO4@;7lhXljoKB;hqe3xCQi39e<V z_fio51SA<<GmlQHNnXuWzQV%Bc5%UZzIKJqIT^R#Bh{F8##DYV?wxh`V1AO2Q+Z<f zBaT>Jm%?0gb=Xv*^`WyZ@im-8VHr!Bnn+wJT2JA6foz`$TZUO|TIfEuowiGAh&XtS z2YkN@1Y!1^9@@s;l3|=6{fDYYP6x%WFt|=7kzk9<#TCO7;r}qB1g05>uQ#gYU>lyF zJU27&ZbPIfUJr2d;TGB?%UlaX9jUVn<=b(9VXmxE)3kJuJ*ne|4^}sqB>!T0d70;r zXdtO@sn@rL_5(3*RSSPxq8uZmv3&v*f>?Su9!pXaDB>@mV5r5>Hhr*w&||_MG0Lg6 zJ(xX8=0k`+xVtFC5l%yljk9hz2ZZs(NJu?paj8yLdybFMH-b_fm&T0|&azYdo`<NQ zs8VfQkm!j%UpOyA9N#0MBK2H?iFIARmPwsFzkL?!s|b3HMq01Pe9U5e>n?2*v0Lc{ z>Eh?B4c8ybG^@DyN^jOA-xlXtLl<7G-@bsth;MV=G&&v19g3z%pe0ypGCeKG3q_X# zWNA3qHWv;gqHuBGB)<2RdVE#dXOGF<R2xD>V>&BLXCV4O>e<^`RXQr{5F2nGh6lgV z-ut<-&;tY4f*9#=xic09o2*V$QHH(Anm?@ms5WYLIoMIT@jhUHo%WUN=vc_3|7~_O zLF+0171n2hN|qDlr=Q}EiYRMZgCkJ$V)E$?#9=bS4%&u}n$WWx;F&$@84I^_bhOU* z8L7V={XdW_CGu2mD<Q!Hmx#Y^+jC0<dQ=3Ul6LmG<Fv`iCyLaCHh$yC^2{uvgu~HY zZ}o)*MrhFh{BH;)`rQm^estTc%T{g&w&wgf77h+%up>MB;NUPAjZiwiarw6acBq8y zrQ<#p1!o3YuOW3cJ99pYj9&npAh|G|9sS>m`s<I)RE@(rz^BD-s_ewkJ#Lf~y7B5U z)?xnoSWv;vo-GUscSUTI7-FFECD4(u?r<NR3t;tCsH{KqS>yB?ijN4{kVo3?T?pQ{ z1%*Uq5Zbdz*o8jWB(+y7bF==^2lMPVX&`j0@PA|Y*@)|u{l~iLL`;U_)58Icf-J(& z@n!(&TUG7Y^GdOD{Ovo0bt&BG+pJJx!kTlbKTPn?t?q9^P4;z|mTnl1w-thl!A8w( z8F2BeA09u?icsXg&PM4VM4NH#n?5j=yp~#I41s{*F$Nxng0Y?;?cOJAbH5K-d^eGt zm)oLqU^wae$VlMNYX9>J<u&%TYh82XQy4skbfN&CRFl8W6MId-ir&S?%H*>{H`UZ* zZq*(HWR8-nvH)3&{_i20QKy|5r6ZcUnzMm)Yren>GVC;ay5ZMi3?48)dUO0YKHold zg&TvrrN#-uEl>-+69q5W*kqFi{8-JBHN#Bidr%cW4@o9(L>bX2WG$;g2pL&o6(mC` zy=vnVu8MvY{mI%=Qqs5{lRJ^?2OKdimt8xFO#?~W-=*NOy2i$cWgc7C`%%GML2s;f z+p+b_tcE`;f3IAT40)Z<?G1TV$V%ycKmueBL(Gq$MYo1@I3)_Mj%8mx=COMptk=Y4 z2bi~+kt>;zAR|`9@A8w6%DU(0yw&EDK6wgwQc3-;H)^hf&a=-*;?Uu8Q0L<%<r{GW z6il2iKX{o?iTN6<n~(yl;pdB1S1T!EJSNVQ>wENu8f4f`^X_S6qqFVG!tr0%cH^n+ z!{H_$=j+ra$9c|{VAu`kD65qRk}BP3=p#ZN`JC#nUrp)K9oPGY5@G1X?A^Z;U^iw_ zt7AlfToTVJ<L!$m_d-I;(rf%iGh|F=x2w^B^`&)kHzk?u#PLz$LD1%e74g7rV5i~c zb#)Hxbp0ONU7v)USKDAkE%n?1-`qjki?P-2gU9jimAcui#gxB-gNTl+A)hI`b7cq1 zNfhbb_%QF4spdQ{i}dy@BX0(#_F!hhmN7nvD{^>k*jXj;%z>2W0BOhQ+4+}s|Ko>= z06zB_d9L0MQ6$9Jpj!l#VA29A&@C#2AEvLvyaQgt>!p-iB~$3-2p9{OiXiKqSNnoz z#`IY9f)e`PhP?%bGMh!5*hO$8wl*<%G0UiVXUzHYt!!_;=a{<Ov#Nd;3)3ncH;2x= zcXV{Ngnh$r1`BE{{`@aFt>WM)_@Ls@x8Nk%czW``?H7?pW1?Wh67)eukc6H|3PUTJ zgu3{^BpaeanghM?Tjw-A_dSqog#%HsSg?^?ZGL^i0T$OQd~oyg@JH6rzwhWo8LPE) zo!AVEg?8|a2Fk5S_D4>(p>s!iv<s<oHw#ZGxb*2xbjKN%d-7icsT<17wxvKxCaKwA zUL8i2T<g{JuN*{jmXl>7!A!MuBgtC>9~JI!t^eXii|7m+<Gox;AK}j%WhlmKPNf#e z&5gKg5n$TUsBj@l;M~{M77hsW;|{p?_%%v(n_6_b1y|1E!CuJz{w;wAgs_7QF?#c1 zU>t^e&58ZuHbZf%H35KGTv0|+JE|^agjmlbdA^jqVkfsF4`_pjVzi~m`*|JYv_;*E zdp<t~(wXXO=+|_Lhew#D3ERHBD&|sq{U9s5)`Gq!h!hkHF@s-!LE6NEtSG=>(^}6z zF%qbMI{(p~dg~l6P8_Z%AMs*P^467;a(sGziO?a8A<L$3S{-^YQ1J5)g8?7I-0So^ zHOzW2n#T;FLB^}~&bo^x(6lz&wM;~fpL=A=!3q!7v<#_+H7!^E_Rd{nHF>F8IQS#y z7zzLRv(PuNLkPoA`nPN07x5~rggJJ$Frm;n9LhHo{a4fmCwy6-bg*(O2?(XSqI0=; zkk}U+z#aJP(AEgiz}johNz?KrH+$)zyRWlGwQtqCXSjo1g!m0U7faFH%TYsS!e+OR zv^>2dh2Fi=ku0Q1P&kQQIv4YFA~#UO)M?p4uZ>uW1*i5}`s<4FZqeuAz}pAP?Yv2Y zc9wh~-#$x<)%t~KiUg|CpKowrSl--jkotYZ_*qwsHGvTKtNdI37qL9$0o+Wc#L>j5 zMiuu{6J)bmJpmDcp7T>668S+uM5Jd5d0F_6yYkM_$@0%UGqDdR#}u&3G;G#BZP@gi zGtu}sYK{Lm$bo%pD9nw%((AW_fz7+FQk*0fvvV6=j<|B3A|C;raY0u!oil+WbWz9& z=c%yFt-Sdo68tJK5j^+r*d+c_n}7zV^8=8;#&GMj=8trce8f{8aIWNc`uCN7&aSac z3UI@{<KfUA81Xblr?_rLo&HOVX9?JzW_5pI?B+6N=o506cVNP~RMed6+!h63b0J7b zMyAio&$are$I=S^;tpwtjO-um-5FzcbUre7huyG?$L?0{WMqqrFjlz_4ZCU#@w)h@ z!c#hlQ!Jb&d$aG!Cgi~Th+3m;K2%hhZ*rm2f=ZR%3VQB{<7^8sUD1|9PX?h|R&ZCi z`Jv6t*>x_%x2s|dPun5c5JyC~-%DtTa2ZO?YHZKFGglg()`1V(x-a{hep$emk?duD z*#|}kult`HcPR^3LHE+f<?0R`%!XUz{PtUWrSsqAiv!8lUsHL_E*<o9NYSqz8YbDE z5CrQD<B#aaAn!5YDwA;68B=VSf51k5@c!1_90{+sdvmh#v-jDAoRZSg*C%Rw9h5$D z`E+_(=P`c6SS6;0?wTNB@qU`QPm~&ufPzK-N|gTo<EVpDoWOooUNqW1j9;Q{db;PP zS8$<9W{uJ7(;(2C#$q0j7qW_Q`V;9^34MtYcnqY4As%>47&99Q9$5R=E*ceah+>DF z(h<LiK=P4KHITfb>XJ5pzUQv>o)IA$Y0XRvNs*yDeqX0!kNrwn__dYX&v2Qx?D@V= zp4%!|1nB27_Xsyu#4)89>48bHl56N{GX*e8mls7_jr8K(iBn|BQQf!3h~Gy}j!vKZ zcCMKnj}Ofq9FWQS+6(rCKFB&kK1!&-6aAP_v4}#zD6FX|fXO<|<7hV^ChW09Q6D?p z7Vykeu_xwBY<|tno8nDQ>6pH;cYZ&P+UX(4Q9@?@!@nZHzEylO!`>7qwwK)&O@V5> zwNikSHR#fm9vT1aPd0x(R%`P5?2|sVZ0b_1)F%}@-(tbxf{#@XZ&?$riOYR`EB$;l z4QoV_rhXMwJg*;2<CHtOb&2cW6x$_Z*W4E!_3?tT43+S>l*C%w<&m1Tpces&gOg8O z{u%d^<K4CxPiV*w2{R|lo%rGuz1?A*?cU!^*(PrsV3;Oo*=pDSGB7cyQ%d~u+jGns zda}hZikQmMyV98_lbhKhX}CtmdMIP87e~|bbZ0?{xz2FTEY}rn%I9_(F=bcj*zx<> z%oW^<GVR=a5&^nCOwJ&po)^?UanR{TPm5~LEt%XsObHPQD?7s^*Z0)K@Vmw&{vezN zA>}cw*-H9|6Jx^*6zj)v9uS1}#OTx!Pe;7iJ7?=47N(R^mQyKC#jb9fzqT>1R{Kft zWiUodN$!dK#$CapaX2A4T~l{)s_po=HacHrGx!aHy&)?<|7R%VhV%~#B|^@kzN3=` zEDDzc66RvjR2GYlgm_huzq3hTX3rtM`C2l$6@Q@vvKDNmd)H<ZT`{LXzv0S<mzV0R z5srF}Jrr9Q9$^fqr+-k{;qx79!?@&X6g>0Ia=Y<7`sMP&&8w(JLWMl5DW#HsXt?U2 z3=vYFtnOIpYcLaDSj15_US0qbInRf_*|C(t-1|##PZ8Y$M9(l5)jps`duh}>=RKAd zpYoR5*qm}&lKaQ?Lkdrp1MVzbx{+`Ecm1o<BL$XL``4fIXz!j+Ts~kwJd71}3yEA_ z9LUFg!NKUz=S)!5e_Q;qX)QJLi>Zb(8W)>?jVjs~KDW=Q?>!~=r9Kq<M_)>)@Fr0@ z@cKIb4g^<fUuPYci#W;B*Q}CW`K9#@p$uTcuDMCQo<{>5G2{W|w;nz<2OsC>9RgOO zVBQTw|D0>gGsDeb1TOg<K<sVLIAoWx=g|V70$emw3muQe>d!Ph-|CPtNg6z$S8B5A zqu52JsKX=rPGy~5nky%4S>Jz2O1%tliH!!i>3&)WYvqU3pc653WD~1%C-~gzMHReV z_M(8@bD0nCQ7(QW?Zm2#5|ZuippU-c=gQ~cG-9=ck>&X1g>woIZ0v-aHKpc%PmI}2 zY85)Q>#s4rs$=(DC}GiVa9I_8mZ-3<+mgH2qV91PF1}D?@f1@5H%LJP#h^r5GF?&k zwfFkYz3jh}uY^hk*PUgfQQ^ohSf^)xq%F0@E0N83in?Oybk`fV>dMLH*Cz7?j`ay! zYzX2mw0qQMXaSmw3U2vT*B0U+5x<dpQt58FZqvK*%Qu%SFM$zP_R+I$(O2g<BeT@H zk;wY6B-!ZUd~<%YX8ge;EcRn|fLGK=hQGcJmG>PV8^_L8YemENvcvh*P^Uv9CCsY* zrqr)(Zd7wJsA>7EPz}GHnFdoG$yEeCDDo`BU#}N4>>a(eozvj7kX42?DxOng`I*Eo zu><z(&oIfxf2JM8D+GDZTlw%15`0lb87k|YM4VGA@S_0Fin2uP7mRhjN`J&V2@NV* ztT8ziKD}qy5|#G44ZVnutf>O}HK-_vA?0!38!i{ZK=uSe1|=0P8YH4N(CFD$S5skc zXOJf*9yaPBDPG@3lO8?71>0I_pAsI&AGITV2@n=)+>0RkPX#&SlfMbyzY4$WqY@r; z<d<hTAAxE+AjeP5&J}<0(6JBmv2#lqHyU5$Vr<q@UY5)gZP=A2_vVd`92UOOX6O6P zT{{J?s6OFl@A+CxSr$XtHa^=y<B_EV+a^Cb8w1ZBthm#l{HD>^()Dw_Tq;y)nlA|f z@bX25qZ(?XJ!ZM&LVM;8tm!-9yAO)6=#-<1>K-1%4}S3{_8atk3J5L}lmB*_iltdd z@x`Z*?H191{m00Atw#cq8lywdoiR%upO%!P>hlFJzVoBj_{)q}n}~1cMtR^f-<LpB z$G<C?ZIq4IL+DZGZ7r)FC~F5m5Yea^+~hp)EF{+f*Jn5R0JA*LiTIc3*8K;@1+hb# zKx3gU(IhAIeXtgrE0UN}IEBq<CzHAqrd&BWpGwvb_c>h)Tb%<mu!38wuDe(yaU*wO zN{uduHg^qTIBc!!#jlZ+SVX>Q-1>ZNK}D`p0tB@ty@LD6{al0N*Sf2pI2_<`79q0k zE!XeMB&VC~vI*n!<zU{?GyKl}o6Qeu_J)jjqtMLXxeA;)97V9X%!=<gJR`YB=5Io~ zcK#BF#j&5lQA@*FLH*v$J2EsB)jh*9tWjS4M_@mJABJHSwH7sR%E4RT4ruvHkNx`0 zN%0iC{oX}lTx>{}GK)~l5GhB_#8mH>A82q>r6b?PUHD*fmB{?zK%>%YR+owYX*<k; z>n-1b++7pUZOS0kWoV)AkJo+uHL%g+>r(1{mzn?kBWP1VC<A5zN}d}V=rVoN9oeOJ zCiL}|_CZ?Cr!xJ}UzCNrE6=k%MS7LxWMgGa|0En(8)N>-pnEeub3s2|e%zUs7pA$J z?I%|;XeEN4wt|)h4c;^1bn4BBXA@l;=1wotp38H<sm{D31esZ{QQ=OW06vs!EWm2O zHO~vrKXvWHKc!sQI$JLcC=QT}8jfatLtUc*iT~;uj6St8H%4+H>|uv^4Z~^CA6Xhn z@b$UTJJGoJac5>Z%r5Cp!M}CAO-?5hT+liYgu?4)={n(mji$E<btc$7qtQ7}vwkiE zIm}kjvqty<c?hW$SDbprNw3fhlDh42*e7*;At+RjoHn)W)YJ%a?q+0-6fPl)ny0+$ zC2UR2)i>%W(|A8F!@c;Wr%QlXmBm6B6YHYqiO=LfEC<O+_ySH2nK!(~y*sBwcF|At zZPk|*8I6#s#+z@X)@1E}(CUA$9ne-CZsat5ZQtx~MAQ2?s9_@K>HyGq!Sf9Iv-{?{ z^Xo{Z-nwAe&ZiCHVwjWroeG$f5411@fJa@&{8z1rpP;Z>8Y%9Hw4c-bRPx}X*kko( zz+F(|`GYR;J#~r;WpPqZdE9yX?UsI!s_SVze~pr$OxlC;YD=T7)V361M?2-IYAMHs z;*IJ1X!$b<CYi1Ucjd!z%<H=uz~obQ8=VQdJ>j#`TE~(<OK^g9=?G=YU+Ef}1e;%_ z*R~m+efws<M1TX1Gn@zf8d28SqRb_t&2u1}GpEZ0@9*raGnjr25vI00)%{nd^`55p z$AX;S9zHvTo(17NG4+V|#Zl4pZI1eo_e50CXN^eOh$Zr39y1I%+vto~;VTgAHEhf% z3VTpHgdJx`N_4$YTFU(zeYCh+6K~%ALL51dT*hVgS&?$I0>>`FF7=oDkh{(oiT!%j zrtNS8_dWq%HH-2U%FG2VTqy(=Rs%~7WE!dIdmW;V(y+yqf}=Jc{lz_Itm9_(=!<MS zhA@<2euo9Dc=H$9MB>hNUsh99mrgLRkAwI3qCVU^i(RXIb4=`Tzr#p{yvW|<Q*(MX zO5_`4(ctcE2@@@iqhIgwZrp?_a7|8VkDYsz^0lQ5yt)j{Wcgkk+skHVT;-!nWDIud z$q{hWP!hCQ%^dR%y^Tv^|FTTwe@-l24CJ-}RC0IApjy``S=j?A`HZ_phRtQhUxoYt zJz}3^6b{IlCqqD%L^t-S`{*ucL;SIy;|y8+7B}EI_~k!qrVo7ox>y*49}}M&U=$nU zt~d)~FUd=S9<`7&QzS8o9_00BN;yLw_W0~pa&>q=bw*KCNOZ5~Xv0u3X-C~qX*yK2 z%I=POD1}HiyH2S5uC+0)a*LV_k=8Y%t=l2XJHCTJi|M$z^BhjElWD)5K{m|zDCrDr zpNA$;#9<MNv2<{w(V{j&9mDFtJrLgN8bfXqIlrT@T6s8YRhCy!h1^LGAI}`ZoEO$| z_#$W_QWUmwAeMFqDnl4WFG3@_x!ejkZL#QkT|Kq@rgwC~j9g4M;GLlM-379JO{VpY z;hd_W_;fVEd%`3AoMFvZY!$!DM6nVGTuYKv?m5T_>MxYX;r1*T+7?KAlz}d+zBfPs ze%uG1Qxkv#`14ZrdmZMPH;D1CjOmYFR}0uD!I7Y?<AEcJI>mtu_TDl<5<_;s0OG@O z2@tH~aq2hl6pG}9$lX78HH_9`LA2^ryo6zk_mFFpz=BZ@eC{dc?;{5qd5CwesWxME z;w%?mi$xtGr|`<z3iw7$tE=ujLy2XG?)2Wa-uvy{^E<^hy?>kmh+2cl<uNuhciydT zX1`Gh`&-2#OBbByYJJ&{WAd{!JiNm0)wBu<N0CW1#NZA5MbuT>_>^59f4R%nYMPPf zFq63VihNs>^di50?R*ewD=JRwwS&=RKO~5_<iSQ)?oC>e<TS7AjX(l1Y?)A^!9&^; z%RJ7kAm`-G>uru`hoBG{stV)C`VZ0kH6muiZpc5euAu!g%bWF?YksRN_vZGwmWpE= zy@vR&13r4l2uG+?EtdLGRG7lIRqF^_&o`Ca?FRieFx5hy?;QNmIcSan-Uo>xY$5_? zNT=^`x{xMDMg!7_=Yd1<2M4)Z*ya1{U%B6V+5}7EK}atB<$@4Q94F8t${HeQV362n z3YlmLRHq`dtl|8_?=TCgOoABN>Xf<x5pbMJ42U6^XEkgL&|pM;SI0WTBcha>>1JC^ zd{Z&32y2A#wbUT$c9a&^pB9z<u+CKXjJd|WaL6f<oNoft!1NgDN*Bm)WOmyK`#FoK z?rE#qjvJheV8oLTYuiP)V7SCMomDIHNPmAVYn1|pU)lu<9OjO!gv61ck=ZtOM-7cO zpTf$GRPm%J&I21@O(9U#hnrvc#0KVyJ#t05$*GF}25zCLKVZ&c`9{C?;Y+9f+VQWN zg9*=S4k24bl!L;Xi~GhFowhFyn%;?k<F@B71W3{9t0U&xU)mH0MM`H4UTQY4rFSkh z4KIH-a@0U!POqc|3&ja;v@L@T#2XV!%HRQ|tLO^@^hU3m6&Bxy@)p(`*j|Z16+Q3* z{4G1g$UGo2gadyv1N8iw_yc4&DH9v0%7WO6TYZJ)gpR=fY6YLg4Yd{>q#gvz0?-%4 zNdth&d<Pr21%uQ;ExRw2a4uLe7q*UcZ*tBqZ*NS)tkRr^{df`E<V|mA60#hEEpRIn z7c{gpS$w(e9cj{vZMM5gJ?k`Y7S_7z3~lF{(O8DqATpRXCXvY`fvbbuBU(7PZ3f7k zUrvx+#=L&ql)V3z>8XD+7RqLjO;@=oVA*P@lJd*v?QcV)1ETYVd+ra8tV_P>EGlmk zc3FOISAD8}PYN@JN9kF&uU@Qli?><EFqt=RJ%^JxB1H$i6FZo=k-jv}JjM<;n75c~ zBp$$hT7yGCx+}U`A;#1oAUJndeeW4jEU4@<zK4syS5jjZzcwJI&NA^sRD4@fo#ilj z1-Vh^tw$WqLkCu4K;n5prc&yBXUl3sYz9;?3rSvFPkXsoUhd4;1mA_ChYaiozoyrF z%MbYgIrX#&h=sM5<79Z@^hj<md|*%o?H^P*`lnlmO>ptlg7-<rV<s$q^n*pP*0?w+ zk=MBZHNc0wV6Zm;H)uPgZKQSl`@URGeye42Li=&Q5EBnaCNKl}F88q#{)Lv+Tu0eb zH*L>%u>S3{!_I<m`745|;>#<xIr{ODY<Yz7g)d5%QJguy0h_7^%F)A45UIB+=YYiz zfrPPr(Sr{3V6z!!FwP%OaT!TTJ}qheQ78bJwU4(T*O`UI#iBLzMq?)$#c5uM+LAc- zK%(ogUm#R|U|;~Qe=W*mn&0&b;_4xJeIA4}wi^Bl890#|=Ss$ZYiK4{K(#~=O<acE zO23qRX$+K^oYMiLb;tgf2VG-B22EEOqjB4Q)#>Bt6m{>(Mxi_q)REa?vypqz!uF+4 z(fUxc>%FOspp$Y=gHZn^!t#JF3{9qNnug34T!*2P%5rA4v}gCN2KY4F-yZ$Inp9m* z2jSmn^s$!`f*2*y^BYhd!YL_)NYW>ngac<%**plfM;Y9qFk}2~r<dlO3}*Gk{onO> zLMrl9ng>#a|1*dY?hcHF?vg_ydmbr)6Zlh8oE7YWcQ}ORyZ~wUiXpM=9NQ+S5fn(T zZy{-aV#R6VI2fqUa8X~j$+(o{KK>CEQ_4n*hfU2;=VFz_qD7DOqy6`jDmS;*zPify zMjj?)&=T)zBd-tS@*GGlf_tzebK?J9C9LM4Zr{I|+|;HQk(}8C0o{uoNTMB#g|QyP zx81f80JGb%3`SOsU7zj?q1{N3Oius|MDiw&4qv0EU(Z$y4#ma)T&flvkE?OoAa|k+ z2_m1U^{=!0Q**R&H~r2UBP^D-$NalW>|H=fwznvTe(hZG&_?iR8;Ou0qQucWQ9CTh z?eJW-0tGddIdMEWzXKdYC=a@7-9$J!^T#K7<44?yIep<(e2QkOu3rz890K_1*NRpF zzf()xjJ7<pMLy_c&gfo5@A`h|qh(G+4Ec3FzptKiQM;JR_lAhZe8sUfa*hCP{p-%M z%<DT8a|A2ErH375)f)(ijq1YOAp#jAt|LJXHlvJy`_($Z2UviZApI90?UZW4=OlpL z<OEXY8;L)_CI-q0XfqI4!7jStx=01QK#n+dKpm(L15jZT_vGkb`ua+QDvd~2PVI1J zX%_Y7iTnIJ%v`*plpK?ry>O?!O^U#gk!oqsTHcRM+t}M-?nNY+&rENgk1u~wEN8q| zr0B$?t`+vAcJA9H{3uYub-IyYYbV^BO9JW&2K{=Ca*bGbDDJNyX+(f^<3dTVqZm9- zonbW%=wv}vMV8pt19a9#D1)hc!1po8h5f`LAs}A_Hwq>8C;4dH>~NZ=6&EsJxP^81 z$`gt`%0-qDyG!Tsmkg;>V{_oZv$lg0wm)dK^gf&!0E`1bR1@kZN@r$6R`gat_(%rs zV3Q|Yn8#m^Uz8I#f+JlV@R2Q;^;8d7v>9?+0j<cBH^cOIkFIy5*|L|<XdyMIzFL*4 z+B8cl5hoLYW=7D9uCg(M5yrt!64W0anF~1`kbIY48x~X;F>Aj4u6z`5a~>eDp?@Os z4bFw>*||q{`Guc+@`WKc?S)+;ax{Q5VH2<Cwzd1N`=4Xi%F#cD5vNF!&;4{TC4eHr zi@}S)3lM_+GP72td+@<9;X3|ki$V_xl4>eG3M{~o+!AV$Cub#nf8GZXa50hNLiT|c zCi$V;GNu<DmVn}(v>qR=<L_GU2r9o8Prt=|T_A+r@*TXhP0PB|U}u7j;L~U*JaR81 zYWtbCD<wcVJOF9W2HRHA8-yqfSq}y7pQ1bZleak8AaH-Zq<*?JCj7|AqP<IpVrpR< z<MapuZX1#)0>l>{TX!z4Z~*I$=Q!NCwfG^~$H@!}ESx&Snxz<|zw|LraiPUsKkXZp zxB$1pUuM~3=s@7ARU@J9(_veaQ`pY{EJ~7*D>RXv&$8F=3kmMrSJhm^492QxsToUT zJ6U|oohwP>UQ?vUYP|}9b8tS8_nXt+|Ga#WdNov2zJT*Og=8K*GU5@G7VCKqm!YDr z-Mar%`>Lf6Wxxc<8P|oZhYiUY=adwFJhkCi92qu!)&njv;t)tBc|#3F9_C-T|J@*x zGB;1QF!?#giHOKURySPB+1A<%@CNx3cJBb}V-Tu1XSf!GH9Yu?sNIx@-$c=8IPloG zr#L;>AugaE3>P`McfMb9C+PZ;@!76OqIAf$A3_52-a*VaWVM6t4BXk+<(B$Le_d_% z@#Fo%9j4fMtf=sxN{PSzo1d73OPjA6jZOj|ZSW1Y+|a<0y~Ti4#Zk{waG0OI;D8k7 zyHvlj!nqrDsj|6r5$Ou}pHmHUV$rscS!E~7$I(8}pA2zSLQ7tAuIX}uYYTAhm;tE? z^JWps#6#!<e$<jZ@}>ac26DsVToW6qJ*W97aY2n~ymtHbZ{dj_O7I(H8>BG@DGFEN z!vq)D7eiN`QRxp$?$kHo(WZP7ojkFdF5m0at?`fV`mRh-!uXB~b#qD25(BBuK5FGD z?jvm6X4^rh)%oH*FpGTD_L?T|=qAU+Gu;v+Mi)y7Hw$nKh>^i<XghC!4oR60kUKO8 z?2}wLi+KlSH~hi4;g3L=`HjGT21T&-czI7`u3%rlR>hCq@l=^`49KNf<ApEnU6F?D z()46VUZQY`!>w^gafG>2hGP{VjXI;K$!r~Meli%wEB_re8&2lLxr9rL)ulZ0Rkb#> z9re8Gd`zWn7O{gG#Tbk-6;r#Mz)Z`-=U}eU+9MP?1s;~F2a@h^XEYQ2Y#AnQ9n{_X zkqS?cF${kA(=;ndEDBZL`yClSg<Ul`k@Ci7)m60B#xuR);lzMnm_tM-|2PR%7W3+5 zO0T+nvaptfTV6$xlWxNt_||v-#|c|TKeg4-Pu3<+=h5VV=hb;W3krVC>bK<v7X73- zN9n3|;{l#!X-P<I8wR6A*>0sVOR$jK3f#N9pBdSFc?O?32tR|0l)}pHZu?^LR#Pi5 zW0Z|!!q)$SbGUqP!^>ZtL;j>2R~d5^=Y&Jk@a|=(zzN0gaN<{Htr6u{%n&zU;g}+x zqCxavcfti50*m+s8{BayR}{42p9}HIf4c}_F72Qo6DZ#jp2mFtb^gN^&kCNhJB=xz z&shg1(lSSm8vzG>3XuniNR1|j?&1PO5}9FK@ODTWBwRLtknOG7oHE!|9E^LHi%@yj z9RhJtyq&s!%Ql4KvTe=>6=qZy8XpZTkUAW`K+iar@)*k0|MQ!?dVyB>e5pw#t_>S# zFhHh>Io_2C4;kb&6EWK1<OREnPIYZ^Rp*?nHWAM$(z*1$kg5ns$Hqlt#y>w+-=LxB zK6X*9c@)VMA>@1hPBLM{TmAm7lkS@<7m#h9{H@wSMki3)HgD+ek`Jp~q22aiizsZo z^C@)#-UDW#9n|AT%rFLydF|8U(W9Yz)DaMhgP*a8Rw+(TP2=0Q`-glAo`&elR)osC z^~0twRWKuMqVVFF*IGsk<GxVqBBfiYs_ah<%db<l6LAYDM;$n8QT5@!BVAC#>!J9N z^uYeweQO!(LEWlxfdbf7^bmU3Vk*qtMWox`-S1@nwF_31{?XB3s!VE`AG>KU?fCp6 zPqD#BK-b~i*DpwrIPp4IuMGmjS;R6Kpe~d(i#MG>JBA~!1%4bGPE*exggV56H0Awm z-QG4&(VS3;lv~}Z+T3pxC~%RV<o6nX`}sF=Rz<@Kja;}cozb?h7o;5y!nh&wL{6)+ z8{XkLkFSA1ahX0$nmBm$joe1f8LWEIF4oaQ)_oUU|DrAOT0JZjrD&t!v2D=-cY)>r zXx}Pt{Gu-Es9dij$8rU#UEk~%8O<DqVtS4165LP?b=(TEy|R{T#_kvoM6G5;Bx_$$ z#-Y~T+EH@7H+I=btYO?X&PUabP{Y$U)aDxzPLuPhiErq@dJ+4*qciIGRoO3Rk-gCT zhdb!|&bWSN_q|5-DB#X5OVcIulu#X{@bf|<I+&nSXAa?zXA^?*FxsKkBL)eiX~SIe zgqR_(d)jm;^}OQjMuOIN!*Pb%S?}B;1B3zNu!o$0{f{jMbDM{memzyLAMC!+U4x9_ zPx)HU_RRbS&MK1Ca9yzC+`&SFqqe95=q=k=(JrKMCP2G+u8nyHO8ZtQVP0sIGR~ju zrX63FhB}WDlRkREW(GA9lj4sB#L7cgC{&i|S=PK-6<DoCyn>(}*@ct3W0L}r=Er>Z zT3gP!z(iM%^qnS$&sQdLxkRNbuOqaH_>8~<#x8qO6P+K2#tT&A<zzCw+09q$j0f5< z!tgmlA-L)6pRTZ=_N0BBU*Y&?Afz#tGB_Tj-H&TbKGYztt{x^6gitb{wJ^;k$zz~T z^?g}OmR?r{VQzf^PXl_<uAUOg2*nN-i_>D8!>_}d+T#J{_qt6|OGPr-t%gHYW<`fL zzf{a_WM?S__t<wpThLKb#&%EMZXzv3h6Q6hU%`y-(;0K}KGgK)-T*S0=FbnJt2P5p zG)o9BVJ3B*Wah@DYarPctWyvWG`F(`+uqQ>NP79dYxHC4kLlq3akz#OY3W7t6&rKp z9)4V}o<B$yWIfC_xv52xkF+np{vc|wj200*o^%2d8W>EE#UuHx?PuDfKr>tN{;d{8 zmB|IV4AK^Bzsda1ZQx?)(i}nx8+HLL^!EZeEF73aPK%aY2NT%vbDhmf{?{^FLpN0i z5(rguojD8=;lA^QN2Hhi#N(2txhM|HrF@4bVH||+RK!W&5|j@$JmOdX=(jMV!!$j9 zr<4dm23<`$Bf!`{Hg>E9ah>UnYpY1}q4_}v{+y_s4R5?rG(<wb1{OF|_EihnoHtPP zN|Y_a_r7lzJu}DKzM}y;Leg;t>-$rUPR3m@mhShACZ|cy>ioX-bdB6Yt+t1^euxBt zP4%OuI>dN^>{rpzs@fk%=SgPM&#FGX(_~c0j!(Mn5j!I7VZ&JlT;SKp%$w&rSG|@$ zw4<9RhKSO%q3?*c++F*t#CATl6LT2DJ@35OA^ew3e*Fg?iC4C7@6<%YQ~-Yo9)Jhu zcb2be4|zBVu{+=nkb!euO_2n!uPs57f}Hv8QlQU>w;04^U|ygRXg2@8vbG#L2@XIb z{~1OnsdrITIDPOQnZ$K?bRywXJIWJn;z}C@LMUPX?oe>o+pKw!qP2<dY=l99el<A# z=D4QVwD&<2<7&W85VKfkRUyl?AqsZkbAv(T-zsVGI9QQ1{PS}*5?O33BXq1SfB*R0 zxY|EWEDE!J38DGC$9`FU9N8YF!I^OS8rDl&ChAkPdub&ik|GZy4LzOksx~W1LO1;^ zvPh!b9YF1i4QX<E5|sVhKa)@>PX*6yPiSl}Uqt)rtB5dDzA(qW@#hzgFryv(V~rip zEzE*9m@dcXs@tfQX*hBKJP(pvucByq;x`3n$S!GSZNI@mEv^fC51LGnAzp3PH=4ef zDBaN~QgF~U&(6mWuq2HQ_g`&`B>iJL|M>!t=poj9ZMQV)>nyVV0r+mdg0zkSnRdxT zu<a3mFEZiG2d(q+jN!PD$}F1a@o>`ik)Ia9TMV#ItmiHfL}aN+#|&*_5KIp&E%6k- zCw+mElcGq73uL?mFn5Ojxx3)2rk%29??h1-NT`xQirUbWo_r@7MJ6pyck}EhBq<$_ z58U_qBY!=N%1sNpL}+oqZ>56q*JLwM(ZEvkO<X&`T8Sb?r)kr~Pjox314BUd?e2pq zI`@X5hf{2gQ%PxKgYdZh@|XCdj0L^cv3?bA7=?a#WBJydcLqEJ^mAGgM+*Fw+$tft zpIJ!Yv!>DJQjz@LYn?43A%TY_2blwEpP<8mmhr@l;qyVxPk22PIL=&~go2e%Y>*Fd z9{6iUfODv8YDf;k;h@63g&}TozLj`_36$aeW2YHkZ0A4df%m^B+J6&Q8oW*-FWLl8 zWDigxBGbaTBa5?voDKW1;1>~YqAvquA3xwUWqt#-h`Z&Zhr|3@iOCL|B6J7|U8F+M z)Hnr+IxXX>4Sdm)sTYI4Kir89?TVIYZe5|Qpw9Mq566fm?=Y!HoNb6Hc-Sy=5WB<Z zCZmv;GjeY6;LtuqN(0eS<I@I9ipJ}FnuoDpmWbDrdm++Fll$0DP!NPZ3JXMjA9WLn zaM*yJ;7zn93iz8tEwR^X78ADYPp+};l8P?yL2Mus<bVLgC3=yE7cQxP|Co;_6#v~h zVe3v2rQ&B8s^aKN&-5PP1@i&8wTOpH>-;)%bNDzx+~2+A2oS_2kB=$>To&-*h!7`n zCkuGzD})=0@2ID+UC+UXNLmC0{2RO<c`;w2^gpsINm+1npxVdDN3t4>txsc@?V)nn z3o{ITXEi(C7ZX$yqkYIi(ZnDw*%_YSao0BCBOZ0lyT5$A=9~^;oKjEr$2R{N2ahK6 zc^7AtrHA8<ya#X^!g!4g7Bb%{Zm8IVm`HR40?IV3xH3TBRO|RO-l#HCIzc$lmy(r1 zYlmunn_I2*-*0TD{{KU4N9(>Vx2=O;dp+SY{aqx10-gdyfx^ZkM6=(s6gmN#32n71 zpqCnqOGjaYU=<)j*dT8*zbVR)0m8VwsOYM1&DXQmf;c3;<MhcyedDw;myE-bF>;w^ z<_EqPw+E7dL&DJ3@%MdD7al(!U`0Im`6`Hfh%=CAMN9ge^BPW`UHhw*A14;c%JS!l zhwZI72;<)#yf|r`ITwfi+Q+WbCm>wfh8%CbC-od2g4LP!Gy&zR$A?3LL&CWl6-in} zDxzG=TQ+{kgXBda*&I)PLGBrUcA`D~=l1P$v;Kn3<yME;>-1{^004duS^fX3gzR-9 zgn}r{6PVbT*iB;z0kY8*Ed(@i<HiEFp)v9^z)iT!dKq>@XDsb)^c{Qv-@pej);9Jg zK7jYySy)(2G3T7`<Zw7}L&}P2IVw>%48H44Ai`Bn4D)#mHiT^piTU-AV2^5r<>vk4 zvrf1)2{B2D9a||4AhQuVZB#h)2;7Jsgv@G$wa}P>fd&O@C77{;B`PWUUQp*iOdV$h zgXk(c%75riK@yzkV`EE`b_}V^7=uEgK9;FzyHnerF1-C<vK#oG?d}Dxd-L}G^~)fs z6xH~*;qxv%)rM_DxS)#HnL;ZpDMy%@?g?h)c>RKhT6ADU3&AZ~XISfP{<+)hLz(Ir NYj$#e{1jc?egiIJceMZj diff --git a/pykeg/web/static/images/keg/thumb/keg-srm14-0.png b/pykeg/web/static/images/keg/thumb/keg-srm14-0.png deleted file mode 100644 index 54e4b683e763c5a2f2ea4b464ef161d516b1619d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27587 zcmX6@WmH>D*G+=E7k76r?(PnS;_mM5UZg;AE5#{Npg06~DN@{vLvXh*&-<<XxOZ;W z%ALuavuB@ucAUDZ92znaG5`QTQ;?U|1OR~0TOa@t9(pl!uds$*U~ME+BmjVhWRw>( zIOv$dLS9n^0Pv>+074@HfG6mq&_e*givs{SHU$6#vj6~m*SvNOVdxj|=1OwXfcO7C zMP21-0DxVeg0zIT@5))1UlaYX*XDiOde7NUZkG?H_1FLjS9*r{T<JK$f1$rVGQ*DW z@6Whd?hQ1M9`GMXCnfLFc%QNex_v8I8g|<e`@Y0!sqleu*}W-?!YYnOMsdw2oaPQ_ zUC8J1%4)<HqV4luRbBnO*mF+?pB3ye-FfuprKh8(v)JX8>7s+ecSKu0NB+QlC*2%j zkMRlcE!4^s?~@FFygMvEGKs_|8GSh2*(N2hd5#a@Cbaf?5ok`K_&!h_4T6^sjl1T9 zmjxr5;ad@#5nG`w!F~*N0JmTJ@QN5Ky??}7hF_N<#E34joIkp#dmj`FsO)%~NjvR{ z&DEAW4|p$x*HOmxsh?;A)c}XXKF{`i4od?gZ4tP_j^89Oz_3X9WO2DQ-qU^hEs8i+ zP=R-U>ZKQ&7-nROu+)bfUJa&=OaS|Bk+_oWfm{W;dXP@-^%7AthJ$zi;9uX8__s3x z&_jc7VBSU3EEDB%Eo^oyz>Hg}TX;vC`C!IK957b8RZ+6l;fb0TYS8PLP9)M8n{HYw zvLRp!G!0M#s=-W~MGfktlZul+-{yvIQyi87veHz=0^xDB4-@hS&p{A5U*56m(16g@ z`o<S3@4wxUAG|#|sjySV*hFT{;Yyz*E=0Cg!7a1bjTCw+F$%(5fv0@IN2Nc{&}8}G zz^MM`{Wbuq2Kz@5#5yTI?hE)W(VD03@aF3ACInu?M%3e%S@Z0#1+j>+BGw0~(sw?% zD(9)C<4n9k2F401g=Ixm6*)Iq1;o$9W%ujC#lMw|murTePl#iNK8f|~N4mh60J|fv zRJQaZoRKarlQ(b?y*#x5zBe=dHkjZ~2y4t?EueGQ4b-&+uf8({r^VBdLOa;;CJkv4 zpI9N%9p_}{I=PnB@>TMgv-_jl(}w?UZjWxBJUfhbRFhR(l-7>0eFUX7lyQfpH6o>t zG+-6rq?q6oo5!<AbrLx%h?LDa=o&&4B)JIFl!ugumN#QBZAUD5EQMFBgeQ_Z66K_Z zr~||Zle3kFvS<{>z4^uPaWzFKY>-d_LSPMH$q?QM9;71KLDLMVgAB>9Pby(svns$) zD}PvR{eG^efG{7JIw}5W-3bWZ4~8o7k0Ua%C9%+X)rl4L)Q|M-U?+?-v#`|Fw>FLS z%_6@J()yz)c|Jv?w*?I3ley8ead0gsqRZq8jnEkIqfEXQ2grQgv8$lK1;WBqUd&jU z!wvZk*!sl$agEu&`yli=*U`nfzS-}~*`$M`lk=~}=1~X)eRn%nfoq6{E@Yx<63uR< zg7ZT7LS_pGd=9gjD0F!@1&I}V$n5E?bDM(~Yyxc=iM=64^a7&75M3l66}E;$7tL(m zsdOg9+u~8BsXW__;89RmSnKNjEx%AZ4D<i;&Rb}<VEIX6X66_5W}2$nA~$~&I#7XF zWvb1IoF>hg6wRTtda~T4@HI$d5|yR0j64prR8cnFI9WQDYV=&D4XLCuC5wX$Qs2=v z`FEeU_NR&2>y=flVfV-ab7tG`?y0-KbR8WXGz#HW`{5El+$``;<Q_=+T)w}c|BXoz zzWdXEqAu(S+PdktQ5OOvgD{E%2_DR9r0Txm%BYN;YDo8N+W7fJHSZ1!_>D8FZurMr z&^w!Xoe?A`jo&=Md{@Pn=7@jghA&C^A(wgS0W`%;MbzoHZ5?+FNVxQkB(hkrNvryk zo#V_Eu)g$EDQVp!Rr|Mu$Tp3h&#+997wtrCBoGlx<Jcr+-Z5^rhd(K9&LV`v)Xgp~ zI3&d$UJwsna(j&|Y6%M)R6#_yi`Ab``my$>$KI6;Tb|hPBYwd_-{ZAmn|t=ppR7Z> z4S2|HJr;C?j_KPip>ko<AStYeB{}p=4t^fcR<WFDq=tlJ7KA>mC${+vLC3Gg+Ce>v zKS|%vU}qpMZ7q11bj|Hxea-**tcFymcW0I>-x=fk2v>s!b_wm!$128twYm&gK%Xto z{)>m&<vd@{M4L^4se?tn0u#VcNQ94fBsh)RuXji{|93fXFM_JjXiy+yt>HlE1NX26 zuFQ>pkZyARR_(L#;A>q#N?OZ?EUrQo?T-~nnhzQ2-%^oa?uD_L9e1@8FvV5+TwBM7 zo&@pP^LE>83iq;Y3iclxZQ26&kUNBg2o{=ZvZY>-bunLHqNXX7MT27_!Nr(>a`HzG zY?<$Lekfxm2*DtfF~-z<PPFhDVwQUUQ`r0U0QS0o+v?WcsSbT1@5Hx05EZAamTaB5 zcNQZ+`Phxm{^uccCfmiM*aN}l>&n6M`i8QJ=ASf39-~&b?m4^XrigATY*Mip;E%b1 zyAc(hHdWv83g^bn9r+Hc*abBU8!KKj&>98cplW%Lt<GSNI%?VXcc1QHx^Q=tzVP4W zx$u-vp>Mo{UL8kvqK8UZG#jV~@db3j0yg77Ghhe&2ftCZ;Fz$UD7d|JhFngB1SJwN zFNBuOXF$2Jo7k{w!H$;?+3tgT;XsAX`WOGkhxF|6MO>+}x6G*U{XR+Gw`}@HzMe<s zyny{t$LKEPK(YtW2So0^=pMQ$w{V$FtB@f9>kH$wk8?ALTov^xS7ex_Q!|Lfa19mG z#Syb+$b1kgRCP$7tolYp6$-YD@J00bZn4;-L{iO9pkNGOWL5xF<m!AqP}#^EZ^}<{ znSI^~#!(X;U8W~Hh$`>ye=5CBlq(V33<DLyza@-XURA2Lj9ZXDmb2et25VF<fVP^x zZ2N@0qdwF%T>A5!ej$=7U)@{!+2U~z;{uHhlkpYSmOm#L0Ll-03-s_Tp449zdAlV6 zfFXX#B1r&)>*d<@%T(P9)xngg3e6wb>Tho@U>m;LFTZt@?;e)w)(N<0k7A}N!YkZy zeaSC8z^mFBi=9WTFAoS}6FWPa5QeohcuYZ`G0?+t8|mK|`1$&-w%#b4!he-6K~V?Y z_pBfP)`?dY!yY1Su~WW$Tya(@YKGziwT(Iq_GKeOPiVbzFUv<y{~+g{1D(#}-WHGN zE{yv6&TxtkTj5qy#&W)Aqj3HW6YPNWyvv^-Fz<k<F;c<z)bEilA&(x?*k8hW5MD@G zZZe4R?sAY#>kmgv0Kr6I<iVS2mr@w7(iY_6)If0!V)d<RcE`qUA-6!ha0TqY?1cxT zF2UL7fsY=B0wEvybcFp$9x(e3w6}Lz@j&cI%D3$);fQq#PH%aSctS<0>p@~JFJbqt z2h1kW1EZcUv|*dihk+zEvIf{7k9+yArDq6d^8q;(%G;EGR{r|qIn#BYieZskDw0m- zO=~J9h8)E6zFyK=KQhQ~x!+GfV2*#~DAj%Cf?|evXn{szl^k@Vq1y9~il_z(fos+I z(!HBd_()S1+@ITamLwFB8s|QJe!yzE@wHNI=WtZ3^YI@eBxG*Y_eH62k2vH;;p1Z6 z58sFvqb}r!6NV67NAjkx28@8b?1KpKE2N7ba?#%Mis|xJeBaROPJ>pG{q>-_a=0cw zXFoSFI`Bj(WWbk)D*k(U=(~ccl;EWC7o*%Fxq6K+_Z&uK!eHbuQAPam(`A!?FOTVu zs9f)Th~t2hrHp_cv=@_da?!?RY2M(|Me@BHYI67mC?GOZy+5ohFehw2jp6fq4d?UL z1cipezn7MkEnOWGZQl2XgbP6ecncrbO%5K*yCd+W1IaHwZf%k%%NPgq;P;(HQ=W7a z0nXjona8So&htB8iwmvItnhes7krw<5b{6sL$d9Ax%--{GyS%g%boH_gHiSz0OZdL zA;OJ^a~OpZjyP{z7n_yG$wU^xV1jEpiwPLnNoMUyMjesb5BK%qBj2U}h<~rZA9Ndj z^AcQclXg?1BBWqpCec~=oXB}kU_qvR69k@ydB=)nwsjbF`ym1!D4|jC1Zg3JK)8ey z7gLzVNB@50KXT6t>vB8EzrTVMzF`ilt;gl`p?rqhK>zr4Ue>-8z6jae28<Im<Q=f~ z+>UT`<8QmeKhW%2-&7vOWE@SXWFZq-oylIdEy@X|$MPgAn2CK3E!5yK7V!?pX<6qr zqMteWb7UQIWDwRWg**Jwn0;<g^7m%V$8@td`dzG&b)#sZ&!>(~7cW|yR=dZgwG?6~ zPvc8g9h35~y!%zLfx0O^MqTc4XOn0jKER_r>D#d}22N7eBib31cCO2*<?Z~35rYSX zm(8J{?M-&jRDa?EQZTYd9-TBCH4F);4SE{`0yeLezU2Q@`AQ>kx=%O_3akmU4|+=F zUM|@Ht`W;{x;&<m?}qX9l(cTiG1eSk1Eu^XuXUnQ;nw8S*Xt7^<}Vh+UPMG+S9{>c zUJ)_4k^vMxO(Ic<CEF?65Y=nZTq`W);>6oQTh3&DjuF)s{4wmVti$8X9B2d|pD7+_ zgZ%O^x4TE9wkM1hhi;0#U(Q}Jl|zDQcehi{gI-Y_4ci86ZT0q4hAh5XDsyEoE%@3a zt8yl6H8Laawn721bnXm_frn@x_}!k@*Iug@-HvOYp+iE5BZjmeTAxdP@Pl$chyK(d zSI9Y}C$kJCfuY+(jY3<rD<4^02u?iC5?P-)#s7NRaKfapO5Isyws)4xjf6W}8Q$Cn z?K_fI<;q1S)38QthtXHdzFm_ymiN1s;4d`U|CEjOV+aGSY#hxVM>IB`!wMBL35M;= zehK1hDVJ|_XdK=?-yooHKmR$u6o~`5Wwo{<uU<bkrH?xtx*~=mm!YFo>`N6D9~<l< zsOuz=361v6auMs*Nyom_hsotCr~ZwD1Gh*=eqqjhSP!{NCOCtbCsM|nf74Ck_+&^0 z@r>I+cOxmk3sJ@`Rr1W66#Yum`=k1rE{$__v6gFX**f5wi2S|zJ*IWe%qIXxf^Lcb zv9l@qLX~&ykHxS)v~<wBn>2TLF0;>Mp60?};10Hf^O}_W{yRRppArE2#}(oX?+?Cv zG->}fZI7&>qnk{&`&Y=Mx0yK;E0sL?R8`8v@9>p;$AULk4@wW^xY=Lo0Aj^Moi?vK zkAbPGxHA8x_I@pbapC)KA=oH=#?_($f(~FTQU5{kdCS9!O)v(f`N@jTDjyZ{3w)mo z3{Ni%|66>F`UVTtn#a4tAsT$!@ZHvib%oU+FK$L^0THW$0TXbA5db1#!Bar)QKA!n z1tW`nO0bb62rINcziIE>?``=Hv8ODByFYK$0YfxoJ`(-Dwo5MrzNN=@BDWGhXrxs1 zv<~#`K)L$u9{=RTZ$a$1!@H+%Vo_dLj|)w-Ch);{d+up^mm4u+=?k}_={;3dC~|+3 zE|2*-+Z66#iszH{ZL3`F1YY$axgWHI;J~7JV~`c!pZPh*DuDb98k~=^Z3khCmt%_} zBYZs%`qJOUqSm>dT?(Or$coFK8x(S}&8>!VC5Caza~qr<BVOV->RK}NJQ{yIqqB9+ z@N}~?rV)Hi{!aeIxIchgAPvuhe2g97lE$#}yz$tdC+ro_-5{rxGmJoCEQ^%USg!8U zQIQWSqQrwwFTofCN&~MNbaLFs=Fe{Zh66&r-YVhyy&au<l`uT1HK@<OXT(mw%ojc@ zt*+|TX*;_<x@g6i*<<7Ku6(6-^*0u{v@-Rtn+@kNf169rlhBb#;f*AhxjhIy*V8e+ z-@3p4M*fi6&Zn_jo{^4krY1S{nt0^lW!y!7vYiGWV*n60JtWme<S2n}Osx9lz4Kw? z`VHgKCHPuT;CWz|G_nx;UyQnFi^uKp0h~a{(>Ax{rIHu~KSc0o4uU|X)2}D?id68h zf<IeN{zyfC-zIKHsr=jT5Q<`>5K_4Zzw}$^36LH9A|*f5H~Y^GcldMFfbEr{_9lF% zf(`<<Oy^y1%hg8V6Ch$x#v$9muQ1|R)zQDlaSe|}k~IgmcBrL}X|2f97B19Ruvm!V z4g#Ae!A%lQuev@eMgD^Euv0EN<<osN?C4@BRCQ=4p_=Krq@S#aswVb!8`Mm-s_^NL zRXT>w@8KxTa!pyC5>y-4e@kv;fx{TrLFa*dC<zISZ=o=jRfO^q#i#&ezScV|ryt(P zp>!mtsKzEnsLL_e-S6S>q{zZCR~2S{w+!dLo6l|UUtIP^p`;4G;E65wB$F^X`gg2j zz&XR}zK{^R^E2!6M`Olvm6kK6ziOR~uI+=LJ`iR(<JT_XrA4{GRqO}glr2(+8i#;W zn|Ie<$MihjPsslbu$IS4mraDM%WLGL#~wixVVk=?mb^*Ms{#REveCzsx2PVDNd~^0 zXnc;@LDP|;+WtrC<FRwsL740f1y61=$oCXyG_ulM_YY!-nlAwP_%L?Ii|m%x@9uYo zq(^(fh?eab#nc3|XbM`%bOaI7eMLRsoh$6uU@@IOUbK-ef>Yjc{m;VFRLOfjLWNqt z(4cRg0c_~Eo?k}fTGhdP$Aq7kWlUI5B&=IKnL9&MY_tZ;@yV6kOJR4?w069FwWrV( zr@&je4O3~^4tHPH`vbb{FfQd1pVjT1f&NtF%d#lSI4RBf13{?i@-{-dXxvea;Z$}u zGh4wBTj2N954*<zHdSMgJL3Y}Sg;Tb)0}`PP9VZCPk^Na>jA6(>v)hJ9+7i3tnEQC zK!u@Ry`1Cv{2*$2PX<-2qE$epC}|_si#KUv{EVv`C4`k%#Dx4@gkkb9bN9|9!_<EM zEy9v1Kgh1^<!7&H3$LWFFC2hO>M;FCaiTsZJYxAkf7bX?i)5RMP0wbqyeC(fDK^6O znGOX9{un!@u-Dp{ygR!AmS05^&o}GNj@PrP6d6qU0Z@!za|;tNJ-uWR_QsNL;#qcM z8blj7DZ*+CS3AQ1Euk&53-w^EPJ6<h74+CI2Uw+$+v2;^Xa1@i7ySOSjRzni8-O&w zsxK6wXj5mk9m2TM(GTlku>>FAu=krWyYh*u)18D$ibe87>QAoXcgu~H2lz8);}2qa zPvy(zXeup)@JoZlt7~;yWAC4*lzu-M@>YYY)Wa`61mfvTU-6{&^%2CN1cqt2leNm| z`rQdsjB=|h?kQEe-rHnbMx!ES1B^efD#pkH(ns6^_YwhCfe#xAF3}Pdt;WOBrG&ZP zna;my;InxK!Dn;a*o<PU!G5RTeiJN8%8OxIU_2*{5yV@WJi>z}DVXK(Jj^yI;0p*A zGq#q=I7~n1tza7w^^1p3^bP%h`ag;vnrb2lNAJ(>n5UU#kg?95JA=$zI`QWU)73JV z1q4_~Ois*8ZZ_aixpvPpThMrKjzOf?<p=+slK3J2v>OU@z_SPzR>cYMZa?vv4D!b# zQP)l&Mg_sP6p%HXR=44JvKs&F4d89~19K!r`PdGh>CNX&q{#^Ta^qFjgn*4KW!HsD zd1HPS6;Z^LTk6{qcjQG-ks%NE>pO#!{S$<%tCL!`x$DKeCn^{^<q?%Wo|55Jh@U~< zJ7-6Jbkq6GY@Q0X?z~2DmHQ}Hy_5(0VO?`{MiGcfg=C0nvyUt1gU-2HQ1Jtl05={l zGVN%kaDrVLa7U~$Zp%h(E$B~1l}B{AE%N><Bci`E!BhrDn$vNg%ZT`G5<eVRoElH< zJL{3^X=VNzBLa67AaGY?CtqJ%$6Nx?M6TW!lRR(5imWH~w1pLqGaT}9jQ-lv8cp-r zjNZJ5EcH2`rG(Jp^gcMTmnK@_D@QhsG9AuPTAWDIa8%D9-w9hDs_aCCA)K$46P8@P z%5--ITn!!fWdSerbiFi4_SlIH9nU$Qe$L)a<6c_8?OKS(N-FvFIjr=NoMfH_F4o}P zE|bO+De!r*80SBoQ853e1C)=x?wko#?pjt$SI<g^k4)H=7LR7mybnFicNofW)bxa8 zQ~6C$zs=(pPf8WR4gcU9&3qB%-TwLwIZPKh6#gMsI3LP2mA;XmZYA%G)H-sH4Sb>_ zOOi#6q4xInUS3`{3$V#Ob9!!R?3$dK`Y0qMgzDo%0OkE8=up^A9JZj_<xCsRvixeQ zEV;wg;IHJI|6pu(S6Ah`0ca`q@HEzfE#b>oCFH7C7I@uJzjF%Xe@9fH$4Bo9E({J4 z51Fyy_+)BkmO3bN;9{3L7zOtM{{tcF6DoYr(>mF@a}0kDa)SIR{W6LWsem#|n1f2k z52tzPe*5cF+SXKC%VjegHJ}O*auY#*39N1BW=1=@81If{R2v%gj5XgnI66AlcQp@A zO?i(kQPZV)dVf@CR~22CrryfLUQ-bq(BCYa{N-Ji(Z@MvvvJz8zT3mEWV6?{`IhU9 z3tEn*)Sp(KjII>WSi0%|LzAd+AUxVbd-$fC_Af{N_h73AtpYY(TEimWo8s`1Qg(2& zynAt~9Y#cNXjGKUw{PD*=^Jg29Ao`WBC~QjV~|TGGqbYF_<5Fv1l_#a*P=MnFC6C< zjE%sAGaVq5;9IBW6P}Vij#^H*+T>0;=q<Opr$X6CtM?-adde+tbPhqEkJ@Gh8#DLv z|Gt|KZcZdFKX$8IR9e_#TQ@E=-VCm2TqK`4K|8#AJ`xOh#+p{GlPjO2hTNs7;>QUM z9GR4v+i=_9sw{Z;;8Q4w-EcN96xTn>f@>>D{$_KGyiH?8>aUg)hqVfUkdE3KRubuO z=4tNIEYsZHdjFid2orIUp%bF{5Pq56b@mq};)IUWxSU3V>n(YRN<s4Fw@Ry|ahN_k zhT@)238>%n^ab1#7cA%n++S#z9q2z9h$x1bh4Dkm&bU;QweRJKk7kenI#$;!I&3`` zEcjERlThMf^*Sr?o3ECW2=Y~#E^3myF}r#0tiHZgzDG=c;ScS%Z<+cA24;4C*@LB4 zA3kIrva`*Sv&@`9*X;kO=SPzyL6s8gIN4ccIxATE7cNeNE=o;Xh&TYj=&#C(;r8MT z;ak#ByNh*6M{c-0<i^A4A+R44i>mCd^EQ`2Jwk!*4n<~{bN3I&d&(g+;8*{rUjJ%q z8~wWvpPNhU=;YJ@O$CT+<{u8;@!vk7<8!f5(gXSEU2mX-YB_%Ymk+9I-uU$At+~x< zEe%cn1G<i4>#i`f#aIAP7R@$F&$|#bL@jp5XopJ7rcO0*aeO*hev+Bhw@&PgVSP)k zakD%lsB7Q-kVGytHhYB(rASaYSa6*Tdl?F6AKI<V2eWP};yJ&yrKOMZ>iF??)#(=q z*L{y(TRo3(lI%IDwQ=%cZ(mWGdDMrCtGPk51+rEw9onSJQYl+!9#oXF9GmBtXIGKS zaHe|3J_X5TS^n<A(H|+WtEtaQl!IpX^2Ua_hegEgZM9){VD`DFPk~Y<TVrFx)YKha z$u?WZDpb#}^|(Bp3%su`EMGluZ1)adg=&bOiS?9(XgVgHshhO`+Nj!TG{V>UE)?cs za9#hC<8eqt{Gd^w+Ti~}GhQu6$ig~zh7r4q9^o9bxX~`p{sG&9kY|)o$YSRR)mbqS z61~2!M_Zk>=46doOpm^6^C*>?oI<*V6fJ3$6+!u;ZawFCjEu{y-Uwe=A|tIKO%LHD zxDoi(evF9HTd_TE)6&}1Hg4HE4xM)HiC(Msk+2?H-tO@r{!*)ZT>eiqHqmz${KAlE zeu(m9S+?t#w>q@ET^PsS{syhu^6LUwTQ<Dd9q82>>N^!%7Nuy$xYeYr{)+M_NQVDI zH5MTN@!bigSaYtjs0ATD?AYTKL{svYg%7`!F13BOO=E~ONsge?ne7^ppj|JR&@8u* zN=aa@Ch56F&s`%J+NE42UTk&W_L~xUg`F0=<<FcJQR5=ad~PnCz;MC?;7$BF^7MN? z5*uB|=q%ofqO-aY7~<O2;M_x;44#q(=^~<)$#?XDNbe2DkGOO;;P~5)loHHI*rwHk zDSw94<q?PLO`FKW@SFYgRG4J4F;j0@JUEQ|%<sRW3-OzbK=t|ka60@3xB0NEmeC&* zT-Y3I(Ds2snow#ezZPd>w!Z4*07WyxbT=6OOFx)xsKR-cm7`Y3b*_gAhe|sdgMI2J zehZfuoJO#<D=V06QBJ$G@+2$#9LABRmq6XBzNv5aSYvT-WviG^6dDeZ@OBg`v6ML+ zqlQhHpiaUSnXbKvC0;B`1D|(e#COb7y8Lh4)o*^HdJOX)zn8h}o7M+)p|m&wRp`@P zB|ORpp=20y=U;nMBRgEh7_93QQDrjM^{*+_{PJ;?WTyHe)j8bu(LZzCA>vd2G;zfz zpDGv&+Vy{Rr9~G~nmuaa**R5HL0RyYf2&qb^IywgIhX#_4!vo;C_8Li_+!p8Vyvv~ z*m2fKM_p8D9Au<dwhHLsykrqTQQ31a`Ea}@2%8qj3SG!2P0!=-YLB(*a#f)ie^wuF zH0z{#!GMkCVI?L9i36WmfqRdkG6o7<RzW0~#I5Raub}chLkZw-J*DDQk@88!kxTS2 zZ#xF%+%l)?BHKm)V5V&Xm`iO_5Tq4xpg5T(`7wwRg!#*gkt^7@F0`JyNFg^Ut$3-c z;8=sZf9mxMn2yOXg~!I9ah*|2GAp&hYTg^Degs6g;$xfgW4jblF?H?%10$1P2zyL- z)pB(i8LVX*k<*IQnVDbZrA6c^)}p^3ajFeZd>!#33Qgy&V2ZJs++9`ti3j+?`(KY# zEs;1&-$oGs$CW(?D!%+~zw6}{oQ+`NHZP0oRUtMeRb$zBrjqnebnQJa&vE(}Z0Nu8 z@6+`YkANQuE)ncA5kWI|tggxJ)t>U9J&!S>I!Hz@t8?$FtMlz#lMs(GtV|;T=4{wH z7;N`??20D3mlScQ0nI#FZgX8YI*;8`>;m3<ofrX^4twv6gW!T}W`6zYoZ>;hBxc(m z-FfyMJ$^kC>zUk;J%eP-#KhC{Z9X>W6doeDE+C5apEhNM5$*rMqS7-h?Pt5XJ1%xY zRP(w&{Ge}ER6A;0W;qh0|17mta(x_#(CeJ9^!+0&-oig`sr*~bmK}eg$DUG95l~_B z)X((1Jr#o@Q0ryY3sZ(Ym|QV41UNcgfP%w_|G6UEM($xxr`Z<c@ASqT?}Q;EOcRLz zmmbS7n)sO^DlP?@k*j$pEw|bUeS&_;>^=XYU!{^7vfs~3Nmnw(NsQ^oj;(K)Awc3D z3Pk&f<am2+<cOea)ih9g{LzH9x1K=zZEb%H3AFJ^B;Jc9y|mp-p0jDAt*sC^#OQl+ z;s~kwxDZK;vNH_4$35Q4C08+^!gE4g7e=fSCu%bTgIbZN%iZQ+ZP|H=9Dw_kQ+g)m z+a4Rw6^@J~^2>pY*}sn;U_GO+uzY2U&y0P0@liDyafuZF$iB{r|C68W0;DjVK2%h= zDrJ+Srvff2-J>`936?e=vbJH0Dr%#@!_Y=s9sl!`ih;WZb91kaNNyW|1?~1HGqJxF zWqG1Mn3eDwHFg+W+EkMe;DVgcfRd|l;`uh8%3-=OA!86e_Nu_TG24RjubNYA##c-_ zLeKfx0>y{X#2SdpM-ql%9^3=kgXm?aHcQ--7HkjZvQniwZ|E^ftJR<;EkG+~TY3`} zlKM&@&Ygg(QOrs(GP2*k6i&H6XyTGGGS63nmtU!F;i|e`dTCTUuHGX0#bH7ZZ32nU znW$C~NTG}AYTT2-^;-{UTM4iYhg{jr0w@k?e}?oQKdZ9d=lCBPzK1cBOJQz)MUg7s zmo`o!|B0x51?CBT{dXhO%N@i7q~Ml<gTfj&DnB#-S-A)NFaDl;mF`plwQOFuyPBz} z<#rMo7T=y%Pp@^X#4{aRvZz2jql+E2qA!?wbAnM%_OhH#8Njo7fML}fygh_;q$nfa zqThbec=2jrU$no)0fjCccHV?Nf*CPrVbjE@#b%$MV^p0IsWAqY=`hE3t|s8i<67%~ z0)eHa{p2*h(i$J@qM3RRBPBn(v%w<yR?D9+u&q(PQy{b(6QuX^3@v=g9yZeQ+m<!k zXjoeM=J2O7c-ImQ9P-c;1Wfx95f3x~<5X6Z%|}K7uny#Sh-py9evH8}wwQKO^j%|h z3i(~WbkI|ztqj&HPq#1m-67-RzD2Ey>6gsBF_0s{a3Gg2<B75tJe_TI&T5g3%-vx# z9TSc!s$TIA>t@Jz|M9;1>~9yFJxAl!ViXa)-C*Orm8`<^mz_1hf5`6Zrql2=^Xw&7 zllrGKEt_ZRla_|q+Wyi$<xpLXBcmlI1Y?@sAauIDPcAQ@`9*`C16^Cl*7(zQ*J0vU z5_;#)4dOo&L6ILHYdm4wT10YvHXo96Z1nWHsa)`WOqs2XJ(cAh2P;(I!rux%MX~-7 zMw93t<ZC53%q<JzVh*BE8FkVKL#gcNZ2J44R+&K*>T<2K{JZ(B&@ZK`S5cl@xDS<y zGavtaT2$O1rxf%C+Qirr8|Dp?bT~j6R4STAKC=;}D_qD7fC#bTZtqaibddE$!iv<K zl|YLu%na>)&#^j=R0owv*(Q_QUbAEDU4QZXBKWQ0c3wl;`}Vq(%)SK5)_;lU_J2_( zO@jkYG#InE1?KdGyNi%EZh&jxc|>BWQvI5GU+eCjJHupCvJg7&>L1(u-6zx|HiC6T z#~CJ{Ch3jI__%hW|5P3CrG3aX`RP4<Op~2j1#<sHJ3v~j*Jhx}6w(wA)q{x!++GRU z#K=;rTF%X_A6UXU0}$$Q6p2w|+6qK&n~I3!mRbI-_1;aB9lV8N>b-;Zc=mp`Xup^L z1W`~U73k7eU)D~O!Z94~dwkfMR6KrND0UvmU607XnDjT853F7ha}n!IufZ|D3zx;c z$hFm>WYq!vr$eLHFl{O8_}1?n1bS5jsf$Fts5&D$({(Nr9#Qsc%)(z-dy&(f@G7s{ zOxg~=Ve`i^&3%+Yh9~XyVhYnPb-;k){ON+97WLUZ4I<Ixi<!};*C#kqJ?E*!(frn+ zi)Eq@@DiwD2RwOfB^l=TiftWISP56t$e+xN$R`y)hc(p%pvfRq>nbC9gp8a<7ej?c zFmd6L^_A1HEQXyp7xOr3Ow@P^o)>!5F>*M#&Dh-?J})%tm;D4mOW;piCA`35?FRk) zB^o1{kzZ9K;-!6b;<o*<-~J<xQfNiE_ho^`?<pel4&(|b$_B-FdS=$hPJ@Jp#x<+? z%Msjd_~EF+R^4>uvG%MIvUfGv-&q`}5{<UK=U`jIDvti0+7;JIz0lIOV2jRG@kIpa z+rLC;Ifl*MsTbN&sLeQ5_}Z4d38}k$pVIyjzD^A0otMV>tZ;@4n3*v4B<$-7#?&+w zQ`aO9(=7)oJzzm7d?ezU7b-dR6hQ+jEtwyu7JAT(%cinBBvtJ5e$)P!xe+`ZyL)0e zp@um#!LV`u6nID%<tG)_w?=htZH68avh#@1DIeEd{U>%|5z0PJ9}g^l^e<(XtkNV! zhq`hos5g)HhCA-@;PZz2&%VaYqO7xDKC{^TP4sW0lPLAV{FTa7ZQ@#2@@!uFDiNlX z6a4fYMZDrBT08xZt{@MH0#}PYF97BlZ2UN(@!6@fok5KJm%-k=N5gA(NnI62ps=`6 zfuvEBEcZo0Q;+xx3&X`}0c+svFoyU9IH5_O8|prxkY;<J9pN`#@f(LPD{(9U31h0( zeu=a;DgHNclQv&@F41Hvj@hotjYJ=$VOtxVnbS#@hCoe1NdjKWXl<xi2Z<A{P4$^b zx(Yb;f6oyKQRT1yoTy#7K4n|$F3?IBPOQT46E3tby3lKZl>)Dt!n<*0^@mu_oxW96 zvv0?5jah4B49yNWaZ(N%;v0ih??US0AI4L=nDby3oxNi<7lkM!9PNneCmMAtzWA+` z@hE2$MN%Y~gdFW6?St1&RK}KJKTiqOqf=2k;^xnQc?~%2-<arm`r^0Eui<jSlTAFU z@gWdVHRMi%P~?N7LFTzpO!vfRa^l<UimDJB5aj{ni@tVnWj1^>lzw8y`cltARZT{_ z!Oa_pFwJ1&Yb3B#IN{k$f@#X*UlsRZ5DkfHj%JMSev1DD33z(qI0?UyiT1vU+JjPk z@6?Gob8%)H6M&a=CwLb4k)$=a>0jfdu>==h{lFU0%+skptt4grSD9`3XwBt<vGW4_ zro?#F3SJ=599cd+q%>4^_CdjE;oWY#tmr)G-*hMu)EEhvNDMew1U1IQQlwI7NdG`) zBA^wM!z+<Y$M{tVbkUwW$?-7S&I#ARJjekJ*(&gmHys%5x3Zy4Q)7MC4q(Vj%U>-C zA)~Y-%blJqET>g>_D(9~JG&Z77O~YwsesI{VkXJC1s-)_6mIX52i*Yt-}j_`Vgt^D z9#AWefMVz`cw4-|L>5r7hLbKEYX8&F#^bna@laW)C+>wi!;w=o$F)%Q*T%NskmWo! zT(lDm2=XsjUp#FOP_CmNdIMI9XSJU%0O4)L(Pj*qWo*`_N07T#aA{q>f7++EnqW|z zj$-)A7$NtSEBFb&^fAxlo<PYm<Y1A?{9vt2Va~c|u7sk-gzT39SFE&dtdb?1|C3xW z8P+i8P*w`b17Ix3`s<5Gn2FHqMfUoz0S&By#cf{j11cD6s}3dv=@TRG$9R6XRU^-5 z7-g>BELaQFoVUFL#@)&WEkF9()=GuCa#STcj$dLUHkT98u7qA=A$tK)+%X!j!h-|x z9Z79%WyehCUYL~}ajmkE+U1u{ut>#M@&3}l)Wag5E2lB;G8Lz1<s$hlm+z(*b#l7m zGFTe82g9v6jc$8fCz<Tpw_x-OjIj3)pIj0!ZKDA4*&)COzb!GKxtPjOtGzNzzjkM5 zccZ+pY2t}!raNO8VKby4zzDQhws-);%p<cqiA(z^2hU8=j<<?|FelIo)AK=s=X?9K zHbxggZE~wsG_m7csez<|x=L;iAOt`49p3Y0NzOTt(zQPqz<3Sw5&$k7wg}ddk^W?8 zY~^(Zo9~=lF$eALe&<)!89i!~#=;)F5#pr(7T~$VphH=r?UZ<x4J((?G(m_Lae#OX zdsu$(wH>K!QKuIWH|nUDJX%_jqvStHJ34+(n`gD8Ulp`s!L0)K9(*S>c2ZNhQm2)o zvtnN@Y-`YXlZ6uADL3o!8GrO7eLJOmC39h-=5KV)nx|F?K{L_%!WpODZ@K?>Z7T3~ z!=}+Zaw=fUcC6Nzw1a(H6Evh~QdjdiFYwiaP`54Er((OiJ^N8YJ*7#d9<LE$eEwo$ zId@%?K?3?ex4v%ZHTd61PmR=)BK~8t`gVV}Kz3h)R#SpL_yb)?h18F(tM=&jCC8%{ zt+s9N3pQ<~MK`8NPvXeRzE;fIyo8=N=xM4ud^b7Tj!_U-CSFwnD^}*yX8uL#K?@=M zkheuI3v-Tp+GT7t{<PcUnts8{ekQcj*b=k}*4UDwAQyWbA@nG50P=MM>e;Vu5nWvC zWZfoCHs72#UZgM@S_31uCO&Xk;O!v(h3Bkb<h)3?J0a{!Nowz$yQXQFzGih~)oV~c zBSHE!KM`?s-Q){*a<d^!Y}$UyWe!(4+8MTE%haZsP6ew)N7p5$lSI>XP}ZD?Hs$9p zqEuZe?m8YX&GEhFhAQcXddh`X8a+qi$LY+eXUE!I{Bzq`!T-1ZlF6Pk17DNhz%F;I z>LTcdOV6!AeluT^Vd@RGnAN|PS0AFbtOfJA_}v$pn)!JhFQF6%{ZL0o_M|eK$zI^S zHPnn#s$@|?$(9m6j;TckblYuF*uv<A`L1~%*wGveY7#mNXlmG!qMNz=2>9!b%S`d@ z*=-47C!B~Y%n>z*;0Yz6^Ug_ZpzkXF9A5xPB9v0rHQ>360ss^z2tjb+mByioI!#Ot z-;^#mnC(`j^^suZI`K_>P?4V^Q^TmoqF?ZzdmS=<>f{@`)<Xm6{jrhgM`M~H{;_nM zkJ(CH(oi}jY=Ssr>D&>v3~k{riX<*K7%d^#P<Je|^jBQ0|Aebd6W^(BVH?@;?IM1A zZd~{#jX_+p`eD8^PA#wRL{}-ky~_)^aVVR#3-K>+X}l?XlUvg-r6ZPz*!(zj{Aw+b z!Z|uR58>zpkLC)N&WbAG+q1e~U4D~`WVOXLJ!^p+0mUC40DuR&F@Y_%dUh9&SFXYr zy`G8tuIFKXulpeA3QztFUjGVMg~$^LkrA6U;FlMO1sG|vH!ElaEc05pVulj-sU;kO zN664B)8bM8Q6t*-GFLrvBhxIfY;oD6qaXsd2Bs+r0G`+x1$g4L$bXaW@v-8RolYk7 zGrin`3xsYYM|!_svmXi%xbbVADNjrRz3G0SoAz9Lt|T>aD}Sx`I%C>=93#KZPzwQB zV4DB}@me3uQU9H&{KN!Q2~+l+gWk=&RWPT-o^heh4wHX}aauLCq)=lvrjOu&TV^W` z&Y(VjJtA@{!_Jy}a`Rv<+Pxp8_^e0f9FIsL{4b~#iSLxpOG5d)lq))}AzaGv;1eaP zd?~sy@y__1UK`GOq-u_$OOfVXx&3iQ%XZHMPGQDzG!Ug{6jsB#0NJqoU_gVH1_Pn& zc3Lvbo-4Tu4W^7zBGHUT!T0J4y~Be3<scfE7D<zxqC7;ChSYz?T5ITA;GoA=Y#+G4 z2^WlKHV=X;Leo`Fg7f9Rm=4oxzdz;YoVqhGxQVn`r*LL)MZR$(<T&RzH*|;3El?x1 z)JKBwK&Uoe^tSA1jJxfW#nR=FD{HclDqvJbqo|(4`{g)w1@O!GlpaxxLBq8SCG?Fq z#)ngWg{53d2W<5t)jc@C(PwogH=Jb9J7@heJdY_e4*(GNoxO@v4B;hcE9s@ZE4#WB zDs{*1sG`45ic?oj8HA!*eg*2%z;r0vbdx+eC?B({yVQTBt*N<I=F^w?R9E#Qv*O@B zTl-k)GV1Im#)oyRKQWt;>(<KGb;}lce=Jx|W5Cr1Y8KZuLJ3BAAa06$ET#o*H6)9U zK^>Pxhc1ZjXxlC&oj3@172@S{dk7(?5o_)TA~b1kNw~~4Kn^XQY|iMxB-dwq1Qq;u z%Md!wC>gQGJ_;YK6zj#=>l=SF&Xh)ehR>*$S0hoQ%;)9=O<Psv6g7eNzX26}HhRrU zwWca1lC!8KYTd2FV#!xB0!MA)c`JJwV~K+@5)kvEBR>+E!9fWP>Ab?>frgnls)9}B z)>e^hD&h5J0QO!YyN2}I(FHUR!`XwbOfpyCYhd2lFT|*XZHyKD0>JagK!7fy@Xbif zLPfCQRyCrH`kT_0Wr2JV)Le6w%A3fEr&@Q!4yXHsRVUD98uCm*77s3@Fqjdt=XkwY z8DNMrBiBa2cl@EMt^TT9$l8xL;IW05c@+KaS@u)R#{6<7QldUX-;U;vd7I?>4%@mz ziTI?*y3!f)kaHb*pHU$EUJodk+|09t`aRJ83pBBp<lY#ewq^kjvIm(+Zt$q&$b`l@ z3i-mwbb0R`uCeM@Nr?jqkp1x`Uzq^*%nzkh6(#^zxe4&-AoYBjLG>Y6x)(?QI}?7( zVmx(Xz>xZh#x%WZgV6V*CI_RIHKN45utUW$?km1DsBHS~PspQyRb-LZ9qn(`<2HV! zH`PhfRO3c5xGPR+JK}4p&#nN`D9n&B8iB)p(pU8F&h`>h*QW0*z8&An3NDY%Nwzc5 z-19C^nijTmg&PIoDnEbIDrHgzPH{J)MhR<fiUmZ8O{jQi_nk-B5pL9i4K&0PpdKGE zX+7ftr=^#vqw#qgPdiVwb=zrbyg83yjUdv=%J#MQw`nU>8;cS~<&QTktYXu*-P6lA zFh$GfMKrsCc1uMgzyGW3LP5R1LH*hoLtR}#%fo|xU{Bd<7kKS0-*`};M$r06@txZ4 z^#aeTwyV8XIVq3d(nNRe-^wKI{&<y&WM=XiP1>S-5XD6wDD`k_!h{Fy{%!xHZ^uJV z>{_nEr;gx_eeV+gIvpaEJ;vP{@h~1NWc9=mnNx@+XdiO)WAs&gRZ;&XHZEe%mKj?9 zPH;EQFZU-A_%>A7-;?_MowBa)+o0A_mB8P{CYsL1D3+AMn7pV>L4wAEdi05;*GdMi znv!Hu)z?Sxj6mti7b$4H7>3V;*Q3PL)Y@sWY{sq%F2iN&;uvpl>>!3<C@(jEh-T*L zyn+1M=raIKKOO|U8>v<um#lQ>mUmdP^NHB)*|8%O1+HB{l^X!J3ZUrFa=c%n7C&gC zwJkEf;LP%>8j|#x75x(*6($p#?XI;PePK14<(bdD(ny2M@sG548=ep}Zl=##V`QZ9 zJBsRctSWee-&EhkbK$^=E&E)V#GrAT-x2;NDtXFbRS0Ld?Wn50Ga;QPr{k+9_AvU0 z8j5LF8rKyU_>q%w{$=@f0mMIQl{MjC(}~<-E4x5NeT6tb{Ji@7$OP-KQ}>w%uCyqz zzfudp2=0eXk7TPeCkCP6M$@B~etN~;UA#L({q(2vZ9)IHG}=c0g73VFXn9@57ie|7 zmHPgM490iifUHNbZ*%Q0&`C~UF;tsw1c0b%e6A4XGGuoqF5b`;MeBHW^7YNYL$80p zuoZQ(4V<bCv^pm#|H;}ELoCHS>Y5HHcbB5o>I}Z<OciIM<yI@=GW=6Ev!^tLNTn}D zDMha8?Ssko@C6!+12EbA7@_RdeR(n$+NIRR&Hu@K(p~e%Kc1yv{Ppk6K@Vq$3kxm7 zBGzn(Si>hKuBVTzp0$<3oSF<g^J-xyjVnQ<gyVR}-CDfoh4H>U{;vyk_T_+)5v<$N z1_J+L2%t^%qsh9SuQ0h$Zvh6{eo+r6CRL65+JgOxCN3Mq3(1bm?zA&5`@;My`4=R8 z5v{OWcL0x}iG2%TM83KX@ARN(G8o`ueC(`n{f|<fILS37r_5g?RNS`*lhU<^bc+hO zZr^Gkp$}GUtevB4xhI3WNUwNeVa?w=`OnHpbVV9W>Alv7xMVRhiqZ9qN_^uI3-c-M z;uOL+i$JoMxD)j{kh?+5TMZ;|cuUGFlw`y0VXkViaS(%M0IcDBqp_2gt%KIp*?HH$ zIuEOgx}Vw<FhSSNThxe4kC0Qy%GKP@na%^<un22UUoBmSZ?)(#3~h|xi%C?56_l)` zpxc5&Uv%>4gZ*N_>B;&uj>FV1ZQlpCEDr6>_Th(appTES&t08PCX8gC4E|K&t6m=8 z$v{_1M`dNX$^zn4zce(7)QPwyGCq;w6meOHs2_tjstT{W@Zb6iQyT|>VOj!1%m8%> zJt;WrE%3AbCN7w!9ZY_3m?NCg7WA$@UeN_Ig~y)Be?;Nl>^8mu4yB6l6juMz8{9UM zE~=ABx8FzVOhG;mxL2Yaf}gBDo@#5i+#f14psqY7rs#!@iCJNW+67_&ET`3(>zi7| zzHpP@FB10_E03sA2K}c*#UP|iicIlUB6Xa-7z3UgYGRgW?qFr-k$F68gU?_Io_~9C zP{+|>jl;1_?VS*zcI4?Xj=x`%^}hE>{s%3ha$`g_rdA=_d!gxRfOLj%%BBMw;9&0e z-B?hP|L(llqN5@@80=x~XW`;%{}Yf^$rBClslb|d|5J}3?U|qlQsh;aY5fzVS>Zc+ zyVG&6ov<vKB)+L&;0}uaoE-X*yCjI6&F(StIo?`v@lJ~wPMms1jv>F_HGmjdQ`q4j z|Eftqc<9j1fZp>`yKVT%=L@)%V9Y6YWSt6UQFpG$XWPpp6Yk0k5QXKh1ul(`{6yPP z2NXS>0`bfOuOwee>owInZ}9%0@>yn@RB!LhDw`~X_=~_wM9|AWm}4G&(hrQ{acqc$ z+Ll7$IRJ~#=hbhefETh#jlatg9ZZoK%louy!L}<H#R&HX)MDZ4R!`&vn-f~<yvF`z z<P0}Iu+6KC<_&-xIFEe0lS*N^ck*9;!GnjxFb%)WuT#wbJYboleRvc{J3xZqQ<OSd zWfd3RfFG>I)J+*>e2GFCl+f&}5pBx>wgkT!C-A!YSh9`<HB8~zm$!=vCvTk*cAjZ* z^A`KQ{uUZf5K}sqFGX#0{uhi_`C~Mbihcpjxf*Mx$^`~~6b0CpxlXMvyU~eS!7+;b zSdMbt9%H>N&Ov1pDApNsfKuW9jen)jko(08xX8ya&U;N#n9OgWW7M<<;`*<XOJ z;}-e>r}tgw0c*YmFUqez&MJkw94=U|5Jp~LNLca##+_W70m2NH$IXnWpjM!~Rgp4M zUYni4Daf`BP|@#O{%>Vv&&cgQ4zN5;bAUp5%M*5bc(f#W>w}8i*Jp77k{=o-ncwzf zuIC<13!0q>p3e~iDz_##c_#JN9|L)J_vE4J1nmAP)u6MN{l4J9c_6B8De7T=Sa!0c zgo8(>ckp;m8mjNuQ(VG<kLtBDYn<{&1=)VhW3E%+LZO^Um9dQsjM>`zKUc5HBX`l~ z7>jUj`Th31g<_@zlz*2|p#dTt>h5Oz_==O4q^4y1MF7rkV8^3JSYvye&6{4$pz)s$ zBey0o9~>$vZ0i8F9M8%K&KYC@;uIG-RCiStt;*$L;ej@pt2AP&b;e=cJ3IDprRO#u ziohPcK}ogwamN*bI&h7nE_H>agTI6En)#41b3S&h5<Vh!9KB}ho<5_$VT&q^D>He) zVagZEehAdrJWEq2z4~s$G1+^w1x(+mVA2m54=p7!kyMK6Fa86NGy_Yn2^|6iLt8d5 z(=f*lasafqn`XZE?1&SWFMud-p+pVM10%yQUBt=uj}!4_hB5L**1wgD`e;2UTJh$3 z^=|j1&+q_f&G&r=O^p8i_jl^=j>)CIs1PlV?|XK_5XZvdXCt#MuBgB1co)@=!q+>q zH5)ZUS4f&KGmL1_Ltz7AE~xf(fQyQ$4r2FuIJA>&o_q;Q_T_P%@sqTS1N&QjJddHf zGTTaXZ@uP=Mje$i<J_xe+~c*}g%s<SI|Z)m_~*%fMRIYp)+&|%ndX{ClxdrN3a!rh z0yu~cCLwUF;KfZT@l22@qMq?`$pI{C^XO}&Z}BO9bHd$I`jI_Yvc)!PN*##1qK9X^ z4>f+x%=?%;cB4>acXd6!!ed#=-hs3n1fmNuJZ*0D>~6eXHCqoev{3lX4eBz#HPPS% z=?g6Q_i0YzcRPKD_F_`j4e@qZConY&gQw@yukDXd?U^WrLj!ur4}-s(vgCcwH=GUC zGSh5s{-hqzU9e{Ir)8%?fYxc+$tU91iu_Mpzyv`N<eWlqN^a@2963OGBz@<Vvgr$K zWPX29whINrzaI>M^@9(tz&FRk58mqpfpt}pe_wL${xludKZl6D<z))}cZQXfwBO@j z6p|XQ`B)2V!@d<U_d3JeNdN~A4!ht0iMrKI&apH1IWcP}#}z~f;KJt;LcEHnEX7eb z1FxP^0|_CxP^FA2GgEgqV9ed)-+O+gZ=w@N6Oy(4o20p=9ww&zI+t!huUj9D$TkXj zX3TlztJ=Bx&=rUGQ!I7$*mU0@?T>{`KLd^bYadW9@TNG1uy-JhfGgFUthyW_6DOgr z;RbP-Ya$FcwygQE;Bey?v5}JQ&myo7NXjj}WDYmjcVuv`%~ZE5S^(*@6M_Hr;CU{) zV>%-Zf&#pO9(36nVrc0&O)_2lnGWqSotKnfegphw+%J2}`1zP}xvCS0l(qySozOCP z3RBK}Mk=}-fYusc)(zqtxZjr;mX>u!e&tBy!h~?ub(Y^h!z?A6W|(i{p5trpFnLJS zxB7wLTKnA3ac+RLHQX0L^z!@}t@*yO75PNsp+sMrXC3J#uXX<z|A<NB!~J#b^j4FE zo%JPxL5u-x(P%3HmsFvN!r(wKN$kIs=7i><m(3WHvZ?f6kdj*6dBLGus^NO3@RGPv z(iawXF_jrXd-&{n7sL;)0``%rh(akQe=qt$P52wtQ{1~>6oLqEQTmo*;;*mD?~nn> zkH@F;>OA5n9!BTKYA4au6zSjp?kF#mGW=g<XBE{}^M?E2?oN@Qr9g3tYoS01?(Xgo z+>1+bDDLjX-HJnz0>!NqcXv3u-~Z}doQrdlWUZY&Gntv4HS<32^P8}BB4O((J||xc zIzd=7G360|q-{9qqVdeG*(+zh(bLg(V|+vUrthx6nh#vhdN2RMKY$0isiDmFn<e>O z+M#^UrGew$qFn@fS05CrPYgl=xfp82HR<ZEh=*Lq+VQm#=<49yw^rXzSXw?ajyXMi z?|fQUhQUU@P`}7W@<_vsL~Xv)Kd1{^ZroFK=pgFT;+`15eri6@Vo8{OuS}ZcepXm? zt0f0RGaQ?LXOuvKgOO2_W&Y3igO~8<krm^?_m4;sv`=?jd7+Bf`t~mq7qu*2D!wlW zf}Of$pn%s_Z;qUxOOKJE@p$;tSLq$c77~&;y{J7?g9-+32Q0V<cf9c&!r8upD^nju zHx&yXgITX`g+xawjzPISPNgC@%#&EhMUq>Lo2fceO%%41R7a3E^Lfu$z>|`<pEtm# zM&Ojr0#4`V{+DD2Nr|G@GlA8^*;KU9RyHfVxaadJW=b{E#e-2#9HJ_8m;jAwzCcX! zke`lD5+}LO=BCkqeZ`66bn~8vuu&e=al6UM0EJ%*b(EDUl>#E(b6yCmBx3o)FEGRc zy14i#dmHI5HK?Bm)Z~6d%@oL-k|a{pukRZegW2i9f{_%BhDrI#_6uG-l5Jy^(-gJj z5@1{^=a@fFAMRbnXr`_N>m9f{71E_<Y#3qVmnd$ZIRDIP<sYT(yUe(gN5bF1GA1C0 zix*Gp1T^RSYyw8{gdyPv%L3sJrBZI^W1-VmY$e*<71SrSjY*iHx<^zfzuwvfjmY41 zVspYj=YKD4gc+~N<X84mcH%}Lm}3((%wcIP{mXlhI9e&1o%WNGoPUXwnzw?=U{g0| z-o|s_<uYn;^yVB6mo_%+LD~8T|Mz@Rdd_lT0YNo`>TzX3!Q#$oby|bNH_oG#)Hkdm z?$t&9N^TT#fDXgdAQ?_gl@QK=D?$B7TABV^=Hk{7v6SvAx9!(C)IbL6$UjfSfNVgv ze923H0=-|G7oK$QdK&V~BKLy1L+W|OtZbG+ZukWHPuN)PSx53KFSo<hY7Q$N&herD zd0*+HFTLe5-gW$AKNAl+`p(F{>a#$UPkYnoglmpgwRLNBdbq4B%uC~Qh<?=Rr%c85 z*$IYp3N6x+H2tq-j65)YICp#-);htWOz@(kPfR_pC_bfAZ4d;hWAwNQ2Djf47mGuf zsr$CG$At$4JhBA8N*IWp%sbAm%gQqhkbLI-%r#qXFFQ_L8FVLW=JK79f7*(b&(Z4U z?H948%1?Awx>g$|3+BM}j*m`+xOhSRD)`gm3nUk95xK4SrItCYi4`huLUV+fXy*QK z94pY?B})dKiGcjkiU@XkFizok0d*&O`c-cO?xb^ky4mN7_+Nsd`|2w{5KxXe*ewr< zCqP!}7w6egdrP!8@V!w12HWPF`L5|3dH(SVL&w|!&1Nw_y_xmE!wAL#iJ7lV<%V{g zm6s&wYr)TN-f<DYiU%<CEv>g2fEy<ztN0bX-X|NxdtX&YEU+bSF-pUM?Q0SrO(g1h z5>PU(ni(gnusknDS<=%y1`Qzz*>79<TAZ$N6?`9UbopKdmow&{grgK+1kYY!a_oPp zvAVZyA^`nb(UXJVwaBejB%=BE+QFZv#_P<EnNmo;WVzAPI@7Eih{45r$6S*m>7AE` zth?TFSv)B6wPH)-4LqU<sfs;3J*sKDfe;06IeV72%RV}c_N+Dbc%E?eceA!ShJW5R z?T(sEMNJ+jVW`aFik`6lF2Ft~Kf$&3ntu8!R;|}H%p-j3aQ}N(M2>@`z04j)m{{g& zAFy6+eve&Q(C+!l3OefX1$iWTzmI9}xE2!W1;h&)X<GH4vJkd9lR5hfyMh#NWyjI` zY@b(c;nm0a3!NEcvDOE9ejZ%*v3YP{L<@C;)|>-^7I=dD{e@>QMqcuO+}wkz3a)~o z=A1#~?!ivZPFC?;1M^7D4!y+7w>6chZT2!n#mdkSB}8(~1Jq@jk4b6T1bVakH@toa zm}~cM*RU829*-#RsJD<Xc93f)FyxOxuqd~%6?}EF7=Tl@_u0WKgIqCfO|MF8cSt&y zs3fLOaNvov9<6dwsvR}@#3bp9LET06?#_9yWQbxaQlt`V&EXSP0J=>wqIn@7cKUfF zHO@oUzT@q-&B@mh_&g>4ED9{aJ2zlz`JKDxk~zSM?hO)wRPexVIQnB!^Ly7s3=-p6 zX;tv5PUahR?>b}iDhPJD>7o+5atZFX)iHXGvhk7J^GLZlrjH90^~AT!{AuFUgVNHc zDqrS5)s*7f#5pS6mocKrR$M)zb+yeQ5vKos*@pa6j!w<ORF~mI4G)+2x28{2$*aa{ z2DF@weQIu=@WuPM-%rg^l&d<y&JWxxA>z)>PUjR09gF6wepA-MWze-Qcg#Hq7`Lr> z)JO9@QX5H@#YI`pIE)Sz@Pm`;IRopQDNh5V%q)aryYn?6Jjx<xb1dft9tfV(;?l-A zs~X^I)ymvRabcXk>zmNL#LgarNqEgst|pXCoBk-^`g^>2am)FW+n+O*na4in7Uq^e z9fi-TYLo1Ix>e<h#qjV7>UqVgZyJ*fwVn7&3)^<B>adTleDZ6BK1kT_@!&czOYr3) z2VO_*-v25Q9z2;yG051(VQHia_uCSHdGCvNM|uXgh>!@m`$PG}GU<D&liBtt9JA^r zz$6ue;|d55(GpHE$S&Vuz=Aycb){&8TAIkWG89c?Pd+E7<=8n+GZyj^3}ttsnkJ=L zz5|=0?>HnRzjMCZ&^g0FQ`E2D_%!kHnjwv?)dlJ`Qc5Udnebt<g{t?6tOGlbUtH|6 z)(~EIh1BKc7op6b{+Id||AY|Ow~#@aYJI_>Z5Io^$G=;Z27;84q)&m^dP*1pq4sRn zAt1#T<}-h|_1HJ4T%j%s{@;kQUs#-g<aBR7W-g>_iTEr64zd7E&3$oJOi<v853F*> z=@<WEFvXB}N|D&F<dPFtHvZ=<D?)^`Sh%bBgis~OVPebm8GjA$<>VLqZ>JU;nftfs z;|(n7A*;GpyA=d6W79DA3p(`QvQ?&HL&XGHOe)Y2InaktenbS49TgDb#g)hzEz9(o z3ic6ib<D#Gp$V2-x1hj#kxZFT`f`1QeZf7$+^|S9{>VIIjI{5;m5Esit4Z5VcJ|0b zu(Lg@z?S80ao_*rujS)o!`F`#K|#g75)wC84W1l?%Lbb8e|fnhpEJ`@PjK4fN);=s z1_{qDanJ9YY_X<bnFf^^;pIX8c<tDhBe$uNS(r8c%UJb58v6*Z9(och>}N951^oBF zV~xHuy>qs012Kq9620<91&E{hq59(!!pIp_D+V-)_kNm+bg7#q#WwtVmm=sVoJiJh zq*Zu-{-cc2^Z+wna8Z?$I!A6b&9z)C{)fXDT5$0`M-{U(5pt2Xu91==89T(#q>!(V z(|~-B6+Tj+KZ|A3Z}*Mhbybb3l`<>nHLFhqm$=dBCXCP$L?Q&3ius<0)1rC|B=6w? zxq0m?#$v8!nct)h<=+@@${u_|UrVFG$<R)v?UW*x+sbQZuSo`(Cg^<2m`6Qb*8!P~ z1}6W0bmE$&CtodqW`RU|)s5ZuAeawES~X$wF$`>ixsb-MwqzJ$Axi#Ak$pkX?QD0J znWA1#?c2#tLK)YkJ_pqOEoA+L)U)HL_JP%`emwJclK;e=jJMs_+hse30w<_v89gG3 zca_LHpQK(}XGvi|XA4pk+nuMcQ`Hg|I7tdLPlTgE_US&M8Y<B?yI|^3&NR)VR0;9Q z$ikcIQrt4Q>#sd*A+LjcE6wO{SVTk9^fL;@4L?^0o*9>2KbDZ)8U$P>aCW$^6zRL~ zcA=qUqarQe=5ftj!%K!c`iabccydptLe)zR-VsWtLPRt5e?g`8Cz%@=(&0F4pG{#i zl&5^XHb^&yOHxv6%f%o{$LG#01hFy7|3qMLbmIwXmap;D4l8(R@2b<CbBBZ-QKj80 z-i;!yH3p#kF>v?SC@#^ZS2N>Vdw$2oZ|CZ_ZWX(1(MqRs#MEpxp;l5bdRh+pge$n* zO{%duO<0~d2zQ29@Eaw7u{^RTic_{_pCiMw2G8DwQi;!u;YmHbwS;G7!9CETP}7-8 zpTeWue4B6b{PI2|BC!S&NtZ^}VgmqniEpY5mA(0*99BMq>u(T;`4!09Wvdkm9XUDm zwpGt_?&E$(Uo~>5FiQ7n#&LwoNEtVPMP+;=bi7rwj7|n_$Esh?`&%EuXR*!Z5}V+h zmy3pu8@Vub&|mytFb2_Ld~Zcr1W>G+^x>I&3?j|$TorelnTS=hcGZJLxpS>lf97*$ ztd<&(cEp7~AEJ#8))W<4i&kU?xT>06M2YA;2saBUH+6W3n5pu;i^9sUm6*S#40mDP zK!;tDl+h_Y=WClxZ1Ypj{3`h4z~k=IeuVd-s7C$FfmZ|6*+C*q0}grdJBcC2j^PSw z>E{v4br)_sr?m3ZrN-(2C#vQ(PP8X|BkiPLmiO9LTF#O$iqE%F-k)#~4i(>i!^&U- zb{?WxDDqL(c7cKBF`emlZ8xPbNp&ISMk01gsXo8IIX;x{;yXrHmnlw%!ZziW!&$>C znH80ns;7?ne1j9tS;TU9OHK-dosLjv;&&qPtNi-6d1121PUR)KO8@OFk$BWEutM%g z9`xRmURUs%e*q53if0~m<^YL+5NbY9I+HD4K&Si5uN(K0qxd5Y$fun22mz6CV19>r zo%{WblFYiF`?jjtJ?3tkc`$a0Q^=WNkI%caoRmw1+Q9nd`4*j9b~vJ1I0Cw3m4)?T zs7F>nOdHu}Z?K6`4QDrx(4*oSZaqKIrSBaX-q7yu7i?rfrUvZXS&hIcgR;rL0S|RD zR0LMD0x2g}(s;ar|F*ewd_kSxRUSlTDp*@%Iz@fa=*8i7^(ChR!)8r06HO<1R-qWQ zqHypEV%4qFiS&I%MNmsf0GJx`0|n}KvNPKgK|HE#=J|K+E?|RE@RyT0;W$pWcJ|qs z`&-Q9<rXW988YOb9&uP-P|Ze!_0)%_oB<62nfQ*19%Z0b54sXKYf>HFcXXlqSKkQM zB|Dkw3U%4TGnyiL1j!Kz$cG7!Q2A8kP)!Zrd>bPeKyA9zgo|7{DoggVND34b@C$^A zN%fvn%4%m-0Y7&Fl%?eQt<3jpE@-pL%DuOF8zo$@MkR)__3UGOUYwB~4OIP0@w2z6 zbPpqprln7=etp+46i&q(0W_|v;oD=dnAfGy+ATG#6}Ji3c=0iyT1&<F1zq~D#*h=? z!{od1vue&?aO7%;RMyKCAwR}3trCjqkF-GSo>q;jaR&N2yRS{C0pgkC%6f&B&}nY? z+sl(Tf3q65lWk&&I)2yRmGsdF%f35*`$I8_{qc)3j)`FVzIV1{#*!&r!CEg&%MkN% z<$T7qllT7&2+69JJb(SCSaolpHeTK0UUT<@E|g*z2UVz`q!O(0Bo?rxxzBTt^cy$T z7RrmZhhhpNnEBd0bwwM59tedSl0z1sHUc3p+dG`lDg3Uh<I-zaoG+E{VaOE9R=_uO z_-;^CmmGsb)>3emr&0F!wXf!|%I2=4@IG&QWr{LT2zrTqc4<H8Px;6im-b_DWXX|O z!SK=Sl=BLszo;S`S1&r7or{$Uem7)@*3s_uvs|G%+c3<<5;{uZb?Ly5feT4M6|nqF zS9~6C#CpDWme%>1;-21<p=}clf4zf&-LJMja<_}7vHE4;u)Z*#i=k-IxBI6SGB4SM zouPe0IA$lvv8;AFWY^Z_69-@;N(kPF?COxuLs9Kp3VgFz4&SRNzm=kLmMJiFP&~(} zoJE3HX_Oc)UTZe<gpeauw1j(xPC?A}Kb1pz072xJN*$8H7xx@2MU2ureP24q_w6T5 zRTI-CFy_Oaf&t`?B71nh2)V|b;wEMX&1B9R@a4*Ez3;{N=YNaw5CYG>BK7>BTc)mL z!}6MxBeI`>#!mEk2ghgh-4*xcKO*kt9tu%rEs#Iy_+mrGrN@rGX~lzdH2U5jHN(>+ zo4N2kfJaVEw+)-9T4uSjKa%zmlVaVwYFkWKt+G2%YH&&nV>k-gw22*(qoG_~L5<AH z_;Y$*?Jvq_3|-d7a`Dur2;eUrSxM3L{lXdxZ%+x4gK7(AM;{OD%Fu6VSl1Z~BHd3| z{R8#X6>j%cTS1+Wn0W-<!$+lt;h9Y@?_VyMJ%7GR1B%aVC;~aJ?Rk-n<Ov_8m#B%5 z$yDD^=sEmHH%9qV`C>a&Ryit_+^!Ig&*VHA<v3wT<H`i|0f@m`FgPR)WuzbS5&p@M z0h>=GKi78-M2{9e5eKBhi=%uePA~Ee(-R9q7VLAyBy50xzlJ8}dpNhtXO-Pi|Lfq$ zo9fDd#EOKav`QTaCxMa>Ef!SBTc{+t^mwN;x!y)rZG0O(@^^4!>Axp85Tojbr}wNe zDCa7`7S1okvTBL$Z1O(!T>$4H2EPbSI+Vc!;t6teVA>ulPeW0?Gf$;B&0A&Hl{QBx zFXvuwO$!Cv_1LCBULhe-K5<M0t&6jw>&2lVtZG9|(hv`fH8rYTfg37_q4V5xJ;(I5 zdylnCaOt!6?PHtGK)}tAQ?^`WeG}H!btKEg*$eY2KaEhOc<BcWFn{B$EuDU2>c|s+ z*JJ}}cwv><4fa1-o}_EUVkGYKV}6C-wQztq`SY-7Y0^~X&O#3r)Uc?e9dl%UN`%ox zpS8#)sW#op_voW^BA>*Qe*V84^efGhxmNa@gv(PpVsbyOeCWE7{&jV$Yl>)>mf3tf zr5!^+GUFR(A%Uu{3xsa@;S#0!lN4njDECR*e+(l&K1%=vQ&4rTHd3X%lPtVa{IA%e z5^*6&y!PULtzVl_*p&M3x57G~W^z`>`!jQeQ33Vwydt3D02FLx-&L`_bkO3duT%?Z zbTu~ET>JUYYB_><2qM4R{fZw}iNojmwi29>%&*DMJ^J=1$)hnjhW%2gVIO6WpIAgC z@kP~0u)<0iaiyd`j8zox2I@X0!@4*dy<<5p1?6$SL%`^bSbYTLrg_|ePUf+s)LqZB z(>lH<t<o6wm|ZBpqTm)u^`r)mcnA);EQtZpXo4gN{nO^@3%`QTb5v%_F-uIg-~f;! zgBUdi^%lx+2`UV&D<vTQGV2ff81QaJ;zBG#Z*Jf6CM!TKx9I7O$IFI$Bbewc$c5q} zQ1za~+$i`~=;uU9?4kyPTh1%PT)~CAwKU+&FVJ)Qz_ZZel{U6J>3n{~*>N_0D_tbs z8l+?WmW%=>F6M>_xNsk`8~!I%zGleKC?aHA4e;k~`^#2HX=&;gb=UT9ETAq2sr``; zV~9M?b*6Iv#9kiGXv{IEr{q4mSnxyc;wa|b250tArPz9C3C>;lclFZifi9*sreRnO z9YaiYyHqy3K5B7%l=wn_9Ep1&Y_(`o`hs9nj-7*T43<vE<kc!Uw+}VnJ&zgxIlw!- zLaG2;_+s0CMsSa4(x84EB~ehr-EwZ2D2O*m_ypSW+UQ``(*85~a<aa&v3KyntXi*i zxV6M?i6Jr^03emfmMoh%IR(yb15WA`Ep7Q%;8j=K*vKj3#V`<X<TtOE%pBvmw@GBN zDB*v^r^1adON*Bv4jewOD?7APp>x*tzlYZ*4$vkqzKZvUVPKUbRx{T{yQAXBktDRP z{qjpl+q@AylcPTFMaIjYQB<iS<*l`%iDDuECX^X88T=oq>j$}8lluZ-H1@Vh{3-X? z+}Jv@^P4^+W7*c;fs-T_7#~PNuJwg*#Gh1qhn}VBt$(mWf#r-$-#^P@-4Go!(MN;; z&Se?=^QGplD4mmzu%FjVl?Gisb7-uN*MIo_1&V$Ts)a5u1F%&30;+;l@}_FNO<kkk z$x!-8Adnd&(C-8(naNu|p5DLSb880>l5NkztNQENw-3NH;}>FL;9q5NDv??_#vRh5 zJ;5GemtdE;5d<=h8N~C4DF(82<~|5<n6;2~{jDTqM2#x$3Ey|jIf=5A%RlmS(^H!{ zL>%Ga;JVK-N6&-+IM*RlagLFfPmn=?n1Hi29d|xVA@zf*0Qg`z>}VNVFr9kNAeRG4 zEri%b_m;{WCUhT{4Pp-fG2b>>CUjts^o2$bz9&{@2@U}9-#Wl^J&;V}bDsE`UcdgR zJ~gwXZeaxUiB$RLmHj%vVJ#)U(zjaUB{WE!FcLm}f+?^Jz|kt}8^2HdZgd?#K}6?S zTv##nwuxF@)e`^@nIwz^1K<Hmt~yBWT;NA1L^bnI_%F(cvD8k)LZ7)4ctyTJz~MB+ zKAYh9Mqd{fx@!|~h?nX$7K9t`=j-^DCAxKGTh$;(Zh7(ian5u<MPd@)PgP>gP_-JL zp9s-j@|cHFRLv&TC6oM4kec<9`NQecTP;mZLr<#+nhK_VG^XfwS%BAS=CqBBHdcWS z82hi009!q-WGi;!xRSDm6{HvI{WGs9kSZ{It9p^0QO3?J&d+qKr7eV7ax%VtKQfTo z9t$Oj8AO)?&=p}vM@O}t^*?TYr>KcEH!rTW3{Kn-0^ao_dtKo981wK>Ja^1c%7@_6 zDVZ53N%WRplbhD3$lyk=hw6H#!B`^er>{9ads2N1K3zuZ4dza5TY}N*U@pQg;Et$# zD~wB(63&bJhan#iWz{~+-oY@<+bX2D4>xFlju03uO<hwftB9fjNkSqb09Rn@WE42i z8_=7p(7j%;e(dbWw0SQ3Lwwx5d?0{+u*?)Bu_+*<{ZC$`Lhb77Yi|m*HaC*x*I}0l z=Q0MPJjWOn<>cZ_vG0M!zx6=c_S}#-DdNxx>a*e?h!8h#$fu}(tdT90t@G4#+V9<O zQ3_~{1Z9Zdq9jHbWfBkKWzZ{8Q9Y~lg6KO_vfkLdFWGIvki?E{5$=W+EvYWiMV2&A zR3OoC(GkM+rpS{JAMFum7AMpBbRvP1weaG4X##0Ze0JS)<G*TCmpgS8fVPt}#i`7^ z)7Pat!3ckd>W^ZQa3a#u6yp~v?6!<u6~-OFc2~Y+79TL=kf~08Bz$t3{(HD(R|H6~ zX{XBY`NLlG+<_zEmMsysdSXp1cy^f|tFxp&uucm&Wlm(Qg<>|dC*trg4L}C>OyNi1 zvmkM%U+D3q=>b@B0!ln_TNZLM@>gmInU<Odbt*iU62y3lwijYck~ocN&NZ&1)VNWC ze$86U>hMJ?cAV)(Pf67j&-A-N)Wq<(C+Pq=ZA_NS;bfd<xbeuTjNfE2(c8}FsBmgY z=$E5vysyo1s};kakp5soe?hY-e(h6d2`e>+T_H+4^rA*x6736m!|3swzamyxy2ph+ zaNTO*-*=0XHmHg=D1-1zbGuPf;TKy(cSl_$G_tAMuJEUmE#iO54o~oNtc94`l4}lP zcR#!zo~W2kDpNb|sGu&Dz?L-RIBiA~W5z5ynzTG$DfHt^G^pqFPBbT&w0Q5=B3!!z zfm)WANqbETl`lz44+bQ>eBl2YXWGN;G>S((dv0UumYxbP6Ds<J*2J_yj%%gxGE1TU zEFv~{6^36^Ov7QIay5kS1vLThHebr&BT~ihbN(^0C1s}EXV@NJr;*e($`?GsM6_B@ z6#8~U4uL5nL!7u&E*8y^1)lwFiN$u42Np?D42~u7&<w|G=JOeY+9d-A6g@r}=dlXu z6JLRy2_EHZ`(<0I1_KZ;Ej^Xr%NvPRJqT&e+em{0>(xS{tm3=ir%_9^))pD)rZ=?v z*?Vu~F+A*TkaSNIhe(4OD7g0OzLNp{wnHW?nk+945}xylcs{|Gv?V>9X<dfmXvv%R zQ~8OW93-QQC~r2ayc5=B4O-g!CD$f{DL0K5W>v>aMj8<8bHTGu?}_hja6qc-4rDJN z-@&L-@3EGM*rNt!BqhkO4H@+Q?Q)kte*Kt_2-t~LJ3HjRZMOTROb7Yn>hW^uH8>|? zzAZxgmY`B&bSvaf;__#0zkdU+Oq&sVX&<hXs^0DG51#Hfo*P2Yu1gtyg%_OZxq8AU znrU0nVY#+m85hf1O!c&m2PxvtZMa%D0l^n2TNv+a^H<C)kSK<<g!8fuTM32X(@qY( z-%SNH`-N=!avi+Xft(m$pZY?-y1-@TAu+W^?e+J=za}`pwo9LQ(2x#D08Gve#D+tJ zB|bvHOIe;$ZKeS)t??yoJ27=W+x()ZJ^t%uKT((L(~3sKgg;X2#Sv7b3O4tazVqmv z$wNz+7Jn$88_~{hBx!qZp^*r0Wn@Rw_%G#d7P#NY?$;+;*MSvfKoLA~8xg?tvB>er z)H&_=)-v<`ut&}A7egOeD~8Jz=HP8N8i^gv;V!Y88~fXs+~vc)8-DcWqdrQtcH^^R ztWCN?TQt+3cJ5!>r5#|%nK@fevyPZMDO`^1p;j2jS2MQz-aKwtJQ36Yru84Hldk8) z4ZTqnwLu-kV2kQQ?xEo)m(1#azz(c?&L5h)GYZ}+;7B^PEr$H0qy1p#fFtBdY2GU3 z++gEgPl7eQ`X1^Ix7voftWjmSuo}Gifi|(vp7*APSJXin?_!=`+bD`Ocvb<=eQFK# zAe-8Y%3KM4rYr0YzIm`*q0*90WyZWL>M@S4XBlT<B#jOIx4`h(SBX9En^}K%a*K?& zQ2~ne{X6}wO+_Eyx(MWPR1oV706$Tma7Sr+oNBks1u4$2MILAY;+^Y>=k=S`T~~*l zemi#nN&`wbC9&WZg-ZwN#UUTF7`CD9U7(CRHF}TB4enVEp@wA1K_400TnA9YvM`_) zaD(lZjNl7jM2M*9o)H^+aXWr+6L!6DIwt9WbaU(tVP1E*mge{Iu3GC`*gaO7&MrN~ zmHh?s#5#m8Y^xUwycvFl84;u=3vB>5A?E>e{rO;*7oZ46hY9Szd_{Pm+1O%rjqOYY zvS>D@PT^kB&UgY}pzgXxfVacodHnSJnAJCBtK{VGghp5T@`)#bl)?(Y>xp29>0#LF zKUqsme6-Swn3AVFzG6qSNiDGcc4zLr4*V3yWoyi3jp<_>b+#k>Tpf+6RXJ}mtm&$X z-wkZ2iBNy9L{%HiUQ5ZDpNHmlzeR$$;wC@|_!@sAzzLx9EA5h4x5p`R!#X*kl-Rs1 z7Un9PYa%13pVfzymEcuqmj6oDNi0L!2#a)=N%@~HgE|apnz316t#Y%&&64dK`j4zU zA$-pZ*wg?Ug&SI9^nFRwYdx|*o=4tKj@F`-uSI}72%{-_&(vc87xQ3sr1>EL0Czk7 zy_1n&dqK7DJfr~B8Kj{Y%H6N-)!!FR6Nm?h>DcM@#%lJx{N6u(C`^ofM4D;X@A628 zux;U_M^9y8c>7*5ntPMaV(WSLexk)Ty@cghsjGotO#d#r%D&`quUT|7U$s#)xfMkA z6QUCr2qMW-lzfz((qlj^87Qdr=(o?J7#cp1F|D<|JsCTZF^%m+XpfNcAK`Fq{&wn+ zdVKqhy>-=d7*_phHMnHg%{-Q7><Tv3bo^GorEizgKLyaec2?>Y9QW@n7InKvO*uxp z-xx0I9mF`mytejqD_4G6RJU#ffq0*X!(jMJUwF@W0-9laxqIB0-rK+ei(g=5lL7vr z%Wc-mV`O{l@y)W9fZvy*ZGyH=VQL&ymEPPNO?*_tRMhY?!>N69a7;j|B}Hy7_5_0^ z9O_n9nU`#v*`Pc<s9YLMvZ!cr0Ak`2J~349lQl+ro;7F^IBcOSS#~xXXLM>SaGJ<{ z_rtguw|>|9G~WK#Uwa(=VIHB_Us--85l8A6s4^TzE$u%VuU#i{M21`@g~m811%Gf( zW^e!69*dT0FP;9wL*Cbb@r1U~P4u@SvMK$36B`*60I)4b`aDYlIC~~RH3j0>rb)gZ zAOy6yUY){YV`BhnelQ}j+3_MpC6m_^O)8e$#L6uBzrz45e#nNKIm1Py>#`9m=qR27 z28)nRMzpt9otZWMEjq6@hK^y==#Shm&Tod_DUs8=np+g_;u>4SLUK-+QhniRU-zUq zj08#RIy(m%|8bI_@t3<3PA@BHx-E`@6&iq*s&T-BL;lCh2miQ8@_Gy()Vr`A2e@VE z=63@to=b~WN6S5c5dFzm?Cp-*#@j$FSckWUq`|}KX#4VA3oyU;`vK@v3gI_ReWAYi z0vj?dfx-AjlS(o^013qyRJ09cI?(UB?QW+_9pMgxfbN!!mrYJ`S$s+Y#-H9RZf1a8 zA89<A#VN^Ad=sZu-z@`kh;4b-+UJ3Q(y9AEMfDOvQqH(pn-T*+IM;Tzjtma+&sXbi zjwZ|McKW1US7<COv<%+dd?=V6<~P3Feaum*q6=~)+{Wu+HF=hN!#Fx5av}Tp#*zn{ zoDn8&dLJwMJ4|*s-G&^)DV#i<1L*h8F_8wFDJ^g&#t^WbdU%Ej3X%M`FxJ&Jck&Dg z*(M+))Ho8pMvDTBWc-~lN-K>5%Y)?kyrUvgp#m)y$Ct;t$oGe&DkCMtpfTQ(_;7AX zj^YVN+(AR!NAeI;L1V!cV9Ja+T0{Xf=BDNki%URzcMx?l-rOvs3oJ+fI%Q3z9U=d| z=>Ez$fAV<E)Z_~*h~<NMr&k&F>WylmwEf*cL@@f)Z91<Qm_}3_hScf-NCEC35oAH+ z6^u$Y2N6E>bTlOYbi#{R;Mj{R6;lA&=B3E<T(0PE*v&8tVAjlXC}q3ZW{+{*y@74o z<7(d(nxqo`vYy9k4azo!=PeDDmL$2+rcWx(<5UFuOsqd~qNX_nHv!lQk^r0BnXTcM zA_Fy2EcY4Kr=y+S#c%!qOzu)Ght@Y`nP(yla&zm2x506yw-JjY9CE=IT%zVmJU}jd zGx<7lO>EAp!+!<aQxqnAMiq_I|9}_+R|CHW-$8Q7>4D&gTbmomxb%bL3q*0@@*<MU za1@_f!YSCaeLE6+h}~%@bh&cW{`wFC3YX}2O5$iOe9hFuy}(M-E+!f-ATT7iv_?-H zp?$uHedo(JJj#pFER@q)kI8@5`wf)QgQgk!$_O0RVS}tt=8Q2F+q_c7!@7zO;@qQp zBZ)0Zq-5WV8u%EfVS>=V+Eb+|(g({)7L`0JVOeOE?^9wtW;;k6rPITa);8$*fIyA& zIG4qY&bO+q6OkW&?vdbqoY-I32OCYw?}Su9Pr&=z;5;8I^WcRTPG=$Q*>gi?!)aq# zbI>1gv(B1JA}QAYZ%)?&cW2&yF=zo!=;|!2)<ti&HywHCyZDBDrDzLU3*4r95^!vd zAquf!uZG!7Tf|`8P9(L!qeZl>YQ)SbtoCOMTkrJA(S-bsKfHBRGA3yTN(nLvs3{Oo z|NZz{ga9M~#dCIZAc*@7bI_@w#U)dZBy)iXnqcCK5K<;wHG{2GeCo7i-|6d^f#39+ zrw-5*UPG_FAb)z5903NnV6zQ|QBp@(8*x+rp+FPOV<Q61Pnx16Am7T`@IZO~XV|}# zFbK}cLXidH(E=)`_1^T~rQTq<|CO`GF@*(3_D`HyX_ZGxB$TKWlxZn`B#F^Z1)+=* zx0jj|y>VU!RU45!aX8{^!j2+r!1mE4G4=4*hOn9b;)c3;9?|fmJ%ND+d7$hCy-wup z=;BY;Kd(#fnfwfsG$b)YsL&#lc~$T1CWtUa(Ns3WnUlmJk*4)c%2qm#n8GWxnT5hf z;5WX2q~&0lXgMxLRk%zEd7Ag>#L|f8l<-G1ljF-tU_U028~%5ck${QLAR*8mA9Bs1 zrS&)a>xAmaM_>+hDD2*lPTRuHw*0GzVBV?t!u*pRaK6(AsH7%T%oS?s;0*fc;OOaW zWnl>gbFi^<fyK?-j2)n02;?L9Jy^`v7Oed5nhRLj%*D*v&CC=hIin3ILH}O~A06!M z%<Q2cEeBVyoslQl9=Orj%+<vV47Id!0bAJ_S(t&{t$=D=p<oABXRy1o6%=Y_4|X(j zwzG0^v2w6y0e^I`hZ>nc!B+O>4x+~Y)y`t#U<YOq-@zmVYNGpBlc^EZjNioB40r?m zYvy}4-uE25s_cCHTp#$^`QEef@UyWAHJ3X6UpLq}m|B^8{=aX49AJ+FH<0|RLB+uw z>Tcw01`;!MFg63r{A;_inUSfd(}>x>Be4YjeM!{{YHJ3PHM0Qv=Kr(b=F&~IfMP&0 MlJXMO;)Y-T4<3+3wg3PC diff --git a/pykeg/web/static/images/keg/thumb/keg-srm14-1.png b/pykeg/web/static/images/keg/thumb/keg-srm14-1.png deleted file mode 100644 index fef11d91e228f0830fb0de05f23618b2a49ef154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27446 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 O0mw=!NtB5h1^o}06j;;% diff --git a/pykeg/web/static/images/keg/thumb/keg-srm14-2.png b/pykeg/web/static/images/keg/thumb/keg-srm14-2.png deleted file mode 100644 index f65bdc9ad96c72467cc011d32d3a7cdc6217bb92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24969 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 Vzs=;^J_CvY!Iia?8WpS}{|8~k?HB+6 diff --git a/pykeg/web/static/images/keg/thumb/keg-srm14-3.png b/pykeg/web/static/images/keg/thumb/keg-srm14-3.png deleted file mode 100644 index 20613d30e7fe84c98ba2d12aacaf99c8d771ea5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22669 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 diff --git a/pykeg/web/static/images/keg/thumb/keg-srm14-4.png b/pykeg/web/static/images/keg/thumb/keg-srm14-4.png deleted file mode 100644 index 50314f942061c8a5210c0982ef6dd6f17f7e08fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20963 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 N20F&t<(dwW{{t0%-roQK diff --git a/pykeg/web/static/images/keg/thumb/keg-srm14-5.png b/pykeg/web/static/images/keg/thumb/keg-srm14-5.png deleted file mode 100644 index ecba215374ca9f7dd175818d6c3db5a0a87b8966..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19087 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 I-XS>kKL<)ANdN!< diff --git a/pykeg/web/static/images/kegbot-icon-72x72.png b/pykeg/web/static/images/kegbot-icon-72x72.png deleted file mode 100644 index 2ae579fe0d081e91a05e9415ef16c66833de1d44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6480 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 diff --git a/pykeg/web/static/images/kegbot-logo-full-white.png b/pykeg/web/static/images/kegbot-logo-full-white.png deleted file mode 100644 index e4d8696cdbce0e3a23d12e6c8c6d7a080d18aa86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8689 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 diff --git a/pykeg/web/static/images/kegbot-unknown-square.png b/pykeg/web/static/images/kegbot-unknown-square.png deleted file mode 100644 index efe1e387e187f35a2e6435c0912d0a57da95f17d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56096 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 s)BR1A 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 GLSTZg3v~?u diff --git a/pykeg/web/static/images/unknown-drinker.png b/pykeg/web/static/images/unknown-drinker.png deleted file mode 100644 index 4caec7ac839649caf3563128207c28e54703d69d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6156 zcmZ{o`9D<OAIE2gv1Bb<5tYckWy{#jFbHE!wvY-@l99+T_9Z)6(lAD$#gg5~mSic+ zgb0JI*G|U1edqHBeD5#s=Xt%}k8{uCJl^-*_q}oEW=OU({AWNQ5Sx)9!V(06&=3M* zqN9cOB9Sgypm*0b)dhh*C$k*6LTTg6ZibeoAW)Df2!xFQf%Z>naS;Uamj{8CTtFaL zHVDM$ljhuEK%3~;+{9Y{^z?LhcXxh%eq>~%r>Cc`uCBPaI4dhFIy&0l-`~y6&C=3R zS65d-LE+M+OJ~oX<>BEG6BCn@lT%ey)zQ&0G&J<_@%j4o>)6=X($do2-rnNk;*TFc zN=r*4A|kA;tgc+S^4~J)>1AYOZr!?-lan(#I=a2R-QVB;{{4GrXJ<u4MLIe<0RaIt z8r|5~I5|0)k&$ud&K(#G27y3+|NfnsnR)Z(&5IW=78Mm89v+&Tn}fk%1_p+JfPnJy zayvUaE-o%3Bcr3Eqc2~+czSyB@$s3NnccsC9{_+?uU_ft=}AjV$HvA|snm^)jf8}R z>({SKNlAr-gsiTv&dtqTzI<6oNGK>M=+B=&;o;%j+}uM$LpwV==g*%vF){i6{W}7I zaB*>oi;JtMs90ND^YZdyWMqWH;ay!_`}_NOd3o2aT?-5h?Ca~Zu&`iaV&doLcXV{D zsi|3BUS?%wZEtT^R#ujmm(R}5o|&0}LZOn9l3QC_etv#~gM%6x8V3glZEbBQCnvMB zvl0>#wY9ZMN=i{tQJ+75wzs!mSy?G7D`RG6?(OYmVPX0B@ndCWB|AHNVPRo)b@iDu zXWqSg_u<0_K|#UJ&Q1;v4lOOMyLazeTU)26r?<4UR8>_?Pfv@Bizg-~E-Wm3`t+%_ zwe{DpU%b4$1Ofqz#s2&E@9Nd7Boe8hpg><=Uszc9+_`i4`T0#vO%4tYDk>_+$Hy;T zyjWjfr%))(&CNf5{@mQ$#9%P4uC6E)Dkdhzz`#ITTU$*{?fLWPqN1WxQ&STY6T`#9 zcs$<2!=s_0;mw;j$;ruKVPWp>?qo9A)YSCv-@hd#CGqj`DJdyQNlB@xscC6x7cN|Q z{P^*=Z{NDRyX))gJ32ZB1_s8*$JyA}a&vQU-@bk0#tjh>k>KFq2M-=NIXOLf@<dZp z^Xb#4oSdA-#>Szcq3Y`Dk&%(lo;~yS_I~*Ap{=d$+qZ9#NF)x2la-Zy^yrbVukY*E zukYQvXJcbSBoc+`-B7gZ1mC@hM1W$Uf`+sK^AkfmKiU&VLpBgN;^C|+2*mAegwVBq zKDtVY%SUaWFm9~>WKyo>RafYGnka3XmY`tp$FwUmMc{k${rpdEe8$&ah*+3BE;Fg+ z6<&TN%IDt@XDLe<EL|&~oatk|uGp-&rMa-Bw&1Uo-@m-i_oaV%TXu3kq<{Znelo34 z|IcN}quX{xZLKRuY8Mv}HQ${p7aA5EFzL6Bfx=nlBpu&+C{Ulwewr3Fo^bwvzJ0AH zLuOYekQzIia)w80?!;<tqr%%dutGA(GOgTxn?F=G#c5Y{kQKwEDQjd?{k#1go%AVj zG#QV)X1B!Mzwfb1%v?h8S|sN))R@auhFF_^TrGZRPOqsR7yo$gc1GzxE6u)82JT(M ztA{jWoF2n`&w1cM__mnW1VQxRdRJz)n0?%EKEXd%j6AHDS<_1~Gdq?T4FGO~F}nBk zYl>mrAGP%nd5n4U>?H)hZP};GD4Qy;ZTI*>xkQM0O)lMb@fn}(EceE(7-64fvf}Ue zC*@wlAAJWVFr+M_9AK>f&q4X};1`$EG)>a5aoq*^iUfh<Vt%FPU4C#fpNS{iBZZ$e z2jw4~N+eq(s0n|sI+ke<by*aW`OMyb=)7`(+BrIQ1b<OT)ZH!yR8`Jnj*A3Tg+@Xv zpP@{2kS^6-Z6hb?b2+i>ZH}7_<ke!Pb$MpN$bx8g-GI>cSqVTqA;V3QxaUw*&@NA+ z>a0@(IuddK4U?^}(&&XnQ(U6iH|bPAQlh){ls=kvMtI5+*T*`V63jX--dWKOq<c#6 zQ|S0Yj~>qP23->K)!)?xiWDhWThgCw{M$~g)8aAgK7ghUQ~dHz2khn9amj1EvU&k; zYC66=8ni&w8mPX(i2||IT5gKZ&K-UCw^h8rGdj*jR$N+hri0cR)Ro@n+|w>EDH4TY z-XCpF3_4Ho#`1nbh`lRj2kz2+Z=rv)!9e`os{ctZ=3T*%55cPjuj`I>JdlW$9ZI_h z)K_ou5-q)c<F|hG+S>}9W{IW7Fm>5*P)cm%3b+P-jOCrMjpQ2uUDcK*)G6CtwwWBu zbG^u6&vqEvga5+7MM@DH2f=EfOA5HYx+euwPJ9kXkXoDChm*Q~2~yt4Ebmv~r2|P$ zqn2Afz&QGITYEqFUQ|9rG?0(-)|8_#VgS*x4P1LPnjM*B#<5=TvihT1C`X!WdRi!5 zk$BSu9FDhE+*hn#JK0Cyy*Nq*5PBp~3&!EtRRT}!T1}!_u<R(tcCzvr;3YeXZqtn{ zb7qQ8Z@P94UMD_<K?m`d#LHSBuF&9igsjCkMu4h>|2=T|LI%9JxET)x&gn-IW~?R= zb<T`pLovYK;O<!>{E8EK^L;rt4cJJV5^|m*G#U$pWAUXH0DF|ujH^YsL4g!^)m0`z z{L&d3DK?A3bcSBRZN=wj9swX8KFlSeo`OK26+XK*oy-&e{-<qsT=(B@RXXV7dtB)7 z_?HM(@e=7t8Mz`DQCBw|S;%EQZibEse})M+Gxz<V#r=FhJ@`7JtF{ARfX>aRS?E0z zBM5L?-{*ko)s*h+9kx{tMU|&;Rhs`PhWLnYsL<p`I(*`i+9>98*9D#MB@G&ice?JN z!wB=z2xLj^Fc}&jFPM~M{-`I9&CklTS=X{l3mx|Lxn5+fR{SJKhPO5h{;qU2dJT0u z03B^C@S2a3U-1TDeWmhVkf`m-NV*`onhpU@B98@e1;13JLXa+%5j6Xj7CR+hK95gU znBFPB9z~|5d7?4XOPz&q>pxd$#J;s?4sIfE$2ojq79{j!7A$ksEi=IouP9+<D94qD z=vYast^2-<o6#UJlDukU{$Ex`%T?(=?f|DvCJQBx{%}tpi|HiMyb1_RKkAr{rupz9 zi%Tk63dho2d1%_=1`5Q%%7^cOL?+I4>NF-5Hl{~}GLQO0oNyP#0!?B~UrX!U_D83D z_;nwwg=Bm$>BKt)4`HoFW<jTXQ&pPcADg8y<(+du`J??RH$<m*JgPvVWFtxATxfQT znWcp(xug556=daol&l%A5Vu=D810)D85%~j<O*}sMgHakB0S2MC~rje8S&}X8SMSg zx3?9Tac>D`1-a>OT?El-@uT6in_z&;HvasyJQ<SihleUeHKQa#g!NDhskb||MHOaf z<M{+(65kCc>wYkffD<fNbQVga*^=UJZk~rB?_&ZPC^%MM4Y`rBhs)%-Zu3SNn(F!F zHoCF{I6t&K+X?);2P7w1ICU5o{7AnX?vwbroRg@@%)1fGd1#LxOUGZN?R_b{POQzA zw!bP+N?yHPBl*e)lZeTPelwkzl1krY@-g#EgnLP~Q7QR2uBX##8iA10=M#S@2Gi@9 zGoS$rOt(V@$tMnspQlwb%L%_zLADPGEV-^h)VuPsr*O;aPCGq1PME)N#>)8@J30>X zPdhOQMOVyF;8nfufPQXY&*D`0=(8y4kEg38A3F6JP9Is!Y~w6wlYUB<GFuKvuKqm* z-OIr+P~HiiJ-UQd@*>?I-PEF;Fy6WGj|Ygif*;i*xZ24Wdz<KW*32b!biu75xL8rn znRp8Spd=G6`*G1ABH&@ir#RpXbxVS1Ej5ZC_(c+m3gISJ@ZvI)P7=$MU6$b_JI_Uu zKKgT*eN2)uYBP(}!QjCJlW=k}P!-7jrBBvfTv9{Vgaz{8(rbSw=>!PGCI?=xcgxsw z2DLz*ra;8Lzd^dctzo`IIP5iB5keaTc|DaQ{`Ed$#-*&W;}EuQ-fesZu+??myu{g0 zN=p%a$WZ5kn|(bBXxOzq7UJAbw&?=A?D-jrIwH3p5#tv5ArF)IO%$yZJ(45~Q@ly) zK7Uu62>jHDGW*WyPb|pYk$WZtyI?gQRyNwwjU%^Z3m2&oy;}BeRCqP(2CSl-gjm;K zv)u_c5eZdBOV6M8W2e+!N+i9{p2eWYLNsF7J477j@ypGo+CnTVgzN<}X7T|)jH~MT znnWrwhLoE9PMf%qz`lh5+3E+ay8dkf5Uh%5dEzFOm%floA+d9f<3tt4G4p)c^juYD z!Ir$44DD?gd?~rF{RYbq{7uyI85sMPcf4L!o<Z?L;Kom@Vm{)wl8}C}D<PRwI%zo% zMW4TRAV%DAXr6C!0l}NL%(_1U(g_)}xGK1NVU@g<8G2oHP9i$#t4S^kKDQ-IHRA3! zRRh&fI%jtJb8(MPh~H{~%O=VL0zRoX1QOZ5-p(&<L~TpM82nb%B4o9pmzX>D!A>ES zP-lXb{Oyfg;Gq30@mhhEd=6vYxjB~Ul+o!HR{p5IR&QI<aZFQeQmZ%eU&LX46;v?n z&$Kp3uC;pzU}B9qF|C*sK|`Whz@e<4el~_x5ZdHYN5a@!pHH>xJ(p)4y|V(zfIGKr zo^f-&;!Eo<zI!!7h@d9YFp7d_*>I=M4d?)n*++5BAv3*L+1B`1z_RLu7EM}?rAb2( zvN~a<|4IA+WKbiXCOJjP>Wtw2lafcEBYmBa)>fai1pXNIR`hTM3+HzZu*=kBMEiFF zoxCIU?gqp<Nf+r-`!Ax6h4a=q+TxQ4ha6*F>C>sTg@+t0hs?OJ?xeyoRBgCw^w+_7 zox1#KdKd$INX>duz$fKroq%9eT#&cNY))3^u_Gfc+SlN;)5?dVw2hCUUUE;dyy?ah z2GmP*|EQEuaA<HuFK|2I>^=+8yTy2`gvplm7<?#VIKMQX^Hq-iV%=oK>Fz1qajx*l ze#8Q!vD-6}pvQ<;{AIV{if;KM@C-z2Tg+a}JegW?)LnS{vF>-_M>bM9hGgOCX?l@3 zf*o2g)%(@Kr&sq-UoAvVJSXPPS)LTHV0)bp9vi)<zcJV(6RD0q!eMn8Crl|ZK_cq$ zKvD!SQf)z%C*FK<62Wf9RX(Sy>NzkT4FJ^@?jl6PG2V?^y1r_o1zy~w;A=3gx!#w0 zS>pFDw{Y|RaxZpYJFJQG$>j4rc!3U`-uoH*NWs?nv|n34#~8S1Q)52Va&o<X4+=99 zH6>~=QQk;9J<oW1UooF3;FODqy8>wNRMqMW6BWA!<OKxZ8|NJvR~@9k3Sq!~xNcD1 z$VkcLdMF2H{1`ppRZ)KWr0-x3@NSX=N-ul{^4@UmO2eF!m!JDf60gQYF%&B9l-(`X z(uiB@3~VgI`|T7F+Lvp7&pYHx_Xa)TfO+@ZseMi?%RfAd+tcWzN6!jfSE|e-)*X&0 z%iFS}*CynPEc?Fz*X4PYdz$!hTK1_$?oEMxFK;rOjuSM9bQwUljJoz(_+wD{k7+mL z&qh~otF8$zG366t=W9jiVW#S$#4q7~r{7aTat+g&x314jY?1>mUaAD)YE?ydv|mM* zb=o~@3}8}TOvWs~7989uE124E*&dyXyGm&)#Q;*H82*xtQ5LuL(yypsaJ=D>|3{St z69d&hR{t8$GXDk4dAJUb@33i|Wr$kQwty#YjcWkY#Xnxs`Wo}#Av(8Ep#*jdUn>rF z<gUk$yf?>LncGWheGe}@+Z!=P<1(u?FrQ9hN00cN3FZBHdUgCMdkX1ymL@;$2&3=t zzgB!|kMudce_l{yYA#QJYl)ElYZy;jEF{ag-~9?NP8!ZmVDAFO?Q-l+q^2W{Ya6~z z`Z*13M`leJSg#Deh&e2{s$e>uwgyaCiS~wIT$Wt{r358$AI6P-{Y^#Hl`;RbxQK27 zKVrJ?;#kuccP%uC`_@6zgd68-%ifF&_1yrQ_N6C>f70aCgA<!QjJ-CRZ5@w_@!dY} zXkRLI`*RU#vJ?dG%6nDxz@@wS+LNTj7d@|nP|2?6o;gv7-G5K&@N#LDD*o2WNIv|9 z1BitBDo69G<Ea4276}HZ4Q^5uf|y6#DY9N~_Jc|)E_6Nv@Y@1rM|Sn}7(4EYSj&IO zg-$=5F*euhqE^PbL#Ivi9_GND*C0Q2oH^}ktmj+k8rg2tqtsUqdmON*1i5H$ChbXt z<>{tzb6M8cwNxtcSIpk07{YwlzWZgq16WtB)VYIo4IvEAy-BT22WTy!JPh$g>I*oF zoTZ}|!oAXxR8YLPG$ZgC%Jf&4<HHZpYS54uVL?o{T{2#})s?y@vceapZs4|eF`MDp zs54gLhzTF|+UAj5s||HUq#Ziu{&H3~+04?q@=qvJe<&F~2ixJr)<J-2Y!h@(n>sGi z4Rtu)o!V_B*4Gd9L4w<M)jix^<DfUf@?O8~=DOE(%G^>|e9e<#yS5pWJBdJ<{yVyd z0cRGtUyGA<aK_pLIYxv@nNYrr!SkAmM%F4LOOS6H4j`Okb#U42{0-_)5sUgcfrz3) z<hA$Gr-FNIL3h(0z8ZqoN9JX}4eGvos=G?&O1CbQmTkqV0dYo>AM2u%rn$gDYU*vH zknt#??Ah1j?V}KH1cyo5tBS!>;}C|yUam~uDQig3owQH6@1R|YLRt43Jr+%=bEKIx zZ~tTmprxOQS}#ITV_}g`>Wo+t`-`4p*<c8|{j{|_Os-Xl`e_#1NEcer#Yv;cQ-;w{ zR&Bb6i{qmpK9^;AYRPPD8dz4xh>D+02=9P6V0i)E?kiDrOWKQ0)Hky!USOHlp5K64 z_m%r6JYA4a^Dn+u*T|(nr*^Ri@j)_J=pI;8RBgd!=h$cFqn@&g@F7$@EHCw<lIo%R zw>-UmL$jrnRmdB7vY{D&K7|gFyFfsSh~0nTY*<DF&URbKRN7&YWV*Df=3e4yPOu2V z?`q701`uXnvtnMDmqy#<t<-^uo)4$lmB40~r(2ahcEFu9lRB{WW9fG*BWWOYMs}_5 zE_m-I9$b5GBJ>9f@V6__E||wU)g69eiu^N_{rOo<fd;(s`~tKoIWN)CJV58cv8@L- zFL69&5gtDDyAXL*Rl1w%b(wl^Hhw-wMo0EPILZm;$v_KfUT6?jN$-r5+6Xp>2hWFs zZ~b!w!IgGeKmsJc)SIvOok4jlF7dxlQ1SKAc`qF;J5C*DuN5u`XR+F^m7k(u1q;G; zZ#L>c6gRS4szb<D9Vm-zmFi`@?|^Lw-ghZ4gg;(yLHSXwXI}^FKX%6YCKnb94<q&( z6sTvlxF2w8Co^s%`w_CQpB+LX3GTvtloLNv?H3@YOTP)`?ueauNm5LGIq^Qz7aXFO zjCdUXqir4Bt0D(K-8_;Rkv3J7){*azRs9igL7Og97lkMzX8i5P8UtZnPL1IMaykN3 zo!PSbq{RcdT5e6w2I*s#x34vl^I{x#>d-8t)O@h%z%>eF1(^(g{4q7-8TihBG?uzk zR`IrxG?OxBT&yW~J+_=#!Ax&d4)S3BKl|m)!-JBjFPBI+{4W_*fi#3ibS}NK!|DO9 zT^P^FtK%%1tPSODr6+}xx*YJen|`;)2ZH6tb!zI4KZB4nr1q3Ug5<vkpu*mzlTOIS z1JG3p?Aq)ds(9qaRPPCLD;ae4IK&Tpq7BwObH%Z~0VGCB=R|Df21M^7P<os-@W;|R zwp0;%g-?GIbHQu6D82K`WpX-k4S+7w%y%_~U_1PKp~hxVKVji=3Tc_8RXyBPS!=s* zL!p=C$7$GdRf5I5R4IrZVwVwQZqBU5>+xwYB7DA}_;NPgk!Y(oqZRLzEtQ+zPpjed zOcu$C(_~mn%Q-y+kYFmZ;mY?>TxU|T9Tdv<;R#}b1btsn$L57$iw=W#3*9f{i?k*= zfD23>#r?bLK@5<C+N5;|E%sFPX2sId&P8B?ZBn{>ymxTA{W^xC!Cyp2JW?G&RZTrm t`7s;~UTv}ICF>ZL2G=a4wcR@6_(^h+E}2fC{jvvvjP%VAWqK~*{{zcQ_HF<G diff --git a/pykeg/web/static/images/whats-on-tap.png b/pykeg/web/static/images/whats-on-tap.png deleted file mode 100644 index e6b3b2b5b1d0615648ea090a91d738eb2816bb42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12045 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 KGIi4CA^#6{SG@`V diff --git a/pykeg/web/static/js/jquery-1.9.1.min.js b/pykeg/web/static/js/jquery-1.9.1.min.js deleted file mode 100644 index 006e95310..000000000 --- a/pykeg/web/static/js/jquery-1.9.1.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery.min.map -*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; -return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) -}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); \ No newline at end of file diff --git a/pykeg/web/static/js/jquery.autounits.js b/pykeg/web/static/js/jquery.autounits.js deleted file mode 100644 index 2f35c8868..000000000 --- a/pykeg/web/static/js/jquery.autounits.js +++ /dev/null @@ -1,78 +0,0 @@ -/* - * autounits: a jQuery plugin, version: 0.1.0 (2011-08-27) - * @requires jQuery v1.2.3 or later - */ -(function($) { - - $.fn.autounits = function(options) { - var settings = { - 'metric': true, - 'humanize': true, - }; - - if (options) { - $.extend(settings, options); - } - - this.each(function() { - refresh(settings, this); - }); - return this; - }; - - function refresh(settings, self) { - var data = prepareData(self); - $(self).text(toHuman(settings, data.volume_ml)); - return this; - } - - function prepareData(self) { - var element = $(self); - if (!element.data("autounits")) { - var text = $.trim(element.text()); - element.data("autounits", { - num: $(self).find("span.num").text(), - unit: $(self).find("span.unit").text(), - volume_ml: $(self).find("span.num").text(), - }); - } - return element.data("autounits"); - } - - function toOunces(amountInMilliliters) { - return 0.0338140227 * amountInMilliliters; - } - - function toHuman(settings, volume_ml) { - volume_ml = parseFloat(volume_ml); - - if (!settings.metric) { - var amt = toOunces(volume_ml); - var units = "oz"; - - if (amt < 10) { - amt = amt.toFixed(2); - } else if (amt < 128) { - amt = amt.toFixed(1); - } else { - amt = amt / 16.0; - amt = amt.toFixed(0); - units = "pints"; - } - - return amt + " " + units; - } else { - var liters = volume_ml / 1000.0; - if (liters < 0.5) { - liters = liters.toFixed(2); - } else if (liters < 100) { - liters = liters.toFixed(1); - } else { - liters = liters.toFixed(0); - } - - return liters + " L"; - } - } - -})(jQuery); diff --git a/pykeg/web/static/js/jquery.cookie.js b/pykeg/web/static/js/jquery.cookie.js deleted file mode 100644 index 6df1faca2..000000000 --- a/pykeg/web/static/js/jquery.cookie.js +++ /dev/null @@ -1,96 +0,0 @@ -/** - * Cookie plugin - * - * Copyright (c) 2006 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - */ - -/** - * Create a cookie with the given name and value and other optional parameters. - * - * @example $.cookie('the_cookie', 'the_value'); - * @desc Set the value of a cookie. - * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); - * @desc Create a cookie with all available options. - * @example $.cookie('the_cookie', 'the_value'); - * @desc Create a session cookie. - * @example $.cookie('the_cookie', null); - * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain - * used when the cookie was set. - * - * @param String name The name of the cookie. - * @param String value The value of the cookie. - * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. - * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. - * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. - * If set to null or omitted, the cookie will be a session cookie and will not be retained - * when the the browser exits. - * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). - * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). - * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will - * require a secure protocol (like HTTPS). - * @type undefined - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ - -/** - * Get the value of a cookie with the given name. - * - * @example $.cookie('the_cookie'); - * @desc Get the value of a cookie. - * - * @param String name The name of the cookie. - * @return The value of the cookie. - * @type String - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ -jQuery.cookie = function(name, value, options) { - if (typeof value != 'undefined') { // name and value given, set cookie - options = options || {}; - if (value === null) { - value = ''; - options.expires = -1; - } - var expires = ''; - if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { - var date; - if (typeof options.expires == 'number') { - date = new Date(); - date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); - } else { - date = options.expires; - } - expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE - } - // CAUTION: Needed to parenthesize options.path and options.domain - // in the following expressions, otherwise they evaluate to undefined - // in the packed version for some reason... - var path = options.path ? '; path=' + (options.path) : ''; - var domain = options.domain ? '; domain=' + (options.domain) : ''; - var secure = options.secure ? '; secure' : ''; - document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); - } else { // only name given, get cookie - var cookieValue = null; - if (document.cookie && document.cookie != '') { - var cookies = document.cookie.split(';'); - for (var i = 0; i < cookies.length; i++) { - var cookie = jQuery.trim(cookies[i]); - // Does this cookie string begin with the name we want? - if (cookie.substring(0, name.length + 1) == (name + '=')) { - cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); - break; - } - } - } - return cookieValue; - } -}; \ No newline at end of file diff --git a/pykeg/web/static/js/jquery.cycle2.center.min.js b/pykeg/web/static/js/jquery.cycle2.center.min.js deleted file mode 100644 index cf9033299..000000000 --- a/pykeg/web/static/js/jquery.cycle2.center.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20140128 */ -(function(e){"use strict";e.extend(e.fn.cycle.defaults,{centerHorz:!1,centerVert:!1}),e(document).on("cycle-pre-initialize",function(i,t){function n(){clearTimeout(c),c=setTimeout(l,50)}function s(){clearTimeout(c),clearTimeout(a),e(window).off("resize orientationchange",n)}function o(){t.slides.each(r)}function l(){r.apply(t.container.find("."+t.slideActiveClass)),clearTimeout(a),a=setTimeout(o,50)}function r(){var i=e(this),n=t.container.width(),s=t.container.height(),o=i.outerWidth(),l=i.outerHeight();o&&(t.centerHorz&&n>=o&&i.css("marginLeft",(n-o)/2),t.centerVert&&s>=l&&i.css("marginTop",(s-l)/2))}if(t.centerHorz||t.centerVert){var c,a;e(window).on("resize orientationchange load",n),t.container.on("cycle-destroyed",s),t.container.on("cycle-initialized cycle-slide-added cycle-slide-removed",function(){n()}),l()}})})(jQuery); \ No newline at end of file diff --git a/pykeg/web/static/js/jquery.cycle2.min.js b/pykeg/web/static/js/jquery.cycle2.min.js deleted file mode 100644 index 6e31c8250..000000000 --- a/pykeg/web/static/js/jquery.cycle2.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! -* jQuery Cycle2; version: 2.1.1 build: 20140128 -* http://jquery.malsup.com/cycle2/ -* Copyright (c) 2014 M. Alsup; Dual licensed: MIT/GPL -*/ -(function(e){"use strict";function t(e){return(e||"").toLowerCase()}var i="2.1.1";e.fn.cycle=function(i){var n;return 0!==this.length||e.isReady?this.each(function(){var n,s,o,c,l=e(this),r=e.fn.cycle.log;if(!l.data("cycle.opts")){(l.data("cycle-log")===!1||i&&i.log===!1||s&&s.log===!1)&&(r=e.noop),r("--c2 init--"),n=l.data();for(var a in n)n.hasOwnProperty(a)&&/^cycle[A-Z]+/.test(a)&&(c=n[a],o=a.match(/^cycle(.*)/)[1].replace(/^[A-Z]/,t),r(o+":",c,"("+typeof c+")"),n[o]=c);s=e.extend({},e.fn.cycle.defaults,n,i||{}),s.timeoutId=0,s.paused=s.paused||!1,s.container=l,s._maxZ=s.maxZ,s.API=e.extend({_container:l},e.fn.cycle.API),s.API.log=r,s.API.trigger=function(e,t){return s.container.trigger(e,t),s.API},l.data("cycle.opts",s),l.data("cycle.API",s.API),s.API.trigger("cycle-bootstrap",[s,s.API]),s.API.addInitialSlides(),s.API.preInitSlideshow(),s.slides.length&&s.API.initSlideshow()}}):(n={s:this.selector,c:this.context},e.fn.cycle.log("requeuing slideshow (dom not ready)"),e(function(){e(n.s,n.c).cycle(i)}),this)},e.fn.cycle.API={opts:function(){return this._container.data("cycle.opts")},addInitialSlides:function(){var t=this.opts(),i=t.slides;t.slideCount=0,t.slides=e(),i=i.jquery?i:t.container.find(i),t.random&&i.sort(function(){return Math.random()-.5}),t.API.add(i)},preInitSlideshow:function(){var t=this.opts();t.API.trigger("cycle-pre-initialize",[t]);var i=e.fn.cycle.transitions[t.fx];i&&e.isFunction(i.preInit)&&i.preInit(t),t._preInitialized=!0},postInitSlideshow:function(){var t=this.opts();t.API.trigger("cycle-post-initialize",[t]);var i=e.fn.cycle.transitions[t.fx];i&&e.isFunction(i.postInit)&&i.postInit(t)},initSlideshow:function(){var t,i=this.opts(),n=i.container;i.API.calcFirstSlide(),"static"==i.container.css("position")&&i.container.css("position","relative"),e(i.slides[i.currSlide]).css({opacity:1,display:"block",visibility:"visible"}),i.API.stackSlides(i.slides[i.currSlide],i.slides[i.nextSlide],!i.reverse),i.pauseOnHover&&(i.pauseOnHover!==!0&&(n=e(i.pauseOnHover)),n.hover(function(){i.API.pause(!0)},function(){i.API.resume(!0)})),i.timeout&&(t=i.API.getSlideOpts(i.currSlide),i.API.queueTransition(t,t.timeout+i.delay)),i._initialized=!0,i.API.updateView(!0),i.API.trigger("cycle-initialized",[i]),i.API.postInitSlideshow()},pause:function(t){var i=this.opts(),n=i.API.getSlideOpts(),s=i.hoverPaused||i.paused;t?i.hoverPaused=!0:i.paused=!0,s||(i.container.addClass("cycle-paused"),i.API.trigger("cycle-paused",[i]).log("cycle-paused"),n.timeout&&(clearTimeout(i.timeoutId),i.timeoutId=0,i._remainingTimeout-=e.now()-i._lastQueue,(0>i._remainingTimeout||isNaN(i._remainingTimeout))&&(i._remainingTimeout=void 0)))},resume:function(e){var t=this.opts(),i=!t.hoverPaused&&!t.paused;e?t.hoverPaused=!1:t.paused=!1,i||(t.container.removeClass("cycle-paused"),0===t.slides.filter(":animated").length&&t.API.queueTransition(t.API.getSlideOpts(),t._remainingTimeout),t.API.trigger("cycle-resumed",[t,t._remainingTimeout]).log("cycle-resumed"))},add:function(t,i){var n,s=this.opts(),o=s.slideCount,c=!1;"string"==e.type(t)&&(t=e.trim(t)),e(t).each(function(){var t,n=e(this);i?s.container.prepend(n):s.container.append(n),s.slideCount++,t=s.API.buildSlideOpts(n),s.slides=i?e(n).add(s.slides):s.slides.add(n),s.API.initSlide(t,n,--s._maxZ),n.data("cycle.opts",t),s.API.trigger("cycle-slide-added",[s,t,n])}),s.API.updateView(!0),c=s._preInitialized&&2>o&&s.slideCount>=1,c&&(s._initialized?s.timeout&&(n=s.slides.length,s.nextSlide=s.reverse?n-1:1,s.timeoutId||s.API.queueTransition(s)):s.API.initSlideshow())},calcFirstSlide:function(){var e,t=this.opts();e=parseInt(t.startingSlide||0,10),(e>=t.slides.length||0>e)&&(e=0),t.currSlide=e,t.reverse?(t.nextSlide=e-1,0>t.nextSlide&&(t.nextSlide=t.slides.length-1)):(t.nextSlide=e+1,t.nextSlide==t.slides.length&&(t.nextSlide=0))},calcNextSlide:function(){var e,t=this.opts();t.reverse?(e=0>t.nextSlide-1,t.nextSlide=e?t.slideCount-1:t.nextSlide-1,t.currSlide=e?0:t.nextSlide+1):(e=t.nextSlide+1==t.slides.length,t.nextSlide=e?0:t.nextSlide+1,t.currSlide=e?t.slides.length-1:t.nextSlide-1)},calcTx:function(t,i){var n,s=t;return i&&s.manualFx&&(n=e.fn.cycle.transitions[s.manualFx]),n||(n=e.fn.cycle.transitions[s.fx]),n||(n=e.fn.cycle.transitions.fade,s.API.log('Transition "'+s.fx+'" not found. Using fade.')),n},prepareTx:function(e,t){var i,n,s,o,c,l=this.opts();return 2>l.slideCount?(l.timeoutId=0,void 0):(!e||l.busy&&!l.manualTrump||(l.API.stopTransition(),l.busy=!1,clearTimeout(l.timeoutId),l.timeoutId=0),l.busy||(0!==l.timeoutId||e)&&(n=l.slides[l.currSlide],s=l.slides[l.nextSlide],o=l.API.getSlideOpts(l.nextSlide),c=l.API.calcTx(o,e),l._tx=c,e&&void 0!==o.manualSpeed&&(o.speed=o.manualSpeed),l.nextSlide!=l.currSlide&&(e||!l.paused&&!l.hoverPaused&&l.timeout)?(l.API.trigger("cycle-before",[o,n,s,t]),c.before&&c.before(o,n,s,t),i=function(){l.busy=!1,l.container.data("cycle.opts")&&(c.after&&c.after(o,n,s,t),l.API.trigger("cycle-after",[o,n,s,t]),l.API.queueTransition(o),l.API.updateView(!0))},l.busy=!0,c.transition?c.transition(o,n,s,t,i):l.API.doTransition(o,n,s,t,i),l.API.calcNextSlide(),l.API.updateView()):l.API.queueTransition(o)),void 0)},doTransition:function(t,i,n,s,o){var c=t,l=e(i),r=e(n),a=function(){r.animate(c.animIn||{opacity:1},c.speed,c.easeIn||c.easing,o)};r.css(c.cssBefore||{}),l.animate(c.animOut||{},c.speed,c.easeOut||c.easing,function(){l.css(c.cssAfter||{}),c.sync||a()}),c.sync&&a()},queueTransition:function(t,i){var n=this.opts(),s=void 0!==i?i:t.timeout;return 0===n.nextSlide&&0===--n.loop?(n.API.log("terminating; loop=0"),n.timeout=0,s?setTimeout(function(){n.API.trigger("cycle-finished",[n])},s):n.API.trigger("cycle-finished",[n]),n.nextSlide=n.currSlide,void 0):(s&&(n._lastQueue=e.now(),void 0===i&&(n._remainingTimeout=t.timeout),n.paused||n.hoverPaused||(n.timeoutId=setTimeout(function(){n.API.prepareTx(!1,!n.reverse)},s))),void 0)},stopTransition:function(){var e=this.opts();e.slides.filter(":animated").length&&(e.slides.stop(!1,!0),e.API.trigger("cycle-transition-stopped",[e])),e._tx&&e._tx.stopTransition&&e._tx.stopTransition(e)},advanceSlide:function(e){var t=this.opts();return clearTimeout(t.timeoutId),t.timeoutId=0,t.nextSlide=t.currSlide+e,0>t.nextSlide?t.nextSlide=t.slides.length-1:t.nextSlide>=t.slides.length&&(t.nextSlide=0),t.API.prepareTx(!0,e>=0),!1},buildSlideOpts:function(i){var n,s,o=this.opts(),c=i.data()||{};for(var l in c)c.hasOwnProperty(l)&&/^cycle[A-Z]+/.test(l)&&(n=c[l],s=l.match(/^cycle(.*)/)[1].replace(/^[A-Z]/,t),o.API.log("["+(o.slideCount-1)+"]",s+":",n,"("+typeof n+")"),c[s]=n);c=e.extend({},e.fn.cycle.defaults,o,c),c.slideNum=o.slideCount;try{delete c.API,delete c.slideCount,delete c.currSlide,delete c.nextSlide,delete c.slides}catch(r){}return c},getSlideOpts:function(t){var i=this.opts();void 0===t&&(t=i.currSlide);var n=i.slides[t],s=e(n).data("cycle.opts");return e.extend({},i,s)},initSlide:function(t,i,n){var s=this.opts();i.css(t.slideCss||{}),n>0&&i.css("zIndex",n),isNaN(t.speed)&&(t.speed=e.fx.speeds[t.speed]||e.fx.speeds._default),t.sync||(t.speed=t.speed/2),i.addClass(s.slideClass)},updateView:function(e,t){var i=this.opts();if(i._initialized){var n=i.API.getSlideOpts(),s=i.slides[i.currSlide];!e&&t!==!0&&(i.API.trigger("cycle-update-view-before",[i,n,s]),0>i.updateView)||(i.slideActiveClass&&i.slides.removeClass(i.slideActiveClass).eq(i.currSlide).addClass(i.slideActiveClass),e&&i.hideNonActive&&i.slides.filter(":not(."+i.slideActiveClass+")").css("visibility","hidden"),0===i.updateView&&setTimeout(function(){i.API.trigger("cycle-update-view",[i,n,s,e])},n.speed/(i.sync?2:1)),0!==i.updateView&&i.API.trigger("cycle-update-view",[i,n,s,e]),e&&i.API.trigger("cycle-update-view-after",[i,n,s]))}},getComponent:function(t){var i=this.opts(),n=i[t];return"string"==typeof n?/^\s*[\>|\+|~]/.test(n)?i.container.find(n):e(n):n.jquery?n:e(n)},stackSlides:function(t,i,n){var s=this.opts();t||(t=s.slides[s.currSlide],i=s.slides[s.nextSlide],n=!s.reverse),e(t).css("zIndex",s.maxZ);var o,c=s.maxZ-2,l=s.slideCount;if(n){for(o=s.currSlide+1;l>o;o++)e(s.slides[o]).css("zIndex",c--);for(o=0;s.currSlide>o;o++)e(s.slides[o]).css("zIndex",c--)}else{for(o=s.currSlide-1;o>=0;o--)e(s.slides[o]).css("zIndex",c--);for(o=l-1;o>s.currSlide;o--)e(s.slides[o]).css("zIndex",c--)}e(i).css("zIndex",s.maxZ-1)},getSlideIndex:function(e){return this.opts().slides.index(e)}},e.fn.cycle.log=function(){window.console&&console.log&&console.log("[cycle2] "+Array.prototype.join.call(arguments," "))},e.fn.cycle.version=function(){return"Cycle2: "+i},e.fn.cycle.transitions={custom:{},none:{before:function(e,t,i,n){e.API.stackSlides(i,t,n),e.cssBefore={opacity:1,visibility:"visible",display:"block"}}},fade:{before:function(t,i,n,s){var o=t.API.getSlideOpts(t.nextSlide).slideCss||{};t.API.stackSlides(i,n,s),t.cssBefore=e.extend(o,{opacity:0,visibility:"visible",display:"block"}),t.animIn={opacity:1},t.animOut={opacity:0}}},fadeout:{before:function(t,i,n,s){var o=t.API.getSlideOpts(t.nextSlide).slideCss||{};t.API.stackSlides(i,n,s),t.cssBefore=e.extend(o,{opacity:1,visibility:"visible",display:"block"}),t.animOut={opacity:0}}},scrollHorz:{before:function(e,t,i,n){e.API.stackSlides(t,i,n);var s=e.container.css("overflow","hidden").width();e.cssBefore={left:n?s:-s,top:0,opacity:1,visibility:"visible",display:"block"},e.cssAfter={zIndex:e._maxZ-2,left:0},e.animIn={left:0},e.animOut={left:n?-s:s}}}},e.fn.cycle.defaults={allowWrap:!0,autoSelector:".cycle-slideshow[data-cycle-auto-init!=false]",delay:0,easing:null,fx:"fade",hideNonActive:!0,loop:0,manualFx:void 0,manualSpeed:void 0,manualTrump:!0,maxZ:100,pauseOnHover:!1,reverse:!1,slideActiveClass:"cycle-slide-active",slideClass:"cycle-slide",slideCss:{position:"absolute",top:0,left:0},slides:"> img",speed:500,startingSlide:0,sync:!0,timeout:4e3,updateView:0},e(document).ready(function(){e(e.fn.cycle.defaults.autoSelector).cycle()})})(jQuery),/*! Cycle2 autoheight plugin; Copyright (c) M.Alsup, 2012; version: 20130913 */ -function(e){"use strict";function t(t,n){var s,o,c,l=n.autoHeight;if("container"==l)o=e(n.slides[n.currSlide]).outerHeight(),n.container.height(o);else if(n._autoHeightRatio)n.container.height(n.container.width()/n._autoHeightRatio);else if("calc"===l||"number"==e.type(l)&&l>=0){if(c="calc"===l?i(t,n):l>=n.slides.length?0:l,c==n._sentinelIndex)return;n._sentinelIndex=c,n._sentinel&&n._sentinel.remove(),s=e(n.slides[c].cloneNode(!0)),s.removeAttr("id name rel").find("[id],[name],[rel]").removeAttr("id name rel"),s.css({position:"static",visibility:"hidden",display:"block"}).prependTo(n.container).addClass("cycle-sentinel cycle-slide").removeClass("cycle-slide-active"),s.find("*").css("visibility","hidden"),n._sentinel=s}}function i(t,i){var n=0,s=-1;return i.slides.each(function(t){var i=e(this).height();i>s&&(s=i,n=t)}),n}function n(t,i,n,s){var o=e(s).outerHeight();i.container.animate({height:o},i.autoHeightSpeed,i.autoHeightEasing)}function s(i,o){o._autoHeightOnResize&&(e(window).off("resize orientationchange",o._autoHeightOnResize),o._autoHeightOnResize=null),o.container.off("cycle-slide-added cycle-slide-removed",t),o.container.off("cycle-destroyed",s),o.container.off("cycle-before",n),o._sentinel&&(o._sentinel.remove(),o._sentinel=null)}e.extend(e.fn.cycle.defaults,{autoHeight:0,autoHeightSpeed:250,autoHeightEasing:null}),e(document).on("cycle-initialized",function(i,o){function c(){t(i,o)}var l,r=o.autoHeight,a=e.type(r),d=null;("string"===a||"number"===a)&&(o.container.on("cycle-slide-added cycle-slide-removed",t),o.container.on("cycle-destroyed",s),"container"==r?o.container.on("cycle-before",n):"string"===a&&/\d+\:\d+/.test(r)&&(l=r.match(/(\d+)\:(\d+)/),l=l[1]/l[2],o._autoHeightRatio=l),"number"!==a&&(o._autoHeightOnResize=function(){clearTimeout(d),d=setTimeout(c,50)},e(window).on("resize orientationchange",o._autoHeightOnResize)),setTimeout(c,30))})}(jQuery),/*! caption plugin for Cycle2; version: 20130306 */ -function(e){"use strict";e.extend(e.fn.cycle.defaults,{caption:"> .cycle-caption",captionTemplate:"{{slideNum}} / {{slideCount}}",overlay:"> .cycle-overlay",overlayTemplate:"<div>{{title}}</div><div>{{desc}}</div>",captionModule:"caption"}),e(document).on("cycle-update-view",function(t,i,n,s){"caption"===i.captionModule&&e.each(["caption","overlay"],function(){var e=this,t=n[e+"Template"],o=i.API.getComponent(e);o.length&&t?(o.html(i.API.tmpl(t,n,i,s)),o.show()):o.hide()})}),e(document).on("cycle-destroyed",function(t,i){var n;e.each(["caption","overlay"],function(){var e=this,t=i[e+"Template"];i[e]&&t&&(n=i.API.getComponent("caption"),n.empty())})})}(jQuery),/*! command plugin for Cycle2; version: 20130707 */ -function(e){"use strict";var t=e.fn.cycle;e.fn.cycle=function(i){var n,s,o,c=e.makeArray(arguments);return"number"==e.type(i)?this.cycle("goto",i):"string"==e.type(i)?this.each(function(){var l;return n=i,o=e(this).data("cycle.opts"),void 0===o?(t.log('slideshow must be initialized before sending commands; "'+n+'" ignored'),void 0):(n="goto"==n?"jump":n,s=o.API[n],e.isFunction(s)?(l=e.makeArray(c),l.shift(),s.apply(o.API,l)):(t.log("unknown command: ",n),void 0))}):t.apply(this,arguments)},e.extend(e.fn.cycle,t),e.extend(t.API,{next:function(){var e=this.opts();if(!e.busy||e.manualTrump){var t=e.reverse?-1:1;e.allowWrap===!1&&e.currSlide+t>=e.slideCount||(e.API.advanceSlide(t),e.API.trigger("cycle-next",[e]).log("cycle-next"))}},prev:function(){var e=this.opts();if(!e.busy||e.manualTrump){var t=e.reverse?1:-1;e.allowWrap===!1&&0>e.currSlide+t||(e.API.advanceSlide(t),e.API.trigger("cycle-prev",[e]).log("cycle-prev"))}},destroy:function(){this.stop();var t=this.opts(),i=e.isFunction(e._data)?e._data:e.noop;clearTimeout(t.timeoutId),t.timeoutId=0,t.API.stop(),t.API.trigger("cycle-destroyed",[t]).log("cycle-destroyed"),t.container.removeData(),i(t.container[0],"parsedAttrs",!1),t.retainStylesOnDestroy||(t.container.removeAttr("style"),t.slides.removeAttr("style"),t.slides.removeClass(t.slideActiveClass)),t.slides.each(function(){e(this).removeData(),i(this,"parsedAttrs",!1)})},jump:function(e){var t,i=this.opts();if(!i.busy||i.manualTrump){var n=parseInt(e,10);if(isNaN(n)||0>n||n>=i.slides.length)return i.API.log("goto: invalid slide index: "+n),void 0;if(n==i.currSlide)return i.API.log("goto: skipping, already on slide",n),void 0;i.nextSlide=n,clearTimeout(i.timeoutId),i.timeoutId=0,i.API.log("goto: ",n," (zero-index)"),t=i.currSlide<i.nextSlide,i.API.prepareTx(!0,t)}},stop:function(){var t=this.opts(),i=t.container;clearTimeout(t.timeoutId),t.timeoutId=0,t.API.stopTransition(),t.pauseOnHover&&(t.pauseOnHover!==!0&&(i=e(t.pauseOnHover)),i.off("mouseenter mouseleave")),t.API.trigger("cycle-stopped",[t]).log("cycle-stopped")},reinit:function(){var e=this.opts();e.API.destroy(),e.container.cycle()},remove:function(t){for(var i,n,s=this.opts(),o=[],c=1,l=0;s.slides.length>l;l++)i=s.slides[l],l==t?n=i:(o.push(i),e(i).data("cycle.opts").slideNum=c,c++);n&&(s.slides=e(o),s.slideCount--,e(n).remove(),t==s.currSlide?s.API.advanceSlide(1):s.currSlide>t?s.currSlide--:s.currSlide++,s.API.trigger("cycle-slide-removed",[s,t,n]).log("cycle-slide-removed"),s.API.updateView())}}),e(document).on("click.cycle","[data-cycle-cmd]",function(t){t.preventDefault();var i=e(this),n=i.data("cycle-cmd"),s=i.data("cycle-context")||".cycle-slideshow";e(s).cycle(n,i.data("cycle-arg"))})}(jQuery),/*! hash plugin for Cycle2; version: 20130905 */ -function(e){"use strict";function t(t,i){var n;return t._hashFence?(t._hashFence=!1,void 0):(n=window.location.hash.substring(1),t.slides.each(function(s){if(e(this).data("cycle-hash")==n){if(i===!0)t.startingSlide=s;else{var o=s>t.currSlide;t.nextSlide=s,t.API.prepareTx(!0,o)}return!1}}),void 0)}e(document).on("cycle-pre-initialize",function(i,n){t(n,!0),n._onHashChange=function(){t(n,!1)},e(window).on("hashchange",n._onHashChange)}),e(document).on("cycle-update-view",function(e,t,i){i.hash&&"#"+i.hash!=window.location.hash&&(t._hashFence=!0,window.location.hash=i.hash)}),e(document).on("cycle-destroyed",function(t,i){i._onHashChange&&e(window).off("hashchange",i._onHashChange)})}(jQuery),/*! loader plugin for Cycle2; version: 20131121 */ -function(e){"use strict";e.extend(e.fn.cycle.defaults,{loader:!1}),e(document).on("cycle-bootstrap",function(t,i){function n(t,n){function o(t){var o;"wait"==i.loader?(l.push(t),0===a&&(l.sort(c),s.apply(i.API,[l,n]),i.container.removeClass("cycle-loading"))):(o=e(i.slides[i.currSlide]),s.apply(i.API,[t,n]),o.show(),i.container.removeClass("cycle-loading"))}function c(e,t){return e.data("index")-t.data("index")}var l=[];if("string"==e.type(t))t=e.trim(t);else if("array"===e.type(t))for(var r=0;t.length>r;r++)t[r]=e(t[r])[0];t=e(t);var a=t.length;a&&(t.css("visibility","hidden").appendTo("body").each(function(t){function c(){0===--r&&(--a,o(d))}var r=0,d=e(this),u=d.is("img")?d:d.find("img");return d.data("index",t),u=u.filter(":not(.cycle-loader-ignore)").filter(':not([src=""])'),u.length?(r=u.length,u.each(function(){this.complete?c():e(this).load(function(){c()}).on("error",function(){0===--r&&(i.API.log("slide skipped; img not loaded:",this.src),0===--a&&"wait"==i.loader&&s.apply(i.API,[l,n]))})}),void 0):(--a,l.push(d),void 0)}),a&&i.container.addClass("cycle-loading"))}var s;i.loader&&(s=i.API.add,i.API.add=n)})}(jQuery),/*! pager plugin for Cycle2; version: 20130525 */ -function(e){"use strict";function t(t,i,n){var s,o=t.API.getComponent("pager");o.each(function(){var o=e(this);if(i.pagerTemplate){var c=t.API.tmpl(i.pagerTemplate,i,t,n[0]);s=e(c).appendTo(o)}else s=o.children().eq(t.slideCount-1);s.on(t.pagerEvent,function(e){e.preventDefault(),t.API.page(o,e.currentTarget)})})}function i(e,t){var i=this.opts();if(!i.busy||i.manualTrump){var n=e.children().index(t),s=n,o=s>i.currSlide;i.currSlide!=s&&(i.nextSlide=s,i.API.prepareTx(!0,o),i.API.trigger("cycle-pager-activated",[i,e,t]))}}e.extend(e.fn.cycle.defaults,{pager:"> .cycle-pager",pagerActiveClass:"cycle-pager-active",pagerEvent:"click.cycle",pagerTemplate:"<span>•</span>"}),e(document).on("cycle-bootstrap",function(e,i,n){n.buildPagerLink=t}),e(document).on("cycle-slide-added",function(e,t,n,s){t.pager&&(t.API.buildPagerLink(t,n,s),t.API.page=i)}),e(document).on("cycle-slide-removed",function(t,i,n){if(i.pager){var s=i.API.getComponent("pager");s.each(function(){var t=e(this);e(t.children()[n]).remove()})}}),e(document).on("cycle-update-view",function(t,i){var n;i.pager&&(n=i.API.getComponent("pager"),n.each(function(){e(this).children().removeClass(i.pagerActiveClass).eq(i.currSlide).addClass(i.pagerActiveClass)}))}),e(document).on("cycle-destroyed",function(e,t){var i=t.API.getComponent("pager");i&&(i.children().off(t.pagerEvent),t.pagerTemplate&&i.empty())})}(jQuery),/*! prevnext plugin for Cycle2; version: 20130709 */ -function(e){"use strict";e.extend(e.fn.cycle.defaults,{next:"> .cycle-next",nextEvent:"click.cycle",disabledClass:"disabled",prev:"> .cycle-prev",prevEvent:"click.cycle",swipe:!1}),e(document).on("cycle-initialized",function(e,t){if(t.API.getComponent("next").on(t.nextEvent,function(e){e.preventDefault(),t.API.next()}),t.API.getComponent("prev").on(t.prevEvent,function(e){e.preventDefault(),t.API.prev()}),t.swipe){var i=t.swipeVert?"swipeUp.cycle":"swipeLeft.cycle swipeleft.cycle",n=t.swipeVert?"swipeDown.cycle":"swipeRight.cycle swiperight.cycle";t.container.on(i,function(){t.API.next()}),t.container.on(n,function(){t.API.prev()})}}),e(document).on("cycle-update-view",function(e,t){if(!t.allowWrap){var i=t.disabledClass,n=t.API.getComponent("next"),s=t.API.getComponent("prev"),o=t._prevBoundry||0,c=void 0!==t._nextBoundry?t._nextBoundry:t.slideCount-1;t.currSlide==c?n.addClass(i).prop("disabled",!0):n.removeClass(i).prop("disabled",!1),t.currSlide===o?s.addClass(i).prop("disabled",!0):s.removeClass(i).prop("disabled",!1)}}),e(document).on("cycle-destroyed",function(e,t){t.API.getComponent("prev").off(t.nextEvent),t.API.getComponent("next").off(t.prevEvent),t.container.off("swipeleft.cycle swiperight.cycle swipeLeft.cycle swipeRight.cycle swipeUp.cycle swipeDown.cycle")})}(jQuery),/*! progressive loader plugin for Cycle2; version: 20130315 */ -function(e){"use strict";e.extend(e.fn.cycle.defaults,{progressive:!1}),e(document).on("cycle-pre-initialize",function(t,i){if(i.progressive){var n,s,o=i.API,c=o.next,l=o.prev,r=o.prepareTx,a=e.type(i.progressive);if("array"==a)n=i.progressive;else if(e.isFunction(i.progressive))n=i.progressive(i);else if("string"==a){if(s=e(i.progressive),n=e.trim(s.html()),!n)return;if(/^(\[)/.test(n))try{n=e.parseJSON(n)}catch(d){return o.log("error parsing progressive slides",d),void 0}else n=n.split(RegExp(s.data("cycle-split")||"\n")),n[n.length-1]||n.pop()}r&&(o.prepareTx=function(e,t){var s,o;return e||0===n.length?(r.apply(i.API,[e,t]),void 0):(t&&i.currSlide==i.slideCount-1?(o=n[0],n=n.slice(1),i.container.one("cycle-slide-added",function(e,t){setTimeout(function(){t.API.advanceSlide(1)},50)}),i.API.add(o)):t||0!==i.currSlide?r.apply(i.API,[e,t]):(s=n.length-1,o=n[s],n=n.slice(0,s),i.container.one("cycle-slide-added",function(e,t){setTimeout(function(){t.currSlide=1,t.API.advanceSlide(-1)},50)}),i.API.add(o,!0)),void 0)}),c&&(o.next=function(){var e=this.opts();if(n.length&&e.currSlide==e.slideCount-1){var t=n[0];n=n.slice(1),e.container.one("cycle-slide-added",function(e,t){c.apply(t.API),t.container.removeClass("cycle-loading")}),e.container.addClass("cycle-loading"),e.API.add(t)}else c.apply(e.API)}),l&&(o.prev=function(){var e=this.opts();if(n.length&&0===e.currSlide){var t=n.length-1,i=n[t];n=n.slice(0,t),e.container.one("cycle-slide-added",function(e,t){t.currSlide=1,t.API.advanceSlide(-1),t.container.removeClass("cycle-loading")}),e.container.addClass("cycle-loading"),e.API.add(i,!0)}else l.apply(e.API)})}})}(jQuery),/*! tmpl plugin for Cycle2; version: 20121227 */ -function(e){"use strict";e.extend(e.fn.cycle.defaults,{tmplRegex:"{{((.)?.*?)}}"}),e.extend(e.fn.cycle.API,{tmpl:function(t,i){var n=RegExp(i.tmplRegex||e.fn.cycle.defaults.tmplRegex,"g"),s=e.makeArray(arguments);return s.shift(),t.replace(n,function(t,i){var n,o,c,l,r=i.split(".");for(n=0;s.length>n;n++)if(c=s[n]){if(r.length>1)for(l=c,o=0;r.length>o;o++)c=l,l=l[r[o]]||i;else l=c[i];if(e.isFunction(l))return l.apply(c,s);if(void 0!==l&&null!==l&&l!=i)return l}return i})}})}(jQuery); -//@ sourceMappingURL=jquery.cycle2.js.map \ No newline at end of file diff --git a/pykeg/web/static/js/jquery.lazyload.js b/pykeg/web/static/js/jquery.lazyload.js deleted file mode 100644 index 26cc80193..000000000 --- a/pykeg/web/static/js/jquery.lazyload.js +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Lazy Load - jQuery plugin for lazy loading images - * - * Copyright (c) 2007-2013 Mika Tuupola - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Project home: - * http://www.appelsiini.net/projects/lazyload - * - * Version: 1.9.0 - * - */ - -(function($, window, document, undefined) { - var $window = $(window); - - $.fn.lazyload = function(options) { - var elements = this; - var $container; - var settings = { - threshold : 0, - failure_limit : 0, - event : "scroll", - effect : "show", - container : window, - data_attribute : "original", - skip_invisible : true, - appear : null, - load : null, - placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" - }; - - function update() { - var counter = 0; - - elements.each(function() { - var $this = $(this); - if (settings.skip_invisible && !$this.is(":visible")) { - return; - } - if ($.abovethetop(this, settings) || - $.leftofbegin(this, settings)) { - /* Nothing. */ - } else if (!$.belowthefold(this, settings) && - !$.rightoffold(this, settings)) { - $this.trigger("appear"); - /* if we found an image we'll load, reset the counter */ - counter = 0; - } else { - if (++counter > settings.failure_limit) { - return false; - } - } - }); - - } - - if(options) { - /* Maintain BC for a couple of versions. */ - if (undefined !== options.failurelimit) { - options.failure_limit = options.failurelimit; - delete options.failurelimit; - } - if (undefined !== options.effectspeed) { - options.effect_speed = options.effectspeed; - delete options.effectspeed; - } - - $.extend(settings, options); - } - - /* Cache container as jQuery as object. */ - $container = (settings.container === undefined || - settings.container === window) ? $window : $(settings.container); - - /* Fire one scroll event per scroll. Not one scroll event per image. */ - if (0 === settings.event.indexOf("scroll")) { - $container.bind(settings.event, function() { - return update(); - }); - } - - this.each(function() { - var self = this; - var $self = $(self); - - self.loaded = false; - - /* If no src attribute given use data:uri. */ - if ($self.attr("src") === undefined || $self.attr("src") === false) { - $self.attr("src", settings.placeholder); - } - - /* When appear is triggered load original image. */ - $self.one("appear", function() { - if (!this.loaded) { - if (settings.appear) { - var elements_left = elements.length; - settings.appear.call(self, elements_left, settings); - } - $("<img />") - .bind("load", function() { - var original = $self.data(settings.data_attribute); - $self.hide(); - if ($self.is("img")) { - $self.attr("src", original); - } else { - $self.css("background-image", "url('" + original + "')"); - } - $self[settings.effect](settings.effect_speed); - - self.loaded = true; - - /* Remove image from array so it is not looped next time. */ - var temp = $.grep(elements, function(element) { - return !element.loaded; - }); - elements = $(temp); - - if (settings.load) { - var elements_left = elements.length; - settings.load.call(self, elements_left, settings); - } - }) - .attr("src", $self.data(settings.data_attribute)); - } - }); - - /* When wanted event is triggered load original image */ - /* by triggering appear. */ - if (0 !== settings.event.indexOf("scroll")) { - $self.bind(settings.event, function() { - if (!self.loaded) { - $self.trigger("appear"); - } - }); - } - }); - - /* Check if something appears when window is resized. */ - $window.bind("resize", function() { - update(); - }); - - /* With IOS5 force loading images when navigating with back button. */ - /* Non optimal workaround. */ - if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) { - $window.bind("pageshow", function(event) { - if (event.originalEvent && event.originalEvent.persisted) { - elements.each(function() { - $(this).trigger("appear"); - }); - } - }); - } - - /* Force initial check if images should appear. */ - $(document).ready(function() { - update(); - }); - - return this; - }; - - /* Convenience methods in jQuery namespace. */ - /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ - - $.belowthefold = function(element, settings) { - var fold; - - if (settings.container === undefined || settings.container === window) { - fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop(); - } else { - fold = $(settings.container).offset().top + $(settings.container).height(); - } - - return fold <= $(element).offset().top - settings.threshold; - }; - - $.rightoffold = function(element, settings) { - var fold; - - if (settings.container === undefined || settings.container === window) { - fold = $window.width() + $window.scrollLeft(); - } else { - fold = $(settings.container).offset().left + $(settings.container).width(); - } - - return fold <= $(element).offset().left - settings.threshold; - }; - - $.abovethetop = function(element, settings) { - var fold; - - if (settings.container === undefined || settings.container === window) { - fold = $window.scrollTop(); - } else { - fold = $(settings.container).offset().top; - } - - return fold >= $(element).offset().top + settings.threshold + $(element).height(); - }; - - $.leftofbegin = function(element, settings) { - var fold; - - if (settings.container === undefined || settings.container === window) { - fold = $window.scrollLeft(); - } else { - fold = $(settings.container).offset().left; - } - - return fold >= $(element).offset().left + settings.threshold + $(element).width(); - }; - - $.inviewport = function(element, settings) { - return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && - !$.belowthefold(element, settings) && !$.abovethetop(element, settings); - }; - - /* Custom selectors for your convenience. */ - /* Use as $("img:below-the-fold").something() or */ - /* $("img").filter(":below-the-fold").something() which is faster */ - - $.extend($.expr[":"], { - "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, - "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, - "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, - "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, - "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, - /* Maintain BC for couple of versions. */ - "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, - "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, - "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } - }); - -})(jQuery, window, document); diff --git a/pykeg/web/static/js/jquery.lazyload.min.js b/pykeg/web/static/js/jquery.lazyload.min.js deleted file mode 100644 index 8dd097dc3..000000000 --- a/pykeg/web/static/js/jquery.lazyload.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Lazy Load - jQuery plugin for lazy loading images - * - * Copyright (c) 2007-2013 Mika Tuupola - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Project home: - * http://www.appelsiini.net/projects/lazyload - * - * Version: 1.9.0 - * - */ -!function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!0,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("<img />").bind("load",function(){var d=c.data(j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.data(j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/iphone|ipod|ipad.*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document); \ No newline at end of file diff --git a/pykeg/web/static/js/jquery.scrollstop.js b/pykeg/web/static/js/jquery.scrollstop.js deleted file mode 100644 index a0bb63710..000000000 --- a/pykeg/web/static/js/jquery.scrollstop.js +++ /dev/null @@ -1,72 +0,0 @@ -/* http://james.padolsey.com/javascript/special-scroll-events-for-jquery/ */ - -(function(){ - - var special = jQuery.event.special, - uid1 = "D" + (+new Date()), - uid2 = "D" + (+new Date() + 1); - - special.scrollstart = { - setup: function() { - - var timer, - handler = function(evt) { - - var _self = this, - _args = arguments; - - if (timer) { - clearTimeout(timer); - } else { - evt.type = "scrollstart"; - jQuery.event.dispatch.apply(_self, _args); - } - - timer = setTimeout( function(){ - timer = null; - }, special.scrollstop.latency); - - }; - - jQuery(this).bind("scroll", handler).data(uid1, handler); - - }, - teardown: function(){ - jQuery(this).unbind( "scroll", jQuery(this).data(uid1) ); - } - }; - - special.scrollstop = { - latency: 300, - setup: function() { - - var timer, - handler = function(evt) { - - var _self = this, - _args = arguments; - - if (timer) { - clearTimeout(timer); - } - - timer = setTimeout( function(){ - - timer = null; - evt.type = "scrollstop"; - jQuery.event.dispatch.apply(_self, _args); - - - }, special.scrollstop.latency); - - }; - - jQuery(this).bind("scroll", handler).data(uid2, handler); - - }, - teardown: function() { - jQuery(this).unbind( "scroll", jQuery(this).data(uid2) ); - } - }; - -})(); \ No newline at end of file diff --git a/pykeg/web/static/js/jquery.scrollstop.min.js b/pykeg/web/static/js/jquery.scrollstop.min.js deleted file mode 100644 index 7affa2591..000000000 --- a/pykeg/web/static/js/jquery.scrollstop.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Lazy Load - jQuery plugin for lazy loading images - * - * Copyright (c) 2007-2013 Mika Tuupola - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/mit-license.php - * - * Project home: - * http://www.appelsiini.net/projects/lazyload - * - * Version: 1.9.0 - * - */ -!function(){var a=jQuery.event.special,b="D"+ +new Date,c="D"+(+new Date+1);a.scrollstart={setup:function(){var c,d=function(b){var d=this,e=arguments;c?clearTimeout(c):(b.type="scrollstart",jQuery.event.dispatch.apply(d,e)),c=setTimeout(function(){c=null},a.scrollstop.latency)};jQuery(this).bind("scroll",d).data(b,d)},teardown:function(){jQuery(this).unbind("scroll",jQuery(this).data(b))}},a.scrollstop={latency:300,setup:function(){var b,d=function(c){var d=this,e=arguments;b&&clearTimeout(b),b=setTimeout(function(){b=null,c.type="scrollstop",jQuery.event.dispatch.apply(d,e)},a.scrollstop.latency)};jQuery(this).bind("scroll",d).data(c,d)},teardown:function(){jQuery(this).unbind("scroll",jQuery(this).data(c))}}}(); \ No newline at end of file diff --git a/pykeg/web/static/js/jquery.timeago.js b/pykeg/web/static/js/jquery.timeago.js deleted file mode 100644 index 4d58026ef..000000000 --- a/pykeg/web/static/js/jquery.timeago.js +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Timeago is a jQuery plugin that makes it easy to support automatically - * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). - * - * @name timeago - * @version 1.3.0 - * @requires jQuery v1.2.3+ - * @author Ryan McGeary - * @license MIT License - http://www.opensource.org/licenses/mit-license.php - * - * For usage and examples, visit: - * http://timeago.yarp.com/ - * - * Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) - */ - -(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else { - // Browser globals - factory(jQuery); - } -}(function ($) { - $.timeago = function(timestamp) { - if (timestamp instanceof Date) { - return inWords(timestamp); - } else if (typeof timestamp === "string") { - return inWords($.timeago.parse(timestamp)); - } else if (typeof timestamp === "number") { - return inWords(new Date(timestamp)); - } else { - return inWords($.timeago.datetime(timestamp)); - } - }; - var $t = $.timeago; - - $.extend($.timeago, { - settings: { - refreshMillis: 60000, - allowFuture: false, - localeTitle: false, - cutoff: 0, - strings: { - prefixAgo: null, - prefixFromNow: null, - suffixAgo: "ago", - suffixFromNow: "from now", - seconds: "less than a minute", - minute: "about a minute", - minutes: "%d minutes", - hour: "about an hour", - hours: "about %d hours", - day: "a day", - days: "%d days", - month: "about a month", - months: "%d months", - year: "about a year", - years: "%d years", - wordSeparator: " ", - numbers: [] - } - }, - inWords: function(distanceMillis) { - var $l = this.settings.strings; - var prefix = $l.prefixAgo; - var suffix = $l.suffixAgo; - if (this.settings.allowFuture) { - if (distanceMillis < 0) { - prefix = $l.prefixFromNow; - suffix = $l.suffixFromNow; - } - } - - var seconds = Math.abs(distanceMillis) / 1000; - var minutes = seconds / 60; - var hours = minutes / 60; - var days = hours / 24; - var years = days / 365; - - function substitute(stringOrFunction, number) { - var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; - var value = ($l.numbers && $l.numbers[number]) || number; - return string.replace(/%d/i, value); - } - - var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || - seconds < 90 && substitute($l.minute, 1) || - minutes < 45 && substitute($l.minutes, Math.round(minutes)) || - minutes < 90 && substitute($l.hour, 1) || - hours < 24 && substitute($l.hours, Math.round(hours)) || - hours < 42 && substitute($l.day, 1) || - days < 30 && substitute($l.days, Math.round(days)) || - days < 45 && substitute($l.month, 1) || - days < 365 && substitute($l.months, Math.round(days / 30)) || - years < 1.5 && substitute($l.year, 1) || - substitute($l.years, Math.round(years)); - - var separator = $l.wordSeparator || ""; - if ($l.wordSeparator === undefined) { separator = " "; } - return $.trim([prefix, words, suffix].join(separator)); - }, - parse: function(iso8601) { - var s = $.trim(iso8601); - s = s.replace(/\.\d+/,""); // remove milliseconds - s = s.replace(/-/,"/").replace(/-/,"/"); - s = s.replace(/T/," ").replace(/Z/," UTC"); - s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 - return new Date(s); - }, - datetime: function(elem) { - var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); - return $t.parse(iso8601); - }, - isTime: function(elem) { - // jQuery's `is()` doesn't play well with HTML5 in IE - return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); - } - }); - - // functions that can be called via $(el).timeago('action') - // init is default when no action is given - // functions are called with context of a single element - var functions = { - init: function(){ - var refresh_el = $.proxy(refresh, this); - refresh_el(); - var $s = $t.settings; - if ($s.refreshMillis > 0) { - setInterval(refresh_el, $s.refreshMillis); - } - }, - update: function(time){ - $(this).data('timeago', { datetime: $t.parse(time) }); - refresh.apply(this); - }, - updateFromDOM: function(){ - $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) }); - refresh.apply(this); - } - }; - - $.fn.timeago = function(action, options) { - var fn = action ? functions[action] : functions.init; - if(!fn){ - throw new Error("Unknown function name '"+ action +"' for timeago"); - } - // each over objects here and call the requested function - this.each(function(){ - fn.call(this, options); - }); - return this; - }; - - function refresh() { - var data = prepareData(this); - var $s = $t.settings; - - if (!isNaN(data.datetime)) { - if ( $s.cutoff == 0 || distance(data.datetime) < $s.cutoff) { - $(this).text(inWords(data.datetime)); - } - } - return this; - } - - function prepareData(element) { - element = $(element); - if (!element.data("timeago")) { - element.data("timeago", { datetime: $t.datetime(element) }); - var text = $.trim(element.text()); - if ($t.settings.localeTitle) { - element.attr("title", element.data('timeago').datetime.toLocaleString()); - } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { - element.attr("title", text); - } - } - return element.data("timeago"); - } - - function inWords(date) { - return $t.inWords(distance(date)); - } - - function distance(date) { - return (new Date().getTime() - date.getTime()); - } - - // fix for IE6 suckage - document.createElement("abbr"); - document.createElement("time"); -})); diff --git a/pykeg/web/static/lib/bootstrap-progressbar/LICENSE b/pykeg/web/static/lib/bootstrap-progressbar/LICENSE deleted file mode 100644 index 80aeda4c8..000000000 --- a/pykeg/web/static/lib/bootstrap-progressbar/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2013 Stephan Groß - -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. \ No newline at end of file diff --git a/pykeg/web/static/lib/bootstrap-progressbar/bootstrap-progressbar.min.js b/pykeg/web/static/lib/bootstrap-progressbar/bootstrap-progressbar.min.js deleted file mode 100644 index 368393ee2..000000000 --- a/pykeg/web/static/lib/bootstrap-progressbar/bootstrap-progressbar.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! bootstrap-progressbar v0.6.0 | Copyright (c) 2012-2013 Stephan Gross | MIT License | minddust.com */ -!function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.defaults,d)};b.defaults={transition_delay:300,refresh_speed:50,display_text:"none",use_percentage:!0,percent_format:function(a){return a+"%"},amount_format:function(a,b){return a+" / "+b},update:a.noop,done:a.noop,fail:a.noop},b.prototype.transition=function(){var c=this.$element,d=c.parent(),e=this.$back_text,f=this.$front_text,g=this.options,h=c.attr("aria-valuetransitiongoal"),i=c.attr("aria-valuemin")||0,j=c.attr("aria-valuemax")||100,k=d.hasClass("vertical"),l=g.update&&"function"==typeof g.update?g.update:b.defaults.update,m=g.done&&"function"==typeof g.done?g.done:b.defaults.done,n=g.fail&&"function"==typeof g.fail?g.fail:b.defaults.fail;if(!h)return n("aria-valuetransitiongoal not set"),void 0;var o=Math.round(100*(h-i)/(j-i));if("center"===g.display_text&&!e&&!f){this.$back_text=e=a("<span>",{"class":"progressbar-back-text"}).prependTo(d),this.$front_text=f=a("<span>",{"class":"progressbar-front-text"}).prependTo(c);var p;k?(p=d.css("height"),e.css({height:p,"line-height":p}),f.css({height:p,"line-height":p}),a(window).resize(function(){p=d.css("height"),e.css({height:p,"line-height":p}),f.css({height:p,"line-height":p})})):(p=d.css("width"),f.css({width:p}),a(window).resize(function(){p=d.css("width"),f.css({width:p})}))}setTimeout(function(){var a,b,n,p,q;k?c.css("height",o+"%"):c.css("width",o+"%");var r=setInterval(function(){k?(n=c.height(),p=d.height()):(n=c.width(),p=d.width()),a=Math.round(100*n/p),b=Math.round(n/p*(j-i)),a>=o&&(a=o,b=h,m(),clearInterval(r)),"none"!==g.display_text&&(q=g.use_percentage?g.percent_format(a):g.amount_format(b,j),"fill"===g.display_text?c.text(q):"center"===g.display_text&&(e.text(q),f.text(q))),c.attr("aria-valuenow",b),l(a)},g.refresh_speed)},g.transition_delay)};var c=a.fn.progressbar;a.fn.progressbar=function(c){return this.each(function(){var d=a(this),e=d.data("bs.progressbar"),f="object"==typeof c&&c;e||d.data("bs.progressbar",e=new b(this,f)),e.transition()})},a.fn.progressbar.Constructor=b,a.fn.progressbar.noConflict=function(){return a.fn.progressbar=c,this}}(window.jQuery); \ No newline at end of file diff --git a/pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.css b/pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.css deleted file mode 100644 index a2fc01c86..000000000 --- a/pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.css +++ /dev/null @@ -1,419 +0,0 @@ -/*! - * bootstrap-progressbar v0.6.0 by @minddust - * Copyright (c) 2012-2013 Stephan Gross - * - * https://www.minddust.com/bootstrap-progressbar - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - */ - -.progress { - position: relative; -} - -.progress .bar { - position: absolute; - overflow: hidden; - line-height: 20px; -} - -.progress .progressbar-back-text { - position: absolute; - width: 100%; - height: 100%; - font-size: 12px; - line-height: 20px; - text-align: center; -} - -.progress .progressbar-front-text { - display: block; - width: 100%; - font-size: 12px; - line-height: 20px; - text-align: center; -} - -.progress.right .bar { - right: 0; -} - -.progress.right .progressbar-front-text { - position: absolute; - right: 0; -} - -.progress.vertical { - float: left; - width: 20px; - height: 100%; - margin-right: 20px; - background-color: #f9f9f9; - background-image: -moz-linear-gradient(left, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(left, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(left, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to right, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=1); -} - -.progress.vertical.bottom { - position: relative; -} - -.progress.vertical.bottom .progressbar-front-text { - position: absolute; - bottom: 0; -} - -.progress.vertical .bar { - width: 100%; - height: 0; - background-color: #0480be; - background-image: -moz-linear-gradient(left, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(left, #149bdf, #0480be); - background-image: -o-linear-gradient(left, #149bdf, #0480be); - background-image: linear-gradient(to right, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=1); - -webkit-transition: height 0.6s ease; - -moz-transition: height 0.6s ease; - -o-transition: height 0.6s ease; - transition: height 0.6s ease; -} - -.progress.vertical.bottom .bar { - position: absolute; - bottom: 0; -} - -.progress-danger.vertical .bar, -.progress.vertical .bar-danger { - background-color: #c43c35; - background-image: -moz-linear-gradient(left, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(left, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(left, #ee5f5b, #c43c35); - background-image: linear-gradient(to right, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=1); -} - -.progress-danger.progress-striped.vertical .bar, -.progress.progress-striped.vertical .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-success.vertical .bar, -.progress.vertical .bar-success { - background-color: #57a957; - background-image: -moz-linear-gradient(left, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(left, #62c462, #57a957); - background-image: -o-linear-gradient(left, #62c462, #57a957); - background-image: linear-gradient(to right, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=1); -} - -.progress-success.progress-striped.vertical .bar, -.progress.progress-striped.vertical .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-info.vertical .bar, -.progress.vertical .bar-info { - background-color: #339bb9; - background-image: -moz-linear-gradient(left, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(left, #5bc0de, #339bb9); - background-image: -o-linear-gradient(left, #5bc0de, #339bb9); - background-image: linear-gradient(to right, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=1); -} - -.progress-info.progress-striped.vertical .bar, -.progress.progress-striped.vertical .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-warning.vertical .bar, -.progress.vertical .bar-warning { - background-color: #f89406; - background-image: -moz-linear-gradient(left, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(left, #fbb450, #f89406); - background-image: -o-linear-gradient(left, #fbb450, #f89406); - background-image: linear-gradient(to right, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=1); -} - -.progress-warning.progress-striped.vertical .bar, -.progress.progress-striped.vertical .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress .bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} - -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} - -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} - -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} - -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} - -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} \ No newline at end of file diff --git a/pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.min.css b/pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.min.css deleted file mode 100644 index 777e87623..000000000 --- a/pykeg/web/static/lib/bootstrap-progressbar/css/bootstrap-progressbar-2.3.1.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * bootstrap-progressbar v0.6.0 by @minddust - * Copyright (c) 2012-2013 Stephan Gross - * - * https://www.minddust.com/bootstrap-progressbar - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - */.progress{position:relative}.progress .bar{position:absolute;overflow:hidden;line-height:20px}.progress .progressbar-back-text{position:absolute;width:100%;height:100%;font-size:12px;line-height:20px;text-align:center}.progress .progressbar-front-text{display:block;width:100%;font-size:12px;line-height:20px;text-align:center}.progress.right .bar{right:0}.progress.right .progressbar-front-text{position:absolute;right:0}.progress.vertical{float:left;width:20px;height:100%;margin-right:20px;background-color:#f9f9f9;background-image:-moz-linear-gradient(left,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,100% 0,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(left,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(left,#f5f5f5,#f9f9f9);background-image:linear-gradient(to right,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=1)}.progress.vertical.bottom{position:relative}.progress.vertical.bottom .progressbar-front-text{position:absolute;bottom:0}.progress.vertical .bar{width:100%;height:0;background-color:#0480be;background-image:-moz-linear-gradient(left,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,100% 0,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(left,#149bdf,#0480be);background-image:-o-linear-gradient(left,#149bdf,#0480be);background-image:linear-gradient(to right,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=1);-webkit-transition:height .6s ease;-moz-transition:height .6s ease;-o-transition:height .6s ease;transition:height .6s ease}.progress.vertical.bottom .bar{position:absolute;bottom:0}.progress-danger.vertical .bar,.progress.vertical .bar-danger{background-color:#c43c35;background-image:-moz-linear-gradient(left,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,100% 0,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(left,#ee5f5b,#c43c35);background-image:-o-linear-gradient(left,#ee5f5b,#c43c35);background-image:linear-gradient(to right,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=1)}.progress-danger.progress-striped.vertical .bar,.progress.progress-striped.vertical .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success.vertical .bar,.progress.vertical .bar-success{background-color:#57a957;background-image:-moz-linear-gradient(left,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,100% 0,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(left,#62c462,#57a957);background-image:-o-linear-gradient(left,#62c462,#57a957);background-image:linear-gradient(to right,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=1)}.progress-success.progress-striped.vertical .bar,.progress.progress-striped.vertical .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info.vertical .bar,.progress.vertical .bar-info{background-color:#339bb9;background-image:-moz-linear-gradient(left,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,100% 0,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(left,#5bc0de,#339bb9);background-image:-o-linear-gradient(left,#5bc0de,#339bb9);background-image:linear-gradient(to right,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=1)}.progress-info.progress-striped.vertical .bar,.progress.progress-striped.vertical .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning.vertical .bar,.progress.vertical .bar-warning{background-color:#f89406;background-image:-moz-linear-gradient(left,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,100% 0,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(left,#fbb450,#f89406);background-image:-o-linear-gradient(left,#fbb450,#f89406);background-image:linear-gradient(to right,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=1)}.progress-warning.progress-striped.vertical .bar,.progress.progress-striped.vertical .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)} \ No newline at end of file diff --git a/pykeg/web/static/lib/slick/ajax-loader.gif b/pykeg/web/static/lib/slick/ajax-loader.gif deleted file mode 100755 index e0e6e9760bc04861cc4771e327f22ed7962e0858..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4178 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 diff --git a/pykeg/web/static/lib/slick/config.rb b/pykeg/web/static/lib/slick/config.rb deleted file mode 100755 index 81f5ae324..000000000 --- a/pykeg/web/static/lib/slick/config.rb +++ /dev/null @@ -1,10 +0,0 @@ -css_dir = "." -sass_dir = "." -images_dir = "." -fonts_dir = "fonts" -relative_assets = true - -output_style = :compact -line_comments = false - -preferred_syntax = :scss \ No newline at end of file diff --git a/pykeg/web/static/lib/slick/fonts/slick.eot b/pykeg/web/static/lib/slick/fonts/slick.eot deleted file mode 100755 index 2cbab9ca97723bc24c50315a0a9bd155db4e0aa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmcgtO>7%Q6n^9V^B-}NZk*EEVeMi&O%prb7zafaL6A786eTJs%>e;R;y4y|oY<}i z5)vjt;=&>7feV}}ai#*PAS5oRLOp@#1tg<V32}vTXfFtvZ)V4hle7nf#Mra*-uK>{ z_p`I}$V;?l5Ha!)A0E<tf&j9|ICXvrOUrUW@f0wq#s2GedSFTVsX-Mg(<;3Iq>nC8 zkxFz4m_v0SVOj=KhgO+tv`H3aDNU1*9JB<$9X&!VQfR4Ac<F`e4>vv~GM)n(S(uwI zP>yu)qu{N@7c=(ay}v($(F*wG)vB`<56yoK{s!jjC8x2~>0l=^EXcj3%3JHRA6<Km zNI8qF$2W@38nNtOko}CA-vFTe=Fwnlf`5FY+T794(K+x}!G|lgRfq1eE3h92-(Pih zw&;0Ufc#1D)}~V}YN>a>A<{O0ZEn>X&CKUE{OdnKJ}+`Zes`|-FTNT&dzS)k{lDMd zc?WV5Yl0H2&DvnS^7UXV{5g_#^+EG0^$t}a2F=}nrQC{ZJuTIkhu9uz<YnjCI<N(~ z-la$Bz1}m>68^}NcC@rUzlL3$*kyLRbDPqv-Qlsw2;7Lcy_kqz{J1gl7BeDsUk1mm zBBY9_f+9l|h-1ZLd$G%SSA6tvolk!G^;YxNcGsJb<H2wSWB`Q3T=!ieU%SFy?BCMx z@t+6I(*H0D^Z{LEVZ4Oy={Zg~p|dQX%dq6Bc!=pk=3~qd&+wF;Hx1p;<EdmSnVZf} z=k4L}@SnT7zN;BtEvoAmFY0<!^BR9dN9@VBC+(4Fm)PFb`=F+cXogQ+Sy6ok$eRaL zxGr)&6iZ?{{{(_@pKeHq=pnJN(VieQ8Q7QI81{oX5C!yjXb%d8-LK0rMD~E>S^LQ5 z?5U$!?eFs}j@Xc?pJ6ECEH5!HsG*xEBz{viuj-VI1c!vTQ=-<g+FSyy>HKh*wf){! zK-YYuV>8i6WY7!-0zq>y5{bq~tYbP;m6YO%ojIM$B*#yjGzSLElPAWLnX%OAXu=x| zurFF(e<0vXrCh5ScZ*P8M1i5=QB$Vrn!MuLhXx`EuPP6AkUo^(3B$b*l(dHoic4Cd z7%pq~TT-F(v7|K$&{vYyf#2j`w(0}oM}1w|gElZIX@#DlF-fb?*^{(}#&AW_I`D6M z+eo8QUPU)K)JiTCOP4ARdP+ewlBQVeXf{Q%$QDh-q8ZTp4aw!R=o}Mb+GsqSqe5-7 zS*X=ZMaxc4S~HgLh&7v=$W7RjS*YyqLNcC*G_vJly-}`hTG=$Z+EJ^+H`LMl3H=!L z^Dqxn=zW^=JN0_)&3d`C(ew$jQe1CBg=^uS#AObu5A!&O1h1eoGTg0QU&6<CzyHX4 Jm)l$9`VTQ&{XGBx diff --git a/pykeg/web/static/lib/slick/fonts/slick.svg b/pykeg/web/static/lib/slick/fonts/slick.svg deleted file mode 100755 index b36a66a6c..000000000 --- a/pykeg/web/static/lib/slick/fonts/slick.svg +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata>Generated by Fontastic.me</metadata> -<defs> -<font id="slick" horiz-adv-x="512"> -<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/> -<missing-glyph horiz-adv-x="512" /> - -<glyph unicode="→" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/> -<glyph unicode="←" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/> -<glyph unicode="•" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/> -<glyph unicode="a" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/> -</font></defs></svg> diff --git a/pykeg/web/static/lib/slick/fonts/slick.ttf b/pykeg/web/static/lib/slick/fonts/slick.ttf deleted file mode 100755 index 9d03461b653373f7cda3b4af104c6bca07f9892b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1892 zcmcgtO>7%Q7=7dYvttuC>BcFo9o8<6(=@T2jd4&^kqQzA6;LWbX$}ZjQpdJ%;>2-9 zkdO!w5*H3p4_x3>i8B>Q1tD=k2=xS_7m$ofCB&7VLwiBUyq#S)NmC98iCxXk_rBjZ z-_FiL0C)h~P;kCfdj6T!@2-CY7*A3gpP!v8p#YtDgxFemE@v;?`RijqED<j*uR80g z=-d~?*EwFPIGgL84l}{9Xb)EEudmF!f9+*JIRga7s%7UQ#KfPp{m4<QQlb13&=_kH zKU`gHZRzK5j`%8Ztln65a7SEW{21|(RcC7*Php<+M~SU9XSJ+l-ue>Is?@EmH#S?j zPi)rLf1rI1?%Fth|LVxXOVKm85e`rRe7mvr=G{4sv}lVqaS)za#z;-pQ&4s@?Y~s1 zF)-`LxQ;^V&iZa50I>@VLGiR$p>E!vZ{tC{&2B&od7j&{9xM+5=U3(~;w+rxWpS%> z3t7?bxa@oeU5f6^LH6=?gSl=w;=b<-L~c|ZD)Rvmxk8naW2KV2$;*6K?zInfKK$wD zo2{E0-D=X#hu|LQwtx$hrMosccZ~;>{}Qmqf4;bv{)elCcX3t3_yW4S=NPy{XGF1( z6T>G{QK1i*4+%p)W0Q8#G;~8xWrj1ug{k6H(H@Kq{;{L$JDL&H61sljg03gDpz&K` z$j-l!w}%p4VPi+{rJFXS86kCPNevkkZya!OeYxg)xTL3wkC2S_^eB<hKX4Hv`$%X$ zvCq03_Q)JyK|hz;{m6*BeK|^I_gTDXA4)DBJG`pBJWp`{4Ve0A!6weQEp{7f=q4M< zd(w8hI%#u(1G3sl*=xVsu7zGx#le_p_XM}Yx)vH4oleB#{bnQ_j+p)Ncp^1q9o2=Z zWRyVi^r=E_c<lHIv#-xQaeQnzH<~$>NCzWf@#%K3CmarCGG5fQmm=C5R~V=S)Qo9* zAuoFI(Y|;(sQMc_g7^H7Nbp>U_;LUSQogJpi8WtV>GOdvYY5|WU)HI=;eOd_h?*Yu z*OLS2MZYgAcpRg?tkP%Kmo>z2#g}#Jzs4r&s9_ne0-N>PGN)%zMg^CschDp(S1#2Z z3MDkittICsJ<70PBa1xeX^y>29-iQzV_XiKJ}yG3vDPXznw7F;XY<yyB`b2CD2x}z z?fe8?_Of*OEV5FQ`kJh7F_T*pi{<8Kt+8fJWC;#O-FreEKA#MBP9PuxLcu$j?QxpT y#%s-5rP>Nfv0h$j(Z%)RImyGEQZL6bS0%B+KcnE;+N~vPeDmw~?!W86Kjv>PckT%Q diff --git a/pykeg/web/static/lib/slick/fonts/slick.woff b/pykeg/web/static/lib/slick/fonts/slick.woff deleted file mode 100755 index 8ee99721bb81b59a5e1ceee1d3256b15f907d96b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1380 zcmZWoc~H_>9DiItQdGPuZL>_xgDjCHpv=4wk37&Nx3m(F$RqMd4ZI>#sTnIvS4$mr zYIRq0kV)NX%VjCA6!RLbG&S?cF0*sBT4Nv8fBW8i=FR8xz30vMSTKtf%;5wBfD-@$ zfCs-1ptSG*j~9z&2>@yZ0O&0cW$QnM8L(KKKmafd=)DGFt!Us*gAdc21vQSALs$X| zzy|;1M1fiY<e?B;wwXpACE`JjX@i^%^YX0-OhxoTo&W%>Db!#MKm#b}&(TnX8WVDD zJ{!y|8WSx_7DJ5-xq%i~f8a0TiD5phwg&PQI5s%K6CH#a^aW$E#u1#|iQ5VBN0Z^a z+Wrh7ECB|f#O1CR`r?f}Ogj%bMA#Kog;~-(rbgn@>1o4d$4nYiRyuAWwB_b_E;YM} zZ@NV6aV$`k?$I^#Wy?FR9QXZfCw>r^*1y-k$0lC+Q7Ne`X`$=sB1Wy`n;#2J7g5fr zwyHxDSEMClZ`L6n$e70#EAWLIl3&MaoK(k+l#St%Y&(Sx=VqDv(*x+{1v@swNPOd5 z_D&(udjRFH?3%?ol%y>x6(M%<A8*&(7kTBF<%WcyTz%>zP2C#?oZgpRVvQB6J2<-s z1XZ2vz<(2aNi{4LTCF&Bx<P(Up4mCd$l2bwEv}U6r+@hpDRr8jSZtp+Wli-Cd0m<H zGSPnO%a~$TKjO^@J(1o^66~_e=?{N?(RQTYv67}%FvqV6yxV<bKg*QX@z0tbnRHiY z1SiZte3))@QXae2xAkyy#O9uN_0(QsdmrB^PNx9n(Hqt{obji<UwcwTcYT0J&wLl7 zui}tQ@*AUAS?qMRWVm*R442_jrvKz5VNQ*^r#}ubJ%7l}mzMBX%}eFkx}`PEo7x9! zIVG``GiYD7O?6Oh#H-!NQd8s)G}hho6a>GP@+$wvm5GG@1!A5n$t7wEd@)dWbK1t7 zAI3J92@9!?&4dSMUJZ6VPu@Y5=2}-+<UZKTV6N7vG%P3H{zyMUj6+ap(CA~40b}w- zjKjv$R{GDj6W1cWPhx0WjY{6n*D3S1*1ybcOtv*yv+5t+d*X%lMKX&P0L0}{TrO7t zvX3sv<H5ijVbgOS6@*Lhjo)knE_V{c*Fg-qd@j~=6&ZPB2C%7su8kA&x#cQVx9Zl@ z){7k~)uci7-xOa;6PZkQRwPlR9vBS9x*(J*&6ZN{n<Dr;X1iZL@rxU`KdNO}L&Grj zG1DT2KMr95y4nEl?6+QoQm#3|LJUu#-kROYScTv%@3yLLsjz|{$u=Z=hah(OdyU&3 z3*!aN)Mw(t%5k-<6yWm@>pk@x!aH)vCoky=Cjr>DnYdb;5B3lEE)C=baaLJ_-dKR1 zWr9+1d0o&|%I}m3VT=Au5?NY}TCUN7+x*?X<*rIq)!7En?lfx*iHingK58Bf7Yt(K z_X`<Zb(}Uvbk;St)!i`HZRCPimhXA152Mu{p2l_iYWh*3*XcqdE6?m-GS6{pLubvl zxf>Li%+9B6@V=(#S<IuqL#|Js!D@^twFIZ@d=p7msdEykFMTFIVyAV(ugckg!MKzo zw~OX*i#wPH-nP-8F>WT`XQx%ekcKa;n!7{j@jA|tbPOhjX{3cs;}XV-aNF@z-Qg~t z^N?v#oy+p0z}5Q)3S^P$>6P=;iqWo=dqdtaskSzCVSy7fDSNx#E>`??q5M<koyGJ_ h+w>PtvepFdF46=ngEMs$@2`LCj^yh_!*S07+<yv>8;<}0 diff --git a/pykeg/web/static/lib/slick/slick.css b/pykeg/web/static/lib/slick/slick.css deleted file mode 100755 index fcbbda300..000000000 --- a/pykeg/web/static/lib/slick/slick.css +++ /dev/null @@ -1,55 +0,0 @@ -/* Slider */ -.slick-slider { position: relative; display: block; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -ms-touch-action: none; -webkit-tap-highlight-color: transparent; } - -.slick-list { position: relative; overflow: hidden; display: block; margin: 0; padding: 0; } -.slick-list:focus { outline: none; } -.slick-loading .slick-list { background: white url("./ajax-loader.gif") center center no-repeat; } -.slick-list.dragging { cursor: pointer; cursor: hand; } - -.slick-slider .slick-list, .slick-track, .slick-slide, .slick-slide img { -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } - -.slick-track { position: relative; left: 0; top: 0; display: block; zoom: 1; } -.slick-track:before, .slick-track:after { content: ""; display: table; } -.slick-track:after { clear: both; } -.slick-loading .slick-track { visibility: hidden; } - -.slick-slide { float: left; height: 100%; min-height: 1px; display: none; } -.slick-slide img { display: block; } -.slick-slide.slick-loading img { display: none; } -.slick-slide.dragging img { pointer-events: none; } -.slick-initialized .slick-slide { display: block; } -.slick-loading .slick-slide { visibility: hidden; } -.slick-vertical .slick-slide { display: block; height: auto; border: 1px solid transparent; } - -/* Icons */ -@font-face { font-family: "slick"; src: url("./fonts/slick.eot"); src: url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg"); font-weight: normal; font-style: normal; } -/* Arrows */ -.slick-prev, .slick-next { position: absolute; display: block; height: 20px; width: 20px; line-height: 0; font-size: 0; cursor: pointer; background: transparent; color: transparent; top: 50%; margin-top: -10px; padding: 0; border: none; outline: none; } -.slick-prev:hover, .slick-prev:focus, .slick-next:hover, .slick-next:focus { outline: none; background: transparent; color: transparent; } -.slick-prev:hover:before, .slick-prev:focus:before, .slick-next:hover:before, .slick-next:focus:before { opacity: 1; } -.slick-prev.slick-disabled:before, .slick-next.slick-disabled:before { opacity: 0.25; } - -.slick-prev:before, .slick-next:before { font-family: "slick"; font-size: 20px; line-height: 1; color: white; opacity: 0.75; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } - -.slick-prev { left: -25px; } -.slick-prev:before { content: "\2190"; } - -.slick-next { right: -25px; } -.slick-next:before { content: "\2192"; } - -/* Dots */ -.slick-slider { margin-bottom: 30px; } - -.slick-dots { position: absolute; bottom: -45px; list-style: none; display: block; text-align: center; padding: 0; width: 100%; } -.slick-dots li { position: relative; display: inline-block; height: 20px; width: 20px; margin: 0 5px; padding: 0; cursor: pointer; } -.slick-dots li button { border: 0; background: transparent; display: block; height: 20px; width: 20px; outline: none; line-height: 0; font-size: 0; color: transparent; padding: 5px; cursor: pointer; } -.slick-dots li button:hover, .slick-dots li button:focus { outline: none; } -.slick-dots li button:hover:before, .slick-dots li button:focus:before { opacity: 1; } -.slick-dots li button:before { position: absolute; top: 0; left: 0; content: "\2022"; width: 20px; height: 20px; font-family: "slick"; font-size: 6px; line-height: 20px; text-align: center; color: black; opacity: 0.25; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -.slick-dots li.slick-active button:before { color: black; opacity: 0.75; } - -[dir="rtl"] .slick-next {right: auto;left: -25px;} -[dir="rtl"] .slick-next:before {content: "\2190";} -[dir="rtl"] .slick-prev {right: -25px;left: auto;} -[dir="rtl"] .slick-prev:before {content: "\2192";} -[dir="rtl"] .slick-slide {float: right;} \ No newline at end of file diff --git a/pykeg/web/static/lib/slick/slick.js b/pykeg/web/static/lib/slick/slick.js deleted file mode 100755 index d6ce1d9ce..000000000 --- a/pykeg/web/static/lib/slick/slick.js +++ /dev/null @@ -1,1850 +0,0 @@ -/* - _ _ _ _ - ___| (_) ___| | __ (_)___ -/ __| | |/ __| |/ / | / __| -\__ \ | | (__| < _ | \__ \ -|___/_|_|\___|_|\_(_)/ |___/ - |__/ - - Version: 1.3.7 - Author: Ken Wheeler - Website: http://kenwheeler.github.io - Docs: http://kenwheeler.github.io/slick - Repo: http://github.com/kenwheeler/slick - Issues: http://github.com/kenwheeler/slick/issues - - */ - -/* global window, document, define, jQuery, setInterval, clearInterval */ - -(function(factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } else { - factory(jQuery); - } - -}(function($) { - 'use strict'; - var Slick = window.Slick || {}; - - Slick = (function() { - - var instanceUid = 0; - - function Slick(element, settings) { - - var _ = this, - responsiveSettings, breakpoint; - - _.defaults = { - accessibility: true, - appendArrows: $(element), - arrows: true, - asNavFor: null, - prevArrow: '<button type="button" data-role="none" class="slick-prev">Previous</button>', - nextArrow: '<button type="button" data-role="none" class="slick-next">Next</button>', - autoplay: false, - autoplaySpeed: 3000, - centerMode: false, - centerPadding: '50px', - cssEase: 'ease', - customPaging: function(slider, i) { - return '<button type="button" data-role="none">' + (i + 1) + '</button>'; - }, - dots: false, - dotsClass: 'slick-dots', - draggable: true, - easing: 'linear', - fade: false, - focusOnSelect: false, - infinite: true, - lazyLoad: 'ondemand', - onBeforeChange: null, - onAfterChange: null, - onInit: null, - onReInit: null, - pauseOnHover: true, - pauseOnDotsHover: false, - responsive: null, - rtl: false, - slide: 'div', - slidesToShow: 1, - slidesToScroll: 1, - speed: 300, - swipe: true, - touchMove: true, - touchThreshold: 5, - useCSS: true, - vertical: false - }; - - _.initials = { - animating: false, - dragging: false, - autoPlayTimer: null, - currentSlide: 0, - currentLeft: null, - direction: 1, - $dots: null, - listWidth: null, - listHeight: null, - loadIndex: 0, - $nextArrow: null, - $prevArrow: null, - slideCount: null, - slideWidth: null, - $slideTrack: null, - $slides: null, - sliding: false, - slideOffset: 0, - swipeLeft: null, - $list: null, - touchObject: {}, - transformsEnabled: false - }; - - $.extend(_, _.initials); - - _.activeBreakpoint = null; - _.animType = null; - _.animProp = null; - _.breakpoints = []; - _.breakpointSettings = []; - _.cssTransitions = false; - _.paused = false; - _.positionProp = null; - _.$slider = $(element); - _.$slidesCache = null; - _.transformType = null; - _.transitionType = null; - _.windowWidth = 0; - _.windowTimer = null; - - _.options = $.extend({}, _.defaults, settings); - - _.originalSettings = _.options; - responsiveSettings = _.options.responsive || null; - - if (responsiveSettings && responsiveSettings.length > -1) { - for (breakpoint in responsiveSettings) { - if (responsiveSettings.hasOwnProperty(breakpoint)) { - _.breakpoints.push(responsiveSettings[ - breakpoint].breakpoint); - _.breakpointSettings[responsiveSettings[ - breakpoint].breakpoint] = - responsiveSettings[breakpoint].settings; - } - } - _.breakpoints.sort(function(a, b) { - return b - a; - }); - } - - _.autoPlay = $.proxy(_.autoPlay, _); - _.autoPlayClear = $.proxy(_.autoPlayClear, _); - _.changeSlide = $.proxy(_.changeSlide, _); - _.selectHandler = $.proxy(_.selectHandler, _); - _.setPosition = $.proxy(_.setPosition, _); - _.swipeHandler = $.proxy(_.swipeHandler, _); - _.dragHandler = $.proxy(_.dragHandler, _); - _.keyHandler = $.proxy(_.keyHandler, _); - _.autoPlayIterator = $.proxy(_.autoPlayIterator, _); - - _.instanceUid = instanceUid++; - - // A simple way to check for HTML strings - // Strict HTML recognition (must start with <) - // Extracted from jQuery v1.11 source - _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/; - - _.init(); - - } - - return Slick; - - }()); - - Slick.prototype.addSlide = function(markup, index, addBefore) { - - var _ = this; - - if (typeof(index) === 'boolean') { - addBefore = index; - index = null; - } else if (index < 0 || (index >= _.slideCount)) { - return false; - } - - _.unload(); - - if (typeof(index) === 'number') { - if (index === 0 && _.$slides.length === 0) { - $(markup).appendTo(_.$slideTrack); - } else if (addBefore) { - $(markup).insertBefore(_.$slides.eq(index)); - } else { - $(markup).insertAfter(_.$slides.eq(index)); - } - } else { - if (addBefore === true) { - $(markup).prependTo(_.$slideTrack); - } else { - $(markup).appendTo(_.$slideTrack); - } - } - - _.$slides = _.$slideTrack.children(this.options.slide); - - _.$slideTrack.children(this.options.slide).detach(); - - _.$slideTrack.append(_.$slides); - - _.$slides.each(function(index, element) { - $(element).attr("index",index); - }); - - _.$slidesCache = _.$slides; - - _.reinit(); - - }; - - Slick.prototype.animateSlide = function(targetLeft, callback) { - - var animProps = {}, _ = this; - - if (_.options.rtl === true && _.options.vertical === false) { - targetLeft = -targetLeft; - } - if (_.transformsEnabled === false) { - if (_.options.vertical === false) { - _.$slideTrack.animate({ - left: targetLeft - }, _.options.speed, _.options.easing, callback); - } else { - _.$slideTrack.animate({ - top: targetLeft - }, _.options.speed, _.options.easing, callback); - } - - } else { - - if (_.cssTransitions === false) { - - $({ - animStart: _.currentLeft - }).animate({ - animStart: targetLeft - }, { - duration: _.options.speed, - easing: _.options.easing, - step: function(now) { - if (_.options.vertical === false) { - animProps[_.animType] = 'translate(' + - now + 'px, 0px)'; - _.$slideTrack.css(animProps); - } else { - animProps[_.animType] = 'translate(0px,' + - now + 'px)'; - _.$slideTrack.css(animProps); - } - }, - complete: function() { - if (callback) { - callback.call(); - } - } - }); - - } else { - - _.applyTransition(); - - if (_.options.vertical === false) { - animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)'; - } else { - animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)'; - } - _.$slideTrack.css(animProps); - - if (callback) { - setTimeout(function() { - - _.disableTransition(); - - callback.call(); - }, _.options.speed); - } - - } - - } - - }; - - Slick.prototype.applyTransition = function(slide) { - - var _ = this, - transition = {}; - - if (_.options.fade === false) { - transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase; - } else { - transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase; - } - - if (_.options.fade === false) { - _.$slideTrack.css(transition); - } else { - _.$slides.eq(slide).css(transition); - } - - }; - - Slick.prototype.autoPlay = function() { - - var _ = this; - - if (_.autoPlayTimer) { - clearInterval(_.autoPlayTimer); - } - - if (_.slideCount > _.options.slidesToShow && _.paused !== true) { - _.autoPlayTimer = setInterval(_.autoPlayIterator, - _.options.autoplaySpeed); - } - - }; - - Slick.prototype.autoPlayClear = function() { - - var _ = this; - - if (_.autoPlayTimer) { - clearInterval(_.autoPlayTimer); - } - - }; - - Slick.prototype.autoPlayIterator = function() { - - var _ = this; - var asNavFor = _.options.asNavFor != null ? $(_.options.asNavFor).getSlick() : null; - - if (_.options.infinite === false) { - - if (_.direction === 1) { - - if ((_.currentSlide + 1) === _.slideCount - - 1) { - _.direction = 0; - } - - _.slideHandler(_.currentSlide + _.options.slidesToScroll); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide + asNavFor.options.slidesToScroll); - - } else { - - if ((_.currentSlide - 1 === 0)) { - - _.direction = 1; - - } - - _.slideHandler(_.currentSlide - _.options.slidesToScroll); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide - asNavFor.options.slidesToScroll); - - } - - } else { - - _.slideHandler(_.currentSlide + _.options.slidesToScroll); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide + asNavFor.options.slidesToScroll); - - } - - }; - - Slick.prototype.buildArrows = function() { - - var _ = this; - - if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { - - _.$prevArrow = $(_.options.prevArrow); - _.$nextArrow = $(_.options.nextArrow); - - if (_.htmlExpr.test(_.options.prevArrow)) { - _.$prevArrow.appendTo(_.options.appendArrows); - } - - if (_.htmlExpr.test(_.options.nextArrow)) { - _.$nextArrow.appendTo(_.options.appendArrows); - } - - if (_.options.infinite !== true) { - _.$prevArrow.addClass('slick-disabled'); - } - - } - - }; - - Slick.prototype.buildDots = function() { - - var _ = this, - i, dotString; - - if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { - - dotString = '<ul class="' + _.options.dotsClass + '">'; - - for (i = 0; i <= _.getDotCount(); i += 1) { - dotString += '<li>' + _.options.customPaging.call(this, _, i) + '</li>'; - } - - dotString += '</ul>'; - - _.$dots = $(dotString).appendTo( - _.$slider); - - _.$dots.find('li').first().addClass( - 'slick-active'); - - } - - }; - - Slick.prototype.buildOut = function() { - - var _ = this; - - _.$slides = _.$slider.children(_.options.slide + - ':not(.slick-cloned)').addClass( - 'slick-slide'); - _.slideCount = _.$slides.length; - - _.$slides.each(function(index, element) { - $(element).attr("index",index); - }); - - _.$slidesCache = _.$slides; - - _.$slider.addClass('slick-slider'); - - _.$slideTrack = (_.slideCount === 0) ? - $('<div class="slick-track"/>').appendTo(_.$slider) : - _.$slides.wrapAll('<div class="slick-track"/>').parent(); - - _.$list = _.$slideTrack.wrap( - '<div class="slick-list"/>').parent(); - _.$slideTrack.css('opacity', 0); - - if (_.options.centerMode === true) { - _.options.slidesToScroll = 1; - if (_.options.slidesToShow % 2 === 0) { - _.options.slidesToShow = 3; - } - } - - $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading'); - - _.setupInfinite(); - - _.buildArrows(); - - _.buildDots(); - - _.updateDots(); - - if (_.options.accessibility === true) { - _.$list.prop('tabIndex', 0); - } - - _.setSlideClasses(typeof this.currentSlide === 'number' ? this.currentSlide : 0); - - if (_.options.draggable === true) { - _.$list.addClass('draggable'); - } - - }; - - Slick.prototype.checkResponsive = function() { - - var _ = this, - breakpoint, targetBreakpoint; - - if (_.originalSettings.responsive && _.originalSettings - .responsive.length > -1 && _.originalSettings.responsive !== null) { - - targetBreakpoint = null; - - for (breakpoint in _.breakpoints) { - if (_.breakpoints.hasOwnProperty(breakpoint)) { - if ($(window).width() < _.breakpoints[ - breakpoint]) { - targetBreakpoint = _.breakpoints[ - breakpoint]; - } - } - } - - if (targetBreakpoint !== null) { - if (_.activeBreakpoint !== null) { - if (targetBreakpoint !== _.activeBreakpoint) { - _.activeBreakpoint = - targetBreakpoint; - _.options = $.extend({}, _.options, - _.breakpointSettings[ - targetBreakpoint]); - _.refresh(); - } - } else { - _.activeBreakpoint = targetBreakpoint; - _.options = $.extend({}, _.options, - _.breakpointSettings[ - targetBreakpoint]); - _.refresh(); - } - } else { - if (_.activeBreakpoint !== null) { - _.activeBreakpoint = null; - _.options = $.extend({}, _.options, - _.originalSettings); - _.refresh(); - } - } - - } - - }; - - Slick.prototype.changeSlide = function(event) { - - var _ = this, - $target = $(event.target); - var asNavFor = _.options.asNavFor != null ? $(_.options.asNavFor).getSlick() : null; - - // If target is a link, prevent default action. - $target.is('a') && event.preventDefault(); - - switch (event.data.message) { - - case 'previous': - if (_.slideCount > _.options.slidesToShow) { - _.slideHandler(_.currentSlide - _.options - .slidesToScroll); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide - asNavFor.options.slidesToScroll); - } - break; - - case 'next': - if (_.slideCount > _.options.slidesToShow) { - _.slideHandler(_.currentSlide + _.options - .slidesToScroll); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide + asNavFor.options.slidesToScroll); - } - break; - - case 'index': - var index = $(event.target).parent().index() * _.options.slidesToScroll; - _.slideHandler(index); - if(asNavFor != null) asNavFor.slideHandler(index); break; - - default: - return false; - } - - }; - - Slick.prototype.destroy = function() { - - var _ = this; - - _.autoPlayClear(); - - _.touchObject = {}; - - $('.slick-cloned', _.$slider).remove(); - if (_.$dots) { - _.$dots.remove(); - } - if (_.$prevArrow) { - _.$prevArrow.remove(); - _.$nextArrow.remove(); - } - if (_.$slides.parent().hasClass('slick-track')) { - _.$slides.unwrap().unwrap(); - } - _.$slides.removeClass( - 'slick-slide slick-active slick-visible').removeAttr('style'); - _.$slider.removeClass('slick-slider'); - _.$slider.removeClass('slick-initialized'); - - _.$list.off('.slick'); - $(window).off('.slick-' + _.instanceUid); - $(document).off('.slick-' + _.instanceUid); - - }; - - Slick.prototype.disableTransition = function(slide) { - - var _ = this, - transition = {}; - - transition[_.transitionType] = ""; - - if (_.options.fade === false) { - _.$slideTrack.css(transition); - } else { - _.$slides.eq(slide).css(transition); - } - - }; - - Slick.prototype.fadeSlide = function(slideIndex, callback) { - - var _ = this; - - if (_.cssTransitions === false) { - - _.$slides.eq(slideIndex).css({ - zIndex: 1000 - }); - - _.$slides.eq(slideIndex).animate({ - opacity: 1 - }, _.options.speed, _.options.easing, callback); - - } else { - - _.applyTransition(slideIndex); - - _.$slides.eq(slideIndex).css({ - opacity: 1, - zIndex: 1000 - }); - - if (callback) { - setTimeout(function() { - - _.disableTransition(slideIndex); - - callback.call(); - }, _.options.speed); - } - - } - - }; - - Slick.prototype.filterSlides = function(filter) { - - var _ = this; - - if (filter !== null) { - - _.unload(); - - _.$slideTrack.children(this.options.slide).detach(); - - _.$slidesCache.filter(filter).appendTo(_.$slideTrack); - - _.reinit(); - - } - - }; - - Slick.prototype.getCurrent = function() { - - var _ = this; - - return _.currentSlide; - - }; - - Slick.prototype.getDotCount = function() { - - var _ = this, - breaker = 0, - dotCounter = 0, - dotCount = 0, - dotLimit; - - dotLimit = _.options.infinite === true ? _.slideCount + _.options.slidesToShow - _.options.slidesToScroll : _.slideCount; - - while (breaker < dotLimit) { - dotCount++; - dotCounter += _.options.slidesToScroll; - breaker = dotCounter + _.options.slidesToShow; - } - - return dotCount; - - }; - - Slick.prototype.getLeft = function(slideIndex) { - - var _ = this, - targetLeft, - verticalHeight, - verticalOffset = 0; - - _.slideOffset = 0; - verticalHeight = _.$slides.first().outerHeight(); - - if (_.options.infinite === true) { - if (_.slideCount > _.options.slidesToShow) { - _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1; - verticalOffset = (verticalHeight * _.options.slidesToShow) * -1; - } - if (_.slideCount % _.options.slidesToScroll !== 0) { - if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) { - _.slideOffset = ((_.slideCount % _.options.slidesToShow) * _.slideWidth) * -1; - verticalOffset = ((_.slideCount % _.options.slidesToShow) * verticalHeight) * -1; - } - } - } else { - if (_.slideCount % _.options.slidesToShow !== 0) { - if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) { - _.slideOffset = (_.options.slidesToShow * _.slideWidth) - ((_.slideCount % _.options.slidesToShow) * _.slideWidth); - verticalOffset = ((_.slideCount % _.options.slidesToShow) * verticalHeight); - } - } - } - - if (_.options.centerMode === true && _.options.infinite === true) { - _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth; - } else if (_.options.centerMode === true) { - _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2); - } - - if (_.options.vertical === false) { - targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset; - } else { - targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset; - } - - return targetLeft; - - }; - - Slick.prototype.init = function() { - - var _ = this; - - if (!$(_.$slider).hasClass('slick-initialized')) { - - $(_.$slider).addClass('slick-initialized'); - _.buildOut(); - _.setProps(); - _.startLoad(); - _.loadSlider(); - _.initializeEvents(); - _.checkResponsive(); - } - - if (_.options.onInit !== null) { - _.options.onInit.call(this, _); - } - - }; - - Slick.prototype.initArrowEvents = function() { - - var _ = this; - - if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { - _.$prevArrow.on('click.slick', { - message: 'previous' - }, _.changeSlide); - _.$nextArrow.on('click.slick', { - message: 'next' - }, _.changeSlide); - } - - }; - - Slick.prototype.initDotEvents = function() { - - var _ = this; - - if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { - $('li', _.$dots).on('click.slick', { - message: 'index' - }, _.changeSlide); - } - - if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.options.autoplay === true) { - $('li', _.$dots) - .on('mouseenter.slick', _.autoPlayClear) - .on('mouseleave.slick', _.autoPlay); - } - - }; - - Slick.prototype.initializeEvents = function() { - - var _ = this; - - _.initArrowEvents(); - - _.initDotEvents(); - - _.$list.on('touchstart.slick mousedown.slick', { - action: 'start' - }, _.swipeHandler); - _.$list.on('touchmove.slick mousemove.slick', { - action: 'move' - }, _.swipeHandler); - _.$list.on('touchend.slick mouseup.slick', { - action: 'end' - }, _.swipeHandler); - _.$list.on('touchcancel.slick mouseleave.slick', { - action: 'end' - }, _.swipeHandler); - - if (_.options.pauseOnHover === true && _.options.autoplay === true) { - _.$list.on('mouseenter.slick', _.autoPlayClear); - _.$list.on('mouseleave.slick', _.autoPlay); - } - - if(_.options.accessibility === true) { - _.$list.on('keydown.slick', _.keyHandler); - } - - if(_.options.focusOnSelect === true) { - $(_.options.slide, _.$slideTrack).on('click.slick', _.selectHandler); - } - - $(window).on('orientationchange.slick.slick-' + _.instanceUid, function() { - _.checkResponsive(); - _.setPosition(); - }); - - $(window).on('resize.slick.slick-' + _.instanceUid, function() { - if ($(window).width() !== _.windowWidth) { - clearTimeout(_.windowDelay); - _.windowDelay = window.setTimeout(function() { - _.windowWidth = $(window).width(); - _.checkResponsive(); - _.setPosition(); - }, 50); - } - }); - - $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition); - $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition); - - }; - - Slick.prototype.initUI = function() { - - var _ = this; - - if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { - - _.$prevArrow.show(); - _.$nextArrow.show(); - - } - - if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { - - _.$dots.show(); - - } - - if (_.options.autoplay === true) { - - _.autoPlay(); - - } - - }; - - Slick.prototype.keyHandler = function(event) { - - var _ = this; - - if (event.keyCode === 37) { - _.changeSlide({ - data: { - message: 'previous' - } - }); - } else if (event.keyCode === 39) { - _.changeSlide({ - data: { - message: 'next' - } - }); - } - - }; - - Slick.prototype.lazyLoad = function() { - - var _ = this, - loadRange, cloneRange, rangeStart, rangeEnd; - - function loadImages(imagesScope) { - $('img[data-lazy]', imagesScope).each(function() { - var image = $(this), - imageSource = $(this).attr('data-lazy') + "?" + new Date().getTime(); - - image - .load(function() { image.animate({ opacity: 1 }, 200); }) - .css({ opacity: 0 }) - .attr('src', imageSource) - .removeAttr('data-lazy') - .removeClass('slick-loading'); - }); - } - - if (_.options.centerMode === true) { - if (_.options.infinite === true) { - rangeStart = _.currentSlide + (_.options.slidesToShow/2 + 1); - rangeEnd = rangeStart + _.options.slidesToShow + 2; - } else { - rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow/2 + 1)); - rangeEnd = 2 + (_.options.slidesToShow/2 + 1) + _.currentSlide; - } - } else { - rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide; - rangeEnd = rangeStart + _.options.slidesToShow; - if (_.options.fade === true ) { - if(rangeStart > 0) rangeStart--; - if(rangeEnd <= _.slideCount) rangeEnd++; - } - } - - loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd); - loadImages(loadRange); - - if (_.slideCount == 1){ - cloneRange = _.$slider.find('.slick-slide') - loadImages(cloneRange) - }else - if (_.currentSlide >= _.slideCount - _.options.slidesToShow) { - cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow); - loadImages(cloneRange) - } else if (_.currentSlide === 0) { - cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1); - loadImages(cloneRange); - } - - }; - - Slick.prototype.loadSlider = function() { - - var _ = this; - - _.setPosition(); - - _.$slideTrack.css({ - opacity: 1 - }); - - _.$slider.removeClass('slick-loading'); - - _.initUI(); - - if (_.options.lazyLoad === 'progressive') { - _.progressiveLazyLoad(); - } - - }; - - Slick.prototype.postSlide = function(index) { - - var _ = this; - - if (_.options.onAfterChange !== null) { - _.options.onAfterChange.call(this, _, index); - } - - _.animating = false; - - _.setPosition(); - - _.swipeLeft = null; - - if (_.options.autoplay === true && _.paused === false) { - _.autoPlay(); - } - - }; - - Slick.prototype.progressiveLazyLoad = function() { - - var _ = this, - imgCount, targetImage; - - imgCount = $('img[data-lazy]').length; - - if (imgCount > 0) { - targetImage = $('img[data-lazy]', _.$slider).first(); - targetImage.attr('src', targetImage.attr('data-lazy')).removeClass('slick-loading').load(function() { - targetImage.removeAttr('data-lazy'); - _.progressiveLazyLoad(); - }); - } - - }; - - Slick.prototype.refresh = function() { - - var _ = this, - currentSlide = _.currentSlide; - - _.destroy(); - - $.extend(_, _.initials); - - _.currentSlide = currentSlide; - _.init(); - - }; - - Slick.prototype.reinit = function() { - - var _ = this; - - _.$slides = _.$slideTrack.children(_.options.slide).addClass( - 'slick-slide'); - - _.slideCount = _.$slides.length; - - if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) { - _.currentSlide = _.currentSlide - _.options.slidesToScroll; - } - - _.setProps(); - - _.setupInfinite(); - - _.buildArrows(); - - _.updateArrows(); - - _.initArrowEvents(); - - _.buildDots(); - - _.updateDots(); - - _.initDotEvents(); - - if(_.options.focusOnSelect === true) { - $(_.options.slide, _.$slideTrack).on('click.slick', _.selectHandler); - } - - _.setSlideClasses(0); - - _.setPosition(); - - if (_.options.onReInit !== null) { - _.options.onReInit.call(this, _); - } - - }; - - Slick.prototype.removeSlide = function(index, removeBefore) { - - var _ = this; - - if (typeof(index) === 'boolean') { - removeBefore = index; - index = removeBefore === true ? 0 : _.slideCount - 1; - } else { - index = removeBefore === true ? --index : index; - } - - if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) { - return false; - } - - _.unload(); - - _.$slideTrack.children(this.options.slide).eq(index).remove(); - - _.$slides = _.$slideTrack.children(this.options.slide); - - _.$slideTrack.children(this.options.slide).detach(); - - _.$slideTrack.append(_.$slides); - - _.$slidesCache = _.$slides; - - _.reinit(); - - }; - - Slick.prototype.setCSS = function(position) { - - var _ = this, - positionProps = {}, x, y; - - if (_.options.rtl === true) { - position = -position; - } - x = _.positionProp == 'left' ? position + 'px' : '0px'; - y = _.positionProp == 'top' ? position + 'px' : '0px'; - - positionProps[_.positionProp] = position; - - if (_.transformsEnabled === false) { - _.$slideTrack.css(positionProps); - } else { - positionProps = {}; - if (_.cssTransitions === false) { - positionProps[_.animType] = 'translate(' + x + ', ' + y + ')'; - _.$slideTrack.css(positionProps); - } else { - positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)'; - _.$slideTrack.css(positionProps); - } - } - - }; - - Slick.prototype.setDimensions = function() { - - var _ = this; - - if (_.options.vertical === false) { - if (_.options.centerMode === true) { - _.$list.css({ - padding: ('0px ' + _.options.centerPadding) - }); - } - } else { - _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow); - if (_.options.centerMode === true) { - _.$list.css({ - padding: (_.options.centerPadding + ' 0px') - }); - } - } - - _.listWidth = _.$list.width(); - _.listHeight = _.$list.height(); - - - if(_.options.vertical === false) { - _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow); - _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length))); - - } else { - _.slideWidth = Math.ceil(_.listWidth); - _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length))); - - } - - var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width(); - _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset); - - }; - - Slick.prototype.setFade = function() { - - var _ = this, - targetLeft; - - _.$slides.each(function(index, element) { - targetLeft = (_.slideWidth * index) * -1; - $(element).css({ - position: 'relative', - left: targetLeft, - top: 0, - zIndex: 800, - opacity: 0 - }); - }); - - _.$slides.eq(_.currentSlide).css({ - zIndex: 900, - opacity: 1 - }); - - }; - - Slick.prototype.setPosition = function() { - - var _ = this; - - _.setDimensions(); - - if (_.options.fade === false) { - _.setCSS(_.getLeft(_.currentSlide)); - } else { - _.setFade(); - } - - }; - - Slick.prototype.setProps = function() { - - var _ = this, - bodyStyle = document.body.style; - - _.positionProp = _.options.vertical === true ? 'top' : 'left'; - - if (_.positionProp === 'top') { - _.$slider.addClass('slick-vertical'); - } else { - _.$slider.removeClass('slick-vertical'); - } - - if (bodyStyle.WebkitTransition !== undefined || - bodyStyle.MozTransition !== undefined || - bodyStyle.msTransition !== undefined) { - if(_.options.useCSS === true) { - _.cssTransitions = true; - } - } - - if (bodyStyle.OTransform !== undefined) { - _.animType = 'OTransform'; - _.transformType = "-o-transform"; - _.transitionType = 'OTransition'; - if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false; - } - if (bodyStyle.MozTransform !== undefined) { - _.animType = 'MozTransform'; - _.transformType = "-moz-transform"; - _.transitionType = 'MozTransition'; - if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false; - } - if (bodyStyle.webkitTransform !== undefined) { - _.animType = 'webkitTransform'; - _.transformType = "-webkit-transform"; - _.transitionType = 'webkitTransition'; - if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false; - } - if (bodyStyle.msTransform !== undefined) { - _.animType = 'msTransform'; - _.transformType = "-ms-transform"; - _.transitionType = 'msTransition'; - if (bodyStyle.msTransform === undefined) _.animType = false; - } - if (bodyStyle.transform !== undefined && _.animType !== false) { - _.animType = 'transform'; - _.transformType = "transform"; - _.transitionType = 'transition'; - } - _.transformsEnabled = (_.animType !== null && _.animType !== false); - - }; - - - Slick.prototype.setSlideClasses = function(index) { - - var _ = this, - centerOffset, allSlides, indexOffset, remainder; - - _.$slider.find('.slick-slide').removeClass('slick-active').removeClass('slick-center'); - allSlides = _.$slider.find('.slick-slide'); - - if (_.options.centerMode === true) { - - centerOffset = Math.floor(_.options.slidesToShow / 2); - - if(_.options.infinite === true) { - - if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) { - _.$slides.slice(index - centerOffset, index + centerOffset + 1).addClass('slick-active'); - } else { - indexOffset = _.options.slidesToShow + index; - allSlides.slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2).addClass('slick-active'); - } - - if (index === 0) { - allSlides.eq(allSlides.length - 1 - _.options.slidesToShow).addClass('slick-center'); - } else if (index === _.slideCount - 1) { - allSlides.eq(_.options.slidesToShow).addClass('slick-center'); - } - - } - - _.$slides.eq(index).addClass('slick-center'); - - } else { - - if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) { - _.$slides.slice(index, index + _.options.slidesToShow).addClass('slick-active'); - } else if ( allSlides.length <= _.options.slidesToShow ) { - allSlides.addClass('slick-active'); - } else { - remainder = _.slideCount%_.options.slidesToShow; - indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index; - if(_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) { - allSlides.slice(indexOffset-(_.options.slidesToShow-remainder), indexOffset + remainder).addClass('slick-active'); - } else { - allSlides.slice(indexOffset, indexOffset + _.options.slidesToShow).addClass('slick-active'); - } - } - - } - - if (_.options.lazyLoad === 'ondemand') { - _.lazyLoad(); - } - - }; - - Slick.prototype.setupInfinite = function() { - - var _ = this, - i, slideIndex, infiniteCount; - - if (_.options.fade === true || _.options.vertical === true) { - _.options.centerMode = false; - } - - if (_.options.infinite === true && _.options.fade === false) { - - slideIndex = null; - - if (_.slideCount > _.options.slidesToShow) { - - if (_.options.centerMode === true) { - infiniteCount = _.options.slidesToShow + 1; - } else { - infiniteCount = _.options.slidesToShow; - } - - for (i = _.slideCount; i > (_.slideCount - - infiniteCount); i -= 1) { - slideIndex = i - 1; - $(_.$slides[slideIndex]).clone(true).attr('id', '').prependTo( - _.$slideTrack).addClass('slick-cloned'); - } - for (i = 0; i < infiniteCount; i += 1) { - slideIndex = i; - $(_.$slides[slideIndex]).clone(true).attr('id', '').appendTo( - _.$slideTrack).addClass('slick-cloned'); - } - _.$slideTrack.find('.slick-cloned').find('[id]').each(function() { - $(this).attr('id', ''); - }); - - } - - } - - }; - - Slick.prototype.selectHandler = function(event) { - - var _ = this; - var asNavFor = _.options.asNavFor != null ? $(_.options.asNavFor).getSlick() : null; - var index = parseInt($(event.target).parent().attr("index")); - if(!index) index = 0; - - if(_.slideCount <= _.options.slidesToShow){ - return; - } - _.slideHandler(index); - - if(asNavFor != null){ - if(asNavFor.slideCount <= asNavFor.options.slidesToShow){ - return; - } - asNavFor.slideHandler(index); - } - }; - - Slick.prototype.slideHandler = function(index) { - - var targetSlide, animSlide, slideLeft, unevenOffset, targetLeft = null, - _ = this; - - if (_.animating === true) { - return false; - } - - targetSlide = index; - targetLeft = _.getLeft(targetSlide); - slideLeft = _.getLeft(_.currentSlide); - - unevenOffset = _.slideCount % _.options.slidesToScroll !== 0 ? _.options.slidesToScroll : 0; - - _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft; - - if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > (_.slideCount - _.options.slidesToShow + unevenOffset))) { - if(_.options.fade === false) { - targetSlide = _.currentSlide; - _.animateSlide(slideLeft, function() { - _.postSlide(targetSlide); - }); - } - return false; - } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) { - if(_.options.fade === false) { - targetSlide = _.currentSlide; - _.animateSlide(slideLeft, function() { - _.postSlide(targetSlide); - }); - } - return false; - } - - if (_.options.autoplay === true) { - clearInterval(_.autoPlayTimer); - } - - if (targetSlide < 0) { - if (_.slideCount % _.options.slidesToScroll !== 0) { - animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll); - } else { - animSlide = _.slideCount - _.options.slidesToScroll; - } - } else if (targetSlide > (_.slideCount - 1)) { - animSlide = 0; - } else { - animSlide = targetSlide; - } - - _.animating = true; - - if (_.options.onBeforeChange !== null && index !== _.currentSlide) { - _.options.onBeforeChange.call(this, _, _.currentSlide, animSlide); - } - - _.currentSlide = animSlide; - - _.setSlideClasses(_.currentSlide); - - _.updateDots(); - _.updateArrows(); - - if (_.options.fade === true) { - _.fadeSlide(animSlide, function() { - _.postSlide(animSlide); - }); - return false; - } - - _.animateSlide(targetLeft, function() { - _.postSlide(animSlide); - }); - - }; - - Slick.prototype.startLoad = function() { - - var _ = this; - - if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { - - _.$prevArrow.hide(); - _.$nextArrow.hide(); - - } - - if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { - - _.$dots.hide(); - - } - - _.$slider.addClass('slick-loading'); - - }; - - Slick.prototype.swipeDirection = function() { - - var xDist, yDist, r, swipeAngle, _ = this; - - xDist = _.touchObject.startX - _.touchObject.curX; - yDist = _.touchObject.startY - _.touchObject.curY; - r = Math.atan2(yDist, xDist); - - swipeAngle = Math.round(r * 180 / Math.PI); - if (swipeAngle < 0) { - swipeAngle = 360 - Math.abs(swipeAngle); - } - - if ((swipeAngle <= 45) && (swipeAngle >= 0)) { - return 'left'; - } - if ((swipeAngle <= 360) && (swipeAngle >= 315)) { - return 'left'; - } - if ((swipeAngle >= 135) && (swipeAngle <= 225)) { - return 'right'; - } - - return 'vertical'; - - }; - - Slick.prototype.swipeEnd = function(event) { - - var _ = this; - var asNavFor = _.options.asNavFor != null ? $(_.options.asNavFor).getSlick() : null; - - _.dragging = false; - - if (_.touchObject.curX === undefined) { - return false; - } - - if (_.touchObject.swipeLength >= _.touchObject.minSwipe) { - $(event.target).on('click.slick', function(event) { - event.stopImmediatePropagation(); - event.stopPropagation(); - event.preventDefault(); - $(event.target).off('click.slick'); - }); - - switch (_.swipeDirection()) { - case 'left': - _.slideHandler(_.currentSlide + _.options.slidesToScroll); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide + asNavFor.options.slidesToScroll); - _.touchObject = {}; - break; - - case 'right': - _.slideHandler(_.currentSlide - _.options.slidesToScroll); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide - asNavFor.options.slidesToScroll); - _.touchObject = {}; - break; - } - } else { - if(_.touchObject.startX !== _.touchObject.curX) { - _.slideHandler(_.currentSlide); - if(asNavFor != null) asNavFor.slideHandler(asNavFor.currentSlide); - _.touchObject = {}; - } - } - - }; - - Slick.prototype.swipeHandler = function(event) { - - var _ = this; - - if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) { - return; - } else if ((_.options.draggable === false) || (_.options.draggable === false && !event.originalEvent.touches)) { - return; - } - - _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ? - event.originalEvent.touches.length : 1; - - _.touchObject.minSwipe = _.listWidth / _.options - .touchThreshold; - - switch (event.data.action) { - - case 'start': - _.swipeStart(event); - break; - - case 'move': - _.swipeMove(event); - break; - - case 'end': - _.swipeEnd(event); - break; - - } - - }; - - Slick.prototype.swipeMove = function(event) { - - var _ = this, - curLeft, swipeDirection, positionOffset, touches; - - touches = event.originalEvent !== undefined ? event.originalEvent.touches : null; - - curLeft = _.getLeft(_.currentSlide); - - if (!_.dragging || touches && touches.length !== 1) { - return false; - } - - _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX; - _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY; - - _.touchObject.swipeLength = Math.round(Math.sqrt( - Math.pow(_.touchObject.curX - _.touchObject.startX, 2))); - - swipeDirection = _.swipeDirection(); - - if (swipeDirection === 'vertical') { - return; - } - - if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) { - event.preventDefault(); - } - - positionOffset = _.touchObject.curX > _.touchObject.startX ? 1 : -1; - - if (_.options.vertical === false) { - _.swipeLeft = curLeft + _.touchObject.swipeLength * positionOffset; - } else { - _.swipeLeft = curLeft + (_.touchObject - .swipeLength * (_.$list.height() / _.listWidth)) * positionOffset; - } - - if (_.options.fade === true || _.options.touchMove === false) { - return false; - } - - if (_.animating === true) { - _.swipeLeft = null; - return false; - } - - _.setCSS(_.swipeLeft); - - }; - - Slick.prototype.swipeStart = function(event) { - - var _ = this, - touches; - - if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) { - _.touchObject = {}; - return false; - } - - if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) { - touches = event.originalEvent.touches[0]; - } - - _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX; - _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY; - - _.dragging = true; - - }; - - Slick.prototype.unfilterSlides = function() { - - var _ = this; - - if (_.$slidesCache !== null) { - - _.unload(); - - _.$slideTrack.children(this.options.slide).detach(); - - _.$slidesCache.appendTo(_.$slideTrack); - - _.reinit(); - - } - - }; - - Slick.prototype.unload = function() { - - var _ = this; - - $('.slick-cloned', _.$slider).remove(); - if (_.$dots) { - _.$dots.remove(); - } - if (_.$prevArrow) { - _.$prevArrow.remove(); - _.$nextArrow.remove(); - } - _.$slides.removeClass( - 'slick-slide slick-active slick-visible').removeAttr('style'); - - }; - - Slick.prototype.updateArrows = function() { - - var _ = this; - - if (_.options.arrows === true && _.options.infinite !== - true && _.slideCount > _.options.slidesToShow) { - _.$prevArrow.removeClass('slick-disabled'); - _.$nextArrow.removeClass('slick-disabled'); - if (_.currentSlide === 0) { - _.$prevArrow.addClass('slick-disabled'); - _.$nextArrow.removeClass('slick-disabled'); - } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow) { - _.$nextArrow.addClass('slick-disabled'); - _.$prevArrow.removeClass('slick-disabled'); - } - } - - }; - - Slick.prototype.updateDots = function() { - - var _ = this; - - if (_.$dots !== null) { - - _.$dots.find('li').removeClass('slick-active'); - _.$dots.find('li').eq(Math.floor(_.currentSlide / _.options.slidesToScroll)).addClass('slick-active'); - - } - - }; - - $.fn.slick = function(options) { - var _ = this; - return _.each(function(index, element) { - - element.slick = new Slick(element, options); - - }); - }; - - $.fn.slickAdd = function(slide, slideIndex, addBefore) { - var _ = this; - return _.each(function(index, element) { - - element.slick.addSlide(slide, slideIndex, addBefore); - - }); - }; - - $.fn.slickCurrentSlide = function() { - var _ = this; - return _.get(0).slick.getCurrent(); - }; - - $.fn.slickFilter = function(filter) { - var _ = this; - return _.each(function(index, element) { - - element.slick.filterSlides(filter); - - }); - }; - - $.fn.slickGoTo = function(slide) { - var _ = this; - return _.each(function(index, element) { - - var asNavFor = element.slick.options.asNavFor != null ? $(element.slick.options.asNavFor) : null; - if(asNavFor != null) asNavFor.slickGoTo(slide); - element.slick.slideHandler(slide); - - }); - }; - - $.fn.slickNext = function() { - var _ = this; - return _.each(function(index, element) { - - element.slick.changeSlide({ - data: { - message: 'next' - } - }); - - }); - }; - - $.fn.slickPause = function() { - var _ = this; - return _.each(function(index, element) { - - element.slick.autoPlayClear(); - element.slick.paused = true; - - }); - }; - - $.fn.slickPlay = function() { - var _ = this; - return _.each(function(index, element) { - - element.slick.paused = false; - element.slick.autoPlay(); - - }); - }; - - $.fn.slickPrev = function() { - var _ = this; - return _.each(function(index, element) { - - element.slick.changeSlide({ - data: { - message: 'previous' - } - }); - - }); - }; - - $.fn.slickRemove = function(slideIndex, removeBefore) { - var _ = this; - return _.each(function(index, element) { - - element.slick.removeSlide(slideIndex, removeBefore); - - }); - }; - - $.fn.slickGetOption = function(option) { - var _ = this; - return _.get(0).slick.options[option]; - }; - - $.fn.slickSetOption = function(option, value, refresh) { - var _ = this; - return _.each(function(index, element) { - - element.slick.options[option] = value; - - if (refresh === true) { - element.slick.unload(); - element.slick.reinit(); - } - - }); - }; - - $.fn.slickUnfilter = function() { - var _ = this; - return _.each(function(index, element) { - - element.slick.unfilterSlides(); - - }); - }; - - $.fn.unslick = function() { - var _ = this; - return _.each(function(index, element) { - - if (element.slick) { - element.slick.destroy(); - } - - }); - }; - - $.fn.getSlick = function() { - var s = null; - var _ = this; - _.each(function(index, element) { - s = element.slick; - }); - - return s; - }; - -})); diff --git a/pykeg/web/static/lib/slick/slick.min.js b/pykeg/web/static/lib/slick/slick.min.js deleted file mode 100755 index ee4b59ec2..000000000 --- a/pykeg/web/static/lib/slick/slick.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,g,e=this;if(e.defaults={accessibility:!0,appendArrows:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(a,b){return'<button type="button" data-role="none">'+(b+1)+"</button>"},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",fade:!1,focusOnSelect:!1,infinite:!0,lazyLoad:"ondemand",onBeforeChange:null,onAfterChange:null,onInit:null,onReInit:null,pauseOnHover:!0,pauseOnDotsHover:!1,responsive:null,rtl:!1,slide:"div",slidesToShow:1,slidesToScroll:1,speed:300,swipe:!0,touchMove:!0,touchThreshold:5,useCSS:!0,vertical:!1},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentSlide:0,currentLeft:null,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.paused=!1,e.positionProp=null,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.windowWidth=0,e.windowTimer=null,e.options=a.extend({},e.defaults,d),e.originalSettings=e.options,f=e.options.responsive||null,f&&f.length>-1){for(g in f)f.hasOwnProperty(g)&&(e.breakpoints.push(f[g].breakpoint),e.breakpointSettings[f[g].breakpoint]=f[g].settings);e.breakpoints.sort(function(a,b){return b-a})}e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.changeSlide=a.proxy(e.changeSlide,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.init()}var b=0;return c}(),b.prototype.addSlide=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateSlide=function(b,c){var d={},e=this;e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}}):(e.applyTransition(),d[e.animType]=e.options.vertical===!1?"translate3d("+b+"px, 0px, 0px)":"translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.applyTransition=function(a){var b=this,c={};c[b.transitionType]=b.options.fade===!1?b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:"opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer),a.slideCount>a.options.slidesToShow&&a.paused!==!0&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var b=this,c=null!=b.options.asNavFor?a(b.options.asNavFor).getSlick():null;b.options.infinite===!1?1===b.direction?(b.currentSlide+1===b.slideCount-1&&(b.direction=0),b.slideHandler(b.currentSlide+b.options.slidesToScroll),null!=c&&c.slideHandler(c.currentSlide+c.options.slidesToScroll)):(0===b.currentSlide-1&&(b.direction=1),b.slideHandler(b.currentSlide-b.options.slidesToScroll),null!=c&&c.slideHandler(c.currentSlide-c.options.slidesToScroll)):(b.slideHandler(b.currentSlide+b.options.slidesToScroll),null!=c&&c.slideHandler(c.currentSlide+c.options.slidesToScroll))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow=a(b.options.prevArrow),b.$nextArrow=a(b.options.nextArrow),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.appendTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled"))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(d='<ul class="'+b.options.dotsClass+'">',c=0;c<=b.getDotCount();c+=1)d+="<li>"+b.options.customPaging.call(this,b,c)+"</li>";d+="</ul>",b.$dots=a(d).appendTo(b.$slider),b.$dots.find("li").first().addClass("slick-active")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slides.each(function(b,c){a(c).attr("index",b)}),b.$slidesCache=b.$slides,b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),b.options.centerMode===!0&&(b.options.slidesToScroll=1,0===b.options.slidesToShow%2&&(b.options.slidesToShow=3)),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.options.accessibility===!0&&b.$list.prop("tabIndex",0),b.setSlideClasses("number"==typeof this.currentSlide?this.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.checkResponsive=function(){var c,d,b=this;if(b.originalSettings.responsive&&b.originalSettings.responsive.length>-1&&null!==b.originalSettings.responsive){d=null;for(c in b.breakpoints)b.breakpoints.hasOwnProperty(c)&&a(window).width()<b.breakpoints[c]&&(d=b.breakpoints[c]);null!==d?null!==b.activeBreakpoint?d!==b.activeBreakpoint&&(b.activeBreakpoint=d,b.options=a.extend({},b.options,b.breakpointSettings[d]),b.refresh()):(b.activeBreakpoint=d,b.options=a.extend({},b.options,b.breakpointSettings[d]),b.refresh()):null!==b.activeBreakpoint&&(b.activeBreakpoint=null,b.options=a.extend({},b.options,b.originalSettings),b.refresh())}},b.prototype.changeSlide=function(b){var c=this,d=a(b.target),e=null!=c.options.asNavFor?a(c.options.asNavFor).getSlick():null;switch(d.is("a")&&b.preventDefault(),b.data.message){case"previous":c.slideCount>c.options.slidesToShow&&(c.slideHandler(c.currentSlide-c.options.slidesToScroll),null!=e&&e.slideHandler(e.currentSlide-e.options.slidesToScroll));break;case"next":c.slideCount>c.options.slidesToShow&&(c.slideHandler(c.currentSlide+c.options.slidesToScroll),null!=e&&e.slideHandler(e.currentSlide+e.options.slidesToScroll));break;case"index":var f=a(b.target).parent().index()*c.options.slidesToScroll;c.slideHandler(f),null!=e&&e.slideHandler(f);break;default:return!1}},b.prototype.destroy=function(){var b=this;b.autoPlayClear(),b.touchObject={},a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&(b.$prevArrow.remove(),b.$nextArrow.remove()),b.$slides.parent().hasClass("slick-track")&&b.$slides.unwrap().unwrap(),b.$slides.removeClass("slick-slide slick-active slick-visible").removeAttr("style"),b.$slider.removeClass("slick-slider"),b.$slider.removeClass("slick-initialized"),b.$list.off(".slick"),a(window).off(".slick-"+b.instanceUid),a(document).off(".slick-"+b.instanceUid)},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:1e3}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:1e3}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.filterSlides=function(a){var b=this;null!==a&&(b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.getCurrent=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var e,a=this,b=0,c=0,d=0;for(e=a.options.infinite===!0?a.slideCount+a.options.slidesToShow-a.options.slidesToScroll:a.slideCount;e>b;)d++,c+=a.options.slidesToScroll,b=c+a.options.slidesToShow;return d},b.prototype.getLeft=function(a){var c,d,b=this,e=0;return b.slideOffset=0,d=b.$slides.first().outerHeight(),b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=-1*b.slideWidth*b.options.slidesToShow,e=-1*d*b.options.slidesToShow),0!==b.slideCount%b.options.slidesToScroll&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(b.slideOffset=-1*b.slideCount%b.options.slidesToShow*b.slideWidth,e=-1*b.slideCount%b.options.slidesToShow*d)):0!==b.slideCount%b.options.slidesToShow&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.options.slidesToShow*b.slideWidth-b.slideCount%b.options.slidesToShow*b.slideWidth,e=b.slideCount%b.options.slidesToShow*d),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?-1*a*b.slideWidth+b.slideOffset:-1*a*d+e},b.prototype.init=function(){var b=this;a(b.$slider).hasClass("slick-initialized")||(a(b.$slider).addClass("slick-initialized"),b.buildOut(),b.setProps(),b.startLoad(),b.loadSlider(),b.initializeEvents(),b.checkResponsive()),null!==b.options.onInit&&b.options.onInit.call(this,b)},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide),b.options.dots===!0&&b.options.pauseOnDotsHover===!0&&b.options.autoplay===!0&&a("li",b.$dots).on("mouseenter.slick",b.autoPlayClear).on("mouseleave.slick",b.autoPlay)},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.options.pauseOnHover===!0&&b.options.autoplay===!0&&(b.$list.on("mouseenter.slick",b.autoPlayClear),b.$list.on("mouseleave.slick",b.autoPlay)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.options.slide,b.$slideTrack).on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,function(){b.checkResponsive(),b.setPosition()}),a(window).on("resize.slick.slick-"+b.instanceUid,function(){a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.setPosition()},50))}),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show(),a.options.autoplay===!0&&a.autoPlay()},b.prototype.keyHandler=function(a){var b=this;37===a.keyCode?b.changeSlide({data:{message:"previous"}}):39===a.keyCode&&b.changeSlide({data:{message:"next"}})},b.prototype.lazyLoad=function(){function g(b){a("img[data-lazy]",b).each(function(){var b=a(this),c=a(this).attr("data-lazy")+"?"+(new Date).getTime();b.load(function(){b.animate({opacity:1},200)}).css({opacity:0}).attr("src",c).removeAttr("data-lazy").removeClass("slick-loading")})}var c,d,e,f,b=this;b.options.centerMode===!0||b.options.fade===!0?(e=b.options.slidesToShow+b.currentSlide-1,f=e+b.options.slidesToShow+2):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=e+b.options.slidesToShow),c=b.$slider.find(".slick-slide").slice(e,f),g(c),1==b.slideCount?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.postSlide=function(a){var b=this;null!==b.options.onAfterChange&&b.options.onAfterChange.call(this,b,a),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay===!0&&b.paused===!1&&b.autoPlay()},b.prototype.progressiveLazyLoad=function(){var c,d,b=this;c=a("img[data-lazy]").length,c>0&&(d=a("img[data-lazy]",b.$slider).first(),d.attr("src",d.attr("data-lazy")).removeClass("slick-loading").load(function(){d.removeAttr("data-lazy"),b.progressiveLazyLoad()}))},b.prototype.refresh=function(){var b=this,c=b.currentSlide;b.destroy(),a.extend(b,b.initials),b.currentSlide=c,b.init()},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.options.focusOnSelect===!0&&a(b.options.slide,b.$slideTrack).on("click.slick",b.selectHandler),b.setSlideClasses(0),b.setPosition(),null!==b.options.onReInit&&b.options.onReInit.call(this,b)},b.prototype.removeSlide=function(a,b){var c=this;return"boolean"==typeof a?(b=a,a=b===!0?0:c.slideCount-1):a=b===!0?--a:a,c.slideCount<1||0>a||a>c.slideCount-1?!1:(c.unload(),c.$slideTrack.children(this.options.slide).eq(a).remove(),c.$slides=c.$slideTrack.children(this.options.slide),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.append(c.$slides),c.$slidesCache=c.$slides,c.reinit(),void 0)},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?a+"px":"0px",e="top"==b.positionProp?a+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=-1*b.slideWidth*d,a(e).css({position:"relative",left:c,top:0,zIndex:800,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:900,opacity:1})},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade()},b.prototype.setProps=function(){var a=this;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==document.body.style.WebkitTransition||void 0!==document.body.style.MozTransition||void 0!==document.body.style.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),void 0!==document.body.style.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition"),void 0!==document.body.style.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition"),void 0!==document.body.style.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition"),void 0!==document.body.style.transform&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=null!==a.animType},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;b.$slider.find(".slick-slide").removeClass("slick-active").removeClass("slick-center"),d=b.$slider.find(".slick-slide"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active"):(e=b.options.slidesToShow+a,d.slice(e-c+1,e+c+2).addClass("slick-active")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active"):d.length<=b.options.slidesToShow?d.addClass("slick-active"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if((b.options.fade===!0||b.options.vertical===!0)&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.selectHandler=function(b){var c=this,d=null!=c.options.asNavFor?a(c.options.asNavFor).getSlick():null,e=parseInt(a(b.target).parent().attr("index"));if(e||(e=0),!(c.slideCount<=c.options.slidesToShow)&&(c.slideHandler(e),null!=d)){if(d.slideCount<=d.options.slidesToShow)return;d.slideHandler(e)}},b.prototype.slideHandler=function(a){var b,c,d,e,f=null,g=this;return g.animating===!0?!1:(b=a,f=g.getLeft(b),d=g.getLeft(g.currentSlide),e=0!==g.slideCount%g.options.slidesToScroll?g.options.slidesToScroll:0,g.currentLeft=null===g.swipeLeft?d:g.swipeLeft,g.options.infinite===!1&&g.options.centerMode===!1&&(0>a||a>g.slideCount-g.options.slidesToShow+e)?(g.options.fade===!1&&(b=g.currentSlide,g.animateSlide(d,function(){g.postSlide(b)})),!1):g.options.infinite===!1&&g.options.centerMode===!0&&(0>a||a>g.slideCount-g.options.slidesToScroll)?(g.options.fade===!1&&(b=g.currentSlide,g.animateSlide(d,function(){g.postSlide(b)})),!1):(g.options.autoplay===!0&&clearInterval(g.autoPlayTimer),c=0>b?0!==g.slideCount%g.options.slidesToScroll?g.slideCount-g.slideCount%g.options.slidesToScroll:g.slideCount-g.options.slidesToScroll:b>g.slideCount-1?0:b,g.animating=!0,null!==g.options.onBeforeChange&&a!==g.currentSlide&&g.options.onBeforeChange.call(this,g,g.currentSlide,c),g.currentSlide=c,g.setSlideClasses(g.currentSlide),g.updateDots(),g.updateArrows(),g.options.fade===!0?(g.fadeSlide(c,function(){g.postSlide(c)}),!1):(g.animateSlide(f,function(){g.postSlide(c)}),void 0)))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?"left":360>=d&&d>=315?"left":d>=135&&225>=d?"right":"vertical"},b.prototype.swipeEnd=function(b){var c=this,d=null!=c.options.asNavFor?a(c.options.asNavFor).getSlick():null;if(c.dragging=!1,void 0===c.touchObject.curX)return!1;if(c.touchObject.swipeLength>=c.touchObject.minSwipe)switch(a(b.target).on("click.slick",function(b){b.stopImmediatePropagation(),b.stopPropagation(),b.preventDefault(),a(b.target).off("click.slick")}),c.swipeDirection()){case"left":c.slideHandler(c.currentSlide+c.options.slidesToScroll),null!=d&&d.slideHandler(d.currentSlide+d.options.slidesToScroll),c.touchObject={};break;case"right":c.slideHandler(c.currentSlide-c.options.slidesToScroll),null!=d&&d.slideHandler(d.currentSlide-d.options.slidesToScroll),c.touchObject={}}else c.touchObject.startX!==c.touchObject.curX&&(c.slideHandler(c.currentSlide),null!=d&&d.slideHandler(d.currentSlide),c.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1||b.options.draggable===!1&&!a.originalEvent.touches))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var c,d,e,f,b=this;return f=void 0!==a.originalEvent?a.originalEvent.touches:null,c=b.getLeft(b.currentSlide),!b.dragging||f&&1!==f.length?!1:(b.touchObject.curX=void 0!==f?f[0].pageX:a.clientX,b.touchObject.curY=void 0!==f?f[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),d=b.swipeDirection(),"vertical"!==d?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),e=b.touchObject.curX>b.touchObject.startX?1:-1,b.swipeLeft=b.options.vertical===!1?c+b.touchObject.swipeLength*e:c+b.touchObject.swipeLength*(b.$list.height()/b.listWidth)*e,b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):(b.setCSS(b.swipeLeft),void 0)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return 1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,b.dragging=!0,void 0)},b.prototype.unfilterSlides=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&(b.$prevArrow.remove(),b.$nextArrow.remove()),b.$slides.removeClass("slick-slide slick-active slick-visible").removeAttr("style")},b.prototype.updateArrows=function(){var a=this;a.options.arrows===!0&&a.options.infinite!==!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.removeClass("slick-disabled"),a.$nextArrow.removeClass("slick-disabled"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled"),a.$nextArrow.removeClass("slick-disabled")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&(a.$nextArrow.addClass("slick-disabled"),a.$prevArrow.removeClass("slick-disabled")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active"))},a.fn.slick=function(a){var c=this;return c.each(function(c,d){d.slick=new b(d,a)})},a.fn.slickAdd=function(a,b,c){var d=this;return d.each(function(d,e){e.slick.addSlide(a,b,c)})},a.fn.slickCurrentSlide=function(){var a=this;return a.get(0).slick.getCurrent()},a.fn.slickFilter=function(a){var b=this;return b.each(function(b,c){c.slick.filterSlides(a)})},a.fn.slickGoTo=function(b){var c=this;return c.each(function(c,d){var e=null!=d.slick.options.asNavFor?a(d.slick.options.asNavFor):null;null!=e&&e.slickGoTo(b),d.slick.slideHandler(b)})},a.fn.slickNext=function(){var a=this;return a.each(function(a,b){b.slick.changeSlide({data:{message:"next"}})})},a.fn.slickPause=function(){var a=this;return a.each(function(a,b){b.slick.autoPlayClear(),b.slick.paused=!0})},a.fn.slickPlay=function(){var a=this;return a.each(function(a,b){b.slick.paused=!1,b.slick.autoPlay()})},a.fn.slickPrev=function(){var a=this;return a.each(function(a,b){b.slick.changeSlide({data:{message:"previous"}})})},a.fn.slickRemove=function(a,b){var c=this;return c.each(function(c,d){d.slick.removeSlide(a,b)})},a.fn.slickGetOption=function(a){var b=this;return b.get(0).slick.options[a]},a.fn.slickSetOption=function(a,b,c){var d=this;return d.each(function(d,e){e.slick.options[a]=b,c===!0&&(e.slick.unload(),e.slick.reinit())})},a.fn.slickUnfilter=function(){var a=this;return a.each(function(a,b){b.slick.unfilterSlides()})},a.fn.unslick=function(){var a=this;return a.each(function(a,b){b.slick&&b.slick.destroy()})},a.fn.getSlick=function(){var a=null,b=this;return b.each(function(b,c){a=c.slick}),a}}); \ No newline at end of file diff --git a/pykeg/web/static/lib/slick/slick.scss b/pykeg/web/static/lib/slick/slick.scss deleted file mode 100755 index c34f6b0e1..000000000 --- a/pykeg/web/static/lib/slick/slick.scss +++ /dev/null @@ -1,286 +0,0 @@ -@charset "UTF-8"; - -// Default Variables - -$slick-font-path: "./fonts/" !default; -$slick-font-family: "slick" !default; -$slick-loader-path: "./" !default; -$slick-arrow-color: white !default; -$slick-dot-color: black !default; -$slick-dot-color-active: $slick-dot-color !default; -$slick-prev-character: '\2190' !default; -$slick-next-character: '\2192' !default; -$slick-dot-character: '\2022' !default; -$slick-dot-size: 6px !default; -$opacity-default: .75; -$opacity-on-hover: 1; -$opacity-not-active: .25; - - -@function slick-image-url($url) { - @if function-exists(image-url) { - @return image-url($url, false, false); - } - @else { - @return url($slick-loader-path + $url); - } -} - -@function slick-font-url($url) { - @if function-exists(font-url) { - @return font-url($url); - } - @else { - @return url($slick-font-path + $url); - } -} - -/* Slider */ - -.slick-slider { - position: relative; - display: block; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -ms-touch-action: none; - -webkit-tap-highlight-color: transparent; -} -.slick-list { - position: relative; - overflow: hidden; - display: block; - margin: 0; - padding: 0; - - &:focus { - outline: none; - } - - .slick-loading & { - background: #fff slick-image-url("ajax-loader.gif") center center no-repeat; - } - - &.dragging { - cursor: pointer; - cursor: hand; - } -} -.slick-slider .slick-list, -.slick-track, -.slick-slide, -.slick-slide img { - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} -.slick-track { - position: relative; - left: 0; - top: 0; - display: block; - zoom: 1; - - &:before, - &:after { - content: ""; - display: table; - } - - &:after { - clear: both; - } - - .slick-loading & { - visibility: hidden; - } -} -.slick-slide { - float: left; - height: 100%; - min-height: 1px; - [dir="rtl"] & { - float: right; - } - img { - display: block; - } - &.slick-loading img { - display: none; - } - - display: none; - - &.dragging img { - pointer-events: none; - } - - .slick-initialized & { - display: block; - } - - .slick-loading & { - visibility: hidden; - } - - .slick-vertical & { - display: block; - height: auto; - border: 1px solid transparent; - } -} - -/* Icons */ -@if $slick-font-family == "slick" { - @font-face { - font-family:"slick"; - src: slick-font-url("slick.eot"); - src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), - slick-font-url("slick.woff") format("woff"), - slick-font-url("slick.ttf") format("truetype"), - slick-font-url("slick.svg#slick") format("svg"); - font-weight: normal; - font-style: normal; - } -} - -/* Arrows */ - -.slick-prev, -.slick-next { - position: absolute; - display: block; - height: 20px; - width: 20px; - line-height: 0; - font-size: 0; - cursor: pointer; - background: transparent; - color: transparent; - top: 50%; - margin-top: -10px; - padding: 0; - border: none; - outline: none; - &:hover, &:focus { - outline: none; - background: transparent; - color: transparent; - &:before { - opacity: $opacity-on-hover; - } - } - &.slick-disabled:before { - opacity: $opacity-not-active; - } -} -.slick-prev:before, .slick-next:before { - font-family: $slick-font-family; - font-size: 20px; - line-height: 1; - color: $slick-arrow-color; - opacity: $opacity-default; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.slick-prev { - left: -25px; - [dir="rtl"] & { - left: auto; - right: -25px; - } - &:before { - content: $slick-prev-character; - [dir="rtl"] & { - content: $slick-next-character; - } - } -} -.slick-next { - right: -25px; - [dir="rtl"] & { - left: -25px; - right: auto; - } - &:before { - content: $slick-next-character; - [dir="rtl"] & { - content: $slick-prev-character; - } - } -} - -/* Dots */ - -.slick-slider { - margin-bottom: 30px; -} -.slick-dots { - position: absolute; - bottom: -45px; - list-style: none; - display: block; - text-align: center; - padding: 0; - width: 100%; - - li { - position: relative; - display: inline-block; - height: 20px; - width: 20px; - margin: 0 5px; - padding: 0; - cursor: pointer; - - button { - border: 0; - background: transparent; - display: block; - height: 20px; - width: 20px; - outline: none; - line-height: 0; - font-size: 0; - color: transparent; - padding: 5px; - cursor: pointer; - &:hover, &:focus { - outline: none; - &:before { - opacity: $opacity-on-hover; - } - } - - &:before { - position: absolute; - top: 0; - left: 0; - content: $slick-dot-character; - width: 20px; - height: 20px; - font-family: $slick-font-family; - font-size: $slick-dot-size; - line-height: 20px; - text-align: center; - color: $slick-dot-color; - opacity: $opacity-not-active; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - - } - - &.slick-active button:before { - color: $slick-dot-color-active; - opacity: $opacity-default; - } - } -} diff --git a/pykeg/web/templates/admin/login.html b/pykeg/web/templates/admin/login.html deleted file mode 100644 index 38db84c31..000000000 --- a/pykeg/web/templates/admin/login.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "page-twocol.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Log In to {{kbsite.title}}{% endblock %} -{% block pagetitle %}Log In{% endblock %} - -{% block col-1 %} -<div class="well"> - <form action="" method="POST"> - {% csrf_token %} - {{ form|crispy }} - <button type="submit" class="btn btn-success small" - name="tweet-form-submit">Log In</button> -<p> - <span style="font-size:0.8em;"> - (did you <a href="{% url "password_reset" %}">forget your username or password?</a>) - </span> -</p> - -{% endblock col-1 %} \ No newline at end of file diff --git a/pykeg/web/templates/base.html b/pykeg/web/templates/base.html deleted file mode 100644 index 32676c741..000000000 --- a/pykeg/web/templates/base.html +++ /dev/null @@ -1,127 +0,0 @@ -{% extends "skel.html" %} -{% load static humanize kegweblib %} - -{% block title %}{% if kbsite.title %}{{ kbsite.title }}{% else %}Kegbot{% endif %}{% endblock %} - -{% block css %} -{{ block.super }} -<style> - body { -{% if kbsite %}{% if kbsite.background_image %} - background-image: url({{kbsite.background_image.image.url}}); -{% else %} - background-image: url({% static "images/background.png" %}); -{% endif %} {% endif %} - background-repeat: no-repeat; - background-attachment: fixed; - } -</style> - -{% endblock css %} - -{% block body %} - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - {% spaceless %} - {% if kbsite %} - <a class="brand" href="{% url "kb-home" %}"> - {% else %} - <a class="brand" href="/"> - {% endif %} - {{ kbsite.title }} - </a>{% endspaceless %} - - <ul class="nav"> - {% if kbsite %} - {% if HAVE_SESSIONS %}{% navitem "kb-sessions" "Sessions" %}{% endif %} - {% navitem "kb-kegs" "Kegs" %} - {% navitem "kb-stats" "Stats" %} - {% if user.is_authenticated %}{% navitem "kb-account-main" "Account" %}{% endif %} - {% if user.is_staff %} - {% navitem "kegadmin-dashboard" "Admin" %} - {% endif %} - {% endif %} - </ul> - - {% if not user.is_authenticated %} - <ul class="nav pull-right"> - {% if kbsite.registration_mode == 'public' and not SSO_LOGIN_URL %} - <li><a href="{% url "registration_register" %}"><i class="icon-edit icon-white"></i> New Drinker</a></li> - {% endif %} - {% if SSO_LOGIN_URL %} - <li><a href="{{ SSO_LOGIN_URL }}"><i class="icon-user icon-white"></i> Log In</a></li> - {% else %} - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-user icon-white"></i> Sign In <b class="caret"></b></a> - <ul class="dropdown-menu" style="padding: 15px;"> - <form action="/accounts/login/" method="POST"> - {% csrf_token %} - {% with login_form as form %} - {% for hidden in form.hidden_fields %} - {{ hidden }} - {% endfor %} - {% endwith %} - <input class="span2" name="username" type="text" placeholder="Username" > - <input class="span2" name="password" type="password" placeholder="Password"> - <button class="btn" type="submit">Log In <i class="icon-ok"></i></button> - </form> - </ul> - </li> - {% endif %} - </ul> - {% else %} - <ul class="nav pull-right"> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-user icon-white"></i> {{ user.username}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - {% if SSO_LOGOUT_URL %} - <li><a href="{{ SSO_LOGOUT_URL }}">Logout</a></li> - {% else %} - <li><a href="{% url "logout" %}">Logout</a></li> - {% endif %} - </ul> - </li> - </ul> - {% endif %} - - </div> - </div> - </div> <!-- /.navbar --> - - <div class="container"> - {% block header-margin %} - <div class="page-header"> - <h1>{% block pagetitle %}{% endblock %}</h1> - {% block breadcrumbs %}{% endblock %} - {% block messages %} - {% for message in messages %} - <div class="alert {% for tag in message.tags.split %}alert-{{tag}} {% endfor %}"> - <a class="close" data-dismiss="alert" href="#">×</a> - <p> - {{message}} - </p> - </div> - {% endfor %} - {% endblock messages %} - </div> - {% endblock %} - - <div id="content"> - {% block content %}{% endblock %} - {% block extra-content %}{% endblock %} - </div> - - <footer> - <p class="muted"> - <small> - Powered by - <a href="http://kegbot.org/?utm_source=kbserver">Kegbot™</a>{% if user.is_staff %}, version {{ VERSION }}{% endif %} - — - © 2003-2020 Kegbot Project contributors - <span id="page-settings"></span> - </small> - </p> - </footer> - </div> <!-- /container --> -{% endblock body %} diff --git a/pykeg/web/templates/index.html b/pykeg/web/templates/index.html deleted file mode 100644 index a0b2e5e04..000000000 --- a/pykeg/web/templates/index.html +++ /dev/null @@ -1,74 +0,0 @@ -{% extends "page-twocol.html" %} -{% load kegweblib %} - -{# Suppress page title on homepage. #} -{% block header-margin %}{% endblock %} - -{% block col-1 %} - -{% block messages %} -{% for message in messages %} - <div class="alert {% for tag in message.tags.split %}alert-{{tag}} {% endfor %}"> - <a class="close" data-dismiss="alert" href="#">×</a> - <p> - {{message}} - </p> - </div> -{% endfor %} -{% endblock messages %} - -{% if not current_session and not most_recent_session %} -<h3 class="muted">Fresh Kegbot</h3> -<p>This will be more interesting once some activity is recorded.</p> - -{% else %} - -{% if current_session %} - <h3 class="muted"> - Now Drinking - <small>(<a href="{{ current_session.get_absolute_url}}">details</a>)</small> - </h3> -{% else %} - <h3 class="muted"> - Recent Activity - <small>(last session ended <a href="{{ most_recent_session.get_absolute_url}}"> - {% timeago most_recent_session.end_time %}</a>)</small> - </h3> -{% endif %} - -{% include 'kegweb/includes/timeline.html' %} - -<div class="well"> - See <a href="{% url "kb-sessions" %}">all sessions</a>. -</div> - -{% endif %} - -{% endblock col-1 %} - - -{% block col-2 %} - -<h3 class="muted">Currently On Tap</h3> - -{% if taps %} - -{% for tap in taps %} -{% include 'kegweb/includes/tap_snapshot.html' %} -{% endfor %} - -<p class="muted"> - See all taps in <a href="{% url 'kb-fullscreen' %}">fullscreen mode</a>. -</p> - -{% else %} -<p class="muted"> - No taps are configured. - {% if user.is_staff %} - (Want to <a href="{% url "kegadmin-taps" %}">manage taps</a>?) - {% endif %} -</p> - -{% endif %} - -{% endblock col-2 %} diff --git a/pykeg/web/templates/page-twocol.html b/pykeg/web/templates/page-twocol.html deleted file mode 100644 index 4da47b8d9..000000000 --- a/pykeg/web/templates/page-twocol.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% block content %} -<div class="row"> - <div class="span8"> <!-- left col --> - {% block col-1 %}{% endblock %} - </div> <!-- end center col --> - <div class="span4"> <!-- right col --> - {% block col-2 %}{% endblock %} - </div> <!-- end right col --> -</div> -{% endblock %} diff --git a/pykeg/web/templates/registration/activation_complete.html b/pykeg/web/templates/registration/activation_complete.html deleted file mode 100644 index 8e2c2e176..000000000 --- a/pykeg/web/templates/registration/activation_complete.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Activation Complete{% endblock %} -{% block pagetitle %}Activation Complete{% endblock %} - -{% block content %} -<p> - You may now <a href="{% url "login" %}">log in</a>. -</p> -{% endblock %} diff --git a/pykeg/web/templates/registration/activation_email.txt b/pykeg/web/templates/registration/activation_email.txt deleted file mode 100644 index 3dc1f753c..000000000 --- a/pykeg/web/templates/registration/activation_email.txt +++ /dev/null @@ -1,8 +0,0 @@ -Hi there! - -Someone, hopefully you, just registered for an account on {{ site_name }}. -To activate your account, please click on the following link: - - {{ base_url }}{% url 'registration_activate' activation_key %} - -This link will expire after {{ expiration_days }} days. \ No newline at end of file diff --git a/pykeg/web/templates/registration/activation_email_subject.txt b/pykeg/web/templates/registration/activation_email_subject.txt deleted file mode 100644 index f87b7d318..000000000 --- a/pykeg/web/templates/registration/activation_email_subject.txt +++ /dev/null @@ -1 +0,0 @@ -[{{ site_name }}] Activate your account \ No newline at end of file diff --git a/pykeg/web/templates/registration/invitation_expired.html b/pykeg/web/templates/registration/invitation_expired.html deleted file mode 100644 index 5f55a2c02..000000000 --- a/pykeg/web/templates/registration/invitation_expired.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Invitation Expired{% endblock %} -{% block pagetitle %}Invitation Expired{% endblock %} - -{% block content %} -<p> - Sorry, your invitation code has expired or is not valid. -</p> -{% endblock %} diff --git a/pykeg/web/templates/registration/invitation_required.html b/pykeg/web/templates/registration/invitation_required.html deleted file mode 100644 index f19003d92..000000000 --- a/pykeg/web/templates/registration/invitation_required.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Invitation Required{% endblock %} -{% block pagetitle %}Invitation Required{% endblock %} - -{% block content %} -<p> - Sorry, you need an invitation in order to register on this system. -</p> -{% endblock %} diff --git a/pykeg/web/templates/registration/logged_out.html b/pykeg/web/templates/registration/logged_out.html deleted file mode 100644 index 65cf0ff98..000000000 --- a/pykeg/web/templates/registration/logged_out.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Logged Out{% endblock %} -{% block pagetitle %}Logged Out{% endblock %} - -{% block content %} - You have been logged out. So long! -{% endblock %} diff --git a/pykeg/web/templates/registration/login.html b/pykeg/web/templates/registration/login.html deleted file mode 100644 index 38db84c31..000000000 --- a/pykeg/web/templates/registration/login.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "page-twocol.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Log In to {{kbsite.title}}{% endblock %} -{% block pagetitle %}Log In{% endblock %} - -{% block col-1 %} -<div class="well"> - <form action="" method="POST"> - {% csrf_token %} - {{ form|crispy }} - <button type="submit" class="btn btn-success small" - name="tweet-form-submit">Log In</button> -<p> - <span style="font-size:0.8em;"> - (did you <a href="{% url "password_reset" %}">forget your username or password?</a>) - </span> -</p> - -{% endblock col-1 %} \ No newline at end of file diff --git a/pykeg/web/templates/registration/password_change_done.html b/pykeg/web/templates/registration/password_change_done.html deleted file mode 100644 index 97148ba47..000000000 --- a/pykeg/web/templates/registration/password_change_done.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "account/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Account: Change Password | {{ block.super }}{% endblock %} -{% block pagetitle %}Account: Change Password{% endblock %} - -{% block kb-account-main %} -<h2>Password Changed</h2> -<div class="well"> - <p>Your password has been changed.</p> -</div> - -{% endblock %} diff --git a/pykeg/web/templates/registration/password_change_form.html b/pykeg/web/templates/registration/password_change_form.html deleted file mode 100644 index f1bce4dd5..000000000 --- a/pykeg/web/templates/registration/password_change_form.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "account/base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Account: Change Password | {{ block.super }}{% endblock %} -{% block pagetitle %}Account: Change Password{% endblock %} - -{% block kb-account-main %} -<h2>Change Password</h2> -<div class="well"> - <form method="post" action=""> - {% csrf_token %} - {{ form|crispy }} - <div class="actions"> - <button type="submit" class="btn btn-primary">Save Changes</button> - </div> - </form> -</div> - -{% endblock %} diff --git a/pykeg/web/templates/registration/password_reset_complete.html b/pykeg/web/templates/registration/password_reset_complete.html deleted file mode 100644 index c61c2d761..000000000 --- a/pykeg/web/templates/registration/password_reset_complete.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib crispy_forms_tags %} - -{% block title %}Reset Password{% endblock %} - -{% block content %} -<h2>Reset Complete</h2> -<p> - Your account has been updated! -</p> -{% endblock %} diff --git a/pykeg/web/templates/registration/password_reset_confirm.html b/pykeg/web/templates/registration/password_reset_confirm.html deleted file mode 100644 index 8b3ed8b22..000000000 --- a/pykeg/web/templates/registration/password_reset_confirm.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib crispy_forms_tags %} - -{% block title %}Reset Password{% endblock %} - -{% block content %} -<h2>Select New Password</h2> -<form action="" method="POST">{% csrf_token %} - {{ form.as_p }} - <input type="submit" class="btn btn-success" name="submit" value="Change Password" /> -</form> -{% endblock %} - diff --git a/pykeg/web/templates/registration/password_reset_done.html b/pykeg/web/templates/registration/password_reset_done.html deleted file mode 100644 index 6f3fda14f..000000000 --- a/pykeg/web/templates/registration/password_reset_done.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib crispy_forms_tags %} - -{% block title %}Reset Password{% endblock %} - -{% block content %} -<h2>E-Mail Sent</h2> -<p> - We've sent password reset instructions to the address provided. -</p> -{% endblock %} diff --git a/pykeg/web/templates/registration/password_reset_form.html b/pykeg/web/templates/registration/password_reset_form.html deleted file mode 100644 index 4e41e9e1b..000000000 --- a/pykeg/web/templates/registration/password_reset_form.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib crispy_forms_tags %} - -{% block title %}Reset Password{% endblock %} - -{% block content %} -<h2>Reset Password</h2> -<form action="" method="POST">{% csrf_token %} - {{ form.as_p }} - <input type="submit" class="btn btn-success" name="submit" value="Send E-Mail" /> -</form> -{% endblock %} diff --git a/pykeg/web/templates/registration/registration_closed.html b/pykeg/web/templates/registration/registration_closed.html deleted file mode 100644 index a314c44fb..000000000 --- a/pykeg/web/templates/registration/registration_closed.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Registration Closed{% endblock %} -{% block pagetitle %}Registration Closed{% endblock %} - -{% block content %} -<p> - Sorry, registration is closed. -</p> -{% endblock %} diff --git a/pykeg/web/templates/registration/registration_complete.html b/pykeg/web/templates/registration/registration_complete.html deleted file mode 100644 index f3115bbe0..000000000 --- a/pykeg/web/templates/registration/registration_complete.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} - -{% block title %}Confirm Your E-Mail Address{% endblock %} -{% block pagetitle %}Confirm Your E-Mail Address{% endblock %} - -{% block content %} -<p> - You're almost done! Please click the activation link in your e-mail - to continue. -</p> -{% endblock %} diff --git a/pykeg/web/templates/registration/registration_form.html b/pykeg/web/templates/registration/registration_form.html deleted file mode 100644 index 0951a49db..000000000 --- a/pykeg/web/templates/registration/registration_form.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} -{% load kegweblib %} -{% load crispy_forms_tags %} - -{% block title %}Register New Account{% endblock %} -{% block pagetitle %}Register New Account{% endblock %} - -{% block content %} -<div class="well"> - <form action="" method="POST"> - {% csrf_token %} - {{ form|crispy }} - <button type="submit" class="btn btn-success small">Register</button> - </form> -</div> - -{% endblock %} diff --git a/pykeg/web/templates/skel.html b/pykeg/web/templates/skel.html deleted file mode 100644 index 4065f9a84..000000000 --- a/pykeg/web/templates/skel.html +++ /dev/null @@ -1,157 +0,0 @@ -{# Bare-bones skeletal template. #} -{% load static humanize kegweblib %} -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head> -<title>{% block title %}Kegbot{% endblock %} - - - -{% block css %} - - - -{% endblock %} - -{% block kb-extracss %}{% endblock %} - - - -{% block body %} -{% endblock body %} - -{% block js %} - - - - - - - - - - - - -{% if GOOGLE_ANALYTICS_ID %} - -{% endif %} - - - -{% if kbsite and kbsite.is_setup and user.is_staff %} -{% include 'kegadmin/includes/extrajs.html' %} -{% endif %} - -{% endblock js %} - -{% block kb-extrajs %}{%endblock%} - diff --git a/pykeg/web/urls.py b/pykeg/web/urls.py index 64449d879..1ccc6e80c 100644 --- a/pykeg/web/urls.py +++ b/pykeg/web/urls.py @@ -5,28 +5,15 @@ from pykeg.api import urls as api_urls from pykeg.web import spa -from pykeg.web.account import urls as account_urls from pykeg.web.api import urls as legacy_api_urls -from pykeg.web.kbregistration import urls as kbregistration_urls -from pykeg.web.kegadmin import urls as kegadmin_urls -from pykeg.web.kegweb import urls as kegweb_urls -from pykeg.web.setup_wizard import urls as setup_wizard_urls urlpatterns = [ # The deprecated legacy api is served only at api/v1/; everything else # under api/ is the current api. path("api/v1/", include(legacy_api_urls)), path("api/", include(api_urls)), - path("account/", include(account_urls)), - path("accounts/", include(kbregistration_urls)), - path("kegadmin/", include(kegadmin_urls)), ] -if "pykeg.web.setup_wizard" in settings.INSTALLED_APPS: - urlpatterns += [ - path("setup/", include(setup_wizard_urls)), - ] - if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) @@ -39,13 +26,34 @@ path("admin/", admin.site.urls), ] -# main kegweb urls +# Named SPA routes: these exist so server-side code that builds URLs +# (get_absolute_url, e-mail links) keeps working; the SPA handles the +# actual routing client-side. urlpatterns += [ - path("", include(kegweb_urls)), + path("", spa.spa_index, name="kb-home"), + path("kegs//", spa.spa_index, name="kb-keg"), + path("drinks//", spa.spa_index, name="kb-drink"), + path("d//", spa.spa_index, name="kb-drink-short"), + path("s//", spa.spa_index, name="kb-session-short"), + path( + "sessions/////", + spa.spa_index, + name="kb-session-detail", + ), + path("drinkers//", spa.spa_index, name="kb-drinker"), + path("account/", spa.spa_index, name="kb-account-main"), + path("account/confirm-email/", spa.spa_index, name="account-confirm-email"), + path("account/activate//", spa.spa_index, name="activate-account"), + path("accounts/register/", spa.spa_index, name="registration_register"), + path( + "accounts/password/reset/confirm/-/", + spa.spa_index, + name="password_reset_confirm", + ), ] -# Anything not matched above is (deep-linkable) SPA territory. The -# exclusions keep API, asset, and admin 404s as real 404s. +# Everything else (except API, asset, and admin paths, whose 404s stay +# real 404s) is SPA territory. urlpatterns += [ re_path(r"^(?!api(?:$|/)|media/|static/|admin(?:$|/)).*$", spa.spa_index, name="spa-index"), ] diff --git a/pyproject.toml b/pyproject.toml index e66761cb3..dd95439dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,12 +10,9 @@ dependencies = [ "coloredlogs", "dj-database-url", "dj-email-url", - "django-crispy-forms>=2.4,<3", "django-filter>=25.1", - "crispy-bootstrap4>=2024.10", "django-imagekit", "django-redis>=5.4", - "django-registration>=5.1", "django-rq>=3,<5", "djangorestframework>=3.16,<4", "drf-spectacular>=0.28", diff --git a/uv.lock b/uv.lock index 2757acc65..780445520 100644 --- a/uv.lock +++ b/uv.lock @@ -170,28 +170,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", size = 46018, upload-time = "2021-06-11T10:22:42.561Z" }, ] -[[package]] -name = "confusable-homoglyphs" -version = "3.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/10/1358fca1ee2d97d4f2877df9ffbe6d124da666fef3b2f75e771a4c1afee6/confusable_homoglyphs-3.3.1.tar.gz", hash = "sha256:b995001c9b2e1b4cea0cf5f3840a7c79188a8cbbad053d693572bd8c1c1ec460", size = 325480, upload-time = "2024-01-30T10:10:27.47Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/6e/c0fcbb7d341a46cf4241a6aa9e6a737734f0657521fc1bcd074953fe4eea/confusable_homoglyphs-3.3.1-py2.py3-none-any.whl", hash = "sha256:84c92cb79dc7f55aa290d0762b2349abd8dee4c16fbe6f99eac978d394e2e6a1", size = 144755, upload-time = "2024-01-30T10:10:24.857Z" }, -] - -[[package]] -name = "crispy-bootstrap4" -version = "2026.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "django" }, - { name = "django-crispy-forms" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/cc/638d36595da9fbb2c9d0be98bf6007442a65a521b614cf4645d04311b061/crispy_bootstrap4-2026.2.tar.gz", hash = "sha256:66f8f14bf9c2c16ed94243236ed253a94e5a625afa1ee64022ce29db98c6cd85", size = 34645, upload-time = "2026-02-11T22:45:05.422Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/6d/b90d601ea2449cc6b35b4b08be90fb1f6ca1baf2be383ed195f7bfa91a32/crispy_bootstrap4-2026.2-py3-none-any.whl", hash = "sha256:4b2b99dfe3e3cacb548702159462110901bd38792b650b770e50c62284ac2227", size = 23178, upload-time = "2026-02-11T22:45:04.108Z" }, -] - [[package]] name = "croniter" version = "6.2.4" @@ -261,18 +239,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/e6/4c34d94dfb74bbcbc489606e61f1924933de30d22c593dd1f429f35fbd7f/django_appconf-1.2.0-py3-none-any.whl", hash = "sha256:b81bce5ef0ceb9d84df48dfb623a32235d941c78cc5e45dbb6947f154ea277f4", size = 6500, upload-time = "2025-11-08T15:46:25.957Z" }, ] -[[package]] -name = "django-crispy-forms" -version = "2.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "django" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bc/f5/b79e3ed7cae871d5d71bf3448d627e1fabab769358bb90808bec056556fe/django_crispy_forms-2.7.tar.gz", hash = "sha256:4c59bed60417375cba26cebb2c67ab350b655934670270b1c89dbcd7e60f1b4c", size = 1097842, upload-time = "2026-07-29T11:12:12.081Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/44/50335d09c4deb70affee0c54feef07ba458df015e32e45490615d9dc5b6b/django_crispy_forms-2.7-py3-none-any.whl", hash = "sha256:42a7ecb05ac3fd050d006dfe7aeceb7f318c30e5b5124ff619e2be252f36f096", size = 31478, upload-time = "2026-07-29T11:12:11.052Z" }, -] - [[package]] name = "django-filter" version = "26.1" @@ -311,19 +277,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/f1/63caad7c9222c26a62082f4f777de26389233b7574629996098bf6d25a4d/django_redis-5.4.0-py3-none-any.whl", hash = "sha256:ebc88df7da810732e2af9987f7f426c96204bf89319df4c6da6ca9a2942edd5b", size = 31119, upload-time = "2023-10-01T20:21:33.009Z" }, ] -[[package]] -name = "django-registration" -version = "5.2.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "confusable-homoglyphs" }, - { name = "django" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9a/a0/f6e6d0a59b94eb4ab14983853334cb25401d677c5a3799aaca6819acf2eb/django_registration-5.2.1.tar.gz", hash = "sha256:06864f9da0bc4d7b073fb2da98d95d12428357ab0bc46e33f79c26707ec06bbe", size = 94187, upload-time = "2025-04-07T05:54:48.558Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/5d/aa2f82b3c809db66eb986963db1d4b89de190b4eac2e3021a725112e3b13/django_registration-5.2.1-py3-none-any.whl", hash = "sha256:7079e2364b15fc6bef18b81ae94c5e947b556abdbbfb19c9bcca14feafde6a3d", size = 105277, upload-time = "2025-04-07T05:54:46.981Z" }, -] - [[package]] name = "django-rq" version = "4.1.1" @@ -559,15 +512,12 @@ source = { editable = "." } dependencies = [ { name = "addict" }, { name = "coloredlogs" }, - { name = "crispy-bootstrap4" }, { name = "dj-database-url" }, { name = "dj-email-url" }, { name = "django" }, - { name = "django-crispy-forms" }, { name = "django-filter" }, { name = "django-imagekit" }, { name = "django-redis" }, - { name = "django-registration" }, { name = "django-rq" }, { name = "djangorestframework" }, { name = "drf-spectacular" }, @@ -607,15 +557,12 @@ docs = [ requires-dist = [ { name = "addict" }, { name = "coloredlogs" }, - { name = "crispy-bootstrap4", specifier = ">=2024.10" }, { name = "dj-database-url" }, { name = "dj-email-url" }, { name = "django", specifier = ">=5.2,<5.3" }, - { name = "django-crispy-forms", specifier = ">=2.4,<3" }, { name = "django-filter", specifier = ">=25.1" }, { name = "django-imagekit" }, { name = "django-redis", specifier = ">=5.4" }, - { name = "django-registration", specifier = ">=5.1" }, { name = "django-rq", specifier = ">=3,<5" }, { name = "djangorestframework", specifier = ">=3.16,<4" }, { name = "drf-spectacular", specifier = ">=0.28" }, From ae75457a76557787929d27c765051baeb8b82cb8 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:29:50 +0000 Subject: [PATCH 21/48] docs: changelog and readme for the new web interface Documents the React UI replacement and the API additions in the 2.0.0 changelog (including the bun build requirement and the new two-process dev flow), and adds a Development section to the README. --- README.md | 25 ++++++++++++++++++++++++ docs/source/releases/changelog.rst | 31 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/README.md b/README.md index 874ba1ed7..589462430 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,31 @@ $ open http://localhost:8000/ For much more detail, see the complete [Kegbot Server documentation](https://docs.kegbot.org/projects/kegbot-server/en/latest/). +## Development + +The web interface is a React single-page app (in `web-ui/`) served by the +Django backend (in `pykeg/`). For development, run both servers and browse +the vite dev server, which proxies API requests to Django: + +``` +$ uv sync # python dependencies +$ bun install # frontend dependencies +$ kegbot runserver # django, on port 8001 +$ bun run dev # vite, on http://localhost:8000 <-- browse here +``` + +Other useful commands: + +``` +$ uv run pytest # backend tests +$ bun run test # frontend tests +$ bun run check # frontend lint + typecheck +$ bun run build # production frontend build (web-ui/dist) +$ bun run generate-api # regenerate the API client from the schema +$ bun run generate-constants # regenerate web-ui/lib/shared-constants.ts +``` + + ## Documentation and Help * Main project page: https://kegbot.org/ diff --git a/docs/source/releases/changelog.rst b/docs/source/releases/changelog.rst index f46188dac..1d4ecb222 100644 --- a/docs/source/releases/changelog.rst +++ b/docs/source/releases/changelog.rst @@ -14,6 +14,24 @@ brought up to date. **Highlights** +* **The web interface is completely new.** A React single-page app + (Material UI) replaces the server-rendered Django UI. Every part of the + interface was rebuilt: browsing (home, kegs, drinkers, drinks, session + archives, system stats with charts), the fullscreen/kiosk mode (which now + updates in place instead of reloading), account management, registration + and password flows, the full admin area, and the setup wizard (which now + also works in production, not just ``DEBUG``). Public URLs are preserved, + including short links (``/d/``, ``/s/``) and links in older + notification e-mails. +* **The new API now covers everything the web UI does**, including: + list filtering and page sizing; a ``/api/users/me`` boot endpoint; + per-user/keg/session/system stats; keg and tap lifecycle operations + (attach/start/end kegs, record drinks and spills, connect hardware); + drink management and picture uploads; account self-service and + authentication flows (registration, password reset, e-mail change, + activation); admin user management and site settings; backups, logs, + test e-mail, and bugreport endpoints; an API-driven setup wizard; and + plugin settings. * Python 3.14 is now required (was 3.10). * Django 5.2 LTS (was 3.2). * Web server switched from gunicorn/gevent to waitress. @@ -45,6 +63,19 @@ brought up to date. jobs are handed to the worker only after the surrounding database transaction commits. Ensure ``run_workers`` is running (unchanged) to process them. +* **Building from source now requires** `bun `_ **for the + frontend.** Run ``bun install && bun run build`` before + ``kegbot collectstatic``; the Docker image does this automatically. For + development, run ``bun run dev`` (vite, http://localhost:8000) alongside + ``kegbot runserver`` (Django, now defaulting to port 8001); the dev + server proxies API requests to Django. +* **Site privacy is now enforced by the API** and rendered by the frontend; + the server-side privacy interstitials (and + ``KEGBOT_EXTRA_PRIVACY_EXEMPT_PATHS``) are gone. +* Plugins no longer provide Django template views; plugin settings are + managed through the plugin settings API. The webhook plugin is otherwise + unchanged. +* The legacy ``ga.js`` Google Analytics snippet is no longer emitted. * ``run_gunicorn`` was removed. Use ``kegbot run_server`` (now waitress). * The Docker image no longer publishes a ``linux/arm/v7`` variant (amd64 and arm64 only). From fbb34ff3e1204a07e380829ccedc363814b29917 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 22:32:26 +0000 Subject: [PATCH 22/48] web-ui: anchor the dev proxy rules to path segments Vite proxy keys are prefix matches, so "/api" also captured source modules under /api-client/ and returned them as HTML from Django. Regex keys anchored at a path-segment boundary proxy only /api, /media, and /static themselves. --- vite.config.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index 6ad64ca69..10a43d6f9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -23,10 +23,12 @@ export default defineConfig(({ command }) => ({ }, server: { port: 8000, + // Segment-anchored regexes: a bare "/api" key is a prefix match and + // would also capture source modules under /api-client/. proxy: { - "/api": DJANGO, - "/media": DJANGO, - "/static": DJANGO, + "^/api(?:/|$)": DJANGO, + "^/media(?:/|$)": DJANGO, + "^/static(?:/|$)": DJANGO, }, }, build: { From 58ddafb0738665e08143acbcb0281051445be1c0 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 23:15:40 +0000 Subject: [PATCH 23/48] =?UTF-8?q?web-ui:=20first=20design=20pass=20?= =?UTF-8?q?=E2=80=94=20theme,=20type=20system,=20mode=20switch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the stock MUI look with a deliberate system: cool neutral surfaces with a single amber accent, light and dark color schemes (following the OS by default, switchable from the nav, persisted), and IBM Plex type — Plex Sans for UI, Plex Mono for data: numerals, table headers, eyebrow section labels, and the wordmark. Fonts are bundled locally via fontsource. Chrome: hairline paper AppBar with the mono KEGBOT wordmark and amber tap glyph, quiet nav with an active state, and the color-mode toggle. The account area adopts the same side-nav layout as admin (shared SideNavLayout with an amber active edge); auth pages get the wordmark. Data display: chart series colors validated for contrast and CVD separation on both surfaces (amber/teal/green/plum), thin rounded bars and recessive axes; stat badges become mono-numeral tiles; the keg traffic-light progress bar becomes a ticked gauge with a mono readout (low levels recolor the readout, not the fill). Polish: window.prompt admin flows replaced with a promise-based input dialog, dashed-border empty states with hints, accent-colored letter avatars, buttons lose the all-caps. --- .gitignore | 3 + bun.lockb | Bin 121116 -> 121914 bytes package.json | 2 + web-ui/app.tsx | 9 +- web-ui/components/charts/chart-colors.ts | 9 ++ .../components/charts/temperature-chart.tsx | 11 +- .../charts/volume-by-drinker-chart.tsx | 19 ++- .../charts/volume-by-weekday-chart.tsx | 11 +- web-ui/components/color-mode-toggle.tsx | 28 +++++ web-ui/components/drink-list.tsx | 4 +- web-ui/components/empty-state.tsx | 37 ++++++ web-ui/components/event-timeline.tsx | 3 +- web-ui/components/keg-progress.tsx | 66 ++++++++-- web-ui/components/prompt-context.tsx | 88 +++++++++++++ web-ui/components/section.tsx | 36 ++++++ web-ui/components/session-volume-list.tsx | 4 +- web-ui/components/stat-badges.tsx | 13 +- web-ui/components/wordmark.tsx | 54 ++++++++ web-ui/layout/main-layout.tsx | 57 ++++++--- web-ui/layout/minimal-layout.tsx | 12 +- web-ui/layout/side-nav-layout.tsx | 84 +++++++++++++ web-ui/main.tsx | 5 + web-ui/theme/components.ts | 118 ++++++++++++++++++ web-ui/theme/palette.ts | 69 ++++++++++ web-ui/theme/theme.ts | 25 +++- web-ui/theme/typography.ts | 36 ++++++ web-ui/views/account/account-layout.tsx | 26 +--- web-ui/views/admin/admin-layout.tsx | 81 ++---------- web-ui/views/admin/drinks-admin-view.tsx | 8 +- web-ui/views/admin/export-view.tsx | 4 +- web-ui/views/admin/kegs-admin-view.tsx | 16 ++- web-ui/views/admin/users-admin-view.tsx | 9 +- web-ui/views/drinkers/drinker-view.tsx | 12 +- web-ui/views/fullscreen-view.tsx | 7 +- web-ui/views/home-view.tsx | 32 ++--- web-ui/views/kegs/keg-detail-view.tsx | 17 +-- web-ui/views/sessions/session-detail-view.tsx | 12 +- web-ui/views/sessions/session-list-view.tsx | 4 +- 38 files changed, 842 insertions(+), 189 deletions(-) create mode 100644 web-ui/components/charts/chart-colors.ts create mode 100644 web-ui/components/color-mode-toggle.tsx create mode 100644 web-ui/components/empty-state.tsx create mode 100644 web-ui/components/prompt-context.tsx create mode 100644 web-ui/components/section.tsx create mode 100644 web-ui/components/wordmark.tsx create mode 100644 web-ui/layout/side-nav-layout.tsx create mode 100644 web-ui/theme/components.ts create mode 100644 web-ui/theme/palette.ts create mode 100644 web-ui/theme/typography.ts diff --git a/.gitignore b/.gitignore index 10de10d69..0a6792259 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ test-db.sqlite node_modules/ /tmp + +### vite dev cache +.vite/ diff --git a/bun.lockb b/bun.lockb index 219511ae862abe9c6851116c5824aac900408508..1ed13ec9a525cb588a20e7421dd40c7e7f44e3d5 100755 GIT binary patch delta 22961 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 diff --git a/package.json b/package.json index 2f230356e..2d24574bb 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,8 @@ "dependencies": { "@emotion/react": "^11", "@emotion/styled": "^11", + "@fontsource/ibm-plex-mono": "^5.3.0", + "@fontsource/ibm-plex-sans": "^5.3.0", "@mui/icons-material": "^9", "@mui/material": "^9", "@mui/x-charts": "^9", diff --git a/web-ui/app.tsx b/web-ui/app.tsx index 1748fb1f6..f2671df01 100644 --- a/web-ui/app.tsx +++ b/web-ui/app.tsx @@ -6,6 +6,7 @@ import { RouterProvider } from "react-router/dom"; import { ConfigProvider } from "@/components/config-context"; import { ConfirmProvider } from "@/components/confirm-context"; import { CurrentUserProvider } from "@/components/current-user-context"; +import { PromptProvider } from "@/components/prompt-context"; import { SnackbarProvider } from "@/components/snackbar-context"; import { AppRoutes } from "@/routes"; import { theme } from "@/theme/theme"; @@ -17,13 +18,15 @@ export function App() { // router is created per mount so it reads the current location. const [router] = useState(() => createBrowserRouter([{ path: "*", element: }])); return ( - - + + }> - + + + diff --git a/web-ui/components/charts/chart-colors.ts b/web-ui/components/charts/chart-colors.ts new file mode 100644 index 000000000..0f2996fdf --- /dev/null +++ b/web-ui/components/charts/chart-colors.ts @@ -0,0 +1,9 @@ +import { useColorScheme } from "@mui/material/styles"; +import { CHART_SERIES_DARK, CHART_SERIES_LIGHT } from "@/theme/palette"; + +/** Validated chart series colors for the active color scheme. */ +export function useChartColors(): string[] { + const { mode, systemMode } = useColorScheme(); + const resolved = (mode === "system" ? systemMode : mode) ?? "light"; + return resolved === "dark" ? CHART_SERIES_DARK : CHART_SERIES_LIGHT; +} diff --git a/web-ui/components/charts/temperature-chart.tsx b/web-ui/components/charts/temperature-chart.tsx index ec51289c5..7b7899576 100644 --- a/web-ui/components/charts/temperature-chart.tsx +++ b/web-ui/components/charts/temperature-chart.tsx @@ -1,5 +1,6 @@ import { LineChart } from "@mui/x-charts/LineChart"; import type { Thermolog } from "@/api-client"; +import { useChartColors } from "@/components/charts/chart-colors"; import { useConfig } from "@/components/config-context"; import { useFormatters } from "@/components/use-formatters"; @@ -7,6 +8,7 @@ import { useFormatters } from "@/components/use-formatters"; export function TemperatureChart({ logs }: { logs: Thermolog[] }) { const { temperature } = useFormatters(); const { me } = useConfig(); + const colors = useChartColors(); const ordered = [...logs].reverse(); const useFahrenheit = me.site.temperature_display_units === "f"; return ( @@ -15,19 +17,26 @@ export function TemperatureChart({ logs }: { logs: Thermolog[] }) { { data: ordered.map((log) => new Date(log.time)), scaleType: "time", + disableLine: true, + disableTicks: true, }, ]} + yAxis={[{ disableLine: true, disableTicks: true, width: 40 }]} series={[ { data: ordered.map((log) => (useFahrenheit ? (log.temp * 9) / 5 + 32 : log.temp)), showMark: false, + // The cool series color: temperature reads as the teal line. + color: colors[1], valueFormatter: (value, context) => { const original = ordered[context.dataIndex]; return original ? temperature(original.temp) : String(value); }, }, ]} - height={260} + grid={{ horizontal: true }} + height={240} + margin={{ top: 8, right: 8 }} /> ); } diff --git a/web-ui/components/charts/volume-by-drinker-chart.tsx b/web-ui/components/charts/volume-by-drinker-chart.tsx index 235134263..5b486f917 100644 --- a/web-ui/components/charts/volume-by-drinker-chart.tsx +++ b/web-ui/components/charts/volume-by-drinker-chart.tsx @@ -1,4 +1,5 @@ import { BarChart } from "@mui/x-charts/BarChart"; +import { useChartColors } from "@/components/charts/chart-colors"; import { useFormatters } from "@/components/use-formatters"; export interface VolumeByDrinkerChartProps { @@ -10,20 +11,34 @@ export interface VolumeByDrinkerChartProps { /** Horizontal bar chart of poured volume by drinker. */ export function VolumeByDrinkerChart({ data, limit = 10 }: VolumeByDrinkerChartProps) { const { volume } = useFormatters(); + const colors = useChartColors(); const entries = Object.entries(data) .sort(([, a], [, b]) => b - a) .slice(0, limit); return ( name), scaleType: "band", width: 110 }]} + yAxis={[ + { + data: entries.map(([name]) => name), + scaleType: "band", + width: 120, + disableLine: true, + disableTicks: true, + }, + ]} + xAxis={[{ disableLine: true, disableTicks: true }]} series={[ { data: entries.map(([, value]) => value), valueFormatter: (v) => (v == null ? "" : volume(v)), }, ]} - height={Math.max(180, entries.length * 44)} + colors={colors} + borderRadius={4} + grid={{ vertical: true }} + height={Math.max(160, entries.length * 40)} + margin={{ top: 8, right: 8 }} /> ); } diff --git a/web-ui/components/charts/volume-by-weekday-chart.tsx b/web-ui/components/charts/volume-by-weekday-chart.tsx index e7797fcbc..bdbc503c8 100644 --- a/web-ui/components/charts/volume-by-weekday-chart.tsx +++ b/web-ui/components/charts/volume-by-weekday-chart.tsx @@ -1,4 +1,5 @@ import { BarChart } from "@mui/x-charts/BarChart"; +import { useChartColors } from "@/components/charts/chart-colors"; import { useFormatters } from "@/components/use-formatters"; const DAYS = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]; @@ -7,12 +8,18 @@ const LABELS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; /** Bar chart of poured volume by day of week. */ export function VolumeByWeekdayChart({ data }: { data: Record }) { const { volume } = useFormatters(); + const colors = useChartColors(); const values = DAYS.map((day) => data[day] ?? 0); return ( (v == null ? "" : volume(v)) }]} - height={260} + colors={colors} + borderRadius={4} + grid={{ horizontal: true }} + height={240} + margin={{ top: 8, right: 8 }} /> ); } diff --git a/web-ui/components/color-mode-toggle.tsx b/web-ui/components/color-mode-toggle.tsx new file mode 100644 index 000000000..380e9c2a1 --- /dev/null +++ b/web-ui/components/color-mode-toggle.tsx @@ -0,0 +1,28 @@ +import DarkModeOutlinedIcon from "@mui/icons-material/DarkModeOutlined"; +import LightModeOutlinedIcon from "@mui/icons-material/LightModeOutlined"; +import IconButton from "@mui/material/IconButton"; +import { useColorScheme } from "@mui/material/styles"; +import Tooltip from "@mui/material/Tooltip"; + +/** Light/dark switch. Follows the system until the user picks a side. */ +export function ColorModeToggle() { + const { mode, systemMode, setMode } = useColorScheme(); + const resolved = (mode === "system" ? systemMode : mode) ?? "light"; + const next = resolved === "dark" ? "light" : "dark"; + + return ( + + setMode(next)} + aria-label={`Switch to ${next} mode`} + > + {resolved === "dark" ? ( + + ) : ( + + )} + + + ); +} diff --git a/web-ui/components/drink-list.tsx b/web-ui/components/drink-list.tsx index fefbdc2ab..4d7f9edaa 100644 --- a/web-ui/components/drink-list.tsx +++ b/web-ui/components/drink-list.tsx @@ -5,9 +5,9 @@ import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; -import Typography from "@mui/material/Typography"; import { Link } from "react-router"; import type { Drink } from "@/api-client"; +import { EmptyState } from "@/components/empty-state"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; import { formatDateTime } from "@/lib/format"; @@ -24,7 +24,7 @@ export interface DrinkListProps { export function DrinkList({ drinks, hideKeg, hideUser }: DrinkListProps) { const { volume } = useFormatters(); if (drinks.length === 0) { - return No drinks yet.; + return ; } return ( diff --git a/web-ui/components/empty-state.tsx b/web-ui/components/empty-state.tsx new file mode 100644 index 000000000..58b2ad072 --- /dev/null +++ b/web-ui/components/empty-state.tsx @@ -0,0 +1,37 @@ +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import type { ReactNode } from "react"; + +export interface EmptyStateProps { + /** What there is none of ("No drinks yet."). */ + title: string; + /** Optional direction: what would put something here. */ + hint?: string; + /** Optional action (a button or link). */ + action?: ReactNode; +} + +/** Quiet, consistent empty state for lists and tables. */ +export function EmptyState({ title, hint, action }: EmptyStateProps) { + return ( + + {title} + {hint && ( + + {hint} + + )} + {action && {action}} + + ); +} diff --git a/web-ui/components/event-timeline.tsx b/web-ui/components/event-timeline.tsx index 094bb1745..9b6a6038f 100644 --- a/web-ui/components/event-timeline.tsx +++ b/web-ui/components/event-timeline.tsx @@ -5,6 +5,7 @@ import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; import type { SystemEvent } from "@/api-client"; +import { EmptyState } from "@/components/empty-state"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; @@ -74,7 +75,7 @@ function EventItem({ event }: { event: SystemEvent }) { /** Feed of recent SystemEvents ("Now Drinking" timeline). */ export function EventTimeline({ events }: { events: SystemEvent[] }) { if (events.length === 0) { - return No activity yet.; + return ; } return ( diff --git a/web-ui/components/keg-progress.tsx b/web-ui/components/keg-progress.tsx index c4e0775b3..41a709534 100644 --- a/web-ui/components/keg-progress.tsx +++ b/web-ui/components/keg-progress.tsx @@ -1,29 +1,71 @@ import Box from "@mui/material/Box"; -import LinearProgress from "@mui/material/LinearProgress"; +import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import type { Keg } from "@/api-client"; import { useFormatters } from "@/components/use-formatters"; import { kegPercentFull } from "@/lib/format"; +import { MONO_FONT } from "@/theme/typography"; -/** Fill bar for a keg, with remaining-volume label. */ +/** + * Keg fill gauge: amber fill on a ticked track, with a mono readout. + * Low levels change the readout color, not the fill. + */ export function KegProgress({ keg }: { keg: Keg }) { const { volume } = useFormatters(); const fullMl = keg.full_volume_ml ?? 0; const spilledMl = keg.spilled_ml ?? 0; const percent = kegPercentFull(keg.served_volume_ml, spilledMl, fullMl); const remaining = Math.max(0, fullMl - keg.served_volume_ml - spilledMl); - const color = percent < 10 ? "error" : percent < 25 ? "warning" : "success"; + const readoutColor = percent < 10 ? "error.main" : percent < 25 ? "warning.main" : "text.primary"; + return ( - - - {percent.toFixed(0)}% full ({volume(remaining)} remaining) - + + + {[25, 50, 75].map((tick) => ( + + ))} + + + + {percent.toFixed(0)}% FULL + + + {volume(remaining)} remaining + + ); } diff --git a/web-ui/components/prompt-context.tsx b/web-ui/components/prompt-context.tsx new file mode 100644 index 000000000..e71930d1c --- /dev/null +++ b/web-ui/components/prompt-context.tsx @@ -0,0 +1,88 @@ +import Button from "@mui/material/Button"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogTitle from "@mui/material/DialogTitle"; +import TextField from "@mui/material/TextField"; +import { createContext, type ReactNode, useCallback, useContext, useRef, useState } from "react"; + +export interface PromptOptions { + title: string; + /** Input label ("Volume (mL)"). */ + label: string; + initialValue?: string; + confirmText?: string; + /** HTML input type; "number" and "password" are the common ones. */ + type?: string; + helperText?: string; +} + +type PromptFn = (options: PromptOptions) => Promise; + +const PromptContext = createContext(null as unknown as PromptFn); + +/** + * Promise-based single-input dialogs (the civilized window.prompt): + * + * const prompt = usePrompt(); + * const volume = await prompt({ title: "Record spill", label: "Volume (mL)", type: "number" }); + * if (volume !== null) { ... } + */ +export function PromptProvider({ children }: { children: ReactNode }) { + const [options, setOptions] = useState(null); + const [value, setValue] = useState(""); + const resolver = useRef<((result: string | null) => void) | null>(null); + + const prompt = useCallback((opts) => { + setOptions(opts); + setValue(opts.initialValue ?? ""); + return new Promise((resolve) => { + resolver.current = resolve; + }); + }, []); + + const close = (result: string | null) => { + setOptions(null); + resolver.current?.(result); + resolver.current = null; + }; + + return ( + + {children} + close(null)} maxWidth="xs" fullWidth> + {options?.title} + +
    { + e.preventDefault(); + close(value); + }} + > + setValue(e.target.value)} + /> + +
    + + + + +
    +
    + ); +} + +export function usePrompt(): PromptFn { + return useContext(PromptContext); +} diff --git a/web-ui/components/section.tsx b/web-ui/components/section.tsx new file mode 100644 index 000000000..d57f56de7 --- /dev/null +++ b/web-ui/components/section.tsx @@ -0,0 +1,36 @@ +import Box from "@mui/material/Box"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import type { ReactNode } from "react"; + +export interface SectionProps { + /** Eyebrow label; rendered mono-uppercase ("ON TAP"). */ + label: string; + /** Slot on the right of the eyebrow row (actions, filters, counts). */ + action?: ReactNode; + children: ReactNode; +} + +/** Standard content section: mono eyebrow label over the content. */ +export function Section({ label, action, children }: SectionProps) { + return ( + + + + {label} + + {action} + + {children} + + ); +} diff --git a/web-ui/components/session-volume-list.tsx b/web-ui/components/session-volume-list.tsx index 394c4d111..097385026 100644 --- a/web-ui/components/session-volume-list.tsx +++ b/web-ui/components/session-volume-list.tsx @@ -4,8 +4,8 @@ import TableBody from "@mui/material/TableBody"; import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableRow from "@mui/material/TableRow"; -import Typography from "@mui/material/Typography"; import { Link } from "react-router"; +import { EmptyState } from "@/components/empty-state"; import { useFormatters } from "@/components/use-formatters"; /** @@ -20,7 +20,7 @@ export function SessionVolumeList({ const { volume } = useFormatters(); const entries = Object.entries(volumeBySession).sort(([a], [b]) => Number(b) - Number(a)); if (entries.length === 0) { - return No sessions yet.; + return ; } return ( diff --git a/web-ui/components/stat-badges.tsx b/web-ui/components/stat-badges.tsx index 04d81a00f..1d6c2ed96 100644 --- a/web-ui/components/stat-badges.tsx +++ b/web-ui/components/stat-badges.tsx @@ -5,14 +5,19 @@ import Typography from "@mui/material/Typography"; import type { ReactNode } from "react"; import { useFormatters } from "@/components/use-formatters"; import type { StatsBlob } from "@/lib/stats"; +import { MONO_FONT } from "@/theme/typography"; function Badge({ value, caption }: { value: ReactNode; caption: string }) { return ( - - - {value} - + + + + {value} + + {caption} diff --git a/web-ui/components/wordmark.tsx b/web-ui/components/wordmark.tsx new file mode 100644 index 000000000..5027a84d0 --- /dev/null +++ b/web-ui/components/wordmark.tsx @@ -0,0 +1,54 @@ +import Box from "@mui/material/Box"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { MONO_FONT } from "@/theme/typography"; + +/** + * The Kegbot wordmark: mono, uppercase, tracked out, with an amber + * tap-handle tick. Site title (when customized) rides alongside. + */ +export function Wordmark({ siteTitle }: { siteTitle?: string | null }) { + const showSiteTitle = siteTitle && siteTitle.toLowerCase() !== "kegbot"; + return ( + + + + Kegbot + + {showSiteTitle && ( + + {siteTitle} + + )} + + ); +} diff --git a/web-ui/layout/main-layout.tsx b/web-ui/layout/main-layout.tsx index c87c95619..6fd78a34b 100644 --- a/web-ui/layout/main-layout.tsx +++ b/web-ui/layout/main-layout.tsx @@ -8,11 +8,12 @@ import IconButton from "@mui/material/IconButton"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Toolbar from "@mui/material/Toolbar"; -import Typography from "@mui/material/Typography"; import { useState } from "react"; import { Link, Outlet, useLocation, useNavigate } from "react-router"; +import { ColorModeToggle } from "@/components/color-mode-toggle"; import { useConfig } from "@/components/config-context"; import { useCurrentUser } from "@/components/current-user-context"; +import { Wordmark } from "@/components/wordmark"; function UserMenu() { const { me } = useConfig(); @@ -46,7 +47,7 @@ function UserMenu() { <> setAnchor(e.currentTarget)} size="large"> {mugshotUrl ? ( - + ) : ( )} @@ -90,32 +91,54 @@ const NAV_ITEMS: Array<{ label: string; to: string }> = [ { label: "Stats", to: "/stats" }, ]; +function NavButton({ label, to }: { label: string; to: string }) { + const location = useLocation(); + const active = location.pathname === to || location.pathname.startsWith(`${to}/`); + return ( + + ); +} + export function MainLayout() { const { me } = useConfig(); return ( - - - - {me.site.title} - - + + + + + + {NAV_ITEMS.map((item) => ( - + ))} + - + diff --git a/web-ui/layout/minimal-layout.tsx b/web-ui/layout/minimal-layout.tsx index 12601f8b4..4803b0261 100644 --- a/web-ui/layout/minimal-layout.tsx +++ b/web-ui/layout/minimal-layout.tsx @@ -1,12 +1,20 @@ import Box from "@mui/material/Box"; import Container from "@mui/material/Container"; -import { Outlet } from "react-router"; +import { Link, Outlet } from "react-router"; +import { Wordmark } from "@/components/wordmark"; -/** Chrome-free layout for auth, setup, and fullscreen views. */ +/** Chrome-free layout for auth, setup, and token-link views. */ export function MinimalLayout() { return ( + + + diff --git a/web-ui/layout/side-nav-layout.tsx b/web-ui/layout/side-nav-layout.tsx new file mode 100644 index 000000000..b6deb6373 --- /dev/null +++ b/web-ui/layout/side-nav-layout.tsx @@ -0,0 +1,84 @@ +import Box from "@mui/material/Box"; +import Divider from "@mui/material/Divider"; +import List from "@mui/material/List"; +import ListItemButton from "@mui/material/ListItemButton"; +import ListItemText from "@mui/material/ListItemText"; +import ListSubheader from "@mui/material/ListSubheader"; +import Paper from "@mui/material/Paper"; +import { useTheme } from "@mui/material/styles"; +import useMediaQuery from "@mui/material/useMediaQuery"; +import type { ReactNode } from "react"; +import { Link, useLocation } from "react-router"; + +export interface SideNavItem { + label: string; + to: string; +} + +export interface SideNavSection { + /** Optional group header (mono-uppercase). */ + header?: string; + items: SideNavItem[]; +} + +export interface SideNavLayoutProps { + sections: SideNavSection[]; + children: ReactNode; +} + +/** + * Sectioned side navigation with content beside it (stacked on small + * screens). Used by both the account and admin areas. + */ +export function SideNavLayout({ sections, children }: SideNavLayoutProps) { + const location = useLocation(); + const theme = useTheme(); + const narrow = useMediaQuery(theme.breakpoints.down("md")); + + const allItems = sections.flatMap((section) => section.items); + const active = allItems.reduce( + (best, item) => + location.pathname === item.to || + (location.pathname.startsWith(`${item.to}/`) && item.to.length > best.length) + ? item.to + : best, + allItems[0]?.to ?? "", + ); + + return ( + + + + {sections.map((section, index) => ( + + {section.header && {section.header}} + {section.items.map((item) => ( + + + + ))} + {index < sections.length - 1 && } + + ))} + + + {children} + + ); +} diff --git a/web-ui/main.tsx b/web-ui/main.tsx index 7c93bbd67..7473b27ae 100644 --- a/web-ui/main.tsx +++ b/web-ui/main.tsx @@ -1,3 +1,8 @@ +import "@fontsource/ibm-plex-sans/400.css"; +import "@fontsource/ibm-plex-sans/500.css"; +import "@fontsource/ibm-plex-sans/600.css"; +import "@fontsource/ibm-plex-mono/500.css"; +import "@fontsource/ibm-plex-mono/600.css"; import { createRoot } from "react-dom/client"; import { App } from "@/app"; import "@/lib/api"; diff --git a/web-ui/theme/components.ts b/web-ui/theme/components.ts new file mode 100644 index 000000000..7f1179b45 --- /dev/null +++ b/web-ui/theme/components.ts @@ -0,0 +1,118 @@ +import type { Theme, ThemeOptions } from "@mui/material/styles"; +import { MONO_FONT } from "@/theme/typography"; + +/** Component defaults and overrides shared by both color schemes. */ +export const components: ThemeOptions["components"] = { + MuiButton: { + defaultProps: { + disableElevation: true, + }, + styleOverrides: { + root: { + borderRadius: 8, + }, + }, + }, + MuiPaper: { + styleOverrides: { + rounded: { + borderRadius: 10, + }, + }, + }, + MuiCard: { + styleOverrides: { + root: { + borderRadius: 10, + }, + }, + }, + MuiCardHeader: { + defaultProps: { + slotProps: { + title: { variant: "h6" }, + subheader: { variant: "body2" }, + }, + }, + styleOverrides: { + root: { + paddingBottom: 8, + }, + }, + }, + MuiTableCell: { + styleOverrides: { + head: ({ theme }: { theme: Theme }) => ({ + fontFamily: MONO_FONT, + fontSize: "0.6875rem", + fontWeight: 600, + textTransform: "uppercase", + letterSpacing: "0.08em", + color: (theme.vars ?? theme).palette.text.secondary, + whiteSpace: "nowrap", + }), + }, + }, + MuiChip: { + styleOverrides: { + root: { + fontWeight: 600, + }, + }, + }, + MuiTab: { + styleOverrides: { + root: { + textTransform: "none", + fontWeight: 600, + }, + }, + }, + MuiLink: { + defaultProps: { + underline: "hover", + }, + styleOverrides: { + root: { + fontWeight: 500, + }, + }, + }, + MuiAvatar: { + styleOverrides: { + // Letter-fallback avatars wear the accent, quietly. + colorDefault: ({ theme }: { theme: Theme }) => ({ + backgroundColor: (theme.vars ?? theme).palette.primary.main, + color: (theme.vars ?? theme).palette.primary.contrastText, + fontWeight: 600, + }), + }, + }, + MuiAppBar: { + defaultProps: { + elevation: 0, + color: "transparent", + }, + }, + MuiListSubheader: { + styleOverrides: { + root: ({ theme }: { theme: Theme }) => ({ + fontFamily: MONO_FONT, + fontSize: "0.65rem", + fontWeight: 600, + textTransform: "uppercase", + letterSpacing: "0.12em", + lineHeight: "2.6", + color: (theme.vars ?? theme).palette.text.secondary, + backgroundColor: "transparent", + }), + }, + }, + MuiTooltip: { + styleOverrides: { + tooltip: { + fontSize: "0.75rem", + }, + }, + }, +}; diff --git a/web-ui/theme/palette.ts b/web-ui/theme/palette.ts new file mode 100644 index 000000000..f7ff6ed0a --- /dev/null +++ b/web-ui/theme/palette.ts @@ -0,0 +1,69 @@ +/** + * Kegbot palette: cool near-neutral surfaces with a single amber accent + * ("precision instrument, warmly accented"). Chart series colors are + * validated for contrast and CVD separation against each mode's + * surface — change them only with revalidation. + */ + +export const lightPalette = { + primary: { + main: "#96590E", + light: "#C98833", + dark: "#74450B", + contrastText: "#FFFFFF", + }, + secondary: { + main: "#5C5A55", + light: "#807E78", + dark: "#403E3A", + contrastText: "#FFFFFF", + }, + success: { main: "#2F7D46" }, + warning: { main: "#A66A0E" }, + error: { main: "#C2402F" }, + info: { main: "#1878A0" }, + background: { + default: "#F6F6F4", + paper: "#FFFFFF", + }, + text: { + primary: "#1C1B18", + secondary: "#605C54", + }, + divider: "rgba(28, 27, 24, 0.12)", +}; + +export const darkPalette = { + primary: { + main: "#E29A3F", + light: "#EDB56C", + dark: "#B97921", + contrastText: "#1A1206", + }, + secondary: { + main: "#8A867E", + light: "#ABA79F", + dark: "#6A665F", + contrastText: "#131313", + }, + success: { main: "#6FAF7C" }, + warning: { main: "#D89A3E" }, + error: { main: "#E07B6C" }, + info: { main: "#58A8C6" }, + background: { + default: "#141311", + paper: "#1D1B18", + }, + text: { + primary: "#EDEBE6", + secondary: "#A6A299", + }, + divider: "rgba(237, 235, 230, 0.12)", +}; + +/** + * Chart series colors in fixed assignment order (amber, teal, hop + * green, plum). Validated with the palette checker for both surfaces. + */ +export const CHART_SERIES_LIGHT = ["#B96A1B", "#1878A0", "#5F8A2C", "#9A4E86"]; +export const CHART_SERIES_DARK = ["#D07E1F", "#2E8CB4", "#6FA032", "#B15E97"]; diff --git a/web-ui/theme/theme.ts b/web-ui/theme/theme.ts index b3a7c7192..1fa160803 100644 --- a/web-ui/theme/theme.ts +++ b/web-ui/theme/theme.ts @@ -1,5 +1,24 @@ import { createTheme } from "@mui/material/styles"; +import { components } from "@/theme/components"; +import { darkPalette, lightPalette } from "@/theme/palette"; +import { typography } from "@/theme/typography"; -// Stock MUI theme for now. Palette, typography, and component overrides -// will layer in here as the design evolves. -export const theme = createTheme(); +/** + * The Kegbot theme: cool neutral surfaces, one amber accent, IBM Plex + * type with mono data accents. Light and dark schemes follow the system + * by default; the nav switch persists a per-user override. + */ +export const theme = createTheme({ + cssVariables: { + colorSchemeSelector: "data-color-scheme", + }, + colorSchemes: { + light: { palette: lightPalette }, + dark: { palette: darkPalette }, + }, + shape: { + borderRadius: 10, + }, + typography, + components, +}); diff --git a/web-ui/theme/typography.ts b/web-ui/theme/typography.ts new file mode 100644 index 000000000..1e3898d59 --- /dev/null +++ b/web-ui/theme/typography.ts @@ -0,0 +1,36 @@ +import type { ThemeOptions } from "@mui/material/styles"; + +/** + * Type system: IBM Plex Sans for UI text, IBM Plex Mono for anything + * data-like — numerals, eyebrow labels, the wordmark. The mono face is + * the personality of the app; use it deliberately, not everywhere. + */ + +export const BODY_FONT = '"IBM Plex Sans", "Helvetica Neue", Arial, sans-serif'; +export const MONO_FONT = '"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace'; + +export const typography: ThemeOptions["typography"] = { + fontFamily: BODY_FONT, + h1: { fontWeight: 600, fontSize: "2.5rem", letterSpacing: "-0.02em" }, + h2: { fontWeight: 600, fontSize: "2.125rem", letterSpacing: "-0.015em" }, + h3: { fontWeight: 600, fontSize: "1.75rem", letterSpacing: "-0.01em" }, + // Page titles. + h4: { fontWeight: 600, fontSize: "1.625rem", letterSpacing: "-0.01em" }, + h5: { fontWeight: 600, fontSize: "1.25rem" }, + // Card headers. + h6: { fontWeight: 600, fontSize: "1rem" }, + subtitle1: { fontWeight: 600 }, + subtitle2: { fontWeight: 600, fontSize: "0.8125rem" }, + body1: { fontSize: "0.9375rem" }, + body2: { fontSize: "0.875rem" }, + button: { fontWeight: 600, textTransform: "none", letterSpacing: "0.01em" }, + // Eyebrow/section labels: mono, uppercase, tracked out. + overline: { + fontFamily: MONO_FONT, + fontWeight: 600, + fontSize: "0.6875rem", + letterSpacing: "0.12em", + lineHeight: 2, + }, + caption: { fontSize: "0.75rem" }, +}; diff --git a/web-ui/views/account/account-layout.tsx b/web-ui/views/account/account-layout.tsx index f14cf0d44..f4a1d2c59 100644 --- a/web-ui/views/account/account-layout.tsx +++ b/web-ui/views/account/account-layout.tsx @@ -1,15 +1,12 @@ -import Stack from "@mui/material/Stack"; -import Tab from "@mui/material/Tab"; -import Tabs from "@mui/material/Tabs"; -import { Link, Outlet, useLocation } from "react-router"; +import { Outlet } from "react-router"; import { useConfig } from "@/components/config-context"; +import { SideNavLayout } from "@/layout/side-nav-layout"; -/** Account section chrome: tab bar over the active account view. */ +/** Account section chrome: shared side navigation (same as admin). */ export function AccountLayout() { const { me } = useConfig(); - const location = useLocation(); - const tabs = [ + const items = [ { label: "Account", to: "/account" }, { label: "Profile", to: "/account/profile" }, { label: "Password", to: "/account/password" }, @@ -17,20 +14,9 @@ export function AccountLayout() { ...(me.can_invite ? [{ label: "Invite", to: "/account/invite" }] : []), ]; - const active = tabs.reduce( - (best, tab) => - location.pathname.startsWith(tab.to) && tab.to.length > best.length ? tab.to : best, - "/account", - ); - return ( - - - {tabs.map((tab) => ( - - ))} - + - + ); } diff --git a/web-ui/views/admin/admin-layout.tsx b/web-ui/views/admin/admin-layout.tsx index 2bf6ba647..7c1b04f22 100644 --- a/web-ui/views/admin/admin-layout.tsx +++ b/web-ui/views/admin/admin-layout.tsx @@ -1,26 +1,8 @@ -import Box from "@mui/material/Box"; -import Divider from "@mui/material/Divider"; -import List from "@mui/material/List"; -import ListItemButton from "@mui/material/ListItemButton"; -import ListItemText from "@mui/material/ListItemText"; -import ListSubheader from "@mui/material/ListSubheader"; -import Paper from "@mui/material/Paper"; -import { useTheme } from "@mui/material/styles"; -import useMediaQuery from "@mui/material/useMediaQuery"; -import { Link, Outlet, useLocation } from "react-router"; +import { Outlet } from "react-router"; import { useConfig } from "@/components/config-context"; +import { SideNavLayout, type SideNavSection } from "@/layout/side-nav-layout"; -interface NavEntry { - label: string; - to: string; -} - -interface NavSection { - header: string; - items: NavEntry[]; -} - -function useNavSections(): NavSection[] { +function useNavSections(): SideNavSection[] { const { me } = useConfig(); const sensing = me.site.enable_sensing ?? true; const users = me.site.enable_users ?? true; @@ -68,63 +50,14 @@ function useNavSections(): NavSection[] { { label: "Backup / Export", to: "/kegadmin/export" }, ], }, - ]; + ].filter((section) => section.items.length > 0); } export function AdminLayout() { const sections = useNavSections(); - const location = useLocation(); - const theme = useTheme(); - const narrow = useMediaQuery(theme.breakpoints.down("md")); - - const allItems = sections.flatMap((s) => s.items); - const active = allItems.reduce( - (best, item) => - location.pathname === item.to || - (location.pathname.startsWith(`${item.to}/`) && item.to.length > best.length) - ? item.to - : best, - "/kegadmin", - ); - - const nav = ( - - {sections.map((section) => - section.items.length === 0 ? null : ( - - {section.header} - {section.items.map((item) => ( - - - - ))} - - - ), - )} - - ); - return ( - - - {nav} - - - - - + + + ); } diff --git a/web-ui/views/admin/drinks-admin-view.tsx b/web-ui/views/admin/drinks-admin-view.tsx index 6b7dc0c8d..b631fe9a0 100644 --- a/web-ui/views/admin/drinks-admin-view.tsx +++ b/web-ui/views/admin/drinks-admin-view.tsx @@ -16,6 +16,7 @@ import { drinksDestroy, drinksList, drinksReassignCreate } from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; +import { usePrompt } from "@/components/prompt-context"; import { useSnackbar } from "@/components/snackbar-context"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; @@ -25,6 +26,7 @@ import { useCursorList } from "@/lib/use-cursor-list"; function DrinkActions({ drink, onChanged }: { drink: Drink; onChanged: () => void }) { const confirm = useConfirm(); + const prompt = usePrompt(); const { showMessage } = useSnackbar(); const [anchor, setAnchor] = useState(null); @@ -56,7 +58,11 @@ function DrinkActions({ drink, onChanged }: { drink: Drink; onChanged: () => voi const reassign = async () => { setAnchor(null); - const username = window.prompt("Reassign this drink to username:"); + const username = await prompt({ + title: `Reassign drink #${drink.id}`, + label: "Username", + confirmText: "Reassign", + }); if (!username) { return; } diff --git a/web-ui/views/admin/export-view.tsx b/web-ui/views/admin/export-view.tsx index 9c490f0c0..fe559a2e4 100644 --- a/web-ui/views/admin/export-view.tsx +++ b/web-ui/views/admin/export-view.tsx @@ -7,10 +7,10 @@ import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; -import Typography from "@mui/material/Typography"; import { useState } from "react"; import { adminBackupsCreate, adminBackupsDestroy, adminBackupsRetrieve } from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; +import { EmptyState } from "@/components/empty-state"; import { Page } from "@/components/page"; import { useSnackbar } from "@/components/snackbar-context"; import { toErrorMessage, unwrap } from "@/lib/api"; @@ -83,7 +83,7 @@ export function ExportView() { } > {backups.data && backups.data.length === 0 ? ( - No backups yet. + ) : ( diff --git a/web-ui/views/admin/kegs-admin-view.tsx b/web-ui/views/admin/kegs-admin-view.tsx index 059fbc8aa..22b59ee1b 100644 --- a/web-ui/views/admin/kegs-admin-view.tsx +++ b/web-ui/views/admin/kegs-admin-view.tsx @@ -28,6 +28,7 @@ import { import { useConfirm } from "@/components/confirm-context"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; +import { usePrompt } from "@/components/prompt-context"; import { useSnackbar } from "@/components/snackbar-context"; import { useFormatters } from "@/components/use-formatters"; import { toErrorMessage, unwrap } from "@/lib/api"; @@ -37,6 +38,7 @@ import { kegStatusChip } from "@/views/kegs/keg-list-view"; function KegActions({ keg, onChanged }: { keg: Keg; onChanged: () => void }) { const confirm = useConfirm(); + const prompt = usePrompt(); const { showMessage } = useSnackbar(); const [anchor, setAnchor] = useState(null); @@ -81,7 +83,12 @@ function KegActions({ keg, onChanged }: { keg: Keg; onChanged: () => void }) { { setAnchor(null); - const volume = window.prompt("Spill volume (mL)?"); + const volume = await prompt({ + title: `Record spill against keg #${keg.id}`, + label: "Volume (mL)", + type: "number", + confirmText: "Record spill", + }); if (!volume) { return; } @@ -120,12 +127,17 @@ function KegActions({ keg, onChanged }: { keg: Keg; onChanged: () => void }) { function EditableNotes({ keg, onChanged }: { keg: Keg; onChanged: () => void }) { const { showMessage } = useSnackbar(); + const prompt = usePrompt(); return ( { - const description = window.prompt("Keg description:", keg.description ?? ""); + const description = await prompt({ + title: `Keg #${keg.id} description`, + label: "Description", + initialValue: keg.description ?? "", + }); if (description === null) { return; } diff --git a/web-ui/views/admin/users-admin-view.tsx b/web-ui/views/admin/users-admin-view.tsx index bb472a44e..6165a9552 100644 --- a/web-ui/views/admin/users-admin-view.tsx +++ b/web-ui/views/admin/users-admin-view.tsx @@ -21,6 +21,7 @@ import type { User } from "@/api-client"; import { usersCreate, usersList, usersPartialUpdate, usersSetPasswordCreate } from "@/api-client"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; +import { usePrompt } from "@/components/prompt-context"; import { useSnackbar } from "@/components/snackbar-context"; import { UserLink } from "@/components/user-link"; import { toErrorMessage, unwrap } from "@/lib/api"; @@ -28,6 +29,7 @@ import { useCursorList } from "@/lib/use-cursor-list"; function UserActions({ user, onChanged }: { user: User; onChanged: () => void }) { const { showMessage } = useSnackbar(); + const prompt = usePrompt(); const [anchor, setAnchor] = useState(null); const patch = async (body: Record, message: string) => { @@ -43,7 +45,12 @@ function UserActions({ user, onChanged }: { user: User; onChanged: () => void }) const setPassword = async () => { setAnchor(null); - const password = window.prompt(`New password for ${user.username}:`); + const password = await prompt({ + title: `Set password for ${user.username}`, + label: "New password", + type: "password", + confirmText: "Set password", + }); if (!password) { return; } diff --git a/web-ui/views/drinkers/drinker-view.tsx b/web-ui/views/drinkers/drinker-view.tsx index 4f8c35ccc..f30163f14 100644 --- a/web-ui/views/drinkers/drinker-view.tsx +++ b/web-ui/views/drinkers/drinker-view.tsx @@ -11,6 +11,7 @@ import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-char import { DrinkList } from "@/components/drink-list"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; +import { Section } from "@/components/section"; import { SessionVolumeList } from "@/components/session-volume-list"; import { StatBadges } from "@/components/stat-badges"; import { unwrap } from "@/lib/api"; @@ -77,11 +78,12 @@ export function DrinkerView() { )} - - Drinks - - - +
    + + + + +
    )} diff --git a/web-ui/views/fullscreen-view.tsx b/web-ui/views/fullscreen-view.tsx index 552ffaba5..a60e9fb31 100644 --- a/web-ui/views/fullscreen-view.tsx +++ b/web-ui/views/fullscreen-view.tsx @@ -1,12 +1,12 @@ import Box from "@mui/material/Box"; import Grid from "@mui/material/Grid"; -import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { useEffect } from "react"; import { statusRetrieve } from "@/api-client"; import { useConfig } from "@/components/config-context"; import { EventTimeline } from "@/components/event-timeline"; import { LoadingZone } from "@/components/loading-zone"; +import { Section } from "@/components/section"; import { TapCardLive } from "@/components/tap-card-live"; import { unwrap } from "@/lib/api"; import { useAsyncData } from "@/lib/use-async-data"; @@ -41,10 +41,9 @@ export function FullscreenView() { - - Recent Activity +
    - +
    )} diff --git a/web-ui/views/home-view.tsx b/web-ui/views/home-view.tsx index 3cedfe863..573cc1657 100644 --- a/web-ui/views/home-view.tsx +++ b/web-ui/views/home-view.tsx @@ -1,9 +1,10 @@ import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; -import Typography from "@mui/material/Typography"; import { statusRetrieve } from "@/api-client"; +import { EmptyState } from "@/components/empty-state"; import { EventTimeline } from "@/components/event-timeline"; import { Page } from "@/components/page"; +import { Section } from "@/components/section"; import { TapCardLive } from "@/components/tap-card-live"; import { unwrap } from "@/lib/api"; import { useAsyncData } from "@/lib/use-async-data"; @@ -14,23 +15,26 @@ export function HomeView() { return ( {status.data && ( - + - - On Tap - {status.data.taps.length === 0 && ( - No taps configured. - )} - {status.data.taps.map((tap) => ( - - ))} - +
    + + {status.data.taps.length === 0 && ( + + )} + {status.data.taps.map((tap) => ( + + ))} + +
    - - Recent Activity +
    - +
    )} diff --git a/web-ui/views/kegs/keg-detail-view.tsx b/web-ui/views/kegs/keg-detail-view.tsx index 87722a912..4f8aaa53f 100644 --- a/web-ui/views/kegs/keg-detail-view.tsx +++ b/web-ui/views/kegs/keg-detail-view.tsx @@ -11,6 +11,7 @@ import { DrinkList } from "@/components/drink-list"; import { KegProgress } from "@/components/keg-progress"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; +import { Section } from "@/components/section"; import { SessionVolumeList } from "@/components/session-volume-list"; import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; @@ -80,16 +81,16 @@ export function KegDetailView() { )}
    {stats.data?.volume_by_session && ( - - Sessions +
    - +
    )} - - Drinks - - - +
    + + + + +
    )}
    diff --git a/web-ui/views/sessions/session-detail-view.tsx b/web-ui/views/sessions/session-detail-view.tsx index 85104ac84..eb31c497e 100644 --- a/web-ui/views/sessions/session-detail-view.tsx +++ b/web-ui/views/sessions/session-detail-view.tsx @@ -10,6 +10,7 @@ import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-char import { DrinkList } from "@/components/drink-list"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; +import { Section } from "@/components/section"; import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; import { formatDateTime } from "@/lib/format"; @@ -57,11 +58,12 @@ export function SessionDetailView() { )} - - Drinks - - - +
    + + + + +
    )} diff --git a/web-ui/views/sessions/session-list-view.tsx b/web-ui/views/sessions/session-list-view.tsx index e482d1eef..ff4dbd57c 100644 --- a/web-ui/views/sessions/session-list-view.tsx +++ b/web-ui/views/sessions/session-list-view.tsx @@ -6,10 +6,10 @@ import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; -import Typography from "@mui/material/Typography"; import { Link, useParams } from "react-router"; import type { DrinkingSession } from "@/api-client"; import { sessionsList } from "@/api-client"; +import { EmptyState } from "@/components/empty-state"; import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; import { useFormatters } from "@/components/use-formatters"; @@ -44,7 +44,7 @@ export function SessionListView() { {list.items.length === 0 && !list.loading && ( - No sessions found. + )} {list.items.length > 0 && ( From 4425490081e1e959b55d4b7cae4f0e2b9a0f3942 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 23:21:56 +0000 Subject: [PATCH 24/48] web-ui: recompose the homepage around the taps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tap deck is now the hero: a full-width responsive row of redesigned tap cards, with the activity feed below in a constrained measure — replacing the inherited two-column layout that gave the log feed the wide column and the taps the leftovers. Tap cards get a fixed internal grid so a row of taps lines up: eyebrow tap name with a mono temperature readout, the beverage name at display size, one quiet metadata line (producer · style · ABV), and the gauge band bottom-aligned. The activity feed drops its two-line stacks for a one-line grammar — avatar/keg-glyph gutter, sentence ('alice poured 12.0 oz — "cheers!"'), compact mono time ('4m') in the right gutter. --- web-ui/components/event-timeline.tsx | 171 +++++++++++++++++++-------- web-ui/components/tap-card.tsx | 113 ++++++++++++------ web-ui/components/use-formatters.ts | 4 + web-ui/lib/format.ts | 19 +++ web-ui/test/home.test.tsx | 2 +- web-ui/views/home-view.tsx | 42 +++---- 6 files changed, 247 insertions(+), 104 deletions(-) diff --git a/web-ui/components/event-timeline.tsx b/web-ui/components/event-timeline.tsx index 9b6a6038f..1dc04f14c 100644 --- a/web-ui/components/event-timeline.tsx +++ b/web-ui/components/event-timeline.tsx @@ -1,86 +1,159 @@ +import SportsBarOutlinedIcon from "@mui/icons-material/SportsBarOutlined"; +import Avatar from "@mui/material/Avatar"; +import Box from "@mui/material/Box"; import MuiLink from "@mui/material/Link"; import List from "@mui/material/List"; import ListItem from "@mui/material/ListItem"; -import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; import type { SystemEvent } from "@/api-client"; import { EmptyState } from "@/components/empty-state"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; +import { MONO_FONT } from "@/theme/typography"; + +function KegLink({ event }: { event: SystemEvent }) { + if (!event.keg) { + return <>A keg; + } + return ( + + {event.keg.beverage.name} + + ); +} + +/** One-line sentence for an event ("alice poured 12.0 oz"). */ +function EventSentence({ event }: { event: SystemEvent }) { + const { volume } = useFormatters(); -function eventDescription(event: SystemEvent): string { switch (event.kind) { case "drink_poured": - return "poured a drink"; + return ( + <> + {" "} + {event.drink ? ( + <> + poured{" "} + + {volume(event.drink.volume_ml)} + + + ) : ( + "poured a drink" + )} + {event.drink?.shout && ( + + {" "} + — “{event.drink.shout}” + + )} + + ); case "session_started": - return "started a session"; + return ( + <> + started{" "} + {event.session ? ( + + a new session + + ) : ( + "a new session" + )} + + ); case "session_joined": - return "joined the session"; + return ( + <> + joined the session + + ); case "keg_tapped": - return "keg was tapped"; + return ( + <> + was tapped + + ); case "keg_volume_low": - return "keg is running low"; + return ( + <> + is running low + + ); case "keg_ended": - return "keg was finished"; + return ( + <> + was finished + + ); default: - return event.kind; + return <>{event.kind}; } } -function EventItem({ event }: { event: SystemEvent }) { - const { volume, relative } = useFormatters(); +function EventGutter({ event }: { event: SystemEvent }) { const isKegEvent = event.kind === "keg_tapped" || event.kind === "keg_volume_low" || event.kind === "keg_ended"; - + if (isKegEvent || !event.user) { + return ( + + + + ); + } + const name = event.user.display_name || event.user.username; return ( - - - - - {isKegEvent && event.keg ? ( - <> - - {event.keg.beverage.name} - {" "} - {eventDescription(event)} - - ) : ( - <> - {eventDescription(event)} - - )} - - - {relative(event.time)} - - - {event.kind === "drink_poured" && event.drink && ( - - - {volume(event.drink.volume_ml)} - - {event.drink.shout ? ` — “${event.drink.shout}”` : ""} - - )} - - + + {name.charAt(0).toUpperCase()} + ); } -/** Feed of recent SystemEvents ("Now Drinking" timeline). */ +/** Feed of recent SystemEvents: gutter · sentence · mono time. */ export function EventTimeline({ events }: { events: SystemEvent[] }) { + const { compactRelative } = useFormatters(); if (events.length === 0) { return ; } return ( {events.map((event) => ( - + + + + + + + {compactRelative(event.time)} + + ))} ); diff --git a/web-ui/components/tap-card.tsx b/web-ui/components/tap-card.tsx index 66cdd217e..ab130e5ad 100644 --- a/web-ui/components/tap-card.tsx +++ b/web-ui/components/tap-card.tsx @@ -1,58 +1,103 @@ -import ThermostatIcon from "@mui/icons-material/Thermostat"; +import Box from "@mui/material/Box"; import Card from "@mui/material/Card"; import CardContent from "@mui/material/CardContent"; -import Chip from "@mui/material/Chip"; import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; import type { KegTap } from "@/api-client"; import { KegProgress } from "@/components/keg-progress"; +import { MONO_FONT } from "@/theme/typography"; export interface TapCardProps { tap: KegTap; /** Latest temperature at this tap, °C. */ temperatureC?: number | null; temperatureLabel?: string; + /** Kiosk sizing: larger name and gauge. */ + large?: boolean; } -/** "Currently on tap" snapshot for one tap. */ -export function TapCard({ tap, temperatureC, temperatureLabel }: TapCardProps) { +/** + * "On tap" card. Fixed internal grid — eyebrow row, dominant beverage + * name, one metadata line, gauge band bottom-aligned — so a row of taps + * lines up. + */ +export function TapCard({ tap, temperatureC, temperatureLabel, large }: TapCardProps) { const keg = tap.current_keg; + const beverage = keg?.beverage; + const metadata = beverage + ? [ + beverage.producer.name, + beverage.style, + beverage.abv_percent != null ? `${beverage.abv_percent}% ABV` : null, + ] + .filter(Boolean) + .join(" · ") + : ""; + return ( - - - - - - {tap.name} + + + + + {tap.name} + + {temperatureC != null && ( + + {temperatureLabel} - {temperatureC != null && ( - } - label={temperatureLabel} - size="small" - variant="outlined" - /> - )} - - {keg ? ( - <> - - - {keg.beverage.name} - - - - {keg.beverage.producer.name} - {keg.beverage.style ? ` · ${keg.beverage.style}` : ""} - - - - ) : ( - Nothing on tap. )} + {keg && beverage ? ( + <> + + + + {beverage.name} + + + {metadata && ( + + {metadata} + + )} + + + + ) : ( + + Tap is empty. + + )} ); diff --git a/web-ui/components/use-formatters.ts b/web-ui/components/use-formatters.ts index 46a4f8c74..d87a11354 100644 --- a/web-ui/components/use-formatters.ts +++ b/web-ui/components/use-formatters.ts @@ -1,6 +1,7 @@ import { useMemo } from "react"; import { useConfig } from "@/components/config-context"; import { + formatCompactRelative, formatRelativeTime, formatTemperature, formatVolume, @@ -12,6 +13,8 @@ export interface Formatters { volume: (volumeMl: number) => string; temperature: (tempC: number) => string; relative: (iso: string) => string; + /** Tight-gutter relative time: "now", "4m", "2h". */ + compactRelative: (iso: string) => string; } /** Unit-aware formatters bound to the site's display settings. */ @@ -24,6 +27,7 @@ export function useFormatters(): Formatters { volume: (volumeMl) => formatVolume(volumeMl, volumeUnits), temperature: (tempC) => formatTemperature(tempC, temperatureUnits), relative: (iso) => formatRelativeTime(iso), + compactRelative: (iso) => formatCompactRelative(iso), }), [volumeUnits, temperatureUnits], ); diff --git a/web-ui/lib/format.ts b/web-ui/lib/format.ts index 9178e3ebb..3a3c82912 100644 --- a/web-ui/lib/format.ts +++ b/web-ui/lib/format.ts @@ -46,6 +46,25 @@ const RELATIVE_UNITS: Array<[Intl.RelativeTimeFormatUnit, number]> = [ ["minute", 60], ]; +const COMPACT_UNITS: Array<[string, number]> = [ + ["y", 365 * 24 * 3600], + ["mo", 30 * 24 * 3600], + ["d", 24 * 3600], + ["h", 3600], + ["m", 60], +]; + +/** Compact relative time for tight gutters: "now", "4m", "2h", "3d". */ +export function formatCompactRelative(iso: string, now: Date = new Date()): string { + const seconds = Math.abs((now.getTime() - new Date(iso).getTime()) / 1000); + for (const [suffix, unitSeconds] of COMPACT_UNITS) { + if (seconds >= unitSeconds) { + return `${Math.round(seconds / unitSeconds)}${suffix}`; + } + } + return "now"; +} + export function formatRelativeTime(iso: string, now: Date = new Date()): string { const seconds = (new Date(iso).getTime() - now.getTime()) / 1000; const magnitude = Math.abs(seconds); diff --git a/web-ui/test/home.test.tsx b/web-ui/test/home.test.tsx index 3fc308b9e..2fd7aa056 100644 --- a/web-ui/test/home.test.tsx +++ b/web-ui/test/home.test.tsx @@ -81,6 +81,6 @@ test("home renders taps and recent events", async () => { expect(await screen.findByText("Test IPA")).toBeTruthy(); expect(screen.getByText("Main Tap")).toBeTruthy(); expect(screen.getByText("alice")).toBeTruthy(); - expect(screen.getByText(/poured a drink/)).toBeTruthy(); + expect(screen.getByText(/poured/)).toBeTruthy(); expect(screen.getByText(/cheers/)).toBeTruthy(); }); diff --git a/web-ui/views/home-view.tsx b/web-ui/views/home-view.tsx index 573cc1657..dab4a7d09 100644 --- a/web-ui/views/home-view.tsx +++ b/web-ui/views/home-view.tsx @@ -1,5 +1,5 @@ +import Box from "@mui/material/Box"; import Grid from "@mui/material/Grid"; -import Stack from "@mui/material/Stack"; import { statusRetrieve } from "@/api-client"; import { EmptyState } from "@/components/empty-state"; import { EventTimeline } from "@/components/event-timeline"; @@ -15,28 +15,30 @@ export function HomeView() { return ( {status.data && ( - - -
    - - {status.data.taps.length === 0 && ( - - )} + + {/* The tap deck is the hero: what's pouring, and how much is left. */} +
    + {status.data.taps.length === 0 ? ( + + ) : ( + {status.data.taps.map((tap) => ( - + + + ))} - -
    - - -
    + + )} +
    +
    + -
    -
    - +
    +
    +
    )} ); From 246d8694f56891171e861cede192d39465055982 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 23:25:22 +0000 Subject: [PATCH 25/48] =?UTF-8?q?web-ui:=20structure=20primitives=20?= =?UTF-8?q?=E2=80=94=20header=20anatomy,=20widths,=20de-boxing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Page grows one standard header anatomy (mono eyebrow / avatar + title / metadata line / actions) and a declared content-width intent (wide, content, narrow), replacing three competing header patterns: keg, session, and drink details use eyebrow+meta headers at reading width; the drinker page's hand-rolled hero and the account page's 'Hello' block become Page headers. Charts and gauges leave their Card boxes: content now sits directly under Section eyebrows (stats, keg, drinker, session views), ending the border-in-border-in-border nesting. Stat badges become a single hairline-divided strip instead of four floating cards. The drink page gets a proper quote treatment for shouts. --- web-ui/components/page.tsx | 90 +++++++++++++++---- web-ui/components/stat-badges.tsx | 68 ++++++++------ web-ui/views/account/account-view.tsx | 18 ++-- web-ui/views/drinkers/drinker-view.tsx | 54 +++++------ web-ui/views/drinks/drink-view.tsx | 53 ++++++++--- web-ui/views/kegs/keg-detail-view.tsx | 69 +++++++------- web-ui/views/sessions/session-detail-view.tsx | 37 ++++---- web-ui/views/stats-view.tsx | 26 ++---- 8 files changed, 249 insertions(+), 166 deletions(-) diff --git a/web-ui/components/page.tsx b/web-ui/components/page.tsx index 870949df2..782f2b109 100644 --- a/web-ui/components/page.tsx +++ b/web-ui/components/page.tsx @@ -5,41 +5,95 @@ import { type ReactNode, useEffect } from "react"; import { useConfig } from "@/components/config-context"; import { LoadingZone } from "@/components/loading-zone"; +const WIDTHS = { + /** Full container width: dashboards, tables. */ + wide: "none", + /** Reading/detail pages. */ + content: "880px", + /** Single-purpose forms. */ + narrow: "560px", +} as const; + export interface PageProps { title: string; /** Hide the visible heading but still set the document title. */ hideHeading?: boolean; - /** Slot rendered to the right of the heading (actions, filters). */ + /** Mono label above the title ("KEG #12"). */ + eyebrow?: string; + /** Metadata line under the title; may contain links/chips. */ + meta?: ReactNode; + /** Leading visual beside the title (an Avatar, usually). */ + avatar?: ReactNode; + /** Slot to the right of the heading (actions, filters). */ headerRight?: ReactNode; + /** Content width intent. */ + width?: keyof typeof WIDTHS; loading?: boolean; error?: unknown; children?: ReactNode; } -/** Standard page shell: document title, heading row, loading state. */ -export function Page({ title, hideHeading, headerRight, loading, error, children }: PageProps) { +/** + * Standard page shell: document title, one header anatomy + * (eyebrow / avatar+title / meta / actions), loading state, and a + * declared content width. + */ +export function Page({ + title, + hideHeading, + eyebrow, + meta, + avatar, + headerRight, + width = "wide", + loading, + error, + children, +}: PageProps) { const { me } = useConfig(); useEffect(() => { - document.title = `${title} · ${me.site.title}`; + document.title = `${title} · ${me.site.title ?? "Kegbot"}`; }, [title, me.site.title]); return ( - + {!hideHeading && ( - - - {title} - - {headerRight} + + {eyebrow && ( + + {eyebrow} + + )} + + + {avatar} + + + {title} + + {meta && ( + + {meta} + + )} + + + {headerRight} + )} diff --git a/web-ui/components/stat-badges.tsx b/web-ui/components/stat-badges.tsx index 1d6c2ed96..47d9a5763 100644 --- a/web-ui/components/stat-badges.tsx +++ b/web-ui/components/stat-badges.tsx @@ -1,40 +1,58 @@ -import Card from "@mui/material/Card"; -import CardContent from "@mui/material/CardContent"; -import Grid from "@mui/material/Grid"; +import Box from "@mui/material/Box"; +import Paper from "@mui/material/Paper"; import Typography from "@mui/material/Typography"; import type { ReactNode } from "react"; import { useFormatters } from "@/components/use-formatters"; import type { StatsBlob } from "@/lib/stats"; import { MONO_FONT } from "@/theme/typography"; -function Badge({ value, caption }: { value: ReactNode; caption: string }) { +function Cell({ value, caption, index }: { value: ReactNode; caption: string; index: number }) { return ( - - - - - {value} - - - {caption} - - - - + 0 ? 1 : 0 }, + borderTop: { xs: index >= 2 ? 1 : 0, sm: 0 }, + borderStyle: "solid", + borderRight: 0, + borderBottom: 0, + }} + > + + {value} + + + {caption} + + ); } -/** Row of headline stats derived from a stats blob. */ +/** Headline stat strip: one surface, hairline-divided cells. */ export function StatBadges({ stats }: { stats: StatsBlob }) { const { volume } = useFormatters(); + const cells: Array<{ value: ReactNode; caption: string }> = [ + { value: volume(stats.total_volume_ml ?? 0), caption: "total poured" }, + { value: stats.total_pours ?? 0, caption: "pours" }, + { value: stats.registered_drinkers?.length ?? 0, caption: "drinkers" }, + { value: stats.sessions_count ?? 0, caption: "sessions" }, + ]; return ( - - - - - - + + {cells.map((cell, index) => ( + + ))} + ); } diff --git a/web-ui/views/account/account-view.tsx b/web-ui/views/account/account-view.tsx index 9b086407e..4b98b56d5 100644 --- a/web-ui/views/account/account-view.tsx +++ b/web-ui/views/account/account-view.tsx @@ -76,14 +76,18 @@ export function AccountView() { const { user } = useCurrentUser(); return ( - + - Hello, {user?.display_name || user?.username} - - Username: {user?.username} - {user?.email ? ` · ${user.email}` : ""} - - {user?.is_staff && } + {user?.is_staff ? ( + + ) : ( + + Manage your profile, password, and notifications from the menu. + + )} ); diff --git a/web-ui/views/drinkers/drinker-view.tsx b/web-ui/views/drinkers/drinker-view.tsx index f30163f14..7bbf0ea95 100644 --- a/web-ui/views/drinkers/drinker-view.tsx +++ b/web-ui/views/drinkers/drinker-view.tsx @@ -1,10 +1,6 @@ import Avatar from "@mui/material/Avatar"; -import Card from "@mui/material/Card"; -import CardContent from "@mui/material/CardContent"; -import CardHeader from "@mui/material/CardHeader"; import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; -import Typography from "@mui/material/Typography"; import { useParams } from "react-router"; import { drinksList, usersRetrieve, usersStatsRetrieve } from "@/api-client"; import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-chart"; @@ -36,45 +32,37 @@ export function DrinkerView() { ); const displayName = user.data?.display_name || username; + const showUsername = user.data?.display_name && user.data.display_name !== username; return ( - + + {displayName.charAt(0).toUpperCase()} + + } + width="content" + loading={user.loading} + error={user.error} + > {user.data && ( - - - - {displayName.charAt(0).toUpperCase()} - - - {displayName} - {user.data.display_name && user.data.display_name !== username && ( - {username} - )} - - + {stats.data && } - + {stats.data?.volume_by_day_of_week && ( - - - - - - +
    + +
    )} {stats.data?.volume_by_session && ( - - - - - - +
    + +
    )}
    diff --git a/web-ui/views/drinks/drink-view.tsx b/web-ui/views/drinks/drink-view.tsx index 2e2c08154..b98bc516a 100644 --- a/web-ui/views/drinks/drink-view.tsx +++ b/web-ui/views/drinks/drink-view.tsx @@ -51,19 +51,22 @@ export function DrinkView() { }; return ( - - {drink.data && ( - - - poured {volume(drink.data.volume_ml)} of{" "} - - {drink.data.keg.beverage.name} - {" "} - on {formatDateTime(drink.data.time)} + + poured by ·{" "} + {formatDateTime(drink.data.time)} {drink.data.session_id != null && ( <> {" "} - during{" "} + · during{" "} )} - . - + + ) + } + width="content" + loading={drink.loading} + error={drink.error} + > + {drink.data && ( + {drink.data.shout && ( - + “{drink.data.shout}” )} @@ -94,6 +114,13 @@ export function DrinkView() { )} )} + + Poured from{" "} + + keg #{drink.data.keg.id} — {drink.data.keg.beverage.name} + + . + )} diff --git a/web-ui/views/kegs/keg-detail-view.tsx b/web-ui/views/kegs/keg-detail-view.tsx index 4f8aaa53f..740ba02a5 100644 --- a/web-ui/views/kegs/keg-detail-view.tsx +++ b/web-ui/views/kegs/keg-detail-view.tsx @@ -1,6 +1,3 @@ -import Card from "@mui/material/Card"; -import CardContent from "@mui/material/CardContent"; -import CardHeader from "@mui/material/CardHeader"; import Grid from "@mui/material/Grid"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; @@ -38,45 +35,51 @@ export function KegDetailView() { [kegId], ); - const title = keg.data ? keg.data.beverage.name : `Keg #${kegId}`; + const beverage = keg.data?.beverage; + const metadata = beverage + ? [beverage.producer.name, beverage.style].filter(Boolean).join(" · ") + : ""; return ( - + + {metadata} + {metadata && " · "}first tapped {formatDate(keg.data.start_time)} + + ) + } + headerRight={keg.data && kegStatusChip(keg.data)} + width="content" + loading={keg.loading} + error={keg.error} + > {keg.data && ( - - - {kegStatusChip(keg.data)} - - {keg.data.beverage.producer.name} - {keg.data.beverage.style ? ` · ${keg.data.beverage.style}` : ""} · first tapped{" "} - {formatDate(keg.data.start_time)} - - + {keg.data.description && {keg.data.description}} - + - - - - - - - {volume(keg.data.served_volume_ml)} served - {keg.data.spilled_ml > 0 ? ` · ${volume(keg.data.spilled_ml)} spilled` : ""} - - - - +
    + + + + {volume(keg.data.served_volume_ml)} served + {(keg.data.spilled_ml ?? 0) > 0 + ? ` · ${volume(keg.data.spilled_ml ?? 0)} spilled` + : ""} + + +
    {stats.data?.volume_by_drinker && Object.keys(stats.data.volume_by_drinker).length > 0 && ( - - - - - - +
    + +
    )}
    diff --git a/web-ui/views/sessions/session-detail-view.tsx b/web-ui/views/sessions/session-detail-view.tsx index eb31c497e..0389aaae7 100644 --- a/web-ui/views/sessions/session-detail-view.tsx +++ b/web-ui/views/sessions/session-detail-view.tsx @@ -1,9 +1,5 @@ -import Card from "@mui/material/Card"; -import CardContent from "@mui/material/CardContent"; -import CardHeader from "@mui/material/CardHeader"; -import Grid from "@mui/material/Grid"; +import Box from "@mui/material/Box"; import Stack from "@mui/material/Stack"; -import Typography from "@mui/material/Typography"; import { useParams } from "react-router"; import { drinksList, sessionsRetrieve } from "@/api-client"; import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; @@ -37,26 +33,27 @@ export function SessionDetailView() { return ( + {formatDateTime(session.data.start_time)} — {formatDateTime(session.data.end_time)} ·{" "} + {volume(session.data.volume_ml ?? 0)} poured + + ) + } + width="content" loading={session.loading} error={session.error} > {session.data && ( - - - {formatDateTime(session.data.start_time)} — {formatDateTime(session.data.end_time)} ·{" "} - {volume(session.data.volume_ml ?? 0)} poured - + {stats?.volume_by_drinker && Object.keys(stats.volume_by_drinker).length > 0 && ( - - - - - - - - - - +
    + + + +
    )}
    diff --git a/web-ui/views/stats-view.tsx b/web-ui/views/stats-view.tsx index ed0c455bf..83fbe3692 100644 --- a/web-ui/views/stats-view.tsx +++ b/web-ui/views/stats-view.tsx @@ -1,6 +1,3 @@ -import Card from "@mui/material/Card"; -import CardContent from "@mui/material/CardContent"; -import CardHeader from "@mui/material/CardHeader"; import Grid from "@mui/material/Grid"; import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; @@ -10,6 +7,7 @@ import { statsSystemRetrieve } from "@/api-client"; import { VolumeByDrinkerChart } from "@/components/charts/volume-by-drinker-chart"; import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-chart"; import { Page } from "@/components/page"; +import { Section } from "@/components/section"; import { StatBadges } from "@/components/stat-badges"; import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; @@ -24,27 +22,21 @@ export function StatsView() { return ( {stats && ( - + - + {stats.volume_by_drinker && Object.keys(stats.volume_by_drinker).length > 0 && ( - - - - - - +
    + +
    )} {stats.volume_by_day_of_week && ( - - - - - - +
    + +
    )}
    From 07444a5d20bc0d63e5ad42dd0eab2bce557ef970 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 23:26:27 +0000 Subject: [PATCH 26/48] web-ui: table conventions One set of rules for every table: the row's primary column carries the accent link (drinks link from a compact mono relative time, absolute on hover); entity links (drinkers, kegs) are quiet inherit-colored links; numerals and times are mono and right-aligned where numeric; secondary text columns (shouts, dates) drop to the secondary ink. --- web-ui/components/drink-list.tsx | 37 +++++++++++++++------ web-ui/components/session-volume-list.tsx | 5 ++- web-ui/components/user-link.tsx | 16 +++++++-- web-ui/views/admin/drinks-admin-view.tsx | 11 ++++-- web-ui/views/admin/users-admin-view.tsx | 2 +- web-ui/views/kegs/keg-list-view.tsx | 9 +++-- web-ui/views/sessions/session-list-view.tsx | 9 +++-- 7 files changed, 66 insertions(+), 23 deletions(-) diff --git a/web-ui/components/drink-list.tsx b/web-ui/components/drink-list.tsx index 4d7f9edaa..ec225ac18 100644 --- a/web-ui/components/drink-list.tsx +++ b/web-ui/components/drink-list.tsx @@ -5,12 +5,14 @@ import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; +import Tooltip from "@mui/material/Tooltip"; import { Link } from "react-router"; import type { Drink } from "@/api-client"; import { EmptyState } from "@/components/empty-state"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; import { formatDateTime } from "@/lib/format"; +import { MONO_FONT } from "@/theme/typography"; export interface DrinkListProps { drinks: Drink[]; @@ -20,9 +22,13 @@ export interface DrinkListProps { hideUser?: boolean; } -/** Tabular list of drinks with links to their detail pages. */ +/** + * Tabular list of drinks. Conventions: the "poured" column is the + * row's primary (accent) link; entity links are quiet; numerals and + * times are mono. + */ export function DrinkList({ drinks, hideKeg, hideUser }: DrinkListProps) { - const { volume } = useFormatters(); + const { volume, compactRelative } = useFormatters(); if (drinks.length === 0) { return ; } @@ -31,7 +37,7 @@ export function DrinkList({ drinks, hideKeg, hideUser }: DrinkListProps) { - Time + Poured {!hideUser && Drinker} Volume {!hideKeg && Keg} @@ -41,25 +47,34 @@ export function DrinkList({ drinks, hideKeg, hideUser }: DrinkListProps) { {drinks.map((drink) => ( - - - {formatDateTime(drink.time)} - + + + + {compactRelative(drink.time)} + + {!hideUser && ( - + )} - {volume(drink.volume_ml)} + + {volume(drink.volume_ml)} + {!hideKeg && ( - + {drink.keg.beverage.name} )} - {drink.shout} + {drink.shout} ))} diff --git a/web-ui/components/session-volume-list.tsx b/web-ui/components/session-volume-list.tsx index 097385026..8ac6cd1b5 100644 --- a/web-ui/components/session-volume-list.tsx +++ b/web-ui/components/session-volume-list.tsx @@ -7,6 +7,7 @@ import TableRow from "@mui/material/TableRow"; import { Link } from "react-router"; import { EmptyState } from "@/components/empty-state"; import { useFormatters } from "@/components/use-formatters"; +import { MONO_FONT } from "@/theme/typography"; /** * Session list derived from a stats blob's volume_by_session map @@ -33,7 +34,9 @@ export function SessionVolumeList({ Session #{sessionId} - {volume(sessionVolume)} + + {volume(sessionVolume)} + ))} diff --git a/web-ui/components/user-link.tsx b/web-ui/components/user-link.tsx index 7d4fe26a6..890b730d4 100644 --- a/web-ui/components/user-link.tsx +++ b/web-ui/components/user-link.tsx @@ -9,10 +9,15 @@ export interface UserLinkProps { user: User | null | undefined; /** Avatar size in px; 0 hides the avatar. */ avatarSize?: number; + /** + * Quiet variant for dense tables: link wears the text color (accent + * links are reserved for the row's primary column and prose). + */ + muted?: boolean; } /** Avatar + username, linking to the drinker page. */ -export function UserLink({ user, avatarSize = 24 }: UserLinkProps) { +export function UserLink({ user, avatarSize = 24, muted }: UserLinkProps) { if (!user) { return guest; } @@ -22,12 +27,17 @@ export function UserLink({ user, avatarSize = 24 }: UserLinkProps) { {avatarSize > 0 && ( {name.charAt(0).toUpperCase()} )} - + {name} diff --git a/web-ui/views/admin/drinks-admin-view.tsx b/web-ui/views/admin/drinks-admin-view.tsx index b631fe9a0..c7f03f797 100644 --- a/web-ui/views/admin/drinks-admin-view.tsx +++ b/web-ui/views/admin/drinks-admin-view.tsx @@ -23,6 +23,7 @@ import { UserLink } from "@/components/user-link"; import { toErrorMessage, unwrap } from "@/lib/api"; import { formatDateTime } from "@/lib/format"; import { useCursorList } from "@/lib/use-cursor-list"; +import { MONO_FONT } from "@/theme/typography"; function DrinkActions({ drink, onChanged }: { drink: Drink; onChanged: () => void }) { const confirm = useConfirm(); @@ -116,11 +117,15 @@ export function DrinksAdminView() { #{drink.id} - {formatDateTime(drink.time)} + + {formatDateTime(drink.time)} + - + + + + {volume(drink.volume_ml)} - {volume(drink.volume_ml)} {drink.keg.beverage.name} diff --git a/web-ui/views/admin/users-admin-view.tsx b/web-ui/views/admin/users-admin-view.tsx index 6165a9552..53a41ee64 100644 --- a/web-ui/views/admin/users-admin-view.tsx +++ b/web-ui/views/admin/users-admin-view.tsx @@ -169,7 +169,7 @@ export function UsersAdminView() { .map((user) => ( - + {user.display_name} diff --git a/web-ui/views/kegs/keg-list-view.tsx b/web-ui/views/kegs/keg-list-view.tsx index bf27048c2..5581b9149 100644 --- a/web-ui/views/kegs/keg-list-view.tsx +++ b/web-ui/views/kegs/keg-list-view.tsx @@ -16,6 +16,7 @@ import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; import { formatDate } from "@/lib/format"; import { useCursorList } from "@/lib/use-cursor-list"; +import { MONO_FONT } from "@/theme/typography"; export function kegStatusChip(keg: Keg) { const color = @@ -53,8 +54,12 @@ export function KegListView() { {keg.beverage.name} {kegStatusChip(keg)} - {volume(keg.served_volume_ml)} - {formatDate(keg.start_time)} + + {volume(keg.served_volume_ml)} + + + {formatDate(keg.start_time)} + ))} diff --git a/web-ui/views/sessions/session-list-view.tsx b/web-ui/views/sessions/session-list-view.tsx index ff4dbd57c..774d245a6 100644 --- a/web-ui/views/sessions/session-list-view.tsx +++ b/web-ui/views/sessions/session-list-view.tsx @@ -16,6 +16,7 @@ import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; import { formatDateTime } from "@/lib/format"; import { useCursorList } from "@/lib/use-cursor-list"; +import { MONO_FONT } from "@/theme/typography"; export function sessionTitle(session: DrinkingSession): string { return session.name || `Session #${session.id}`; @@ -64,8 +65,12 @@ export function SessionListView() { {sessionTitle(session)} - {formatDateTime(session.start_time)} - {volume(session.volume_ml ?? 0)} + + {formatDateTime(session.start_time)} + + + {volume(session.volume_ml ?? 0)} + ))} From 6385cd5536522a9a686a66c691ca95255ac58fb5 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 3 Aug 2026 23:27:34 +0000 Subject: [PATCH 27/48] web-ui: design the kiosk mode Fullscreen mode gets its own treatment instead of the homepage grid with a big title: always dark (scoped color scheme, regardless of the viewer's preference), wordmark header with a live mono clock, oversized tap cards (larger names, more padding) taking two thirds of the screen, and a trimmed activity feed beside them. --- web-ui/components/tap-card-live.tsx | 3 +- web-ui/views/fullscreen-view.tsx | 78 ++++++++++++++++++++++------- 2 files changed, 63 insertions(+), 18 deletions(-) diff --git a/web-ui/components/tap-card-live.tsx b/web-ui/components/tap-card-live.tsx index 044dc7a1c..1ac679e13 100644 --- a/web-ui/components/tap-card-live.tsx +++ b/web-ui/components/tap-card-live.tsx @@ -6,7 +6,7 @@ import { unwrap } from "@/lib/api"; import { useAsyncData } from "@/lib/use-async-data"; /** TapCard that also fetches the latest temperature for the tap's sensor. */ -export function TapCardLive({ tap }: { tap: KegTap }) { +export function TapCardLive({ tap, large }: { tap: KegTap; large?: boolean }) { const { temperature } = useFormatters(); const sensorId = tap.temperature_sensor_id; const reading = useAsyncData( @@ -23,6 +23,7 @@ export function TapCardLive({ tap }: { tap: KegTap }) { tap={tap} temperatureC={tempC} temperatureLabel={tempC != null ? temperature(tempC) : undefined} + large={large} /> ); } diff --git a/web-ui/views/fullscreen-view.tsx b/web-ui/views/fullscreen-view.tsx index a60e9fb31..6f3c26ef3 100644 --- a/web-ui/views/fullscreen-view.tsx +++ b/web-ui/views/fullscreen-view.tsx @@ -1,19 +1,43 @@ import Box from "@mui/material/Box"; import Grid from "@mui/material/Grid"; import Typography from "@mui/material/Typography"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { statusRetrieve } from "@/api-client"; import { useConfig } from "@/components/config-context"; +import { EmptyState } from "@/components/empty-state"; import { EventTimeline } from "@/components/event-timeline"; import { LoadingZone } from "@/components/loading-zone"; import { Section } from "@/components/section"; import { TapCardLive } from "@/components/tap-card-live"; +import { Wordmark } from "@/components/wordmark"; import { unwrap } from "@/lib/api"; import { useAsyncData } from "@/lib/use-async-data"; +import { MONO_FONT } from "@/theme/typography"; + +function Clock() { + const [now, setNow] = useState(() => new Date()); + useEffect(() => { + const interval = setInterval(() => setNow(new Date()), 10_000); + return () => clearInterval(interval); + }, []); + return ( + + {now.toLocaleTimeString(undefined, { hour: "2-digit", minute: "2-digit" })} + + ); +} /** - * Kiosk mode: full-bleed on-tap display that stays current by polling - * (the old page reloaded itself; this just re-renders). + * Kiosk mode: always dark, oversized tap cards, live clock. Polls the + * status endpoint and re-renders in place. */ export function FullscreenView() { const { me } = useConfig(); @@ -24,25 +48,45 @@ export function FullscreenView() { }, [me.site.title]); return ( - - - {me.site.title} - + // Scoped dark scheme: kiosk screens are dark regardless of the + // viewer preference. + + + + + {status.data && ( - - - - {status.data.taps.map((tap) => ( - - + + +
    + {status.data.taps.length === 0 ? ( + + ) : ( + + {status.data.taps.map((tap) => ( + + + + ))} - ))} - + )} +
    - +
    - +
    From b289b4346477f9c76b7c91073b57fd4a717d8cae Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Tue, 4 Aug 2026 05:02:42 +0000 Subject: [PATCH 28/48] =?UTF-8?q?web-ui:=20design=20feedback=20round=20?= =?UTF-8?q?=E2=80=94=20gauges,=20drink=20page,=20stat=20cells?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The keg gauge is chunkier (22px track) with a body-size mono readout, matching its importance on tap cards and the keg page. - The drinker page stops reporting '1 drinker': its stat strip now shows total poured / pours / sessions / biggest pour (linked to the record-setting drink). StatStrip accepts arbitrary cells so pages compose stats that make sense for them. - The drink page earns its space: shout quote, a facts strip (volume, pour time, session, keg), the photo under its own section, and a 'More from this session' list linking back to the session. - The stats page's largest-session line becomes an amber-edged record callout with the volume at display size. --- web-ui/components/keg-progress.tsx | 11 ++- web-ui/components/stat-badges.tsx | 44 ++++++--- web-ui/lib/format.ts | 13 +++ web-ui/views/drinkers/drinker-view.tsx | 33 ++++++- web-ui/views/drinks/drink-view.tsx | 121 ++++++++++++++++++------- web-ui/views/stats-view.tsx | 51 ++++++++--- 6 files changed, 207 insertions(+), 66 deletions(-) diff --git a/web-ui/components/keg-progress.tsx b/web-ui/components/keg-progress.tsx index 41a709534..b67532645 100644 --- a/web-ui/components/keg-progress.tsx +++ b/web-ui/components/keg-progress.tsx @@ -23,8 +23,8 @@ export function KegProgress({ keg }: { keg: Keg }) { ))} - + {percent.toFixed(0)}% FULL diff --git a/web-ui/components/stat-badges.tsx b/web-ui/components/stat-badges.tsx index 47d9a5763..2ccbcf48b 100644 --- a/web-ui/components/stat-badges.tsx +++ b/web-ui/components/stat-badges.tsx @@ -6,7 +6,12 @@ import { useFormatters } from "@/components/use-formatters"; import type { StatsBlob } from "@/lib/stats"; import { MONO_FONT } from "@/theme/typography"; -function Cell({ value, caption, index }: { value: ReactNode; caption: string; index: number }) { +export interface StatCell { + value: ReactNode; + caption: string; +} + +function Cell({ value, caption, index }: StatCell & { index: number }) { return ( {value} @@ -33,20 +47,13 @@ function Cell({ value, caption, index }: { value: ReactNode; caption: string; in } /** Headline stat strip: one surface, hairline-divided cells. */ -export function StatBadges({ stats }: { stats: StatsBlob }) { - const { volume } = useFormatters(); - const cells: Array<{ value: ReactNode; caption: string }> = [ - { value: volume(stats.total_volume_ml ?? 0), caption: "total poured" }, - { value: stats.total_pours ?? 0, caption: "pours" }, - { value: stats.registered_drinkers?.length ?? 0, caption: "drinkers" }, - { value: stats.sessions_count ?? 0, caption: "sessions" }, - ]; +export function StatStrip({ cells }: { cells: StatCell[] }) { return ( @@ -56,3 +63,18 @@ export function StatBadges({ stats }: { stats: StatsBlob }) { ); } + +/** Site-wide headline stats derived from a stats blob. */ +export function StatBadges({ stats }: { stats: StatsBlob }) { + const { volume } = useFormatters(); + return ( + + ); +} diff --git a/web-ui/lib/format.ts b/web-ui/lib/format.ts index 3a3c82912..6a734b331 100644 --- a/web-ui/lib/format.ts +++ b/web-ui/lib/format.ts @@ -77,6 +77,19 @@ export function formatRelativeTime(iso: string, now: Date = new Date()): string return "just now"; } +/** Pour duration in seconds → "8s", "1m 12s"; em dash when unknown. */ +export function formatDuration(seconds: number | null | undefined): string { + if (!seconds || seconds <= 0) { + return "—"; + } + if (seconds < 60) { + return `${Math.round(seconds)}s`; + } + const minutes = Math.floor(seconds / 60); + const rest = Math.round(seconds % 60); + return rest > 0 ? `${minutes}m ${rest}s` : `${minutes}m`; +} + /** Percent (0-100) of a keg remaining, clamped. */ export function kegPercentFull(servedMl: number, spilledMl: number, fullMl: number): number { if (!fullMl) { diff --git a/web-ui/views/drinkers/drinker-view.tsx b/web-ui/views/drinkers/drinker-view.tsx index 7bbf0ea95..de622f38f 100644 --- a/web-ui/views/drinkers/drinker-view.tsx +++ b/web-ui/views/drinkers/drinker-view.tsx @@ -1,7 +1,8 @@ import Avatar from "@mui/material/Avatar"; import Grid from "@mui/material/Grid"; +import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; -import { useParams } from "react-router"; +import { Link, useParams } from "react-router"; import { drinksList, usersRetrieve, usersStatsRetrieve } from "@/api-client"; import { VolumeByWeekdayChart } from "@/components/charts/volume-by-weekday-chart"; import { DrinkList } from "@/components/drink-list"; @@ -9,7 +10,8 @@ import { LoadMoreButton } from "@/components/load-more-button"; import { Page } from "@/components/page"; import { Section } from "@/components/section"; import { SessionVolumeList } from "@/components/session-volume-list"; -import { StatBadges } from "@/components/stat-badges"; +import { StatStrip } from "@/components/stat-badges"; +import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; import { asStats } from "@/lib/stats"; import { useAsyncData } from "@/lib/use-async-data"; @@ -18,6 +20,7 @@ import { useCursorList } from "@/lib/use-cursor-list"; export function DrinkerView() { const params = useParams(); const username = params.username ?? ""; + const { volume } = useFormatters(); const user = useAsyncData(() => unwrap(usersRetrieve({ path: { username } })), { deps: [username], @@ -49,7 +52,31 @@ export function DrinkerView() { > {user.data && ( - {stats.data && } + {stats.data && ( + + {volume(stats.data.greatest_volume_ml ?? 0)} + + ) : ( + volume(stats.data.greatest_volume_ml ?? 0) + ), + caption: "biggest pour", + }, + ]} + /> + )} {stats.data?.volume_by_day_of_week && ( diff --git a/web-ui/views/drinks/drink-view.tsx b/web-ui/views/drinks/drink-view.tsx index b98bc516a..83cdc9f42 100644 --- a/web-ui/views/drinks/drink-view.tsx +++ b/web-ui/views/drinks/drink-view.tsx @@ -5,15 +5,18 @@ import MuiLink from "@mui/material/Link"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link, useParams } from "react-router"; -import { drinksPictureDestroy, drinksRetrieve } from "@/api-client"; +import { drinksList, drinksPictureDestroy, drinksRetrieve } from "@/api-client"; import { useConfirm } from "@/components/confirm-context"; import { useCurrentUser } from "@/components/current-user-context"; +import { DrinkList } from "@/components/drink-list"; import { Page } from "@/components/page"; +import { Section } from "@/components/section"; import { useSnackbar } from "@/components/snackbar-context"; +import { StatStrip } from "@/components/stat-badges"; import { useFormatters } from "@/components/use-formatters"; import { UserLink } from "@/components/user-link"; import { toErrorMessage, unwrap } from "@/lib/api"; -import { formatDateTime } from "@/lib/format"; +import { formatDateTime, formatDuration } from "@/lib/format"; import { useAsyncData } from "@/lib/use-async-data"; export function DrinkView() { @@ -28,6 +31,18 @@ export function DrinkView() { deps: [drinkId], }); + const sessionId = drink.data?.session_id ?? null; + const sessionDrinks = useAsyncData( + async () => { + if (sessionId == null) { + return []; + } + const page = await unwrap(drinksList({ query: { session: sessionId, page_size: 11 } })); + return (page.results ?? []).filter((other) => other.id !== drinkId).slice(0, 10); + }, + { deps: [sessionId, drinkId], enabled: sessionId != null }, + ); + const canManagePicture = user !== null && (user.is_staff || user.id === drink.data?.user?.id); const deletePicture = async () => { @@ -63,19 +78,6 @@ export function DrinkView() { <> poured by ·{" "} {formatDateTime(drink.data.time)} - {drink.data.session_id != null && ( - <> - {" "} - · during{" "} - - session #{drink.data.session_id} - - - )} ) } @@ -84,7 +86,7 @@ export function DrinkView() { error={drink.error} > {drink.data && ( - + {drink.data.shout && ( )} + + #{sessionId} + + ) : ( + "—" + ), + caption: "session", + }, + { + value: ( + + #{drink.data.keg.id} + + ), + caption: `keg · ${drink.data.keg.beverage.name}`, + }, + ]} + /> {drink.data.picture?.resized_url && ( - - - {canManagePicture && ( - - )} - +
    + + + {canManagePicture && ( + + )} + +
    + )} + {(sessionDrinks.data?.length ?? 0) > 0 && ( +
    + View session + + ) + } + > + +
    )} - - Poured from{" "} - - keg #{drink.data.keg.id} — {drink.data.keg.beverage.name} - - . -
    )} diff --git a/web-ui/views/stats-view.tsx b/web-ui/views/stats-view.tsx index 83fbe3692..a0370a09a 100644 --- a/web-ui/views/stats-view.tsx +++ b/web-ui/views/stats-view.tsx @@ -1,5 +1,7 @@ +import Box from "@mui/material/Box"; import Grid from "@mui/material/Grid"; import MuiLink from "@mui/material/Link"; +import Paper from "@mui/material/Paper"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { Link } from "react-router"; @@ -13,6 +15,7 @@ import { useFormatters } from "@/components/use-formatters"; import { unwrap } from "@/lib/api"; import { asStats } from "@/lib/stats"; import { useAsyncData } from "@/lib/use-async-data"; +import { MONO_FONT } from "@/theme/typography"; export function StatsView() { const { volume } = useFormatters(); @@ -24,6 +27,41 @@ export function StatsView() { {stats && ( + {stats.largest_session?.session_id != null && ( + + + + Largest session + + + + Session #{stats.largest_session.session_id} + + + + + {volume(stats.largest_session.volume_ml ?? 0)} + + + )} {stats.volume_by_drinker && Object.keys(stats.volume_by_drinker).length > 0 && ( @@ -40,19 +78,6 @@ export function StatsView() { )} - {stats.largest_session?.session_id != null && ( - - Largest session:{" "} - - Session #{stats.largest_session.session_id} - {" "} - ({volume(stats.largest_session.volume_ml ?? 0)}) - - )} )} From 991f32302e163a25ebb586245c7c5f1ebb6830db Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Tue, 4 Aug 2026 05:07:37 +0000 Subject: [PATCH 29/48] web-ui: make the session date hierarchy browsable again The /sessions/[year[/month[/day]]] routes survived the rewrite but nothing linked into them. Now the archive exposes the hierarchy: - a mono breadcrumb trail (Sessions / 2026 / August / 3) on every archive level and on session detail pages (ending in the session, with each ancestor clickable), via a new Breadcrumbs component that Page renders in place of the eyebrow - drill chips under the header (years at the root, months within a year, days within a month), derived from the loaded sessions - archive page titles name the range ("August 2026") and each row's started-at links to that day's view --- web-ui/components/breadcrumbs.tsx | 50 ++++++ web-ui/components/page.tsx | 18 +- web-ui/views/sessions/session-detail-view.tsx | 13 +- web-ui/views/sessions/session-list-view.tsx | 164 +++++++++++++++--- 4 files changed, 220 insertions(+), 25 deletions(-) create mode 100644 web-ui/components/breadcrumbs.tsx diff --git a/web-ui/components/breadcrumbs.tsx b/web-ui/components/breadcrumbs.tsx new file mode 100644 index 000000000..12ff396c0 --- /dev/null +++ b/web-ui/components/breadcrumbs.tsx @@ -0,0 +1,50 @@ +import MuiBreadcrumbs from "@mui/material/Breadcrumbs"; +import MuiLink from "@mui/material/Link"; +import Typography from "@mui/material/Typography"; +import { Link } from "react-router"; +import { MONO_FONT } from "@/theme/typography"; + +export interface Crumb { + label: string; + /** Omit on the current (last) crumb. */ + to?: string; +} + +/** Mono breadcrumb trail ("Sessions / 2026 / August / 3"). */ +export function Breadcrumbs({ crumbs }: { crumbs: Crumb[] }) { + return ( + + {crumbs.map((crumb) => + crumb.to ? ( + + {crumb.label} + + ) : ( + + {crumb.label} + + ), + )} + + ); +} diff --git a/web-ui/components/page.tsx b/web-ui/components/page.tsx index 782f2b109..549f35765 100644 --- a/web-ui/components/page.tsx +++ b/web-ui/components/page.tsx @@ -2,6 +2,7 @@ import Box from "@mui/material/Box"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import { type ReactNode, useEffect } from "react"; +import { Breadcrumbs, type Crumb } from "@/components/breadcrumbs"; import { useConfig } from "@/components/config-context"; import { LoadingZone } from "@/components/loading-zone"; @@ -20,6 +21,8 @@ export interface PageProps { hideHeading?: boolean; /** Mono label above the title ("KEG #12"). */ eyebrow?: string; + /** Breadcrumb trail above the title; replaces the eyebrow slot. */ + breadcrumbs?: Crumb[]; /** Metadata line under the title; may contain links/chips. */ meta?: ReactNode; /** Leading visual beside the title (an Avatar, usually). */ @@ -42,6 +45,7 @@ export function Page({ title, hideHeading, eyebrow, + breadcrumbs, meta, avatar, headerRight, @@ -60,10 +64,16 @@ export function Page({ {!hideHeading && ( - {eyebrow && ( - - {eyebrow} - + {breadcrumbs ? ( + + + + ) : ( + eyebrow && ( + + {eyebrow} + + ) )} (); + for (const session of sessions) { + const started = new Date(session.start_time); + if (year === undefined) { + const y = started.getFullYear(); + seen.set(String(y), { label: String(y), to: `/sessions/${y}` }); + } else if (month === undefined) { + if (started.getFullYear() === year) { + const m = started.getMonth() + 1; + seen.set(String(m), { label: monthName(m, "short"), to: `/sessions/${year}/${m}` }); + } + } else if (started.getFullYear() === year && started.getMonth() + 1 === month) { + const d = started.getDate(); + seen.set(String(d), { + label: `${monthName(month, "short")} ${d}`, + to: `/sessions/${year}/${month}/${d}`, + }); + } + } + return Array.from(seen.values()); +} + /** * Session archive. Optional :year/:month/:day route params narrow the - * range, mirroring the old date-hierarchy URLs. + * range, mirroring the old date-hierarchy URLs; breadcrumbs and drill + * chips expose the hierarchy. */ export function SessionListView() { const params = useParams(); @@ -38,12 +112,45 @@ export function SessionListView() { [year, month, day], ); - const suffix = [year, month, day].filter((v) => v !== undefined).join("-"); - const title = suffix ? `Sessions · ${suffix}` : "Sessions"; + const title = + year === undefined + ? "Sessions" + : month === undefined + ? `Sessions in ${year}` + : day === undefined + ? `${monthName(month)} ${year}` + : `${monthName(month)} ${day}, ${year}`; + + const drills = drillTargets(list.items, year, month, day); + const drillLabel = + year === undefined ? "Browse by year" : month === undefined ? "Months" : "Days"; return ( - - + + + {drills.length > 0 && ( + + + {drillLabel} + + {drills.map((drill) => ( + + ))} + + )} {list.items.length === 0 && !list.loading && ( )} @@ -58,21 +165,38 @@ export function SessionListView() {
    - {list.items.map((session) => ( - - - - {sessionTitle(session)} - - - - {formatDateTime(session.start_time)} - - - {volume(session.volume_ml ?? 0)} - - - ))} + {list.items.map((session) => { + const started = new Date(session.start_time); + const dayPath = `/sessions/${started.getFullYear()}/${started.getMonth() + 1}/${started.getDate()}`; + return ( + + + + {sessionTitle(session)} + + + + + {formatDateTime(session.start_time)} + + + + {volume(session.volume_ml ?? 0)} + + + ); + })}
    From ff4a8f418f86515143e6b78ab73c0fb63540fad9 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Tue, 4 Aug 2026 05:09:07 +0000 Subject: [PATCH 30/48] web-ui: add a quiet site footer 'Powered by Kegbot' (linked to kegbot.org) at the bottom of the main layout: paper surface with a hairline top border, small centered muted text, pinned below the content. --- web-ui/components/footer.tsx | 33 +++++++++++++++++++++++++++++++++ web-ui/layout/main-layout.tsx | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 web-ui/components/footer.tsx diff --git a/web-ui/components/footer.tsx b/web-ui/components/footer.tsx new file mode 100644 index 000000000..3b1e8463c --- /dev/null +++ b/web-ui/components/footer.tsx @@ -0,0 +1,33 @@ +import Box from "@mui/material/Box"; +import MuiLink from "@mui/material/Link"; +import Typography from "@mui/material/Typography"; + +/** Quiet site footer. */ +export function Footer() { + return ( + + + Powered by{" "} + + Kegbot + + + + ); +} diff --git a/web-ui/layout/main-layout.tsx b/web-ui/layout/main-layout.tsx index 6fd78a34b..88e08a8aa 100644 --- a/web-ui/layout/main-layout.tsx +++ b/web-ui/layout/main-layout.tsx @@ -13,6 +13,7 @@ import { Link, Outlet, useLocation, useNavigate } from "react-router"; import { ColorModeToggle } from "@/components/color-mode-toggle"; import { useConfig } from "@/components/config-context"; import { useCurrentUser } from "@/components/current-user-context"; +import { Footer } from "@/components/footer"; import { Wordmark } from "@/components/wordmark"; function UserMenu() { @@ -141,6 +142,7 @@ export function MainLayout() { +